diff --git a/Dockerfile b/Dockerfile
index 98d4af4e..ee3410cf 100755
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,3 +1,4 @@
+
# サードパーティーライブラリのダウンロードを行うステージ
# 念のため最終イメージに合わせて ubuntu20.04 にしておく
# 中間イメージなので、サイズは(ビルドするマシンのディスク容量以外は)気にしなくて良い
@@ -28,7 +29,7 @@ RUN ln -s /usr/lib/x86_64-linux-gnu/libamfrt64.so /usr/lib/x86_64-linux-gnu/liba
# サードパーティーライブラリをダウンロード
WORKDIR /thirdparty
-RUN aria2c -x10 https://github.com/tsukumijima/KonomiTV/releases/download/v0.4.0/thirdparty.7z
+RUN aria2c -x10 https://github.com/tsukumijima/KonomiTV/releases/download/v0.5.0/thirdparty.7z
RUN 7z x -y thirdparty.7z
# サードパーティーライブラリに実行権限を付与
@@ -103,7 +104,7 @@ COPY ./server /code/server
# ダウンロードしておいたサードパーティライブラリをコピー
COPY --from=thirdparty-downloader /thirdparty/thirdparty /code/server/thirdparty
-# client の成果物をコピー(dist だけで良い)
+# client の成果物をコピー (dist だけで良い)
COPY --from=client-builder /code/client/dist /code/client/dist
# データベースを必要な場合にアップグレードし、起動
diff --git a/Readme.md b/Readme.md
index 646cbfa0..c8b59a8b 100644
--- a/Readme.md
+++ b/Readme.md
@@ -30,34 +30,10 @@
当然ながら表に泥臭い処理を見せないようにしている分、裏側の実装がそれなりに大変です。細かいところまで調整しているとかなりの手間がかかります。
それでも私が頑張れば私を含めたユーザーの視聴体験が向上するわけで、必要な犠牲かなと思っています。
-
-
-## 備考・注意事項
-
-- 現在 β 版で、まだ実験的なプロダクトです。当初よりかなり安定してきましたが、まだ保証ができる状態ではありません。
- - まだ安定しているとは言えませんが、それでも構わない方のみ導入してください。
- - 使い方などの説明も用意できていないため、自力でトラブルに対処できるエンジニアの方以外には現状おすすめできません。
- - 今後インストーラーを開発予定ですが、後述の通り現時点ではインストール方法がかなり煩雑になっています。他の環境でちゃんと動作するのかさえも微妙です。
- - 完成予想はおろか、TVRemotePlus で実装していた機能に関してもまだ完全にカバーできていないため、現時点で TVRemotePlus を代替できるレベルには達していません。
-- TVRemotePlus の後継という位置づけのソフトですが、それはあくまで「精神的な」ものであり、実際の技術スタックや UI/UX は完全に新規で設計されています。
- - 確かに TVRemotePlus の開発で得られた知見を数多く活用していますし開発者も同じではありますが、ユーザービリティや操作感は大きく異なると思います。
- - TVRemotePlus の技術スタックでは解決不可能なボトルネックを根本的に解消した上で、「同じものを作り直す」のではなく、ゼロから新しいテレビ視聴・録画視聴のユーザー体験を作り上げ、追求したいという想いから開発しています。
- - どちらかというと録画視聴機能の方がメインの予定でいますが、前述のとおり、現時点ではテレビのライブ視聴機能のみの実装です。構想は壮大ですが、全て実装し終えるには年単位で時間がかかるでしょう。
-- 今のところ、スマホ・タブレットは横画面表示のみ対応しています。将来的には縦画面でも崩れずに表示できるようにする予定です。
- - タブレットは Fire HD 10 (2021), iPad mini 4, iPad mini 6 で動作することを確認済みです。
- - スマホ(横画面)は実験的なもので、今後 UI が大幅に変更される可能性があります。
- - iPhone は Media Source Extensions API に対応していないため、現時点では動作しません。
- - 今後 LL-HLS 再生モードを実装する予定ですが、私が iPhone を常用していない事もあり、実装時期は未定です。
- - また、iPad でホーム画面に追加したアイコンから単独アプリのように起動した場合も (PWA)、同様に動作しません。
-- 今後、開発の過程で設定や構成が互換性なく大幅に変更される可能性があります。
-- ユーザービリティなどのフィードバック・不具合報告・Pull Requests (PR) などは歓迎します。
- - 技術スタックはサーバー側が Python + [FastAPI](https://github.com/tiangolo/fastapi) + [Tortoise ORM](https://github.com/tortoise/tortoise-orm) + [Uvicorn](https://github.com/encode/uvicorn) 、クライアント側が Vue.js + [Vuetify](https://github.com/vuetifyjs/vuetify) の SPA です。
- - Vuetify は補助的に利用しているだけで、大部分は独自で書いた SCSS スタイルを適用しています。
- - コメントを多めに書いたりそれなりにきれいにコーディングしているつもりなので、少なくとも TVRemotePlus なんかよりかは読みやすいコードになっている…はず。
- - 他人が見るために書いたものではないのであれですが、一応自分用の [開発資料](https://mango-garlic-eff.notion.site/KonomiTV-90f4b25555c14b9ba0cf5498e6feb1c3) と [DB設計](https://mango-garlic-eff.notion.site/KonomiTV-544e02334c89420fa24804ec70f46b6d) 的なメモを公開しておきます。もし PR される場合などの参考になれば。
-
## 動作環境
+
+
### サーバー
- **Windows PC または Linux PC**
@@ -89,11 +65,35 @@
- PWA モードでは Safari 側のバグにより、テレビのライブストリーミングに失敗します。
- 前述のとおり、iOS Safari への対応は当面の間行いません。
-
+## 備考・注意事項
+
+- 現在 β 版で、まだ実験的なプロダクトです。当初よりかなり安定してきましたが、まだ保証ができる状態ではありません。
+ - まだ安定しているとは言えませんが、それでも構わない方のみ導入してください。
+ - 使い方などの説明も用意できていないため、自力でトラブルに対処できるエンジニアの方以外には現状おすすめできません。
+ - 今後インストーラーを開発予定ですが、後述の通り現時点ではインストール方法がかなり煩雑になっています。他の環境でちゃんと動作するのかさえも微妙です。
+ - 完成予想はおろか、TVRemotePlus で実装していた機能に関してもまだ完全にカバーできていないため、現時点で TVRemotePlus を代替できるレベルには達していません。
+- TVRemotePlus の後継という位置づけのソフトですが、それはあくまで精神的なものであり、実際の技術スタックや UI/UX はゼロから設計されています。
+ - 確かに TVRemotePlus の開発で得られた知見を数多く活用していますし開発者も同じではありますが、ユーザービリティや操作感は大きく異なると思います。
+ - TVRemotePlus の技術スタックでは解決不可能なボトルネックを根本的に解消した上で、「同じものを作り直す」のではなく、ゼロから新しいテレビ視聴・録画視聴のユーザー体験を作り上げ、追求したいという想いから開発しています。
+ - どちらかというと録画視聴機能の方がメインの予定でいますが、前述のとおり、現時点ではテレビのライブ視聴機能のみの実装です。構想は壮大ですが、全て実装し終えるには年単位で時間がかかるでしょう。
+- 今のところ、スマホ・タブレットは横画面表示のみ対応しています。将来的には縦画面でも崩れずに表示できるようにする予定です。
+ - タブレットは Fire HD 10 (2021), iPad mini 4, iPad mini 6 で動作することを確認済みです。
+ - スマホ(横画面)は実験的なもので、今後 UI が大幅に変更される可能性があります。
+ - iPhone は Media Source Extensions API に対応していないため、現時点では動作しません。
+ - 今後 LL-HLS 再生モードを実装する予定ですが、私が iPhone を常用していない事もあり、実装時期は未定です。
+ - また、iPad でホーム画面に追加したアイコンから単独アプリのように起動した場合も (PWA)、同様に動作しません。
+- 今後、開発の過程で設定や構成が互換性なく大幅に変更される可能性があります。
+- ユーザービリティなどのフィードバック・不具合報告・Pull Requests (PR) などは歓迎します。
+ - 技術スタックはサーバー側が Python + [FastAPI](https://github.com/tiangolo/fastapi) + [Tortoise ORM](https://github.com/tortoise/tortoise-orm) + [Uvicorn](https://github.com/encode/uvicorn) 、クライアント側が Vue.js + [Vuetify](https://github.com/vuetifyjs/vuetify) の SPA です。
+ - Vuetify は補助的に利用しているだけで、大部分は独自で書いた SCSS スタイルを適用しています。
+ - コメントを多めに書いたりそれなりにきれいにコーディングしているつもりなので、少なくとも TVRemotePlus なんかよりかは読みやすいコードになっている…はず。
+ - 他人が見るために書いたものではないのであれですが、一応自分用の [開発資料](https://mango-garlic-eff.notion.site/KonomiTV-90f4b25555c14b9ba0cf5498e6feb1c3) と [DB設計](https://mango-garlic-eff.notion.site/KonomiTV-544e02334c89420fa24804ec70f46b6d) 的なメモを公開しておきます。もし PR される場合などの参考になれば。
## 事前準備
-### ドライバ
+
+
+### チューナーのドライバ変更
必須ではありませんが、Windows で PLEX 製チューナーを利用している場合は、事前にドライバを [px4_drv for WinUSB](https://github.com/tsukumijima/px4_drv) に変更しておくことを推奨します。
px4_drv では公式ドライバと比べてチューナーの起動時間が大幅に短縮されています。その分 KonomiTV での視聴までにかかる待機時間も速くなるため(5秒以上速くなる)、より快適に使えます。
@@ -154,10 +154,10 @@ Mirakurun または EDCB から局ロゴを取得できなかった場合は、
> 同梱されているロゴは `server/data/logo/` に `NID(ネットワークID)-SID(サービスID).png` として、256×256 のフォーマットで保存されています。
> チャンネルのネットワーク ID とサービス ID がわかっていれば、自分で局ロゴ画像を作ることも可能です。
-
-
## インストール方法(暫定)
+
+
以下は暫定的なインストール方法です。将来的にはインストーラーでインストールできるようにする予定ですが、現時点では煩雑な手順になっています。
すべての環境でこの通りに進めて動くとは限りません。保証もできないので、すべて自己責任のもとでお願いします。
@@ -184,7 +184,7 @@ VCEEncC に関しても対応済みのつもりですが、手元に環境がな
事前に、後述の設定ファイルの編集を行ってください。最低でも config.yaml が存在する状態にしておく必要があります。
-あとは他のソフトウェアと同様に、`docker-compose up` を実行するだけで、KonomiTV のサーバーが起動します。他のインストール手順は実行不要です。
+あとは他のソフトウェアと同様に、`docker-compose up` を実行するだけで、KonomiTV のサーバーが起動します。これでインストールは完了です。
バックグラウンドで常時起動させたいときは、`docker-compose up -d` と実行してください。
### 1. pipenv のインストール
@@ -314,10 +314,10 @@ rm ./data/database.sqlite
pipenv run aerich upgrade
```
-
-
### 6. 設定ファイルの編集
+
+
ここまで手順通りにやっていれば Readme.md のあるフォルダに config.example.yaml があるはずなので、**同じ階層に config.yaml としてコピーします。**
設定ファイルは YAML ですが、JSON のようなスタイルで書いています。括弧がないとわかりにくいと思うので…
@@ -385,10 +385,10 @@ API ドキュメント (Swagger) は http://localhost:7000/api/docs にありま
とはいえ最低限視聴できる状態にはなっているはずです。まずは使ってみて、もしよければ感想をお聞かせください。
-
-
## 開発者向け情報
+
+
### サーバー
Uvicorn は ASGI サーバーで、FastAPI で書かれた KonomiTV のアプリケーションサーバーを実行します。
@@ -413,6 +413,14 @@ API サーバーは別のポート (7000) でリッスンされているので
クライアントの静的ファイルは、`client/dist/` に配置されているビルド済みのものをサーバー側で配信するように設定されています。
そのため、`yarn build` でクライアントのビルドを更新したのなら、サーバー側で配信されるファイルも同時に更新されることになります。
+## Special Thanks
+
+- [xtne6f](https://github.com/xtne6f) さん: KonomiTV と EDCB を連携するための実装や、[tsreadex](https://github.com/xtne6f/tsreadex) の実装の依頼・開発などで多大なご協力をいただきました。
+- [rigaya](https://github.com/rigaya) さん: QSVEncC・NVEncC・VCEEncC での動作オプションや不具合の対応、エンコードパラメーターのアドバイスなどを支援していただきました。
+- [xqq](https://github.com/xqq/mpegts.js) さん: [mpegts.js](https://github.com/xqq/mpegts.js) で MPEG-TS をダイレクトストリーミングできるようになり、わずか最短 1.5 秒の低遅延でテレビを視聴することができるようになりました。mpegts.js のヘルプやプレイヤーへの導入のサポートなども支援していただきました。
+
+KonomiTV の開発にあたり、ほかにも多くの方からサポートやフィードバックをいただきました。この場をお借りして厚く感謝申し上げます。
+
## License
[MIT License](License.txt)
diff --git a/client/dist/assets/css/app.7b2ec17c.css b/client/dist/assets/css/app.7b2ec17c.css
new file mode 100644
index 00000000..f62b0d3e
--- /dev/null
+++ b/client/dist/assets/css/app.7b2ec17c.css
@@ -0,0 +1 @@
+html{overflow-y:auto!important}body .v-application{min-height:100vh;font-family:YakuHanJPs,Open Sans,Hiragino Sans,Noto Sans JP,sans-serif;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@supports(-webkit-touch-callout:none){body .v-application{min-height:-webkit-fill-available}}body .v-application .v-application--wrap{min-height:100%!important}body main{display:flex;width:100%;min-height:100%}body header+main{padding-top:65px!important}@media screen and (max-height:450px){body header+main{padding-top:48px!important}}body .route-container{height:100%;background:var(--v-background-base)}.v-popper--theme-tooltip .v-popper__inner{display:inline-block;padding:4px 10px;border-radius:4px;background:rgba(47,34,31,.7529411764705882);color:var(--v-text-base);font-size:12px;font-family:YakuHanJPs,Open Sans,Hiragino Sans,Noto Sans JP,sans-serif;font-weight:500;opacity:.9;line-height:22px}.v-popper--theme-tooltip .v-popper__arrow-container{display:none}@media(hover:none){:hover:before{background-color:transparent!important}}::-moz-selection{background-color:rgba(230,79,151,.5019607843137255)}::selection{background-color:rgba(230,79,151,.5019607843137255)}.decorate-symbol{display:inline-flex;justify-content:center;align-items:center;position:relative;padding:0 3px;margin-left:2.5px;margin-right:2.5px;border-radius:4px;color:var(--v-text-base);background:var(--v-primary-base);font-size:.94em}*{scrollbar-color:var(--v-gray-base) var(--v-background-base);scrollbar-width:thin}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-track{background:var(--v-background-base)}::-webkit-scrollbar-thumb{background:var(--v-background-lighten2)}::-webkit-scrollbar-thumb:hover{background:var(--v-gray-base)}.v-menu__content::-webkit-scrollbar{width:12px;height:12px}.v-menu__content::-webkit-scrollbar-thumb{border:solid 3.5px var(--v-background-base)}.v-enter-active,.v-leave-active{transition:opacity .3s}.v-enter,.v-leave-to{opacity:0}.v-enter-active.route-container{position:fixed;top:0;left:0;right:0}.w-25{width:25%}.w-50{width:50%}.w-75{width:75%}.w-100{width:100%}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}body .v-toolbar.header{position:fixed;height:65px!important;z-index:10}body .v-toolbar.header .v-toolbar__content{height:65px!important}@media screen and (max-height:450px){body .v-toolbar.header,body .v-toolbar.header .v-toolbar__content{height:48px!important}}body .v-toolbar.header .logo{padding:12px 8px;border-radius:8px}body .v-toolbar.header .logo__image{display:block}@media screen and (max-height:450px){body .v-toolbar.header .logo__image{height:19.5px}}.navigation-container[data-v-4fdece88]{flex-shrink:0;width:220px;background:var(--v-background-lighten1)}@media screen and (max-height:450px){.navigation-container[data-v-4fdece88]{width:210px}}.navigation-container .navigation[data-v-4fdece88]{position:fixed;width:220px;top:65px;left:0;bottom:-100px;padding-bottom:100px;background:var(--v-background-lighten1);z-index:1}@media screen and (max-height:450px){.navigation-container .navigation[data-v-4fdece88]{top:48px;width:210px}}.navigation-container .navigation .navigation-scroll[data-v-4fdece88]{display:flex;flex-direction:column;height:100%;padding:22px 12px;overflow-y:auto}@media screen and (max-height:450px){.navigation-container .navigation .navigation-scroll[data-v-4fdece88]{padding:20px 12px}}.navigation-container .navigation .navigation-scroll[data-v-4fdece88]::-webkit-scrollbar-track{background:var(--v-background-lighten1)}.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]{display:flex;align-items:center;flex-shrink:0;height:52px;padding-left:16px;padding-right:16px;margin-top:4px;border-radius:11px;font-size:16px;color:var(--v-text-base);transition:background-color .15s;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]{height:44px;padding-left:12px;padding-right:12px;font-size:15px}}.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]:hover{background:var(--v-background-lighten2)}.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]:first-of-type{margin-top:0}.navigation-container .navigation .navigation-scroll .navigation__link--active[data-v-4fdece88]{color:var(--v-primary-base);background:#5b2d3c}.navigation-container .navigation .navigation-scroll .navigation__link--active[data-v-4fdece88]:hover{background:#5b2d3c}.navigation-container .navigation .navigation-scroll .navigation__link .navigation__link-icon[data-v-4fdece88]{margin-right:14px}@media screen and (max-height:450px){.navigation-container .navigation .navigation-scroll .navigation__link .navigation__link-icon[data-v-4fdece88]{margin-right:10px}}.channels-container.channels-container--home .v-tabs-bar{height:54px;background:linear-gradient(180deg,var(--v-background-base) calc(100% - 3px),var(--v-background-lighten1) 3px)}@media screen and (max-height:450px){.channels-container.channels-container--home .v-tabs-bar{height:46px}}.channels-container.channels-container--home .v-tabs-slider-wrapper{height:3px!important;transition:left .3s cubic-bezier(.25,.8,.5,1)}.channels-container.channels-container--home .v-window__container{min-height:calc(100vh - 180px)}@media(hover:none){.channels-container.channels-container--home .v-window__container{min-height:auto}}:root .channels-container.channels-container--home .v-window__container,_::-webkit-full-page-media,_:future{height:inherit!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--home .v-window__container--is-active,_::-webkit-full-page-media,_:future{display:none!important}:root .channels-container.channels-container--home .v-window__container .v-window-item,_::-webkit-full-page-media,_:future{display:none!important;position:static!important;transform:none!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--home .v-window__container .v-window-item--active,_::-webkit-full-page-media,_:future{display:block!important}.channels-container[data-v-6a407b07]{display:flex;flex-direction:column;width:100%;margin-left:21px;margin-right:21px;opacity:1;transition:opacity .4s}.channels-container--loading[data-v-6a407b07]{opacity:0}.channels-container .channels-tab[data-v-6a407b07]{position:sticky;flex:none;top:65px;padding-top:10px;padding-bottom:20px;background:var(--v-background-base);z-index:1}@media screen and (max-height:450px){.channels-container .channels-tab[data-v-6a407b07]{top:47.9px;padding-top:2px;padding-bottom:12px}}.channels-container .channels-tab .channels-tab__item[data-v-6a407b07]{width:98px;padding:0;color:var(--v-text-base)!important;font-size:16px;text-transform:none}@media screen and (max-height:450px){.channels-container .channels-tab .channels-tab__item[data-v-6a407b07]{font-size:15px}}.channels-container .channels-list[data-v-6a407b07]{padding-bottom:32px;background:transparent!important;overflow:inherit}@media screen and (max-height:450px){.channels-container .channels-list[data-v-6a407b07]{padding-bottom:22px}}.channels-container .channels-list .channels[data-v-6a407b07]{display:grid;grid-template-columns:repeat(auto-fit,minmax(365px,1fr));grid-row-gap:16px;grid-column-gap:16px;justify-content:center;background:var(--v-background-base);will-change:transform}@media screen and (min-width:1630px){.channels-container .channels-list .channels[data-v-6a407b07]{grid-template-columns:repeat(auto-fit,445px)}}.channels-container .channels-list .channels.channels--length-0.channels--tab-ピン留め[data-v-6a407b07]{display:flex;min-height:calc(100vh - 180px)}@media screen and (min-width:1008px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:calc(50% + 8px)}}@media screen and (min-width:1389px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:calc(66.66667% + 10.66667px)}}@media screen and (min-width:1630px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:922px}}@media screen and (min-width:2090px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:1383px}}@media screen and (min-width:1389px){.channels-container .channels-list .channels.channels--length-2[data-v-6a407b07]{margin-right:calc(33.33333% + 5.33333px)}}@media screen and (min-width:1630px){.channels-container .channels-list .channels.channels--length-2[data-v-6a407b07]{margin-right:461px}}@media screen and (min-width:2090px){.channels-container .channels-list .channels.channels--length-2[data-v-6a407b07]{margin-right:922px}}@media screen and (min-width:2090px){.channels-container .channels-list .channels.channels--length-3[data-v-6a407b07]{margin-right:461px}}.channels-container .channels-list .channels .channel[data-v-6a407b07]{display:flex;flex-direction:column;position:relative;height:275px;padding:19px 22px;border-radius:16px;color:var(--v-text-base);background:var(--v-background-lighten1);transition:background-color .15s;overflow:hidden;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-width:1007.9px){.channels-container .channels-list .channels .channel[data-v-6a407b07]{height:auto}}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel[data-v-6a407b07]{padding:15px 18px;height:auto;border-radius:15px}}.channels-container .channels-list .channels .channel[data-v-6a407b07]:hover{background:var(--v-background-lighten2)}@media(hover:none){.channels-container .channels-list .channels .channel[data-v-6a407b07]:hover{background:var(--v-background-lighten1)}}.channels-container .channels-list .channels .channel .channel__broadcaster[data-v-6a407b07]{display:flex;height:44px}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster[data-v-6a407b07]{height:38px}}.channels-container .channels-list .channels .channel .channel__broadcaster-icon[data-v-6a407b07]{display:inline-block;flex-shrink:0;width:80px;height:44px;border-radius:5px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster-icon[data-v-6a407b07]{width:64px;height:38px}}.channels-container .channels-list .channels .channel .channel__broadcaster-content[data-v-6a407b07]{display:flex;flex-direction:column;margin-left:16px;width:100%;min-width:0}.channels-container .channels-list .channels .channel .channel__broadcaster-name[data-v-6a407b07]{flex-shrink:0;font-size:18px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster-name[data-v-6a407b07]{font-size:15px}}.channels-container .channels-list .channels .channel .channel__broadcaster-status[data-v-6a407b07]{display:flex;align-items:center;margin-top:2px;font-size:12px;color:var(--v-text-darken1)}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster-status[data-v-6a407b07]{font-size:10px;margin-top:3px}}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force[data-v-6a407b07],.channels-container .channels-list .channels .channel .channel__broadcaster-status-viewers[data-v-6a407b07]{display:flex;align-items:center}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force--festival[data-v-6a407b07]{color:#e7556e}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force--so-many[data-v-6a407b07]{color:#e76b55}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force--many[data-v-6a407b07]{color:#e7a355}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]{display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;top:-5px;right:-5px;width:34px;height:34px;padding:4px;color:var(--v-text-darken1);border-radius:50%;transition:color .15s ease,background-color .15s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]:before{background-color:currentColor;border-radius:inherit;bottom:0;color:inherit;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s cubic-bezier(.4,0,.6,1)}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]:hover{color:var(--v-text-base)}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]:hover:before{opacity:.15}.channels-container .channels-list .channels .channel .channel__broadcaster-pin--pinned[data-v-6a407b07]{color:var(--v-primary-base)}.channels-container .channels-list .channels .channel .channel__broadcaster-pin--pinned[data-v-6a407b07]:hover{color:var(--v-primary-lighten1)}.channels-container .channels-list .channels .channel .channel__program-present[data-v-6a407b07]{display:flex;flex-direction:column}.channels-container .channels-list .channels .channel .channel__program-present-title[data-v-6a407b07]{display:-webkit-box;margin-top:14px;font-size:16px;font-weight:700;font-feature-settings:"palt" 1;letter-spacing:.07em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-present-title[data-v-6a407b07]{margin-top:10px;font-size:14.5px;-webkit-line-clamp:1}}.channels-container .channels-list .channels .channel .channel__program-present-time[data-v-6a407b07]{margin-top:4px;color:var(--v-text-darken1);font-size:13.5px}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-present-time[data-v-6a407b07]{font-size:12px}}.channels-container .channels-list .channels .channel .channel__program-present-description[data-v-6a407b07]{display:-webkit-box;margin-top:8px;color:var(--v-text-darken1);font-size:10.5px;line-height:175%;overflow-wrap:break-word;font-feature-settings:"palt" 1;letter-spacing:.07em;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-present-description[data-v-6a407b07]{margin-top:8px;font-size:10px;-webkit-line-clamp:2}}.channels-container .channels-list .channels .channel .channel__program-following[data-v-6a407b07]{display:flex;flex-direction:column;color:var(--v-text-base);font-size:12.5px}@media screen and (max-width:1007.9px){.channels-container .channels-list .channels .channel .channel__program-following[data-v-6a407b07]{margin-top:6px}}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-following[data-v-6a407b07]{margin-top:6px;font-size:12px}}.channels-container .channels-list .channels .channel .channel__program-following-title[data-v-6a407b07]{display:flex;align-items:center}.channels-container .channels-list .channels .channel .channel__program-following-title-decorate[data-v-6a407b07]{flex-shrink:0;font-weight:700}.channels-container .channels-list .channels .channel .channel__program-following-title-icon[data-v-6a407b07]{flex-shrink:0;margin-left:3px}.channels-container .channels-list .channels .channel .channel__program-following-title-text[data-v-6a407b07]{margin-left:2px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.channels-container .channels-list .channels .channel .channel__program-following-time[data-v-6a407b07]{color:var(--v-text-darken1)}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-following-time[data-v-6a407b07]{font-size:11.5px}}.channels-container .channels-list .channels .channel .channel__progressbar[data-v-6a407b07]{position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--v-gray-base)}.channels-container .channels-list .channels .channel .channel__progressbar-progress[data-v-6a407b07]{height:4px;background:var(--v-primary-base);transition:width .3s}.channels-container.channels-container--watch .v-tabs-bar{position:relative;top:-9px;height:48px;background:linear-gradient(180deg,var(--v-background-base) calc(100% - 3px),var(--v-background-lighten1) 3px)}@media screen and (max-height:450px){.channels-container.channels-container--watch .v-tabs-bar{top:-7px;height:40px}}.channels-container.channels-container--watch .v-tabs-bar .v-slide-group__next,.channels-container.channels-container--watch .v-tabs-bar .v-slide-group__prev{flex:auto!important;min-width:28px!important}.channels-container.channels-container--watch .v-tabs-slider-wrapper{height:3px!important;transition:left .3s cubic-bezier(.25,.8,.5,1)}:root .channels-container.channels-container--watch .v-window__container,_::-webkit-full-page-media,_:future{height:inherit!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--watch .v-window__container--is-active,_::-webkit-full-page-media,_:future{display:none!important}:root .channels-container.channels-container--watch .v-window__container .v-window-item,_::-webkit-full-page-media,_:future{display:none!important;position:static!important;transform:none!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--watch .v-window__container .v-window-item--active,_::-webkit-full-page-media,_:future{display:block!important}.channels-container[data-v-691b389f]{display:flex;flex-direction:column}.channels-container .channels-tab[data-v-691b389f]{position:sticky;flex:none;top:0;padding-left:16px;padding-right:16px;padding-bottom:9px;background:var(--v-background-base);z-index:1}@media screen and (max-height:450px){.channels-container .channels-tab[data-v-691b389f]{padding-bottom:7px;margin-top:12px}}.channels-container .channels-tab .channels-tab__item[data-v-691b389f]{width:88px;padding:0;color:var(--v-text-base)!important;font-size:15px;text-transform:none}@media screen and (max-height:450px){.channels-container .channels-tab .channels-tab__item[data-v-691b389f]{font-size:14.5px}}.channels-container .channels-list-container[data-v-691b389f]{overflow-y:auto}.channels-container .channels-list-container .channels-list[data-v-691b389f]{padding-left:16px;padding-right:10px;padding-bottom:16px;background:transparent!important;overflow:visible!important}.channels-container .channels-list-container .channels-list .channels[data-v-691b389f]{display:flex;justify-content:center;flex-direction:column;will-change:transform}@media screen and (min-width:1630px){.channels-container .channels-list-container .channels-list .channels[data-v-691b389f]{grid-template-columns:repeat(auto-fit,445px)}}.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]{display:flex;flex-direction:column;position:relative;margin-top:12px;padding:10px 12px 14px 12px;border-radius:11px;color:var(--v-text-base);background:var(--v-background-lighten1);transition:background-color .15s;overflow:hidden;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]:first-of-type{margin-top:0}.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]:hover{background:var(--v-background-lighten2)}@media(hover:none){.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]:hover{background:var(--v-background-lighten1)}}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster[data-v-691b389f]{display:flex;height:28px}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-icon[data-v-691b389f]{display:inline-block;flex-shrink:0;width:48px;height:100%;border-radius:4px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-content[data-v-691b389f]{display:flex;align-items:center;margin-left:12px;width:100%;min-width:0}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-name[data-v-691b389f]{font-size:14.5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force[data-v-691b389f]{display:flex;align-items:center;flex-shrink:0;margin-top:2px;margin-left:auto;padding-left:6px;font-size:12px;color:var(--v-text-darken1)}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force--festival[data-v-691b389f]{color:#e7556e}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force--so-many[data-v-691b389f]{color:#e76b55}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force--many[data-v-691b389f]{color:#e7a355}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-present[data-v-691b389f]{display:flex;flex-direction:column}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-present-title[data-v-691b389f]{display:-webkit-box;margin-top:8px;font-size:13.5px;font-weight:700;font-feature-settings:"palt" 1;letter-spacing:.07em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-present-time[data-v-691b389f]{margin-top:4px;color:var(--v-text-darken1);font-size:11.5px}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following[data-v-691b389f]{display:flex;flex-direction:column;margin-top:4px;color:var(--v-text-darken1);font-size:11.5px}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title[data-v-691b389f]{display:flex;align-items:center}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title-decorate[data-v-691b389f]{flex-shrink:0}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title-icon[data-v-691b389f]{flex-shrink:0;margin-left:3px}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title-text[data-v-691b389f]{margin-left:2px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-time[data-v-691b389f]{margin-top:1px}.channels-container .channels-list-container .channels-list .channels .channel .channel__progressbar[data-v-691b389f]{position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--v-gray-base)}.channels-container .channels-list-container .channels-list .channels .channel .channel__progressbar-progress[data-v-691b389f]{height:4px;background:var(--v-primary-base);transition:width .3s}.comment-container[data-v-7575b645]{display:flex;flex-direction:column}.comment-container .comment-header[data-v-7575b645]{display:flex;align-items:center;flex-shrink:0;width:100%;height:26px;padding-left:16px;padding-right:16px}@media screen and (max-height:450px){.comment-container .comment-header[data-v-7575b645]{margin-top:12px}}.comment-container .comment-header__title[data-v-7575b645]{display:flex;align-items:center;font-size:18.5px;font-weight:700;line-height:145%}@media screen and (max-height:450px){.comment-container .comment-header__title[data-v-7575b645]{font-size:16.5px}}.comment-container .comment-header__title-icon[data-v-7575b645]{margin-bottom:-3px}@media screen and (max-height:450px){.comment-container .comment-header__title-icon[data-v-7575b645]{height:17.5px}}.comment-container .comment-header__title-text[data-v-7575b645]{margin-left:12px}.comment-container .comment-header__button[data-v-7575b645]{display:flex;align-items:center;height:26px;padding:0 9px;border-radius:4px;background:var(--v-background-lighten3);font-size:11px;line-height:1.8;letter-spacing:0}.comment-container .comment-list[data-v-7575b645]{width:100%;height:100%;margin-top:16px;padding-left:16px;padding-right:10px;padding-bottom:12px;overflow-y:scroll!important}@media screen and (max-height:450px){.comment-container .comment-list[data-v-7575b645]{margin-top:12px}}.comment-container .comment-list .comment[data-v-7575b645]{display:flex;align-items:center;min-height:28px;padding-top:6px;word-break:break-all}.comment-container .comment-list .comment__text[data-v-7575b645]{font-size:13px}.comment-container .comment-list .comment__time[data-v-7575b645]{flex-shrink:0;margin-left:auto;padding-left:8px;color:var(--v-text-darken1);font-size:13px}.comment-container .comment-scroll-button[data-v-7575b645]{display:flex;align-items:center;justify-content:center;position:absolute;left:0;right:0;bottom:22px;width:42px;height:42px;margin:0 auto;border-radius:50%;background:var(--v-primary-base);transition:background-color .15s,opacity .3s,visibility .3s;visibility:hidden;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.comment-container .comment-scroll-button--display[data-v-7575b645]{opacity:1;visibility:visible}.program-container[data-v-00e07beb]{padding-left:16px;padding-right:16px;overflow-y:auto}.program-container .program-broadcaster[data-v-00e07beb]{display:none;align-items:center;min-width:0}@media screen and (max-height:450px){.program-container .program-broadcaster[data-v-00e07beb]{display:flex;margin-top:16px}}.program-container .program-broadcaster__icon[data-v-00e07beb]{display:inline-block;flex-shrink:0;width:43px;height:24px;border-radius:3px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.program-container .program-broadcaster__icon[data-v-00e07beb]{width:42px;height:23.5px}}.program-container .program-broadcaster__number[data-v-00e07beb]{flex-shrink:0;margin-left:12px;font-size:16.5px}.program-container .program-broadcaster__name[data-v-00e07beb]{margin-left:5px;font-size:16.5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.program-container .program-info .program-info__title[data-v-00e07beb]{font-size:22px;font-weight:700;line-height:145%;font-feature-settings:"palt" 1;letter-spacing:.05em}@media screen and (max-height:450px){.program-container .program-info .program-info__title[data-v-00e07beb]{margin-top:10px;font-size:18px}}.program-container .program-info .program-info__time[data-v-00e07beb]{margin-top:8px;color:var(--v-text-darken1);font-size:14px}@media screen and (max-height:450px){.program-container .program-info .program-info__time[data-v-00e07beb]{font-size:13px}}.program-container .program-info .program-info__description[data-v-00e07beb]{margin-top:12px;color:var(--v-text-darken1);font-size:12px;line-height:168%;overflow-wrap:break-word;font-feature-settings:"palt" 1;letter-spacing:.08em}@media screen and (max-height:450px){.program-container .program-info .program-info__description[data-v-00e07beb]{margin-top:8px;font-size:11px}}.program-container .program-info .program-info__genre-container[data-v-00e07beb]{display:flex;flex-wrap:wrap;margin-top:10px}.program-container .program-info .program-info__genre-container .program-info__genre[data-v-00e07beb]{display:inline-block;font-size:10.5px;padding:3px;margin-top:4px;margin-right:4px;border-radius:4px;background:var(--v-background-lighten2)}@media screen and (max-height:450px){.program-container .program-info .program-info__genre-container .program-info__genre[data-v-00e07beb]{font-size:9px}}.program-container .program-info .program-info__next[data-v-00e07beb]{display:flex;align-items:center;margin-top:18px;color:var(--v-text-base);font-size:14px;font-weight:700}@media screen and (max-height:450px){.program-container .program-info .program-info__next[data-v-00e07beb]{margin-top:14px;font-size:13px}}.program-container .program-info .program-info__next-decorate[data-v-00e07beb]{flex-shrink:0}.program-container .program-info .program-info__next-icon[data-v-00e07beb]{flex-shrink:0;margin-left:3px;font-size:15px}.program-container .program-info .program-info__next-title[data-v-00e07beb]{display:-webkit-box;margin-top:2px;color:var(--v-text-base);font-size:14px;font-weight:700;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media screen and (max-height:450px){.program-container .program-info .program-info__next-title[data-v-00e07beb]{font-size:13px}}.program-container .program-info .program-info__next-time[data-v-00e07beb]{margin-top:3px;color:var(--v-text-darken1);font-size:13.5px}.program-container .program-info .program-info__status[data-v-00e07beb]{display:flex;align-items:center;margin-top:16px;font-size:14px;color:var(--v-text-darken1)}@media screen and (max-height:450px){.program-container .program-info .program-info__status[data-v-00e07beb]{margin-top:10px;font-size:12px}}.program-container .program-info .program-info__status-force[data-v-00e07beb],.program-container .program-info .program-info__status-viewers[data-v-00e07beb]{display:flex;align-items:center}.program-container .program-info .program-info__status-force--festival[data-v-00e07beb]{color:#e7556e}.program-container .program-info .program-info__status-force--so-many[data-v-00e07beb]{color:#e76b55}.program-container .program-info .program-info__status-force--many[data-v-00e07beb]{color:#e7a355}.program-container .program-detail-container[data-v-00e07beb]{margin-top:24px;margin-bottom:24px}@media screen and (max-height:450px){.program-container .program-detail-container[data-v-00e07beb]{margin-top:20px}}.program-container .program-detail-container .program-detail[data-v-00e07beb]{margin-top:16px}.program-container .program-detail-container .program-detail .program-detail__heading[data-v-00e07beb]{font-size:18px}@media screen and (max-height:450px){.program-container .program-detail-container .program-detail .program-detail__heading[data-v-00e07beb]{font-size:16px}}.program-container .program-detail-container .program-detail .program-detail__text[data-v-00e07beb]{margin-top:8px;color:var(--v-text-darken1);font-size:12px;line-height:168%;overflow-wrap:break-word;white-space:pre-wrap;font-feature-settings:"palt" 1;letter-spacing:.08em}@media screen and (max-height:450px){.program-container .program-detail-container .program-detail .program-detail__text[data-v-00e07beb]{font-size:11px}}.watch-player__dplayer svg circle,.watch-player__dplayer svg path{fill:var(--v-text-base)!important}.watch-player__dplayer .dplayer-video-wrap{background:transparent!important}.watch-player__dplayer .dplayer-video-wrap .dplayer-video-wrap-aspect{transition:opacity .4s cubic-bezier(.4,.38,.49,.94);opacity:1}.watch-player__dplayer .dplayer-video-wrap .dplayer-danmaku{top:50%;left:50%;right:auto;bottom:auto;transform:translate(-50%,-50%);width:100%;max-width:100%;max-height:calc(100% - var(--comment-area-vertical-margin, 0px));aspect-ratio:var(--comment-area-aspect-ratio,16/9);transition:max-height .5s cubic-bezier(.42,.19,.53,.87),aspect-ratio .5s cubic-bezier(.42,.19,.53,.87);will-change:aspect-ratio;overflow:hidden}.watch-player__dplayer .dplayer-video-wrap .dplayer-danloading{display:none!important}.watch-player__dplayer .dplayer-controller-mask{height:82px!important;background:linear-gradient(180deg,transparent,var(--v-background-base))!important;opacity:0!important;visibility:hidden}@media screen and (max-height:450px){.watch-player__dplayer .dplayer-controller-mask{height:66px!important}}.watch-player__dplayer .dplayer-controller{padding-left:86px!important;padding-bottom:6px!important;transition:opacity .3s ease,visibility .3s ease;opacity:0!important;visibility:hidden}.watch-player__dplayer .dplayer-controller .dplayer-live-badge,.watch-player__dplayer .dplayer-controller .dplayer-time{color:var(--v-text-base)!important}.watch-player__dplayer .dplayer-controller .dplayer-volume-bar{background:var(--v-text-base)!important}.watch-player__dplayer .dplayer-controller .dplayer-icons{bottom:auto!important}.watch-player__dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right{right:22px!important}@media screen and (max-height:450px){.watch-player__dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right{right:11px!important}}.watch-player__dplayer .dplayer-controller .dplayer-icons .dplayer-icon.dplayer-full-in-icon{display:none!important}.watch-player__dplayer .dplayer-controller .dplayer-comment-box{transition:opacity .3s ease,visibility .3s ease}.watch-player__dplayer .dplayer-notice{padding:16px 22px!important;margin-right:30px;border-radius:4px!important;font-size:15px!important;line-height:1.6}@media(max-width:960px){.watch-player__dplayer .dplayer-notice{padding:12px 16px!important;margin-right:16px;font-size:13.5px!important}}.watch-player__dplayer .dplayer-info-panel{transition:top .3s,left .3s}.watch-player__dplayer .dplayer-setting-box .dplayer-setting-audio-panel .dplayer-setting-audio-item.dplayer-setting-audio-item--disabled{pointer-events:none}.watch-player__dplayer .dplayer-setting-box .dplayer-setting-audio-panel .dplayer-setting-audio-item.dplayer-setting-audio-item--disabled .dplayer-label{color:#aaa}.watch-player__dplayer .dplayer-comment-setting-box .dplayer-comment-setting-title{color:var(--v-text-base)}.watch-player__dplayer .dplayer-comment-setting-box .dplayer-comment-setting-type span{border:1px solid --v-text-base}.watch-player__dplayer .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked+span{background:var(--v-text-base)}.watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:98px!important}@media screen and (max-height:450px){.watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:74px!important}}.watch-player__dplayer.dplayer-mobile.dplayer-hide-controller .dplayer-controller{transform:none!important}.watch-player--loading .dplayer-video-wrap-aspect{opacity:0!important}:root .dplayer-icon:hover .dplayer-icon-content,_::-webkit-full-page-media,_:future{opacity:.8!important}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask{opacity:1!important;visibility:visible!important}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask .dplayer-comment-box,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller .dplayer-comment-box{left:88px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask .dplayer-comment-box,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller .dplayer-comment-box{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask .dplayer-comment-box,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller .dplayer-comment-box{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:98px;bottom:62px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-info-panel{top:82px;left:98px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-info-panel{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-info-panel{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-comment-setting-box{left:88px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-comment-setting-box{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-comment-setting-box{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-mobile .dplayer-mobile-icon-wrap{opacity:.7!important;visibility:visible!important}.watch-container:not(.watch-container--control-display) .watch-player__dplayer .dplayer-danmaku{max-height:100%!important;aspect-ratio:16/9!important}.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-controller{padding-left:20px!important}.watch-container.watch-container--fullscreen .watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:30px!important}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen .watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:16px!important}}.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-box,.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-setting-box{left:20px!important}@media(max-width:960px){.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-box,.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-setting-box{left:16px!important}}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-box,.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-setting-box{left:16px!important}}.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-info-panel,.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:30px!important}@media(max-width:960px){.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-info-panel,.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:16px!important}}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-info-panel,.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:16px!important}}.shortcut-key[data-v-8b237ea4]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;min-width:32px;height:28px;padding:0 8px;border-radius:5px;background-color:var(--v-background-lighten2);font-size:14.5px}.shortcut-key-plus[data-v-8b237ea4]{display:inline-block;margin:0 5px;flex-shrink:0}.route-container[data-v-8b237ea4]{height:100vh!important;background:var(--v-black-base)!important;overflow:hidden}@supports(-webkit-touch-callout:none){.route-container[data-v-8b237ea4]{height:-webkit-fill-available!important}}.watch-container[data-v-8b237ea4]{display:flex;width:calc(100% + 352px);height:100%;transition:width .4s cubic-bezier(.26,.68,.55,.99)}@media screen and (max-height:450px){.watch-container[data-v-8b237ea4]{width:calc(100% + 310px)}}.watch-container.watch-container--control-display .watch-content[data-v-8b237ea4]{cursor:auto!important}.watch-container.watch-container--control-display .watch-header[data-v-8b237ea4],.watch-container.watch-container--control-display .watch-navigation[data-v-8b237ea4],.watch-container.watch-container--control-display .watch-player__button[data-v-8b237ea4]{opacity:1!important;visibility:visible!important}.watch-container.watch-container--panel-display[data-v-8b237ea4]{width:100%}.watch-container.watch-container--panel-display .switch-button-panel .switch-button-icon[data-v-8b237ea4]{color:var(--v-primary-base)}.watch-container.watch-container--fullscreen .watch-navigation[data-v-8b237ea4]{display:none}.watch-container.watch-container--fullscreen .watch-content .watch-header[data-v-8b237ea4]{padding-left:30px}@media(max-width:960px){.watch-container.watch-container--fullscreen .watch-content .watch-header[data-v-8b237ea4]{padding-left:16px}}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen .watch-content .watch-header[data-v-8b237ea4]{padding-left:16px}}.watch-container .watch-navigation[data-v-8b237ea4]{display:flex;flex-direction:column;position:fixed;width:68px;top:0;left:0;bottom:-100px;padding:18px 8px 122px;background:rgba(47,34,31,.5019607843137255);transition:opacity .3s,visibility .3s;opacity:0;visibility:hidden;z-index:2}@media screen and (max-height:450px){.watch-container .watch-navigation[data-v-8b237ea4]{width:56px;padding:18px 6px 122px}}.watch-container .watch-navigation .watch-navigation__icon[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;height:52px;margin-bottom:17px;border-radius:11px;font-size:16px;color:var(--v-text-base);transition:background-color .15s;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__icon[data-v-8b237ea4]{height:32px;border-radius:10px}}@media screen and (max-height:450px){.watch-container .watch-navigation div.spacer[data-v-8b237ea4]{display:none}}.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;height:52px;border-radius:11px;font-size:16px;color:var(--v-text-base);transition:background-color .15s;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]{height:44px;border-radius:10px}.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]:last-child,.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]:nth-last-child(2){display:none}}.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]:hover{background:rgba(67,53,50,.6274509803921569)}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__link-icon[data-v-8b237ea4]{width:26px;height:26px}}.watch-container .watch-navigation .watch-navigation__link--active[data-v-8b237ea4]{color:var(--v-primary-base);background:rgba(67,53,50,.6274509803921569)}.watch-container .watch-navigation .watch-navigation__link+.watch-navigation__link[data-v-8b237ea4]{margin-top:4px}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__link+.watch-navigation__link[data-v-8b237ea4]{margin-top:auto}}.watch-container .watch-content[data-v-8b237ea4]{display:flex;position:relative;width:100%;cursor:none}.watch-container .watch-content .watch-header[data-v-8b237ea4]{display:flex;align-items:center;position:absolute;top:0;left:0;width:100%;height:82px;padding-left:98px;padding-right:30px;background:linear-gradient(180deg,var(--v-background-base),transparent);transition:opacity .3s,visibility .3s;opacity:0;visibility:hidden;z-index:1}@media(max-width:960px){.watch-container .watch-content .watch-header[data-v-8b237ea4]{padding-left:84px;padding-right:16px}}@media screen and (max-height:450px){.watch-container .watch-content .watch-header[data-v-8b237ea4]{height:66px;padding-left:72px}}.watch-container .watch-content .watch-header .watch-header__broadcaster[data-v-8b237ea4]{display:inline-block;flex-shrink:0;width:64px;height:36px;border-radius:5px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__broadcaster[data-v-8b237ea4]{width:48px;height:28px;border-radius:4px}}.watch-container .watch-content .watch-header .watch-header__program-title[data-v-8b237ea4]{margin-left:18px;font-size:18px;font-weight:700;font-feature-settings:"palt" 1;letter-spacing:.05em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__program-title[data-v-8b237ea4]{margin-left:12px}}@media screen and (max-height:450px){.watch-container .watch-content .watch-header .watch-header__program-title[data-v-8b237ea4]{font-size:16px}}.watch-container .watch-content .watch-header .watch-header__program-time[data-v-8b237ea4]{flex-shrink:0;margin-left:16px;font-size:15px}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__program-time[data-v-8b237ea4]{margin-left:8px}}@media screen and (max-height:450px){.watch-container .watch-content .watch-header .watch-header__program-time[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-content .watch-header .watch-header__now[data-v-8b237ea4]{flex-shrink:0;margin-left:16px;font-size:13px}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__now[data-v-8b237ea4]{display:none}}.watch-container .watch-content .watch-player[data-v-8b237ea4]{display:flex;position:relative;width:100%;height:100%;background-size:contain;background-position:50%}.watch-container .watch-content .watch-player .watch-player__background[data-v-8b237ea4]{position:absolute;top:50%;left:50%;width:100%;max-width:100%;max-height:100%;padding-top:min(56.25%,100vh);aspect-ratio:16/9;background-blend-mode:overlay;background-color:rgba(14,14,18,.35);background-size:cover;background-image:none;transform:translate(-50%,-50%);opacity:0;visibility:hidden;will-change:opacity;transition:opacity .4s cubic-bezier(.4,.38,.49,.94),visibility .4s cubic-bezier(.4,.38,.49,.94)}.watch-container .watch-content .watch-player .watch-player__background--display[data-v-8b237ea4]{opacity:1;visibility:visible}.watch-container .watch-content .watch-player .watch-player__background .watch-player__background-logo[data-v-8b237ea4]{display:inline-block;position:absolute;height:34px;right:56px;bottom:44px;filter:drop-shadow(0 0 5px var(--v-black-base))}@media(max-width:1264px){.watch-container .watch-content .watch-player .watch-player__background .watch-player__background-logo[data-v-8b237ea4]{height:30px;right:34px;bottom:30px}}@media(max-width:960px){.watch-container .watch-content .watch-player .watch-player__background .watch-player__background-logo[data-v-8b237ea4]{height:25px;right:30px;bottom:24px}}.watch-container .watch-content .watch-player .watch-player__dplayer[data-v-8b237ea4]{width:100%}.watch-container .watch-content .watch-player .watch-player__button[data-v-8b237ea4]{display:flex;justify-content:space-around;flex-direction:column;position:absolute;top:50%;right:28px;height:190px;transform:translateY(-50%);opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s}@media screen and (max-height:450px){.watch-container .watch-content .watch-player .watch-player__button[data-v-8b237ea4]{right:15px;height:155px}}.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;width:48px;height:48px;color:var(--v-text-base);background:rgba(47,34,31,.7529411764705882);border-radius:7px;transition:background-color .15s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-height:450px){.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]{width:38px;height:38px;border-radius:5px}}.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]:hover{background:rgba(47,34,31,.9411764705882353)}@media(hover:none){.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]:hover{background:rgba(47,34,31,.7529411764705882)}}@media screen and (max-height:450px){.watch-container .watch-content .watch-player .watch-player__button .switch-button svg[data-v-8b237ea4]{height:27px}}.watch-container .watch-content .watch-player .watch-player__button .switch-button .switch-button-icon[data-v-8b237ea4]{position:relative}.watch-container .watch-content .watch-player .watch-player__button .switch-button-up>.switch-button-icon[data-v-8b237ea4]{top:6px}.watch-container .watch-content .watch-player .watch-player__button .switch-button-panel>.switch-button-icon[data-v-8b237ea4]{top:1.5px;transition:color .4s cubic-bezier(.26,.68,.55,.99)}.watch-container .watch-content .watch-player .watch-player__button .switch-button-down>.switch-button-icon[data-v-8b237ea4]{bottom:4px}.watch-container .watch-panel[data-v-8b237ea4]{display:flex;flex-direction:column;flex-shrink:0;width:352px;height:100%;background:var(--v-background-base)}@media screen and (max-height:450px){.watch-container .watch-panel[data-v-8b237ea4]{width:310px}}.watch-container .watch-panel .watch-panel__header[data-v-8b237ea4]{display:flex;align-items:center;flex-shrink:0;width:100%;height:70px;padding-left:16px;padding-right:16px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header[data-v-8b237ea4]{display:none}}.watch-container .watch-panel .watch-panel__header .panel-close-button[data-v-8b237ea4]{display:flex;position:relative;align-items:center;flex-shrink:0;left:-4px;height:35px;padding:0 4px;border-radius:5px;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-close-button[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-panel .watch-panel__header .panel-close-button__icon[data-v-8b237ea4]{position:relative;left:-4px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-close-button__icon[data-v-8b237ea4]{height:22px}}.watch-container .watch-panel .watch-panel__header .panel-close-button__text[data-v-8b237ea4]{font-weight:700}.watch-container .watch-panel .watch-panel__header .panel-broadcaster[data-v-8b237ea4]{display:flex;align-items:center;min-width:0;margin-left:16px}.watch-container .watch-panel .watch-panel__header .panel-broadcaster__icon[data-v-8b237ea4]{display:inline-block;flex-shrink:0;width:43px;height:24px;border-radius:3px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-broadcaster__icon[data-v-8b237ea4]{width:38px;height:22px}}.watch-container .watch-panel .watch-panel__header .panel-broadcaster__number[data-v-8b237ea4]{flex-shrink:0;margin-left:8px;font-size:16px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-broadcaster__number[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-panel .watch-panel__header .panel-broadcaster__name[data-v-8b237ea4]{margin-left:5px;font-size:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-broadcaster__name[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-panel .watch-panel__content-container[data-v-8b237ea4]{position:relative;height:100%}.watch-container .watch-panel .watch-panel__content-container .watch-panel__content[data-v-8b237ea4]{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--v-background-base);transition:opacity .3s,visibility .3s;opacity:0;visibility:hidden}.watch-container .watch-panel .watch-panel__content-container .watch-panel__content--active[data-v-8b237ea4]{opacity:1;visibility:visible}.watch-container .watch-panel .watch-panel__navigation[data-v-8b237ea4]{display:flex;align-items:center;justify-content:space-evenly;flex-shrink:0;height:77px;background:var(--v-background-lighten1)}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__navigation[data-v-8b237ea4]{height:56px}}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;flex-direction:column;width:66px;height:56px;padding:6px 5.5px;border-radius:5px;color:var(--v-text-base);box-sizing:content-box;transition:color .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button[data-v-8b237ea4]{height:42px;padding:6px 5.5px 4px}}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button--active[data-v-8b237ea4]{color:var(--v-primary-base)}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button__icon[data-v-8b237ea4]{height:30px}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button__text[data-v-8b237ea4]{margin-top:5px;font-size:13px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button__text[data-v-8b237ea4]{margin-top:2px;font-size:12px}}.settings-container[data-v-18637a38]{width:100%}.settings-container .settings-navigation[data-v-18637a38]{position:sticky;top:85px!important}.settings-container .settings-navigation .v-list-item--link[data-v-18637a38]:before{border-radius:11px!important}.settings-container .settings[data-v-18637a38]{width:100%;border-radius:11px!important}.settings-container .settings[data-v-18637a38] .settings__heading{display:flex;align-items:center;font-size:22px}.settings-container .settings[data-v-18637a38] .settings__content{margin-top:24px}.settings-container .settings[data-v-18637a38] .settings__content .settings__item{display:flex;flex-direction:column;margin-top:24px}.settings-container .settings[data-v-18637a38] .settings__content .settings__item-heading{color:var(--v-text-base);font-size:16.5px}.settings-container .settings[data-v-18637a38] .settings__content .settings__item-label{margin-top:6px;color:var(--v-text-darken1);font-size:13.5px;line-height:1.6}.settings-container .settings[data-v-18637a38] .settings__content .settings__item-form{margin-top:12px}
\ No newline at end of file
diff --git a/client/dist/assets/css/app.7dbdd8c6.css b/client/dist/assets/css/app.7dbdd8c6.css
deleted file mode 100644
index b9431921..00000000
--- a/client/dist/assets/css/app.7dbdd8c6.css
+++ /dev/null
@@ -1 +0,0 @@
-html{overflow-y:auto!important}body .v-application{min-height:100vh;font-family:YakuHanJPs,Open Sans,Hiragino Sans,Noto Sans JP,sans-serif;font-weight:500;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@supports(-webkit-touch-callout:none){body .v-application{min-height:-webkit-fill-available}}body .v-application .v-application--wrap{min-height:100%!important}body main{display:flex;width:100%;min-height:100%}body header+main{padding-top:65px!important}@media screen and (max-height:450px){body header+main{padding-top:48px!important}}body .route-container{height:100%;background:var(--v-background-base)}.v-popper--theme-tooltip .v-popper__inner{display:inline-block;padding:4px 10px;border-radius:4px;background:rgba(47,34,31,.7529411764705882);color:var(--v-text-base);font-size:12px;font-family:YakuHanJPs,Open Sans,Hiragino Sans,Noto Sans JP,sans-serif;font-weight:500;opacity:.9;line-height:22px}.v-popper--theme-tooltip .v-popper__arrow-container{display:none}@media(hover:none){:hover:before{background-color:transparent!important}}::-moz-selection{background-color:rgba(230,79,151,.5019607843137255)}::selection{background-color:rgba(230,79,151,.5019607843137255)}.decorate-symbol{display:inline-flex;justify-content:center;align-items:center;position:relative;padding:0 3px;margin-left:2.5px;margin-right:2.5px;border-radius:4px;color:var(--v-text-base);background:var(--v-primary-base);font-size:.94em}*{scrollbar-color:var(--v-gray-base) var(--v-background-base);scrollbar-width:thin}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-track{background:var(--v-background-base)}::-webkit-scrollbar-thumb{background:var(--v-background-lighten2)}::-webkit-scrollbar-thumb:hover{background:var(--v-gray-base)}.v-menu__content{overflow:hidden}.v-menu__content::-webkit-scrollbar{width:12px;height:12px}.v-menu__content::-webkit-scrollbar-thumb{border:solid 3.5px var(--v-background-base)}.v-enter-active,.v-leave-active{transition:opacity .3s}.v-enter,.v-leave-to{opacity:0}.v-enter-active.route-container{position:fixed;top:0;left:0;right:0}.w-25{width:25%}.w-50{width:50%}.w-75{width:75%}.w-100{width:100%}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}body .v-toolbar.header{position:fixed;height:65px!important;z-index:10}body .v-toolbar.header .v-toolbar__content{height:65px!important}@media screen and (max-height:450px){body .v-toolbar.header,body .v-toolbar.header .v-toolbar__content{height:48px!important}}body .v-toolbar.header .logo{padding:12px 8px;border-radius:8px}body .v-toolbar.header .logo__image{display:block}@media screen and (max-height:450px){body .v-toolbar.header .logo__image{height:19.5px}}.navigation-container[data-v-4fdece88]{flex-shrink:0;width:220px;background:var(--v-background-lighten1)}@media screen and (max-height:450px){.navigation-container[data-v-4fdece88]{width:210px}}.navigation-container .navigation[data-v-4fdece88]{position:fixed;width:220px;top:65px;left:0;bottom:-100px;padding-bottom:100px;background:var(--v-background-lighten1);z-index:1}@media screen and (max-height:450px){.navigation-container .navigation[data-v-4fdece88]{top:48px;width:210px}}.navigation-container .navigation .navigation-scroll[data-v-4fdece88]{display:flex;flex-direction:column;height:100%;padding:22px 12px;overflow-y:auto}@media screen and (max-height:450px){.navigation-container .navigation .navigation-scroll[data-v-4fdece88]{padding:20px 12px}}.navigation-container .navigation .navigation-scroll[data-v-4fdece88]::-webkit-scrollbar-track{background:var(--v-background-lighten1)}.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]{display:flex;align-items:center;flex-shrink:0;height:52px;padding-left:16px;padding-right:16px;margin-top:4px;border-radius:11px;font-size:16px;color:var(--v-text-base);transition:background-color .15s;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]{height:44px;padding-left:12px;padding-right:12px;font-size:15px}}.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]:hover{background:var(--v-background-lighten2)}.navigation-container .navigation .navigation-scroll .navigation__link[data-v-4fdece88]:first-of-type{margin-top:0}.navigation-container .navigation .navigation-scroll .navigation__link--active[data-v-4fdece88]{color:var(--v-primary-base);background:#5b2d3c}.navigation-container .navigation .navigation-scroll .navigation__link--active[data-v-4fdece88]:hover{background:#5b2d3c}.navigation-container .navigation .navigation-scroll .navigation__link .navigation__link-icon[data-v-4fdece88]{margin-right:14px}@media screen and (max-height:450px){.navigation-container .navigation .navigation-scroll .navigation__link .navigation__link-icon[data-v-4fdece88]{margin-right:10px}}.channels-container.channels-container--home .v-tabs-bar{height:54px;background:linear-gradient(180deg,var(--v-background-base) calc(100% - 3px),var(--v-background-lighten1) 3px)}@media screen and (max-height:450px){.channels-container.channels-container--home .v-tabs-bar{height:46px}}.channels-container.channels-container--home .v-tabs-slider-wrapper{height:3px!important;transition:left .3s cubic-bezier(.25,.8,.5,1)}.channels-container.channels-container--home .v-window__container{min-height:calc(100vh - 180px)}@media(hover:none){.channels-container.channels-container--home .v-window__container{min-height:auto}}:root .channels-container.channels-container--home .v-window__container,_::-webkit-full-page-media,_:future{height:inherit!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--home .v-window__container--is-active,_::-webkit-full-page-media,_:future{display:none!important}:root .channels-container.channels-container--home .v-window__container .v-window-item,_::-webkit-full-page-media,_:future{display:none!important;position:static!important;transform:none!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--home .v-window__container .v-window-item--active,_::-webkit-full-page-media,_:future{display:block!important}.channels-container[data-v-6a407b07]{display:flex;flex-direction:column;width:100%;margin-left:21px;margin-right:21px;opacity:1;transition:opacity .4s}.channels-container--loading[data-v-6a407b07]{opacity:0}.channels-container .channels-tab[data-v-6a407b07]{position:sticky;flex:none;top:65px;padding-top:10px;padding-bottom:20px;background:var(--v-background-base);z-index:1}@media screen and (max-height:450px){.channels-container .channels-tab[data-v-6a407b07]{top:47.9px;padding-top:2px;padding-bottom:12px}}.channels-container .channels-tab .channels-tab__item[data-v-6a407b07]{width:98px;padding:0;color:var(--v-text-base)!important;font-size:16px;text-transform:none}@media screen and (max-height:450px){.channels-container .channels-tab .channels-tab__item[data-v-6a407b07]{font-size:15px}}.channels-container .channels-list[data-v-6a407b07]{padding-bottom:32px;background:transparent!important;overflow:inherit}@media screen and (max-height:450px){.channels-container .channels-list[data-v-6a407b07]{padding-bottom:22px}}.channels-container .channels-list .channels[data-v-6a407b07]{display:grid;grid-template-columns:repeat(auto-fit,minmax(365px,1fr));grid-row-gap:16px;grid-column-gap:16px;justify-content:center;background:var(--v-background-base);will-change:transform}@media screen and (min-width:1630px){.channels-container .channels-list .channels[data-v-6a407b07]{grid-template-columns:repeat(auto-fit,445px)}}.channels-container .channels-list .channels.channels--length-0.channels--tab-ピン留め[data-v-6a407b07]{display:flex;min-height:calc(100vh - 180px)}@media screen and (min-width:1008px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:calc(50% + 8px)}}@media screen and (min-width:1389px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:calc(66.66667% + 10.66667px)}}@media screen and (min-width:1630px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:922px}}@media screen and (min-width:2090px){.channels-container .channels-list .channels.channels--length-1[data-v-6a407b07]{margin-right:1383px}}@media screen and (min-width:1389px){.channels-container .channels-list .channels.channels--length-2[data-v-6a407b07]{margin-right:calc(33.33333% + 5.33333px)}}@media screen and (min-width:1630px){.channels-container .channels-list .channels.channels--length-2[data-v-6a407b07]{margin-right:461px}}@media screen and (min-width:2090px){.channels-container .channels-list .channels.channels--length-2[data-v-6a407b07]{margin-right:922px}}@media screen and (min-width:2090px){.channels-container .channels-list .channels.channels--length-3[data-v-6a407b07]{margin-right:461px}}.channels-container .channels-list .channels .channel[data-v-6a407b07]{display:flex;flex-direction:column;position:relative;height:275px;padding:19px 22px;border-radius:16px;color:var(--v-text-base);background:var(--v-background-lighten1);transition:background-color .15s;overflow:hidden;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-width:1007.9px){.channels-container .channels-list .channels .channel[data-v-6a407b07]{height:auto}}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel[data-v-6a407b07]{padding:15px 18px;height:auto;border-radius:15px}}.channels-container .channels-list .channels .channel[data-v-6a407b07]:hover{background:var(--v-background-lighten2)}@media(hover:none){.channels-container .channels-list .channels .channel[data-v-6a407b07]:hover{background:var(--v-background-lighten1)}}.channels-container .channels-list .channels .channel .channel__broadcaster[data-v-6a407b07]{display:flex;height:44px}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster[data-v-6a407b07]{height:38px}}.channels-container .channels-list .channels .channel .channel__broadcaster-icon[data-v-6a407b07]{display:inline-block;flex-shrink:0;width:80px;height:44px;border-radius:5px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster-icon[data-v-6a407b07]{width:64px;height:38px}}.channels-container .channels-list .channels .channel .channel__broadcaster-content[data-v-6a407b07]{display:flex;flex-direction:column;margin-left:16px;width:100%;min-width:0}.channels-container .channels-list .channels .channel .channel__broadcaster-name[data-v-6a407b07]{flex-shrink:0;font-size:18px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster-name[data-v-6a407b07]{font-size:15px}}.channels-container .channels-list .channels .channel .channel__broadcaster-status[data-v-6a407b07]{display:flex;align-items:center;margin-top:2px;font-size:12px;color:var(--v-text-darken1)}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__broadcaster-status[data-v-6a407b07]{font-size:10px;margin-top:3px}}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force[data-v-6a407b07],.channels-container .channels-list .channels .channel .channel__broadcaster-status-viewers[data-v-6a407b07]{display:flex;align-items:center}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force--festival[data-v-6a407b07]{color:#e7556e}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force--so-many[data-v-6a407b07]{color:#e76b55}.channels-container .channels-list .channels .channel .channel__broadcaster-status-force--many[data-v-6a407b07]{color:#e7a355}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]{display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;top:-5px;right:-5px;width:34px;height:34px;padding:4px;color:var(--v-text-darken1);border-radius:50%;transition:color .15s ease,background-color .15s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]:before{background-color:currentColor;border-radius:inherit;bottom:0;color:inherit;content:"";left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .2s cubic-bezier(.4,0,.6,1)}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]:hover{color:var(--v-text-base)}.channels-container .channels-list .channels .channel .channel__broadcaster-pin[data-v-6a407b07]:hover:before{opacity:.15}.channels-container .channels-list .channels .channel .channel__broadcaster-pin--pinned[data-v-6a407b07]{color:var(--v-primary-base)}.channels-container .channels-list .channels .channel .channel__broadcaster-pin--pinned[data-v-6a407b07]:hover{color:var(--v-primary-lighten1)}.channels-container .channels-list .channels .channel .channel__program-present[data-v-6a407b07]{display:flex;flex-direction:column}.channels-container .channels-list .channels .channel .channel__program-present-title[data-v-6a407b07]{display:-webkit-box;margin-top:14px;font-size:16px;font-weight:700;font-feature-settings:"palt" 1;letter-spacing:.07em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-present-title[data-v-6a407b07]{margin-top:10px;font-size:14.5px;-webkit-line-clamp:1}}.channels-container .channels-list .channels .channel .channel__program-present-time[data-v-6a407b07]{margin-top:4px;color:var(--v-text-darken1);font-size:13.5px}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-present-time[data-v-6a407b07]{font-size:12px}}.channels-container .channels-list .channels .channel .channel__program-present-description[data-v-6a407b07]{display:-webkit-box;margin-top:8px;color:var(--v-text-darken1);font-size:10.5px;line-height:175%;overflow-wrap:break-word;font-feature-settings:"palt" 1;letter-spacing:.07em;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-present-description[data-v-6a407b07]{margin-top:8px;font-size:10px;-webkit-line-clamp:2}}.channels-container .channels-list .channels .channel .channel__program-following[data-v-6a407b07]{display:flex;flex-direction:column;color:var(--v-text-base);font-size:12.5px}@media screen and (max-width:1007.9px){.channels-container .channels-list .channels .channel .channel__program-following[data-v-6a407b07]{margin-top:6px}}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-following[data-v-6a407b07]{margin-top:6px;font-size:12px}}.channels-container .channels-list .channels .channel .channel__program-following-title[data-v-6a407b07]{display:flex;align-items:center}.channels-container .channels-list .channels .channel .channel__program-following-title-decorate[data-v-6a407b07]{flex-shrink:0;font-weight:700}.channels-container .channels-list .channels .channel .channel__program-following-title-icon[data-v-6a407b07]{flex-shrink:0;margin-left:3px}.channels-container .channels-list .channels .channel .channel__program-following-title-text[data-v-6a407b07]{margin-left:2px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.channels-container .channels-list .channels .channel .channel__program-following-time[data-v-6a407b07]{color:var(--v-text-darken1)}@media screen and (max-height:450px){.channels-container .channels-list .channels .channel .channel__program-following-time[data-v-6a407b07]{font-size:11.5px}}.channels-container .channels-list .channels .channel .channel__progressbar[data-v-6a407b07]{position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--v-gray-base)}.channels-container .channels-list .channels .channel .channel__progressbar-progress[data-v-6a407b07]{height:4px;background:var(--v-primary-base);transition:width .3s}.channels-container.channels-container--watch .v-tabs-bar{position:relative;top:-9px;height:48px;background:linear-gradient(180deg,var(--v-background-base) calc(100% - 3px),var(--v-background-lighten1) 3px)}@media screen and (max-height:450px){.channels-container.channels-container--watch .v-tabs-bar{top:-7px;height:40px}}.channels-container.channels-container--watch .v-tabs-bar .v-slide-group__next,.channels-container.channels-container--watch .v-tabs-bar .v-slide-group__prev{flex:auto!important;min-width:28px!important}.channels-container.channels-container--watch .v-tabs-slider-wrapper{height:3px!important;transition:left .3s cubic-bezier(.25,.8,.5,1)}:root .channels-container.channels-container--watch .v-window__container,_::-webkit-full-page-media,_:future{height:inherit!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--watch .v-window__container--is-active,_::-webkit-full-page-media,_:future{display:none!important}:root .channels-container.channels-container--watch .v-window__container .v-window-item,_::-webkit-full-page-media,_:future{display:none!important;position:static!important;transform:none!important;-webkit-transition:none!important;transition:none!important}:root .channels-container.channels-container--watch .v-window__container .v-window-item--active,_::-webkit-full-page-media,_:future{display:block!important}.channels-container[data-v-691b389f]{display:flex;flex-direction:column}.channels-container .channels-tab[data-v-691b389f]{position:sticky;flex:none;top:0;padding-left:16px;padding-right:16px;padding-bottom:9px;background:var(--v-background-base);z-index:1}@media screen and (max-height:450px){.channels-container .channels-tab[data-v-691b389f]{padding-bottom:7px;margin-top:12px}}.channels-container .channels-tab .channels-tab__item[data-v-691b389f]{width:88px;padding:0;color:var(--v-text-base)!important;font-size:15px;text-transform:none}@media screen and (max-height:450px){.channels-container .channels-tab .channels-tab__item[data-v-691b389f]{font-size:14.5px}}.channels-container .channels-list-container[data-v-691b389f]{overflow-y:auto}.channels-container .channels-list-container .channels-list[data-v-691b389f]{padding-left:16px;padding-right:10px;padding-bottom:16px;background:transparent!important;overflow:visible!important}.channels-container .channels-list-container .channels-list .channels[data-v-691b389f]{display:flex;justify-content:center;flex-direction:column;will-change:transform}@media screen and (min-width:1630px){.channels-container .channels-list-container .channels-list .channels[data-v-691b389f]{grid-template-columns:repeat(auto-fit,445px)}}.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]{display:flex;flex-direction:column;position:relative;margin-top:12px;padding:10px 12px 14px 12px;border-radius:11px;color:var(--v-text-base);background:var(--v-background-lighten1);transition:background-color .15s;overflow:hidden;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]:first-of-type{margin-top:0}.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]:hover{background:var(--v-background-lighten2)}@media(hover:none){.channels-container .channels-list-container .channels-list .channels .channel[data-v-691b389f]:hover{background:var(--v-background-lighten1)}}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster[data-v-691b389f]{display:flex;height:28px}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-icon[data-v-691b389f]{display:inline-block;flex-shrink:0;width:48px;height:100%;border-radius:4px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-content[data-v-691b389f]{display:flex;align-items:center;margin-left:12px;width:100%;min-width:0}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-name[data-v-691b389f]{font-size:14.5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force[data-v-691b389f]{display:flex;align-items:center;flex-shrink:0;margin-top:2px;margin-left:auto;padding-left:6px;font-size:12px;color:var(--v-text-darken1)}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force--festival[data-v-691b389f]{color:#e7556e}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force--so-many[data-v-691b389f]{color:#e76b55}.channels-container .channels-list-container .channels-list .channels .channel .channel__broadcaster-force--many[data-v-691b389f]{color:#e7a355}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-present[data-v-691b389f]{display:flex;flex-direction:column}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-present-title[data-v-691b389f]{display:-webkit-box;margin-top:8px;font-size:13.5px;font-weight:700;font-feature-settings:"palt" 1;letter-spacing:.07em;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-present-time[data-v-691b389f]{margin-top:4px;color:var(--v-text-darken1);font-size:11.5px}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following[data-v-691b389f]{display:flex;flex-direction:column;margin-top:4px;color:var(--v-text-darken1);font-size:11.5px}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title[data-v-691b389f]{display:flex;align-items:center}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title-decorate[data-v-691b389f]{flex-shrink:0}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title-icon[data-v-691b389f]{flex-shrink:0;margin-left:3px}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-title-text[data-v-691b389f]{margin-left:2px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.channels-container .channels-list-container .channels-list .channels .channel .channel__program-following-time[data-v-691b389f]{margin-top:1px}.channels-container .channels-list-container .channels-list .channels .channel .channel__progressbar[data-v-691b389f]{position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--v-gray-base)}.channels-container .channels-list-container .channels-list .channels .channel .channel__progressbar-progress[data-v-691b389f]{height:4px;background:var(--v-primary-base);transition:width .3s}.comment-container[data-v-7575b645]{display:flex;flex-direction:column}.comment-container .comment-header[data-v-7575b645]{display:flex;align-items:center;flex-shrink:0;width:100%;height:26px;padding-left:16px;padding-right:16px}@media screen and (max-height:450px){.comment-container .comment-header[data-v-7575b645]{margin-top:12px}}.comment-container .comment-header__title[data-v-7575b645]{display:flex;align-items:center;font-size:18.5px;font-weight:700;line-height:145%}@media screen and (max-height:450px){.comment-container .comment-header__title[data-v-7575b645]{font-size:16.5px}}.comment-container .comment-header__title-icon[data-v-7575b645]{margin-bottom:-3px}@media screen and (max-height:450px){.comment-container .comment-header__title-icon[data-v-7575b645]{height:17.5px}}.comment-container .comment-header__title-text[data-v-7575b645]{margin-left:12px}.comment-container .comment-header__button[data-v-7575b645]{display:flex;align-items:center;height:26px;padding:0 9px;border-radius:4px;background:var(--v-background-lighten3);font-size:11px;line-height:1.8;letter-spacing:0}.comment-container .comment-list[data-v-7575b645]{width:100%;height:100%;margin-top:16px;padding-left:16px;padding-right:10px;padding-bottom:12px;overflow-y:scroll!important}@media screen and (max-height:450px){.comment-container .comment-list[data-v-7575b645]{margin-top:12px}}.comment-container .comment-list .comment[data-v-7575b645]{display:flex;align-items:center;min-height:28px;padding-top:6px;word-break:break-all}.comment-container .comment-list .comment__text[data-v-7575b645]{font-size:13px}.comment-container .comment-list .comment__time[data-v-7575b645]{flex-shrink:0;margin-left:auto;padding-left:8px;color:var(--v-text-darken1);font-size:13px}.comment-container .comment-scroll-button[data-v-7575b645]{display:flex;align-items:center;justify-content:center;position:absolute;left:0;right:0;bottom:22px;width:42px;height:42px;margin:0 auto;border-radius:50%;background:var(--v-primary-base);transition:background-color .15s,opacity .3s,visibility .3s;visibility:hidden;opacity:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.comment-container .comment-scroll-button--display[data-v-7575b645]{opacity:1;visibility:visible}.program-container[data-v-00e07beb]{padding-left:16px;padding-right:16px;overflow-y:auto}.program-container .program-broadcaster[data-v-00e07beb]{display:none;align-items:center;min-width:0}@media screen and (max-height:450px){.program-container .program-broadcaster[data-v-00e07beb]{display:flex;margin-top:16px}}.program-container .program-broadcaster__icon[data-v-00e07beb]{display:inline-block;flex-shrink:0;width:43px;height:24px;border-radius:3px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.program-container .program-broadcaster__icon[data-v-00e07beb]{width:42px;height:23.5px}}.program-container .program-broadcaster__number[data-v-00e07beb]{flex-shrink:0;margin-left:12px;font-size:16.5px}.program-container .program-broadcaster__name[data-v-00e07beb]{margin-left:5px;font-size:16.5px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.program-container .program-info .program-info__title[data-v-00e07beb]{font-size:22px;font-weight:700;line-height:145%;font-feature-settings:"palt" 1;letter-spacing:.05em}@media screen and (max-height:450px){.program-container .program-info .program-info__title[data-v-00e07beb]{margin-top:10px;font-size:18px}}.program-container .program-info .program-info__time[data-v-00e07beb]{margin-top:8px;color:var(--v-text-darken1);font-size:14px}@media screen and (max-height:450px){.program-container .program-info .program-info__time[data-v-00e07beb]{font-size:13px}}.program-container .program-info .program-info__description[data-v-00e07beb]{margin-top:12px;color:var(--v-text-darken1);font-size:12px;line-height:168%;overflow-wrap:break-word;font-feature-settings:"palt" 1;letter-spacing:.08em}@media screen and (max-height:450px){.program-container .program-info .program-info__description[data-v-00e07beb]{margin-top:8px;font-size:11px}}.program-container .program-info .program-info__genre-container[data-v-00e07beb]{display:flex;flex-wrap:wrap;margin-top:10px}.program-container .program-info .program-info__genre-container .program-info__genre[data-v-00e07beb]{display:inline-block;font-size:10.5px;padding:3px;margin-top:4px;margin-right:4px;border-radius:4px;background:var(--v-background-lighten2)}@media screen and (max-height:450px){.program-container .program-info .program-info__genre-container .program-info__genre[data-v-00e07beb]{font-size:9px}}.program-container .program-info .program-info__next[data-v-00e07beb]{display:flex;align-items:center;margin-top:18px;color:var(--v-text-base);font-size:14px;font-weight:700}@media screen and (max-height:450px){.program-container .program-info .program-info__next[data-v-00e07beb]{margin-top:14px;font-size:13px}}.program-container .program-info .program-info__next-decorate[data-v-00e07beb]{flex-shrink:0}.program-container .program-info .program-info__next-icon[data-v-00e07beb]{flex-shrink:0;margin-left:3px;font-size:15px}.program-container .program-info .program-info__next-title[data-v-00e07beb]{display:-webkit-box;margin-top:2px;color:var(--v-text-base);font-size:14px;font-weight:700;overflow:hidden;-webkit-line-clamp:2;-webkit-box-orient:vertical}@media screen and (max-height:450px){.program-container .program-info .program-info__next-title[data-v-00e07beb]{font-size:13px}}.program-container .program-info .program-info__next-time[data-v-00e07beb]{margin-top:3px;color:var(--v-text-darken1);font-size:13.5px}.program-container .program-info .program-info__status[data-v-00e07beb]{display:flex;align-items:center;margin-top:16px;font-size:14px;color:var(--v-text-darken1)}@media screen and (max-height:450px){.program-container .program-info .program-info__status[data-v-00e07beb]{margin-top:10px;font-size:12px}}.program-container .program-info .program-info__status-force[data-v-00e07beb],.program-container .program-info .program-info__status-viewers[data-v-00e07beb]{display:flex;align-items:center}.program-container .program-info .program-info__status-force--festival[data-v-00e07beb]{color:#e7556e}.program-container .program-info .program-info__status-force--so-many[data-v-00e07beb]{color:#e76b55}.program-container .program-info .program-info__status-force--many[data-v-00e07beb]{color:#e7a355}.program-container .program-detail-container[data-v-00e07beb]{margin-top:24px;margin-bottom:24px}@media screen and (max-height:450px){.program-container .program-detail-container[data-v-00e07beb]{margin-top:20px}}.program-container .program-detail-container .program-detail[data-v-00e07beb]{margin-top:16px}.program-container .program-detail-container .program-detail .program-detail__heading[data-v-00e07beb]{font-size:18px}@media screen and (max-height:450px){.program-container .program-detail-container .program-detail .program-detail__heading[data-v-00e07beb]{font-size:16px}}.program-container .program-detail-container .program-detail .program-detail__text[data-v-00e07beb]{margin-top:8px;color:var(--v-text-darken1);font-size:12px;line-height:168%;overflow-wrap:break-word;white-space:pre-wrap;font-feature-settings:"palt" 1;letter-spacing:.08em}@media screen and (max-height:450px){.program-container .program-detail-container .program-detail .program-detail__text[data-v-00e07beb]{font-size:11px}}.watch-player__dplayer svg circle,.watch-player__dplayer svg path{fill:var(--v-text-base)!important}.watch-player__dplayer .dplayer-video-wrap{background:transparent!important}.watch-player__dplayer .dplayer-video-wrap .dplayer-video-wrap-aspect{transition:opacity .4s cubic-bezier(.4,.38,.49,.94);opacity:1}.watch-player__dplayer .dplayer-video-wrap .dplayer-danmaku{top:50%;left:50%;right:auto;bottom:auto;transform:translate(-50%,-50%);width:100%;max-width:100%;max-height:calc(100% - var(--comment-area-vertical-margin, 0px));aspect-ratio:var(--comment-area-aspect-ratio,16/9);transition:max-height .5s cubic-bezier(.42,.19,.53,.87),aspect-ratio .5s cubic-bezier(.42,.19,.53,.87);will-change:aspect-ratio;overflow:hidden}.watch-player__dplayer .dplayer-video-wrap .dplayer-danloading{display:none!important}.watch-player__dplayer .dplayer-controller-mask{height:82px!important;background:linear-gradient(180deg,transparent,var(--v-background-base))!important;opacity:0!important;visibility:hidden}@media screen and (max-height:450px){.watch-player__dplayer .dplayer-controller-mask{height:66px!important}}.watch-player__dplayer .dplayer-controller{padding-left:86px!important;padding-bottom:6px!important;transition:opacity .3s ease,visibility .3s ease;opacity:0!important;visibility:hidden}.watch-player__dplayer .dplayer-controller .dplayer-live-badge,.watch-player__dplayer .dplayer-controller .dplayer-time{color:var(--v-text-base)!important}.watch-player__dplayer .dplayer-controller .dplayer-volume-bar{background:var(--v-text-base)!important}.watch-player__dplayer .dplayer-controller .dplayer-icons{bottom:auto!important}.watch-player__dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right{right:22px!important}@media screen and (max-height:450px){.watch-player__dplayer .dplayer-controller .dplayer-icons.dplayer-icons-right{right:11px!important}}.watch-player__dplayer .dplayer-controller .dplayer-icons .dplayer-icon.dplayer-full-in-icon{display:none!important}.watch-player__dplayer .dplayer-controller .dplayer-comment-box{transition:opacity .3s ease,visibility .3s ease}.watch-player__dplayer .dplayer-notice{padding:16px 22px!important;margin-right:30px;border-radius:4px!important;font-size:15px!important;line-height:1.6}@media(max-width:960px){.watch-player__dplayer .dplayer-notice{padding:12px 16px!important;margin-right:16px;font-size:13.5px!important}}.watch-player__dplayer .dplayer-info-panel{transition:top .3s,left .3s}.watch-player__dplayer .dplayer-setting-box .dplayer-setting-audio-panel .dplayer-setting-audio-item.dplayer-setting-audio-item--disabled{pointer-events:none}.watch-player__dplayer .dplayer-setting-box .dplayer-setting-audio-panel .dplayer-setting-audio-item.dplayer-setting-audio-item--disabled .dplayer-label{color:#aaa}.watch-player__dplayer .dplayer-comment-setting-box .dplayer-comment-setting-title{color:var(--v-text-base)}.watch-player__dplayer .dplayer-comment-setting-box .dplayer-comment-setting-type span{border:1px solid --v-text-base}.watch-player__dplayer .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked+span{background:var(--v-text-base)}.watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:98px!important}@media screen and (max-height:450px){.watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:74px!important}}.watch-player__dplayer.dplayer-mobile.dplayer-hide-controller .dplayer-controller{transform:none!important}.watch-player--loading .dplayer-video-wrap-aspect{opacity:0!important}:root .dplayer-icon:hover .dplayer-icon-content,_::-webkit-full-page-media,_:future{opacity:.8!important}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask{opacity:1!important;visibility:visible!important}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask .dplayer-comment-box,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller .dplayer-comment-box{left:88px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask .dplayer-comment-box,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller .dplayer-comment-box{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller-mask .dplayer-comment-box,.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-controller .dplayer-comment-box{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:98px;bottom:62px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-info-panel{top:82px;left:98px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-info-panel{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-info-panel{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-comment-setting-box{left:88px}@media(max-width:960px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-comment-setting-box{left:84px}}@media screen and (max-height:450px){.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-comment-setting-box{left:72px}}.watch-container.watch-container--control-display .watch-player__dplayer .dplayer-mobile .dplayer-mobile-icon-wrap{opacity:.7!important;visibility:visible!important}.watch-container:not(.watch-container--control-display) .watch-player__dplayer .dplayer-danmaku{max-height:100%!important;aspect-ratio:16/9!important}.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-controller{padding-left:20px!important}.watch-container.watch-container--fullscreen .watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:30px!important}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen .watch-player__dplayer.dplayer-mobile .dplayer-controller{padding-left:16px!important}}.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-box,.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-setting-box{left:20px!important}@media(max-width:960px){.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-box,.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-setting-box{left:16px!important}}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-box,.watch-container.watch-container--fullscreen .watch-player__dplayer .dplayer-comment-setting-box{left:16px!important}}.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-info-panel,.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:30px!important}@media(max-width:960px){.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-info-panel,.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:16px!important}}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-info-panel,.watch-container.watch-container--fullscreen.watch-container--control-display .watch-player__dplayer .dplayer-notice{left:16px!important}}.shortcut-key[data-v-8b237ea4]{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;min-width:32px;height:28px;padding:0 8px;border-radius:5px;background-color:var(--v-background-lighten2);font-size:14.5px}.shortcut-key-plus[data-v-8b237ea4]{display:inline-block;margin:0 5px;flex-shrink:0}.route-container[data-v-8b237ea4]{height:100vh!important;background:var(--v-black-base)!important;overflow:hidden}@supports(-webkit-touch-callout:none){.route-container[data-v-8b237ea4]{height:-webkit-fill-available!important}}.watch-container[data-v-8b237ea4]{display:flex;width:calc(100% + 352px);height:100%;transition:width .4s cubic-bezier(.26,.68,.55,.99)}@media screen and (max-height:450px){.watch-container[data-v-8b237ea4]{width:calc(100% + 310px)}}.watch-container.watch-container--control-display .watch-content[data-v-8b237ea4]{cursor:auto!important}.watch-container.watch-container--control-display .watch-header[data-v-8b237ea4],.watch-container.watch-container--control-display .watch-navigation[data-v-8b237ea4],.watch-container.watch-container--control-display .watch-player__button[data-v-8b237ea4]{opacity:1!important;visibility:visible!important}.watch-container.watch-container--panel-display[data-v-8b237ea4]{width:100%}.watch-container.watch-container--panel-display .switch-button-panel .switch-button-icon[data-v-8b237ea4]{color:var(--v-primary-base)}.watch-container.watch-container--fullscreen .watch-navigation[data-v-8b237ea4]{display:none}.watch-container.watch-container--fullscreen .watch-content .watch-header[data-v-8b237ea4]{padding-left:30px}@media(max-width:960px){.watch-container.watch-container--fullscreen .watch-content .watch-header[data-v-8b237ea4]{padding-left:16px}}@media screen and (max-height:450px){.watch-container.watch-container--fullscreen .watch-content .watch-header[data-v-8b237ea4]{padding-left:16px}}.watch-container .watch-navigation[data-v-8b237ea4]{display:flex;flex-direction:column;position:fixed;width:68px;top:0;left:0;bottom:-100px;padding:18px 8px 122px;background:rgba(47,34,31,.5019607843137255);transition:opacity .3s,visibility .3s;opacity:0;visibility:hidden;z-index:2}@media screen and (max-height:450px){.watch-container .watch-navigation[data-v-8b237ea4]{width:56px;padding:18px 6px 122px}}.watch-container .watch-navigation .watch-navigation__icon[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;height:52px;margin-bottom:17px;border-radius:11px;font-size:16px;color:var(--v-text-base);transition:background-color .15s;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__icon[data-v-8b237ea4]{height:32px;border-radius:10px}}@media screen and (max-height:450px){.watch-container .watch-navigation div.spacer[data-v-8b237ea4]{display:none}}.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;height:52px;border-radius:11px;font-size:16px;color:var(--v-text-base);transition:background-color .15s;text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]{height:44px;border-radius:10px}.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]:last-child,.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]:nth-last-child(2){display:none}}.watch-container .watch-navigation .watch-navigation__link[data-v-8b237ea4]:hover{background:rgba(67,53,50,.6274509803921569)}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__link-icon[data-v-8b237ea4]{width:26px;height:26px}}.watch-container .watch-navigation .watch-navigation__link--active[data-v-8b237ea4]{color:var(--v-primary-base);background:rgba(67,53,50,.6274509803921569)}.watch-container .watch-navigation .watch-navigation__link+.watch-navigation__link[data-v-8b237ea4]{margin-top:4px}@media screen and (max-height:450px){.watch-container .watch-navigation .watch-navigation__link+.watch-navigation__link[data-v-8b237ea4]{margin-top:auto}}.watch-container .watch-content[data-v-8b237ea4]{display:flex;position:relative;width:100%;cursor:none}.watch-container .watch-content .watch-header[data-v-8b237ea4]{display:flex;align-items:center;position:absolute;top:0;left:0;width:100%;height:82px;padding-left:98px;padding-right:30px;background:linear-gradient(180deg,var(--v-background-base),transparent);transition:opacity .3s,visibility .3s;opacity:0;visibility:hidden;z-index:1}@media(max-width:960px){.watch-container .watch-content .watch-header[data-v-8b237ea4]{padding-left:84px;padding-right:16px}}@media screen and (max-height:450px){.watch-container .watch-content .watch-header[data-v-8b237ea4]{height:66px;padding-left:72px}}.watch-container .watch-content .watch-header .watch-header__broadcaster[data-v-8b237ea4]{display:inline-block;flex-shrink:0;width:64px;height:36px;border-radius:5px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__broadcaster[data-v-8b237ea4]{width:48px;height:28px;border-radius:4px}}.watch-container .watch-content .watch-header .watch-header__program-title[data-v-8b237ea4]{margin-left:18px;font-size:18px;font-weight:700;font-feature-settings:"palt" 1;letter-spacing:.05em;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__program-title[data-v-8b237ea4]{margin-left:12px}}@media screen and (max-height:450px){.watch-container .watch-content .watch-header .watch-header__program-title[data-v-8b237ea4]{font-size:16px}}.watch-container .watch-content .watch-header .watch-header__program-time[data-v-8b237ea4]{flex-shrink:0;margin-left:16px;font-size:15px}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__program-time[data-v-8b237ea4]{margin-left:8px}}@media screen and (max-height:450px){.watch-container .watch-content .watch-header .watch-header__program-time[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-content .watch-header .watch-header__now[data-v-8b237ea4]{flex-shrink:0;margin-left:16px;font-size:13px}@media(max-width:960px){.watch-container .watch-content .watch-header .watch-header__now[data-v-8b237ea4]{display:none}}.watch-container .watch-content .watch-player[data-v-8b237ea4]{display:flex;position:relative;width:100%;height:100%;background-size:contain;background-position:50%}.watch-container .watch-content .watch-player .watch-player__background[data-v-8b237ea4]{position:absolute;top:50%;left:50%;width:100%;max-width:100%;max-height:100%;padding-top:min(56.25%,100vh);aspect-ratio:16/9;background-blend-mode:overlay;background-color:rgba(14,14,18,.35);background-size:cover;background-image:none;transform:translate(-50%,-50%);opacity:0;visibility:hidden;will-change:opacity;transition:opacity .4s cubic-bezier(.4,.38,.49,.94),visibility .4s cubic-bezier(.4,.38,.49,.94)}.watch-container .watch-content .watch-player .watch-player__background--display[data-v-8b237ea4]{opacity:1;visibility:visible}.watch-container .watch-content .watch-player .watch-player__background .watch-player__background-logo[data-v-8b237ea4]{display:inline-block;position:absolute;height:34px;right:56px;bottom:44px;filter:drop-shadow(0 0 5px var(--v-black-base))}@media(max-width:1264px){.watch-container .watch-content .watch-player .watch-player__background .watch-player__background-logo[data-v-8b237ea4]{height:30px;right:34px;bottom:30px}}@media(max-width:960px){.watch-container .watch-content .watch-player .watch-player__background .watch-player__background-logo[data-v-8b237ea4]{height:25px;right:30px;bottom:24px}}.watch-container .watch-content .watch-player .watch-player__dplayer[data-v-8b237ea4]{width:100%}.watch-container .watch-content .watch-player .watch-player__button[data-v-8b237ea4]{display:flex;justify-content:space-around;flex-direction:column;position:absolute;top:50%;right:28px;height:190px;transform:translateY(-50%);opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s}@media screen and (max-height:450px){.watch-container .watch-content .watch-player .watch-player__button[data-v-8b237ea4]{right:15px;height:155px}}.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;width:48px;height:48px;color:var(--v-text-base);background:rgba(47,34,31,.7529411764705882);border-radius:7px;transition:background-color .15s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-height:450px){.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]{width:38px;height:38px;border-radius:5px}}.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]:hover{background:rgba(47,34,31,.9411764705882353)}@media(hover:none){.watch-container .watch-content .watch-player .watch-player__button .switch-button[data-v-8b237ea4]:hover{background:rgba(47,34,31,.7529411764705882)}}@media screen and (max-height:450px){.watch-container .watch-content .watch-player .watch-player__button .switch-button svg[data-v-8b237ea4]{height:27px}}.watch-container .watch-content .watch-player .watch-player__button .switch-button .switch-button-icon[data-v-8b237ea4]{position:relative}.watch-container .watch-content .watch-player .watch-player__button .switch-button-up>.switch-button-icon[data-v-8b237ea4]{top:6px}.watch-container .watch-content .watch-player .watch-player__button .switch-button-panel>.switch-button-icon[data-v-8b237ea4]{top:1.5px;transition:color .4s cubic-bezier(.26,.68,.55,.99)}.watch-container .watch-content .watch-player .watch-player__button .switch-button-down>.switch-button-icon[data-v-8b237ea4]{bottom:4px}.watch-container .watch-panel[data-v-8b237ea4]{display:flex;flex-direction:column;flex-shrink:0;width:352px;height:100%;background:var(--v-background-base)}@media screen and (max-height:450px){.watch-container .watch-panel[data-v-8b237ea4]{width:310px}}.watch-container .watch-panel .watch-panel__header[data-v-8b237ea4]{display:flex;align-items:center;flex-shrink:0;width:100%;height:70px;padding-left:16px;padding-right:16px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header[data-v-8b237ea4]{display:none}}.watch-container .watch-panel .watch-panel__header .panel-close-button[data-v-8b237ea4]{display:flex;position:relative;align-items:center;flex-shrink:0;left:-4px;height:35px;padding:0 4px;border-radius:5px;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-close-button[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-panel .watch-panel__header .panel-close-button__icon[data-v-8b237ea4]{position:relative;left:-4px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-close-button__icon[data-v-8b237ea4]{height:22px}}.watch-container .watch-panel .watch-panel__header .panel-close-button__text[data-v-8b237ea4]{font-weight:700}.watch-container .watch-panel .watch-panel__header .panel-broadcaster[data-v-8b237ea4]{display:flex;align-items:center;min-width:0;margin-left:16px}.watch-container .watch-panel .watch-panel__header .panel-broadcaster__icon[data-v-8b237ea4]{display:inline-block;flex-shrink:0;width:43px;height:24px;border-radius:3px;background:linear-gradient(150deg,var(--v-gray-base),var(--v-background-lighten2));-o-object-fit:cover;object-fit:cover;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-broadcaster__icon[data-v-8b237ea4]{width:38px;height:22px}}.watch-container .watch-panel .watch-panel__header .panel-broadcaster__number[data-v-8b237ea4]{flex-shrink:0;margin-left:8px;font-size:16px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-broadcaster__number[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-panel .watch-panel__header .panel-broadcaster__name[data-v-8b237ea4]{margin-left:5px;font-size:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__header .panel-broadcaster__name[data-v-8b237ea4]{font-size:14px}}.watch-container .watch-panel .watch-panel__content-container[data-v-8b237ea4]{position:relative;height:100%}.watch-container .watch-panel .watch-panel__content-container .watch-panel__content[data-v-8b237ea4]{position:absolute;top:0;left:0;right:0;bottom:0;background:var(--v-background-base);transition:opacity .3s,visibility .3s;opacity:0;visibility:hidden}.watch-container .watch-panel .watch-panel__content-container .watch-panel__content--active[data-v-8b237ea4]{opacity:1;visibility:visible}.watch-container .watch-panel .watch-panel__navigation[data-v-8b237ea4]{display:flex;align-items:center;justify-content:space-evenly;flex-shrink:0;height:77px;background:var(--v-background-lighten1)}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__navigation[data-v-8b237ea4]{height:56px}}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button[data-v-8b237ea4]{display:flex;justify-content:center;align-items:center;flex-direction:column;width:66px;height:56px;padding:6px 5.5px;border-radius:5px;color:var(--v-text-base);box-sizing:content-box;transition:color .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button[data-v-8b237ea4]{height:42px;padding:6px 5.5px 4px}}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button--active[data-v-8b237ea4]{color:var(--v-primary-base)}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button__icon[data-v-8b237ea4]{height:30px}.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button__text[data-v-8b237ea4]{margin-top:5px;font-size:13px}@media screen and (max-height:450px){.watch-container .watch-panel .watch-panel__navigation .panel-navigation-button__text[data-v-8b237ea4]{margin-top:2px;font-size:12px}}.settings-container[data-v-18637a38]{width:100%}.settings-container .settings-navigation[data-v-18637a38]{position:sticky;top:85px!important}.settings-container .settings-navigation .v-list-item--link[data-v-18637a38]:before{border-radius:11px!important}.settings-container .settings[data-v-18637a38]{width:100%;border-radius:11px!important}.settings-container .settings[data-v-18637a38] .settings__heading{display:flex;align-items:center;font-size:22px}.settings-container .settings[data-v-18637a38] .settings__content{margin-top:24px}.settings-container .settings[data-v-18637a38] .settings__content .settings__item{display:flex;flex-direction:column;margin-top:24px}.settings-container .settings[data-v-18637a38] .settings__content .settings__item-heading{color:var(--v-text-base);font-size:16.5px}.settings-container .settings[data-v-18637a38] .settings__content .settings__item-label{margin-top:6px;color:var(--v-text-darken1);font-size:13.5px;line-height:1.6}.settings-container .settings[data-v-18637a38] .settings__content .settings__item-form{margin-top:12px}
\ No newline at end of file
diff --git a/client/dist/assets/js/app.d1a5668b.js b/client/dist/assets/js/app.bf991577.js
similarity index 99%
rename from client/dist/assets/js/app.d1a5668b.js
rename to client/dist/assets/js/app.bf991577.js
index b15fa8fd..72e69049 100644
--- a/client/dist/assets/js/app.d1a5668b.js
+++ b/client/dist/assets/js/app.bf991577.js
@@ -1,2 +1,2 @@
-(function(t){function e(e){for(var a,r,l=e[0],o=e[1],c=e[2],p=0,d=[];p$1');return s=s.replace(i,'$1'),s}return"title"==e?"放送休止":"この時間は放送を休止しています。"}},{key:"getAttribute",value:function(t,e,n){return null!==t&&void 0!==t[e]&&null!==t[e]?t[e]:n}},{key:"getChannelType",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.match("(?[a-z]+)[0-9]+").groups.channel_type.toUpperCase();return"GR"===n&&e?"地デジ":n}},{key:"getChannelForceType",value:function(t){return null===t?"normal":t>=1e3?"festival":t>=200?"so-many":t>=100?"many":"normal"}},{key:"getChannelFromRemoconID",value:function(t,e,n){e=e.replace("GR","地デジ");for(var a=t.get(e),i=0;i1&&void 0!==arguments[1]&&arguments[1];if(null!==t&&"2000-01-01T00:00:00+09:00"!==t.start_time){tt.a.locale("ja");var n=tt()(t.start_time),a=tt()(t.end_time),i=t.duration/60;return!0===e?"".concat(n.format("HH:mm")," ~ ").concat(a.format("HH:mm")):"".concat(n.format("YYYY/MM/DD (dd) HH:mm")," ~ ").concat(a.format("HH:mm")," (").concat(i,"分)")}return!0===e?"--:-- ~ --:--":"----/--/-- (-) --:-- ~ --:-- (--分)"}},{key:"getProgramProgress",value:function(t){if(null!==t){var e=tt()(tt()()).diff(t.start_time,"second");return e/t.duration*100}return 0}}]),t}()),nt=Q,at=r["a"].extend({name:"Navigation",data:function(){return{Utils:nt}}}),it=at,st=(n("d2ee"),Object(d["a"])(it,Y,W,!1,null,"4fdece88",null)),rt=st.exports;m()(st,{VSpacer:L["a"]}),$()(st,{Ripple:K["a"]});var lt=r["a"].extend({name:"Home",components:{Header:z,Navigation:rt},data:function(){return{Utils:nt,TVUtils:et,tab:null,is_loading:!0,interval_ids:[],channels_list:new Map,pinned_channel_ids:[]}},created:function(){var t=this;this.update();var e=60-Math.floor((new Date).getTime()/1e3)%60;this.interval_ids.push(window.setTimeout((function(){t.update(),t.interval_ids.push(window.setInterval((function(){t.update()}),3e4))}),1e3*e))},beforeDestroy:function(){var t,e=Object(D["a"])(this.interval_ids);try{for(e.s();!(t=e.n()).done;){var n=t.value;window.clearInterval(n)}}catch(a){e.e(a)}finally{e.f()}},methods:{update:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,r["a"].axios.get("".concat(nt.api_base_url,"/channels"));case 3:n=e.sent,e.next=10;break;case 6:return e.prev=6,e.t0=e["catch"](0),console.error(e.t0),e.abrupt("return");case 10:a=function(t){return t.is_display},t.channels_list=new Map,n.data.GR.length>0&&t.channels_list.set("地デジ",n.data.GR.filter(a)),n.data.BS.length>0&&t.channels_list.set("BS",n.data.BS.filter(a)),n.data.CS.length>0&&t.channels_list.set("CS",n.data.CS.filter(a)),n.data.CATV.length>0&&t.channels_list.set("CATV",n.data.CATV.filter(a)),n.data.SKY.length>0&&t.channels_list.set("SKY",n.data.SKY.filter(a)),n.data.STARDIGIO.length>0&&t.channels_list.set("StarDigio",n.data.STARDIGIO.filter(a)),t.updatePinnedChannelList(!!t.is_loading),t.is_loading=!1;case 20:case"end":return e.stop()}}),e,null,[[0,6]])})))()},addPinnedChannel:function(t){this.pinned_channel_ids=nt.getSettingsItem("pinned_channel_ids"),this.pinned_channel_ids.push(t),nt.setSettingsItem("pinned_channel_ids",this.pinned_channel_ids),this.updatePinnedChannelList()},removePinnedChannel:function(t){this.pinned_channel_ids=nt.getSettingsItem("pinned_channel_ids"),this.pinned_channel_ids.splice(this.pinned_channel_ids.indexOf(t),1),nt.setSettingsItem("pinned_channel_ids",this.pinned_channel_ids),this.updatePinnedChannelList()},updatePinnedChannelList:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.pinned_channel_ids=nt.getSettingsItem("pinned_channel_ids");var n,a=[],i=Object(D["a"])(this.pinned_channel_ids);try{var s=function(){var e=n.value,i=et.getChannelType(e,!0);a.push(t.channels_list.get(i).find((function(t){return t.channel_id===e})))};for(i.s();!(n=i.n()).done;)s()}catch(r){i.e(r)}finally{i.f()}this.channels_list.has("ピン留め")?this.channels_list.set("ピン留め",a):this.channels_list=new Map([["ピン留め",a]].concat(Object(V["a"])(this.channels_list))),0===a.length&&!0===e&&(this.tab=1)},isPinnedChannel:function(t){return this.pinned_channel_ids.includes(t)}}}),ot=lt,ct=(n("92b8"),n("ee0e"),n("71a3")),ut=Object(d["a"])(ot,R,E,!1,null,"6a407b07",null),pt=ut.exports;m()(ut,{VSpacer:L["a"],VTab:ct["a"]}),$()(ut,{Ripple:K["a"]});var dt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"route-container"},[n("main",{staticClass:"watch-container",class:{"watch-container--control-display":t.is_control_display,"watch-container--panel-display":t.is_panel_display,"watch-container--fullscreen":t.is_fullscreen}},[n("nav",{staticClass:"watch-navigation",on:{mousemove:function(e){return t.controlDisplayTimer(e)},touchmove:function(e){return t.controlDisplayTimer(e)},click:function(e){return t.controlDisplayTimer(e)}}},[n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"watch-navigation__icon",attrs:{to:"/tv/"}},[n("img",{staticClass:"watch-navigation__icon-image",attrs:{src:"/assets/img/icon.svg",width:"23px"}})]),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"テレビをみる",expression:"'テレビをみる'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/tv/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:tv-20-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"ビデオをみる",expression:"'ビデオをみる'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/videos/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:movies-and-tv-20-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"番組表",expression:"'番組表'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/schedules/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:calendar-ltr-20-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"キャプチャ",expression:"'キャプチャ'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/captures/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:image-multiple-24-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"ウォッチリスト",expression:"'ウォッチリスト'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/watchlists/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"ic:round-playlist-play",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"視聴履歴",expression:"'視聴履歴'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/histories/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:history-16-regular",width:"26px"}})],1),n("v-spacer"),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"設定",expression:"'設定'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/settings/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:settings-20-regular",width:"26px"}})],1),n("a",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"version "+t.Utils.version,expression:"`version ${Utils.version}`",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",href:"https://github.com/tsukumijima/KonomiTV"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:info-16-regular",width:"26px"}})],1)],1),n("div",{staticClass:"watch-content",on:{mousemove:function(e){return t.controlDisplayTimer(e,!0)},touchmove:function(e){return t.controlDisplayTimer(e,!0)},click:function(e){return t.controlDisplayTimer(e,!0)}}},[n("header",{staticClass:"watch-header"},[n("img",{staticClass:"watch-header__broadcaster",attrs:{src:t.Utils.api_base_url+"/channels/"+t.$route.params.channel_id+"/logo"}}),n("span",{staticClass:"watch-header__program-title",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_present,"title"))}}),n("span",{staticClass:"watch-header__program-time"},[t._v(t._s(t.TVUtils.getProgramTime(t.channel.program_present,!0)))]),n("v-spacer"),n("span",{staticClass:"watch-header__now"},[t._v(t._s(t.time))])],1),n("div",{staticClass:"watch-player",class:{"watch-player--loading":t.is_loading}},[n("div",{staticClass:"watch-player__background",class:{"watch-player__background--display":t.is_background_display},style:{backgroundImage:"url("+t.background_url+")"}},[n("img",{staticClass:"watch-player__background-logo",attrs:{src:"/assets/img/logo.svg"}})]),n("div",{staticClass:"watch-player__dplayer"}),n("div",{staticClass:"watch-player__button",on:{mousemove:function(e){return t.controlDisplayTimer(e)},touchmove:function(e){return t.controlDisplayTimer(e)},click:function(e){return t.controlDisplayTimer(e)}}},[n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.top",value:"前のチャンネル",expression:"'前のチャンネル'",modifiers:{top:!0}}],staticClass:"switch-button switch-button-up",attrs:{to:"/tv/watch/"+t.channel_previous.channel_id}},[n("Icon",{staticClass:"switch-button-icon",attrs:{icon:"fluent:ios-arrow-left-24-filled",width:"32px",rotate:"1"}})],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"switch-button switch-button-panel switch-button-panel--open",on:{click:function(e){t.is_panel_display=!t.is_panel_display}}},[n("Icon",{staticClass:"switch-button-icon",attrs:{icon:"fluent:navigation-16-filled",width:"32px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.bottom",value:"次のチャンネル",expression:"'次のチャンネル'",modifiers:{bottom:!0}}],staticClass:"switch-button switch-button-down",attrs:{to:"/tv/watch/"+t.channel_next.channel_id}},[n("Icon",{staticClass:"switch-button-icon",attrs:{icon:"fluent:ios-arrow-right-24-filled",width:"33px",rotate:"1"}})],1)],1)])]),n("div",{staticClass:"watch-panel",on:{mousemove:function(e){return t.controlDisplayTimer(e)},touchmove:function(e){return t.controlDisplayTimer(e)},click:function(e){return t.controlDisplayTimer(e)}}},[n("div",{staticClass:"watch-panel__header"},[n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-close-button",on:{click:function(e){t.is_panel_display=!1}}},[n("Icon",{staticClass:"panel-close-button__icon",attrs:{icon:"akar-icons:chevron-right",width:"25px"}}),n("span",{staticClass:"panel-close-button__text"},[t._v("閉じる")])],1),n("v-spacer"),n("div",{staticClass:"panel-broadcaster"},[n("img",{staticClass:"panel-broadcaster__icon",attrs:{src:t.Utils.api_base_url+"/channels/"+t.$route.params.channel_id+"/logo"}}),n("div",{staticClass:"panel-broadcaster__number"},[t._v(t._s(t.channel.channel_number))]),n("div",{staticClass:"panel-broadcaster__name"},[t._v(t._s(t.channel.channel_name))])])],1),n("div",{staticClass:"watch-panel__content-container"},[n("Program",{staticClass:"watch-panel__content",class:{"watch-panel__content--active":"Program"===t.panel_active_tab},attrs:{channel:t.channel}}),n("Channel",{staticClass:"watch-panel__content",class:{"watch-panel__content--active":"Channel"===t.panel_active_tab},attrs:{channels_list:t.channels_list}}),n("Comment",{staticClass:"watch-panel__content",class:{"watch-panel__content--active":"Comment"===t.panel_active_tab},attrs:{channel:t.channel,player:t.player}})],1),n("div",{staticClass:"watch-panel__navigation"},[n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Program"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Program"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"fa-solid:info-circle",width:"33px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("番組情報")])],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Channel"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Channel"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"fa-solid:broadcast-tower",width:"34px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("チャンネル")])],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Comment"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Comment"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"bi:chat-left-text-fill",width:"29px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("コメント")])],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Twitter"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Twitter"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"fa-brands:twitter",width:"34px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("Twitter")])],1)])])]),n("v-dialog",{attrs:{"max-width":"980",transition:"slide-y-transition"},model:{value:t.shortcut_key_modal,callback:function(e){t.shortcut_key_modal=e},expression:"shortcut_key_modal"}},[n("v-card",[n("v-card-title",{staticClass:"px-5 pt-4 pb-3 d-flex align-center font-weight-bold"},[n("Icon",{attrs:{icon:"fluent:keyboard-20-filled",height:"28px"}}),n("span",{staticClass:"ml-3"},[t._v("キーボードショートカット")])],1),n("div",{staticClass:"px-5 pb-4"},[n("v-row",t._l(t.shortcut_key_list,(function(e,a){return n("v-col",{key:a,attrs:{cols:"6"}},t._l(e,(function(e){return n("div",{key:e.name,staticClass:"mt-3"},[n("div",{staticClass:"text-subtitle-1 d-flex align-center font-weight-bold"},[n("Icon",{attrs:{icon:e.icon,height:e.icon_height}}),n("span",{staticClass:"ml-2"},[t._v(t._s(e.name))])],1),t._l(e.shortcuts,(function(e){return n("div",{key:e.name,staticClass:"mt-3"},[n("div",{staticClass:"text-subtitle-2 mt-2 d-flex align-center font-weight-medium"},[n("span",{staticClass:"mr-2",domProps:{innerHTML:t._s(e.name)}}),n("div",{staticClass:"ml-auto d-flex align-center flex-shrink-0"},t._l(e.keys,(function(a,i){return n("div",{key:a.name,staticClass:"ml-auto d-flex align-center"},[!0===a.icon?n("Icon",{staticClass:"shortcut-key",attrs:{icon:a.name,height:"18px"}}):t._e(),!1===a.icon?n("span",{staticClass:"shortcut-key"},[t._v(t._s(a.name))]):t._e(),in.comment_list_element.clientWidth&&(i=!0)},n.comment_list_element.onmouseup=function(t){var e=t.clientX-n.comment_list_element.getBoundingClientRect().left;e>n.comment_list_element.clientWidth&&(i=!1)},s=function(){i=!0,window.setTimeout((function(){return i=!1}),100)},r=!1,n.comment_list_element.ontouchstart=function(){return r=!0},n.comment_list_element.ontouchend=function(){return r=!1},n.comment_list_element.ontouchmove=function(){return!0===r?s():""},n.comment_list_element.onwheel=s,n.comment_list_element.onscroll=Object(A["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!1!==n.is_auto_scrolling||!0!==i){t.next=5;break}return n.is_manual_scroll=!0,t.next=4,new Promise((function(t){return setTimeout(t,100)}));case 4:n.comment_list_element.scrollTop+n.comment_list_element.offsetHeight>n.comment_list_element.scrollHeight-10&&(n.is_manual_scroll=!1);case 5:case"end":return t.stop()}}),t)}))),a.next=20,n.initWatchSession();case 20:return l=a.sent,a.next=23,n.initCommentSession(l);case 23:return a.next=25,n.initReserveObserver();case 25:case"end":return a.stop()}}),a)})))()}},methods:{initWatchSession:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,r["a"].axios.get("".concat(nt.api_base_url,"/channels/").concat(t.channel.channel_id,"/jikkyo"));case 3:n=e.sent,e.next=9;break;case 6:throw e.prev=6,e.t0=e["catch"](0),new Error(e.t0);case 9:if(!1!==n.data.is_success){e.next=11;break}throw new Error(n.data.detail);case 11:return e.abrupt("return",new Promise((function(e){t.watch_session=new WebSocket(n.data.audience_token),t.watch_session.addEventListener("open",(function(){t.watch_session.send(JSON.stringify({type:"startWatching",data:{reconnect:!1}}))})),t.watch_session.addEventListener("message",function(){var n=Object(A["a"])(regeneratorRuntime.mark((function n(a){var i,s,r,l,o;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:i=JSON.parse(a.data),n.t0=i.type,n.next="room"===n.t0?4:"seat"===n.t0?5:"ping"===n.t0?7:"error"===n.t0?9:"reconnect"===n.t0?33:"disconnect"===n.t0?43:79;break;case 4:return n.abrupt("return",e({thread_id:i.data.threadId,your_post_key:i.data.yourPostKey?i.data.yourPostKey:null,message_server:i.data.messageServer.uri}));case 5:return t.keep_seat_interval_id=window.setInterval((function(){1===t.watch_session.readyState?t.watch_session.send(JSON.stringify({type:"keepSeat"})):window.clearInterval(t.keep_seat_interval_id)}),1e3*i.data.keepIntervalSec),n.abrupt("break",79);case 7:return t.watch_session.send(JSON.stringify({type:"pong"})),n.abrupt("break",79);case 9:n.t1=i.data.code,n.next="CONNECT_ERROR"===n.t1?12:"CONTENT_NOT_READY"===n.t1?14:"NO_THREAD_AVAILABLE"===n.t1?16:"NO_ROOM_AVAILABLE"===n.t1?18:"NO_PERMISSION"===n.t1?20:"NOT_ON_AIR"===n.t1?22:"BROADCAST_NOT_FOUND"===n.t1?24:"INTERNAL_SERVERERROR"===n.t1?26:28;break;case 12:return s="コメントサーバーに接続できません。",n.abrupt("break",30);case 14:return s="ニコニコ実況が配信できない状態です。",n.abrupt("break",30);case 16:return s="コメントスレッドを取得できません。",n.abrupt("break",30);case 18:return s="コメント部屋を取得できません。",n.abrupt("break",30);case 20:return s="API にアクセスする権限がありません。",n.abrupt("break",30);case 22:return s="ニコニコ実況が放送中ではありません。",n.abrupt("break",30);case 24:return s="ニコニコ実況の配信情報を取得できません。",n.abrupt("break",30);case 26:return s="ニコニコ実況でサーバーエラーが発生しています。",n.abrupt("break",30);case 28:return s="ニコニコ実況でエラーが発生しています。(".concat(i.data.code,")"),n.abrupt("break",30);case 30:return console.log("error occurred. code: ".concat(i.data.code)),t.player.danmaku.showing&&t.player.notice(s),n.abrupt("break",79);case 33:return t.destroy(),n.next=36,new Promise((function(t){return setTimeout(t,1e3*i.data.waitTimeSec)}));case 36:return t.player.danmaku.showing&&t.player.notice("ニコニコ実況に再接続しています…"),n.next=39,t.initWatchSession();case 39:return r=n.sent,n.next=42,t.initCommentSession(r);case 42:return n.abrupt("break",79);case 43:t.watch_session&&(t.watch_session.onclose=null),n.t2=i.data.reason,n.next="TAKEOVER"===n.t2?47:"NO_PERMISSION"===n.t2?49:"END_PROGRAM"===n.t2?51:"PING_TIMEOUT"===n.t2?53:"TOO_MANY_CONNECTIONS"===n.t2?55:"TOO_MANY_WATCHINGS"===n.t2?57:"CROWDED"===n.t2?59:"MAINTENANCE_IN"===n.t2?61:"SERVICE_TEMPORARILY_UNAVAILABLE"===n.t2?63:65;break;case 47:return l="ニコニコ実況の番組から追い出されました。",n.abrupt("break",67);case 49:return l="ニコニコ実況の番組の座席を取得できませんでした。",n.abrupt("break",67);case 51:return l="ニコニコ実況がリセットされたか、コミュニティの番組が終了しました。",n.abrupt("break",67);case 53:return l="コメントサーバーとの接続生存確認に失敗しました。",n.abrupt("break",67);case 55:return l="ニコニコ実況の同一ユーザからの接続数上限を越えています。",n.abrupt("break",67);case 57:return l="ニコニコ実況の同一ユーザからの視聴番組数上限を越えています。",n.abrupt("break",67);case 59:return l="ニコニコ実況の番組が満席です。",n.abrupt("break",67);case 61:return l="ニコニコ実況はメンテナンス中です。",n.abrupt("break",67);case 63:return l="ニコニコ実況で一時的にサーバーエラーが発生しています。",n.abrupt("break",67);case 65:return l="ニコニコ実況との接続が切断されました。(".concat(i.data.reason,")"),n.abrupt("break",67);case 67:return console.log("disconnected. reason: ".concat(i.data.reason)),t.player.danmaku.showing&&t.player.notice(l),t.destroy(),n.next=72,new Promise((function(t){return setTimeout(t,5e3)}));case 72:return t.player.danmaku.showing&&t.player.notice("ニコニコ実況に再接続しています…"),n.next=75,t.initWatchSession();case 75:return o=n.sent,n.next=78,t.initCommentSession(o);case 78:return n.abrupt("break",79);case 79:case"end":return n.stop()}}),n)})));return function(t){return n.apply(this,arguments)}}()),t.watch_session.onclose=function(){var e=Object(A["a"])(regeneratorRuntime.mark((function e(n){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return console.log("disconnected. code: ".concat(n.code)),t.player.danmaku.showing&&t.player.notice("ニコニコ実況との接続が切断されました。(code: ".concat(n.code,")")),t.destroy(),e.next=5,new Promise((function(t){return setTimeout(t,1e4)}));case 5:return t.player.danmaku.showing&&t.player.notice("ニコニコ実況に再接続しています…"),e.next=8,t.initWatchSession();case 8:return a=e.sent,e.next=11,t.initCommentSession(a);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()})));case 12:case"end":return e.stop()}}),e,null,[[0,6]])})))()},initCommentSession:function(t){var e=this;return Object(A["a"])(regeneratorRuntime.mark((function n(){var a,i;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:a=[],i=!1,e.comment_session=new WebSocket(t.message_server),e.comment_session.addEventListener("open",(function(){e.comment_session.send(JSON.stringify([{ping:{content:"rs:0"}},{ping:{content:"ps:0"}},{thread:{version:"20061206",thread:t.thread_id,threadkey:t.your_post_key,user_id:"",res_from:-50}},{ping:{content:"pf:0"}},{ping:{content:"rf:0"}}]))})),e.comment_session.addEventListener("message",function(){var t=Object(A["a"])(regeneratorRuntime.mark((function t(n){var s,r,l,o,c,u,p,d,_,m,h;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(s=JSON.parse(n.data),void 0!==s.thread&&(0===s.thread.resultcode||(r="コメントサーバーに接続できませんでした。",console.error("Error: "+r))),void 0!==s.ping&&"rf:0"===s.ping.content&&(i=!0,e.scrollCommentList()),l=s.chat,void 0!==l&&void 0!==l.content&&!l.content.match(/\/[a-z]+ /)){t.next=6;break}return t.abrupt("return");case 6:if(!l.yourpost||1!==l.yourpost){t.next=8;break}return t.abrupt("return");case 8:if(o="#FFEAEA",c="right",void 0!==l.mail&&null!==l.mail){u=l.mail.replace("184","").split(" "),p=Object(D["a"])(u);try{for(p.s();!(d=p.n()).done;)_=d.value,null!==e.getCommentColor(_)&&(o=e.getCommentColor(_)),null!==e.getCommentPosition(_)&&(c=e.getCommentPosition(_))}catch(v){p.e(v)}finally{p.f()}}if(!i){t.next=15;break}return m=nt.getSettingsItem("comment_delay_time"),t.next=15,new Promise((function(t){return setTimeout(t,1e3*m)}));case 15:if(e.comment_list.length>500&&e.comment_list.shift(),h={id:l.no,text:l.content,time:tt()(1e3*l.date).format("HH:mm:ss")},"hidden"!==document.visibilityState){t.next=20;break}return a.push(h),t.abrupt("return");case 20:e.comment_list.push(h),i&&e.scrollCommentList(),i&&(e.player.video.paused||e.player.danmaku.draw({text:l.content,color:o,type:c}));case 23:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()),document.onvisibilitychange=function(){var t;"visible"===document.visibilityState&&((t=e.comment_list).push.apply(t,Object(V["a"])(a)),a=[],e.scrollCommentList())};case 6:case"end":return n.stop()}}),n)})))()},initReserveObserver:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t.resize_observer_element=document.querySelector(".watch-player"),n=null,a=function(){var e=document.querySelector(".dplayer-video-wrap-aspect"),a=document.querySelector(".dplayer-danmaku");if(null!==t.resize_observer_element&&null!==t.resize_observer_element.clientHeight&&null!==e&&null!==e.clientHeight){var i=(t.resize_observer_element.clientHeight-e.clientHeight)/2,s=window.matchMedia("(max-height: 450px)").matches?50:66;if(i0&&void 0!==t[0]&&t[0],!0!==e.is_manual_scroll){n.next=3;break}return n.abrupt("return");case 3:e.is_auto_scrolling=!0,i=0;case 5:if(!(i<3)){n.next=12;break}return n.next=8,new Promise((function(t){return setTimeout(t,10)}));case 8:!0===a?e.comment_list_element.scrollTo({top:e.comment_list_element.scrollHeight,left:0,behavior:"smooth"}):e.comment_list_element.scrollTo(0,e.comment_list_element.scrollHeight);case 9:i++,n.next=5;break;case 12:return n.next=14,new Promise((function(t){return setTimeout(t,100)}));case 14:e.is_auto_scrolling=!1;case 15:case"end":return n.stop()}}),n)})))()},getCommentColor:function(t){var e={red:"#E54256",pink:"#FF8080",orange:"#FFC000",yellow:"#FFE133",green:"#64DD17",cyan:"#39CCFF",blue:"#0000FF",purple:"#D500F9",black:"#1E1310",white:"#FFEAEA",white2:"#CCCC99",niconicowhite:"#CCCC99",red2:"#CC0033",truered:"#CC0033",pink2:"#FF33CC",orange2:"#FF6600",passionorange:"#FF6600",yellow2:"#999900",madyellow:"#999900",green2:"#00CC66",elementalgreen:"#00CC66",cyan2:"#00CCCC",blue2:"#3399FF",marineblue:"#3399FF",purple2:"#6633CC",nobleviolet:"#6633CC",black2:"#666666"};return void 0!==e[t]?e[t]:null},getCommentPosition:function(t){switch(t){case"ue":return"top";case"naka":return"right";case"shita":return"bottom";default:return null}},destroy:function(){this.comment_list=[],document.onvisibilitychange=null,null!==this.watch_session&&(this.watch_session.onclose=null,this.watch_session.close(),this.watch_session=null),null!==this.comment_session&&(this.comment_session.onclose=null,this.comment_session.close(),this.comment_session=null),window.clearInterval(this.keep_seat_interval_id)}}})),Nt=Ot,Rt=(n("1548"),Object(d["a"])(Nt,It,Pt,!1,null,"7575b645",null)),Et=Rt.exports;$()(Rt,{Ripple:K["a"]});var Vt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"program-container"},[n("section",{staticClass:"program-broadcaster"},[n("img",{staticClass:"program-broadcaster__icon",attrs:{src:t.Utils.api_base_url+"/channels/"+t.$route.params.channel_id+"/logo"}}),n("div",{staticClass:"program-broadcaster__number"},[t._v("Ch: "+t._s(t.channel.channel_number))]),n("div",{staticClass:"program-broadcaster__name"},[t._v(t._s(t.channel.channel_name))])]),n("section",{staticClass:"program-info"},[n("h1",{staticClass:"program-info__title",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_present,"title"))}}),n("div",{staticClass:"program-info__time"},[t._v(t._s(t.TVUtils.getProgramTime(t.channel.program_present)))]),n("div",{staticClass:"program-info__description",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_present,"description"))}}),n("div",{staticClass:"program-info__genre-container"},t._l(t.TVUtils.getAttribute(t.channel.program_present,"genre",[]),(function(e,a){return n("div",{key:a,staticClass:"program-info__genre"},[t._v(" "+t._s(e.major)+" / "+t._s(e.middle)+" ")])})),0),n("div",{staticClass:"program-info__next"},[n("span",{staticClass:"program-info__next-decorate"},[t._v("NEXT")]),n("Icon",{staticClass:"program-info__next-icon",attrs:{icon:"fluent:fast-forward-20-filled",width:"16px"}})],1),n("span",{staticClass:"program-info__next-title",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_following,"title"))}}),n("div",{staticClass:"program-info__next-time"},[t._v(t._s(t.TVUtils.getProgramTime(t.channel.program_following)))]),n("div",{staticClass:"program-info__status"},[n("div",{staticClass:"program-info__status-force",class:"program-info__status-force--"+t.TVUtils.getChannelForceType(t.channel.channel_force)},[n("Icon",{attrs:{icon:"fa-solid:fire-alt",height:"14px"}}),n("span",{staticClass:"ml-2"},[t._v("勢い:")]),n("span",{staticClass:"ml-2"},[t._v(t._s(t.TVUtils.getAttribute(t.channel,"channel_force","--"))+" コメ/分")])],1),n("div",{staticClass:"program-info__status-viewers ml-5"},[n("Icon",{attrs:{icon:"fa-solid:eye",height:"14px"}}),n("span",{staticClass:"ml-2"},[t._v("視聴数:")]),n("span",{staticClass:"ml-1"},[t._v(t._s(t.channel.viewers))])],1)])]),n("section",{staticClass:"program-detail-container"},t._l(t.TVUtils.getAttribute(t.channel.program_present,"detail",{}),(function(e,a){return n("div",{key:a,staticClass:"program-detail"},[n("h2",{staticClass:"program-detail__heading"},[t._v(t._s(a))]),n("div",{staticClass:"program-detail__text"},[t._v(t._s(e))])])})),0)])},At=[],Dt=r["a"].extend({name:"Program",props:{channel:{type:Object,required:!0}},data:function(){return{Utils:nt,TVUtils:et}}}),jt=Dt,Mt=(n("9652"),Object(d["a"])(jt,Vt,At,!1,null,"00e07beb",null)),Ht=Mt.exports,Ft=r["a"].extend({name:"Watch",components:{Channel:Tt,Comment:Et,Program:Ht},data:function(){return{Utils:nt,TVUtils:et,time:tt()().format("YYYY/MM/DD HH:mm:ss"),panel_active_tab:nt.getSettingsItem("panel_active_tab"),background_url:"",is_loading:!0,is_background_display:!1,is_control_display:!0,is_panel_display:function(){switch(nt.getSettingsItem("panel_display_state")){case"AlwaysDisplay":return!0;case"AlwaysFold":return!1;case"RestorePreviousState":return nt.getSettingsItem("is_latest_panel_display")}}(),is_fullscreen:!1,interval_ids:[],control_interval_id:0,channel_id:this.$route.params.channel_id,channel:bt,channel_previous:bt,channel_next:bt,channels_list:new Map,player:null,eventsource:null,fullscreen_handler:null,shortcut_key_handler:null,shortcut_key_pressed_at:Date.now(),shortcut_key_modal:!1,shortcut_key_list:{left_column:[{name:"全般",icon:"fluent:home-20-filled",icon_height:"22px",shortcuts:[{name:"数字キー・テンキーに対応するリモコン番号 (1~12) のチャンネルに切り替える
(同時に Shift キーを押すと、地デジならBS、BSなら地デジのチャンネルを選局する)",keys:[{name:"1~9, 0, -(=), ^(~)",icon:!1}]},{name:"前のチャンネルに切り替える",keys:[{name:"fluent:arrow-up-12-filled",icon:!0}]},{name:"次のチャンネルに切り替える",keys:[{name:"fluent:arrow-down-12-filled",icon:!0}]},{name:"キーボードショートカットの一覧を表示する",keys:[{name:"/(?)",icon:!1}]}]},{name:"パネル",icon:"fluent:panel-right-20-filled",icon_height:"24px",shortcuts:[{name:"パネルの表示切り替え",keys:[{name:"P",icon:!1}]},{name:"番組情報タブを表示する",keys:[{name:"K",icon:!1}]},{name:"チャンネルタブを表示する",keys:[{name:"L",icon:!1}]},{name:"コメントタブを表示する",keys:[{name:";(+)",icon:!1}]},{name:"Twitter タブを表示する",keys:[{name:":(*)",icon:!1}]}]}],right_column:[{name:"プレイヤー",icon:"fluent:play-20-filled",icon_height:"20px",shortcuts:[{name:"再生 / 一時停止の切り替え",keys:[{name:"Space",icon:!1}]},{name:"停止して0.25秒早戻し",keys:[{name:"fluent:arrow-left-12-filled",icon:!0}]},{name:"停止して0.25秒早送り",keys:[{name:"fluent:arrow-right-12-filled",icon:!0}]},{name:"フルスクリーンの切り替え",keys:[{name:"F",icon:!1}]},{name:"ライブストリームの同期",keys:[{name:"W",icon:!1}]},{name:"Picture-in-Picture の表示切り替え",keys:[{name:"E",icon:!1}]},{name:"字幕の表示切り替え",keys:[{name:"S",icon:!1}]},{name:"コメントの表示切り替え",keys:[{name:"D",icon:!1}]},{name:"コメント入力フォームにフォーカスする",keys:[{name:"M",icon:!1}]}]}]}}},created:function(){this.init()},beforeDestroy:function(){this.destroy(!0),null!==this.shortcut_key_handler&&(document.removeEventListener("keydown",this.shortcut_key_handler),this.shortcut_key_handler=null)},beforeRouteUpdate:function(t,e,n){var a=this;this.destroy(),this.channel_id=t.params.channel_id;var i=et.getPreviousAndCurrentAndNextChannel(this.channels_list,this.channel_id),s=Object(mt["a"])(i,3);this.channel_previous=s[0],this.channel=s[1],this.channel_next=s[2],this.interval_ids.push(window.setTimeout((function(){a.init()}),500)),n()},watch:{is_panel_display:function(){nt.setSettingsItem("is_latest_panel_display",this.is_panel_display)}},methods:{init:function(){var t=this;this.background_url=nt.generatePlayerBackgroundURL(),this.controlDisplayTimer(),this.update(),this.interval_ids.push(window.setInterval((function(){t.time=tt()().format("YYYY/MM/DD HH:mm:ss")}),1e3));var e=60-Math.floor((new Date).getTime()/1e3)%60;this.interval_ids.push(window.setTimeout((function(){t.update(),t.interval_ids.push(window.setInterval((function(){t.update()}),3e4))}),1e3*e))},update:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n,a,i,s,l,o,c,u,p,d,_;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(void 0!==t.$route.params.channel_id){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,e.next=5,r["a"].axios.get("".concat(nt.api_base_url,"/channels/").concat(t.channel_id));case 5:n=e.sent,e.next=15;break;case 8:if(e.prev=8,e.t0=e["catch"](2),console.error(e.t0),!e.t0.response||422!==e.t0.response.status||"Specified channel_id was not found"!==e.t0.response.data.detail){e.next=14;break}return e.next=14,t.$router.replace({path:"/not-found/"});case 14:return e.abrupt("return");case 15:return t.channel=n.data,null!==t.player&&!0!==t.player.KonomiTVCanDestroy||(t.initPlayer(),t.initEventHandler(),t.initShortcutKeyHandler()),null===t.channel.program_present||"1/0+1/0モード(デュアルモノ)"!==t.channel.program_present.primary_audio_type&&null===t.channel.program_present.secondary_audio_type?(t.player.template.audioItem[1].classList.add("dplayer-setting-audio-item--disabled"),t.player.plugins.mpegts&&window.setTimeout((function(){t.player.template.audioItem[0].classList.add("dplayer-setting-audio-current"),t.player.template.audioItem[1].classList.remove("dplayer-setting-audio-current"),t.player.template.audioValue.textContent=t.player.tran("Primary audio");try{t.player.plugins.mpegts.switchPrimaryAudio()}catch(e){}}),300)):t.player.template.audioItem[1].classList.remove("dplayer-setting-audio-item--disabled"),e.prev=18,e.next=21,r["a"].axios.get("".concat(nt.api_base_url,"/channels"));case 21:a=e.sent,e.next=28;break;case 24:return e.prev=24,e.t1=e["catch"](18),console.error(e.t1),e.abrupt("return");case 28:i=function(e){return e.is_display||t.channel_id===e.channel_id},t.channels_list=new Map,t.channels_list.set("ピン留め",[]),a.data.GR.length>0&&t.channels_list.set("地デジ",a.data.GR.filter(i)),a.data.BS.length>0&&t.channels_list.set("BS",a.data.BS.filter(i)),a.data.CS.length>0&&t.channels_list.set("CS",a.data.CS.filter(i)),a.data.CATV.length>0&&t.channels_list.set("CATV",a.data.CATV.filter(i)),a.data.SKY.length>0&&t.channels_list.set("SKY",a.data.SKY.filter(i)),a.data.STARDIGIO.length>0&&t.channels_list.set("StarDigio",a.data.STARDIGIO.filter(i)),s=nt.getSettingsItem("pinned_channel_ids"),l=[],o=Object(D["a"])(s);try{for(u=function(){var e=c.value,n=et.getChannelType(e,!0);l.push(t.channels_list.get(n).find((function(t){return t.channel_id===e})))},o.s();!(c=o.n()).done;)u()}catch(m){o.e(m)}finally{o.f()}l.length>0?t.channels_list.set("ピン留め",l):t.channels_list.delete("ピン留め"),p=et.getPreviousAndCurrentAndNextChannel(t.channels_list,t.channel_id),d=Object(mt["a"])(p,3),t.channel_previous=d[0],t.channel_next=d[2],"mediaSession"in navigator&&(_=[{src:"/assets/img/icons/icon-maskable-192px.png",sizes:"192x192",type:"image/png"},{src:"/assets/img/icons/icon-maskable-512px.png",sizes:"512x512",type:"image/png"}],navigator.mediaSession.metadata=new MediaMetadata({title:t.channel.program_present?t.channel.program_present.title:"放送休止",artist:t.channel.channel_name,artwork:_}),"setPositionState"in navigator.mediaSession&&navigator.mediaSession.setPositionState({duration:0,playbackRate:1}),navigator.mediaSession.setActionHandler("play",(function(){t.player.play()})),navigator.mediaSession.setActionHandler("pause",(function(){t.player.pause()})),navigator.mediaSession.setActionHandler("previoustrack",Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return navigator.mediaSession.metadata=new MediaMetadata({title:t.channel_previous.program_present?t.channel_previous.program_present.title:"放送休止",artist:t.channel_previous.channel_name,artwork:_}),e.next=3,t.$router.replace({path:"/tv/watch/".concat(t.channel_previous.channel_id)});case 3:case"end":return e.stop()}}),e)})))),navigator.mediaSession.setActionHandler("nexttrack",Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return navigator.mediaSession.metadata=new MediaMetadata({title:t.channel_next.program_present?t.channel_next.program_present.title:"放送休止",artist:t.channel_next.channel_name,artwork:_}),e.next=3,t.$router.replace({path:"/tv/watch/".concat(t.channel_next.channel_id)});case 3:case"end":return e.stop()}}),e)})))));case 47:case"end":return e.stop()}}),e,null,[[2,8],[18,24]])})))()},controlDisplayTimer:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=/iPhone|iPad|iPod|Macintosh|Android|Mobile/i.test(navigator.userAgent)&&"ontouchend"in document;if((1!=a||null===e||"mousemove"!==e.type)&&(0!=a||null===e||"touchmove"!==e.type&&"click"!==e.type)){window.clearTimeout(this.control_interval_id);var i=function e(){document.activeElement!==t.player.template.commentInput?(t.is_control_display=!1,null!==t.player&&(t.player.controller.hide(),t.player.setting.hide())):t.control_interval_id=window.setTimeout(e,3e3)};!0===a&&!0===n?this.player.controller.isShow()?(this.is_control_display=!0,this.player.controller.show(),this.control_interval_id=window.setTimeout(i,3e3)):(this.is_control_display=!1,this.player.controller.hide(),this.player.setting.hide()):(this.is_control_display=!0,null!==this.player&&this.player.controller.show(),this.control_interval_id=window.setTimeout(i,3e3))}},initPlayer:function(){var t=this;if(window.mpegts=ft.a,null!==this.player&&!0===this.player.KonomiTVCanDestroy){try{this.player.destroy()}catch(s){void 0!==this.player.plugins.mpegts&&this.player.plugins.mpegts.destroy()}this.player=null}this.player=new vt.a({container:this.$el.querySelector(".watch-player__dplayer"),theme:"#E64F97",lang:"ja-jp",live:!0,loop:!1,airplay:!1,autoplay:!0,hotkey:!1,screenshot:!0,volume:1,video:{defaultQuality:this.channel.is_radiochannel?"48kHz/192kbps":nt.getSettingsItem("tv_streaming_quality"),quality:function(){var e=[];if(t.channel.is_radiochannel)e.push({name:"48kHz/192kbps",type:"mpegts",url:"".concat(nt.api_base_url,"/streams/live/").concat(t.channel_id,"/1080p/mpegts")});else for(var n=0,a=["1080p","810p","720p","540p","480p","360p","240p"];n\n キーボードショートカット\n \n ');var n=this.player.template.settingOriginPanel.scrollHeight;this.player.template.settingBox.style.clipPath="inset(calc(100% - ".concat(n,"px) 0 0 round 7px)"),this.$el.querySelector(".dplayer-setting-keyboard-shortcut").addEventListener("click",(function(){t.player.setting.hide(),t.shortcut_key_modal=!0}))}var a=function(){t.player.setting.hide(),t.controlDisplayTimer()};this.player.on("play",a),this.player.on("pause",a),this.player.on("quality_start",(function(){t.background_url=nt.generatePlayerBackgroundURL(),null!==t.eventsource&&(t.eventsource.close(),t.eventsource=null),t.initEventHandler()})),this.player.plugins.aribb24Superimpose.show(),this.player.on("subtitle_hide",(function(){t.player.plugins.aribb24Superimpose.show()})),this.interval_ids.push(window.setInterval((function(){t.player.video.paused&&t.player.video.buffered.end(0)-t.player.video.currentTime>30&&t.player.sync()}),6e4));var i=this.$el;this.fullscreen_handler=function(){return t.is_fullscreen=t.player.fullScreen.isFullScreen()},void 0!==i.onfullscreenchange?i.addEventListener("fullscreenchange",this.fullscreen_handler):i.addEventListener("webkitfullscreenchange",this.fullscreen_handler),this.player.fullScreen.isFullScreen=function(t){return!(!document.fullscreenElement&&!document.webkitFullscreenElement)},this.player.fullScreen.request=function(e){t.player.fullScreen.isFullScreen()?t.player.fullScreen.cancel():(i.requestFullscreen=i.requestFullscreen||i.webkitRequestFullscreen,i.requestFullscreen&&i.requestFullscreen(),screen.orientation&&screen.orientation.lock("landscape").catch((function(){})))},this.player.fullScreen.cancel=function(t){document.exitFullscreen=document.exitFullscreen||document.webkitExitFullscreen,document.exitFullscreen&&document.exitFullscreen(),screen.orientation&&screen.orientation.unlock()}},initEventHandler:function(){var t=this;this.is_loading=!0;var e=function(){window.setTimeout((function(){t.is_loading=!1,t.channel.is_radiochannel?t.is_background_display=!0:t.is_background_display=!1}),100),t.player.video.oncanplay=null,t.player.video.oncanplaythrough=null};this.player.video.oncanplay=e,this.player.video.oncanplaythrough=e;var n=this.channel.is_radiochannel?"1080p":this.player.quality.name;this.eventsource=new EventSource("".concat(nt.api_base_url,"/streams/live/").concat(this.channel_id,"/").concat(n,"/events")),this.eventsource.addEventListener("initial_update",(function(e){var n=JSON.parse(e.data);"Standby"===n.status&&(t.is_background_display=!0)})),this.eventsource.addEventListener("status_update",(function(e){var n=JSON.parse(e.data);switch(console.log("Status: ".concat(n.status," Detail:").concat(n.detail)),t.channel.viewers=n.clients_count,n.status){case"Standby":t.player.template.notice.textContent.includes("画質を")||t.player.notice(n.detail,-1),t.is_background_display=!0;break;case"ONAir":t.player.template.notice.textContent.includes("画質を")||t.player.notice(t.player.template.notice.textContent,1e-6),document.pictureInPictureElement&&(document.exitPictureInPicture(),t.player.video.requestPictureInPicture());break;case"Restart":t.player.notice(n.detail,-1),t.player.switchVideo({url:t.player.quality.url,type:t.player.quality.type}),t.player.play(),t.is_background_display=!0;break;case"Offline":t.player.notice(n.detail,-1),t.player.video.onerror=function(){t.player.notice(n.detail,-1),t.player.video.onerror=null},t.player.danmaku.clear(),t.player.video.pause(),t.eventsource.close(),t.is_background_display=!0;break}})),this.eventsource.addEventListener("detail_update",(function(e){var n=JSON.parse(e.data);console.log("Status: ".concat(n.status," Detail:").concat(n.detail)),t.channel.viewers=n.clients_count,"Standby"===n.status&&(t.player.notice(n.detail,-1),t.is_background_display||(t.is_background_display=!0))})),this.eventsource.addEventListener("clients_update",(function(e){var n=JSON.parse(e.data);t.channel.viewers=n.clients_count}))},initShortcutKeyHandler:function(){var t=this;this.shortcut_key_handler=function(e){var n=!1;e.repeat&&(n=!0);var a=Date.now();if(!(a-t.shortcut_key_pressed_at<100)){t.shortcut_key_pressed_at=a;var i=document.activeElement.tagName.toUpperCase(),s=document.activeElement.getAttribute("contenteditable");if("INPUT"!==i&&"TEXTAREA"!==i&&""!==s&&"true"!==s){if(!1===n){var r=t.channel.channel_type;e.shiftKey&&"GR"==t.channel.channel_type&&(r="BS"),e.shiftKey&&"BS"==t.channel.channel_type&&(r="GR");var l=null;if("Digit1"!==e.code&&"Digit2"!==e.code&&"Digit3"!==e.code&&"Digit4"!==e.code&&"Digit5"!==e.code&&"Digit6"!==e.code&&"Digit7"!==e.code&&"Digit8"!==e.code&&"Digit9"!==e.code||(l=Number(e.code.replace("Digit",""))),"Digit0"===e.code&&(l=10),"Minus"===e.code&&(l=11),"Equal"===e.code&&(l=12),"Numpad1"!==e.code&&"Numpad2"!==e.code&&"Numpad3"!==e.code&&"Numpad4"!==e.code&&"Numpad5"!==e.code&&"Numpad6"!==e.code&&"Numpad7"!==e.code&&"Numpad8"!==e.code&&"Numpad9"!==e.code||(l=Number(e.code.replace("Numpad",""))),"Numpad0"===e.code&&(l=10),null!==l){var o=et.getChannelFromRemoconID(t.channels_list,r,l);if(null!==o&&o.channel_id!==t.channel_id)return void Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$router.replace({path:"/tv/watch/".concat(o.channel_id)});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))()}}if("ArrowUp"===e.code&&!1===n)return e.preventDefault(),void Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$router.replace({path:"/tv/watch/".concat(t.channel_previous.channel_id)});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))();if("ArrowDown"===e.code&&!1===n)return e.preventDefault(),void Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$router.replace({path:"/tv/watch/".concat(t.channel_next.channel_id)});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))();if("Slash"===e.code&&!1===n)return void(t.shortcut_key_modal=!t.shortcut_key_modal);if(!1===n){if("KeyP"===e.code)return void(t.is_panel_display=!t.is_panel_display);if("KeyK"===e.code)return void(t.panel_active_tab="Program");if("KeyL"===e.code)return void(t.panel_active_tab="Channel");if("Semicolon"===e.code)return void(t.panel_active_tab="Comment");if("Quote"===e.code)return void(t.panel_active_tab="Twitter")}if(null!==t.player&&!e.ctrlKey&&!e.metaKey){if("ArrowLeft"===e.code)return e.preventDefault(),!1===t.player.video.paused&&t.player.video.pause(),void(t.player.video.currentTime=t.player.video.currentTime-.25);if("ArrowRight"===e.code)return e.preventDefault(),!1===t.player.video.paused&&t.player.video.pause(),void(t.player.video.currentTime=t.player.video.currentTime+.25);if(!1===n){if("Space"===e.code)return void t.player.toggle();if("KeyF"===e.code)return void t.player.fullScreen.toggle();if("KeyW"===e.code)return void t.player.sync();if("KeyE"===e.code)return void(document.pictureInPictureEnabled&&t.player.template.pipButton.click());if("KeyS"===e.code)return t.player.subtitle.toggle(),void(t.player.subtitle.container.classList.contains("dplayer-subtitle-hide")?t.player.notice("".concat(t.player.tran("Hide subtitle"))):t.player.notice("".concat(t.player.tran("Show subtitle"))));if("KeyD"===e.code)return t.player.template.showDanmaku.click(),void(t.player.template.showDanmakuToggle.checked?t.player.notice("".concat(t.player.tran("Show comment"))):t.player.notice("".concat(t.player.tran("Hide comment"))));if("KeyM"===e.code)return e.preventDefault(),t.player.controller.show(),t.player.comment.show(),t.controlDisplayTimer(),void window.setTimeout((function(){return t.player.template.commentInput.focus()}),100)}}}}},document.addEventListener("keydown",this.shortcut_key_handler)},destroy:function(){var t,e=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=Object(D["a"])(this.interval_ids);try{for(a.s();!(t=a.n()).done;){var i=t.value;window.clearInterval(i)}}catch(s){a.e(s)}finally{a.f()}window.clearTimeout(this.control_interval_id),this.interval_ids=[],this.is_loading=!0,this.is_background_display=!1,this.player.KonomiTVCanDestroy=!0,null!==this.eventsource&&(this.eventsource.close(),this.eventsource=null),this.interval_ids.push(window.setTimeout((function(){if(e.player.video.pause(),!0===n&&null!==e.player){try{e.player.destroy()}catch(t){void 0!==e.player.plugins.mpegts&&e.player.plugins.mpegts.destroy()}e.player=null}}),400))}}}),Lt=Ft,Ut=(n("598f"),n("e8a1"),n("b0af")),Bt=n("99d9"),$t=n("62ad"),Kt=n("169a"),qt=n("ce7e"),Gt=n("0fd9"),zt=Object(d["a"])(Lt,dt,_t,!1,null,"8b237ea4",null),Yt=zt.exports;m()(zt,{VBtn:H["a"],VCard:Ut["a"],VCardActions:Bt["a"],VCardTitle:Bt["b"],VCol:$t["a"],VDialog:Kt["a"],VDivider:qt["a"],VRow:Gt["a"],VSpacer:L["a"]}),$()(zt,{Ripple:K["a"]});var Wt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Base",[n("h2",{staticClass:"settings__heading"},[n("Icon",{attrs:{icon:"fa-solid:sliders-h",width:"18px"}}),n("span",{staticClass:"ml-3"},[t._v("全般")])],1),n("div",{staticClass:"settings__content"},[n("div",{staticClass:"settings__item"},[n("div",{staticClass:"settings__item-heading"},[t._v("テレビのストリーミング画質")]),n("div",{staticClass:"settings__item-label"},[t._v(" テレビをライブストリーミングする際の既定の画質を設定します。"),n("br"),t._v(" ストリーミング画質はプレイヤーの設定からいつでも切り替えられます。"),n("br")]),n("v-select",{staticClass:"settings__item-form",attrs:{outlined:"","hide-details":"",items:t.tv_streaming_quality},model:{value:t.settings.tv_streaming_quality,callback:function(e){t.$set(t.settings,"tv_streaming_quality",e)},expression:"settings.tv_streaming_quality"}})],1),n("div",{staticClass:"settings__item"},[n("div",{staticClass:"settings__item-heading"},[t._v("既定のパネルの表示状態")]),n("div",{staticClass:"settings__item-label"},[t._v(" 視聴画面を開いたときに、右側のパネルをどう表示するかを設定します。"),n("br")]),n("v-select",{staticClass:"settings__item-form",attrs:{outlined:"","hide-details":"",items:t.panel_display_state},model:{value:t.settings.panel_display_state,callback:function(e){t.$set(t.settings,"panel_display_state",e)},expression:"settings.panel_display_state"}})],1),n("div",{staticClass:"settings__item"},[n("div",{staticClass:"settings__item-heading"},[t._v("既定で表示されるパネルのタブ")]),n("div",{staticClass:"settings__item-label"},[t._v(" 視聴画面を開いたときに、右側のパネルで最初に表示されるタブを設定します。"),n("br")]),n("v-select",{staticClass:"settings__item-form",attrs:{outlined:"","hide-details":"",items:t.panel_active_tab},model:{value:t.settings.panel_active_tab,callback:function(e){t.$set(t.settings,"panel_active_tab",e)},expression:"settings.panel_active_tab"}})],1)])])},Jt=[],Xt=(n("4fad"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"route-container"},[n("Header"),n("main",[n("Navigation"),n("v-card",{staticClass:"settings-container d-flex px-5 py-5 mx-auto background",attrs:{elevation:"0",width:"100%","max-width":"1000"}},[n("div",[n("v-navigation-drawer",{staticClass:"settings-navigation flex-shrink-0 background",attrs:{permanent:"",width:"195",height:"auto"}},[n("v-list-item",{staticClass:"px-4"},[n("v-list-item-content",[n("h1",[t._v("設定")])])],1),n("v-list",{staticClass:"mt-2 px-0",attrs:{nav:""}},[n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/general"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{staticStyle:{padding:"0 3px"},attrs:{icon:"fa-solid:sliders-h",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("全般")])],1)],1),n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/account"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{attrs:{icon:"fluent:person-20-filled",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("アカウント")])],1)],1),n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/jikkyo"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{staticStyle:{padding:"0 2px"},attrs:{icon:"bi:chat-left-text-fill",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("ニコニコ実況")])],1)],1),n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/twitter"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{staticStyle:{padding:"0 1px"},attrs:{icon:"fa-brands:twitter",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("Twitter")])],1)],1)],1)],1)],1),n("v-card",{staticClass:"settings ml-5 px-7 py-7 background lighten-1",attrs:{width:"100%"}},[t._t("default")],2)],1)],1)],1)}),Qt=[],Zt=r["a"].extend({name:"SettingsBase",components:{Header:z,Navigation:rt}}),te=Zt,ee=(n("5e6f"),n("8860")),ne=n("da13"),ae=n("5d23"),ie=n("34c3"),se=n("f774"),re=Object(d["a"])(te,Xt,Qt,!1,null,"18637a38",null),le=re.exports;m()(re,{VCard:Ut["a"],VList:ee["a"],VListItem:ne["a"],VListItemContent:ae["a"],VListItemIcon:ie["a"],VListItemTitle:ae["b"],VNavigationDrawer:se["a"]});var oe=r["a"].extend({name:"SettingsGeneral",components:{Base:le},data:function(){return{tv_streaming_quality:[{text:"1080p (1時間あたり約2.31GB / 5.1Mbps)",value:"1080p"},{text:"810p (1時間あたり約1.92GB / 4.2Mbps)",value:"810p"},{text:"720p (1時間あたり約1.33GB / 3.0Mbps)",value:"720p"},{text:"540p (1時間あたり約1.00GB / 2.2Mbps)",value:"540p"},{text:"480p (1時間あたり約0.74GB / 1.6Mbps)",value:"480p"},{text:"360p (1時間あたり約0.40GB / 0.9Mbps)",value:"360p"},{text:"240p (1時間あたり約0.23GB / 0.5Mbps)",value:"240p"}],panel_display_state:[{text:"前回の状態を復元する",value:"RestorePreviousState"},{text:"常に表示する",value:"AlwaysDisplay"},{text:"常に折りたたむ",value:"AlwaysFold"}],panel_active_tab:[{text:"番組情報タブ",value:"Program"},{text:"チャンネルタブ",value:"Channel"},{text:"コメントタブ",value:"Comment"},{text:"Twitter タブ",value:"Twitter"}],settings:function(){for(var t={},e=0,n=["tv_streaming_quality","panel_display_state","panel_active_tab"];e$1');return s=s.replace(i,'$1'),s}return"title"==e?"放送休止":"この時間は放送を休止しています。"}},{key:"getAttribute",value:function(t,e,n){return null!==t&&void 0!==t[e]&&null!==t[e]?t[e]:n}},{key:"getChannelType",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.match("(?[a-z]+)[0-9]+").groups.channel_type.toUpperCase();return"GR"===n&&e?"地デジ":n}},{key:"getChannelForceType",value:function(t){return null===t?"normal":t>=1e3?"festival":t>=200?"so-many":t>=100?"many":"normal"}},{key:"getChannelFromRemoconID",value:function(t,e,n){e=e.replace("GR","地デジ");for(var a=t.get(e),i=0;i1&&void 0!==arguments[1]&&arguments[1];if(null!==t&&"2000-01-01T00:00:00+09:00"!==t.start_time){tt.a.locale("ja");var n=tt()(t.start_time),a=tt()(t.end_time),i=t.duration/60;return!0===e?"".concat(n.format("HH:mm")," ~ ").concat(a.format("HH:mm")):"".concat(n.format("YYYY/MM/DD (dd) HH:mm")," ~ ").concat(a.format("HH:mm")," (").concat(i,"分)")}return!0===e?"--:-- ~ --:--":"----/--/-- (-) --:-- ~ --:-- (--分)"}},{key:"getProgramProgress",value:function(t){if(null!==t){var e=tt()(tt()()).diff(t.start_time,"second");return e/t.duration*100}return 0}}]),t}()),nt=Q,at=r["a"].extend({name:"Navigation",data:function(){return{Utils:nt}}}),it=at,st=(n("d2ee"),Object(d["a"])(it,Y,W,!1,null,"4fdece88",null)),rt=st.exports;m()(st,{VSpacer:L["a"]}),$()(st,{Ripple:K["a"]});var lt=r["a"].extend({name:"Home",components:{Header:z,Navigation:rt},data:function(){return{Utils:nt,TVUtils:et,tab:null,is_loading:!0,interval_ids:[],channels_list:new Map,pinned_channel_ids:[]}},created:function(){var t=this;this.update();var e=60-Math.floor((new Date).getTime()/1e3)%60;this.interval_ids.push(window.setTimeout((function(){t.update(),t.interval_ids.push(window.setInterval((function(){t.update()}),3e4))}),1e3*e))},beforeDestroy:function(){var t,e=Object(D["a"])(this.interval_ids);try{for(e.s();!(t=e.n()).done;){var n=t.value;window.clearInterval(n)}}catch(a){e.e(a)}finally{e.f()}},methods:{update:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,r["a"].axios.get("".concat(nt.api_base_url,"/channels"));case 3:n=e.sent,e.next=10;break;case 6:return e.prev=6,e.t0=e["catch"](0),console.error(e.t0),e.abrupt("return");case 10:a=function(t){return t.is_display},t.channels_list=new Map,n.data.GR.length>0&&t.channels_list.set("地デジ",n.data.GR.filter(a)),n.data.BS.length>0&&t.channels_list.set("BS",n.data.BS.filter(a)),n.data.CS.length>0&&t.channels_list.set("CS",n.data.CS.filter(a)),n.data.CATV.length>0&&t.channels_list.set("CATV",n.data.CATV.filter(a)),n.data.SKY.length>0&&t.channels_list.set("SKY",n.data.SKY.filter(a)),n.data.STARDIGIO.length>0&&t.channels_list.set("StarDigio",n.data.STARDIGIO.filter(a)),t.updatePinnedChannelList(!!t.is_loading),t.is_loading=!1;case 20:case"end":return e.stop()}}),e,null,[[0,6]])})))()},addPinnedChannel:function(t){this.pinned_channel_ids=nt.getSettingsItem("pinned_channel_ids"),this.pinned_channel_ids.push(t),nt.setSettingsItem("pinned_channel_ids",this.pinned_channel_ids),this.updatePinnedChannelList()},removePinnedChannel:function(t){this.pinned_channel_ids=nt.getSettingsItem("pinned_channel_ids"),this.pinned_channel_ids.splice(this.pinned_channel_ids.indexOf(t),1),nt.setSettingsItem("pinned_channel_ids",this.pinned_channel_ids),this.updatePinnedChannelList()},updatePinnedChannelList:function(){var t=this,e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.pinned_channel_ids=nt.getSettingsItem("pinned_channel_ids");var n,a=[],i=Object(D["a"])(this.pinned_channel_ids);try{var s=function(){var e=n.value,i=et.getChannelType(e,!0);a.push(t.channels_list.get(i).find((function(t){return t.channel_id===e})))};for(i.s();!(n=i.n()).done;)s()}catch(r){i.e(r)}finally{i.f()}this.channels_list.has("ピン留め")?this.channels_list.set("ピン留め",a):this.channels_list=new Map([["ピン留め",a]].concat(Object(V["a"])(this.channels_list))),0===a.length&&!0===e&&(this.tab=1)},isPinnedChannel:function(t){return this.pinned_channel_ids.includes(t)}}}),ot=lt,ct=(n("92b8"),n("ee0e"),n("71a3")),ut=Object(d["a"])(ot,R,E,!1,null,"6a407b07",null),pt=ut.exports;m()(ut,{VSpacer:L["a"],VTab:ct["a"]}),$()(ut,{Ripple:K["a"]});var dt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"route-container"},[n("main",{staticClass:"watch-container",class:{"watch-container--control-display":t.is_control_display,"watch-container--panel-display":t.is_panel_display,"watch-container--fullscreen":t.is_fullscreen}},[n("nav",{staticClass:"watch-navigation",on:{mousemove:function(e){return t.controlDisplayTimer(e)},touchmove:function(e){return t.controlDisplayTimer(e)},click:function(e){return t.controlDisplayTimer(e)}}},[n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"watch-navigation__icon",attrs:{to:"/tv/"}},[n("img",{staticClass:"watch-navigation__icon-image",attrs:{src:"/assets/img/icon.svg",width:"23px"}})]),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"テレビをみる",expression:"'テレビをみる'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/tv/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:tv-20-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"ビデオをみる",expression:"'ビデオをみる'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/videos/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:movies-and-tv-20-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"番組表",expression:"'番組表'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/schedules/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:calendar-ltr-20-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"キャプチャ",expression:"'キャプチャ'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/captures/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:image-multiple-24-regular",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"ウォッチリスト",expression:"'ウォッチリスト'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/watchlists/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"ic:round-playlist-play",width:"26px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"視聴履歴",expression:"'視聴履歴'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/histories/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:history-16-regular",width:"26px"}})],1),n("v-spacer"),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"設定",expression:"'設定'",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",to:"/settings/"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:settings-20-regular",width:"26px"}})],1),n("a",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.right",value:"version "+t.Utils.version,expression:"`version ${Utils.version}`",modifiers:{right:!0}}],staticClass:"watch-navigation__link",attrs:{"active-class":"watch-navigation__link--active",href:"https://github.com/tsukumijima/KonomiTV"}},[n("Icon",{staticClass:"watch-navigation__link-icon",attrs:{icon:"fluent:info-16-regular",width:"26px"}})],1)],1),n("div",{staticClass:"watch-content",on:{mousemove:function(e){return t.controlDisplayTimer(e,!0)},touchmove:function(e){return t.controlDisplayTimer(e,!0)},click:function(e){return t.controlDisplayTimer(e,!0)}}},[n("header",{staticClass:"watch-header"},[n("img",{staticClass:"watch-header__broadcaster",attrs:{src:t.Utils.api_base_url+"/channels/"+t.$route.params.channel_id+"/logo"}}),n("span",{staticClass:"watch-header__program-title",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_present,"title"))}}),n("span",{staticClass:"watch-header__program-time"},[t._v(t._s(t.TVUtils.getProgramTime(t.channel.program_present,!0)))]),n("v-spacer"),n("span",{staticClass:"watch-header__now"},[t._v(t._s(t.time))])],1),n("div",{staticClass:"watch-player",class:{"watch-player--loading":t.is_loading}},[n("div",{staticClass:"watch-player__background",class:{"watch-player__background--display":t.is_background_display},style:{backgroundImage:"url("+t.background_url+")"}},[n("img",{staticClass:"watch-player__background-logo",attrs:{src:"/assets/img/logo.svg"}})]),n("div",{staticClass:"watch-player__dplayer"}),n("div",{staticClass:"watch-player__button",on:{mousemove:function(e){return t.controlDisplayTimer(e)},touchmove:function(e){return t.controlDisplayTimer(e)},click:function(e){return t.controlDisplayTimer(e)}}},[n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.top",value:"前のチャンネル",expression:"'前のチャンネル'",modifiers:{top:!0}}],staticClass:"switch-button switch-button-up",attrs:{to:"/tv/watch/"+t.channel_previous.channel_id}},[n("Icon",{staticClass:"switch-button-icon",attrs:{icon:"fluent:ios-arrow-left-24-filled",width:"32px",rotate:"1"}})],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"switch-button switch-button-panel switch-button-panel--open",on:{click:function(e){t.is_panel_display=!t.is_panel_display}}},[n("Icon",{staticClass:"switch-button-icon",attrs:{icon:"fluent:navigation-16-filled",width:"32px"}})],1),n("router-link",{directives:[{name:"ripple",rawName:"v-ripple"},{name:"tooltip",rawName:"v-tooltip.bottom",value:"次のチャンネル",expression:"'次のチャンネル'",modifiers:{bottom:!0}}],staticClass:"switch-button switch-button-down",attrs:{to:"/tv/watch/"+t.channel_next.channel_id}},[n("Icon",{staticClass:"switch-button-icon",attrs:{icon:"fluent:ios-arrow-right-24-filled",width:"33px",rotate:"1"}})],1)],1)])]),n("div",{staticClass:"watch-panel",on:{mousemove:function(e){return t.controlDisplayTimer(e)},touchmove:function(e){return t.controlDisplayTimer(e)},click:function(e){return t.controlDisplayTimer(e)}}},[n("div",{staticClass:"watch-panel__header"},[n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-close-button",on:{click:function(e){t.is_panel_display=!1}}},[n("Icon",{staticClass:"panel-close-button__icon",attrs:{icon:"akar-icons:chevron-right",width:"25px"}}),n("span",{staticClass:"panel-close-button__text"},[t._v("閉じる")])],1),n("v-spacer"),n("div",{staticClass:"panel-broadcaster"},[n("img",{staticClass:"panel-broadcaster__icon",attrs:{src:t.Utils.api_base_url+"/channels/"+t.$route.params.channel_id+"/logo"}}),n("div",{staticClass:"panel-broadcaster__number"},[t._v(t._s(t.channel.channel_number))]),n("div",{staticClass:"panel-broadcaster__name"},[t._v(t._s(t.channel.channel_name))])])],1),n("div",{staticClass:"watch-panel__content-container"},[n("Program",{staticClass:"watch-panel__content",class:{"watch-panel__content--active":"Program"===t.panel_active_tab},attrs:{channel:t.channel}}),n("Channel",{staticClass:"watch-panel__content",class:{"watch-panel__content--active":"Channel"===t.panel_active_tab},attrs:{channels_list:t.channels_list}}),n("Comment",{staticClass:"watch-panel__content",class:{"watch-panel__content--active":"Comment"===t.panel_active_tab},attrs:{channel:t.channel,player:t.player}})],1),n("div",{staticClass:"watch-panel__navigation"},[n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Program"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Program"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"fa-solid:info-circle",width:"33px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("番組情報")])],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Channel"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Channel"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"fa-solid:broadcast-tower",width:"34px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("チャンネル")])],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Comment"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Comment"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"bi:chat-left-text-fill",width:"29px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("コメント")])],1),n("div",{directives:[{name:"ripple",rawName:"v-ripple"}],staticClass:"panel-navigation-button",class:{"panel-navigation-button--active":"Twitter"===t.panel_active_tab},on:{click:function(e){t.panel_active_tab="Twitter"}}},[n("Icon",{staticClass:"panel-navigation-button__icon",attrs:{icon:"fa-brands:twitter",width:"34px"}}),n("span",{staticClass:"panel-navigation-button__text"},[t._v("Twitter")])],1)])])]),n("v-dialog",{attrs:{"max-width":"980",transition:"slide-y-transition"},model:{value:t.shortcut_key_modal,callback:function(e){t.shortcut_key_modal=e},expression:"shortcut_key_modal"}},[n("v-card",[n("v-card-title",{staticClass:"px-5 pt-4 pb-3 d-flex align-center font-weight-bold"},[n("Icon",{attrs:{icon:"fluent:keyboard-20-filled",height:"28px"}}),n("span",{staticClass:"ml-3"},[t._v("キーボードショートカット")])],1),n("div",{staticClass:"px-5 pb-4"},[n("v-row",t._l(t.shortcut_key_list,(function(e,a){return n("v-col",{key:a,attrs:{cols:"6"}},t._l(e,(function(e){return n("div",{key:e.name,staticClass:"mt-3"},[n("div",{staticClass:"text-subtitle-1 d-flex align-center font-weight-bold"},[n("Icon",{attrs:{icon:e.icon,height:e.icon_height}}),n("span",{staticClass:"ml-2"},[t._v(t._s(e.name))])],1),t._l(e.shortcuts,(function(e){return n("div",{key:e.name,staticClass:"mt-3"},[n("div",{staticClass:"text-subtitle-2 mt-2 d-flex align-center font-weight-medium"},[n("span",{staticClass:"mr-2",domProps:{innerHTML:t._s(e.name)}}),n("div",{staticClass:"ml-auto d-flex align-center flex-shrink-0"},t._l(e.keys,(function(a,i){return n("div",{key:a.name,staticClass:"ml-auto d-flex align-center"},[!0===a.icon?n("Icon",{staticClass:"shortcut-key",attrs:{icon:a.name,height:"18px"}}):t._e(),!1===a.icon?n("span",{staticClass:"shortcut-key"},[t._v(t._s(a.name))]):t._e(),in.comment_list_element.clientWidth&&(i=!0)},n.comment_list_element.onmouseup=function(t){var e=t.clientX-n.comment_list_element.getBoundingClientRect().left;e>n.comment_list_element.clientWidth&&(i=!1)},s=function(){i=!0,window.setTimeout((function(){return i=!1}),100)},r=!1,n.comment_list_element.ontouchstart=function(){return r=!0},n.comment_list_element.ontouchend=function(){return r=!1},n.comment_list_element.ontouchmove=function(){return!0===r?s():""},n.comment_list_element.onwheel=s,n.comment_list_element.onscroll=Object(A["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!1!==n.is_auto_scrolling||!0!==i){t.next=5;break}return n.is_manual_scroll=!0,t.next=4,new Promise((function(t){return setTimeout(t,100)}));case 4:n.comment_list_element.scrollTop+n.comment_list_element.offsetHeight>n.comment_list_element.scrollHeight-10&&(n.is_manual_scroll=!1);case 5:case"end":return t.stop()}}),t)}))),a.next=20,n.initWatchSession();case 20:return l=a.sent,a.next=23,n.initCommentSession(l);case 23:return a.next=25,n.initReserveObserver();case 25:case"end":return a.stop()}}),a)})))()}},methods:{initWatchSession:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,r["a"].axios.get("".concat(nt.api_base_url,"/channels/").concat(t.channel.channel_id,"/jikkyo"));case 3:n=e.sent,e.next=9;break;case 6:throw e.prev=6,e.t0=e["catch"](0),new Error(e.t0);case 9:if(!1!==n.data.is_success){e.next=11;break}throw new Error(n.data.detail);case 11:return e.abrupt("return",new Promise((function(e){t.watch_session=new WebSocket(n.data.audience_token),t.watch_session.addEventListener("open",(function(){t.watch_session.send(JSON.stringify({type:"startWatching",data:{reconnect:!1}}))})),t.watch_session.addEventListener("message",function(){var n=Object(A["a"])(regeneratorRuntime.mark((function n(a){var i,s,r,l,o;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:i=JSON.parse(a.data),n.t0=i.type,n.next="room"===n.t0?4:"seat"===n.t0?5:"ping"===n.t0?7:"error"===n.t0?9:"reconnect"===n.t0?33:"disconnect"===n.t0?43:79;break;case 4:return n.abrupt("return",e({thread_id:i.data.threadId,your_post_key:i.data.yourPostKey?i.data.yourPostKey:null,message_server:i.data.messageServer.uri}));case 5:return t.keep_seat_interval_id=window.setInterval((function(){1===t.watch_session.readyState?t.watch_session.send(JSON.stringify({type:"keepSeat"})):window.clearInterval(t.keep_seat_interval_id)}),1e3*i.data.keepIntervalSec),n.abrupt("break",79);case 7:return t.watch_session.send(JSON.stringify({type:"pong"})),n.abrupt("break",79);case 9:n.t1=i.data.code,n.next="CONNECT_ERROR"===n.t1?12:"CONTENT_NOT_READY"===n.t1?14:"NO_THREAD_AVAILABLE"===n.t1?16:"NO_ROOM_AVAILABLE"===n.t1?18:"NO_PERMISSION"===n.t1?20:"NOT_ON_AIR"===n.t1?22:"BROADCAST_NOT_FOUND"===n.t1?24:"INTERNAL_SERVERERROR"===n.t1?26:28;break;case 12:return s="コメントサーバーに接続できません。",n.abrupt("break",30);case 14:return s="ニコニコ実況が配信できない状態です。",n.abrupt("break",30);case 16:return s="コメントスレッドを取得できません。",n.abrupt("break",30);case 18:return s="コメント部屋を取得できません。",n.abrupt("break",30);case 20:return s="API にアクセスする権限がありません。",n.abrupt("break",30);case 22:return s="ニコニコ実況が放送中ではありません。",n.abrupt("break",30);case 24:return s="ニコニコ実況の配信情報を取得できません。",n.abrupt("break",30);case 26:return s="ニコニコ実況でサーバーエラーが発生しています。",n.abrupt("break",30);case 28:return s="ニコニコ実況でエラーが発生しています。(".concat(i.data.code,")"),n.abrupt("break",30);case 30:return console.log("error occurred. code: ".concat(i.data.code)),t.player.danmaku.showing&&t.player.notice(s),n.abrupt("break",79);case 33:return t.destroy(),n.next=36,new Promise((function(t){return setTimeout(t,1e3*i.data.waitTimeSec)}));case 36:return t.player.danmaku.showing&&t.player.notice("ニコニコ実況に再接続しています…"),n.next=39,t.initWatchSession();case 39:return r=n.sent,n.next=42,t.initCommentSession(r);case 42:return n.abrupt("break",79);case 43:t.watch_session&&(t.watch_session.onclose=null),n.t2=i.data.reason,n.next="TAKEOVER"===n.t2?47:"NO_PERMISSION"===n.t2?49:"END_PROGRAM"===n.t2?51:"PING_TIMEOUT"===n.t2?53:"TOO_MANY_CONNECTIONS"===n.t2?55:"TOO_MANY_WATCHINGS"===n.t2?57:"CROWDED"===n.t2?59:"MAINTENANCE_IN"===n.t2?61:"SERVICE_TEMPORARILY_UNAVAILABLE"===n.t2?63:65;break;case 47:return l="ニコニコ実況の番組から追い出されました。",n.abrupt("break",67);case 49:return l="ニコニコ実況の番組の座席を取得できませんでした。",n.abrupt("break",67);case 51:return l="ニコニコ実況がリセットされたか、コミュニティの番組が終了しました。",n.abrupt("break",67);case 53:return l="コメントサーバーとの接続生存確認に失敗しました。",n.abrupt("break",67);case 55:return l="ニコニコ実況の同一ユーザからの接続数上限を越えています。",n.abrupt("break",67);case 57:return l="ニコニコ実況の同一ユーザからの視聴番組数上限を越えています。",n.abrupt("break",67);case 59:return l="ニコニコ実況の番組が満席です。",n.abrupt("break",67);case 61:return l="ニコニコ実況はメンテナンス中です。",n.abrupt("break",67);case 63:return l="ニコニコ実況で一時的にサーバーエラーが発生しています。",n.abrupt("break",67);case 65:return l="ニコニコ実況との接続が切断されました。(".concat(i.data.reason,")"),n.abrupt("break",67);case 67:return console.log("disconnected. reason: ".concat(i.data.reason)),t.player.danmaku.showing&&t.player.notice(l),t.destroy(),n.next=72,new Promise((function(t){return setTimeout(t,5e3)}));case 72:return t.player.danmaku.showing&&t.player.notice("ニコニコ実況に再接続しています…"),n.next=75,t.initWatchSession();case 75:return o=n.sent,n.next=78,t.initCommentSession(o);case 78:return n.abrupt("break",79);case 79:case"end":return n.stop()}}),n)})));return function(t){return n.apply(this,arguments)}}()),t.watch_session.onclose=function(){var e=Object(A["a"])(regeneratorRuntime.mark((function e(n){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return console.log("disconnected. code: ".concat(n.code)),t.player.danmaku.showing&&t.player.notice("ニコニコ実況との接続が切断されました。(code: ".concat(n.code,")")),t.destroy(),e.next=5,new Promise((function(t){return setTimeout(t,1e4)}));case 5:return t.player.danmaku.showing&&t.player.notice("ニコニコ実況に再接続しています…"),e.next=8,t.initWatchSession();case 8:return a=e.sent,e.next=11,t.initCommentSession(a);case 11:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()})));case 12:case"end":return e.stop()}}),e,null,[[0,6]])})))()},initCommentSession:function(t){var e=this;return Object(A["a"])(regeneratorRuntime.mark((function n(){var a,i;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:a=[],i=!1,e.comment_session=new WebSocket(t.message_server),e.comment_session.addEventListener("open",(function(){e.comment_session.send(JSON.stringify([{ping:{content:"rs:0"}},{ping:{content:"ps:0"}},{thread:{version:"20061206",thread:t.thread_id,threadkey:t.your_post_key,user_id:"",res_from:-50}},{ping:{content:"pf:0"}},{ping:{content:"rf:0"}}]))})),e.comment_session.addEventListener("message",function(){var t=Object(A["a"])(regeneratorRuntime.mark((function t(n){var s,r,l,o,c,u,p,d,_,m,h;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(s=JSON.parse(n.data),void 0!==s.thread&&(0===s.thread.resultcode||(r="コメントサーバーに接続できませんでした。",console.error("Error: "+r))),void 0!==s.ping&&"rf:0"===s.ping.content&&(i=!0,e.scrollCommentList()),l=s.chat,void 0!==l&&void 0!==l.content&&!l.content.match(/\/[a-z]+ /)){t.next=6;break}return t.abrupt("return");case 6:if(!l.yourpost||1!==l.yourpost){t.next=8;break}return t.abrupt("return");case 8:if(o="#FFEAEA",c="right",void 0!==l.mail&&null!==l.mail){u=l.mail.replace("184","").split(" "),p=Object(D["a"])(u);try{for(p.s();!(d=p.n()).done;)_=d.value,null!==e.getCommentColor(_)&&(o=e.getCommentColor(_)),null!==e.getCommentPosition(_)&&(c=e.getCommentPosition(_))}catch(v){p.e(v)}finally{p.f()}}if(!i){t.next=15;break}return m=nt.getSettingsItem("comment_delay_time"),t.next=15,new Promise((function(t){return setTimeout(t,1e3*m)}));case 15:if(e.comment_list.length>500&&e.comment_list.shift(),h={id:l.no,text:l.content,time:tt()(1e3*l.date).format("HH:mm:ss")},"hidden"!==document.visibilityState){t.next=20;break}return a.push(h),t.abrupt("return");case 20:e.comment_list.push(h),i&&e.scrollCommentList(),i&&(e.player.video.paused||e.player.danmaku.draw({text:l.content,color:o,type:c}));case 23:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}()),document.onvisibilitychange=function(){var t;"visible"===document.visibilityState&&((t=e.comment_list).push.apply(t,Object(V["a"])(a)),a=[],e.scrollCommentList())};case 6:case"end":return n.stop()}}),n)})))()},initReserveObserver:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n,a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t.resize_observer_element=document.querySelector(".watch-player"),n=null,a=function(){var e=document.querySelector(".dplayer-video-wrap-aspect"),a=document.querySelector(".dplayer-danmaku");if(null!==t.resize_observer_element&&null!==t.resize_observer_element.clientHeight&&null!==e&&null!==e.clientHeight){var i=(t.resize_observer_element.clientHeight-e.clientHeight)/2,s=window.matchMedia("(max-height: 450px)").matches?50:66;if(i0&&void 0!==t[0]&&t[0],!0!==e.is_manual_scroll){n.next=3;break}return n.abrupt("return");case 3:e.is_auto_scrolling=!0,i=0;case 5:if(!(i<3)){n.next=12;break}return n.next=8,new Promise((function(t){return setTimeout(t,10)}));case 8:!0===a?e.comment_list_element.scrollTo({top:e.comment_list_element.scrollHeight,left:0,behavior:"smooth"}):e.comment_list_element.scrollTo(0,e.comment_list_element.scrollHeight);case 9:i++,n.next=5;break;case 12:return n.next=14,new Promise((function(t){return setTimeout(t,100)}));case 14:e.is_auto_scrolling=!1;case 15:case"end":return n.stop()}}),n)})))()},getCommentColor:function(t){var e={red:"#E54256",pink:"#FF8080",orange:"#FFC000",yellow:"#FFE133",green:"#64DD17",cyan:"#39CCFF",blue:"#0000FF",purple:"#D500F9",black:"#1E1310",white:"#FFEAEA",white2:"#CCCC99",niconicowhite:"#CCCC99",red2:"#CC0033",truered:"#CC0033",pink2:"#FF33CC",orange2:"#FF6600",passionorange:"#FF6600",yellow2:"#999900",madyellow:"#999900",green2:"#00CC66",elementalgreen:"#00CC66",cyan2:"#00CCCC",blue2:"#3399FF",marineblue:"#3399FF",purple2:"#6633CC",nobleviolet:"#6633CC",black2:"#666666"};return void 0!==e[t]?e[t]:null},getCommentPosition:function(t){switch(t){case"ue":return"top";case"naka":return"right";case"shita":return"bottom";default:return null}},destroy:function(){this.comment_list=[],document.onvisibilitychange=null,null!==this.watch_session&&(this.watch_session.onclose=null,this.watch_session.close(),this.watch_session=null),null!==this.comment_session&&(this.comment_session.onclose=null,this.comment_session.close(),this.comment_session=null),window.clearInterval(this.keep_seat_interval_id)}}})),Nt=Ot,Rt=(n("1548"),Object(d["a"])(Nt,It,Pt,!1,null,"7575b645",null)),Et=Rt.exports;$()(Rt,{Ripple:K["a"]});var Vt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"program-container"},[n("section",{staticClass:"program-broadcaster"},[n("img",{staticClass:"program-broadcaster__icon",attrs:{src:t.Utils.api_base_url+"/channels/"+t.$route.params.channel_id+"/logo"}}),n("div",{staticClass:"program-broadcaster__number"},[t._v("Ch: "+t._s(t.channel.channel_number))]),n("div",{staticClass:"program-broadcaster__name"},[t._v(t._s(t.channel.channel_name))])]),n("section",{staticClass:"program-info"},[n("h1",{staticClass:"program-info__title",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_present,"title"))}}),n("div",{staticClass:"program-info__time"},[t._v(t._s(t.TVUtils.getProgramTime(t.channel.program_present)))]),n("div",{staticClass:"program-info__description",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_present,"description"))}}),n("div",{staticClass:"program-info__genre-container"},t._l(t.TVUtils.getAttribute(t.channel.program_present,"genre",[]),(function(e,a){return n("div",{key:a,staticClass:"program-info__genre"},[t._v(" "+t._s(e.major)+" / "+t._s(e.middle)+" ")])})),0),n("div",{staticClass:"program-info__next"},[n("span",{staticClass:"program-info__next-decorate"},[t._v("NEXT")]),n("Icon",{staticClass:"program-info__next-icon",attrs:{icon:"fluent:fast-forward-20-filled",width:"16px"}})],1),n("span",{staticClass:"program-info__next-title",domProps:{innerHTML:t._s(t.TVUtils.decorateProgramInfo(t.channel.program_following,"title"))}}),n("div",{staticClass:"program-info__next-time"},[t._v(t._s(t.TVUtils.getProgramTime(t.channel.program_following)))]),n("div",{staticClass:"program-info__status"},[n("div",{staticClass:"program-info__status-force",class:"program-info__status-force--"+t.TVUtils.getChannelForceType(t.channel.channel_force)},[n("Icon",{attrs:{icon:"fa-solid:fire-alt",height:"14px"}}),n("span",{staticClass:"ml-2"},[t._v("勢い:")]),n("span",{staticClass:"ml-2"},[t._v(t._s(t.TVUtils.getAttribute(t.channel,"channel_force","--"))+" コメ/分")])],1),n("div",{staticClass:"program-info__status-viewers ml-5"},[n("Icon",{attrs:{icon:"fa-solid:eye",height:"14px"}}),n("span",{staticClass:"ml-2"},[t._v("視聴数:")]),n("span",{staticClass:"ml-1"},[t._v(t._s(t.channel.viewers))])],1)])]),n("section",{staticClass:"program-detail-container"},t._l(t.TVUtils.getAttribute(t.channel.program_present,"detail",{}),(function(e,a){return n("div",{key:a,staticClass:"program-detail"},[n("h2",{staticClass:"program-detail__heading"},[t._v(t._s(a))]),n("div",{staticClass:"program-detail__text"},[t._v(t._s(e))])])})),0)])},At=[],Dt=r["a"].extend({name:"Program",props:{channel:{type:Object,required:!0}},data:function(){return{Utils:nt,TVUtils:et}}}),jt=Dt,Mt=(n("9652"),Object(d["a"])(jt,Vt,At,!1,null,"00e07beb",null)),Ht=Mt.exports,Ft=r["a"].extend({name:"Watch",components:{Channel:Tt,Comment:Et,Program:Ht},data:function(){return{Utils:nt,TVUtils:et,time:tt()().format("YYYY/MM/DD HH:mm:ss"),panel_active_tab:nt.getSettingsItem("panel_active_tab"),background_url:"",is_loading:!0,is_background_display:!1,is_control_display:!0,is_panel_display:function(){switch(nt.getSettingsItem("panel_display_state")){case"AlwaysDisplay":return!0;case"AlwaysFold":return!1;case"RestorePreviousState":return nt.getSettingsItem("is_latest_panel_display")}}(),is_fullscreen:!1,interval_ids:[],control_interval_id:0,channel_id:this.$route.params.channel_id,channel:bt,channel_previous:bt,channel_next:bt,channels_list:new Map,player:null,eventsource:null,fullscreen_handler:null,shortcut_key_handler:null,shortcut_key_pressed_at:Date.now(),shortcut_key_modal:!1,shortcut_key_list:{left_column:[{name:"全般",icon:"fluent:home-20-filled",icon_height:"22px",shortcuts:[{name:"数字キー・テンキーに対応するリモコン番号 (1~12) のチャンネルに切り替える
(同時に Shift キーを押すと、地デジならBS、BSなら地デジのチャンネルを選局する)",keys:[{name:"1~9, 0, -(=), ^(~)",icon:!1}]},{name:"前のチャンネルに切り替える",keys:[{name:"fluent:arrow-up-12-filled",icon:!0}]},{name:"次のチャンネルに切り替える",keys:[{name:"fluent:arrow-down-12-filled",icon:!0}]},{name:"キーボードショートカットの一覧を表示する",keys:[{name:"/(?)",icon:!1}]}]},{name:"パネル",icon:"fluent:panel-right-20-filled",icon_height:"24px",shortcuts:[{name:"パネルの表示切り替え",keys:[{name:"P",icon:!1}]},{name:"番組情報タブを表示する",keys:[{name:"K",icon:!1}]},{name:"チャンネルタブを表示する",keys:[{name:"L",icon:!1}]},{name:"コメントタブを表示する",keys:[{name:";(+)",icon:!1}]},{name:"Twitter タブを表示する",keys:[{name:":(*)",icon:!1}]}]}],right_column:[{name:"プレイヤー",icon:"fluent:play-20-filled",icon_height:"20px",shortcuts:[{name:"再生 / 一時停止の切り替え",keys:[{name:"Space",icon:!1}]},{name:"停止して0.25秒早戻し",keys:[{name:"fluent:arrow-left-12-filled",icon:!0}]},{name:"停止して0.25秒早送り",keys:[{name:"fluent:arrow-right-12-filled",icon:!0}]},{name:"フルスクリーンの切り替え",keys:[{name:"F",icon:!1}]},{name:"ライブストリームの同期",keys:[{name:"W",icon:!1}]},{name:"Picture-in-Picture の表示切り替え",keys:[{name:"E",icon:!1}]},{name:"字幕の表示切り替え",keys:[{name:"S",icon:!1}]},{name:"コメントの表示切り替え",keys:[{name:"D",icon:!1}]},{name:"コメント入力フォームにフォーカスする",keys:[{name:"M",icon:!1}]}]}]}}},created:function(){this.init()},beforeDestroy:function(){this.destroy(!0),null!==this.shortcut_key_handler&&(document.removeEventListener("keydown",this.shortcut_key_handler),this.shortcut_key_handler=null)},beforeRouteUpdate:function(t,e,n){var a=this;this.destroy(),this.channel_id=t.params.channel_id;var i=et.getPreviousAndCurrentAndNextChannel(this.channels_list,this.channel_id),s=Object(mt["a"])(i,3);this.channel_previous=s[0],this.channel=s[1],this.channel_next=s[2],this.interval_ids.push(window.setTimeout((function(){a.init()}),500)),n()},watch:{is_panel_display:function(){nt.setSettingsItem("is_latest_panel_display",this.is_panel_display)}},methods:{init:function(){var t=this;this.background_url=nt.generatePlayerBackgroundURL(),this.controlDisplayTimer(),this.update(),this.interval_ids.push(window.setInterval((function(){t.time=tt()().format("YYYY/MM/DD HH:mm:ss")}),1e3));var e=60-Math.floor((new Date).getTime()/1e3)%60;this.interval_ids.push(window.setTimeout((function(){t.update(),t.interval_ids.push(window.setInterval((function(){t.update()}),3e4))}),1e3*e))},update:function(){var t=this;return Object(A["a"])(regeneratorRuntime.mark((function e(){var n,a,i,s,l,o,c,u,p,d,_;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(void 0!==t.$route.params.channel_id){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,e.next=5,r["a"].axios.get("".concat(nt.api_base_url,"/channels/").concat(t.channel_id));case 5:n=e.sent,e.next=15;break;case 8:if(e.prev=8,e.t0=e["catch"](2),console.error(e.t0),!e.t0.response||422!==e.t0.response.status||"Specified channel_id was not found"!==e.t0.response.data.detail){e.next=14;break}return e.next=14,t.$router.replace({path:"/not-found/"});case 14:return e.abrupt("return");case 15:return t.channel=n.data,null!==t.player&&!0!==t.player.KonomiTVCanDestroy||(t.initPlayer(),t.initEventHandler(),t.initShortcutKeyHandler()),null===t.channel.program_present||"1/0+1/0モード(デュアルモノ)"!==t.channel.program_present.primary_audio_type&&null===t.channel.program_present.secondary_audio_type?(t.player.template.audioItem[1].classList.add("dplayer-setting-audio-item--disabled"),t.player.plugins.mpegts&&window.setTimeout((function(){t.player.template.audioItem[0].classList.add("dplayer-setting-audio-current"),t.player.template.audioItem[1].classList.remove("dplayer-setting-audio-current"),t.player.template.audioValue.textContent=t.player.tran("Primary audio");try{t.player.plugins.mpegts.switchPrimaryAudio()}catch(e){}}),300)):t.player.template.audioItem[1].classList.remove("dplayer-setting-audio-item--disabled"),e.prev=18,e.next=21,r["a"].axios.get("".concat(nt.api_base_url,"/channels"));case 21:a=e.sent,e.next=28;break;case 24:return e.prev=24,e.t1=e["catch"](18),console.error(e.t1),e.abrupt("return");case 28:i=function(e){return e.is_display||t.channel_id===e.channel_id},t.channels_list=new Map,t.channels_list.set("ピン留め",[]),a.data.GR.length>0&&t.channels_list.set("地デジ",a.data.GR.filter(i)),a.data.BS.length>0&&t.channels_list.set("BS",a.data.BS.filter(i)),a.data.CS.length>0&&t.channels_list.set("CS",a.data.CS.filter(i)),a.data.CATV.length>0&&t.channels_list.set("CATV",a.data.CATV.filter(i)),a.data.SKY.length>0&&t.channels_list.set("SKY",a.data.SKY.filter(i)),a.data.STARDIGIO.length>0&&t.channels_list.set("StarDigio",a.data.STARDIGIO.filter(i)),s=nt.getSettingsItem("pinned_channel_ids"),l=[],o=Object(D["a"])(s);try{for(u=function(){var e=c.value,n=et.getChannelType(e,!0);l.push(t.channels_list.get(n).find((function(t){return t.channel_id===e})))},o.s();!(c=o.n()).done;)u()}catch(m){o.e(m)}finally{o.f()}l.length>0?t.channels_list.set("ピン留め",l):t.channels_list.delete("ピン留め"),p=et.getPreviousAndCurrentAndNextChannel(t.channels_list,t.channel_id),d=Object(mt["a"])(p,3),t.channel_previous=d[0],t.channel_next=d[2],"mediaSession"in navigator&&(_=[{src:"/assets/img/icons/icon-maskable-192px.png",sizes:"192x192",type:"image/png"},{src:"/assets/img/icons/icon-maskable-512px.png",sizes:"512x512",type:"image/png"}],navigator.mediaSession.metadata=new MediaMetadata({title:t.channel.program_present?t.channel.program_present.title:"放送休止",artist:t.channel.channel_name,artwork:_}),"setPositionState"in navigator.mediaSession&&navigator.mediaSession.setPositionState({duration:0,playbackRate:1}),navigator.mediaSession.setActionHandler("play",(function(){t.player.play()})),navigator.mediaSession.setActionHandler("pause",(function(){t.player.pause()})),navigator.mediaSession.setActionHandler("previoustrack",Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return navigator.mediaSession.metadata=new MediaMetadata({title:t.channel_previous.program_present?t.channel_previous.program_present.title:"放送休止",artist:t.channel_previous.channel_name,artwork:_}),e.next=3,t.$router.replace({path:"/tv/watch/".concat(t.channel_previous.channel_id)});case 3:case"end":return e.stop()}}),e)})))),navigator.mediaSession.setActionHandler("nexttrack",Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return navigator.mediaSession.metadata=new MediaMetadata({title:t.channel_next.program_present?t.channel_next.program_present.title:"放送休止",artist:t.channel_next.channel_name,artwork:_}),e.next=3,t.$router.replace({path:"/tv/watch/".concat(t.channel_next.channel_id)});case 3:case"end":return e.stop()}}),e)})))));case 47:case"end":return e.stop()}}),e,null,[[2,8],[18,24]])})))()},controlDisplayTimer:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=/iPhone|iPad|iPod|Macintosh|Android|Mobile/i.test(navigator.userAgent)&&"ontouchend"in document;if((1!=a||null===e||"mousemove"!==e.type)&&(0!=a||null===e||"touchmove"!==e.type&&"click"!==e.type)){window.clearTimeout(this.control_interval_id);var i=function e(){document.activeElement!==t.player.template.commentInput?(t.is_control_display=!1,null!==t.player&&(t.player.controller.hide(),t.player.setting.hide())):t.control_interval_id=window.setTimeout(e,3e3)};!0===a&&!0===n?this.player.controller.isShow()?(this.is_control_display=!0,this.player.controller.show(),this.control_interval_id=window.setTimeout(i,3e3)):(this.is_control_display=!1,this.player.controller.hide(),this.player.setting.hide()):(this.is_control_display=!0,null!==this.player&&this.player.controller.show(),this.control_interval_id=window.setTimeout(i,3e3))}},initPlayer:function(){var t=this;if(window.mpegts=ft.a,null!==this.player&&!0===this.player.KonomiTVCanDestroy){try{this.player.destroy()}catch(s){void 0!==this.player.plugins.mpegts&&this.player.plugins.mpegts.destroy()}this.player=null}this.player=new vt.a({container:this.$el.querySelector(".watch-player__dplayer"),theme:"#E64F97",lang:"ja-jp",live:!0,loop:!1,airplay:!1,autoplay:!0,hotkey:!1,screenshot:!0,volume:1,video:{defaultQuality:this.channel.is_radiochannel?"48kHz/192kbps":nt.getSettingsItem("tv_streaming_quality"),quality:function(){var e=[];if(t.channel.is_radiochannel)e.push({name:"48kHz/192kbps",type:"mpegts",url:"".concat(nt.api_base_url,"/streams/live/").concat(t.channel_id,"/1080p/mpegts")});else for(var n=0,a=["1080p","810p","720p","540p","480p","360p","240p"];n\n キーボードショートカット\n \n ');var n=this.player.template.settingOriginPanel.scrollHeight;this.player.template.settingBox.style.clipPath="inset(calc(100% - ".concat(n,"px) 0 0 round 7px)"),this.$el.querySelector(".dplayer-setting-keyboard-shortcut").addEventListener("click",(function(){t.player.setting.hide(),t.shortcut_key_modal=!0}))}var a=function(){t.player.setting.hide(),t.controlDisplayTimer()};this.player.on("play",a),this.player.on("pause",a),this.player.on("quality_start",(function(){t.background_url=nt.generatePlayerBackgroundURL(),null!==t.eventsource&&(t.eventsource.close(),t.eventsource=null),t.initEventHandler()})),this.player.plugins.aribb24Superimpose.show(),this.player.on("subtitle_hide",(function(){t.player.plugins.aribb24Superimpose.show()})),this.interval_ids.push(window.setInterval((function(){t.player.video.paused&&t.player.video.buffered.end(0)-t.player.video.currentTime>30&&t.player.sync()}),6e4));var i=this.$el;this.fullscreen_handler=function(){return t.is_fullscreen=t.player.fullScreen.isFullScreen()},void 0!==i.onfullscreenchange?i.addEventListener("fullscreenchange",this.fullscreen_handler):i.addEventListener("webkitfullscreenchange",this.fullscreen_handler),this.player.fullScreen.isFullScreen=function(t){return!(!document.fullscreenElement&&!document.webkitFullscreenElement)},this.player.fullScreen.request=function(e){t.player.fullScreen.isFullScreen()?t.player.fullScreen.cancel():(i.requestFullscreen=i.requestFullscreen||i.webkitRequestFullscreen,i.requestFullscreen&&i.requestFullscreen(),screen.orientation&&screen.orientation.lock("landscape").catch((function(){})))},this.player.fullScreen.cancel=function(t){document.exitFullscreen=document.exitFullscreen||document.webkitExitFullscreen,document.exitFullscreen&&document.exitFullscreen(),screen.orientation&&screen.orientation.unlock()}},initEventHandler:function(){var t=this;this.is_loading=!0;var e=function(){window.setTimeout((function(){t.is_loading=!1,t.channel.is_radiochannel?t.is_background_display=!0:t.is_background_display=!1}),100),t.player.video.oncanplay=null,t.player.video.oncanplaythrough=null};this.player.video.oncanplay=e,this.player.video.oncanplaythrough=e;var n=this.channel.is_radiochannel?"1080p":this.player.quality.name;this.eventsource=new EventSource("".concat(nt.api_base_url,"/streams/live/").concat(this.channel_id,"/").concat(n,"/events")),this.eventsource.addEventListener("initial_update",(function(e){var n=JSON.parse(e.data);"Standby"===n.status&&(t.is_background_display=!0)})),this.eventsource.addEventListener("status_update",(function(e){var n=JSON.parse(e.data);switch(console.log("Status: ".concat(n.status," Detail:").concat(n.detail)),t.channel.viewers=n.clients_count,n.status){case"Standby":t.player.template.notice.textContent.includes("画質を")||t.player.notice(n.detail,-1),t.is_background_display=!0;break;case"ONAir":t.player.template.notice.textContent.includes("画質を")||t.player.notice(t.player.template.notice.textContent,1e-6),document.pictureInPictureElement&&(document.exitPictureInPicture(),t.player.video.requestPictureInPicture());break;case"Restart":t.player.notice(n.detail,-1),t.player.switchVideo({url:t.player.quality.url,type:t.player.quality.type}),t.player.play(),t.is_background_display=!0;break;case"Offline":t.player.notice(n.detail,-1),t.player.video.onerror=function(){t.player.notice(n.detail,-1),t.player.video.onerror=null},t.player.danmaku.clear(),t.player.video.pause(),t.eventsource.close(),t.is_background_display=!0;break}})),this.eventsource.addEventListener("detail_update",(function(e){var n=JSON.parse(e.data);console.log("Status: ".concat(n.status," Detail:").concat(n.detail)),t.channel.viewers=n.clients_count,"Standby"===n.status&&(t.player.notice(n.detail,-1),t.is_background_display||(t.is_background_display=!0))})),this.eventsource.addEventListener("clients_update",(function(e){var n=JSON.parse(e.data);t.channel.viewers=n.clients_count}))},initShortcutKeyHandler:function(){var t=this;this.shortcut_key_handler=function(e){var n=!1;e.repeat&&(n=!0);var a=Date.now();if(!(a-t.shortcut_key_pressed_at<100)){t.shortcut_key_pressed_at=a;var i=document.activeElement.tagName.toUpperCase(),s=document.activeElement.getAttribute("contenteditable");if("INPUT"!==i&&"TEXTAREA"!==i&&""!==s&&"true"!==s){if(!1===n){var r=t.channel.channel_type;e.shiftKey&&"GR"==t.channel.channel_type&&(r="BS"),e.shiftKey&&"BS"==t.channel.channel_type&&(r="GR");var l=null;if("Digit1"!==e.code&&"Digit2"!==e.code&&"Digit3"!==e.code&&"Digit4"!==e.code&&"Digit5"!==e.code&&"Digit6"!==e.code&&"Digit7"!==e.code&&"Digit8"!==e.code&&"Digit9"!==e.code||(l=Number(e.code.replace("Digit",""))),"Digit0"===e.code&&(l=10),"Minus"===e.code&&(l=11),"Equal"===e.code&&(l=12),"Numpad1"!==e.code&&"Numpad2"!==e.code&&"Numpad3"!==e.code&&"Numpad4"!==e.code&&"Numpad5"!==e.code&&"Numpad6"!==e.code&&"Numpad7"!==e.code&&"Numpad8"!==e.code&&"Numpad9"!==e.code||(l=Number(e.code.replace("Numpad",""))),"Numpad0"===e.code&&(l=10),null!==l){var o=et.getChannelFromRemoconID(t.channels_list,r,l);if(null!==o&&o.channel_id!==t.channel_id)return void Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$router.replace({path:"/tv/watch/".concat(o.channel_id)});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))()}}if("ArrowUp"===e.code&&!1===n)return e.preventDefault(),void Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$router.replace({path:"/tv/watch/".concat(t.channel_previous.channel_id)});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))();if("ArrowDown"===e.code&&!1===n)return e.preventDefault(),void Object(A["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,t.$router.replace({path:"/tv/watch/".concat(t.channel_next.channel_id)});case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}}),e)})))();if("Slash"===e.code&&!1===n)return void(t.shortcut_key_modal=!t.shortcut_key_modal);if(!1===n){if("KeyP"===e.code)return void(t.is_panel_display=!t.is_panel_display);if("KeyK"===e.code)return void(t.panel_active_tab="Program");if("KeyL"===e.code)return void(t.panel_active_tab="Channel");if("Semicolon"===e.code)return void(t.panel_active_tab="Comment");if("Quote"===e.code)return void(t.panel_active_tab="Twitter")}if(null!==t.player&&!e.ctrlKey&&!e.metaKey){if("ArrowLeft"===e.code)return e.preventDefault(),!1===t.player.video.paused&&t.player.video.pause(),void(t.player.video.currentTime=t.player.video.currentTime-.25);if("ArrowRight"===e.code)return e.preventDefault(),!1===t.player.video.paused&&t.player.video.pause(),void(t.player.video.currentTime=t.player.video.currentTime+.25);if(!1===n){if("Space"===e.code)return void t.player.toggle();if("KeyF"===e.code)return void t.player.fullScreen.toggle();if("KeyW"===e.code)return void t.player.sync();if("KeyE"===e.code)return void(document.pictureInPictureEnabled&&t.player.template.pipButton.click());if("KeyS"===e.code)return t.player.subtitle.toggle(),void(t.player.subtitle.container.classList.contains("dplayer-subtitle-hide")?t.player.notice("".concat(t.player.tran("Hide subtitle"))):t.player.notice("".concat(t.player.tran("Show subtitle"))));if("KeyD"===e.code)return t.player.template.showDanmaku.click(),void(t.player.template.showDanmakuToggle.checked?t.player.notice("".concat(t.player.tran("Show comment"))):t.player.notice("".concat(t.player.tran("Hide comment"))));if("KeyM"===e.code)return e.preventDefault(),t.player.controller.show(),t.player.comment.show(),t.controlDisplayTimer(),void window.setTimeout((function(){return t.player.template.commentInput.focus()}),100)}}}}},document.addEventListener("keydown",this.shortcut_key_handler)},destroy:function(){var t,e=this,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],a=Object(D["a"])(this.interval_ids);try{for(a.s();!(t=a.n()).done;){var i=t.value;window.clearInterval(i)}}catch(s){a.e(s)}finally{a.f()}window.clearTimeout(this.control_interval_id),this.interval_ids=[],this.is_loading=!0,this.is_background_display=!1,this.player.KonomiTVCanDestroy=!0,null!==this.eventsource&&(this.eventsource.close(),this.eventsource=null),this.interval_ids.push(window.setTimeout((function(){if(e.player.video.pause(),!0===n&&null!==e.player){try{e.player.destroy()}catch(t){void 0!==e.player.plugins.mpegts&&e.player.plugins.mpegts.destroy()}e.player=null}}),400))}}}),Lt=Ft,Ut=(n("598f"),n("e8a1"),n("b0af")),Bt=n("99d9"),$t=n("62ad"),Kt=n("169a"),qt=n("ce7e"),Gt=n("0fd9"),zt=Object(d["a"])(Lt,dt,_t,!1,null,"8b237ea4",null),Yt=zt.exports;m()(zt,{VBtn:H["a"],VCard:Ut["a"],VCardActions:Bt["a"],VCardTitle:Bt["b"],VCol:$t["a"],VDialog:Kt["a"],VDivider:qt["a"],VRow:Gt["a"],VSpacer:L["a"]}),$()(zt,{Ripple:K["a"]});var Wt=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Base",[n("h2",{staticClass:"settings__heading"},[n("Icon",{attrs:{icon:"fa-solid:sliders-h",width:"18px"}}),n("span",{staticClass:"ml-3"},[t._v("全般")])],1),n("div",{staticClass:"settings__content"},[n("div",{staticClass:"settings__item"},[n("div",{staticClass:"settings__item-heading"},[t._v("テレビのストリーミング画質")]),n("div",{staticClass:"settings__item-label"},[t._v(" テレビをライブストリーミングする際の既定の画質を設定します。"),n("br"),t._v(" ストリーミング画質はプレイヤーの設定からいつでも切り替えられます。"),n("br")]),n("v-select",{staticClass:"settings__item-form",attrs:{outlined:"","hide-details":"",items:t.tv_streaming_quality},model:{value:t.settings.tv_streaming_quality,callback:function(e){t.$set(t.settings,"tv_streaming_quality",e)},expression:"settings.tv_streaming_quality"}})],1),n("div",{staticClass:"settings__item"},[n("div",{staticClass:"settings__item-heading"},[t._v("既定のパネルの表示状態")]),n("div",{staticClass:"settings__item-label"},[t._v(" 視聴画面を開いたときに、右側のパネルをどう表示するかを設定します。"),n("br")]),n("v-select",{staticClass:"settings__item-form",attrs:{outlined:"","hide-details":"",items:t.panel_display_state},model:{value:t.settings.panel_display_state,callback:function(e){t.$set(t.settings,"panel_display_state",e)},expression:"settings.panel_display_state"}})],1),n("div",{staticClass:"settings__item"},[n("div",{staticClass:"settings__item-heading"},[t._v("既定で表示されるパネルのタブ")]),n("div",{staticClass:"settings__item-label"},[t._v(" 視聴画面を開いたときに、右側のパネルで最初に表示されるタブを設定します。"),n("br")]),n("v-select",{staticClass:"settings__item-form",attrs:{outlined:"","hide-details":"",items:t.panel_active_tab},model:{value:t.settings.panel_active_tab,callback:function(e){t.$set(t.settings,"panel_active_tab",e)},expression:"settings.panel_active_tab"}})],1)])])},Jt=[],Xt=(n("4fad"),function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"route-container"},[n("Header"),n("main",[n("Navigation"),n("v-card",{staticClass:"settings-container d-flex px-5 py-5 mx-auto background",attrs:{elevation:"0",width:"100%","max-width":"1000"}},[n("div",[n("v-navigation-drawer",{staticClass:"settings-navigation flex-shrink-0 background",attrs:{permanent:"",width:"195",height:"auto"}},[n("v-list-item",{staticClass:"px-4"},[n("v-list-item-content",[n("h1",[t._v("設定")])])],1),n("v-list",{staticClass:"mt-2 px-0",attrs:{nav:""}},[n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/general"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{staticStyle:{padding:"0 3px"},attrs:{icon:"fa-solid:sliders-h",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("全般")])],1)],1),n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/account"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{attrs:{icon:"fluent:person-20-filled",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("アカウント")])],1)],1),n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/jikkyo"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{staticStyle:{padding:"0 2px"},attrs:{icon:"bi:chat-left-text-fill",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("ニコニコ実況")])],1)],1),n("v-list-item",{staticClass:"px-4",attrs:{link:"",color:"primary",to:"/settings/twitter"}},[n("v-list-item-icon",{staticClass:"mr-4"},[n("Icon",{staticStyle:{padding:"0 1px"},attrs:{icon:"fa-brands:twitter",width:"26px"}})],1),n("v-list-item-content",[n("v-list-item-title",[t._v("Twitter")])],1)],1)],1)],1)],1),n("v-card",{staticClass:"settings ml-5 px-7 py-7 background lighten-1",attrs:{width:"100%"}},[t._t("default")],2)],1)],1)],1)}),Qt=[],Zt=r["a"].extend({name:"SettingsBase",components:{Header:z,Navigation:rt}}),te=Zt,ee=(n("5e6f"),n("8860")),ne=n("da13"),ae=n("5d23"),ie=n("34c3"),se=n("f774"),re=Object(d["a"])(te,Xt,Qt,!1,null,"18637a38",null),le=re.exports;m()(re,{VCard:Ut["a"],VList:ee["a"],VListItem:ne["a"],VListItemContent:ae["a"],VListItemIcon:ie["a"],VListItemTitle:ae["b"],VNavigationDrawer:se["a"]});var oe=r["a"].extend({name:"SettingsGeneral",components:{Base:le},data:function(){return{tv_streaming_quality:[{text:"1080p (1時間あたり約2.31GB / 5.1Mbps)",value:"1080p"},{text:"810p (1時間あたり約1.92GB / 4.2Mbps)",value:"810p"},{text:"720p (1時間あたり約1.33GB / 3.0Mbps)",value:"720p"},{text:"540p (1時間あたり約1.00GB / 2.2Mbps)",value:"540p"},{text:"480p (1時間あたり約0.74GB / 1.6Mbps)",value:"480p"},{text:"360p (1時間あたり約0.40GB / 0.9Mbps)",value:"360p"},{text:"240p (1時間あたり約0.23GB / 0.5Mbps)",value:"240p"}],panel_display_state:[{text:"前回の状態を復元する",value:"RestorePreviousState"},{text:"常に表示する",value:"AlwaysDisplay"},{text:"常に折りたたむ",value:"AlwaysFold"}],panel_active_tab:[{text:"番組情報タブ",value:"Program"},{text:"チャンネルタブ",value:"Channel"},{text:"コメントタブ",value:"Comment"},{text:"Twitter タブ",value:"Twitter"}],settings:function(){for(var t={},e=0,n=["tv_streaming_quality","panel_display_state","panel_active_tab"];e {\n\n // VueComponent の key が一致する this.$slots.default 内の VNode を探す\n const index_a = this.$slots.default.findIndex((element) => {\n return a.$vnode.key === element.key;\n });\n const index_b = this.$slots.default.findIndex((element) => {\n return b.$vnode.key === element.key;\n });\n\n // index 順で並び替え\n return index_a - index_b;\n });\n\n item.$on('change', () => (this as any).onClick(item));\n if ((this as any).mandatory && !(this as any).selectedValues.length) {\n (this as any).updateMandatory();\n }\n\n // 追加された要素のソート後のインデックスを取得して更新する\n (this as any).updateItem(item, this.items.indexOf(item));\n\n // ソート後の現在アクティブなタブのインデックスを取得し直し、設定する\n // 配列の末尾以外に追加された場合はインデックスが1つずつずれてしまうため、インデックスを設定し直す必要がある\n if (activeItem !== undefined) {\n (this as any).updateInternalValue(this.items.indexOf(activeItem));\n }\n },\n\n unregister(item: GroupableInstance) {\n\n // 現在アクティブなタブの VueComponent を取得\n const activeItem = this.items[(this as any).internalIndex];\n\n // 継承元の unregister() の処理を呼び出す(いわゆる super() )\n // ref: https://github.com/vuejs/vue/issues/2977\n (this.constructor as any).super.options.methods.unregister.call(this, item);\n\n // 配列の末尾以外から削除された場合はインデックスが1つずつずれてしまうため、インデックスを設定し直す必要がある\n if (activeItem !== undefined) {\n (this as any).updateInternalValue(this.items.indexOf(activeItem));\n }\n }\n }\n});\n","\nimport { VueConstructor, VNode } from 'vue';\n\nimport { convertToUnit } from 'vuetify/lib/util/helpers'\nimport VTabs from 'vuetify/lib/components/VTabs/VTabs';\nimport VTabsBar from '@/components/VTabsBar';\n\nexport default (VTabs as VueConstructor).extend({\n methods: {\n\n // VTabsBar は VTabs から暗黙的に生成されるコンポーネントのため、直接上書きすることができない\n // そこで VTabs 自体も上書きし、VTabs で $createElement() される時の VTabsBar を自前でオーバーライドしたものに差し替える\n // ビルド済みのファイルには型定義が入っていないので any を多用せざるを得ない…\n genBar(items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit((this as any).height),\n },\n props: {\n activeClass: (this as any).activeClass,\n centerActive: (this as any).centerActive,\n dark: (this as any).dark,\n light: (this as any).light,\n mandatory: !(this as any).optional,\n mobileBreakpoint: (this as any).mobileBreakpoint,\n nextIcon: (this as any).nextIcon,\n prevIcon: (this as any).prevIcon,\n showArrows: (this as any).showArrows,\n value: (this as any).internalValue,\n },\n on: {\n 'call:slider': (this as any).callSlider,\n change: (val: any) => {\n (this as any).internalValue = val;\n },\n },\n ref: 'items',\n };\n\n (this as any).setTextColor((this as any).computedColor, data);\n (this as any).setBackgroundColor((this as any).backgroundColor, data);\n\n // ここでオーバーライドした VTabsBar を使うのが最重要\n // これをやるためだけにわざわざ VTabs に関してもオーバーライドする羽目になってる…\n return (this as any).$createElement(VTabsBar, data, [\n (this as any).genSlider(slider),\n items,\n ]);\n }\n }\n});\n","\nimport { VueConstructor } from 'vue';\n\nimport { GroupableInstance } from 'vuetify/lib/components/VItemGroup/VItemGroup';\nimport VTabsItems from 'vuetify/lib/components/VTabs/VTabsItems';\n\n// VTabsItems は VItemGroup と VWindow を extend() して実装されている\nexport default (VTabsItems as VueConstructor).extend({\n data() {\n return {\n // 一応型定義をしておく\n items: [] as GroupableInstance[],\n }\n },\n methods: {\n\n // タブのデータ配列の先頭に新しい要素が追加されるとそのタブのアニメーションの向きが逆になるバグがあるので、VItemGroup 側の挙動をオーバーライドする\n // DOM 上も VNode 上も正しい順序で並んでいるが、this.items に関しては追加された順になっていてしまっていて齟齬が発生するのが原因\n // ref: https://github.com/vuetifyjs/vuetify/issues/13862\n register(item: GroupableInstance) {\n\n // 現在アクティブなタブの VueComponent を取得\n const activeItem = this.items[(this as any).internalIndex];\n\n // 要素を items に追加\n this.items.push(item);\n\n // this.$slots.default に VNode が、items には単に VueComponent が入っているので、事前に VNode の順番に合わせて並べ替える\n // こうすることで、追加された順ではなく元のデータ配列通りの順番になる\n this.items.sort((a, b) => {\n\n // VueComponent の key が一致する this.$slots.default 内の VNode を探す\n const index_a = this.$slots.default.findIndex((element) => {\n return a.$vnode.key === element.key;\n });\n const index_b = this.$slots.default.findIndex((element) => {\n return b.$vnode.key === element.key;\n });\n\n // index 順で並び替え\n return index_a - index_b;\n });\n\n item.$on('change', () => (this as any).onClick(item));\n if ((this as any).mandatory && !(this as any).selectedValues.length) {\n (this as any).updateMandatory();\n }\n\n // 追加された要素のソート後のインデックスを取得して更新する\n (this as any).updateItem(item, this.items.indexOf(item));\n\n // ソート後の現在アクティブなタブのインデックスを取得し直し、設定する\n // 配列の末尾以外に追加された場合はインデックスが1つずつずれてしまうため、インデックスを設定し直す必要がある\n if (activeItem !== undefined) {\n // 値が異なるときだけ更新する\n // こうしないと、Safari で変なアニメーションがついてしまう\n if (this.items.indexOf(activeItem) !== (this as any).internalValue) {\n (this as any).updateInternalValue(this.items.indexOf(activeItem));\n }\n }\n },\n\n unregister(item: GroupableInstance) {\n\n // 現在アクティブなタブの VueComponent を取得\n const activeItem = this.items[(this as any).internalIndex];\n\n // 継承元の unregister() の処理を呼び出す(いわゆる super() )\n // ref: https://github.com/vuejs/vue/issues/2977\n (this.constructor as any).super.options.methods.unregister.call(this, item);\n\n // 配列の末尾以外から削除された場合はインデックスが1つずつずれてしまうため、インデックスを設定し直す必要がある\n if (activeItem !== undefined) {\n (this as any).updateInternalValue(this.items.indexOf(activeItem));\n }\n },\n\n // 最初のタブから最後のタブに遷移するとアニメーションの向きが逆になるバグがあるので、VWindow 側の挙動をオーバーライドする\n // 本来は VCarousel 用の動作だが、VTabsItems も VWindow を継承しているので、それが適用されてしまっているらしい\n // ref: https://github.com/yuwu9145/vuetify/blob/master/packages/vuetify/src/components/VWindow/VWindow.ts#L239-L252\n updateReverse(val: number, oldVal: number) {\n\n const itemsLength = this.items.length;\n const lastIndex = itemsLength - 1;\n\n if (itemsLength <= 2) return val < oldVal;\n\n // continuous が false の時、常に val < oldVal の結果を返す\n if (!(this as any).continuous) return val < oldVal;\n\n if (val === lastIndex && oldVal === 0) {\n return true;\n } else if (val === 0 && oldVal === lastIndex) {\n return false;\n } else {\n return val < oldVal;\n }\n }\n }\n});\n","\nimport Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n theme: {\n dark: true,\n themes: {\n dark: {\n primary: '#E64F97',\n secondary: '#E64F97',\n twitter: '#4F82E6',\n gray: '#66514C',\n black: '#110A09',\n background: {\n base: '#1E1310',\n lighten1: '#2F221F',\n lighten2: '#433532',\n lighten3: '#4c3c38',\n },\n text: {\n base: '#FFEAEA',\n darken1: '#D9C7C7',\n darken2: '#8E7F7E',\n darken3: '#786968',\n }\n }\n },\n options: {\n customProperties: true,\n },\n },\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"route-container\"},[_c('Header'),_c('main',[_c('Navigation'),_c('div',{staticClass:\"channels-container channels-container--home\",class:{'channels-container--loading': _vm.is_loading}},[_c('v-tabs-fix',{staticClass:\"channels-tab\",attrs:{\"centered\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},_vm._l((Array.from(_vm.channels_list)),function(ref){\nvar channels_type = ref[0];\nreturn _c('v-tab',{key:channels_type,staticClass:\"channels-tab__item\"},[_vm._v(_vm._s(channels_type))])}),1),_c('v-tabs-items-fix',{staticClass:\"channels-list\",model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},_vm._l((Array.from(_vm.channels_list)),function(ref){\nvar channels_type = ref[0];\nvar channels = ref[1];\nreturn _c('v-tab-item-fix',{key:channels_type,staticClass:\"channels-tabitem\"},[_c('div',{staticClass:\"channels\",class:(\"channels--tab-\" + channels_type + \" channels--length-\" + (channels.length))},[_vm._l((channels),function(channel){return _c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],key:channel.id,staticClass:\"channel\",attrs:{\"to\":(\"/tv/watch/\" + (channel.channel_id))}},[_c('div',{staticClass:\"channel__broadcaster\"},[_c('img',{staticClass:\"channel__broadcaster-icon\",attrs:{\"src\":((_vm.Utils.api_base_url) + \"/channels/\" + (channel.channel_id) + \"/logo\")}}),_c('div',{staticClass:\"channel__broadcaster-content\"},[_c('span',{staticClass:\"channel__broadcaster-name\"},[_vm._v(\"Ch: \"+_vm._s(channel.channel_number)+\" \"+_vm._s(channel.channel_name))]),_c('div',{staticClass:\"channel__broadcaster-status\"},[_c('div',{staticClass:\"channel__broadcaster-status-force\",class:(\"channel__broadcaster-status-force--\" + (_vm.TVUtils.getChannelForceType(channel.channel_force)))},[_c('Icon',{attrs:{\"icon\":\"fa-solid:fire-alt\",\"height\":\"12px\"}}),_c('span',{staticClass:\"ml-1\"},[_vm._v(\"勢い:\")]),_c('span',{staticClass:\"ml-1\"},[_vm._v(_vm._s(_vm.TVUtils.getAttribute(channel, 'channel_force', '--'))+\" コメ/分\")])],1),_c('div',{staticClass:\"channel__broadcaster-status-viewers ml-4\"},[_c('Icon',{attrs:{\"icon\":\"fa-solid:eye\",\"height\":\"14px\"}}),_c('span',{staticClass:\"ml-1\"},[_vm._v(\"視聴数:\")]),_c('span',{staticClass:\"ml-1\"},[_vm._v(_vm._s(channel.viewers))])],1)])]),_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.isPinnedChannel(channel.channel_id) ? 'ピン留めを外す' : 'ピン留めする'),expression:\"isPinnedChannel(channel.channel_id) ? 'ピン留めを外す' : 'ピン留めする'\"}],staticClass:\"channel__broadcaster-pin\",class:{'channel__broadcaster-pin--pinned': _vm.isPinnedChannel(channel.channel_id)},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();_vm.isPinnedChannel(channel.channel_id) ? _vm.removePinnedChannel(channel.channel_id) : _vm.addPinnedChannel(channel.channel_id)},\"mousedown\":function($event){$event.preventDefault();$event.stopPropagation();/* 親要素の波紋が広がらないように */}}},[_c('Icon',{attrs:{\"icon\":\"fluent:pin-20-filled\",\"width\":\"24px\"}})],1)]),_c('div',{staticClass:\"channel__program-present\"},[_c('span',{staticClass:\"channel__program-present-title\",domProps:{\"innerHTML\":_vm._s(_vm.TVUtils.decorateProgramInfo(channel.program_present, 'title'))}}),_c('span',{staticClass:\"channel__program-present-time\"},[_vm._v(_vm._s(_vm.TVUtils.getProgramTime(channel.program_present)))]),_c('span',{staticClass:\"channel__program-present-description\",domProps:{\"innerHTML\":_vm._s(_vm.TVUtils.decorateProgramInfo(channel.program_present, 'description'))}})]),_c('v-spacer'),_c('div',{staticClass:\"channel__program-following\"},[_c('div',{staticClass:\"channel__program-following-title\"},[_c('span',{staticClass:\"channel__program-following-title-decorate\"},[_vm._v(\"NEXT\")]),_c('Icon',{staticClass:\"channel__program-following-title-icon\",attrs:{\"icon\":\"fluent:fast-forward-20-filled\",\"width\":\"16px\"}}),_c('span',{staticClass:\"channel__program-following-title-text\",domProps:{\"innerHTML\":_vm._s(_vm.TVUtils.decorateProgramInfo(channel.program_following, 'title'))}})],1),_c('span',{staticClass:\"channel__program-following-time\"},[_vm._v(_vm._s(_vm.TVUtils.getProgramTime(channel.program_following)))])]),_c('div',{staticClass:\"channel__progressbar\"},[_c('div',{staticClass:\"channel__progressbar-progress\",style:((\"width:\" + (_vm.TVUtils.getProgramProgress(channel.program_present)) + \"%;\"))})])],1)}),(channels_type === 'ピン留め' && channels.length === 0)?_c('div',{staticClass:\"d-flex justify-center align-center w-100\"},[_c('div',{staticClass:\"d-flex justify-center align-center flex-column\"},[_c('h2',[_vm._v(\"ピン留めされているチャンネルがありません。\")]),_c('div',{staticClass:\"mt-4 text--text text--darken-1\"},[_vm._v(\"各チャンネルの \"),_c('Icon',{staticStyle:{\"position\":\"relative\",\"bottom\":\"-5px\"},attrs:{\"icon\":\"fluent:pin-20-filled\",\"width\":\"22px\"}}),_vm._v(\" アイコンから、よくみるチャンネルをこのタブにピン留めできます。\")],1),_c('div',{staticClass:\"mt-2 text--text text--darken-1\"},[_vm._v(\"チャンネルをピン留めすると、このタブが最初に表示されます。\")])])]):_vm._e()],2)])}),1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-toolbar',{staticClass:\"header\",attrs:{\"absolute\":\"\",\"color\":\"background\",\"elevation\":\"8\",\"width\":\"100%\"}},[_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"logo ml-3 ml-md-6\",attrs:{\"to\":\"/tv/\"}},[_c('img',{staticClass:\"logo__image\",attrs:{\"src\":\"/assets/img/logo.svg\",\"height\":\"21\"}})]),_c('v-spacer'),_c('v-btn',{staticClass:\"mr-3 mr-md-6\",attrs:{\"icon\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-vertical\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./Header.vue?vue&type=template&id=04bd7f60&\"\nvar script = {}\nimport style0 from \"./Header.vue?vue&type=style&index=0&lang=scss&\"\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 null,\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 { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VBtn,VIcon,VSpacer,VToolbar})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Ripple from 'vuetify/lib/directives/ripple'\ninstallDirectives(component, {Ripple})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"navigation-container elevation-8\"},[_c('nav',{staticClass:\"navigation\"},[_c('div',{staticClass:\"navigation-scroll\"},[_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/tv/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:tv-20-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"テレビをみる\")])],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/videos/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:movies-and-tv-20-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"ビデオをみる\")])],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/schedules/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:calendar-ltr-20-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"番組表\")])],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/captures/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:image-multiple-24-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"キャプチャ\")])],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/watchlists/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"ic:round-playlist-play\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"ウォッチリスト\")])],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/histories/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:history-16-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"視聴履歴\")])],1),_c('v-spacer'),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"to\":\"/settings/\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:settings-20-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"設定\")])],1),_c('a',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"navigation__link\",attrs:{\"active-class\":\"navigation__link--active\",\"href\":\"https://github.com/tsukumijima/KonomiTV\"}},[_c('Icon',{staticClass:\"navigation__link-icon\",attrs:{\"icon\":\"fluent:info-16-regular\",\"width\":\"26px\"}}),_c('span',{staticClass:\"navigation__link-text\"},[_vm._v(\"version \"+_vm._s(_vm.Utils.version))])],1)],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n/**\n * 共通ユーティリティ\n */\nexport default class Utils {\n\n // バージョン情報\n // ビルド時の環境変数 (vue.config.js に記載) から取得\n static readonly version:string = process.env.VUE_APP_VERSION;\n\n // バックエンドの API のベース URL\n static readonly api_base_url = (() => {\n if (process.env.NODE_ENV === 'development') {\n // デバッグ時はポートを 7000 に強制する\n return `${window.location.protocol}//${window.location.hostname}:7000/api`;\n } else {\n // ビルド後は同じポートを使う\n return `${window.location.protocol}//${window.location.host}/api`;\n }\n })();\n\n // デフォルトの設定値\n static readonly default_settings = {\n\n // ピン留めしているチャンネルの ID (ex: gr011) が入るリスト\n pinned_channel_ids: [] as string[],\n\n // テレビのストリーミング画質(1080p)\n tv_streaming_quality: '1080p' as ('1080p' | '810p' | '720p' | '540p' | '480p' | '360p' | '240p'),\n\n // 前回視聴画面を開いた際にパネルが表示されていたかどうか\n is_latest_panel_display: true as boolean,\n\n // 既定のパネルの表示状態(前回の状態を復元する)\n panel_display_state: 'RestorePreviousState' as ('RestorePreviousState' | 'AlwaysDisplay' | 'AlwaysFold'),\n\n // 既定で表示されるパネルのタブ(番組情報タブ)\n panel_active_tab: 'Program' as ('Program' | 'Channel' | 'Comment' | 'Twitter'),\n\n // コメントの速さ (1倍)\n comment_speed_rate: 1 as number,\n\n // コメントのフォントサイズ (34px)\n comment_font_size: 34 as number,\n\n // コメントの遅延時間 (1秒)\n comment_delay_time: 1 as number,\n };\n\n\n /**\n * プレイヤーの背景画像をランダムで取得し、その URL を返す\n * @returns ランダムで設定されたプレイヤーの背景画像の URL\n */\n static generatePlayerBackgroundURL(): string {\n const background_count = 12; // 12種類から選択\n const random = (Math.floor(Math.random() * background_count) + 1);\n return `/assets/img/player-backgrounds/${random.toString().padStart(2, '0')}.jpg`;\n }\n\n\n /**\n * 設定を LocalStorage から取得する\n * @param key 設定のキー名\n * @returns 設定されている値\n */\n static getSettingsItem(key: string): any | null {\n\n // LocalStorage から KonomiTV-Settings を取得\n // データは JSON で管理し、LocalStorage 上の一つのキーにまとめる\n // キーが存在しない場合はデフォルトの設定値を使う\n const settings:object = JSON.parse(localStorage.getItem('KonomiTV-Settings')) || Utils.default_settings;\n\n // そのキーが保存されているときだけ、設定値を返す\n if (key in settings) {\n return settings[key];\n } else {\n // デフォルトの設定値にあればそれを使う\n if (key in this.default_settings) {\n return this.default_settings[key];\n } else {\n return null;\n }\n }\n }\n\n\n /**\n * 設定を LocalStorage に保存する\n * @param key 設定のキー名\n * @param value 設定する値\n */\n static setSettingsItem(key: string, value: any): void {\n\n // LocalStorage から KonomiTV-Settings を取得\n const settings:object = JSON.parse(localStorage.getItem('KonomiTV-Settings')) || Utils.default_settings;\n\n // そのキーがデフォルトの設定値に定義されているときだけ\n // バージョン違いなどで settings には登録されていないキーだが default_settings には登録されているケースが発生し得るため\n if (key in this.default_settings) {\n\n // 設定値を新しい値で置き換え\n settings[key] = value;\n\n // LocalStorage に保存\n localStorage.setItem('KonomiTV-Settings', JSON.stringify(settings));\n }\n }\n}\n","\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/ja';\n\nimport { IChannel, IProgram } from '@/interface';\n\n/**\n * TV 機能のユーティリティ\n */\nexport class TVUtils {\n\n /**\n * 番組情報中の[字]や[解]などの記号をいい感じに装飾する\n * @param program 番組情報のオブジェクト\n * @param key 番組情報のオブジェクトから取り出すプロパティのキー\n * @returns 装飾した文字列\n */\n static decorateProgramInfo(program: IProgram, key: string): string {\n\n // program が空でないかつ、program[key] が存在する\n if (program !== null && program[key] !== null) {\n\n // 本来 ARIB 外字である記号の一覧\n // ref: https://ja.wikipedia.org/wiki/%E7%95%AA%E7%B5%84%E8%A1%A8\n // ref: https://github.com/xtne6f/EDCB/blob/work-plus-s/EpgDataCap3/EpgDataCap3/ARIB8CharDecode.cpp#L1319\n const mark = '新|終|再|交|映|手|声|多|副|字|文|CC|OP|二|S|B|SS|無|無料' +\n 'C|S1|S2|S3|MV|双|デ|D|N|W|P|H|HV|SD|天|解|料|前|後初|生|販|吹|PPV|' +\n '演|移|他|収|・|英|韓|中|字/日|字/日英|3D|2K|4K|8K|5.1|7.1|22.2|60P|120P|d|HC|HDR|SHV|UHD|VOD|配|初';\n\n // 正規表現を作成\n const pattern1 = new RegExp(`\\\\((二|字|再)\\\\)`, 'g'); // 通常の括弧で囲まれている記号\n const pattern2 = new RegExp(`\\\\[(${mark})\\\\]`, 'g');\n\n // 正規表現で置換した結果を返す\n let replaced = program[key].replace(pattern1, '$1');\n replaced = replaced.replace(pattern2, '$1');\n return replaced;\n\n // 放送休止中\n } else {\n return key == 'title' ? '放送休止': 'この時間は放送を休止しています。';\n }\n }\n\n\n /**\n * オブジェクトからプロパティを取得し、もしプロパティが存在しなければ代替値を返す\n * @param items 対象のオブジェクト\n * @param key オブジェクトから取り出すプロパティのキー\n * @param default_value 取得できなかった際の代替値\n * @returns オブジェクト取得した値 or 代替値\n */\n static getAttribute(items: {[key: string]: any}, key: string, default_value: any): any {\n\n // items が空でないかつ、items[key] が存在する\n if (items !== null && items[key] !== undefined && items[key] !== null) {\n\n // items[key] の内容を返す\n return items[key];\n\n // 指定された代替値を返す\n } else {\n return default_value;\n }\n }\n\n\n /**\n * チャンネル ID からチャンネルタイプを取得する\n * @param channel_id チャンネル ID\n * @param is_chideji GR を「地デジ」と表記するかどうか\n * @returns チャンネルタイプ\n */\n static getChannelType(channel_id: string, is_chideji: boolean = false): string {\n const result = channel_id.match('(?[a-z]+)[0-9]+').groups.channel_type.toUpperCase();\n if (result === 'GR' && is_chideji) {\n return '地デジ';\n } else {\n return result;\n }\n }\n\n\n /**\n * チャンネルの実況勢いから「多」「激多」「祭」を取得する\n * ref: https://ja.wikipedia.org/wiki/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%AE%9F%E6%B3%81\n * @param channel_force チャンネルの実況勢い\n * @returns normal(普通)or many(多)or so-many(激多)or festival(祭)\n */\n static getChannelForceType(channel_force: number | null): 'normal' | 'many' | 'so-many' | 'festival' {\n\n // 実況勢いが null(=対応する実況チャンネルがない)\n if (channel_force === null) return 'normal';\n\n // 実況勢いが 1000 コメント以上(祭)\n if (channel_force >= 1000) return 'festival';\n // 実況勢いが 200 コメント以上(激多)\n if (channel_force >= 200) return 'so-many';\n // 実況勢いが 100 コメント以上(多)\n if (channel_force >= 100) return 'many';\n\n // それ以外\n return 'normal';\n }\n\n\n /**\n * チャンネルタイプとリモコン番号からチャンネル情報を取得する\n * @param channels_list チャンネルリスト\n * @param channel_type チャンネルタイプ\n * @param remocon_id リモコン番号\n * @returns チャンネル情報\n */\n static getChannelFromRemoconID(channels_list: Map, channel_type: string, remocon_id: number): IChannel | null {\n\n // 指定されたチャンネルタイプのチャンネルを取得\n channel_type = channel_type.replace('GR', '地デジ'); //「GR」は「地デジ」に置換しておく\n const channels = channels_list.get(channel_type);\n\n // リモコン番号が一致するチャンネルを見つけ、一番最初に見つかったものを返す\n for (let index = 0; index < channels.length; index++) {\n const channel = channels[index];\n if (channel.remocon_id === remocon_id) {\n return channel;\n }\n }\n\n // リモコン番号が一致するチャンネルを見つけられなかった\n return null;\n }\n\n\n /**\n * 前・現在・次のチャンネル情報を取得する\n * @param channels_list チャンネルリスト\n * @param channel_id 起点にする現在のチャンネル ID\n * @returns 前・現在・次のチャンネル情報\n */\n static getPreviousAndCurrentAndNextChannel(channels_list: Map, channel_id: string): IChannel[] {\n\n // 前後のチャンネルを取得\n const channels = channels_list.get(this.getChannelType(channel_id, true));\n for (let index = 0; index < channels.length; index++) {\n const element = channels[index];\n\n // チャンネル ID が一致したときだけ\n if (element.channel_id === channel_id) {\n\n // インデックスが最初か最後の時はそれぞれ最後と最初にインデックスを一周させる\n let previous_index = index - 1;\n if (previous_index === -1) previous_index = channels.length - 1;\n let next_index = index + 1;\n if (next_index === channels.length) next_index = 0;\n\n // 前・現在・次のチャンネル情報を返す\n return [channels[previous_index], channels[index], channels[next_index]];\n }\n }\n }\n\n\n /**\n * 番組の放送時刻を取得する\n * @param program 番組情報\n * @param is_short 時刻のみ返すかどうか\n * @returns 番組の放送時刻\n */\n static getProgramTime(program: IProgram, is_short: boolean = false): string {\n\n // program が空でなく、かつ番組時刻が初期値でない\n if (program !== null && program.start_time !== '2000-01-01T00:00:00+09:00') {\n\n // dayjs で日付を扱いやすく\n dayjs.locale('ja'); // ロケールを日本に設定\n const start_time = dayjs(program.start_time);\n const end_time = dayjs(program.end_time);\n const duration = program.duration / 60; // 分換算\n\n // 時刻のみ返す\n if (is_short === true) { // 時刻のみ\n return `${start_time.format('HH:mm')} ~ ${end_time.format('HH:mm')}`;\n // 通常\n } else {\n return `${start_time.format('YYYY/MM/DD (dd) HH:mm')} ~ ${end_time.format('HH:mm')} (${duration}分)`;\n }\n\n // 放送休止中\n } else {\n\n // 時刻のみ返す\n if (is_short === true) {\n return '--:-- ~ --:--';\n // 通常\n } else {\n return '----/--/-- (-) --:-- ~ --:-- (--分)';\n }\n }\n }\n\n\n /**\n * 番組の進捗状況を取得する\n * @param program 番組情報\n * @returns 番組の進捗状況(%単位)\n */\n static getProgramProgress(program: IProgram): number {\n\n // program が空でない\n if (program !== null) {\n\n // 番組開始時刻から何秒進んだか\n const progress = dayjs(dayjs()).diff(program.start_time, 'second');\n\n // %単位の割合を算出して返す\n return progress / program.duration * 100;\n\n // 放送休止中\n } else {\n return 0;\n }\n }\n}\n","\n// 共通ユーティリティをデフォルトとしてインポート\nimport Utils from '@/utils/Utils';\nexport default Utils;\n\n// Utils フォルダ配下のユーティリティを一括でインポートできるように\nexport * from '@/utils/TVUtils';\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\nimport Vue from 'vue';\n\nimport Utils from '@/utils';\n\nexport default Vue.extend({\n name: 'Navigation',\n data() {\n return {\n // ユーティリティをテンプレートで使えるように\n Utils: Utils,\n }\n }\n});\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Navigation.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Navigation.vue?vue&type=template&id=4fdece88&scoped=true&\"\nimport script from \"./Navigation.vue?vue&type=script&lang=ts&\"\nexport * from \"./Navigation.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Navigation.vue?vue&type=style&index=0&id=4fdece88&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 \"4fdece88\",\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 { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VSpacer})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Ripple from 'vuetify/lib/directives/ripple'\ninstallDirectives(component, {Ripple})\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\nimport Vue from 'vue';\n\nimport { IChannel } from '@/interface';\nimport Header from '@/components/Header.vue';\nimport Navigation from '@/components/Navigation.vue';\nimport Utils, { TVUtils } from '@/utils';\n\nexport default Vue.extend({\n name: 'Home',\n components: {\n Header,\n Navigation,\n },\n data() {\n return {\n\n // ユーティリティをテンプレートで使えるように\n Utils: Utils,\n TVUtils: TVUtils,\n\n // タブの状態管理\n tab: null as number | null,\n\n // ローディング中かどうか\n is_loading: true,\n\n // インターバル ID\n // ページ遷移時に setInterval(), setTimeout() の実行を止めるのに使う\n // setInterval(), setTimeout() の返り値を登録する\n interval_ids: [] as number[],\n\n // チャンネル情報リスト\n channels_list: new Map() as Map,\n\n // ピン留めしているチャンネルの ID (ex: gr011) が入るリスト\n pinned_channel_ids: [] as string[],\n }\n },\n // 開始時に実行\n created() {\n\n // チャンネル情報を取得\n this.update();\n\n // 00秒までの残り秒数\n // 現在 16:01:34 なら 26 (秒) になる\n const residue_second = 60 - (Math.floor(new Date().getTime() / 1000) % 60);\n\n // 00秒になるまで待ってから\n // 番組は基本1分単位で組まれているため、20秒や45秒など中途半端な秒数で更新してしまうと反映が遅れてしまう\n this.interval_ids.push(window.setTimeout(() => {\n\n // チャンネル情報を更新\n this.update();\n\n // チャンネル情報を定期的に更新\n this.interval_ids.push(window.setInterval(() => {\n this.update();\n }, 30 * 1000)); // 30秒おき\n\n }, residue_second * 1000));\n },\n // 終了前に実行\n beforeDestroy() {\n\n // clearInterval() ですべての setInterval(), setTimeout() の実行を止める\n // clearInterval() と clearTimeout() は中身共通なので問題ない\n for (const interval_id of this.interval_ids) {\n window.clearInterval(interval_id);\n }\n },\n methods: {\n\n // チャンネル情報一覧を取得し、画面を更新する\n async update() {\n\n // チャンネル情報一覧 API にアクセス\n let channels_response;\n try {\n channels_response = await Vue.axios.get(`${Utils.api_base_url}/channels`);\n } catch (error) {\n console.error(error); // エラー内容を表示\n return;\n }\n\n // is_display が true のチャンネルのみに絞り込むフィルタ関数\n // 放送していないサブチャンネルを表示から除外する\n const filter = (channel: IChannel) => {\n return channel.is_display;\n }\n\n // チャンネルリストを再構築\n // 1つでもチャンネルが存在するチャンネルタイプのみ表示するように\n // たとえば SKY (スカパー!プレミアムサービス) のタブは SKY に属すチャンネルが1つもない(=受信できない)なら表示されない\n this.channels_list = new Map();\n if (channels_response.data.GR.length > 0) this.channels_list.set('地デジ', channels_response.data.GR.filter(filter));\n if (channels_response.data.BS.length > 0) this.channels_list.set('BS', channels_response.data.BS.filter(filter));\n if (channels_response.data.CS.length > 0) this.channels_list.set('CS', channels_response.data.CS.filter(filter));\n if (channels_response.data.CATV.length > 0) this.channels_list.set('CATV', channels_response.data.CATV.filter(filter));\n if (channels_response.data.SKY.length > 0) this.channels_list.set('SKY', channels_response.data.SKY.filter(filter));\n if (channels_response.data.STARDIGIO.length > 0) this.channels_list.set('StarDigio', channels_response.data.STARDIGIO.filter(filter));\n\n // ピン留めされているチャンネルのリストを更新\n this.updatePinnedChannelList(this.is_loading ? true : false);\n\n // ローディング状態を解除\n this.is_loading = false;\n },\n\n // チャンネルをピン留めする\n addPinnedChannel(channel_id: string) {\n\n // 現在ピン留めされているチャンネルを取得\n this.pinned_channel_ids = Utils.getSettingsItem('pinned_channel_ids');\n\n // ピン留めするチャンネルの ID を追加\n this.pinned_channel_ids.push(channel_id);\n\n // 設定を保存\n Utils.setSettingsItem('pinned_channel_ids', this.pinned_channel_ids);\n\n // ピン留めされているチャンネルのリストを更新\n this.updatePinnedChannelList();\n },\n\n // チャンネルをピン留めから外す\n removePinnedChannel(channel_id: string) {\n\n // 現在ピン留めされているチャンネルを取得\n this.pinned_channel_ids = Utils.getSettingsItem('pinned_channel_ids');\n\n // ピン留めを外すチャンネルの ID を削除\n this.pinned_channel_ids.splice(this.pinned_channel_ids.indexOf(channel_id), 1);\n\n // 設定を保存\n Utils.setSettingsItem('pinned_channel_ids', this.pinned_channel_ids);\n\n // ピン留めされているチャンネルのリストを更新\n this.updatePinnedChannelList();\n },\n\n // ピン留めされているチャンネルのリストを更新する\n updatePinnedChannelList(is_update_tab: boolean = true) {\n\n // ピン留めされているチャンネルの ID を取得\n this.pinned_channel_ids = Utils.getSettingsItem('pinned_channel_ids');\n\n // ピン留めされているチャンネル情報のリスト\n const pinned_channels = [] as IChannel[];\n\n // チャンネル ID が一致したチャンネルの情報を保存する\n for (const pinned_channel_id of this.pinned_channel_ids) {\n const pinned_channel_type = TVUtils.getChannelType(pinned_channel_id, true);\n pinned_channels.push(this.channels_list.get(pinned_channel_type).find((channel) => {\n return channel.channel_id === pinned_channel_id; // チャンネル ID がピン留めされているチャンネルのものと同じ\n }));\n }\n\n if (!this.channels_list.has('ピン留め')) {\n // タブの一番左にピン留めタブを表示する\n this.channels_list = new Map([['ピン留め', pinned_channels], ...this.channels_list]);\n } else {\n // 既に存在するピン留めタブにチャンネル情報を設定する\n this.channels_list.set('ピン留め', pinned_channels);\n }\n\n // pinned_channels が空の場合は、タブを地デジタブに変更\n // ピン留めができる事を示唆するためにピン留めタブ自体は残す\n if (pinned_channels.length === 0 && is_update_tab === true) {\n this.tab = 1;\n }\n },\n\n // チャンネルがピン留めされているか\n isPinnedChannel(channel_id: string): boolean {\n\n // 引数のチャンネルがピン留めリストに存在するかを返す\n return this.pinned_channel_ids.includes(channel_id);\n }\n }\n});\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=6a407b07&scoped=true&\"\nimport script from \"./Home.vue?vue&type=script&lang=ts&\"\nexport * from \"./Home.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&lang=scss&\"\nimport style1 from \"./Home.vue?vue&type=style&index=1&id=6a407b07&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 \"6a407b07\",\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 { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTab } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VSpacer,VTab})\n\n\n/* vuetify-loader */\nimport installDirectives from \"!../../../node_modules/vuetify-loader/lib/runtime/installDirectives.js\"\nimport Ripple from 'vuetify/lib/directives/ripple'\ninstallDirectives(component, {Ripple})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"route-container\"},[_c('main',{staticClass:\"watch-container\",class:{\n 'watch-container--control-display': _vm.is_control_display,\n 'watch-container--panel-display': _vm.is_panel_display,\n 'watch-container--fullscreen': _vm.is_fullscreen,\n }},[_c('nav',{staticClass:\"watch-navigation\",on:{\"mousemove\":function($event){return _vm.controlDisplayTimer($event)},\"touchmove\":function($event){return _vm.controlDisplayTimer($event)},\"click\":function($event){return _vm.controlDisplayTimer($event)}}},[_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"watch-navigation__icon\",attrs:{\"to\":\"/tv/\"}},[_c('img',{staticClass:\"watch-navigation__icon-image\",attrs:{\"src\":\"/assets/img/icon.svg\",\"width\":\"23px\"}})]),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('テレビをみる'),expression:\"'テレビをみる'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/tv/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:tv-20-regular\",\"width\":\"26px\"}})],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('ビデオをみる'),expression:\"'ビデオをみる'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/videos/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:movies-and-tv-20-regular\",\"width\":\"26px\"}})],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('番組表'),expression:\"'番組表'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/schedules/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:calendar-ltr-20-regular\",\"width\":\"26px\"}})],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('キャプチャ'),expression:\"'キャプチャ'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/captures/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:image-multiple-24-regular\",\"width\":\"26px\"}})],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('ウォッチリスト'),expression:\"'ウォッチリスト'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/watchlists/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"ic:round-playlist-play\",\"width\":\"26px\"}})],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('視聴履歴'),expression:\"'視聴履歴'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/histories/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:history-16-regular\",\"width\":\"26px\"}})],1),_c('v-spacer'),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:('設定'),expression:\"'設定'\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"to\":\"/settings/\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:settings-20-regular\",\"width\":\"26px\"}})],1),_c('a',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.right\",value:((\"version \" + (_vm.Utils.version))),expression:\"`version ${Utils.version}`\",modifiers:{\"right\":true}}],staticClass:\"watch-navigation__link\",attrs:{\"active-class\":\"watch-navigation__link--active\",\"href\":\"https://github.com/tsukumijima/KonomiTV\"}},[_c('Icon',{staticClass:\"watch-navigation__link-icon\",attrs:{\"icon\":\"fluent:info-16-regular\",\"width\":\"26px\"}})],1)],1),_c('div',{staticClass:\"watch-content\",on:{\"mousemove\":function($event){return _vm.controlDisplayTimer($event, true)},\"touchmove\":function($event){return _vm.controlDisplayTimer($event, true)},\"click\":function($event){return _vm.controlDisplayTimer($event, true)}}},[_c('header',{staticClass:\"watch-header\"},[_c('img',{staticClass:\"watch-header__broadcaster\",attrs:{\"src\":((_vm.Utils.api_base_url) + \"/channels/\" + ((_vm.$route.params.channel_id)) + \"/logo\")}}),_c('span',{staticClass:\"watch-header__program-title\",domProps:{\"innerHTML\":_vm._s(_vm.TVUtils.decorateProgramInfo(_vm.channel.program_present, 'title'))}}),_c('span',{staticClass:\"watch-header__program-time\"},[_vm._v(_vm._s(_vm.TVUtils.getProgramTime(_vm.channel.program_present, true)))]),_c('v-spacer'),_c('span',{staticClass:\"watch-header__now\"},[_vm._v(_vm._s(_vm.time))])],1),_c('div',{staticClass:\"watch-player\",class:{'watch-player--loading': _vm.is_loading}},[_c('div',{staticClass:\"watch-player__background\",class:{'watch-player__background--display': _vm.is_background_display},style:({backgroundImage: (\"url(\" + _vm.background_url + \")\")})},[_c('img',{staticClass:\"watch-player__background-logo\",attrs:{\"src\":\"/assets/img/logo.svg\"}})]),_c('div',{staticClass:\"watch-player__dplayer\"}),_c('div',{staticClass:\"watch-player__button\",on:{\"mousemove\":function($event){return _vm.controlDisplayTimer($event)},\"touchmove\":function($event){return _vm.controlDisplayTimer($event)},\"click\":function($event){return _vm.controlDisplayTimer($event)}}},[_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.top\",value:('前のチャンネル'),expression:\"'前のチャンネル'\",modifiers:{\"top\":true}}],staticClass:\"switch-button switch-button-up\",attrs:{\"to\":(\"/tv/watch/\" + (_vm.channel_previous.channel_id))}},[_c('Icon',{staticClass:\"switch-button-icon\",attrs:{\"icon\":\"fluent:ios-arrow-left-24-filled\",\"width\":\"32px\",\"rotate\":\"1\"}})],1),_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"switch-button switch-button-panel switch-button-panel--open\",on:{\"click\":function($event){_vm.is_panel_display = !_vm.is_panel_display}}},[_c('Icon',{staticClass:\"switch-button-icon\",attrs:{\"icon\":\"fluent:navigation-16-filled\",\"width\":\"32px\"}})],1),_c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"},{name:\"tooltip\",rawName:\"v-tooltip.bottom\",value:('次のチャンネル'),expression:\"'次のチャンネル'\",modifiers:{\"bottom\":true}}],staticClass:\"switch-button switch-button-down\",attrs:{\"to\":(\"/tv/watch/\" + (_vm.channel_next.channel_id))}},[_c('Icon',{staticClass:\"switch-button-icon\",attrs:{\"icon\":\"fluent:ios-arrow-right-24-filled\",\"width\":\"33px\",\"rotate\":\"1\"}})],1)],1)])]),_c('div',{staticClass:\"watch-panel\",on:{\"mousemove\":function($event){return _vm.controlDisplayTimer($event)},\"touchmove\":function($event){return _vm.controlDisplayTimer($event)},\"click\":function($event){return _vm.controlDisplayTimer($event)}}},[_c('div',{staticClass:\"watch-panel__header\"},[_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"panel-close-button\",on:{\"click\":function($event){_vm.is_panel_display = false}}},[_c('Icon',{staticClass:\"panel-close-button__icon\",attrs:{\"icon\":\"akar-icons:chevron-right\",\"width\":\"25px\"}}),_c('span',{staticClass:\"panel-close-button__text\"},[_vm._v(\"閉じる\")])],1),_c('v-spacer'),_c('div',{staticClass:\"panel-broadcaster\"},[_c('img',{staticClass:\"panel-broadcaster__icon\",attrs:{\"src\":((_vm.Utils.api_base_url) + \"/channels/\" + ((_vm.$route.params.channel_id)) + \"/logo\")}}),_c('div',{staticClass:\"panel-broadcaster__number\"},[_vm._v(_vm._s(_vm.channel.channel_number))]),_c('div',{staticClass:\"panel-broadcaster__name\"},[_vm._v(_vm._s(_vm.channel.channel_name))])])],1),_c('div',{staticClass:\"watch-panel__content-container\"},[_c('Program',{staticClass:\"watch-panel__content\",class:{'watch-panel__content--active': _vm.panel_active_tab === 'Program'},attrs:{\"channel\":_vm.channel}}),_c('Channel',{staticClass:\"watch-panel__content\",class:{'watch-panel__content--active': _vm.panel_active_tab === 'Channel'},attrs:{\"channels_list\":_vm.channels_list}}),_c('Comment',{staticClass:\"watch-panel__content\",class:{'watch-panel__content--active': _vm.panel_active_tab === 'Comment'},attrs:{\"channel\":_vm.channel,\"player\":_vm.player}})],1),_c('div',{staticClass:\"watch-panel__navigation\"},[_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"panel-navigation-button\",class:{'panel-navigation-button--active': _vm.panel_active_tab === 'Program'},on:{\"click\":function($event){_vm.panel_active_tab = 'Program'}}},[_c('Icon',{staticClass:\"panel-navigation-button__icon\",attrs:{\"icon\":\"fa-solid:info-circle\",\"width\":\"33px\"}}),_c('span',{staticClass:\"panel-navigation-button__text\"},[_vm._v(\"番組情報\")])],1),_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"panel-navigation-button\",class:{'panel-navigation-button--active': _vm.panel_active_tab === 'Channel'},on:{\"click\":function($event){_vm.panel_active_tab = 'Channel'}}},[_c('Icon',{staticClass:\"panel-navigation-button__icon\",attrs:{\"icon\":\"fa-solid:broadcast-tower\",\"width\":\"34px\"}}),_c('span',{staticClass:\"panel-navigation-button__text\"},[_vm._v(\"チャンネル\")])],1),_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"panel-navigation-button\",class:{'panel-navigation-button--active': _vm.panel_active_tab === 'Comment'},on:{\"click\":function($event){_vm.panel_active_tab = 'Comment'}}},[_c('Icon',{staticClass:\"panel-navigation-button__icon\",attrs:{\"icon\":\"bi:chat-left-text-fill\",\"width\":\"29px\"}}),_c('span',{staticClass:\"panel-navigation-button__text\"},[_vm._v(\"コメント\")])],1),_c('div',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],staticClass:\"panel-navigation-button\",class:{'panel-navigation-button--active': _vm.panel_active_tab === 'Twitter'},on:{\"click\":function($event){_vm.panel_active_tab = 'Twitter'}}},[_c('Icon',{staticClass:\"panel-navigation-button__icon\",attrs:{\"icon\":\"fa-brands:twitter\",\"width\":\"34px\"}}),_c('span',{staticClass:\"panel-navigation-button__text\"},[_vm._v(\"Twitter\")])],1)])])]),_c('v-dialog',{attrs:{\"max-width\":\"980\",\"transition\":\"slide-y-transition\"},model:{value:(_vm.shortcut_key_modal),callback:function ($$v) {_vm.shortcut_key_modal=$$v},expression:\"shortcut_key_modal\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"px-5 pt-4 pb-3 d-flex align-center font-weight-bold\"},[_c('Icon',{attrs:{\"icon\":\"fluent:keyboard-20-filled\",\"height\":\"28px\"}}),_c('span',{staticClass:\"ml-3\"},[_vm._v(\"キーボードショートカット\")])],1),_c('div',{staticClass:\"px-5 pb-4\"},[_c('v-row',_vm._l((_vm.shortcut_key_list),function(shortcut_key_column,shortcut_key_column_name){return _c('v-col',{key:shortcut_key_column_name,attrs:{\"cols\":\"6\"}},_vm._l((shortcut_key_column),function(shortcut_keys){return _c('div',{key:shortcut_keys.name,staticClass:\"mt-3\"},[_c('div',{staticClass:\"text-subtitle-1 d-flex align-center font-weight-bold\"},[_c('Icon',{attrs:{\"icon\":shortcut_keys.icon,\"height\":shortcut_keys.icon_height}}),_c('span',{staticClass:\"ml-2\"},[_vm._v(_vm._s(shortcut_keys.name))])],1),_vm._l((shortcut_keys.shortcuts),function(shortcut){return _c('div',{key:shortcut.name,staticClass:\"mt-3\"},[_c('div',{staticClass:\"text-subtitle-2 mt-2 d-flex align-center font-weight-medium\"},[_c('span',{staticClass:\"mr-2\",domProps:{\"innerHTML\":_vm._s(shortcut.name)}}),_c('div',{staticClass:\"ml-auto d-flex align-center flex-shrink-0\"},_vm._l((shortcut.keys),function(key,index){return _c('div',{key:key.name,staticClass:\"ml-auto d-flex align-center\"},[(key.icon === true)?_c('Icon',{staticClass:\"shortcut-key\",attrs:{\"icon\":key.name,\"height\":\"18px\"}}):_vm._e(),(key.icon === false)?_c('span',{staticClass:\"shortcut-key\"},[_vm._v(_vm._s(key.name))]):_vm._e(),(index < (shortcut.keys.length - 1))?_c('span',{staticClass:\"shortcut-key-plus\"},[_vm._v(\"+\")]):_vm._e()],1)}),0)])])})],2)}),0)}),1)],1),_c('v-divider'),_c('v-card-actions',{staticClass:\"px-5 py-3\"},[_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"background lighten-2 px-3\",\"elevation\":\"0\"},on:{\"click\":function($event){_vm.shortcut_key_modal = false}}},[_vm._v(\"閉じる\")])],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n// 番組情報を表すインターフェイス\nexport interface IProgram {\n id: string;\n network_id: number;\n service_id: number;\n event_id: number;\n channel_id: string;\n title: string;\n description: string;\n detail: {[key: string]: string};\n start_time: string;\n end_time: string;\n duration: number;\n is_free: boolean;\n genre: {major: string; middle: string}[];\n video_type: string;\n video_codec: string;\n video_resolution: string;\n primary_audio_type: string;\n primary_audio_language: string;\n primary_audio_sampling_rate: string;\n secondary_audio_type: string | null;\n secondary_audio_language: string | null;\n secondary_audio_sampling_rate: string | null;\n}\n\n// 番組情報を表すインターフェイスのデフォルト値\nexport const IProgramDefault: IProgram = {\n id: 'NID0-SID0',\n service_id: 0,\n network_id: 0,\n event_id: 0,\n channel_id: 'gr000',\n title: '取得中…',\n description: '取得中…',\n detail: {},\n start_time: '2000-01-01T00:00:00+09:00',\n end_time: '2000-01-01T00:00:00+09:00',\n duration: 0,\n is_free: true,\n genre: [],\n video_type: '映像1080i(1125i)、アスペクト比16:9 パンベクトルなし',\n video_codec: 'mpeg2',\n video_resolution: '1080i',\n primary_audio_type: '2/0モード(ステレオ)',\n primary_audio_language: '日本語',\n primary_audio_sampling_rate: '48kHz',\n secondary_audio_type: null,\n secondary_audio_language: null,\n secondary_audio_sampling_rate: null,\n}\n\n// チャンネル情報を表すインターフェイス\nexport interface IChannel {\n id: string;\n network_id: number;\n service_id: number;\n transport_stream_id: number | null;\n remocon_id: number | null;\n channel_id: string;\n channel_number: string;\n channel_name: string;\n channel_type: string;\n channel_force: number | null;\n channel_comment: number | null;\n is_subchannel: boolean;\n is_radiochannel: boolean;\n is_display: boolean;\n viewers: number;\n program_present: IProgram;\n program_following: IProgram;\n}\n\n// チャンネル情報を表すインターフェイスのデフォルト値\nexport const IChannelDefault: IChannel = {\n id: 'NID0-SID0',\n service_id: 0,\n network_id: 0,\n transport_stream_id: null,\n remocon_id: null,\n channel_id: 'gr000',\n channel_number: '---',\n channel_name: '取得中…',\n channel_type: 'GR',\n channel_force: null,\n channel_comment: null,\n is_subchannel: false,\n is_radiochannel: false,\n is_display: true,\n viewers: 0,\n program_present: IProgramDefault,\n program_following: IProgramDefault,\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"channels-container channels-container--watch\"},[_c('v-tabs-fix',{staticClass:\"channels-tab\",attrs:{\"centered\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},_vm._l((Array.from(_vm.channels_list)),function(ref){\nvar channels_type = ref[0];\nreturn _c('v-tab',{key:channels_type,staticClass:\"channels-tab__item\"},[_vm._v(\" \"+_vm._s(channels_type)+\" \")])}),1),_c('div',{staticClass:\"channels-list-container\"},[_c('v-tabs-items-fix',{staticClass:\"channels-list\",model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},_vm._l((Array.from(_vm.channels_list)),function(ref){\nvar channels_type = ref[0];\nvar channels = ref[1];\nreturn _c('v-tab-item-fix',{key:channels_type,staticClass:\"channels\"},_vm._l((channels),function(channel){return _c('router-link',{directives:[{name:\"ripple\",rawName:\"v-ripple\"}],key:channel.id,staticClass:\"channel\",attrs:{\"to\":(\"/tv/watch/\" + (channel.channel_id))}},[_c('div',{staticClass:\"channel__broadcaster\"},[_c('img',{staticClass:\"channel__broadcaster-icon\",attrs:{\"src\":((_vm.Utils.api_base_url) + \"/channels/\" + (channel.channel_id) + \"/logo\")}}),_c('div',{staticClass:\"channel__broadcaster-content\"},[_c('span',{staticClass:\"channel__broadcaster-name\"},[_vm._v(\"Ch: \"+_vm._s(channel.channel_number)+\" \"+_vm._s(channel.channel_name))]),_c('div',{staticClass:\"channel__broadcaster-force\",class:(\"channel__broadcaster-force--\" + (_vm.TVUtils.getChannelForceType(channel.channel_force)))},[_c('Icon',{attrs:{\"icon\":\"fa-solid:fire-alt\",\"height\":\"11px\"}}),_c('span',{staticClass:\"ml-1\"},[_vm._v(_vm._s(_vm.TVUtils.getAttribute(channel, 'channel_force', '-')))])],1)])]),_c('div',{staticClass:\"channel__program-present\"},[_c('span',{staticClass:\"channel__program-present-title\",domProps:{\"innerHTML\":_vm._s(_vm.TVUtils.decorateProgramInfo(channel.program_present, 'title'))}}),_c('span',{staticClass:\"channel__program-present-time\"},[_vm._v(_vm._s(_vm.TVUtils.getProgramTime(channel.program_present)))])]),_c('div',{staticClass:\"channel__program-following\"},[_c('div',{staticClass:\"channel__program-following-title\"},[_c('span',{staticClass:\"channel__program-following-title-decorate\"},[_vm._v(\"NEXT\")]),_c('Icon',{staticClass:\"channel__program-following-title-icon\",attrs:{\"icon\":\"fluent:fast-forward-20-filled\",\"width\":\"16px\"}}),_c('span',{staticClass:\"channel__program-following-title-text\",domProps:{\"innerHTML\":_vm._s(_vm.TVUtils.decorateProgramInfo(channel.program_following, 'title'))}})],1),_c('span',{staticClass:\"channel__program-following-time\"},[_vm._v(_vm._s(_vm.TVUtils.getProgramTime(channel.program_following)))])]),_c('div',{staticClass:\"channel__progressbar\"},[_c('div',{staticClass:\"channel__progressbar-progress\",style:((\"width:\" + (_vm.TVUtils.getProgramProgress(channel.program_present)) + \"%;\"))})])])}),1)}),1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\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\nimport Vue, { PropType } from 'vue';\n\nimport { IChannel } from '@/interface';\nimport Utils, { TVUtils } from '@/utils';\n\nexport default Vue.extend({\n name: 'Channel',\n props: {\n // チャンネル情報リスト\n channels_list: {\n type: Map as PropType