devcoach 0.1.0__py3-none-any.whl
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.
- devcoach/SKILL.md +288 -0
- devcoach/__init__.py +3 -0
- devcoach/cli/__init__.py +0 -0
- devcoach/cli/commands.py +793 -0
- devcoach/core/__init__.py +0 -0
- devcoach/core/coach.py +141 -0
- devcoach/core/db.py +768 -0
- devcoach/core/detect.py +132 -0
- devcoach/core/git.py +97 -0
- devcoach/core/models.py +104 -0
- devcoach/core/prompts.py +52 -0
- devcoach/mcp/__init__.py +0 -0
- devcoach/mcp/server.py +545 -0
- devcoach/web/__init__.py +0 -0
- devcoach/web/app.py +319 -0
- devcoach/web/static/favicon.svg +3 -0
- devcoach/web/static/relative-time.js +24 -0
- devcoach/web/static/style.css +163 -0
- devcoach/web/static/vendor/alpinejs.min.js +5 -0
- devcoach/web/static/vendor/flatpickr-dark.min.css +795 -0
- devcoach/web/static/vendor/flatpickr.min.css +13 -0
- devcoach/web/static/vendor/flatpickr.min.js +2 -0
- devcoach/web/static/vendor/highlight.min.js +1232 -0
- devcoach/web/static/vendor/hljs-dark.min.css +1 -0
- devcoach/web/static/vendor/hljs-light.min.css +1 -0
- devcoach/web/static/vendor/htmx.min.js +1 -0
- devcoach/web/static/vendor/icons/bitbucket.svg +1 -0
- devcoach/web/static/vendor/icons/github.svg +1 -0
- devcoach/web/static/vendor/icons/gitlab.svg +1 -0
- devcoach/web/static/vendor/icons/vscode.svg +41 -0
- devcoach/web/static/vendor/marked.min.js +6 -0
- devcoach/web/static/vendor/tailwind.js +83 -0
- devcoach/web/templates/base.html +80 -0
- devcoach/web/templates/lesson_detail.html +215 -0
- devcoach/web/templates/lessons.html +546 -0
- devcoach/web/templates/profile.html +240 -0
- devcoach/web/templates/settings.html +144 -0
- devcoach-0.1.0.dist-info/METADATA +443 -0
- devcoach-0.1.0.dist-info/RECORD +43 -0
- devcoach-0.1.0.dist-info/WHEEL +4 -0
- devcoach-0.1.0.dist-info/entry_points.txt +2 -0
- devcoach-0.1.0.dist-info/licenses/LICENSE +201 -0
- devcoach-0.1.0.dist-info/licenses/NOTICE +20 -0
devcoach/web/app.py
ADDED
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"""FastAPI web dashboard for devcoach."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
from fastapi import FastAPI, File, Form, Request, UploadFile
|
|
9
|
+
from fastapi.responses import HTMLResponse, RedirectResponse, Response
|
|
10
|
+
from fastapi.staticfiles import StaticFiles
|
|
11
|
+
from fastapi.templating import Jinja2Templates
|
|
12
|
+
|
|
13
|
+
from devcoach.core import coach, db
|
|
14
|
+
from devcoach.core.models import KnowledgeEntry
|
|
15
|
+
|
|
16
|
+
app = FastAPI(title="devcoach", docs_url=None, redoc_url=None)
|
|
17
|
+
|
|
18
|
+
_HERE = Path(__file__).parent
|
|
19
|
+
templates = Jinja2Templates(directory=str(_HERE / "templates"))
|
|
20
|
+
app.mount("/static", StaticFiles(directory=str(_HERE / "static")), name="static")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# ── Routes ─────────────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@app.get("/", response_class=HTMLResponse)
|
|
27
|
+
async def profile_page(request: Request) -> HTMLResponse:
|
|
28
|
+
with db.connection() as conn:
|
|
29
|
+
profile = coach.get_profile(conn)
|
|
30
|
+
stats = coach.get_stats(conn)
|
|
31
|
+
rate_limit = coach.check_rate_limit(conn)
|
|
32
|
+
settings = db.get_settings(conn)
|
|
33
|
+
|
|
34
|
+
topic_group = {t: g.name for g in profile.groups for t in g.topics}
|
|
35
|
+
categorised: dict[str, list[KnowledgeEntry]] = {g.name: [] for g in profile.groups}
|
|
36
|
+
for entry in profile.knowledge:
|
|
37
|
+
key = topic_group.get(entry.topic, "Other")
|
|
38
|
+
categorised.setdefault(key, []).append(entry)
|
|
39
|
+
|
|
40
|
+
all_groups = [g.name for g in profile.groups]
|
|
41
|
+
|
|
42
|
+
return templates.TemplateResponse(
|
|
43
|
+
request,
|
|
44
|
+
"profile.html",
|
|
45
|
+
{
|
|
46
|
+
"categorised": categorised,
|
|
47
|
+
"all_groups": all_groups,
|
|
48
|
+
"stats": stats,
|
|
49
|
+
"rate_limit": rate_limit,
|
|
50
|
+
"max_per_day": settings.max_per_day,
|
|
51
|
+
},
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@app.post("/knowledge", response_class=HTMLResponse)
|
|
56
|
+
async def add_knowledge(
|
|
57
|
+
topic: str = Form(...),
|
|
58
|
+
confidence: int = Form(5),
|
|
59
|
+
group: str = Form(""),
|
|
60
|
+
) -> RedirectResponse:
|
|
61
|
+
topic = topic.strip()
|
|
62
|
+
if topic:
|
|
63
|
+
with db.connection() as conn:
|
|
64
|
+
db.upsert_knowledge(conn, topic, confidence)
|
|
65
|
+
if group.strip() and group.strip() != "Other":
|
|
66
|
+
db.assign_topic_to_group(conn, topic, group.strip())
|
|
67
|
+
return RedirectResponse(url="/", status_code=303)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@app.post("/knowledge/{topic}/delete", response_class=HTMLResponse)
|
|
71
|
+
async def delete_knowledge(topic: str) -> RedirectResponse:
|
|
72
|
+
with db.connection() as conn:
|
|
73
|
+
db.delete_knowledge(conn, topic)
|
|
74
|
+
return RedirectResponse(url="/", status_code=303)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@app.post("/knowledge/{topic}/group", response_class=HTMLResponse)
|
|
78
|
+
async def set_topic_group(topic: str, group: str = Form(...)) -> RedirectResponse:
|
|
79
|
+
with db.connection() as conn:
|
|
80
|
+
if group.strip() and group.strip() != "Other":
|
|
81
|
+
db.assign_topic_to_group(conn, topic, group.strip())
|
|
82
|
+
else:
|
|
83
|
+
db.unassign_topic_from_group(conn, topic)
|
|
84
|
+
return RedirectResponse(url="/", status_code=303)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@app.post("/groups", response_class=HTMLResponse)
|
|
88
|
+
async def add_group(group_name: str = Form(...)) -> RedirectResponse:
|
|
89
|
+
group_name = group_name.strip()
|
|
90
|
+
if group_name and group_name != "Other":
|
|
91
|
+
with db.connection() as conn:
|
|
92
|
+
db.add_group(conn, group_name)
|
|
93
|
+
return RedirectResponse(url="/", status_code=303)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@app.post("/groups/{group_name}/delete", response_class=HTMLResponse)
|
|
97
|
+
async def delete_group(group_name: str) -> RedirectResponse:
|
|
98
|
+
with db.connection() as conn:
|
|
99
|
+
db.delete_group(conn, group_name)
|
|
100
|
+
return RedirectResponse(url="/", status_code=303)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@app.post("/knowledge/{topic}", response_class=HTMLResponse)
|
|
104
|
+
async def adjust_knowledge(
|
|
105
|
+
request: Request, topic: str, delta: int = Form(...)
|
|
106
|
+
) -> RedirectResponse:
|
|
107
|
+
with db.connection() as conn:
|
|
108
|
+
coach.apply_knowledge_delta(conn, topic, delta)
|
|
109
|
+
return RedirectResponse(url="/", status_code=303)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
@app.get("/lessons/export")
|
|
113
|
+
async def export_lessons_route() -> Response:
|
|
114
|
+
with db.connection() as conn:
|
|
115
|
+
records = db.export_lessons(conn)
|
|
116
|
+
payload = json.dumps(records, indent=2, ensure_ascii=False)
|
|
117
|
+
return Response(
|
|
118
|
+
content=payload,
|
|
119
|
+
media_type="application/json",
|
|
120
|
+
headers={"Content-Disposition": "attachment; filename=devcoach-lessons.json"},
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@app.post("/lessons/import")
|
|
125
|
+
async def import_lessons_route(file: UploadFile = File(...)) -> RedirectResponse:
|
|
126
|
+
content = await file.read()
|
|
127
|
+
records = json.loads(content)
|
|
128
|
+
with db.connection() as conn:
|
|
129
|
+
inserted, duplicated, invalid = db.import_lessons(conn, records)
|
|
130
|
+
return RedirectResponse(
|
|
131
|
+
url=f"/settings?imported={inserted}&skipped={duplicated}&invalid={invalid}", status_code=303
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
_PER_PAGE = 25
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
@app.get("/lessons", response_class=HTMLResponse)
|
|
139
|
+
async def lessons_page(
|
|
140
|
+
request: Request,
|
|
141
|
+
period: str | None = None,
|
|
142
|
+
category: str | None = None,
|
|
143
|
+
level: str | None = None,
|
|
144
|
+
project: str | None = None,
|
|
145
|
+
repository: str | None = None,
|
|
146
|
+
branch: str | None = None,
|
|
147
|
+
commit: str | None = None,
|
|
148
|
+
starred: str | None = None,
|
|
149
|
+
search: str | None = None,
|
|
150
|
+
feedback: str | None = None,
|
|
151
|
+
date_from: str | None = None,
|
|
152
|
+
date_to: str | None = None,
|
|
153
|
+
sort: str | None = None,
|
|
154
|
+
order: str | None = None,
|
|
155
|
+
page: int = 1,
|
|
156
|
+
) -> HTMLResponse:
|
|
157
|
+
starred_filter = True if starred == "1" else None
|
|
158
|
+
effective_period = None if (date_from or date_to) else (period or None)
|
|
159
|
+
valid_levels = {"junior", "mid", "senior"}
|
|
160
|
+
filter_kwargs = dict(
|
|
161
|
+
period=effective_period,
|
|
162
|
+
category=category or None,
|
|
163
|
+
level=level if level in valid_levels else None,
|
|
164
|
+
project=project or None,
|
|
165
|
+
repository=repository or None,
|
|
166
|
+
branch=branch or None,
|
|
167
|
+
commit=commit or None,
|
|
168
|
+
starred=starred_filter,
|
|
169
|
+
search=search or None,
|
|
170
|
+
feedback=feedback or None,
|
|
171
|
+
date_from=date_from or None,
|
|
172
|
+
date_to=date_to or None,
|
|
173
|
+
)
|
|
174
|
+
selected_sort = sort or "timestamp"
|
|
175
|
+
selected_order = order if order in ("asc", "desc") else "desc"
|
|
176
|
+
page = max(1, page)
|
|
177
|
+
with db.connection() as conn:
|
|
178
|
+
total = db.count_filtered_lessons(conn, **filter_kwargs)
|
|
179
|
+
lessons = db.get_lessons(
|
|
180
|
+
conn,
|
|
181
|
+
**filter_kwargs,
|
|
182
|
+
sort=selected_sort,
|
|
183
|
+
order=selected_order,
|
|
184
|
+
page=page,
|
|
185
|
+
per_page=_PER_PAGE,
|
|
186
|
+
)
|
|
187
|
+
all_categories = db.get_all_categories(conn)
|
|
188
|
+
all_projects = db.get_distinct_column(conn, "project")
|
|
189
|
+
all_repositories = db.get_distinct_column(conn, "repository")
|
|
190
|
+
all_branches = db.get_distinct_column(conn, "branch")
|
|
191
|
+
all_commits = db.get_distinct_column(conn, "commit_hash")
|
|
192
|
+
|
|
193
|
+
import math
|
|
194
|
+
|
|
195
|
+
total_pages = max(1, math.ceil(total / _PER_PAGE))
|
|
196
|
+
page = min(page, total_pages)
|
|
197
|
+
|
|
198
|
+
return templates.TemplateResponse(
|
|
199
|
+
request,
|
|
200
|
+
"lessons.html",
|
|
201
|
+
{
|
|
202
|
+
"lessons": lessons,
|
|
203
|
+
"all_categories": all_categories,
|
|
204
|
+
"all_projects": all_projects,
|
|
205
|
+
"all_repositories": all_repositories,
|
|
206
|
+
"all_branches": all_branches,
|
|
207
|
+
"all_commits": all_commits,
|
|
208
|
+
"selected_period": period or "all",
|
|
209
|
+
"selected_category": category or "",
|
|
210
|
+
"selected_level": level if level in valid_levels else "",
|
|
211
|
+
"selected_project": project or "",
|
|
212
|
+
"selected_repository": repository or "",
|
|
213
|
+
"selected_branch": branch or "",
|
|
214
|
+
"selected_commit": commit or "",
|
|
215
|
+
"selected_starred": starred == "1",
|
|
216
|
+
"selected_search": search or "",
|
|
217
|
+
"selected_feedback": feedback or "",
|
|
218
|
+
"selected_date_from": date_from or "",
|
|
219
|
+
"selected_date_to": date_to or "",
|
|
220
|
+
"selected_sort": selected_sort,
|
|
221
|
+
"selected_order": selected_order,
|
|
222
|
+
"page": page,
|
|
223
|
+
"per_page": _PER_PAGE,
|
|
224
|
+
"total": total,
|
|
225
|
+
"total_pages": total_pages,
|
|
226
|
+
},
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
@app.post("/lessons/{lesson_id}/star")
|
|
231
|
+
async def star_lesson(lesson_id: str, next: str = Form(default="/lessons")) -> RedirectResponse:
|
|
232
|
+
with db.connection() as conn:
|
|
233
|
+
db.toggle_star(conn, lesson_id)
|
|
234
|
+
return RedirectResponse(url=next, status_code=303)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
@app.post("/lessons/{lesson_id}/feedback")
|
|
238
|
+
async def submit_feedback(
|
|
239
|
+
lesson_id: str,
|
|
240
|
+
feedback: str = Form(...),
|
|
241
|
+
next: str = Form(default="/lessons"),
|
|
242
|
+
) -> RedirectResponse:
|
|
243
|
+
feedback_value = None if feedback in ("", "clear") else feedback
|
|
244
|
+
with db.connection() as conn:
|
|
245
|
+
coach.record_feedback(conn, lesson_id, feedback_value)
|
|
246
|
+
return RedirectResponse(url=next, status_code=303)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
@app.get("/lessons/{lesson_id}", response_class=HTMLResponse)
|
|
250
|
+
async def lesson_detail_page(request: Request, lesson_id: str) -> HTMLResponse:
|
|
251
|
+
with db.connection() as conn:
|
|
252
|
+
lesson = db.get_lesson_by_id(conn, lesson_id)
|
|
253
|
+
if lesson is None:
|
|
254
|
+
return HTMLResponse("<h1>Lesson not found</h1>", status_code=404)
|
|
255
|
+
return templates.TemplateResponse(
|
|
256
|
+
request,
|
|
257
|
+
"lesson_detail.html",
|
|
258
|
+
{"lesson": lesson},
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
@app.get("/settings", response_class=HTMLResponse)
|
|
263
|
+
async def settings_page(
|
|
264
|
+
request: Request,
|
|
265
|
+
imported: int | None = None,
|
|
266
|
+
skipped: int | None = None,
|
|
267
|
+
invalid: int | None = None,
|
|
268
|
+
groups: int | None = None,
|
|
269
|
+
) -> HTMLResponse:
|
|
270
|
+
with db.connection() as conn:
|
|
271
|
+
settings = db.get_settings(conn)
|
|
272
|
+
return templates.TemplateResponse(
|
|
273
|
+
request,
|
|
274
|
+
"settings.html",
|
|
275
|
+
{
|
|
276
|
+
"settings": settings,
|
|
277
|
+
"gap_hours": settings.min_gap_minutes // 60,
|
|
278
|
+
"gap_minutes": settings.min_gap_minutes % 60,
|
|
279
|
+
"imported": imported,
|
|
280
|
+
"skipped": skipped,
|
|
281
|
+
"invalid": invalid,
|
|
282
|
+
"groups": groups,
|
|
283
|
+
},
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
@app.post("/settings", response_class=HTMLResponse)
|
|
288
|
+
async def update_settings(
|
|
289
|
+
max_per_day: int = Form(...),
|
|
290
|
+
min_gap_minutes: int = Form(...),
|
|
291
|
+
) -> RedirectResponse:
|
|
292
|
+
with db.connection() as conn:
|
|
293
|
+
db.set_setting(conn, "max_per_day", str(max_per_day))
|
|
294
|
+
db.set_setting(conn, "min_gap_minutes", str(min_gap_minutes))
|
|
295
|
+
return RedirectResponse(url="/settings", status_code=303)
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
@app.get("/settings/export")
|
|
299
|
+
async def export_settings_route() -> Response:
|
|
300
|
+
"""Export full backup as zip: settings.json + lessons.json + knowledge.json."""
|
|
301
|
+
with db.connection() as conn:
|
|
302
|
+
data = db.create_backup_zip(conn)
|
|
303
|
+
return Response(
|
|
304
|
+
content=data,
|
|
305
|
+
media_type="application/zip",
|
|
306
|
+
headers={"Content-Disposition": "attachment; filename=devcoach-backup.zip"},
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
@app.post("/settings/import")
|
|
311
|
+
async def import_settings_route(file: UploadFile = File(...)) -> RedirectResponse:
|
|
312
|
+
"""Restore from a backup zip. Restores settings, knowledge map, and imports lessons."""
|
|
313
|
+
content = await file.read()
|
|
314
|
+
with db.connection() as conn:
|
|
315
|
+
result = db.restore_backup_zip(conn, content)
|
|
316
|
+
return RedirectResponse(
|
|
317
|
+
url=f"/settings?imported={result['lessons']}&skipped={result['skipped']}&invalid={result['invalid']}&groups={result['groups']}",
|
|
318
|
+
status_code=303,
|
|
319
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* Shared relative-time formatter used by lessons.html and lesson_detail.html */
|
|
2
|
+
(function () {
|
|
3
|
+
var rtf = new Intl.RelativeTimeFormat('en', { numeric: 'auto' });
|
|
4
|
+
|
|
5
|
+
function relativeTime(iso) {
|
|
6
|
+
var date = new Date(iso);
|
|
7
|
+
var diffMs = Date.now() - date;
|
|
8
|
+
if (diffMs < 0) return 'just now';
|
|
9
|
+
var diffMins = Math.floor(diffMs / 60000);
|
|
10
|
+
if (diffMins < 1) return 'just now';
|
|
11
|
+
if (diffMins < 60) return rtf.format(-diffMins, 'minute');
|
|
12
|
+
var diffDays = Math.floor(diffMs / 86400000);
|
|
13
|
+
if (diffDays === 0) return 'today';
|
|
14
|
+
if (diffDays === 1) return 'yesterday';
|
|
15
|
+
if (diffDays < 7) return rtf.format(-diffDays, 'day');
|
|
16
|
+
if (diffDays < 30) return rtf.format(-Math.floor(diffDays / 7), 'week');
|
|
17
|
+
if (diffDays < 365) return rtf.format(-Math.floor(diffDays / 30), 'month');
|
|
18
|
+
return rtf.format(-Math.floor(diffDays / 365), 'year');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
document.querySelectorAll('[data-ts]').forEach(function (el) {
|
|
22
|
+
el.textContent = relativeTime(el.dataset.ts);
|
|
23
|
+
});
|
|
24
|
+
})();
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* devcoach — style overrides with light/dark theme support */
|
|
2
|
+
|
|
3
|
+
/* ── Theme variables ────────────────────────────────────────────────────── */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--scrollbar-track: #f1f5f9;
|
|
7
|
+
--scrollbar-thumb: #cbd5e1;
|
|
8
|
+
--scrollbar-thumb-hover: #94a3b8;
|
|
9
|
+
|
|
10
|
+
--md-text: #374151;
|
|
11
|
+
--md-heading: #111827;
|
|
12
|
+
--md-heading-h3: #4b5563;
|
|
13
|
+
--md-h2-border: #e5e7eb;
|
|
14
|
+
--md-code-bg: #f3f4f6;
|
|
15
|
+
--md-code-color: #db2777;
|
|
16
|
+
--md-code-border: #e5e7eb;
|
|
17
|
+
--md-pre-bg: #f8fafc;
|
|
18
|
+
--md-pre-border: #e2e8f0;
|
|
19
|
+
--md-blockquote-color: #6b7280;
|
|
20
|
+
--md-blockquote-border: #6366f1;
|
|
21
|
+
--md-hr: #e5e7eb;
|
|
22
|
+
--md-link: #4f46e5;
|
|
23
|
+
--md-link-hover: #6366f1;
|
|
24
|
+
--md-table-th-bg: #f9fafb;
|
|
25
|
+
--md-table-th-color: #374151;
|
|
26
|
+
--md-table-border: #e5e7eb;
|
|
27
|
+
--md-table-td-color: #374151;
|
|
28
|
+
--md-table-even-bg: #f9fafb;
|
|
29
|
+
--md-strong: #111827;
|
|
30
|
+
--md-em: #7c3aed;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.dark {
|
|
34
|
+
--scrollbar-track: #111827;
|
|
35
|
+
--scrollbar-thumb: #374151;
|
|
36
|
+
--scrollbar-thumb-hover: #4b5563;
|
|
37
|
+
|
|
38
|
+
--md-text: #e5e7eb;
|
|
39
|
+
--md-heading: #f9fafb;
|
|
40
|
+
--md-heading-h3: #d1d5db;
|
|
41
|
+
--md-h2-border: #374151;
|
|
42
|
+
--md-code-bg: #1f2937;
|
|
43
|
+
--md-code-color: #f472b6;
|
|
44
|
+
--md-code-border: #374151;
|
|
45
|
+
--md-pre-bg: #282c34;
|
|
46
|
+
--md-pre-border: #374151;
|
|
47
|
+
--md-blockquote-color: #9ca3af;
|
|
48
|
+
--md-blockquote-border: #6366f1;
|
|
49
|
+
--md-hr: #374151;
|
|
50
|
+
--md-link: #818cf8;
|
|
51
|
+
--md-link-hover: #a5b4fc;
|
|
52
|
+
--md-table-th-bg: #1f2937;
|
|
53
|
+
--md-table-th-color: #d1d5db;
|
|
54
|
+
--md-table-border: #374151;
|
|
55
|
+
--md-table-td-color: #e5e7eb;
|
|
56
|
+
--md-table-even-bg: #111827;
|
|
57
|
+
--md-strong: #f3f4f6;
|
|
58
|
+
--md-em: #c4b5fd;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* ── Scrollbar ──────────────────────────────────────────────────────────── */
|
|
62
|
+
|
|
63
|
+
::-webkit-scrollbar { width: 6px; height: 6px; }
|
|
64
|
+
::-webkit-scrollbar-track { background: var(--scrollbar-track); }
|
|
65
|
+
::-webkit-scrollbar-thumb { background: var(--scrollbar-thumb); border-radius: 3px; }
|
|
66
|
+
::-webkit-scrollbar-thumb:hover { background: var(--scrollbar-thumb-hover); }
|
|
67
|
+
|
|
68
|
+
/* ── Markdown body ──────────────────────────────────────────────────────── */
|
|
69
|
+
|
|
70
|
+
.markdown-body {
|
|
71
|
+
color: var(--md-text);
|
|
72
|
+
line-height: 1.75;
|
|
73
|
+
font-family: ui-monospace, monospace;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.markdown-body p { margin: 0.75rem 0; }
|
|
77
|
+
.markdown-body p:first-child { margin-top: 0; }
|
|
78
|
+
|
|
79
|
+
.markdown-body h1, .markdown-body h2, .markdown-body h3,
|
|
80
|
+
.markdown-body h4, .markdown-body h5, .markdown-body h6 {
|
|
81
|
+
color: var(--md-heading);
|
|
82
|
+
font-weight: 700;
|
|
83
|
+
margin: 1.5rem 0 0.5rem;
|
|
84
|
+
line-height: 1.3;
|
|
85
|
+
}
|
|
86
|
+
.markdown-body h1 { font-size: 1.4rem; }
|
|
87
|
+
.markdown-body h2 { font-size: 1.2rem; border-bottom: 1px solid var(--md-h2-border); padding-bottom: 0.3rem; }
|
|
88
|
+
.markdown-body h3 { font-size: 1rem; color: var(--md-heading-h3); }
|
|
89
|
+
|
|
90
|
+
.markdown-body ul, .markdown-body ol {
|
|
91
|
+
margin: 0.75rem 0;
|
|
92
|
+
padding-left: 1.5rem;
|
|
93
|
+
}
|
|
94
|
+
.markdown-body ul { list-style: disc; }
|
|
95
|
+
.markdown-body ol { list-style: decimal; }
|
|
96
|
+
.markdown-body li { margin: 0.25rem 0; }
|
|
97
|
+
|
|
98
|
+
.markdown-body strong { color: var(--md-strong); font-weight: 700; }
|
|
99
|
+
.markdown-body em { color: var(--md-em); font-style: italic; }
|
|
100
|
+
|
|
101
|
+
.markdown-body code {
|
|
102
|
+
background: var(--md-code-bg);
|
|
103
|
+
color: var(--md-code-color);
|
|
104
|
+
font-size: 0.85em;
|
|
105
|
+
padding: 0.15em 0.4em;
|
|
106
|
+
border-radius: 4px;
|
|
107
|
+
border: 1px solid var(--md-code-border);
|
|
108
|
+
font-family: ui-monospace, monospace;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.markdown-body pre {
|
|
112
|
+
background: var(--md-pre-bg);
|
|
113
|
+
border: 1px solid var(--md-pre-border);
|
|
114
|
+
border-radius: 8px;
|
|
115
|
+
padding: 1rem 1.25rem;
|
|
116
|
+
overflow-x: auto;
|
|
117
|
+
margin: 1rem 0;
|
|
118
|
+
}
|
|
119
|
+
.markdown-body pre code {
|
|
120
|
+
background: transparent;
|
|
121
|
+
border: none;
|
|
122
|
+
padding: 0;
|
|
123
|
+
color: inherit;
|
|
124
|
+
font-size: 0.875rem;
|
|
125
|
+
line-height: 1.6;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.markdown-body blockquote {
|
|
129
|
+
border-left: 3px solid var(--md-blockquote-border);
|
|
130
|
+
margin: 0.75rem 0;
|
|
131
|
+
padding: 0.25rem 0 0.25rem 1rem;
|
|
132
|
+
color: var(--md-blockquote-color);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.markdown-body hr {
|
|
136
|
+
border: none;
|
|
137
|
+
border-top: 1px solid var(--md-hr);
|
|
138
|
+
margin: 1.5rem 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.markdown-body a { color: var(--md-link); text-decoration: underline; }
|
|
142
|
+
.markdown-body a:hover { color: var(--md-link-hover); }
|
|
143
|
+
|
|
144
|
+
.markdown-body table {
|
|
145
|
+
width: 100%;
|
|
146
|
+
border-collapse: collapse;
|
|
147
|
+
margin: 1rem 0;
|
|
148
|
+
font-size: 0.875rem;
|
|
149
|
+
}
|
|
150
|
+
.markdown-body th {
|
|
151
|
+
background: var(--md-table-th-bg);
|
|
152
|
+
color: var(--md-table-th-color);
|
|
153
|
+
text-align: left;
|
|
154
|
+
padding: 0.5rem 0.75rem;
|
|
155
|
+
border: 1px solid var(--md-table-border);
|
|
156
|
+
font-weight: 600;
|
|
157
|
+
}
|
|
158
|
+
.markdown-body td {
|
|
159
|
+
padding: 0.5rem 0.75rem;
|
|
160
|
+
border: 1px solid var(--md-table-border);
|
|
161
|
+
color: var(--md-table-td-color);
|
|
162
|
+
}
|
|
163
|
+
.markdown-body tr:nth-child(even) td { background: var(--md-table-even-bg); }
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
(()=>{var rt=!1,nt=!1,U=[],it=-1;function qt(e){Cn(e)}function Cn(e){U.includes(e)||U.push(e),Tn()}function Ee(e){let t=U.indexOf(e);t!==-1&&t>it&&U.splice(t,1)}function Tn(){!nt&&!rt&&(rt=!0,queueMicrotask(Rn))}function Rn(){rt=!1,nt=!0;for(let e=0;e<U.length;e++)U[e](),it=e;U.length=0,it=-1,nt=!1}var R,D,L,st,ot=!0;function Ut(e){ot=!1,e(),ot=!0}function Wt(e){R=e.reactive,L=e.release,D=t=>e.effect(t,{scheduler:r=>{ot?qt(r):r()}}),st=e.raw}function at(e){D=e}function Gt(e){let t=()=>{};return[n=>{let i=D(n);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),L(i))},i},()=>{t()}]}function ve(e,t){let r=!0,n,i=D(()=>{let o=e();JSON.stringify(o),r?n=o:queueMicrotask(()=>{t(o,n),n=o}),r=!1});return()=>L(i)}var Jt=[],Yt=[],Xt=[];function Zt(e){Xt.push(e)}function ee(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,Yt.push(t))}function Ae(e){Jt.push(e)}function Oe(e,t,r){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(r)}function ct(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([r,n])=>{(t===void 0||t.includes(r))&&(n.forEach(i=>i()),delete e._x_attributeCleanups[r])})}function Qt(e){if(e._x_cleanups)for(;e._x_cleanups.length;)e._x_cleanups.pop()()}var lt=new MutationObserver(pt),ut=!1;function le(){lt.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ut=!0}function ft(){Mn(),lt.disconnect(),ut=!1}var ce=[];function Mn(){let e=lt.takeRecords();ce.push(()=>e.length>0&&pt(e));let t=ce.length;queueMicrotask(()=>{if(ce.length===t)for(;ce.length>0;)ce.shift()()})}function _(e){if(!ut)return e();ft();let t=e();return le(),t}var dt=!1,Se=[];function er(){dt=!0}function tr(){dt=!1,pt(Se),Se=[]}function pt(e){if(dt){Se=Se.concat(e);return}let t=new Set,r=new Set,n=new Map,i=new Map;for(let o=0;o<e.length;o++)if(!e[o].target._x_ignoreMutationObserver&&(e[o].type==="childList"&&(e[o].addedNodes.forEach(s=>s.nodeType===1&&t.add(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&r.add(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,c=e[o].oldValue,l=()=>{n.has(s)||n.set(s,[]),n.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&c===null?l():s.hasAttribute(a)?(u(),l()):u()}i.forEach((o,s)=>{ct(s,o)}),n.forEach((o,s)=>{Jt.forEach(a=>a(s,o))});for(let o of r)t.has(o)||Yt.forEach(s=>s(o));t.forEach(o=>{o._x_ignoreSelf=!0,o._x_ignore=!0});for(let o of t)r.has(o)||o.isConnected&&(delete o._x_ignoreSelf,delete o._x_ignore,Xt.forEach(s=>s(o)),o._x_ignore=!0,o._x_ignoreSelf=!0);t.forEach(o=>{delete o._x_ignoreSelf,delete o._x_ignore}),t=null,r=null,n=null,i=null}function Ce(e){return F(j(e))}function P(e,t,r){return e._x_dataStack=[t,...j(r||e)],()=>{e._x_dataStack=e._x_dataStack.filter(n=>n!==t)}}function j(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?j(e.host):e.parentNode?j(e.parentNode):[]}function F(e){return new Proxy({objects:e},Nn)}var Nn={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(r=>Object.prototype.hasOwnProperty.call(r,t)||Reflect.has(r,t))},get({objects:e},t,r){return t=="toJSON"?Dn:Reflect.get(e.find(n=>Reflect.has(n,t))||{},t,r)},set({objects:e},t,r,n){let i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o?.set&&o?.get?o.set.call(n,r)||!0:Reflect.set(i,t,r)}};function Dn(){return Reflect.ownKeys(this).reduce((t,r)=>(t[r]=Reflect.get(this,r),t),{})}function Te(e){let t=n=>typeof n=="object"&&!Array.isArray(n)&&n!==null,r=(n,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(n)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let c=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?n[o]=s.initialize(e,c,o):t(s)&&s!==n&&!(s instanceof Element)&&r(s,c)})};return r(e)}function Re(e,t=()=>{}){let r={initialValue:void 0,_x_interceptor:!0,initialize(n,i,o){return e(this.initialValue,()=>Pn(n,i),s=>mt(n,i,s),i,o)}};return t(r),n=>{if(typeof n=="object"&&n!==null&&n._x_interceptor){let i=r.initialize.bind(r);r.initialize=(o,s,a)=>{let c=n.initialize(o,s,a);return r.initialValue=c,i(o,s,a)}}else r.initialValue=n;return r}}function Pn(e,t){return t.split(".").reduce((r,n)=>r[n],e)}function mt(e,t,r){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=r;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),mt(e[t[0]],t.slice(1),r)}}var rr={};function y(e,t){rr[e]=t}function ue(e,t){return Object.entries(rr).forEach(([r,n])=>{let i=null;function o(){if(i)return i;{let[s,a]=_t(t);return i={interceptor:Re,...s},ee(t,a),i}}Object.defineProperty(e,`$${r}`,{get(){return n(t,o())},enumerable:!1})}),e}function nr(e,t,r,...n){try{return r(...n)}catch(i){te(i,e,t)}}function te(e,t,r=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:r}),console.warn(`Alpine Expression Error: ${e.message}
|
|
2
|
+
|
|
3
|
+
${r?'Expression: "'+r+`"
|
|
4
|
+
|
|
5
|
+
`:""}`,t),setTimeout(()=>{throw e},0)}var Me=!0;function De(e){let t=Me;Me=!1;let r=e();return Me=t,r}function M(e,t,r={}){let n;return x(e,t)(i=>n=i,r),n}function x(...e){return ir(...e)}var ir=gt;function or(e){ir=e}function gt(e,t){let r={};ue(r,e);let n=[r,...j(e)],i=typeof t=="function"?In(n,t):Ln(n,t,e);return nr.bind(null,e,t,i)}function In(e,t){return(r=()=>{},{scope:n={},params:i=[]}={})=>{let o=t.apply(F([n,...e]),i);Ne(r,o)}}var ht={};function kn(e,t){if(ht[e])return ht[e];let r=Object.getPrototypeOf(async function(){}).constructor,n=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new r(["__self","scope"],`with (scope) { __self.result = ${n} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return te(s,t,e),Promise.resolve()}})();return ht[e]=o,o}function Ln(e,t,r){let n=kn(t,r);return(i=()=>{},{scope:o={},params:s=[]}={})=>{n.result=void 0,n.finished=!1;let a=F([o,...e]);if(typeof n=="function"){let c=n(n,a).catch(l=>te(l,r,t));n.finished?(Ne(i,n.result,a,s,r),n.result=void 0):c.then(l=>{Ne(i,l,a,s,r)}).catch(l=>te(l,r,t)).finally(()=>n.result=void 0)}}}function Ne(e,t,r,n,i){if(Me&&typeof t=="function"){let o=t.apply(r,n);o instanceof Promise?o.then(s=>Ne(e,s,r,n)).catch(s=>te(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var bt="x-";function C(e=""){return bt+e}function sr(e){bt=e}var Pe={};function d(e,t){return Pe[e]=t,{before(r){if(!Pe[r]){console.warn(String.raw`Cannot find directive \`${r}\`. \`${e}\` will use the default order of execution`);return}let n=W.indexOf(r);W.splice(n>=0?n:W.indexOf("DEFAULT"),0,e)}}}function ar(e){return Object.keys(Pe).includes(e)}function de(e,t,r){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,c])=>({name:a,value:c})),s=wt(o);o=o.map(a=>s.find(c=>c.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let n={};return t.map(ur((o,s)=>n[o]=s)).filter(dr).map(jn(n,r)).sort(Fn).map(o=>$n(e,o))}function wt(e){return Array.from(e).map(ur()).filter(t=>!dr(t))}var xt=!1,fe=new Map,cr=Symbol();function lr(e){xt=!0;let t=Symbol();cr=t,fe.set(t,[]);let r=()=>{for(;fe.get(t).length;)fe.get(t).shift()();fe.delete(t)},n=()=>{xt=!1,r()};e(r),n()}function _t(e){let t=[],r=a=>t.push(a),[n,i]=Gt(e);return t.push(i),[{Alpine:B,effect:n,cleanup:r,evaluateLater:x.bind(x,e),evaluate:M.bind(M,e)},()=>t.forEach(a=>a())]}function $n(e,t){let r=()=>{},n=Pe[t.type]||r,[i,o]=_t(e);Oe(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(n.inline&&n.inline(e,t,i),n=n.bind(n,e,t,i),xt?fe.get(cr).push(n):n())};return s.runCleanups=o,s}var Ie=(e,t)=>({name:r,value:n})=>(r.startsWith(e)&&(r=r.replace(e,t)),{name:r,value:n}),ke=e=>e;function ur(e=()=>{}){return({name:t,value:r})=>{let{name:n,value:i}=fr.reduce((o,s)=>s(o),{name:t,value:r});return n!==t&&e(n,t),{name:n,value:i}}}var fr=[];function re(e){fr.push(e)}function dr({name:e}){return pr().test(e)}var pr=()=>new RegExp(`^${bt}([^:^.]+)\\b`);function jn(e,t){return({name:r,value:n})=>{let i=r.match(pr()),o=r.match(/:([a-zA-Z0-9\-_:]+)/),s=r.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[r]||r;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(c=>c.replace(".","")),expression:n,original:a}}}var yt="DEFAULT",W=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",yt,"teleport"];function Fn(e,t){let r=W.indexOf(e.type)===-1?yt:e.type,n=W.indexOf(t.type)===-1?yt:t.type;return W.indexOf(r)-W.indexOf(n)}function G(e,t,r={}){e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:!0,composed:!0,cancelable:!0}))}function T(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>T(i,t));return}let r=!1;if(t(e,()=>r=!0),r)return;let n=e.firstElementChild;for(;n;)T(n,t,!1),n=n.nextElementSibling}function E(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var mr=!1;function _r(){mr&&E("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),mr=!0,document.body||E("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?"),G(document,"alpine:init"),G(document,"alpine:initializing"),le(),Zt(t=>S(t,T)),ee(t=>vt(t)),Ae((t,r)=>{de(t,r).forEach(n=>n())});let e=t=>!J(t.parentElement,!0);Array.from(document.querySelectorAll(xr().join(","))).filter(e).forEach(t=>{S(t)}),G(document,"alpine:initialized"),setTimeout(()=>{Bn()})}var Et=[],hr=[];function gr(){return Et.map(e=>e())}function xr(){return Et.concat(hr).map(e=>e())}function Le(e){Et.push(e)}function $e(e){hr.push(e)}function J(e,t=!1){return z(e,r=>{if((t?xr():gr()).some(i=>r.matches(i)))return!0})}function z(e,t){if(e){if(t(e))return e;if(e._x_teleportBack&&(e=e._x_teleportBack),!!e.parentElement)return z(e.parentElement,t)}}function yr(e){return gr().some(t=>e.matches(t))}var br=[];function wr(e){br.push(e)}function S(e,t=T,r=()=>{}){lr(()=>{t(e,(n,i)=>{r(n,i),br.forEach(o=>o(n,i)),de(n,n.attributes).forEach(o=>o()),n._x_ignore&&i()})})}function vt(e,t=T){t(e,r=>{ct(r),Qt(r)})}function Bn(){[["ui","dialog",["[x-dialog], [x-popover]"]],["anchor","anchor",["[x-anchor]"]],["sort","sort",["[x-sort]"]]].forEach(([t,r,n])=>{ar(r)||n.some(i=>{if(document.querySelector(i))return E(`found "${i}", but missing ${t} plugin`),!0})})}var St=[],At=!1;function ne(e=()=>{}){return queueMicrotask(()=>{At||setTimeout(()=>{je()})}),new Promise(t=>{St.push(()=>{e(),t()})})}function je(){for(At=!1;St.length;)St.shift()()}function Er(){At=!0}function pe(e,t){return Array.isArray(t)?vr(e,t.join(" ")):typeof t=="object"&&t!==null?zn(e,t):typeof t=="function"?pe(e,t()):vr(e,t)}function vr(e,t){let r=o=>o.split(" ").filter(Boolean),n=o=>o.split(" ").filter(s=>!e.classList.contains(s)).filter(Boolean),i=o=>(e.classList.add(...o),()=>{e.classList.remove(...o)});return t=t===!0?t="":t||"",i(n(t))}function zn(e,t){let r=a=>a.split(" ").filter(Boolean),n=Object.entries(t).flatMap(([a,c])=>c?r(a):!1).filter(Boolean),i=Object.entries(t).flatMap(([a,c])=>c?!1:r(a)).filter(Boolean),o=[],s=[];return i.forEach(a=>{e.classList.contains(a)&&(e.classList.remove(a),s.push(a))}),n.forEach(a=>{e.classList.contains(a)||(e.classList.add(a),o.push(a))}),()=>{s.forEach(a=>e.classList.add(a)),o.forEach(a=>e.classList.remove(a))}}function Y(e,t){return typeof t=="object"&&t!==null?Kn(e,t):Hn(e,t)}function Kn(e,t){let r={};return Object.entries(t).forEach(([n,i])=>{r[n]=e.style[n],n.startsWith("--")||(n=Vn(n)),e.style.setProperty(n,i)}),setTimeout(()=>{e.style.length===0&&e.removeAttribute("style")}),()=>{Y(e,r)}}function Hn(e,t){let r=e.getAttribute("style",t);return e.setAttribute("style",t),()=>{e.setAttribute("style",r||"")}}function Vn(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function me(e,t=()=>{}){let r=!1;return function(){r?t.apply(this,arguments):(r=!0,e.apply(this,arguments))}}d("transition",(e,{value:t,modifiers:r,expression:n},{evaluate:i})=>{typeof n=="function"&&(n=i(n)),n!==!1&&(!n||typeof n=="boolean"?Un(e,r,t):qn(e,n,t))});function qn(e,t,r){Sr(e,pe,""),{enter:i=>{e._x_transition.enter.during=i},"enter-start":i=>{e._x_transition.enter.start=i},"enter-end":i=>{e._x_transition.enter.end=i},leave:i=>{e._x_transition.leave.during=i},"leave-start":i=>{e._x_transition.leave.start=i},"leave-end":i=>{e._x_transition.leave.end=i}}[r](t)}function Un(e,t,r){Sr(e,Y);let n=!t.includes("in")&&!t.includes("out")&&!r,i=n||t.includes("in")||["enter"].includes(r),o=n||t.includes("out")||["leave"].includes(r);t.includes("in")&&!n&&(t=t.filter((g,b)=>b<t.indexOf("out"))),t.includes("out")&&!n&&(t=t.filter((g,b)=>b>t.indexOf("out")));let s=!t.includes("opacity")&&!t.includes("scale"),a=s||t.includes("opacity"),c=s||t.includes("scale"),l=a?0:1,u=c?_e(t,"scale",95)/100:1,p=_e(t,"delay",0)/1e3,m=_e(t,"origin","center"),w="opacity, transform",$=_e(t,"duration",150)/1e3,we=_e(t,"duration",75)/1e3,f="cubic-bezier(0.4, 0.0, 0.2, 1)";i&&(e._x_transition.enter.during={transformOrigin:m,transitionDelay:`${p}s`,transitionProperty:w,transitionDuration:`${$}s`,transitionTimingFunction:f},e._x_transition.enter.start={opacity:l,transform:`scale(${u})`},e._x_transition.enter.end={opacity:1,transform:"scale(1)"}),o&&(e._x_transition.leave.during={transformOrigin:m,transitionDelay:`${p}s`,transitionProperty:w,transitionDuration:`${we}s`,transitionTimingFunction:f},e._x_transition.leave.start={opacity:1,transform:"scale(1)"},e._x_transition.leave.end={opacity:l,transform:`scale(${u})`})}function Sr(e,t,r={}){e._x_transition||(e._x_transition={enter:{during:r,start:r,end:r},leave:{during:r,start:r,end:r},in(n=()=>{},i=()=>{}){Fe(e,t,{during:this.enter.during,start:this.enter.start,end:this.enter.end},n,i)},out(n=()=>{},i=()=>{}){Fe(e,t,{during:this.leave.during,start:this.leave.start,end:this.leave.end},n,i)}})}window.Element.prototype._x_toggleAndCascadeWithTransitions=function(e,t,r,n){let i=document.visibilityState==="visible"?requestAnimationFrame:setTimeout,o=()=>i(r);if(t){e._x_transition&&(e._x_transition.enter||e._x_transition.leave)?e._x_transition.enter&&(Object.entries(e._x_transition.enter.during).length||Object.entries(e._x_transition.enter.start).length||Object.entries(e._x_transition.enter.end).length)?e._x_transition.in(r):o():e._x_transition?e._x_transition.in(r):o();return}e._x_hidePromise=e._x_transition?new Promise((s,a)=>{e._x_transition.out(()=>{},()=>s(n)),e._x_transitioning&&e._x_transitioning.beforeCancel(()=>a({isFromCancelledTransition:!0}))}):Promise.resolve(n),queueMicrotask(()=>{let s=Ar(e);s?(s._x_hideChildren||(s._x_hideChildren=[]),s._x_hideChildren.push(e)):i(()=>{let a=c=>{let l=Promise.all([c._x_hidePromise,...(c._x_hideChildren||[]).map(a)]).then(([u])=>u?.());return delete c._x_hidePromise,delete c._x_hideChildren,l};a(e).catch(c=>{if(!c.isFromCancelledTransition)throw c})})})};function Ar(e){let t=e.parentNode;if(t)return t._x_hidePromise?t:Ar(t)}function Fe(e,t,{during:r,start:n,end:i}={},o=()=>{},s=()=>{}){if(e._x_transitioning&&e._x_transitioning.cancel(),Object.keys(r).length===0&&Object.keys(n).length===0&&Object.keys(i).length===0){o(),s();return}let a,c,l;Wn(e,{start(){a=t(e,n)},during(){c=t(e,r)},before:o,end(){a(),l=t(e,i)},after:s,cleanup(){c(),l()}})}function Wn(e,t){let r,n,i,o=me(()=>{_(()=>{r=!0,n||t.before(),i||(t.end(),je()),t.after(),e.isConnected&&t.cleanup(),delete e._x_transitioning})});e._x_transitioning={beforeCancels:[],beforeCancel(s){this.beforeCancels.push(s)},cancel:me(function(){for(;this.beforeCancels.length;)this.beforeCancels.shift()();o()}),finish:o},_(()=>{t.start(),t.during()}),Er(),requestAnimationFrame(()=>{if(r)return;let s=Number(getComputedStyle(e).transitionDuration.replace(/,.*/,"").replace("s",""))*1e3,a=Number(getComputedStyle(e).transitionDelay.replace(/,.*/,"").replace("s",""))*1e3;s===0&&(s=Number(getComputedStyle(e).animationDuration.replace("s",""))*1e3),_(()=>{t.before()}),n=!0,requestAnimationFrame(()=>{r||(_(()=>{t.end()}),je(),setTimeout(e._x_transitioning.finish,s+a),i=!0)})})}function _e(e,t,r){if(e.indexOf(t)===-1)return r;let n=e[e.indexOf(t)+1];if(!n||t==="scale"&&isNaN(n))return r;if(t==="duration"||t==="delay"){let i=n.match(/([0-9]+)ms/);if(i)return i[1]}return t==="origin"&&["top","right","left","center","bottom"].includes(e[e.indexOf(t)+2])?[n,e[e.indexOf(t)+2]].join(" "):n}var I=!1;function A(e,t=()=>{}){return(...r)=>I?t(...r):e(...r)}function Or(e){return(...t)=>I&&e(...t)}var Cr=[];function K(e){Cr.push(e)}function Tr(e,t){Cr.forEach(r=>r(e,t)),I=!0,Mr(()=>{S(t,(r,n)=>{n(r,()=>{})})}),I=!1}var Be=!1;function Rr(e,t){t._x_dataStack||(t._x_dataStack=e._x_dataStack),I=!0,Be=!0,Mr(()=>{Gn(t)}),I=!1,Be=!1}function Gn(e){let t=!1;S(e,(n,i)=>{T(n,(o,s)=>{if(t&&yr(o))return s();t=!0,i(o,s)})})}function Mr(e){let t=D;at((r,n)=>{let i=t(r);return L(i),()=>{}}),e(),at(t)}function he(e,t,r,n=[]){switch(e._x_bindings||(e._x_bindings=R({})),e._x_bindings[t]=r,t=n.includes("camel")?ri(t):t,t){case"value":Jn(e,r);break;case"style":Xn(e,r);break;case"class":Yn(e,r);break;case"selected":case"checked":Zn(e,t,r);break;default:Dr(e,t,r);break}}function Jn(e,t){if(e.type==="radio")e.attributes.value===void 0&&(e.value=t),window.fromModel&&(typeof t=="boolean"?e.checked=ge(e.value)===t:e.checked=Nr(e.value,t));else if(e.type==="checkbox")Number.isInteger(t)?e.value=t:!Array.isArray(t)&&typeof t!="boolean"&&![null,void 0].includes(t)?e.value=String(t):Array.isArray(t)?e.checked=t.some(r=>Nr(r,e.value)):e.checked=!!t;else if(e.tagName==="SELECT")ti(e,t);else{if(e.value===t)return;e.value=t===void 0?"":t}}function Yn(e,t){e._x_undoAddedClasses&&e._x_undoAddedClasses(),e._x_undoAddedClasses=pe(e,t)}function Xn(e,t){e._x_undoAddedStyles&&e._x_undoAddedStyles(),e._x_undoAddedStyles=Y(e,t)}function Zn(e,t,r){Dr(e,t,r),ei(e,t,r)}function Dr(e,t,r){[null,void 0,!1].includes(r)&&ni(t)?e.removeAttribute(t):(Pr(t)&&(r=t),Qn(e,t,r))}function Qn(e,t,r){e.getAttribute(t)!=r&&e.setAttribute(t,r)}function ei(e,t,r){e[t]!==r&&(e[t]=r)}function ti(e,t){let r=[].concat(t).map(n=>n+"");Array.from(e.options).forEach(n=>{n.selected=r.includes(n.value)})}function ri(e){return e.toLowerCase().replace(/-(\w)/g,(t,r)=>r.toUpperCase())}function Nr(e,t){return e==t}function ge(e){return[1,"1","true","on","yes",!0].includes(e)?!0:[0,"0","false","off","no",!1].includes(e)?!1:e?Boolean(e):null}function Pr(e){return["disabled","checked","required","readonly","open","selected","autofocus","itemscope","multiple","novalidate","allowfullscreen","allowpaymentrequest","formnovalidate","autoplay","controls","loop","muted","playsinline","default","ismap","reversed","async","defer","nomodule"].includes(e)}function ni(e){return!["aria-pressed","aria-checked","aria-expanded","aria-selected"].includes(e)}function Ir(e,t,r){return e._x_bindings&&e._x_bindings[t]!==void 0?e._x_bindings[t]:Lr(e,t,r)}function kr(e,t,r,n=!0){if(e._x_bindings&&e._x_bindings[t]!==void 0)return e._x_bindings[t];if(e._x_inlineBindings&&e._x_inlineBindings[t]!==void 0){let i=e._x_inlineBindings[t];return i.extract=n,De(()=>M(e,i.expression))}return Lr(e,t,r)}function Lr(e,t,r){let n=e.getAttribute(t);return n===null?typeof r=="function"?r():r:n===""?!0:Pr(t)?!![t,"true"].includes(n):n}function ze(e,t){var r;return function(){var n=this,i=arguments,o=function(){r=null,e.apply(n,i)};clearTimeout(r),r=setTimeout(o,t)}}function Ke(e,t){let r;return function(){let n=this,i=arguments;r||(e.apply(n,i),r=!0,setTimeout(()=>r=!1,t))}}function He({get:e,set:t},{get:r,set:n}){let i=!0,o,s,a=D(()=>{let c=e(),l=r();if(i)n(Ot(c)),i=!1;else{let u=JSON.stringify(c),p=JSON.stringify(l);u!==o?n(Ot(c)):u!==p&&t(Ot(l))}o=JSON.stringify(e()),s=JSON.stringify(r())});return()=>{L(a)}}function Ot(e){return typeof e=="object"?JSON.parse(JSON.stringify(e)):e}function $r(e){(Array.isArray(e)?e:[e]).forEach(r=>r(B))}var X={},jr=!1;function Fr(e,t){if(jr||(X=R(X),jr=!0),t===void 0)return X[e];X[e]=t,typeof t=="object"&&t!==null&&t.hasOwnProperty("init")&&typeof t.init=="function"&&X[e].init(),Te(X[e])}function Br(){return X}var zr={};function Kr(e,t){let r=typeof t!="function"?()=>t:t;return e instanceof Element?Ct(e,r()):(zr[e]=r,()=>{})}function Hr(e){return Object.entries(zr).forEach(([t,r])=>{Object.defineProperty(e,t,{get(){return(...n)=>r(...n)}})}),e}function Ct(e,t,r){let n=[];for(;n.length;)n.pop()();let i=Object.entries(t).map(([s,a])=>({name:s,value:a})),o=wt(i);return i=i.map(s=>o.find(a=>a.name===s.name)?{name:`x-bind:${s.name}`,value:`"${s.value}"`}:s),de(e,i,r).map(s=>{n.push(s.runCleanups),s()}),()=>{for(;n.length;)n.pop()()}}var Vr={};function qr(e,t){Vr[e]=t}function Ur(e,t){return Object.entries(Vr).forEach(([r,n])=>{Object.defineProperty(e,r,{get(){return(...i)=>n.bind(t)(...i)},enumerable:!1})}),e}var ii={get reactive(){return R},get release(){return L},get effect(){return D},get raw(){return st},version:"3.14.1",flushAndStopDeferringMutations:tr,dontAutoEvaluateFunctions:De,disableEffectScheduling:Ut,startObservingMutations:le,stopObservingMutations:ft,setReactivityEngine:Wt,onAttributeRemoved:Oe,onAttributesAdded:Ae,closestDataStack:j,skipDuringClone:A,onlyDuringClone:Or,addRootSelector:Le,addInitSelector:$e,interceptClone:K,addScopeToNode:P,deferMutations:er,mapAttributes:re,evaluateLater:x,interceptInit:wr,setEvaluator:or,mergeProxies:F,extractProp:kr,findClosest:z,onElRemoved:ee,closestRoot:J,destroyTree:vt,interceptor:Re,transition:Fe,setStyles:Y,mutateDom:_,directive:d,entangle:He,throttle:Ke,debounce:ze,evaluate:M,initTree:S,nextTick:ne,prefixed:C,prefix:sr,plugin:$r,magic:y,store:Fr,start:_r,clone:Rr,cloneNode:Tr,bound:Ir,$data:Ce,watch:ve,walk:T,data:qr,bind:Kr},B=ii;function Tt(e,t){let r=Object.create(null),n=e.split(",");for(let i=0;i<n.length;i++)r[n[i]]=!0;return t?i=>!!r[i.toLowerCase()]:i=>!!r[i]}var oi="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly";var Ms=Tt(oi+",async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected");var Wr=Object.freeze({}),Ns=Object.freeze([]);var si=Object.prototype.hasOwnProperty,xe=(e,t)=>si.call(e,t),H=Array.isArray,ie=e=>Gr(e)==="[object Map]";var ai=e=>typeof e=="string",Ve=e=>typeof e=="symbol",ye=e=>e!==null&&typeof e=="object";var ci=Object.prototype.toString,Gr=e=>ci.call(e),Rt=e=>Gr(e).slice(8,-1);var qe=e=>ai(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e;var Ue=e=>{let t=Object.create(null);return r=>t[r]||(t[r]=e(r))},li=/-(\w)/g,Ds=Ue(e=>e.replace(li,(t,r)=>r?r.toUpperCase():"")),ui=/\B([A-Z])/g,Ps=Ue(e=>e.replace(ui,"-$1").toLowerCase()),Mt=Ue(e=>e.charAt(0).toUpperCase()+e.slice(1)),Is=Ue(e=>e?`on${Mt(e)}`:""),Nt=(e,t)=>e!==t&&(e===e||t===t);var Dt=new WeakMap,be=[],k,Z=Symbol("iterate"),Pt=Symbol("Map key iterate");function fi(e){return e&&e._isEffect===!0}function en(e,t=Wr){fi(e)&&(e=e.raw);let r=pi(e,t);return t.lazy||r(),r}function tn(e){e.active&&(rn(e),e.options.onStop&&e.options.onStop(),e.active=!1)}var di=0;function pi(e,t){let r=function(){if(!r.active)return e();if(!be.includes(r)){rn(r);try{return _i(),be.push(r),k=r,e()}finally{be.pop(),nn(),k=be[be.length-1]}}};return r.id=di++,r.allowRecurse=!!t.allowRecurse,r._isEffect=!0,r.active=!0,r.raw=e,r.deps=[],r.options=t,r}function rn(e){let{deps:t}=e;if(t.length){for(let r=0;r<t.length;r++)t[r].delete(e);t.length=0}}var oe=!0,kt=[];function mi(){kt.push(oe),oe=!1}function _i(){kt.push(oe),oe=!0}function nn(){let e=kt.pop();oe=e===void 0?!0:e}function N(e,t,r){if(!oe||k===void 0)return;let n=Dt.get(e);n||Dt.set(e,n=new Map);let i=n.get(r);i||n.set(r,i=new Set),i.has(k)||(i.add(k),k.deps.push(i),k.options.onTrack&&k.options.onTrack({effect:k,target:e,type:t,key:r}))}function q(e,t,r,n,i,o){let s=Dt.get(e);if(!s)return;let a=new Set,c=u=>{u&&u.forEach(p=>{(p!==k||p.allowRecurse)&&a.add(p)})};if(t==="clear")s.forEach(c);else if(r==="length"&&H(e))s.forEach((u,p)=>{(p==="length"||p>=n)&&c(u)});else switch(r!==void 0&&c(s.get(r)),t){case"add":H(e)?qe(r)&&c(s.get("length")):(c(s.get(Z)),ie(e)&&c(s.get(Pt)));break;case"delete":H(e)||(c(s.get(Z)),ie(e)&&c(s.get(Pt)));break;case"set":ie(e)&&c(s.get(Z));break}let l=u=>{u.options.onTrigger&&u.options.onTrigger({effect:u,target:e,key:r,type:t,newValue:n,oldValue:i,oldTarget:o}),u.options.scheduler?u.options.scheduler(u):u()};a.forEach(l)}var hi=Tt("__proto__,__v_isRef,__isVue"),on=new Set(Object.getOwnPropertyNames(Symbol).map(e=>Symbol[e]).filter(Ve)),gi=sn();var xi=sn(!0);var Jr=yi();function yi(){let e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...r){let n=h(this);for(let o=0,s=this.length;o<s;o++)N(n,"get",o+"");let i=n[t](...r);return i===-1||i===!1?n[t](...r.map(h)):i}}),["push","pop","shift","unshift","splice"].forEach(t=>{e[t]=function(...r){mi();let n=h(this)[t].apply(this,r);return nn(),n}}),e}function sn(e=!1,t=!1){return function(n,i,o){if(i==="__v_isReactive")return!e;if(i==="__v_isReadonly")return e;if(i==="__v_raw"&&o===(e?t?ki:un:t?Ii:ln).get(n))return n;let s=H(n);if(!e&&s&&xe(Jr,i))return Reflect.get(Jr,i,o);let a=Reflect.get(n,i,o);return(Ve(i)?on.has(i):hi(i))||(e||N(n,"get",i),t)?a:It(a)?!s||!qe(i)?a.value:a:ye(a)?e?fn(a):Qe(a):a}}var bi=wi();function wi(e=!1){return function(r,n,i,o){let s=r[n];if(!e&&(i=h(i),s=h(s),!H(r)&&It(s)&&!It(i)))return s.value=i,!0;let a=H(r)&&qe(n)?Number(n)<r.length:xe(r,n),c=Reflect.set(r,n,i,o);return r===h(o)&&(a?Nt(i,s)&&q(r,"set",n,i,s):q(r,"add",n,i)),c}}function Ei(e,t){let r=xe(e,t),n=e[t],i=Reflect.deleteProperty(e,t);return i&&r&&q(e,"delete",t,void 0,n),i}function vi(e,t){let r=Reflect.has(e,t);return(!Ve(t)||!on.has(t))&&N(e,"has",t),r}function Si(e){return N(e,"iterate",H(e)?"length":Z),Reflect.ownKeys(e)}var Ai={get:gi,set:bi,deleteProperty:Ei,has:vi,ownKeys:Si},Oi={get:xi,set(e,t){return console.warn(`Set operation on key "${String(t)}" failed: target is readonly.`,e),!0},deleteProperty(e,t){return console.warn(`Delete operation on key "${String(t)}" failed: target is readonly.`,e),!0}};var Lt=e=>ye(e)?Qe(e):e,$t=e=>ye(e)?fn(e):e,jt=e=>e,Ze=e=>Reflect.getPrototypeOf(e);function We(e,t,r=!1,n=!1){e=e.__v_raw;let i=h(e),o=h(t);t!==o&&!r&&N(i,"get",t),!r&&N(i,"get",o);let{has:s}=Ze(i),a=n?jt:r?$t:Lt;if(s.call(i,t))return a(e.get(t));if(s.call(i,o))return a(e.get(o));e!==i&&e.get(t)}function Ge(e,t=!1){let r=this.__v_raw,n=h(r),i=h(e);return e!==i&&!t&&N(n,"has",e),!t&&N(n,"has",i),e===i?r.has(e):r.has(e)||r.has(i)}function Je(e,t=!1){return e=e.__v_raw,!t&&N(h(e),"iterate",Z),Reflect.get(e,"size",e)}function Yr(e){e=h(e);let t=h(this);return Ze(t).has.call(t,e)||(t.add(e),q(t,"add",e,e)),this}function Xr(e,t){t=h(t);let r=h(this),{has:n,get:i}=Ze(r),o=n.call(r,e);o?cn(r,n,e):(e=h(e),o=n.call(r,e));let s=i.call(r,e);return r.set(e,t),o?Nt(t,s)&&q(r,"set",e,t,s):q(r,"add",e,t),this}function Zr(e){let t=h(this),{has:r,get:n}=Ze(t),i=r.call(t,e);i?cn(t,r,e):(e=h(e),i=r.call(t,e));let o=n?n.call(t,e):void 0,s=t.delete(e);return i&&q(t,"delete",e,void 0,o),s}function Qr(){let e=h(this),t=e.size!==0,r=ie(e)?new Map(e):new Set(e),n=e.clear();return t&&q(e,"clear",void 0,void 0,r),n}function Ye(e,t){return function(n,i){let o=this,s=o.__v_raw,a=h(s),c=t?jt:e?$t:Lt;return!e&&N(a,"iterate",Z),s.forEach((l,u)=>n.call(i,c(l),c(u),o))}}function Xe(e,t,r){return function(...n){let i=this.__v_raw,o=h(i),s=ie(o),a=e==="entries"||e===Symbol.iterator&&s,c=e==="keys"&&s,l=i[e](...n),u=r?jt:t?$t:Lt;return!t&&N(o,"iterate",c?Pt:Z),{next(){let{value:p,done:m}=l.next();return m?{value:p,done:m}:{value:a?[u(p[0]),u(p[1])]:u(p),done:m}},[Symbol.iterator](){return this}}}}function V(e){return function(...t){{let r=t[0]?`on key "${t[0]}" `:"";console.warn(`${Mt(e)} operation ${r}failed: target is readonly.`,h(this))}return e==="delete"?!1:this}}function Ci(){let e={get(o){return We(this,o)},get size(){return Je(this)},has:Ge,add:Yr,set:Xr,delete:Zr,clear:Qr,forEach:Ye(!1,!1)},t={get(o){return We(this,o,!1,!0)},get size(){return Je(this)},has:Ge,add:Yr,set:Xr,delete:Zr,clear:Qr,forEach:Ye(!1,!0)},r={get(o){return We(this,o,!0)},get size(){return Je(this,!0)},has(o){return Ge.call(this,o,!0)},add:V("add"),set:V("set"),delete:V("delete"),clear:V("clear"),forEach:Ye(!0,!1)},n={get(o){return We(this,o,!0,!0)},get size(){return Je(this,!0)},has(o){return Ge.call(this,o,!0)},add:V("add"),set:V("set"),delete:V("delete"),clear:V("clear"),forEach:Ye(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Xe(o,!1,!1),r[o]=Xe(o,!0,!1),t[o]=Xe(o,!1,!0),n[o]=Xe(o,!0,!0)}),[e,r,t,n]}var[Ti,Ri,Mi,Ni]=Ci();function an(e,t){let r=t?e?Ni:Mi:e?Ri:Ti;return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(xe(r,i)&&i in n?r:n,i,o)}var Di={get:an(!1,!1)};var Pi={get:an(!0,!1)};function cn(e,t,r){let n=h(r);if(n!==r&&t.call(e,n)){let i=Rt(e);console.warn(`Reactive ${i} contains both the raw and reactive versions of the same object${i==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}var ln=new WeakMap,Ii=new WeakMap,un=new WeakMap,ki=new WeakMap;function Li(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function $i(e){return e.__v_skip||!Object.isExtensible(e)?0:Li(Rt(e))}function Qe(e){return e&&e.__v_isReadonly?e:dn(e,!1,Ai,Di,ln)}function fn(e){return dn(e,!0,Oi,Pi,un)}function dn(e,t,r,n,i){if(!ye(e))return console.warn(`value cannot be made reactive: ${String(e)}`),e;if(e.__v_raw&&!(t&&e.__v_isReactive))return e;let o=i.get(e);if(o)return o;let s=$i(e);if(s===0)return e;let a=new Proxy(e,s===2?n:r);return i.set(e,a),a}function h(e){return e&&h(e.__v_raw)||e}function It(e){return Boolean(e&&e.__v_isRef===!0)}y("nextTick",()=>ne);y("dispatch",e=>G.bind(G,e));y("watch",(e,{evaluateLater:t,cleanup:r})=>(n,i)=>{let o=t(n),a=ve(()=>{let c;return o(l=>c=l),c},i);r(a)});y("store",Br);y("data",e=>Ce(e));y("root",e=>J(e));y("refs",e=>(e._x_refs_proxy||(e._x_refs_proxy=F(ji(e))),e._x_refs_proxy));function ji(e){let t=[];return z(e,r=>{r._x_refs&&t.push(r._x_refs)}),t}var Ft={};function Bt(e){return Ft[e]||(Ft[e]=0),++Ft[e]}function pn(e,t){return z(e,r=>{if(r._x_ids&&r._x_ids[t])return!0})}function mn(e,t){e._x_ids||(e._x_ids={}),e._x_ids[t]||(e._x_ids[t]=Bt(t))}y("id",(e,{cleanup:t})=>(r,n=null)=>{let i=`${r}${n?`-${n}`:""}`;return Fi(e,i,t,()=>{let o=pn(e,r),s=o?o._x_ids[r]:Bt(r);return n?`${r}-${s}-${n}`:`${r}-${s}`})});K((e,t)=>{e._x_id&&(t._x_id=e._x_id)});function Fi(e,t,r,n){if(e._x_id||(e._x_id={}),e._x_id[t])return e._x_id[t];let i=n();return e._x_id[t]=i,r(()=>{delete e._x_id[t]}),i}y("el",e=>e);_n("Focus","focus","focus");_n("Persist","persist","persist");function _n(e,t,r){y(t,n=>E(`You can't use [$${t}] without first installing the "${e}" plugin here: https://alpinejs.dev/plugins/${r}`,n))}d("modelable",(e,{expression:t},{effect:r,evaluateLater:n,cleanup:i})=>{let o=n(t),s=()=>{let u;return o(p=>u=p),u},a=n(`${t} = __placeholder`),c=u=>a(()=>{},{scope:{__placeholder:u}}),l=s();c(l),queueMicrotask(()=>{if(!e._x_model)return;e._x_removeModelListeners.default();let u=e._x_model.get,p=e._x_model.set,m=He({get(){return u()},set(w){p(w)}},{get(){return s()},set(w){c(w)}});i(m)})});d("teleport",(e,{modifiers:t,expression:r},{cleanup:n})=>{e.tagName.toLowerCase()!=="template"&&E("x-teleport can only be used on a <template> tag",e);let i=hn(r),o=e.content.cloneNode(!0).firstElementChild;e._x_teleport=o,o._x_teleportBack=e,e.setAttribute("data-teleport-template",!0),o.setAttribute("data-teleport-target",!0),e._x_forwardEvents&&e._x_forwardEvents.forEach(a=>{o.addEventListener(a,c=>{c.stopPropagation(),e.dispatchEvent(new c.constructor(c.type,c))})}),P(o,{},e);let s=(a,c,l)=>{l.includes("prepend")?c.parentNode.insertBefore(a,c):l.includes("append")?c.parentNode.insertBefore(a,c.nextSibling):c.appendChild(a)};_(()=>{s(o,i,t),A(()=>{S(o),o._x_ignore=!0})()}),e._x_teleportPutBack=()=>{let a=hn(r);_(()=>{s(e._x_teleport,a,t)})},n(()=>o.remove())});var Bi=document.createElement("div");function hn(e){let t=A(()=>document.querySelector(e),()=>Bi)();return t||E(`Cannot find x-teleport element for selector: "${e}"`),t}var gn=()=>{};gn.inline=(e,{modifiers:t},{cleanup:r})=>{t.includes("self")?e._x_ignoreSelf=!0:e._x_ignore=!0,r(()=>{t.includes("self")?delete e._x_ignoreSelf:delete e._x_ignore})};d("ignore",gn);d("effect",A((e,{expression:t},{effect:r})=>{r(x(e,t))}));function se(e,t,r,n){let i=e,o=c=>n(c),s={},a=(c,l)=>u=>l(c,u);if(r.includes("dot")&&(t=zi(t)),r.includes("camel")&&(t=Ki(t)),r.includes("passive")&&(s.passive=!0),r.includes("capture")&&(s.capture=!0),r.includes("window")&&(i=window),r.includes("document")&&(i=document),r.includes("debounce")){let c=r[r.indexOf("debounce")+1]||"invalid-wait",l=et(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=ze(o,l)}if(r.includes("throttle")){let c=r[r.indexOf("throttle")+1]||"invalid-wait",l=et(c.split("ms")[0])?Number(c.split("ms")[0]):250;o=Ke(o,l)}return r.includes("prevent")&&(o=a(o,(c,l)=>{l.preventDefault(),c(l)})),r.includes("stop")&&(o=a(o,(c,l)=>{l.stopPropagation(),c(l)})),r.includes("once")&&(o=a(o,(c,l)=>{c(l),i.removeEventListener(t,o,s)})),(r.includes("away")||r.includes("outside"))&&(i=document,o=a(o,(c,l)=>{e.contains(l.target)||l.target.isConnected!==!1&&(e.offsetWidth<1&&e.offsetHeight<1||e._x_isShown!==!1&&c(l))})),r.includes("self")&&(o=a(o,(c,l)=>{l.target===e&&c(l)})),(Vi(t)||yn(t))&&(o=a(o,(c,l)=>{qi(l,r)||c(l)})),i.addEventListener(t,o,s),()=>{i.removeEventListener(t,o,s)}}function zi(e){return e.replace(/-/g,".")}function Ki(e){return e.toLowerCase().replace(/-(\w)/g,(t,r)=>r.toUpperCase())}function et(e){return!Array.isArray(e)&&!isNaN(e)}function Hi(e){return[" ","_"].includes(e)?e:e.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]/,"-").toLowerCase()}function Vi(e){return["keydown","keyup"].includes(e)}function yn(e){return["contextmenu","click","mouse"].some(t=>e.includes(t))}function qi(e,t){let r=t.filter(o=>!["window","document","prevent","stop","once","capture","self","away","outside","passive"].includes(o));if(r.includes("debounce")){let o=r.indexOf("debounce");r.splice(o,et((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.includes("throttle")){let o=r.indexOf("throttle");r.splice(o,et((r[o+1]||"invalid-wait").split("ms")[0])?2:1)}if(r.length===0||r.length===1&&xn(e.key).includes(r[0]))return!1;let i=["ctrl","shift","alt","meta","cmd","super"].filter(o=>r.includes(o));return r=r.filter(o=>!i.includes(o)),!(i.length>0&&i.filter(s=>((s==="cmd"||s==="super")&&(s="meta"),e[`${s}Key`])).length===i.length&&(yn(e.type)||xn(e.key).includes(r[0])))}function xn(e){if(!e)return[];e=Hi(e);let t={ctrl:"control",slash:"/",space:" ",spacebar:" ",cmd:"meta",esc:"escape",up:"arrow-up",down:"arrow-down",left:"arrow-left",right:"arrow-right",period:".",comma:",",equal:"=",minus:"-",underscore:"_"};return t[e]=e,Object.keys(t).map(r=>{if(t[r]===e)return r}).filter(r=>r)}d("model",(e,{modifiers:t,expression:r},{effect:n,cleanup:i})=>{let o=e;t.includes("parent")&&(o=e.parentNode);let s=x(o,r),a;typeof r=="string"?a=x(o,`${r} = __placeholder`):typeof r=="function"&&typeof r()=="string"?a=x(o,`${r()} = __placeholder`):a=()=>{};let c=()=>{let m;return s(w=>m=w),bn(m)?m.get():m},l=m=>{let w;s($=>w=$),bn(w)?w.set(m):a(()=>{},{scope:{__placeholder:m}})};typeof r=="string"&&e.type==="radio"&&_(()=>{e.hasAttribute("name")||e.setAttribute("name",r)});var u=e.tagName.toLowerCase()==="select"||["checkbox","radio"].includes(e.type)||t.includes("lazy")?"change":"input";let p=I?()=>{}:se(e,u,t,m=>{l(zt(e,t,m,c()))});if(t.includes("fill")&&([void 0,null,""].includes(c())||e.type==="checkbox"&&Array.isArray(c())||e.tagName.toLowerCase()==="select"&&e.multiple)&&l(zt(e,t,{target:e},c())),e._x_removeModelListeners||(e._x_removeModelListeners={}),e._x_removeModelListeners.default=p,i(()=>e._x_removeModelListeners.default()),e.form){let m=se(e.form,"reset",[],w=>{ne(()=>e._x_model&&e._x_model.set(zt(e,t,{target:e},c())))});i(()=>m())}e._x_model={get(){return c()},set(m){l(m)}},e._x_forceModelUpdate=m=>{m===void 0&&typeof r=="string"&&r.match(/\./)&&(m=""),window.fromModel=!0,_(()=>he(e,"value",m)),delete window.fromModel},n(()=>{let m=c();t.includes("unintrusive")&&document.activeElement.isSameNode(e)||e._x_forceModelUpdate(m)})});function zt(e,t,r,n){return _(()=>{if(r instanceof CustomEvent&&r.detail!==void 0)return r.detail!==null&&r.detail!==void 0?r.detail:r.target.value;if(e.type==="checkbox")if(Array.isArray(n)){let i=null;return t.includes("number")?i=Kt(r.target.value):t.includes("boolean")?i=ge(r.target.value):i=r.target.value,r.target.checked?n.includes(i)?n:n.concat([i]):n.filter(o=>!Ui(o,i))}else return r.target.checked;else{if(e.tagName.toLowerCase()==="select"&&e.multiple)return t.includes("number")?Array.from(r.target.selectedOptions).map(i=>{let o=i.value||i.text;return Kt(o)}):t.includes("boolean")?Array.from(r.target.selectedOptions).map(i=>{let o=i.value||i.text;return ge(o)}):Array.from(r.target.selectedOptions).map(i=>i.value||i.text);{let i;return e.type==="radio"?r.target.checked?i=r.target.value:i=n:i=r.target.value,t.includes("number")?Kt(i):t.includes("boolean")?ge(i):t.includes("trim")?i.trim():i}}})}function Kt(e){let t=e?parseFloat(e):null;return Wi(t)?t:e}function Ui(e,t){return e==t}function Wi(e){return!Array.isArray(e)&&!isNaN(e)}function bn(e){return e!==null&&typeof e=="object"&&typeof e.get=="function"&&typeof e.set=="function"}d("cloak",e=>queueMicrotask(()=>_(()=>e.removeAttribute(C("cloak")))));$e(()=>`[${C("init")}]`);d("init",A((e,{expression:t},{evaluate:r})=>typeof t=="string"?!!t.trim()&&r(t,{},!1):r(t,{},!1)));d("text",(e,{expression:t},{effect:r,evaluateLater:n})=>{let i=n(t);r(()=>{i(o=>{_(()=>{e.textContent=o})})})});d("html",(e,{expression:t},{effect:r,evaluateLater:n})=>{let i=n(t);r(()=>{i(o=>{_(()=>{e.innerHTML=o,e._x_ignoreSelf=!0,S(e),delete e._x_ignoreSelf})})})});re(Ie(":",ke(C("bind:"))));var wn=(e,{value:t,modifiers:r,expression:n,original:i},{effect:o,cleanup:s})=>{if(!t){let c={};Hr(c),x(e,n)(u=>{Ct(e,u,i)},{scope:c});return}if(t==="key")return Gi(e,n);if(e._x_inlineBindings&&e._x_inlineBindings[t]&&e._x_inlineBindings[t].extract)return;let a=x(e,n);o(()=>a(c=>{c===void 0&&typeof n=="string"&&n.match(/\./)&&(c=""),_(()=>he(e,t,c,r))})),s(()=>{e._x_undoAddedClasses&&e._x_undoAddedClasses(),e._x_undoAddedStyles&&e._x_undoAddedStyles()})};wn.inline=(e,{value:t,modifiers:r,expression:n})=>{t&&(e._x_inlineBindings||(e._x_inlineBindings={}),e._x_inlineBindings[t]={expression:n,extract:!1})};d("bind",wn);function Gi(e,t){e._x_keyExpression=t}Le(()=>`[${C("data")}]`);d("data",(e,{expression:t},{cleanup:r})=>{if(Ji(e))return;t=t===""?"{}":t;let n={};ue(n,e);let i={};Ur(i,n);let o=M(e,t,{scope:i});(o===void 0||o===!0)&&(o={}),ue(o,e);let s=R(o);Te(s);let a=P(e,s);s.init&&M(e,s.init),r(()=>{s.destroy&&M(e,s.destroy),a()})});K((e,t)=>{e._x_dataStack&&(t._x_dataStack=e._x_dataStack,t.setAttribute("data-has-alpine-state",!0))});function Ji(e){return I?Be?!0:e.hasAttribute("data-has-alpine-state"):!1}d("show",(e,{modifiers:t,expression:r},{effect:n})=>{let i=x(e,r);e._x_doHide||(e._x_doHide=()=>{_(()=>{e.style.setProperty("display","none",t.includes("important")?"important":void 0)})}),e._x_doShow||(e._x_doShow=()=>{_(()=>{e.style.length===1&&e.style.display==="none"?e.removeAttribute("style"):e.style.removeProperty("display")})});let o=()=>{e._x_doHide(),e._x_isShown=!1},s=()=>{e._x_doShow(),e._x_isShown=!0},a=()=>setTimeout(s),c=me(p=>p?s():o(),p=>{typeof e._x_toggleAndCascadeWithTransitions=="function"?e._x_toggleAndCascadeWithTransitions(e,p,s,o):p?a():o()}),l,u=!0;n(()=>i(p=>{!u&&p===l||(t.includes("immediate")&&(p?a():o()),c(p),l=p,u=!1)}))});d("for",(e,{expression:t},{effect:r,cleanup:n})=>{let i=Xi(t),o=x(e,i.items),s=x(e,e._x_keyExpression||"index");e._x_prevKeys=[],e._x_lookup={},r(()=>Yi(e,i,o,s)),n(()=>{Object.values(e._x_lookup).forEach(a=>a.remove()),delete e._x_prevKeys,delete e._x_lookup})});function Yi(e,t,r,n){let i=s=>typeof s=="object"&&!Array.isArray(s),o=e;r(s=>{Zi(s)&&s>=0&&(s=Array.from(Array(s).keys(),f=>f+1)),s===void 0&&(s=[]);let a=e._x_lookup,c=e._x_prevKeys,l=[],u=[];if(i(s))s=Object.entries(s).map(([f,g])=>{let b=En(t,g,f,s);n(v=>{u.includes(v)&&E("Duplicate key on x-for",e),u.push(v)},{scope:{index:f,...b}}),l.push(b)});else for(let f=0;f<s.length;f++){let g=En(t,s[f],f,s);n(b=>{u.includes(b)&&E("Duplicate key on x-for",e),u.push(b)},{scope:{index:f,...g}}),l.push(g)}let p=[],m=[],w=[],$=[];for(let f=0;f<c.length;f++){let g=c[f];u.indexOf(g)===-1&&w.push(g)}c=c.filter(f=>!w.includes(f));let we="template";for(let f=0;f<u.length;f++){let g=u[f],b=c.indexOf(g);if(b===-1)c.splice(f,0,g),p.push([we,f]);else if(b!==f){let v=c.splice(f,1)[0],O=c.splice(b-1,1)[0];c.splice(f,0,O),c.splice(b,0,v),m.push([v,O])}else $.push(g);we=g}for(let f=0;f<w.length;f++){let g=w[f];a[g]._x_effects&&a[g]._x_effects.forEach(Ee),a[g].remove(),a[g]=null,delete a[g]}for(let f=0;f<m.length;f++){let[g,b]=m[f],v=a[g],O=a[b],Q=document.createElement("div");_(()=>{O||E('x-for ":key" is undefined or invalid',o,b,a),O.after(Q),v.after(O),O._x_currentIfEl&&O.after(O._x_currentIfEl),Q.before(v),v._x_currentIfEl&&v.after(v._x_currentIfEl),Q.remove()}),O._x_refreshXForScope(l[u.indexOf(b)])}for(let f=0;f<p.length;f++){let[g,b]=p[f],v=g==="template"?o:a[g];v._x_currentIfEl&&(v=v._x_currentIfEl);let O=l[b],Q=u[b],ae=document.importNode(o.content,!0).firstElementChild,Vt=R(O);P(ae,Vt,o),ae._x_refreshXForScope=Sn=>{Object.entries(Sn).forEach(([An,On])=>{Vt[An]=On})},_(()=>{v.after(ae),A(()=>S(ae))()}),typeof Q=="object"&&E("x-for key cannot be an object, it must be a string or an integer",o),a[Q]=ae}for(let f=0;f<$.length;f++)a[$[f]]._x_refreshXForScope(l[u.indexOf($[f])]);o._x_prevKeys=u})}function Xi(e){let t=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,r=/^\s*\(|\)\s*$/g,n=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,i=e.match(n);if(!i)return;let o={};o.items=i[2].trim();let s=i[1].replace(r,"").trim(),a=s.match(t);return a?(o.item=s.replace(t,"").trim(),o.index=a[1].trim(),a[2]&&(o.collection=a[2].trim())):o.item=s,o}function En(e,t,r,n){let i={};return/^\[.*\]$/.test(e.item)&&Array.isArray(t)?e.item.replace("[","").replace("]","").split(",").map(s=>s.trim()).forEach((s,a)=>{i[s]=t[a]}):/^\{.*\}$/.test(e.item)&&!Array.isArray(t)&&typeof t=="object"?e.item.replace("{","").replace("}","").split(",").map(s=>s.trim()).forEach(s=>{i[s]=t[s]}):i[e.item]=t,e.index&&(i[e.index]=r),e.collection&&(i[e.collection]=n),i}function Zi(e){return!Array.isArray(e)&&!isNaN(e)}function vn(){}vn.inline=(e,{expression:t},{cleanup:r})=>{let n=J(e);n._x_refs||(n._x_refs={}),n._x_refs[t]=e,r(()=>delete n._x_refs[t])};d("ref",vn);d("if",(e,{expression:t},{effect:r,cleanup:n})=>{e.tagName.toLowerCase()!=="template"&&E("x-if can only be used on a <template> tag",e);let i=x(e,t),o=()=>{if(e._x_currentIfEl)return e._x_currentIfEl;let a=e.content.cloneNode(!0).firstElementChild;return P(a,{},e),_(()=>{e.after(a),A(()=>S(a))()}),e._x_currentIfEl=a,e._x_undoIf=()=>{T(a,c=>{c._x_effects&&c._x_effects.forEach(Ee)}),a.remove(),delete e._x_currentIfEl},a},s=()=>{e._x_undoIf&&(e._x_undoIf(),delete e._x_undoIf)};r(()=>i(a=>{a?o():s()})),n(()=>e._x_undoIf&&e._x_undoIf())});d("id",(e,{expression:t},{evaluate:r})=>{r(t).forEach(i=>mn(e,i))});K((e,t)=>{e._x_ids&&(t._x_ids=e._x_ids)});re(Ie("@",ke(C("on:"))));d("on",A((e,{value:t,modifiers:r,expression:n},{cleanup:i})=>{let o=n?x(e,n):()=>{};e.tagName.toLowerCase()==="template"&&(e._x_forwardEvents||(e._x_forwardEvents=[]),e._x_forwardEvents.includes(t)||e._x_forwardEvents.push(t));let s=se(e,t,r,a=>{o(()=>{},{scope:{$event:a},params:[a]})});i(()=>s())}));tt("Collapse","collapse","collapse");tt("Intersect","intersect","intersect");tt("Focus","trap","focus");tt("Mask","mask","mask");function tt(e,t,r){d(t,n=>E(`You can't use [x-${t}] without first installing the "${e}" plugin here: https://alpinejs.dev/plugins/${r}`,n))}B.setEvaluator(gt);B.setReactivityEngine({reactive:Qe,effect:en,release:tn,raw:h});var Ht=B;window.Alpine=Ht;queueMicrotask(()=>{Ht.start()});})();
|