@minimalcorp/tsunagi 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/apps/web/.next/BUILD_ID +1 -1
- package/.next/standalone/apps/web/.next/build-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/prerender-manifest.json +3 -3
- package/.next/standalone/apps/web/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/_not-found.rsc +13 -13
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_index.segment.rsc +8 -8
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/index.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/index.rsc +15 -15
- package/.next/standalone/apps/web/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/index.segments/_full.segment.rsc +15 -15
- package/.next/standalone/apps/web/.next/server/app/index.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/index.segments/_index.segment.rsc +8 -8
- package/.next/standalone/apps/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.html +1 -1
- package/.next/standalone/apps/web/.next/server/app/settings.rsc +15 -15
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_full.segment.rsc +15 -15
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_head.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_index.segment.rsc +8 -8
- package/.next/standalone/apps/web/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +4 -4
- package/.next/standalone/apps/web/.next/server/app/settings.segments/settings.segment.rsc +3 -3
- package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page.js.nft.json +1 -1
- package/.next/standalone/apps/web/.next/server/app/tasks/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__05isylw._.js → [root-of-the-server]__07kf5h-._.js} +15 -15
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0ro8-ey._.js → [root-of-the-server]__0_gamc9._.js} +14 -14
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0.71xtd._.js → [root-of-the-server]__0a7t~wn._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{[root-of-the-server]__0a0hk7u._.js → [root-of-the-server]__0cwejmp._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{_0m02uow._.js → _06gug4~._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0_3mc_u._.js +14 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0g.cd6a._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{_12haisb._.js → _0gpi5iq._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{_0ciirh0._.js → _0ie-fls._.js} +2 -2
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_0w0y9fd._.js +3 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_settings_page_tsx_0i6itlb._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/apps_web_src_app_tasks_[id]_page_tsx_0jshsm2._.js +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_07l1hvz._.js → node_modules_0-dhyl6._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0.2komk._.js → node_modules_0-ecrjy._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0f2d1ld._.js → node_modules_0.6~k__._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0o5v9qy._.js → node_modules_0.7pxhy._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0--8gmr._.js → node_modules_0126g83._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_12fhr6_._.js → node_modules_06iewnh._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0rry_x9._.js → node_modules_0efb87~._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_05ji-z-._.js → node_modules_0j3gfu0._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0coeuci._.js → node_modules_0of7.-5._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0jnk_y1._.js → node_modules_0r6ewmn._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_05c~np0._.js → node_modules_0s64~o2._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0j0v234._.js → node_modules_0uwlz8.._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0s5._2.._.js → node_modules_0w5pf1p._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0o-eb.1._.js → node_modules_0ybihhp._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_11h4-ta._.js → node_modules_0zmomoe._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/chunks/ssr/{node_modules_0al2sy~._.js → node_modules_11gk90a._.js} +1 -1
- package/.next/standalone/apps/web/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/apps/web/.next/server/pages/404.html +1 -1
- package/.next/standalone/apps/web/.next/server/pages/500.html +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/apps/web/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/0-nditm2kmxy3.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/{10i6zv0moo8jf.js → 00vlzdkbq6_w3.js} +1 -1
- package/.next/standalone/apps/web/.next/static/chunks/05b63w8.ny19p.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/{0dqrg945xihvq.js → 0e9140l311w8t.js} +13 -13
- package/.next/standalone/apps/web/.next/static/chunks/0krkukgs6hg9c.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/{16ud~dw7vj3ay.js → 0kw1z8z_ld6s0.js} +13 -13
- package/.next/standalone/apps/web/.next/static/chunks/0sy8tzk6r-pb~.js +1 -0
- package/.next/standalone/apps/web/.next/static/chunks/0tggf01u1vugi.js +3 -0
- package/.next/standalone/apps/web/.next/static/chunks/0thsn6nq5b-cz.js +12 -0
- package/.next/standalone/apps/web/.next/static/chunks/0vfrsmi1vl53y.css +4 -0
- package/.next/standalone/apps/web/.next/static/chunks/10ildl1-mw9ez.js +5 -0
- package/dist/server/index.js +10 -0
- package/dist/server/lib/whisper-process.d.ts +23 -0
- package/dist/server/lib/whisper-process.js +196 -0
- package/dist/server/routes/whisper.d.ts +2 -0
- package/dist/server/routes/whisper.js +56 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -1
- package/whisper-server/README.md +23 -0
- package/whisper-server/download_model.py +14 -0
- package/whisper-server/requirements.txt +6 -0
- package/whisper-server/run.sh +24 -0
- package/whisper-server/server.py +52 -0
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_0-0rmdn._.js +0 -3
- package/.next/standalone/apps/web/.next/server/chunks/ssr/_075y~8w._.js +0 -14
- package/.next/standalone/apps/web/.next/static/chunks/0120px2-6x5y9.js +0 -12
- package/.next/standalone/apps/web/.next/static/chunks/01vu~a32zh7cz.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0dv3n-mxhr4w1.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0eh4r4805-t.c.js +0 -3
- package/.next/standalone/apps/web/.next/static/chunks/0w12j2_zw_0ax.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/0xn4aezxw~.je.js +0 -1
- package/.next/standalone/apps/web/.next/static/chunks/147e715pxo.p..css +0 -4
- package/.next/standalone/apps/web/.next/static/chunks/1490sj3xb9_m6.js +0 -5
- /package/.next/standalone/apps/web/.next/static/{qdfRw8pC3EF2mv12yUFzd → Sabbf98Kp2U-uM3Ul0na7}/_buildManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{qdfRw8pC3EF2mv12yUFzd → Sabbf98Kp2U-uM3Ul0na7}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/apps/web/.next/static/{qdfRw8pC3EF2mv12yUFzd → Sabbf98Kp2U-uM3Ul0na7}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { getWhisperServerStatus, startWhisperServer, stopWhisperServer, } from '../lib/whisper-process.js';
|
|
2
|
+
// ユーザーが依存関係(pipパッケージ)をセットアップ済みのローカル常駐サーバー
|
|
3
|
+
// (apps/whisper-server)を指す。依存関係のインストール自体はtsunagi側では行わず、
|
|
4
|
+
// プロセスの起動・停止のみ管理する。
|
|
5
|
+
const WHISPER_SERVER_URL = process.env.TSUNAGI_WHISPER_SERVER_URL || 'http://127.0.0.1:8765';
|
|
6
|
+
export async function whisperRoutes(fastify) {
|
|
7
|
+
// GET /whisper/server/status
|
|
8
|
+
fastify.get('/whisper/server/status', async (_request, reply) => {
|
|
9
|
+
return reply.status(200).send(await getWhisperServerStatus());
|
|
10
|
+
});
|
|
11
|
+
// POST /whisper/server/start
|
|
12
|
+
fastify.post('/whisper/server/start', async (_request, reply) => {
|
|
13
|
+
const result = startWhisperServer();
|
|
14
|
+
if (!result.started) {
|
|
15
|
+
return reply.status(409).send({ error: result.error });
|
|
16
|
+
}
|
|
17
|
+
return reply.status(202).send(await getWhisperServerStatus());
|
|
18
|
+
});
|
|
19
|
+
// POST /whisper/server/stop
|
|
20
|
+
fastify.post('/whisper/server/stop', async (_request, reply) => {
|
|
21
|
+
const result = stopWhisperServer();
|
|
22
|
+
if (!result.stopped) {
|
|
23
|
+
return reply.status(409).send({ error: result.error });
|
|
24
|
+
}
|
|
25
|
+
return reply.status(200).send(await getWhisperServerStatus());
|
|
26
|
+
});
|
|
27
|
+
// POST /whisper/transcribe
|
|
28
|
+
fastify.post('/whisper/transcribe', async (request, reply) => {
|
|
29
|
+
const file = await request.file();
|
|
30
|
+
if (!file) {
|
|
31
|
+
return reply.status(400).send({ error: 'No audio file provided' });
|
|
32
|
+
}
|
|
33
|
+
const buffer = await file.toBuffer();
|
|
34
|
+
const body = new FormData();
|
|
35
|
+
body.append('file', new Blob([buffer]), file.filename);
|
|
36
|
+
try {
|
|
37
|
+
const response = await fetch(`${WHISPER_SERVER_URL}/transcribe`, {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body,
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error(`whisper-server responded with ${response.status}`);
|
|
43
|
+
}
|
|
44
|
+
const result = (await response.json());
|
|
45
|
+
return reply.status(200).send({ text: result.text });
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
fastify.log.error(error, 'Whisper transcription error');
|
|
49
|
+
return reply.status(502).send({
|
|
50
|
+
error: error instanceof Error
|
|
51
|
+
? error.message
|
|
52
|
+
: 'Transcription failed. Is apps/whisper-server running?',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minimalcorp/tsunagi",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@minimalcorp/tsunagi",
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.22",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE",
|
|
11
11
|
"os": [
|
|
12
12
|
"darwin",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minimalcorp/tsunagi",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"description": "Multi-repo GitHub project management with Claude AI integration, designed for visualizing and controlling AI-driven development locally.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tsunagi",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"scripts/fix-node-pty-permissions.cjs",
|
|
46
46
|
"scripts/monaco-editor.sh",
|
|
47
47
|
"tsunagi-marketplace/**/*",
|
|
48
|
+
"whisper-server/**/*",
|
|
48
49
|
"LICENSE",
|
|
49
50
|
"README.md"
|
|
50
51
|
],
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# whisper-server
|
|
2
|
+
|
|
3
|
+
ローカル音声入力用サーバー。mlx-whisper (Apple Silicon GPU) で文字起こしする。
|
|
4
|
+
tsunagi本体はこのサーバーにHTTPでプロキシするだけで、セットアップ・起動は行わない。
|
|
5
|
+
|
|
6
|
+
## 要件
|
|
7
|
+
|
|
8
|
+
- macOS (Apple Silicon: M1/M2/M3/M4)
|
|
9
|
+
- Python 3.9+ (Xcode Command Line Tools または Homebrew 経由で入手可能)
|
|
10
|
+
|
|
11
|
+
ffmpeg等の外部バイナリは不要(音声はブラウザ側で16kHzモノラルWAVに変換して送られる)。
|
|
12
|
+
|
|
13
|
+
## セットアップ・起動
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
cd apps/whisper-server
|
|
17
|
+
./run.sh
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
初回は`.venv`を作成し`requirements.txt`の依存関係(mlx-whisper, fastapi, uvicorn等)をインストールしてから起動する。
|
|
21
|
+
`http://127.0.0.1:8765`で待受。初回起動時にWhisperモデル(mlx-community/whisper-large-v3-turbo, 約1.5GB)を自動ダウンロードする。
|
|
22
|
+
|
|
23
|
+
起動している間、tsunagiのSettingsで音声入力を有効にすると利用できる。停止するとtsunagi側の音声入力はエラーになる。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Whisperモデルの重みを事前ダウンロードするだけのスクリプト。
|
|
2
|
+
|
|
3
|
+
サーバー起動(server.py)より前に呼ぶことで、初回の文字起こしリクエストで
|
|
4
|
+
突然数分待たされる、という事態を避ける。tsunagi(Node)側からはこのプロセスの
|
|
5
|
+
実行中、キャッシュディレクトリ内の.incompleteファイルのサイズを定期的に見て
|
|
6
|
+
進捗を計算する想定なので、ここでは特別な進捗出力はしない。
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from huggingface_hub import snapshot_download
|
|
10
|
+
|
|
11
|
+
MODEL_REPO = "mlx-community/whisper-large-v3-turbo"
|
|
12
|
+
|
|
13
|
+
if __name__ == "__main__":
|
|
14
|
+
snapshot_download(repo_id=MODEL_REPO)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
4
|
+
|
|
5
|
+
# venv・モデルキャッシュとも ~/.tsunagi/whisper 配下にまとめる。
|
|
6
|
+
# npmインストール先(apps/whisper-server自体)が書き込み不可な場所でも動くようにする狙いもある。
|
|
7
|
+
TSUNAGI_WHISPER_DIR="${HOME}/.tsunagi/whisper"
|
|
8
|
+
VENV_DIR="${TSUNAGI_WHISPER_DIR}/venv"
|
|
9
|
+
export HF_HOME="${TSUNAGI_WHISPER_DIR}/cache"
|
|
10
|
+
# xet転送は進捗の観測が難しい独自プロトコルのため無効化し、素直なHTTPダウンロードに固定する。
|
|
11
|
+
export HF_HUB_DISABLE_XET=1
|
|
12
|
+
|
|
13
|
+
if [ ! -d "$VENV_DIR" ]; then
|
|
14
|
+
mkdir -p "$TSUNAGI_WHISPER_DIR"
|
|
15
|
+
python3 -m venv "$VENV_DIR"
|
|
16
|
+
"$VENV_DIR/bin/python3" -m pip install -r requirements.txt
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
# サーバー起動前にモデルを予めダウンロードしておく(初回文字起こしで待たされないように)。
|
|
20
|
+
"$VENV_DIR/bin/python3" download_model.py
|
|
21
|
+
|
|
22
|
+
# venvを ~/.tsunagi 配下へ移設する場合があるため、絶対パスが焼き込まれる
|
|
23
|
+
# コンソールスクリプト(bin/uvicorn等)ではなく `python3 -m` 経由で呼び出す。
|
|
24
|
+
exec "$VENV_DIR/bin/python3" -m uvicorn server:app --host 127.0.0.1 --port 8765
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""ローカルWhisper文字起こしサーバー (mlx-whisper, Apple Silicon GPU)。
|
|
2
|
+
|
|
3
|
+
ユーザーが手動でセットアップ・起動する常駐プロセス。モデルをメモリに保持し続け
|
|
4
|
+
リクエスト毎のロード待ちを避ける。tsunagi本体(Fastify)からHTTPでプロキシされる。
|
|
5
|
+
|
|
6
|
+
音声はブラウザのMediaRecorderが生成する元のwebm/opusをそのまま受け取る
|
|
7
|
+
(クライアント側でのWAV再エンコードは行わない。Opus圧縮は録音時点で既に
|
|
8
|
+
発生しているため、無圧縮WAVへ変換し直しても音質は改善せず転送量が増えるだけ)。
|
|
9
|
+
デコードにはPyAV(`av`)を使う。ffmpegの内部コーデックをホイールに同梱しており、
|
|
10
|
+
システムにffmpegバイナリをインストールする必要はない。
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import io
|
|
14
|
+
|
|
15
|
+
import av
|
|
16
|
+
import numpy as np
|
|
17
|
+
from fastapi import FastAPI, File, UploadFile
|
|
18
|
+
import mlx_whisper
|
|
19
|
+
|
|
20
|
+
MODEL = "mlx-community/whisper-large-v3-turbo"
|
|
21
|
+
|
|
22
|
+
app = FastAPI()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@app.get("/health")
|
|
26
|
+
async def health() -> dict:
|
|
27
|
+
return {"status": "ok", "model": MODEL}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def decode_to_16k_mono(data: bytes) -> np.ndarray:
|
|
31
|
+
container = av.open(io.BytesIO(data))
|
|
32
|
+
stream = container.streams.audio[0]
|
|
33
|
+
resampler = av.AudioResampler(format="s16", layout="mono", rate=16000)
|
|
34
|
+
|
|
35
|
+
chunks = []
|
|
36
|
+
for frame in container.decode(stream):
|
|
37
|
+
for resampled in resampler.resample(frame):
|
|
38
|
+
chunks.append(resampled.to_ndarray().reshape(-1))
|
|
39
|
+
container.close()
|
|
40
|
+
|
|
41
|
+
if not chunks:
|
|
42
|
+
return np.zeros(0, dtype=np.float32)
|
|
43
|
+
samples = np.concatenate(chunks).astype(np.float32) / 32768.0
|
|
44
|
+
return samples
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@app.post("/transcribe")
|
|
48
|
+
async def transcribe(file: UploadFile = File(...)) -> dict:
|
|
49
|
+
data = await file.read()
|
|
50
|
+
audio = decode_to_16k_mono(data)
|
|
51
|
+
result = mlx_whisper.transcribe(audio, path_or_hf_repo=MODEL, language="ja")
|
|
52
|
+
return {"text": result["text"].strip()}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
module.exports=[80087,a=>{"use strict";var b=a.i(87924),c=a.i(72131);let d=(0,c.createContext)(void 0);function e(){return"system"}a.s(["ThemeProvider",0,function({children:a}){let[f,g]=(0,c.useState)(e),[h,i]=(0,c.useState)("light");return(0,c.useEffect)(()=>{let a=window.matchMedia("(prefers-color-scheme: dark)"),b=document.documentElement,c=()=>{let c="system"===f?a.matches?"dark":"light":f;i(c),b.classList.toggle("dark","dark"===c)};c();let d=()=>{"system"===f&&c()};return a.addEventListener("change",d),()=>a.removeEventListener("change",d)},[f]),(0,b.jsx)(d.Provider,{value:{theme:f,setTheme:a=>{g(a),localStorage.setItem("theme",a),"system"===a?i(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"):i(a)},effectiveTheme:h},children:a})},"useTheme",0,function(){let a=(0,c.useContext)(d);if(void 0===a)throw Error("useTheme must be used within a ThemeProvider");return a}])},23292,67511,a=>{"use strict";var b=a.i(72131),c=a.i(35112);let d=Array(12).fill(0),e=({visible:a,className:c})=>b.default.createElement("div",{className:["sonner-loading-wrapper",c].filter(Boolean).join(" "),"data-visible":a},b.default.createElement("div",{className:"sonner-spinner"},d.map((a,c)=>b.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${c}`})))),f=b.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},b.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),g=b.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},b.default.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),h=b.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},b.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),i=b.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},b.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),j=b.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},b.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),b.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),k=1,l=new class{constructor(){this.subscribe=a=>(this.subscribers.push(a),()=>{let b=this.subscribers.indexOf(a);this.subscribers.splice(b,1)}),this.publish=a=>{this.subscribers.forEach(b=>b(a))},this.addToast=a=>{this.publish(a),this.toasts=[...this.toasts,a]},this.create=a=>{var b;let{message:c,...d}=a,e="number"==typeof(null==a?void 0:a.id)||(null==(b=a.id)?void 0:b.length)>0?a.id:k++,f=this.toasts.find(a=>a.id===e),g=void 0===a.dismissible||a.dismissible;return this.dismissedToasts.has(e)&&this.dismissedToasts.delete(e),f?this.toasts=this.toasts.map(b=>b.id===e?(this.publish({...b,...a,id:e,title:c}),{...b,...a,id:e,dismissible:g,title:c}):b):this.addToast({title:c,...d,dismissible:g,id:e}),e},this.dismiss=a=>(a?(this.dismissedToasts.add(a),requestAnimationFrame(()=>this.subscribers.forEach(b=>b({id:a,dismiss:!0})))):this.toasts.forEach(a=>{this.subscribers.forEach(b=>b({id:a.id,dismiss:!0}))}),a),this.message=(a,b)=>this.create({...b,message:a}),this.error=(a,b)=>this.create({...b,message:a,type:"error"}),this.success=(a,b)=>this.create({...b,type:"success",message:a}),this.info=(a,b)=>this.create({...b,type:"info",message:a}),this.warning=(a,b)=>this.create({...b,type:"warning",message:a}),this.loading=(a,b)=>this.create({...b,type:"loading",message:a}),this.promise=(a,c)=>{let d,e;if(!c)return;void 0!==c.loading&&(e=this.create({...c,promise:a,type:"loading",message:c.loading,description:"function"!=typeof c.description?c.description:void 0}));let f=Promise.resolve(a instanceof Function?a():a),g=void 0!==e,h=f.then(async a=>{if(d=["resolve",a],b.default.isValidElement(a))g=!1,this.create({id:e,type:"default",message:a});else if(m(a)&&!a.ok){g=!1;let d="function"==typeof c.error?await c.error(`HTTP error! status: ${a.status}`):c.error,f="function"==typeof c.description?await c.description(`HTTP error! status: ${a.status}`):c.description,h="object"!=typeof d||b.default.isValidElement(d)?{message:d}:d;this.create({id:e,type:"error",description:f,...h})}else if(a instanceof Error){g=!1;let d="function"==typeof c.error?await c.error(a):c.error,f="function"==typeof c.description?await c.description(a):c.description,h="object"!=typeof d||b.default.isValidElement(d)?{message:d}:d;this.create({id:e,type:"error",description:f,...h})}else if(void 0!==c.success){g=!1;let d="function"==typeof c.success?await c.success(a):c.success,f="function"==typeof c.description?await c.description(a):c.description,h="object"!=typeof d||b.default.isValidElement(d)?{message:d}:d;this.create({id:e,type:"success",description:f,...h})}}).catch(async a=>{if(d=["reject",a],void 0!==c.error){g=!1;let d="function"==typeof c.error?await c.error(a):c.error,f="function"==typeof c.description?await c.description(a):c.description,h="object"!=typeof d||b.default.isValidElement(d)?{message:d}:d;this.create({id:e,type:"error",description:f,...h})}}).finally(()=>{g&&(this.dismiss(e),e=void 0),null==c.finally||c.finally.call(c)}),i=()=>new Promise((a,b)=>h.then(()=>"reject"===d[0]?b(d[1]):a(d[1])).catch(b));return"string"!=typeof e&&"number"!=typeof e?{unwrap:i}:Object.assign(e,{unwrap:i})},this.custom=(a,b)=>{let c=(null==b?void 0:b.id)||k++;return this.create({jsx:a(c),id:c,...b}),c},this.getActiveToasts=()=>this.toasts.filter(a=>!this.dismissedToasts.has(a.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},m=a=>a&&"object"==typeof a&&"ok"in a&&"boolean"==typeof a.ok&&"status"in a&&"number"==typeof a.status,n=Object.assign((a,b)=>{let c=(null==b?void 0:b.id)||k++;return l.addToast({title:a,...b,id:c}),c},{success:l.success,info:l.info,warning:l.warning,error:l.error,custom:l.custom,message:l.message,promise:l.promise,dismiss:l.dismiss,loading:l.loading},{getHistory:()=>l.toasts,getToasts:()=>l.getActiveToasts()});function o(a){return void 0!==a.label}function p(...a){return a.filter(Boolean).join(" ")}!function(a){if(!a||"u"<typeof document)return;let b=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css",b.appendChild(c),c.styleSheet?c.styleSheet.cssText=a:c.appendChild(document.createTextNode(a))}("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");let q=a=>{var c,d,k,l,m,n,q,r,s,t,u,v,w;let{invert:x,toast:y,unstyled:z,interacting:A,setHeights:B,visibleToasts:C,heights:D,index:E,toasts:F,expanded:G,removeToast:H,defaultRichColors:I,closeButton:J,style:K,cancelButtonStyle:L,actionButtonStyle:M,className:N="",descriptionClassName:O="",duration:P,position:Q,gap:R,expandByDefault:S,classNames:T,icons:U,closeButtonAriaLabel:V="Close toast"}=a,[W,X]=b.default.useState(null),[Y,Z]=b.default.useState(null),[$,_]=b.default.useState(!1),[aa,ab]=b.default.useState(!1),[ac,ad]=b.default.useState(!1),[ae,af]=b.default.useState(!1),[ag,ah]=b.default.useState(!1),[ai,aj]=b.default.useState(0),[ak,al]=b.default.useState(0),am=b.default.useRef(y.duration||P||4e3),an=b.default.useRef(null),ao=b.default.useRef(null),ap=0===E,aq=E+1<=C,ar=y.type,as=!1!==y.dismissible,at=y.className||"",au=y.descriptionClassName||"",av=b.default.useMemo(()=>D.findIndex(a=>a.toastId===y.id)||0,[D,y.id]),aw=b.default.useMemo(()=>{var a;return null!=(a=y.closeButton)?a:J},[y.closeButton,J]),ax=b.default.useMemo(()=>y.duration||P||4e3,[y.duration,P]),ay=b.default.useRef(0),az=b.default.useRef(0),aA=b.default.useRef(0),aB=b.default.useRef(null),[aC,aD]=Q.split("-"),aE=b.default.useMemo(()=>D.reduce((a,b,c)=>c>=av?a:a+b.height,0),[D,av]),aF=(()=>{let[a,c]=b.default.useState(document.hidden);return b.default.useEffect(()=>{let a=()=>{c(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),a})(),aG=y.invert||x,aH="loading"===ar;az.current=b.default.useMemo(()=>av*R+aE,[av,aE]),b.default.useEffect(()=>{am.current=ax},[ax]),b.default.useEffect(()=>{_(!0)},[]),b.default.useEffect(()=>{let a=ao.current;if(a){let b=a.getBoundingClientRect().height;return al(b),B(a=>[{toastId:y.id,height:b,position:y.position},...a]),()=>B(a=>a.filter(a=>a.toastId!==y.id))}},[B,y.id]),b.default.useLayoutEffect(()=>{if(!$)return;let a=ao.current,b=a.style.height;a.style.height="auto";let c=a.getBoundingClientRect().height;a.style.height=b,al(c),B(a=>a.find(a=>a.toastId===y.id)?a.map(a=>a.toastId===y.id?{...a,height:c}:a):[{toastId:y.id,height:c,position:y.position},...a])},[$,y.title,y.description,B,y.id,y.jsx,y.action,y.cancel]);let aI=b.default.useCallback(()=>{ab(!0),aj(az.current),B(a=>a.filter(a=>a.toastId!==y.id)),setTimeout(()=>{H(y)},200)},[y,H,B,az]);b.default.useEffect(()=>{let a;if((!y.promise||"loading"!==ar)&&y.duration!==1/0&&"loading"!==y.type){if(G||A||aF){if(aA.current<ay.current){let a=new Date().getTime()-ay.current;am.current=am.current-a}aA.current=new Date().getTime()}else am.current!==1/0&&(ay.current=new Date().getTime(),a=setTimeout(()=>{null==y.onAutoClose||y.onAutoClose.call(y,y),aI()},am.current));return()=>clearTimeout(a)}},[G,A,y,ar,aF,aI]),b.default.useEffect(()=>{y.delete&&(aI(),null==y.onDismiss||y.onDismiss.call(y,y))},[aI,y.delete]);let aJ=y.icon||(null==U?void 0:U[ar])||(a=>{switch(a){case"success":return f;case"info":return h;case"warning":return g;case"error":return i;default:return null}})(ar);return b.default.createElement("li",{tabIndex:0,ref:ao,className:p(N,at,null==T?void 0:T.toast,null==y||null==(c=y.classNames)?void 0:c.toast,null==T?void 0:T.default,null==T?void 0:T[ar],null==y||null==(d=y.classNames)?void 0:d[ar]),"data-sonner-toast":"","data-rich-colors":null!=(t=y.richColors)?t:I,"data-styled":!(y.jsx||y.unstyled||z),"data-mounted":$,"data-promise":!!y.promise,"data-swiped":ag,"data-removed":aa,"data-visible":aq,"data-y-position":aC,"data-x-position":aD,"data-index":E,"data-front":ap,"data-swiping":ac,"data-dismissible":as,"data-type":ar,"data-invert":aG,"data-swipe-out":ae,"data-swipe-direction":Y,"data-expanded":!!(G||S&&$),"data-testid":y.testId,style:{"--index":E,"--toasts-before":E,"--z-index":F.length-E,"--offset":`${aa?ai:az.current}px`,"--initial-height":S?"auto":`${ak}px`,...K,...y.style},onDragEnd:()=>{ad(!1),X(null),aB.current=null},onPointerDown:a=>{2===a.button||aH||!as||(an.current=new Date,aj(az.current),a.target.setPointerCapture(a.pointerId),"BUTTON"!==a.target.tagName&&(ad(!0),aB.current={x:a.clientX,y:a.clientY}))},onPointerUp:()=>{var a,b,c,d,e;if(ae||!as)return;aB.current=null;let f=Number((null==(a=ao.current)?void 0:a.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),g=Number((null==(b=ao.current)?void 0:b.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),h=new Date().getTime()-(null==(c=an.current)?void 0:c.getTime()),i="x"===W?f:g,j=Math.abs(i)/h;if(Math.abs(i)>=45||j>.11){aj(az.current),null==y.onDismiss||y.onDismiss.call(y,y),"x"===W?Z(f>0?"right":"left"):Z(g>0?"down":"up"),aI(),af(!0);return}null==(d=ao.current)||d.style.setProperty("--swipe-amount-x","0px"),null==(e=ao.current)||e.style.setProperty("--swipe-amount-y","0px"),ah(!1),ad(!1),X(null)},onPointerMove:b=>{var c,d,e,f;if(!aB.current||!as||(null==(c=window.getSelection())?void 0:c.toString().length)>0)return;let g=b.clientY-aB.current.y,h=b.clientX-aB.current.x,i=null!=(f=a.swipeDirections)?f:function(a){let[b,c]=a.split("-"),d=[];return b&&d.push(b),c&&d.push(c),d}(Q);!W&&(Math.abs(h)>1||Math.abs(g)>1)&&X(Math.abs(h)>Math.abs(g)?"x":"y");let j={x:0,y:0},k=a=>1/(1.5+Math.abs(a)/20);if("y"===W){if(i.includes("top")||i.includes("bottom"))if(i.includes("top")&&g<0||i.includes("bottom")&&g>0)j.y=g;else{let a=g*k(g);j.y=Math.abs(a)<Math.abs(g)?a:g}}else if("x"===W&&(i.includes("left")||i.includes("right")))if(i.includes("left")&&h<0||i.includes("right")&&h>0)j.x=h;else{let a=h*k(h);j.x=Math.abs(a)<Math.abs(h)?a:h}(Math.abs(j.x)>0||Math.abs(j.y)>0)&&ah(!0),null==(d=ao.current)||d.style.setProperty("--swipe-amount-x",`${j.x}px`),null==(e=ao.current)||e.style.setProperty("--swipe-amount-y",`${j.y}px`)}},aw&&!y.jsx&&"loading"!==ar?b.default.createElement("button",{"aria-label":V,"data-disabled":aH,"data-close-button":!0,onClick:aH||!as?()=>{}:()=>{aI(),null==y.onDismiss||y.onDismiss.call(y,y)},className:p(null==T?void 0:T.closeButton,null==y||null==(k=y.classNames)?void 0:k.closeButton)},null!=(u=null==U?void 0:U.close)?u:j):null,(ar||y.icon||y.promise)&&null!==y.icon&&((null==U?void 0:U[ar])!==null||y.icon)?b.default.createElement("div",{"data-icon":"",className:p(null==T?void 0:T.icon,null==y||null==(l=y.classNames)?void 0:l.icon)},y.promise||"loading"===y.type&&!y.icon?y.icon||((null==U?void 0:U.loading)?b.default.createElement("div",{className:p(null==T?void 0:T.loader,null==y||null==(w=y.classNames)?void 0:w.loader,"sonner-loader"),"data-visible":"loading"===ar},U.loading):b.default.createElement(e,{className:p(null==T?void 0:T.loader,null==y||null==(v=y.classNames)?void 0:v.loader),visible:"loading"===ar})):null,"loading"!==y.type?aJ:null):null,b.default.createElement("div",{"data-content":"",className:p(null==T?void 0:T.content,null==y||null==(m=y.classNames)?void 0:m.content)},b.default.createElement("div",{"data-title":"",className:p(null==T?void 0:T.title,null==y||null==(n=y.classNames)?void 0:n.title)},y.jsx?y.jsx:"function"==typeof y.title?y.title():y.title),y.description?b.default.createElement("div",{"data-description":"",className:p(O,au,null==T?void 0:T.description,null==y||null==(q=y.classNames)?void 0:q.description)},"function"==typeof y.description?y.description():y.description):null),b.default.isValidElement(y.cancel)?y.cancel:y.cancel&&o(y.cancel)?b.default.createElement("button",{"data-button":!0,"data-cancel":!0,style:y.cancelButtonStyle||L,onClick:a=>{!o(y.cancel)||as&&(null==y.cancel.onClick||y.cancel.onClick.call(y.cancel,a),aI())},className:p(null==T?void 0:T.cancelButton,null==y||null==(r=y.classNames)?void 0:r.cancelButton)},y.cancel.label):null,b.default.isValidElement(y.action)?y.action:y.action&&o(y.action)?b.default.createElement("button",{"data-button":!0,"data-action":!0,style:y.actionButtonStyle||M,onClick:a=>{!o(y.action)||(null==y.action.onClick||y.action.onClick.call(y.action,a),a.defaultPrevented||aI())},className:p(null==T?void 0:T.actionButton,null==y||null==(s=y.classNames)?void 0:s.actionButton)},y.action.label):null)},r=b.default.forwardRef(function(a,d){let{id:e,invert:f,position:g="bottom-right",hotkey:h=["altKey","KeyT"],expand:i,closeButton:j,className:k,offset:m,mobileOffset:n,theme:o="light",richColors:p,duration:r,style:s,visibleToasts:t=3,toastOptions:u,dir:v="ltr",gap:w=14,icons:x,containerAriaLabel:y="Notifications"}=a,[z,A]=b.default.useState([]),B=b.default.useMemo(()=>e?z.filter(a=>a.toasterId===e):z.filter(a=>!a.toasterId),[z,e]),C=b.default.useMemo(()=>Array.from(new Set([g].concat(B.filter(a=>a.position).map(a=>a.position)))),[B,g]),[D,E]=b.default.useState([]),[F,G]=b.default.useState(!1),[H,I]=b.default.useState(!1),[J,K]=b.default.useState("system"!==o?o:"light"),L=b.default.useRef(null),M=h.join("+").replace(/Key/g,"").replace(/Digit/g,""),N=b.default.useRef(null),O=b.default.useRef(!1),P=b.default.useCallback(a=>{A(b=>{var c;return(null==(c=b.find(b=>b.id===a.id))?void 0:c.delete)||l.dismiss(a.id),b.filter(({id:b})=>b!==a.id)})},[]);return b.default.useEffect(()=>l.subscribe(a=>{a.dismiss?requestAnimationFrame(()=>{A(b=>b.map(b=>b.id===a.id?{...b,delete:!0}:b))}):setTimeout(()=>{c.default.flushSync(()=>{A(b=>{let c=b.findIndex(b=>b.id===a.id);return -1!==c?[...b.slice(0,c),{...b[c],...a},...b.slice(c+1)]:[a,...b]})})})}),[z]),b.default.useEffect(()=>{"system"!==o?K(o):"system"===o&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?K("dark"):K("light"))},[o]),b.default.useEffect(()=>{z.length<=1&&G(!1)},[z]),b.default.useEffect(()=>{let a=a=>{var b,c;h.every(b=>a[b]||a.code===b)&&(G(!0),null==(c=L.current)||c.focus()),"Escape"===a.code&&(document.activeElement===L.current||(null==(b=L.current)?void 0:b.contains(document.activeElement)))&&G(!1)};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[h]),b.default.useEffect(()=>{if(L.current)return()=>{N.current&&(N.current.focus({preventScroll:!0}),N.current=null,O.current=!1)}},[L.current]),b.default.createElement("section",{ref:d,"aria-label":`${y} ${M}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},C.map((c,d)=>{var e;let g,[h,l]=c.split("-");return B.length?b.default.createElement("ol",{key:c,dir:"auto"===v?"ltr":v,tabIndex:-1,ref:L,className:k,"data-sonner-toaster":!0,"data-sonner-theme":J,"data-y-position":h,"data-x-position":l,style:{"--front-toast-height":`${(null==(e=D[0])?void 0:e.height)||0}px`,"--width":"356px","--gap":`${w}px`,...s,...(g={},[m,n].forEach((a,b)=>{let c=1===b,d=c?"--mobile-offset":"--offset",e=c?"16px":"24px";function f(a){["top","right","bottom","left"].forEach(b=>{g[`${d}-${b}`]="number"==typeof a?`${a}px`:a})}"number"==typeof a||"string"==typeof a?f(a):"object"==typeof a?["top","right","bottom","left"].forEach(b=>{void 0===a[b]?g[`${d}-${b}`]=e:g[`${d}-${b}`]="number"==typeof a[b]?`${a[b]}px`:a[b]}):f(e)}),g)},onBlur:a=>{O.current&&!a.currentTarget.contains(a.relatedTarget)&&(O.current=!1,N.current&&(N.current.focus({preventScroll:!0}),N.current=null))},onFocus:a=>{!(a.target instanceof HTMLElement&&"false"===a.target.dataset.dismissible)&&(O.current||(O.current=!0,N.current=a.relatedTarget))},onMouseEnter:()=>G(!0),onMouseMove:()=>G(!0),onMouseLeave:()=>{H||G(!1)},onDragEnd:()=>G(!1),onPointerDown:a=>{a.target instanceof HTMLElement&&"false"===a.target.dataset.dismissible||I(!0)},onPointerUp:()=>I(!1)},B.filter(a=>!a.position&&0===d||a.position===c).map((d,e)=>{var g,h;return b.default.createElement(q,{key:d.id,icons:x,index:e,toast:d,defaultRichColors:p,duration:null!=(g=null==u?void 0:u.duration)?g:r,className:null==u?void 0:u.className,descriptionClassName:null==u?void 0:u.descriptionClassName,invert:f,visibleToasts:t,closeButton:null!=(h=null==u?void 0:u.closeButton)?h:j,interacting:H,position:c,style:null==u?void 0:u.style,unstyled:null==u?void 0:u.unstyled,classNames:null==u?void 0:u.classNames,cancelButtonStyle:null==u?void 0:u.cancelButtonStyle,actionButtonStyle:null==u?void 0:u.actionButtonStyle,closeButtonAriaLabel:null==u?void 0:u.closeButtonAriaLabel,removeToast:P,toasts:B.filter(a=>a.position==d.position),heights:D.filter(a=>a.position==d.position),setHeights:E,expandByDefault:i,gap:w,expanded:F,swipeDirections:a.swipeDirections})})):null}))});a.s(["Toaster",0,r,"toast",0,n],23292);let s=(0,a.i(60137).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["default",0,s],67511)},53155,77928,a=>{"use strict";var b,c,d=a.i(87924),e=a.i(72131);function f(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}function g(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function h(a){for(var b=1;b<arguments.length;b++){var c=null!=arguments[b]?arguments[b]:{};b%2?g(Object(c),!0).forEach(function(b){var d;d=c[b],b in a?Object.defineProperty(a,b,{value:d,enumerable:!0,configurable:!0,writable:!0}):a[b]=d}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):g(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}return a}function i(a){return function b(){for(var c=this,d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return e.length>=a.length?a.apply(this,e):function(){for(var a=arguments.length,d=Array(a),f=0;f<a;f++)d[f]=arguments[f];return b.apply(c,[].concat(e,d))}}}function j(a){return({}).toString.call(a).includes("Object")}function k(a){return"function"==typeof a}var l=i(function(a,b){throw Error(a[b]||a.default)})({initialIsRequired:"initial state is required",initialType:"initial state should be an object",initialContent:"initial state shouldn't be an empty object",handlerType:"handler should be an object or a function",handlersType:"all handlers should be a functions",selectorType:"selector should be a function",changeType:"provided value of changes should be an object",changeField:'it seams you want to change a field in the state which is not specified in the "initial" state',default:"an unknown error accured in `state-local` package"}),m=function(a,b){return j(b)||l("changeType"),Object.keys(b).some(function(b){return!Object.prototype.hasOwnProperty.call(a,b)})&&l("changeField"),b},n=function(a){k(a)||l("selectorType")},o=function(a){k(a)||j(a)||l("handlerType"),j(a)&&Object.values(a).some(function(a){return!k(a)})&&l("handlersType")},p=function(a){a||l("initialIsRequired"),j(a)||l("initialType"),Object.keys(a).length||l("initialContent")};function q(a,b){return k(b)?b(a.current):b}function r(a,b){return a.current=h(h({},a.current),b),b}function s(a,b,c){return k(b)?b(a.current):Object.keys(c).forEach(function(c){var d;return null==(d=b[c])?void 0:d.call(b,a.current[c])}),c}var t={configIsRequired:"the configuration object is required",configType:"the configuration object should be an object",default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:"Deprecation warning!\n You are using deprecated way of configuration.\n\n Instead of using\n monaco.config({ urls: { monacoBase: '...' } })\n use\n monaco.config({ paths: { vs: '...' } })\n\n For more please check the link https://github.com/suren-atoyan/monaco-loader#config\n "},u=(b=function(a,b){throw Error(a[b]||a.default)},function a(){for(var c=this,d=arguments.length,e=Array(d),f=0;f<d;f++)e[f]=arguments[f];return e.length>=b.length?b.apply(this,e):function(){for(var b=arguments.length,d=Array(b),f=0;f<b;f++)d[f]=arguments[f];return a.apply(c,[].concat(e,d))}})(t),v=function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return function(a){return b.reduceRight(function(a,b){return b(a)},a)}},w={type:"cancelation",msg:"operation is manually canceled"};function x(a){var b=!1,c=new Promise(function(c,d){a.then(function(a){return b?d(w):c(a)}),a.catch(d)});return c.cancel=function(){return b=!0},c}var y=function(a){if(Array.isArray(a))return a}(c=({create:function(a){var b=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};p(a),o(b);var c={current:a},d=i(s)(c,b),e=i(r)(c),f=i(m)(a),g=i(q)(c);return[function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(a){return a};return n(a),a(c.current)},function(a){(function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return function(a){return b.reduceRight(function(a,b){return b(a)},a)}})(d,e,f,g)(a)}]}}).create({config:{paths:{vs:"https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs"}},isInitialized:!1,resolve:null,reject:null,monaco:null}))||function(a){var b=null==a?null:"u">typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(null!=b){var c,d,e,f,g=[],h=!0,i=!1;try{e=(b=b.call(a)).next,!1;for(;!(h=(c=e.call(b)).done)&&(g.push(c.value),2!==g.length);h=!0);}catch(a){i=!0,d=a}finally{try{if(!h&&null!=b.return&&(f=b.return(),Object(f)!==f))return}finally{if(i)throw d}}return g}}(c)||function(a){if(a){if("string"==typeof a)return f(a,2);var b=({}).toString.call(a).slice(8,-1);return"Object"===b&&a.constructor&&(b=a.constructor.name),"Map"===b||"Set"===b?Array.from(a):"Arguments"===b||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(b)?f(a,2):void 0}}(c)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),z=y[0],A=y[1];function B(a){return document.body.appendChild(a)}function C(a){var b,c,d=z(function(a){return{config:a.config,reject:a.reject}}),e=(b="".concat(d.config.paths.vs,"/loader.js"),c=document.createElement("script"),b&&(c.src=b),c);return e.onload=function(){return a()},e.onerror=d.reject,e}function D(){var a=z(function(a){return{config:a.config,resolve:a.resolve,reject:a.reject}}),b=window.require;b.config(a.config),b(["vs/editor/editor.main"],function(b){var c=b.m||b;E(c),a.resolve(c)},function(b){a.reject(b)})}function E(a){z().monaco||A({monaco:a})}var F=new Promise(function(a,b){return A({resolve:a,reject:b})}),G=function(){var a=z(function(a){return{monaco:a.monaco,isInitialized:a.isInitialized,resolve:a.resolve}});if(!a.isInitialized){if(A({isInitialized:!0}),a.monaco)return a.resolve(a.monaco),x(F);if(window.monaco&&window.monaco.editor)return E(window.monaco),a.resolve(window.monaco),x(F);v(B,C)(D)}return x(F)},H={display:"flex",position:"relative",textAlign:"initial"},I={width:"100%"},J={display:"none"},K={display:"flex",height:"100%",width:"100%",justifyContent:"center",alignItems:"center"},L=function({children:a}){return e.default.createElement("div",{style:K},a)},M=(0,e.memo)(function({width:a,height:b,isEditorReady:c,loading:d,_ref:f,className:g,wrapperProps:h}){return e.default.createElement("section",{style:{...H,width:a,height:b},...h},!c&&e.default.createElement(L,null,d),e.default.createElement("div",{ref:f,style:{...I,...!c&&J},className:g}))}),N=function(a){(0,e.useEffect)(a,[])},O=function(a,b,c=!0){let d=(0,e.useRef)(!0);(0,e.useEffect)(d.current||!c?()=>{d.current=!1}:a,b)};function P(){}function Q(a,b,c,d){var e,f,g,h,i,j;return e=a,f=d,e.editor.getModel(R(e,f))||(g=a,h=b,i=c,j=d,g.editor.createModel(h,i,j?R(g,j):void 0))}function R(a,b){return a.Uri.parse(b)}(0,e.memo)(function({original:a,modified:b,language:c,originalLanguage:d,modifiedLanguage:f,originalModelPath:g,modifiedModelPath:h,keepCurrentOriginalModel:i=!1,keepCurrentModifiedModel:j=!1,theme:k="light",loading:l="Loading...",options:m={},height:n="100%",width:o="100%",className:p,wrapperProps:q={},beforeMount:r=P,onMount:s=P}){let[t,u]=(0,e.useState)(!1),[v,w]=(0,e.useState)(!0),x=(0,e.useRef)(null),y=(0,e.useRef)(null),z=(0,e.useRef)(null),A=(0,e.useRef)(s),B=(0,e.useRef)(r),C=(0,e.useRef)(!1);N(()=>{let a=G();return a.then(a=>(y.current=a)&&w(!1)).catch(a=>a?.type!=="cancelation"&&console.error("Monaco initialization: error:",a)),()=>{let b;return x.current?(b=x.current?.getModel(),void(i||b?.original?.dispose(),j||b?.modified?.dispose(),x.current?.dispose())):a.cancel()}}),O(()=>{if(x.current&&y.current){let b=x.current.getOriginalEditor(),e=Q(y.current,a||"",d||c||"text",g||"");e!==b.getModel()&&b.setModel(e)}},[g],t),O(()=>{if(x.current&&y.current){let a=x.current.getModifiedEditor(),d=Q(y.current,b||"",f||c||"text",h||"");d!==a.getModel()&&a.setModel(d)}},[h],t),O(()=>{let a=x.current.getModifiedEditor();a.getOption(y.current.editor.EditorOption.readOnly)?a.setValue(b||""):b!==a.getValue()&&(a.executeEdits("",[{range:a.getModel().getFullModelRange(),text:b||"",forceMoveMarkers:!0}]),a.pushUndoStop())},[b],t),O(()=>{x.current?.getModel()?.original.setValue(a||"")},[a],t),O(()=>{let{original:a,modified:b}=x.current.getModel();y.current.editor.setModelLanguage(a,d||c||"text"),y.current.editor.setModelLanguage(b,f||c||"text")},[c,d,f],t),O(()=>{y.current?.editor.setTheme(k)},[k],t),O(()=>{x.current?.updateOptions(m)},[m],t);let D=(0,e.useCallback)(()=>{if(!y.current)return;B.current(y.current);let e=Q(y.current,a||"",d||c||"text",g||""),i=Q(y.current,b||"",f||c||"text",h||"");x.current?.setModel({original:e,modified:i})},[c,b,f,a,d,g,h]),E=(0,e.useCallback)(()=>{!C.current&&z.current&&(x.current=y.current.editor.createDiffEditor(z.current,{automaticLayout:!0,...m}),D(),y.current?.editor.setTheme(k),u(!0),C.current=!0)},[m,k,D]);return(0,e.useEffect)(()=>{t&&A.current(x.current,y.current)},[t]),(0,e.useEffect)(()=>{v||t||E()},[v,t,E]),e.default.createElement(M,{width:o,height:n,isEditorReady:t,loading:l,_ref:z,className:p,wrapperProps:q})});var S=function(a){let b=(0,e.useRef)();return(0,e.useEffect)(()=>{b.current=a},[a]),b.current},T=new Map,U=(0,e.memo)(function({defaultValue:a,defaultLanguage:b,defaultPath:c,value:d,language:f,path:g,theme:h="light",line:i,loading:j="Loading...",options:k={},overrideServices:l={},saveViewState:m=!0,keepCurrentModel:n=!1,width:o="100%",height:p="100%",className:q,wrapperProps:r={},beforeMount:s=P,onMount:t=P,onChange:u,onValidate:v=P}){let[w,x]=(0,e.useState)(!1),[y,z]=(0,e.useState)(!0),A=(0,e.useRef)(null),B=(0,e.useRef)(null),C=(0,e.useRef)(null),D=(0,e.useRef)(t),E=(0,e.useRef)(s),F=(0,e.useRef)(),H=(0,e.useRef)(d),I=S(g),J=(0,e.useRef)(!1),K=(0,e.useRef)(!1);N(()=>{let a=G();return a.then(a=>(A.current=a)&&z(!1)).catch(a=>a?.type!=="cancelation"&&console.error("Monaco initialization: error:",a)),()=>B.current?void(F.current?.dispose(),n?m&&T.set(g,B.current.saveViewState()):B.current.getModel()?.dispose(),B.current.dispose()):a.cancel()}),O(()=>{let e=Q(A.current,a||d||"",b||f||"",g||c||"");e!==B.current?.getModel()&&(m&&T.set(I,B.current?.saveViewState()),B.current?.setModel(e),m&&B.current?.restoreViewState(T.get(g)))},[g],w),O(()=>{B.current?.updateOptions(k)},[k],w),O(()=>{B.current&&void 0!==d&&(B.current.getOption(A.current.editor.EditorOption.readOnly)?B.current.setValue(d):d!==B.current.getValue()&&(K.current=!0,B.current.executeEdits("",[{range:B.current.getModel().getFullModelRange(),text:d,forceMoveMarkers:!0}]),B.current.pushUndoStop(),K.current=!1))},[d],w),O(()=>{let a=B.current?.getModel();a&&f&&A.current?.editor.setModelLanguage(a,f)},[f],w),O(()=>{void 0!==i&&B.current?.revealLine(i)},[i],w),O(()=>{A.current?.editor.setTheme(h)},[h],w);let L=(0,e.useCallback)(()=>{if(!(!C.current||!A.current)&&!J.current){E.current(A.current);let e=g||c,j=Q(A.current,d||a||"",b||f||"",e||"");B.current=A.current?.editor.create(C.current,{model:j,automaticLayout:!0,...k},l),m&&B.current.restoreViewState(T.get(e)),A.current.editor.setTheme(h),void 0!==i&&B.current.revealLine(i),x(!0),J.current=!0}},[a,b,c,d,f,g,k,l,m,h,i]);return(0,e.useEffect)(()=>{w&&D.current(B.current,A.current)},[w]),(0,e.useEffect)(()=>{y||w||L()},[y,w,L]),H.current=d,(0,e.useEffect)(()=>{w&&u&&(F.current?.dispose(),F.current=B.current?.onDidChangeModelContent(a=>{K.current||u(B.current.getValue(),a)}))},[w,u]),(0,e.useEffect)(()=>{if(w){let a=A.current.editor.onDidChangeMarkers(a=>{let b=B.current.getModel()?.uri;if(b&&a.find(a=>a.path===b.path)){let a=A.current.editor.getModelMarkers({resource:b});v?.(a)}});return()=>{a?.dispose()}}return()=>{}},[w,v]),e.default.createElement(M,{width:o,height:p,isEditorReady:w,loading:j,_ref:C,className:q,wrapperProps:r})});a.s(["Editor",0,U],77928);var V=a.i(80087),W=a.i(90002),X=a.i(39524);let Y="u">typeof navigator&&/Mac/.test(navigator.platform);function Z(a){let b=a.getModel();if(!b)return;let c=b.getLineCount(),d=b.getLineMaxColumn(c);a.setPosition({lineNumber:c,column:d})}a.s(["MonacoEditorModal",0,function({open:a,onOpenChange:b,onSubmit:c,initialValue:f="",title:g="Editor",submitLabel:h="Submit",language:i="plaintext"}){let j=(0,e.useRef)(null),k=(0,e.useRef)(()=>{}),l=(0,e.useRef)(()=>{}),m=(0,e.useRef)(a),[n,o]=(0,e.useState)(!1),{effectiveTheme:p}=(0,V.useTheme)();function q(){c(j.current?.getValue()??"")}function r(){j.current?.setValue(""),b({open:!1})}return(0,e.useLayoutEffect)(()=>{k.current=q,l.current=r,m.current=a}),(0,e.useEffect)(()=>{if(!a||!j.current)return;j.current.setValue(f??""),Z(j.current),j.current.layout();let b=setTimeout(()=>{m.current&&(j.current?.layout(),j.current?.focus())},50);return()=>clearTimeout(b)},[a,f]),(0,d.jsx)(W.Dialog,{open:a,onOpenChange:a=>{a.open||(j.current?.setValue(""),b(a))},title:g,maxWidth:"4xl",showCloseButton:!0,trapFocus:!1,restoreFocus:!1,dismissOnEsc:!n,children:(0,d.jsxs)("div",{className:"space-y-4",children:[(0,d.jsx)("div",{className:"border border-border rounded overflow-hidden",style:{height:"clamp(200px, 50vh, 600px)"},children:(0,d.jsx)(U,{height:"100%",defaultLanguage:i,defaultValue:"",onMount:(a,b)=>{j.current=a,a.setValue(f??""),Z(a),a.onDidLayoutChange(()=>{m.current&&!a.hasTextFocus()&&a.focus()}),a.onDidFocusEditorText(()=>o(!0)),a.onDidBlurEditorText(()=>o(!1)),a.layout(),a.focus(),a.onKeyDown(a=>{a.keyCode===b.KeyCode.Enter&&(a.metaKey||a.ctrlKey)&&(a.preventDefault(),a.stopPropagation(),k.current())})},options:{minimap:{enabled:!1},lineNumbers:"on",wordWrap:"on",fontSize:13,scrollBeyondLastLine:!1},theme:"dark"===p?"vs-dark":"vs-light"})}),(0,d.jsxs)("p",{className:"text-xs text-muted-foreground",children:[Y?"Cmd+Enter":"Ctrl+Enter"," で",h]}),(0,d.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,d.jsx)(X.Button,{variant:"outline",size:"lg",onClick:r,children:"Cancel"}),(0,d.jsx)(X.Button,{size:"lg",onClick:q,children:h})]})]})})}],53155)}];
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=_0-0rmdn._.js.map
|