diff --git a/.github/ISSUE_TEMPLATE/bug_koding.md b/.github/ISSUE_TEMPLATE/bug_koding.md
new file mode 100644
index 0000000..343fc0a
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_koding.md
@@ -0,0 +1,33 @@
+---
+name: π Bug (Divisi Koding / Bounty)
+about: Temuan bug dari event atau kontribusi divisi Koding
+title: '[BUG] '
+labels: bug, koding
+assignees: ''
+---
+
+## Ringkasan
+Satu kalimat: apa yang salah.
+
+## Langkah Reproduksi
+1.
+2.
+3.
+
+## Hasil Aktual vs Diharapkan
+- Aktual:
+- Diharapkan:
+
+## Bukti
+Screenshot / rekaman / console log.
+
+## Lokasi (opsional)
+File / halaman / komponen yang dicurigai.
+
+## Severity usulan pelapor
+- [ ] Critical (keamanan, data bocor, site down)
+- [ ] High (fitur utama rusak)
+- [ ] Medium (fitur rusak sebagian)
+- [ ] Low (visual / typo)
+
+> Bug keamanan **jangan** dilaporkan di sini. Lihat SECURITY.md.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index f28d307..db58a8d 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -4,7 +4,7 @@ Jelaskan perubahan yang kamu buat secara singkat.
## π Issue Terkait
-Fixes #(nomor issue)
+Closes #(nomor issue)
## π Tipe Perubahan
@@ -28,7 +28,13 @@ Fixes #(nomor issue)
- [ ] Saya sudah menambahkan komentar di bagian yang kompleks
- [ ] Saya sudah update dokumentasi yang terkait
- [ ] Perubahan saya tidak menghasilkan warning baru
-- [ ] Saya sudah test perubahan saya secara lokal
+- [ ] Saya sudah test perubahan saya secara lokal (desktop dan mobile bila menyentuh UI)
+- [ ] `npx tsc --noEmit` dan `npm run build` lolos
+- [ ] Tidak ada secret atau data pribadi di diff
+
+## π§ͺ Cara Verifikasi
+
+Langkah agar reviewer bisa memastikan perubahan bekerja.
## π Catatan untuk Reviewer
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..b30d096
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,24 @@
+name: CI
+
+on:
+ pull_request:
+ push:
+ branches: [main]
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: npm
+ - run: npm ci
+ - name: Typecheck
+ run: npx tsc --noEmit
+ - name: Build
+ run: npm run build
+ env:
+ VITE_SUPABASE_URL: https://example.supabase.co
+ VITE_SUPABASE_ANON_KEY: ci-placeholder
diff --git a/.github/workflows/event-report.yml b/.github/workflows/event-report.yml
new file mode 100644
index 0000000..3f70063
--- /dev/null
+++ b/.github/workflows/event-report.yml
@@ -0,0 +1,51 @@
+name: Event report
+
+on:
+ workflow_dispatch:
+ inputs:
+ since:
+ description: 'Tanggal mulai (YYYY-MM-DD)'
+ required: true
+ until:
+ description: 'Tanggal akhir (YYYY-MM-DD, kosong = hari ini)'
+ required: false
+ schedule:
+ - cron: '0 1 * * 1' # tiap Senin 08:00 WIB
+
+permissions:
+ contents: read
+ issues: read
+ pull-requests: read
+
+jobs:
+ report:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - name: Hitung periode
+ id: range
+ run: |
+ SINCE="${{ github.event.inputs.since }}"
+ if [ -z "$SINCE" ]; then SINCE="$(date -u -d '7 days ago' +%F)"; fi
+ echo "since=$SINCE" >> "$GITHUB_OUTPUT"
+ echo "until=${{ github.event.inputs.until }}" >> "$GITHUB_OUTPUT"
+ - name: Buat laporan
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_REPO: ${{ github.repository }}
+ SINCE: ${{ steps.range.outputs.since }}
+ UNTIL: ${{ steps.range.outputs.until }}
+ run: |
+ if [ -n "$UNTIL" ]; then
+ node scripts/event-report.mjs --since "$SINCE" --until "$UNTIL" --out report
+ else
+ node scripts/event-report.mjs --since "$SINCE" --out report
+ fi
+ cat report.md >> "$GITHUB_STEP_SUMMARY"
+ - uses: actions/upload-artifact@v4
+ with:
+ name: event-report
+ path: report.*
diff --git a/.gitignore b/.gitignore
index 0d811df..5cf1c76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@ dist-ssr
.env
.env.production
.env.staging
+.env.local
# Editor directories and files
.vscode/*
@@ -28,3 +29,5 @@ dist-ssr
*.njsproj
*.sln
*.sw?
+event/report.*
+private/
diff --git a/build_log.txt b/build_log.txt
deleted file mode 100644
index f248100..0000000
Binary files a/build_log.txt and /dev/null differ
diff --git a/build_log_utf8.txt b/build_log_utf8.txt
deleted file mode 100644
index 075d1aa..0000000
--- a/build_log_utf8.txt
+++ /dev/null
@@ -1,145 +0,0 @@
-ο»Ώ
-> ourcreativity@5.0.0 build
-> vite build
-
-[36mvite v6.4.1 [32mbuilding for production...[36m[39m
-transforming...
-node.exe :
-[33m[plugin
-vite:esbuild]
-pages/Karya.tsx:
-[33mThis case
-clause will never be
-evaluated because it
-duplicates an
-earlier case
-clause[33m
-At C:\Program Files\n
-odejs\npm.ps1:29
-char:3
-+ & $NODE_EXE
-$NPM_CLI_JS $args
-+ ~~~~~~~~~~~~~~~~~
-~~~~~~~~~~~~
- + CategoryInfo
- : NotSpe
- cified: ([33m[p
- lugin vi...ase c
-lause[33m:Strin
-g) [], RemoteExc
-eption
- + FullyQualified
- ErrorId : Native
- CommandError
-
-454| );
-455| case
-'video':
-456| case
-'video':
- | ^
-457| return
-(
-458|
-[39m
-[32mΞ£ô[39m 378 modules transformed.
-[31mΞ£ù[39m Build
-failed in 7.38s
-[31merror during
-build:
-[31m[vite]: Rollup
-failed to resolve
-import
-"react-hot-toast"
-from "C:/Users/X1 CAR
-BON/coding/02-Proyek-
-Web/ourcreativities/h
-ooks/useMediaUpload.t
-s".
-This is most likely
-unintended because
-it can break your
-application at
-runtime.
-If you do want to
-externalize this
-module explicitly
-add it to
-`build.rollupOptions.
-external`[31m
- at viteLog (file:
-///C:/Users/X1%20CARB
-ON/coding/02-Proyek-W
-eb/ourcreativities/no
-de_modules/vite/dist/
-node/chunks/dep-D4NMH
-UTW.js:46374:15)
- at file:///C:/Use
-rs/X1%20CARBON/coding
-/02-Proyek-Web/ourcre
-ativities/node_module
-s/vite/dist/node/chun
-ks/dep-D4NMHUTW.js:46
-432:18
- at onwarn (file:/
-//C:/Users/X1%20CARBO
-N/coding/02-Proyek-We
-b/ourcreativities/nod
-e_modules/@vitejs/plu
-gin-react/dist/index.
-js:76:7)
- at file:///C:/Use
-rs/X1%20CARBON/coding
-/02-Proyek-Web/ourcre
-ativities/node_module
-s/vite/dist/node/chun
-ks/dep-D4NMHUTW.js:46
-430:7
- at onRollupLog (f
-ile:///C:/Users/X1%20
-CARBON/coding/02-Proy
-ek-Web/ourcreativitie
-s/node_modules/vite/d
-ist/node/chunks/dep-D
-4NMHUTW.js:46422:5)
- at onLog (file://
-/C:/Users/X1%20CARBON
-/coding/02-Proyek-Web
-/ourcreativities/node
-_modules/vite/dist/no
-de/chunks/dep-D4NMHUT
-W.js:46072:7)
- at file:///C:/Use
-rs/X1%20CARBON/coding
-/02-Proyek-Web/ourcre
-ativities/node_module
-s/rollup/dist/es/shar
-ed/node-entry.js:2096
-1:32
- at Object.logger
-[as onLog] (file:///C
-:/Users/X1%20CARBON/c
-oding/02-Proyek-Web/o
-urcreativities/node_m
-odules/rollup/dist/es
-/shared/node-entry.js
-:22848:9)
- at ModuleLoader.h
-andleInvalidResolvedI
-d (file:///C:/Users/X
-1%20CARBON/coding/02-
-Proyek-Web/ourcreativ
-ities/node_modules/ro
-llup/dist/es/shared/n
-ode-entry.js:21592:26
-)
- at file:///C:/Use
-rs/X1%20CARBON/coding
-/02-Proyek-Web/ourcre
-ativities/node_module
-s/rollup/dist/es/shar
-ed/node-entry.js:2155
-0:26[39m
diff --git a/components/AuthProvider.tsx b/components/AuthProvider.tsx
index f0510cb..b4822d6 100644
--- a/components/AuthProvider.tsx
+++ b/components/AuthProvider.tsx
@@ -1,4 +1,4 @@
-import React, { createContext, useContext, useEffect, useState } from 'react';
+import React, { createContext, useContext, useEffect, useRef, useState } from 'react';
import { User, Session } from '@supabase/supabase-js';
import { supabase } from '../lib/supabase';
@@ -28,6 +28,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
const [user, setUser] = useState
(null);
const [profile, setProfile] = useState(null);
const [loading, setLoading] = useState(true);
+ const currentUserId = useRef(null);
useEffect(() => {
if (import.meta.env.DEV) console.log('AuthProvider: Starting initialization...');
@@ -42,6 +43,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
const getInitialSession = async () => {
try {
const { data: { session } } = await supabase.auth.getSession();
+ currentUserId.current = session?.user?.id ?? null;
setSession(session);
setUser(session?.user ?? null);
@@ -61,14 +63,17 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
getInitialSession();
// 2. Pantau perubahan auth (login/logout)
- const { data: { subscription } } = supabase.auth.onAuthStateChange(async (_event, session) => {
- const previousUser = user;
+ const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => {
+ const previousId = currentUserId.current;
+ currentUserId.current = session?.user?.id ?? null;
setSession(session);
setUser(session?.user ?? null);
- // Cek apakah user berubah beneran biar gak fetch ulang kalo cuma token refresh
- if (session?.user && session.user.id !== previousUser?.id) {
- await fetchProfile(session.user.id);
+ // Cek apakah user berubah beneran biar gak fetch ulang kalo cuma token refresh.
+ // Jangan await panggilan Supabase di dalam callback ini (bisa deadlock), jadi ditunda.
+ if (session?.user && session.user.id !== previousId) {
+ const userId = session.user.id;
+ setTimeout(() => { void fetchProfile(userId); }, 0);
} else if (!session?.user) {
setProfile(null);
}
diff --git a/components/CreationStudio/ControlCenter/InteractiveSandbox.tsx b/components/CreationStudio/ControlCenter/InteractiveSandbox.tsx
index 525df9e..6ff7d61 100644
--- a/components/CreationStudio/ControlCenter/InteractiveSandbox.tsx
+++ b/components/CreationStudio/ControlCenter/InteractiveSandbox.tsx
@@ -188,7 +188,7 @@ export const InteractiveSandbox: React.FC = ({ files, t
ref={iframeRef}
srcDoc={getIframeContent()}
className="w-full h-full border-none bg-black"
- sandbox="allow-scripts allow-modals allow-same-origin"
+ sandbox="allow-scripts allow-modals"
title="Preview"
/>
);
diff --git a/components/CreationStudio/index.tsx b/components/CreationStudio/index.tsx
index 460d0b9..51a62cb 100644
--- a/components/CreationStudio/index.tsx
+++ b/components/CreationStudio/index.tsx
@@ -115,8 +115,11 @@ export const CreationStudio: React.FC = ({ isOpen, onClose, onPublish })
};
const uploadFile = async (file: File): Promise => {
- const fileExt = file.name.split('.').pop();
- const fileName = `${Math.random()}.${fileExt}`;
+ const allowedTypes = ['image/jpeg', 'image/png', 'image/webp', 'image/gif', 'video/mp4', 'video/webm'];
+ if (!allowedTypes.includes(file.type)) throw new Error('Tipe file tidak diizinkan.');
+ if (file.size > 50 * 1024 * 1024) throw new Error('Ukuran file maksimal 50MB.');
+ const fileExt = file.name.split('.').pop()?.toLowerCase().replace(/[^a-z0-9]/g, '') || 'bin';
+ const fileName = `${crypto.randomUUID()}.${fileExt}`;
const filePath = `${fileName}`;
const { error: uploadError } = await supabase.storage
diff --git a/components/MediaUploader.tsx b/components/MediaUploader.tsx
index 6898296..206e88c 100644
--- a/components/MediaUploader.tsx
+++ b/components/MediaUploader.tsx
@@ -59,10 +59,13 @@ const MediaUploader = ({
disabled: uploading,
});
+ // framer-motion punya tipe onDrag sendiri yang bentrok dengan react-dropzone
+ const { onDrag: _onDrag, onDragStart: _onDragStart, onDragEnd: _onDragEnd, onAnimationStart: _onAnimationStart, ...rootProps } = getRootProps();
+
return (
`. Alert tidak boleh muncul |
+| S3 | Perketat sandbox iframe | Hapus `allow-same-origin` dari iframe di `Karya.tsx` (3 tempat), `Profile.tsx`, dan `InteractiveSandbox.tsx`. Tes bahwa preview p5/JS tetap jalan | Di preview, `localStorage.getItem('x')` harus melempar SecurityError |
+| S4 | Branch protection dan CI wajib | Pengaturan di `HOST_KODING.md` bagian 2.2 | PR tanpa approval atau dengan CI merah tidak bisa di-merge |
+| S5 | `npm audit fix` | Jalankan `npm audit fix` (tanpa `--force`), pastikan build dan tsc lolos | `npm audit --omit=dev` tinggal sedikit atau nol high |
+
+**Status eksekusi (branch `claude/koding-event-host-setup-ikq7nz`)**
+- S2 selesai di kode: `lib/sanitize.ts` (DOMPurify) dipakai di semua `dangerouslySetInnerHTML`.
+- S3 selesai di kode: `allow-same-origin` dihapus dari semua iframe preview.
+- S5 selesai sebagian: `npm audit fix` dijalankan. Sisa temuan berasal dari DOMPurify bawaan Monaco dan `react-router`; perlu upgrade terpisah.
+- S1: file `supabase/migrations/20261026_harden_profiles_and_works.sql` sudah ditulis tapi **belum dijalankan**. Jalankan di staging, lakukan verifikasi, baru di produksi.
+- S4: harus diatur manual di GitHub Settings (tidak bisa dilakukan lewat kode).
+
+## 3. Daftar Issue Awal untuk Papan Event
+
+Judul dan label siap dipakai saat membuat issue. Tambahkan detail lokasi file di deskripsi.
+
+**Bug dan kualitas (bounty)**
+1. Hapus 96 `console.*` dari kode produksi (ganti dengan logger yang bisa dimatikan). `sev:low`, `bounty:M`
+2. Ganti `any` secara bertahap, mulai dari `lib/` dan `hooks/`. `bounty:M` per direktori
+3. Pecah `pages/Karya.tsx` (1327 baris) jadi komponen: card, viewer, filter. `bounty:L`
+4. Pecah `pages/Profile.tsx` dan `pages/Studio.tsx` dengan pola yang sama. `bounty:L` masing-masing
+5. Lazy-load Monaco dan pyodide agar chunk `Studio` (627 kB) turun. `bounty:L`
+6. Kode preview duplikat (`generateCodePreview` di Karya dan Profile): satukan ke `lib/`. `bounty:M`
+7. Tambah alt text dan label ARIA di Navbar, Hero, BentoGrid, dan form. Lihat `.github/issues/issue_06_accessibility.md`. `bounty:M`
+8. Stat halaman Coding yang di-hardcode (125 member, 99.9% uptime): ambil dari Supabase atau hapus. `sev:low`, `bounty:S`
+9. Perbarui dokumentasi yang menunjuk path lama (`supabase_schema.sql` di CONTRIBUTING, `CODEOWNERS`). `bounty:S`
+10. Uji tampilan di mobile: Studio, Karya, Gate. Laporkan dan perbaiki bug layout. `sev:medium`, `bounty:M` per bug
+
+**Infrastruktur (bounty besar)**
+11. Setup Vitest dan React Testing Library, plus test untuk `lib/utils.ts`, `AdminGuard`, dan `AuthProvider`. `bounty:XL` (lihat `issue_02_testing.md`)
+12. Tambah lint (ESLint) dan format (Prettier) ke CI. `bounty:L`
+13. Pemisahan error boundary per rute dan pesan error yang konsisten (`issue_03_error_handling.md`). `bounty:M`
+14. Review RLS tabel lain (`comments`, `likes`, `follows`, `works`) dan tulis test SQL sederhana. `bounty:L`
+
+**Pemula (`good-first-issue`)**
+15. Perbaiki typo dan teks Indonesia yang tidak konsisten di README dan docs. `bounty:S`
+16. Hapus badge versi lama di README dan sesuaikan dengan `package.json`. `bounty:S`
+17. Tambah `.nvmrc` dan field `engines` di `package.json`. `bounty:S`
+
+Mulai dengan 12 sampai 17 issue agar pilot tidak kewalahan, lalu tambah bertahap.
+
+## 4. Teks Siap Tempel
+
+### 4.1 Aturan event (pin sebagai issue)
+
+```
+# Aturan Event Bug Hunt Koding
+
+Periode: sampai
+Budget total: Rp . Batas per orang: Rp .
+
+CARA IKUT
+1. Fork repo, setup sesuai docs/HOST_KODING.md bagian 3 (Fase B).
+2. Pilih issue berlabel `good-first-issue` atau `bounty:*`, komentar "Saya ambil #N".
+3. Tunggu di-assign. Maksimal 2 issue aktif per orang. Klaim hangus bila 5 hari tanpa PR.
+4. Buat PR dengan "Closes #N" di deskripsi. CI harus hijau. Isi template PR.
+
+MENEMUKAN BUG BARU
+- Buka issue dengan template "Bug (Divisi Koding / Bounty)". Sertakan langkah reproduksi dan bukti.
+- Bug keamanan: JANGAN buka issue publik. Pakai Security Advisory (tab Security).
+- Severity ditentukan host dan bersifat final.
+
+PEMBAYARAN
+- Dibayar hanya bila PR di-merge. Duplikat: hanya laporan pertama.
+- Rekap tiap akhir bulan, transfer maksimal tanggal 5 bulan berikutnya.
+- Minimum payout Rp 25.000, sisanya digulung.
+- Ini bounty lepas, bukan hubungan kerja. Aturan dan hadiah dapat berubah dengan pemberitahuan.
+
+DILARANG
+- Membuat bug lalu melaporkannya, PR spam atau hasil otomatis tanpa dipahami,
+ menyalin PR orang lain, menguji ke produksi, merusak atau mengambil data,
+ memakai lebih dari satu akun.
+- Pelanggaran: diskualifikasi dan hadiah ditahan.
+
+Kontribusi dilisensikan MIT sesuai LICENSE repo.
+```
+
+### 4.2 Pengumuman ke member
+
+```
+Halo anak Koding! Kita buka Bug Hunt OurCreativity.
+Cari bug, rapikan kode, dan dapat bayaran untuk PR yang di-merge.
+Mulai . Aturan dan daftar tugas: .
+Daftar: balas pesan ini dengan username GitHub kamu.
+Pemula boleh ikut, ada label good-first-issue.
+```
+
+### 4.3 Tambahan untuk template PR
+Tambahkan bagian ini ke `.github/PULL_REQUEST_TEMPLATE.md`:
+```
+## Issue terkait
+Closes #
+
+## Cara verifikasi
+Langkah agar reviewer dapat memastikan perubahan bekerja.
+
+## Checklist
+- [ ] `npx tsc --noEmit` lolos
+- [ ] `npm run build` lolos
+- [ ] Diuji di desktop dan mobile (bila menyentuh UI)
+- [ ] Tidak ada secret atau data pribadi di diff
+```
+
+## 5. Ritme Mingguan Host
+
+| Hari | Kegiatan | Durasi |
+|------|----------|--------|
+| Setiap hari | Triage issue baru, review PR yang menunggu | 20 sampai 30 menit |
+| Senin | Bersihkan klaim kadaluarsa, tambah 3 sampai 5 issue baru | 20 menit |
+| Jumat | Rekap mingguan di issue pin: PR merge, leaderboard poin, issue tersisa | 20 menit |
+| Akhir bulan | Ekspor PR merge, isi ledger, umumkan rekap, payout | 1 sampai 2 jam |
+
+Kalau review mulai menumpuk, tunjuk 1 sampai 2 reviewer tepercaya dari member senior (beri izin Triage, bukan Write) dan kurangi issue baru.
+
+## 6. Ukuran Keberhasilan
+
+Cek di akhir pilot dan akhir event:
+- Jumlah PR merge dan rasio PR merge terhadap PR yang dibuka (sehat: di atas 50%).
+- Waktu rata-rata dari klaim sampai merge.
+- Jumlah kontributor aktif unik.
+- Tidak ada regresi di produksi dan CI tetap hijau.
+- Total pengeluaran terhadap budget.
+
+## 7. Risiko dan Mitigasi
+
+| Risiko | Mitigasi |
+|--------|----------|
+| Budget habis lebih cepat dari rencana | Batas total dan per orang, antrean issue dibatasi, jeda bila 80% terpakai |
+| Review jadi bottleneck | Batas 2 klaim per orang, reviewer tambahan, issue kecil dan fokus |
+| PR berkualitas rendah atau spam | Aturan diskualifikasi, hanya merge dibayar, CI wajib |
+| Eksploitasi bug keamanan sebelum patch | Blocker S1 sampai S3 selesai lebih dulu, pelaporan privat |
+| Kebocoran kredensial | Supabase staging terpisah, anon key saja, rotasi setelah event |
+| Sengketa pembayaran | Severity final oleh host, rekap publik 3 hari sebelum payout, bukti transfer disimpan |
diff --git a/docs/HOST_KODING.md b/docs/HOST_KODING.md
new file mode 100644
index 0000000..bc71cc8
--- /dev/null
+++ b/docs/HOST_KODING.md
@@ -0,0 +1,211 @@
+# Panduan Host Event Divisi Koding
+
+Panduan untuk host yang mengajak member mencari bug dan memperbaiki website OurCreativity lewat GitHub, termasuk sistem bayaran dan cara melacaknya.
+
+Hasil review repo (tanggal 2026-10-26) ada di bagian 1. Setup dan alur kerja ada di bagian 2 sampai 6.
+
+---
+
+## 1. Hasil Review: Apakah Repo Siap?
+
+**Kesimpulan: cukup siap untuk event kecil dan terkontrol, belum siap untuk event terbuka berhadiah uang.** Ada 4 hal yang sebaiknya selesai dulu (bagian 1.3).
+
+### 1.1 Yang sudah bagus
+- Build produksi lolos (`npm run build`, sekitar 8 detik).
+- `tsc --noEmit` bersih (sebelumnya 1 error di `MediaUploader.tsx`, sudah diperbaiki di branch ini).
+- Dokumentasi lengkap: README, CONTRIBUTING, SECURITY, CODEOWNERS, template PR dan issue, 15 file di `docs/`.
+- Tidak ada secret yang ter-commit. `.env` sudah di `.gitignore`. Hanya `VITE_SUPABASE_*` (anon key, memang publik) yang dipakai di client.
+- Kode sudah di-split per halaman (lazy chunks).
+
+### 1.2 Masalah yang ditemukan
+
+| # | Severity | Temuan | Lokasi |
+|---|----------|--------|--------|
+| 1 | **High** | Tidak ada CI dan tidak ada test. PR tidak diverifikasi otomatis. (CI dasar sudah ditambahkan di `.github/workflows/ci.yml`.) | repo |
+| 2 | **High** | Stored XSS. Konten karya user dirender lewat `dangerouslySetInnerHTML` tanpa sanitasi (tidak ada DOMPurify). | `pages/Karya.tsx:491,960,1143`, `pages/Profile.tsx:328,662` |
+| 3 | **High** | Iframe kode user memakai `sandbox="allow-scripts allow-same-origin"` lewat `srcDoc`. Kombinasi ini membuat sandbox tidak efektif: script user bisa membaca `localStorage` induk, termasuk token sesi Supabase. | `pages/Karya.tsx:510,896,1164`, `components/CreationStudio/ControlCenter/InteractiveSandbox.tsx:191` |
+| 4 | **High** | Skema tabel `profiles` dan policy RLS untuk UPDATE-nya tidak ada di `supabase/migrations`. Tidak bisa diverifikasi dari repo apakah user bisa mengubah `role` jadi `admin` sendiri. Cek langsung di Supabase. | `supabase/migrations/` |
+| 5 | Medium | `npm audit --omit=dev`: 12 kerentanan (11 high, 1 moderate) pada dependency transitif (`ws`, `underscore`). | `package.json` |
+| 6 | Medium | Policy `works_update_owner` tidak punya `WITH CHECK`. Owner bisa mengubah kolom sensitif (misalnya `author_id`, atau flag approve jika ada). | `supabase/migrations/20251226_performance_cleanup.sql:59` |
+| 7 | Medium | Sekitar 97 `any` dan 96 `console.*`. File besar: `Karya.tsx` 1327 baris, `Studio.tsx` 950 baris, `Profile.tsx` 884 baris. | `pages/` |
+| 8 | Medium | Chunk `Studio` 627 kB (200 kB gzip), terkait Monaco dan pyodide. | build output |
+| 9 | Low | Dokumentasi tidak konsisten: CONTRIBUTING menyebut `supabase_schema.sql` padahal file ada di `supabase/migrations/`; `.github/CODEOWNERS` menunjuk path lama; README memuat badge versi lama. | docs |
+| 10 | Low | Data statistik di halaman Coding di-hardcode ("125 member", "99.9% uptime"). | `pages/divisions/Coding.tsx` |
+| 11 | Low | File sampah di root (`build_log*.txt`, `tsc_*.txt`). Sudah dihapus di branch ini. | root |
+
+### 1.3 Wajib sebelum event berhadiah uang
+1. **Cek RLS `profiles` di dashboard Supabase** (temuan 4), lalu simpan skemanya ke `supabase/migrations`. Pastikan user biasa tidak bisa meng-update kolom `role`.
+2. **Tambah sanitasi HTML** dengan DOMPurify di semua `dangerouslySetInnerHTML` (temuan 2).
+3. **Hapus `allow-same-origin`** dari iframe kode user (temuan 3). Hasil render tetap jalan dengan `allow-scripts` saja.
+4. **Aktifkan branch protection** di `main` (bagian 2.2).
+
+Temuan 2, 3, 4 ini sebaiknya jadi **bug pertama di papan event**. Karena severity-nya tinggi, kerjakan sendiri atau pilih kontributor yang dipercaya. Jangan umumkan detailnya di issue publik sebelum diperbaiki (lihat `SECURITY.md`).
+
+---
+
+## 2. Setup Awal Host (sekali saja)
+
+### 2.1 Repo
+1. Pastikan akun host punya akses **Maintain** atau **Admin** ke `OurCreativity/ourcreativity`.
+2. Merge branch ini agar CI, template issue, dan panduan ini aktif.
+3. Buat **Supabase project terpisah untuk staging/event**. Jangan beri kontributor akses ke database produksi. Jalankan semua file di `supabase/migrations/` ke project itu.
+
+### 2.2 Branch protection (Settings β Branches β Add rule untuk `main`)
+- Require a pull request before merging, dengan minimal 1 approval.
+- Require review from Code Owners.
+- Require status checks to pass: pilih `check` (dari `ci.yml`).
+- Dismiss stale approvals saat ada commit baru.
+- Larang force-push dan penghapusan branch.
+
+### 2.3 Label (Issues β Labels)
+```
+bug, koding, good-first-issue, needs-triage, confirmed, duplicate, invalid, wontfix
+sev:critical, sev:high, sev:medium, sev:low
+bounty:S, bounty:M, bounty:L, bounty:XL
+paid
+```
+
+### 2.4 GitHub Project (board)
+Buat Project (Table + Board) bernama "Event Koding". Kolom status: `Triage β Open β Claimed β In Review β Merged β Paid`. Tambah field: `Assignee`, `Severity`, `Points`, `Rupiah`, `Bulan`.
+
+### 2.5 Keamanan repo
+- Aktifkan **Dependabot alerts**, **Secret scanning**, dan **Private vulnerability reporting** (Settings β Code security).
+- Kontributor bekerja lewat **fork + PR**, bukan push langsung. Jangan beri akses write ke member biasa.
+
+---
+
+## 3. Alur Event (dari sisi host)
+
+### Fase A: Persiapan (H-7)
+- Siapkan 15 sampai 30 issue awal: bug yang sudah kamu ketahui, tugas `good-first-issue`, dan improvement (aksesibilitas, performa, refactor `Karya.tsx`, test). Beri label `sev:*` dan `bounty:*`.
+- Tulis aturan dan tabel hadiah (bagian 4) di satu issue yang di-pin.
+- Umumkan ke member: cara daftar, cara klaim, tenggat.
+
+### Fase B: Onboarding member (kirim ke member)
+```bash
+# 1. Fork repo di GitHub, lalu:
+git clone https://github.com//ourcreativity.git
+cd ourcreativity
+git remote add upstream https://github.com/OurCreativity/ourcreativity.git
+npm ci
+cp .env.example .env # isi dengan kredensial Supabase STAGING dari host
+npm run dev # buka http://localhost:3000
+
+# 2. Kerjakan
+git checkout -b fix/-
+# ...ubah kode...
+npx tsc --noEmit && npm run build # wajib lolos sebelum PR
+git commit -m "fix: (#)"
+git push origin fix/-
+# 3. Buka Pull Request ke OurCreativity/ourcreativity:main
+```
+Bagikan kredensial staging lewat pesan privat, bukan di issue atau channel publik.
+
+### Fase C: Selama event (rutin harian, sekitar 20 menit)
+1. **Triage** issue baru dengan label `needs-triage`: reproduksi bug, tentukan `sev:*` dan `bounty:*`, tandai `duplicate` atau `invalid` bila perlu.
+2. **Klaim**: member komentar `/claim` atau "Saya ambil". Host meng-assign. Satu orang maksimal 2 issue aktif; klaim kadaluarsa dalam 5 hari tanpa PR.
+3. **Review PR**: cek CI hijau, diff kecil dan fokus, tidak mengubah file di luar scope, tidak menyisipkan dependency baru tanpa alasan. Jalankan lokal bila perubahan menyentuh auth, RLS, atau iframe.
+4. **Merge**, lalu pindahkan card ke `Merged` dan isi field `Points` dan `Rupiah`.
+
+### Fase D: Penutupan dan payout (akhir bulan)
+Lihat bagian 5.
+
+---
+
+## 4. Skema Bayaran
+
+Angka di bawah hanya usulan awal. Sesuaikan dengan budget. **Tetapkan dulu total budget bulanan dan batas per orang** (misalnya maksimum 25% budget per member) sebelum diumumkan.
+
+### 4.1 Hadiah per bug (dibayar setelah PR merge, bukan saat laporan)
+
+| Severity | Contoh | Reward |
+|----------|--------|--------|
+| Critical | XSS tersimpan, eskalasi role, kebocoran data | Rp 150.000 sampai 300.000 |
+| High | Fitur utama rusak, crash halaman | Rp 75.000 |
+| Medium | Fitur rusak sebagian, bug di mobile | Rp 40.000 |
+| Low | Typo, visual minor, dokumentasi | Rp 15.000 |
+
+### 4.2 Hadiah improvement
+
+| Ukuran | Contoh | Reward |
+|--------|--------|--------|
+| S | refactor kecil, alt text, perbaikan docs | Rp 20.000 |
+| M | test untuk satu modul, optimasi satu halaman | Rp 50.000 |
+| L | pecah `Karya.tsx` jadi komponen, fitur kecil | Rp 100.000 |
+| XL | fitur besar, infrastruktur test | Rp 200.000 atau lebih |
+
+Tambah bonus Rp 10.000 sampai 25.000 bila disertai test atau dokumentasi.
+
+### 4.3 Aturan wajib
+- Hanya **PR yang di-merge** yang dibayar.
+- Laporan duplikat: hanya yang pertama (waktu issue) dibayar.
+- Severity ditentukan host dan bersifat final.
+- Bug keamanan dilaporkan privat lewat Security Advisory, dibayar setelah patch merge.
+- Dilarang: bug yang sengaja dibuat lalu "ditemukan", PR spam/otomatis tanpa pemahaman, menyalin PR orang lain, menguji ke produksi atau merusak data. Pelanggaran berarti diskualifikasi.
+- Gunakan akun GitHub asli, satu orang satu akun.
+
+---
+
+## 5. Tracking dan Pembayaran
+
+**Prinsip: GitHub adalah sumber kebenaran, spreadsheet hanya buku kas.** Tidak perlu membangun sistem sendiri dulu.
+
+### 5.1 Pelacakan di GitHub
+- Tiap issue punya label `sev:*` atau `bounty:*`. Saat PR merge, tambahkan label `paid` hanya setelah uang benar-benar dikirim.
+- Di PR, tulis `Closes #` agar issue otomatis tertutup dan tertaut ke pembuatnya.
+- Di GitHub Project, field `Rupiah` diisi saat merge. Dari view Table, filter per `Bulan`, lalu grup per `Assignee` untuk total per orang.
+
+### 5.2 Spreadsheet ledger (Google Sheets)
+Buat satu sheet dengan kolom:
+
+| Tanggal merge | Username GitHub | Nama asli | Issue | PR | Kategori | Severity/Size | Rupiah | Metode bayar | Status (Belum/Lunas) | Tgl bayar | Bukti transfer |
+|---|---|---|---|---|---|---|---|---|---|---|---|
+
+Tab ke-2 berisi rekap per orang memakai `SUMIFS` per bulan. Data pribadi (nama asli, rekening) disimpan di sheet privat milik host, **jangan** di repo.
+
+### 5.3 Tarik data otomatis (opsional)
+Daftar PR merge sebulan dapat diambil dengan GitHub CLI:
+```bash
+gh pr list --repo OurCreativity/ourcreativity --state merged \
+ --search "merged:2026-11-01..2026-11-30" \
+ --json number,title,author,mergedAt,labels,closingIssuesReferences \
+ --limit 200 > merged.json
+```
+Ubah ke CSV lalu tempel ke ledger. Kalau volume sudah besar, baru pertimbangkan membuat workflow GitHub Actions atau tabel `payouts` di Supabase.
+
+### 5.4 Siklus payout
+1. **Tanggal 1 tiap bulan**: ekspor PR merge bulan lalu, cocokkan dengan ledger.
+2. **Tanggal 1 sampai 3**: umumkan rekap di issue pin ("Rekap November"), beri waktu 3 hari untuk keberatan.
+3. **Tanggal 5**: transfer (bank, e-wallet). Catat bukti, isi `Lunas`, tambah label `paid`.
+4. Minimum payout, misalnya Rp 25.000. Di bawah itu, saldo digulung ke bulan berikutnya.
+
+### 5.5 Hal non-teknis yang perlu diputuskan
+- **Sumber dana dan transparansi**: dari kas pribadi, kas komunitas, atau donasi? Umumkan total budget agar tidak ada ekspektasi berlebihan.
+- **Status pembayaran**: ini bounty lepas, bukan gaji. Tulis jelas di aturan bahwa member bukan karyawan, dan hadiah bisa berubah atau dihentikan dengan pemberitahuan.
+- **Pajak dan legal**: konsultasikan bila nilai total besar atau rutin. Bagian ini bukan nasihat hukum.
+- **Lisensi kontribusi**: repo memakai MIT. Cantumkan di aturan bahwa kontribusi berlisensi sama.
+- **Peserta di bawah umur**: pastikan ada persetujuan orang tua bila relevan.
+
+---
+
+## 6. Checklist Host
+
+**Sebelum event**
+- [ ] Merge branch ini (CI, template, panduan)
+- [ ] Cek RLS `profiles` dan simpan skemanya ke migrations
+- [ ] Sanitasi `dangerouslySetInnerHTML` dan hapus `allow-same-origin`
+- [ ] Branch protection `main` aktif
+- [ ] Supabase staging siap, kredensial dibagikan privat
+- [ ] Label, Project board, dan ledger siap
+- [ ] 15 sampai 30 issue terlabel
+- [ ] Budget dan aturan diumumkan
+
+**Selama event**
+- [ ] Triage harian
+- [ ] Review PR maksimal 48 jam
+- [ ] Bersihkan klaim kadaluarsa
+
+**Setelah event**
+- [ ] Rekap, payout, dan label `paid`
+- [ ] Update `CHANGELOG.md` dan `AUTHORS.md` (kredit kontributor)
+- [ ] Retrospektif: apa yang berhasil, apa yang perlu diubah di event berikutnya
diff --git a/docs/KONTROL_DAN_TRACKING_EVENT.md b/docs/KONTROL_DAN_TRACKING_EVENT.md
new file mode 100644
index 0000000..e24a11f
--- /dev/null
+++ b/docs/KONTROL_DAN_TRACKING_EVENT.md
@@ -0,0 +1,60 @@
+# Kontrol Keamanan dan Tracking Peserta Event
+
+Panduan untuk host agar event tetap terkontrol dan aktivitas peserta bisa dilihat.
+
+## 1. Prinsip kontrol
+
+1. **Peserta tidak pernah menyentuh produksi.** Mereka pakai fork + Supabase staging. Kredensial staging dibagikan privat dan diganti setelah event.
+2. **Semua perubahan lewat PR** dengan branch protection di `main` (approval + CODEOWNERS + CI hijau).
+3. **Hak akses minimal.** Peserta tidak diberi akses write ke repo. Reviewer tepercaya cukup diberi *Triage*.
+4. **Bug keamanan dilaporkan privat** lewat tab Security β Report a vulnerability, bukan issue publik.
+5. **Satu sumber kebenaran untuk reward**: label issue + PR yang di-merge (bagian 3).
+
+## 2. Verifikasi sebelum event (checklist host)
+
+- [ ] Jalankan `supabase/audit/rls_audit.sql` di staging dan produksi. Simpan hasilnya. Pastikan: tidak ada tabel publik tanpa RLS, policy tulis sesuai harapan untuk `profiles`, `works`, `letters`, dan `storage.objects`, daftar admin sesuai.
+- [ ] Jalankan migration `20261026_harden_profiles_and_works.sql` lalu `20261027_admin_audit_log.sql` (staging dulu).
+- [ ] Uji sebagai user biasa di staging: `update({role:'admin'})` pada profil sendiri harus gagal.
+- [ ] Bucket `works` dan `avatars`: batasi `file_size_limit` dan `allowed_mime_types` di dashboard Storage; policy upload hanya untuk path `auth.uid()/...`; tanpa overwrite oleh user lain.
+- [ ] Auth Supabase: aktifkan konfirmasi email, CAPTCHA (Turnstile/hCaptcha), dan rate limit di Authentication β Settings.
+- [ ] Aktifkan Dependabot, Secret scanning, dan Private vulnerability reporting.
+
+## 3. Tracking peserta
+
+### 3.1 Daftar peserta (registry)
+Buat Google Sheet privat dengan kolom: `github`, `nama`, `kontak`, `tanggal daftar`, `setuju aturan (ya/tidak)`, `rekening/e-wallet`. Data pribadi tidak masuk repo. Hanya username GitHub yang dipakai di tooling.
+
+### 3.2 Aktivitas di GitHub (otomatis)
+- Workflow `Event report` (`.github/workflows/event-report.yml`) berjalan tiap Senin dan bisa dipicu manual (Actions β Event report β Run workflow, isi `since`). Hasilnya muncul di ringkasan job dan sebagai artifact `report.csv` / `report.md`.
+- Per peserta: jumlah PR merge, jumlah laporan bug, dan perkiraan reward dari label (`event/rewards.json`).
+- Jalankan manual: `GITHUB_TOKEN= node scripts/event-report.mjs --since 2026-11-01 --until 2026-11-30`.
+- Pantau juga: Insights β Contributors, Pulse, dan Project board (kolom `Assignee` dan `Rupiah`).
+- Aturan hitung: PR harus menulis `Closes #N`; reward diambil dari label tertinggi pada issue tersebut. Maintainer di `excludeUsers` tidak dihitung. Batas per orang di `maxPerUser`.
+
+### 3.3 Aktivitas di aplikasi (database)
+Setelah migration `20261027_admin_audit_log.sql`, tabel `audit_log` mencatat siapa mengubah role/approval, menghapus karya, atau menghapus profil. Query contoh:
+```sql
+-- 100 aksi terbaru
+select at, actor_id, table_name, action, row_id from audit_log order by at desc limit 100;
+-- siapa dijadikan admin
+select at, actor_id, row_id from audit_log where table_name='profiles' and new_data->>'role'='admin';
+-- aktivitas satu pengguna
+select * from audit_log where actor_id = '' order by at desc;
+```
+Untuk login dan error auth: Supabase Dashboard β Logs β Auth dan API (lihat IP, status 4xx/5xx mencurigakan). Untuk pendaftaran baru selama event:
+```sql
+select id, username, created_at from public.profiles order by created_at desc limit 50;
+```
+
+### 3.4 Sinyal yang perlu dicurigai
+- Banyak PR kecil dalam waktu singkat dari satu akun, atau PR tanpa penjelasan.
+- Akun baru yang langsung mengirim banyak laporan bug.
+- Perubahan di `supabase/`, `.github/`, `package.json`, atau file auth tanpa issue terkait: review ekstra, jalankan lokal.
+- Lonjakan 401/403/429 di log Supabase atau lonjakan upload storage.
+- Entri `audit_log` dengan `actor_id` bukan admin yang kamu kenal.
+
+## 4. Menanggapi insiden
+1. Cabut akses: ganti kunci staging, nonaktifkan akun (`update profiles set is_approved=false`), blokir user GitHub dari org.
+2. Simpan bukti (log, `audit_log`, tautan PR).
+3. Perbaiki lewat PR privat/advisory, lalu umumkan ringkas.
+4. Peserta yang melanggar aturan: diskualifikasi dan hadiah ditahan sesuai aturan event.
diff --git a/docs/README.md b/docs/README.md
index 6f3435a..5af8cf0 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -37,3 +37,6 @@ Selamat datang di dokumentasi resmi OurCreativity. Semua dokumentasi kini tersed
* **[Riwayat Versi Lengkap](versions/RIWAYAT_VERSI_LENGKAP.md)**
Arsip sejarah perubahan versi dari awal hingga sekarang.
+- [Panduan Host Event Koding](HOST_KODING.md)
+- [Rencana Eksekusi Event Koding](EVENT_KODING_PLAN.md)
+- [Kontrol dan Tracking Event](KONTROL_DAN_TRACKING_EVENT.md)
diff --git a/event/rewards.json b/event/rewards.json
new file mode 100644
index 0000000..98acd5d
--- /dev/null
+++ b/event/rewards.json
@@ -0,0 +1,15 @@
+{
+ "_catatan": "Nominal usulan (Rupiah). Sesuaikan dengan budget. Reward diambil dari label issue yang ditutup PR; jika ada beberapa label, diambil yang tertinggi.",
+ "labels": {
+ "sev:critical": 200000,
+ "sev:high": 75000,
+ "sev:medium": 40000,
+ "sev:low": 15000,
+ "bounty:XL": 200000,
+ "bounty:L": 100000,
+ "bounty:M": 50000,
+ "bounty:S": 20000
+ },
+ "excludeUsers": ["Ardelyo", "DoctorThink"],
+ "maxPerUser": 500000
+}
diff --git a/lib/safe-url.ts b/lib/safe-url.ts
new file mode 100644
index 0000000..1575a9d
--- /dev/null
+++ b/lib/safe-url.ts
@@ -0,0 +1,10 @@
+// Hanya izinkan http(s) untuk link buatan user (cegah javascript: / data: URL).
+export const safeHttpUrl = (value: string | null | undefined): string | undefined => {
+ if (!value) return undefined;
+ try {
+ const url = new URL(value.trim());
+ return url.protocol === 'http:' || url.protocol === 'https:' ? url.toString() : undefined;
+ } catch {
+ return undefined;
+ }
+};
diff --git a/lib/sanitize.ts b/lib/sanitize.ts
new file mode 100644
index 0000000..fc8ed9e
--- /dev/null
+++ b/lib/sanitize.ts
@@ -0,0 +1,5 @@
+// Sanitasi HTML buatan user sebelum dirender lewat dangerouslySetInnerHTML.
+import DOMPurify from 'dompurify';
+
+export const sanitizeHtml = (html: string | null | undefined): string =>
+ DOMPurify.sanitize(html ?? '', { USE_PROFILES: { html: true } });
diff --git a/package-lock.json b/package-lock.json
index 36e6065..e8d2131 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -30,6 +30,7 @@
"browser-image-compression": "^2.0.2",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
+ "dompurify": "^3.4.17",
"embla-carousel-react": "^8.6.0",
"framer-motion": "^12.23.24",
"gsap": "^3.14.2",
@@ -72,13 +73,13 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.29.7",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -87,9 +88,9 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
- "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -97,21 +98,21 @@
}
},
"node_modules/@babel/core": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
- "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-compilation-targets": "^7.27.2",
- "@babel/helper-module-transforms": "^7.28.3",
- "@babel/helpers": "^7.28.4",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5",
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
"@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
@@ -128,14 +129,14 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
- "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+ "version": "7.29.8",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
+ "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/parser": "^7.28.5",
- "@babel/types": "^7.28.5",
+ "@babel/parser": "^7.29.8",
+ "@babel/types": "^7.29.8",
"@jridgewell/gen-mapping": "^0.3.12",
"@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
@@ -145,14 +146,14 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
- "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.27.2",
- "@babel/helper-validator-option": "^7.27.1",
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -162,9 +163,9 @@
}
},
"node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
- "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -172,29 +173,29 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
- "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.28.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
- "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.27.1",
- "@babel/traverse": "^7.28.3"
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -214,9 +215,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.11.tgz",
+ "integrity": "sha512-snZbO7MEDOof+hvNa97EjEY7qD7h2kwvQr5AJC3ZhQudKW5dnej6k3kP9NQV88hJwaS8vDqRLFo9rivLEhle2g==",
"dev": true,
"license": "MIT",
"engines": {
@@ -224,9 +225,9 @@
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -234,9 +235,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
- "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -244,27 +245,27 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.10.tgz",
+ "integrity": "sha512-EMCx3AGZ3WfAl6ht7AyQoPm2Lh+BGYEMdc4Q6Hf7uSCDOZFuLq44qNwL+iaim8VlyYhRAo4X43+weadK8ZB4Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.11.tgz",
+ "integrity": "sha512-OZ6+oaK7GMyg3IfCpj8JOmn8n+w2rJbDT0LLfVDTLb1ZFeKDh3AiNELgCMUw175IJHSkLl74hG0M0VLsvx+gag==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/types": "^7.28.5"
+ "@babel/types": "^7.29.11"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -306,33 +307,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
- "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
+ "version": "7.29.10",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.10.tgz",
+ "integrity": "sha512-B3lYAs2nkKskbgQ1nfy8Ma9ao9Q1rntTAQHrzzyDuj+TSO+X3le6PfWwqDvodsb+OumE10eMFfuMCTQSQ5iuIQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/generator": "^7.28.5",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.28.5",
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.5",
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.8",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.9",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.8",
"debug": "^4.3.1"
},
"engines": {
@@ -340,14 +341,14 @@
}
},
"node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "version": "7.29.11",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.11.tgz",
+ "integrity": "sha512-WCsemW40Cpc6gouC1SrY6PBaZ+oLRlEVY9XBvZBI7il/HyUrb2nJ505wE1MHEFyDZNnrWDEuy4jL50WVHfTTSQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
+ "@babel/helper-string-parser": "^7.29.11",
+ "@babel/helper-validator-identifier": "^7.29.7"
},
"engines": {
"node": ">=6.9.0"
@@ -933,6 +934,23 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
+ "node_modules/@napi-rs/lzma-linux-x64-gnu": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
+ "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^22.20 || ^24.12 || >=25"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -971,16 +989,10 @@
"node": ">= 8"
}
},
- "node_modules/@remirror/core-constants": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz",
- "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
- "license": "MIT"
- },
"node_modules/@remix-run/router": {
- "version": "1.23.1",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.1.tgz",
- "integrity": "sha512-vDbaOzF7yT2Qs4vO6XV1MHcJv+3dgR1sT+l3B8xxOVhUC336prMvqrvsLL/9Dnw2xr6Qhz4J0dmS0llNAbnUmQ==",
+ "version": "1.23.4",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.4.tgz",
+ "integrity": "sha512-q7j5geK7xs3UJSdm9/iytUNclBnLmYx1EnSeCFXHPeutdqgIMeFeHtUZgS3EhlKxdBEAu8OwtJCwmLrEzpSs7Q==",
"license": "MIT",
"engines": {
"node": ">=14.0.0"
@@ -994,9 +1006,9 @@
"license": "MIT"
},
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz",
- "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.65.1.tgz",
+ "integrity": "sha512-5coxNSjqOI2J3NkVhlp3u+zGcyjnowQFsU9sg7MMz4UPXY4Dv63kFGLt7ConXz9CNq2i0yuOJZAF/2RMrgI2OA==",
"cpu": [
"arm"
],
@@ -1008,9 +1020,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz",
- "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.65.1.tgz",
+ "integrity": "sha512-K0HFf6XMB3IYs+jDZ1/RRhZaVOwxNXrl0n4MDEyGDjuK7+B6K/nDJp8DCBitO3S1sK/fzNxAf9QZAny4AIUPtg==",
"cpu": [
"arm64"
],
@@ -1022,9 +1034,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz",
- "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.65.1.tgz",
+ "integrity": "sha512-zkZrXYwNlIcSUmcwY2DpsaDHr0XjVUeQHCuSunG3eQD7/5Wn/DvI7OMUE8NRRweK87yG8ebJ1xGOzmwpMsbZQA==",
"cpu": [
"arm64"
],
@@ -1036,9 +1048,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz",
- "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.65.1.tgz",
+ "integrity": "sha512-Zaed+R3cpkkA3aiNd7NO0GV5KFh/LVf8j6bGcoRdpoXkSm/mWH8M0oX2/3u/nyGcx/bHEovD9CzX+w9/gcpI4A==",
"cpu": [
"x64"
],
@@ -1050,9 +1062,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz",
- "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.65.1.tgz",
+ "integrity": "sha512-h12p3WJWhyJ9kir0zqAPr0rKNmBzOWIjoaOMT9OULs9KZQZCeOMKd+mGSvERjd9VxJYShd3zIxtrVxkYz6BEVA==",
"cpu": [
"arm64"
],
@@ -1064,9 +1076,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz",
- "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.65.1.tgz",
+ "integrity": "sha512-yRBwh/5imKY4DydDulVtrjy8Jf7h7NQJUqZbgmZ3zFsCD9QqlnWvZ7RtEF+ecO1b+IukKjXlu5Bb9fehV3tIbg==",
"cpu": [
"x64"
],
@@ -1078,9 +1090,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz",
- "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.65.1.tgz",
+ "integrity": "sha512-1XuPiWYYaLE1UDOqhbKVOfsqxvfmFS/lYPSk92U1hEX1qRfSYH0hNeAlbxFIgjp4d6+YQmL95EPRgdvjbZEddA==",
"cpu": [
"arm"
],
@@ -1092,9 +1104,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz",
- "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.65.1.tgz",
+ "integrity": "sha512-Y3C5e55Yrf6p2r5rBcc4P9hFWVNi6oqWy/53I/AyCJJGlp3KRSpTP8eoUmVntchTbEnhgBgAgLO9flj9AvOdUw==",
"cpu": [
"arm"
],
@@ -1106,9 +1118,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz",
- "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.65.1.tgz",
+ "integrity": "sha512-Itj6coSswkYPIcVLczObXmwdplHNQQxyfnK1ppBg4czDaX8RiEzLKqU7EMc64BiBuiDZEUS+M93ktM18rv5llw==",
"cpu": [
"arm64"
],
@@ -1120,9 +1132,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz",
- "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.65.1.tgz",
+ "integrity": "sha512-KeO8jTEqdrnhvcahufbimyMoI44vedRUp1bVz2QUnRX2vDm/hxzCPt5F8fERVD5fsHyTW/vXmCElT054VOSVOA==",
"cpu": [
"arm64"
],
@@ -1134,9 +1146,23 @@
]
},
"node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz",
- "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.65.1.tgz",
+ "integrity": "sha512-dDOz5VZZ+ZGnglpmET6VJefamWXFsgaVtuhSClf2/URZBp048jprD6z1hddsIMN6n1w+oUzGZEBp9u6Mlszsfg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.65.1.tgz",
+ "integrity": "sha512-JbfRKz8nJCuo8gn1Dqx8lQWEHw4qhZ3uRaHphw5vrSjnSptJTKTRC/bLKHh8QQMsEnhL4uq+bdg3tkiXbJ2q/A==",
"cpu": [
"loong64"
],
@@ -1148,9 +1174,23 @@
]
},
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz",
- "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.65.1.tgz",
+ "integrity": "sha512-3oQpe1q0emSeCAssVHMQdOz5fz3PBH5my/Fr0ZekV2UMNL4ZiRa1ciikYlGQXyDkeqseYYv1InwOY8YPqY7RIQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.65.1.tgz",
+ "integrity": "sha512-nNV3HHi23o1LtpGGwH+Bav4hqnc4+klQtC96tSvCfvql8bLlNFTnTFiGl/jai2nve3eEr/vT2ocuyf+h+eMnYQ==",
"cpu": [
"ppc64"
],
@@ -1162,9 +1202,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz",
- "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.65.1.tgz",
+ "integrity": "sha512-b5zab0FryBxuocuDeqOsYGAg2EzjKw4mKA6LjQXCyewXjGv/BXqACBsY2cO45xM4hV2weYtdjGThP2VB2ByAYg==",
"cpu": [
"riscv64"
],
@@ -1176,9 +1216,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz",
- "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.65.1.tgz",
+ "integrity": "sha512-Rh08xZakiUxKNgI3hbgH9mivlx478lSqckS9s+Oc3/TX1VrAH3W8z/5wpJXR/v5VjqcJ/jJNVBg64PU1+iQsTQ==",
"cpu": [
"riscv64"
],
@@ -1190,9 +1230,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz",
- "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.65.1.tgz",
+ "integrity": "sha512-qDgtS6juN3/k97y4kcD6XLFpXEo4f6CnG8lTOGYwlhrUYTrMyhN0WHdZCPAW5rqS0MqQG7qI7dxnjugt6QB39Q==",
"cpu": [
"s390x"
],
@@ -1204,9 +1244,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz",
- "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.65.1.tgz",
+ "integrity": "sha512-44IKzBPqXXVm0kt1O+F5eW4juR5FyIxGNlFkpP8qwIDzucBsjM1HCbdYUQrQw8rU/g6HRl/tfBm0+Qq4H4Ro3w==",
"cpu": [
"x64"
],
@@ -1218,9 +1258,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz",
- "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.65.1.tgz",
+ "integrity": "sha512-tvYWZ/h2PCHs558Xu7B6LptuRCV8lXV2xI75ONMcldII1m2zlFwuI4BJZi9M6rSMkYqcPLLtPUPrjyqfbzLOdg==",
"cpu": [
"x64"
],
@@ -1231,10 +1271,24 @@
"linux"
]
},
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.65.1.tgz",
+ "integrity": "sha512-gdyeucgZCnei3pXwadKVTEAOgRx0B+c847DUPR/PdOMmp3olhfkYo6r0J4PzRFZB5ZICZQTxntyvgmWH5xT7rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
"node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz",
- "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.65.1.tgz",
+ "integrity": "sha512-Wf/NEKdn2SAL4Nvt8HyDtdkseWTwiLbZEOoNYnEaHkbso0B9eHO42vKnZh+OYsn+IMhAMcWcuIwPlBOgOXsUzg==",
"cpu": [
"arm64"
],
@@ -1246,9 +1300,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz",
- "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.65.1.tgz",
+ "integrity": "sha512-x9VSsDmsMsEWy4cr/mFeaEsXnVJ6Kc4NCAU/lCnwml3s7LQbZoa9+/qwc9etWHbuuDT5mYxdyyKUwo76njtjZw==",
"cpu": [
"arm64"
],
@@ -1260,9 +1314,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz",
- "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.65.1.tgz",
+ "integrity": "sha512-RIDbiVvvLkN45mOFpbo6eYMgnuiBEB62BGR/0s4QJgGg2AvVxucDDNn67kpAcUoYyfmY8iX8/RifMcmxmmnejA==",
"cpu": [
"ia32"
],
@@ -1274,9 +1328,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz",
- "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.65.1.tgz",
+ "integrity": "sha512-+KN8HIr88vN59JNxlrM2fMimzY43Y0lQB7+0xdVsFbvFCAA74CLKCdfzIHzzvndJryBc94Pm+MvwtukKjaS2ug==",
"cpu": [
"x64"
],
@@ -1288,9 +1342,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz",
- "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.65.1.tgz",
+ "integrity": "sha512-+Y1Sd49cSDq60UOl8/U2HI0ebUvnSl/hDhMHQn+ouw17yb8fYwMWIazzJ4JFpSkjPE7sj5NTNSX9IoyEqcFfyQ==",
"cpu": [
"x64"
],
@@ -1408,16 +1462,16 @@
}
},
"node_modules/@tiptap/core": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.14.0.tgz",
- "integrity": "sha512-nm0VWVA1Vq/jaKY3wyRXViL/kf78yMdH7qETpv4qZXDQLU+pdWV3IGoRTQTKESc7d8L1wL/2uCeByLNUJfrSIw==",
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.32.0.tgz",
+ "integrity": "sha512-Ghh2h02GKSqzytQGcLV4espYOG4EHxjj0MsrUB2Vnr47xmlZYRf6r7k2J09H+JpBdaGrWwrTkyBEi5i3c3yy2Q==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/ueberdosis"
},
"peerDependencies": {
- "@tiptap/pm": "^3.14.0"
+ "@tiptap/pm": "3.32.0"
}
},
"node_modules/@tiptap/extension-blockquote": {
@@ -1826,29 +1880,24 @@
}
},
"node_modules/@tiptap/pm": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.14.0.tgz",
- "integrity": "sha512-xrZmqI5jl4yMeAsu8p8gVP9S3An5h2MBi8BQHNnZmpyzkUrlpd40vlT6u13SWIqVi5ZWhBZ6U3rL7mkVLZuRKg==",
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.32.0.tgz",
+ "integrity": "sha512-H9eN+xHFboJybE7KPGVsu24S8aBlCIgYz38vCHRSnNv17nwmqm06owq/IQ5scza0n3Y7IfUfpgPOtm9SgeHmNQ==",
"license": "MIT",
"dependencies": {
- "prosemirror-changeset": "^2.3.0",
- "prosemirror-collab": "^1.3.1",
- "prosemirror-commands": "^1.6.2",
- "prosemirror-dropcursor": "^1.8.1",
- "prosemirror-gapcursor": "^1.3.2",
- "prosemirror-history": "^1.4.1",
- "prosemirror-inputrules": "^1.4.0",
- "prosemirror-keymap": "^1.2.2",
- "prosemirror-markdown": "^1.13.1",
- "prosemirror-menu": "^1.2.4",
- "prosemirror-model": "^1.24.1",
- "prosemirror-schema-basic": "^1.2.3",
- "prosemirror-schema-list": "^1.5.0",
- "prosemirror-state": "^1.4.3",
- "prosemirror-tables": "^1.6.4",
- "prosemirror-trailing-node": "^3.0.0",
- "prosemirror-transform": "^1.10.2",
- "prosemirror-view": "^1.38.1"
+ "prosemirror-changeset": "^2.4.4",
+ "prosemirror-commands": "^1.7.2",
+ "prosemirror-dropcursor": "^1.8.4",
+ "prosemirror-gapcursor": "^1.4.1",
+ "prosemirror-history": "^1.5.1",
+ "prosemirror-inputrules": "^1.5.1",
+ "prosemirror-keymap": "^1.2.3",
+ "prosemirror-model": "^1.25.12",
+ "prosemirror-schema-list": "^1.5.1",
+ "prosemirror-state": "^1.4.4",
+ "prosemirror-tables": "^1.8.5",
+ "prosemirror-transform": "^1.12.2",
+ "prosemirror-view": "^1.42.6"
},
"funding": {
"type": "github",
@@ -1970,9 +2019,9 @@
"license": "MIT"
},
"node_modules/@types/estree": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
- "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
+ "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
"dev": true,
"license": "MIT"
},
@@ -1983,28 +2032,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@types/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
- "license": "MIT"
- },
- "node_modules/@types/markdown-it": {
- "version": "14.1.2",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
- "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
- "license": "MIT",
- "dependencies": {
- "@types/linkify-it": "^5",
- "@types/mdurl": "^2"
- }
- },
- "node_modules/@types/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
- "license": "MIT"
- },
"node_modules/@types/node": {
"version": "22.19.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz",
@@ -2044,8 +2071,7 @@
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"license": "MIT",
- "optional": true,
- "peer": true
+ "optional": true
},
"node_modules/@types/use-sync-external-store": {
"version": "0.0.6",
@@ -2157,9 +2183,9 @@
}
},
"node_modules/@xmldom/xmldom": {
- "version": "0.8.11",
- "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
- "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==",
+ "version": "0.8.15",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.15.tgz",
+ "integrity": "sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -2187,9 +2213,9 @@
}
},
"node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -2292,13 +2318,16 @@
"license": "MIT"
},
"node_modules/baseline-browser-mapping": {
- "version": "2.8.31",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz",
- "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==",
+ "version": "2.11.33",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.33.tgz",
+ "integrity": "sha512-yiVKDX+qCMRKBE084lXvq9EcwFUhKZ2nU8TK1EQQuOgPNR/lmbGxXOeDdlGUqC2Zz11Cs9rk1d/8NfgBmlkt0w==",
"dev": true,
"license": "Apache-2.0",
"bin": {
- "baseline-browser-mapping": "dist/cli.js"
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/binary-extensions": {
@@ -2343,9 +2372,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.28.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
- "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
+ "version": "4.29.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.29.4.tgz",
+ "integrity": "sha512-2TcbbiwXEq+N0kD36tykpCfyyQigUXmuwNQbnPp4Xk4PX9JOqVIKjJlIDjpH7uY6tmRGoAd+apeT1p60T8wsdA==",
"dev": true,
"funding": [
{
@@ -2363,11 +2392,11 @@
],
"license": "MIT",
"dependencies": {
- "baseline-browser-mapping": "^2.8.25",
- "caniuse-lite": "^1.0.30001754",
- "electron-to-chromium": "^1.5.249",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.1.4"
+ "baseline-browser-mapping": "^2.11.29",
+ "caniuse-lite": "^1.0.30001816",
+ "electron-to-chromium": "^1.5.459",
+ "node-releases": "^2.0.59",
+ "update-browserslist-db": "^1.3.4"
},
"bin": {
"browserslist": "cli.js"
@@ -2387,9 +2416,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001757",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz",
- "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==",
+ "version": "1.0.30001819",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001819.tgz",
+ "integrity": "sha512-LFUqIIAwpzsIuevnKnsR9qnStBcgzPShTX61lBwN9uFkkf8o8zLiebEjbW8AYtZiF+1YKDWfdt/pWDtMuG8Xwg==",
"dev": true,
"funding": [
{
@@ -2477,12 +2506,6 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
- "node_modules/crelt": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
- "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
- "license": "MIT"
- },
"node_modules/css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
@@ -2560,11 +2583,10 @@
"license": "MIT"
},
"node_modules/dompurify": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz",
- "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==",
+ "version": "3.4.17",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.17.tgz",
+ "integrity": "sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==",
"license": "(MPL-2.0 OR Apache-2.0)",
- "peer": true,
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
}
@@ -2579,9 +2601,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.5.260",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz",
- "integrity": "sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA==",
+ "version": "1.5.464",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.464.tgz",
+ "integrity": "sha512-nRa65aFge40viPAKxMKULIY8tcXKwKboJWNn4RoKwyWXJ6SP7BnrDGKUTzc64818jIciH0PK7LSF8QzZes19GA==",
"dev": true,
"license": "ISC"
},
@@ -2613,18 +2635,6 @@
"embla-carousel": "8.6.0"
}
},
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
"node_modules/esbuild": {
"version": "0.25.12",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
@@ -2677,18 +2687,6 @@
"node": ">=6"
}
},
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/fast-equals": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz",
@@ -3083,15 +3081,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
- "license": "MIT",
- "dependencies": {
- "uc.micro": "^2.0.0"
- }
- },
"node_modules/linkifyjs": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz",
@@ -3164,29 +3153,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/markdown-it": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
- "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1",
- "entities": "^4.4.0",
- "linkify-it": "^5.0.0",
- "mdurl": "^2.0.0",
- "punycode.js": "^2.3.1",
- "uc.micro": "^2.1.0"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.mjs"
- }
- },
- "node_modules/markdown-it/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "license": "Python-2.0"
- },
"node_modules/marked": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz",
@@ -3200,12 +3166,6 @@
"node": ">= 18"
}
},
- "node_modules/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
- "license": "MIT"
- },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3231,9 +3191,9 @@
}
},
"node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3244,16 +3204,26 @@
}
},
"node_modules/monaco-editor": {
- "version": "0.55.1",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.55.1.tgz",
- "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==",
+ "version": "0.57.0",
+ "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.57.0.tgz",
+ "integrity": "sha512-5BkI9KGoqrNvBGUe15/QlZq3OooZ8WLg1AxTpaqHRCP3HNpzPPZKE2EDz8M7c+VRmCeUw1Brp4cx/PWm3kI/5A==",
"license": "MIT",
"peer": true,
"dependencies": {
- "dompurify": "3.2.7",
+ "dompurify": "3.4.15",
"marked": "14.0.0"
}
},
+ "node_modules/monaco-editor/node_modules/dompurify": {
+ "version": "3.4.15",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.15.tgz",
+ "integrity": "sha512-EUBjM+B+lkDE41iE82DDSCfkoPGfXx8IxFxPMjNzm/Uk4xDet77rTN9wqlxlVg71kK7XGuUMv6wUxJUwwv+Xyw==",
+ "license": "(MPL-2.0 OR Apache-2.0)",
+ "peer": true,
+ "optionalDependencies": {
+ "@types/trusted-types": "^2.0.7"
+ }
+ },
"node_modules/motion-dom": {
"version": "12.23.23",
"resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz",
@@ -3289,9 +3259,9 @@
}
},
"node_modules/nanoid": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "version": "3.3.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz",
+ "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==",
"dev": true,
"funding": [
{
@@ -3308,11 +3278,14 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
+ "version": "2.0.60",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.60.tgz",
+ "integrity": "sha512-OmO8+GM1JUZqXET720VrJCwkjUCXmCMQm0Z3UDDRbfNLHS4NEAvY60j5jiFv0tkKw2PNNlqOLhahVmwJIOLDIQ==",
"dev": true,
- "license": "MIT"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/normalize-path": {
"version": "3.0.0",
@@ -3395,9 +3368,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz",
+ "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3428,9 +3401,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
- "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "version": "8.5.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz",
+ "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==",
"dev": true,
"funding": [
{
@@ -3448,9 +3421,9 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.11",
+ "nanoid": "^3.3.20",
"picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
+ "source-map-js": "^1.2.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -3563,9 +3536,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "version": "6.1.5",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.5.tgz",
+ "integrity": "sha512-TEHFzb5KRDKaOgJ4TYE+0jyJtFbjLvkdVOu0fZ2b6MTWzoqZd4Le+61aEppWkvTlYePgOX4ATL1wsAIPMLTw6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3601,27 +3574,18 @@
}
},
"node_modules/prosemirror-changeset": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz",
- "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.4.tgz",
+ "integrity": "sha512-Gyuz9jYdrAeA9I7AholyOes9KUmv/lEwsC5O9s5xF5VB3EgTPsXMGUxz4+H1B+wKVPdZbvRcg1Cp3x8qX+8ofA==",
"license": "MIT",
"dependencies": {
"prosemirror-transform": "^1.0.0"
}
},
- "node_modules/prosemirror-collab": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz",
- "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
- "license": "MIT",
- "dependencies": {
- "prosemirror-state": "^1.0.0"
- }
- },
"node_modules/prosemirror-commands": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz",
- "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.2.tgz",
+ "integrity": "sha512-q6Q6szxqdu9Xd6EcdKsqXghu5nQdZTpB4Q9yd04WRc7/jt763e/rT60Owh0L1GYY+T46o5rD+9lEN36dZS43tw==",
"license": "MIT",
"dependencies": {
"prosemirror-model": "^1.0.0",
@@ -3630,9 +3594,9 @@
}
},
"node_modules/prosemirror-dropcursor": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz",
- "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==",
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.4.tgz",
+ "integrity": "sha512-VmKxhcA6a+h5oPSYmfF1ZNeQqPbyYaIxqZsKqeYCyTlPtrjUgNaHL3P8vVaO19oqAV0zuaM/axkowZHrB1P3Tg==",
"license": "MIT",
"dependencies": {
"prosemirror-state": "^1.0.0",
@@ -3641,9 +3605,9 @@
}
},
"node_modules/prosemirror-gapcursor": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.0.tgz",
- "integrity": "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz",
+ "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==",
"license": "MIT",
"dependencies": {
"prosemirror-keymap": "^1.0.0",
@@ -3653,9 +3617,9 @@
}
},
"node_modules/prosemirror-history": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz",
- "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.1.tgz",
+ "integrity": "sha512-onlwnqKvgtFg6srZOmDOAhlAy1FIHQpOExORybX0S+DvJepE5tPALrB9iGet/2sqqqrelSnB10OoiOJqAvu2DA==",
"license": "MIT",
"dependencies": {
"prosemirror-state": "^1.2.2",
@@ -3684,47 +3648,15 @@
"w3c-keyname": "^2.2.0"
}
},
- "node_modules/prosemirror-markdown": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz",
- "integrity": "sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==",
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14.0.0",
- "markdown-it": "^14.0.0",
- "prosemirror-model": "^1.25.0"
- }
- },
- "node_modules/prosemirror-menu": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz",
- "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==",
- "license": "MIT",
- "dependencies": {
- "crelt": "^1.0.0",
- "prosemirror-commands": "^1.0.0",
- "prosemirror-history": "^1.0.0",
- "prosemirror-state": "^1.0.0"
- }
- },
"node_modules/prosemirror-model": {
- "version": "1.25.4",
- "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz",
- "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==",
+ "version": "1.25.12",
+ "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.12.tgz",
+ "integrity": "sha512-Ue2gTmXMa7EhpLNhC7J+h4+ykD8ha12K6rrZFFKKJHBForfIStw5gJ6Zrf1mqqAa9NmpmEB4wp9bKmA4eUVjWg==",
"license": "MIT",
"dependencies": {
"orderedmap": "^2.0.0"
}
},
- "node_modules/prosemirror-schema-basic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz",
- "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
- "license": "MIT",
- "dependencies": {
- "prosemirror-model": "^1.25.0"
- }
- },
"node_modules/prosemirror-schema-list": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz",
@@ -3748,9 +3680,9 @@
}
},
"node_modules/prosemirror-tables": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.3.tgz",
- "integrity": "sha512-wbqCR/RlRPRe41a4LFtmhKElzBEfBTdtAYWNIGHM6X2e24NN/MTNUKyXjjphfAfdQce37Kh/5yf765mLPYDe7Q==",
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz",
+ "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==",
"license": "MIT",
"dependencies": {
"prosemirror-keymap": "^1.2.3",
@@ -3760,50 +3692,26 @@
"prosemirror-view": "^1.41.4"
}
},
- "node_modules/prosemirror-trailing-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz",
- "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
- "license": "MIT",
- "dependencies": {
- "@remirror/core-constants": "3.0.0",
- "escape-string-regexp": "^4.0.0"
- },
- "peerDependencies": {
- "prosemirror-model": "^1.22.1",
- "prosemirror-state": "^1.4.2",
- "prosemirror-view": "^1.33.8"
- }
- },
"node_modules/prosemirror-transform": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.5.tgz",
- "integrity": "sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==",
+ "version": "1.12.4",
+ "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.4.tgz",
+ "integrity": "sha512-2/WuPum3pn+O/Vi2vzpi8210ICUe2kIPXdLYjQ09Pv5DtT5bcKWMJhAKPBwvpPjpp5iOYUVwVEr0gOM1BY1Mgw==",
"license": "MIT",
"dependencies": {
"prosemirror-model": "^1.21.0"
}
},
"node_modules/prosemirror-view": {
- "version": "1.41.4",
- "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.4.tgz",
- "integrity": "sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==",
+ "version": "1.42.8",
+ "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.42.8.tgz",
+ "integrity": "sha512-ftDZjCs9AjAekXmCfJRn2U3IdlRCl0Yc4tZT1/jJWCsz4DiSifEBXtWmpJpw/4f1Rg328uAUQ+u2lCJ0+AVZkw==",
"license": "MIT",
"dependencies": {
- "prosemirror-model": "^1.20.0",
+ "prosemirror-model": "^1.25.12",
"prosemirror-state": "^1.0.0",
"prosemirror-transform": "^1.1.0"
}
},
- "node_modules/punycode.js": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/pyodide": {
"version": "0.29.0",
"resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.29.0.tgz",
@@ -3919,12 +3827,12 @@
}
},
"node_modules/react-router": {
- "version": "6.30.2",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.2.tgz",
- "integrity": "sha512-H2Bm38Zu1bm8KUE5NVWRMzuIyAV8p/JrOaBJAwVmp37AXG72+CZJlEBw6pdn9i5TBgLMhNDgijS4ZlblpHyWTA==",
+ "version": "6.30.6",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.6.tgz",
+ "integrity": "sha512-5HfK7k5im7LTOB0EqCQmfvy4C13G92Ssj1VTmouTK3AJvyjKTnFuCV0vcMAD/JS+JC4DvDIBRrlAeJIFjh5VWg==",
"license": "MIT",
"dependencies": {
- "@remix-run/router": "1.23.1"
+ "@remix-run/router": "1.23.4"
},
"engines": {
"node": ">=14.0.0"
@@ -3934,13 +3842,13 @@
}
},
"node_modules/react-router-dom": {
- "version": "6.30.2",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.2.tgz",
- "integrity": "sha512-l2OwHn3UUnEVUqc6/1VMmR1cvZryZ3j3NzapC2eUXO1dB0sYp5mvwdjiXhpUbRb21eFow3qSxpP8Yv6oAU824Q==",
+ "version": "6.30.6",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.6.tgz",
+ "integrity": "sha512-0RHKZz7wwffvkU+2MFVT2NnjK44ssLEV+m0CAJaS2Ksmorrwj7WxH00jO0SOCW26/tINUnJHToXblDs33I38YQ==",
"license": "MIT",
"dependencies": {
- "@remix-run/router": "1.23.1",
- "react-router": "6.30.2"
+ "@remix-run/router": "1.23.4",
+ "react-router": "6.30.6"
},
"engines": {
"node": ">=14.0.0"
@@ -3989,9 +3897,9 @@
}
},
"node_modules/readdirp/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4034,13 +3942,13 @@
}
},
"node_modules/rollup": {
- "version": "4.53.3",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz",
- "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==",
+ "version": "4.65.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.65.1.tgz",
+ "integrity": "sha512-HzD4IdphaPMvuAacnL/vtoq5B8FwqewKvxTtqYibWvP6VDyZ+UsTtlw5F8HIOIIpLQAkN2NOP/0sM3puo9xN/A==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@types/estree": "1.0.8"
+ "@types/estree": "1.0.9"
},
"bin": {
"rollup": "dist/bin/rollup"
@@ -4050,28 +3958,32 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.53.3",
- "@rollup/rollup-android-arm64": "4.53.3",
- "@rollup/rollup-darwin-arm64": "4.53.3",
- "@rollup/rollup-darwin-x64": "4.53.3",
- "@rollup/rollup-freebsd-arm64": "4.53.3",
- "@rollup/rollup-freebsd-x64": "4.53.3",
- "@rollup/rollup-linux-arm-gnueabihf": "4.53.3",
- "@rollup/rollup-linux-arm-musleabihf": "4.53.3",
- "@rollup/rollup-linux-arm64-gnu": "4.53.3",
- "@rollup/rollup-linux-arm64-musl": "4.53.3",
- "@rollup/rollup-linux-loong64-gnu": "4.53.3",
- "@rollup/rollup-linux-ppc64-gnu": "4.53.3",
- "@rollup/rollup-linux-riscv64-gnu": "4.53.3",
- "@rollup/rollup-linux-riscv64-musl": "4.53.3",
- "@rollup/rollup-linux-s390x-gnu": "4.53.3",
- "@rollup/rollup-linux-x64-gnu": "4.53.3",
- "@rollup/rollup-linux-x64-musl": "4.53.3",
- "@rollup/rollup-openharmony-arm64": "4.53.3",
- "@rollup/rollup-win32-arm64-msvc": "4.53.3",
- "@rollup/rollup-win32-ia32-msvc": "4.53.3",
- "@rollup/rollup-win32-x64-gnu": "4.53.3",
- "@rollup/rollup-win32-x64-msvc": "4.53.3",
+ "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
+ "@rollup/rollup-android-arm-eabi": "4.65.1",
+ "@rollup/rollup-android-arm64": "4.65.1",
+ "@rollup/rollup-darwin-arm64": "4.65.1",
+ "@rollup/rollup-darwin-x64": "4.65.1",
+ "@rollup/rollup-freebsd-arm64": "4.65.1",
+ "@rollup/rollup-freebsd-x64": "4.65.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.65.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.65.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.65.1",
+ "@rollup/rollup-linux-arm64-musl": "4.65.1",
+ "@rollup/rollup-linux-loong64-gnu": "4.65.1",
+ "@rollup/rollup-linux-loong64-musl": "4.65.1",
+ "@rollup/rollup-linux-ppc64-gnu": "4.65.1",
+ "@rollup/rollup-linux-ppc64-musl": "4.65.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.65.1",
+ "@rollup/rollup-linux-riscv64-musl": "4.65.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.65.1",
+ "@rollup/rollup-linux-x64-gnu": "4.65.1",
+ "@rollup/rollup-linux-x64-musl": "4.65.1",
+ "@rollup/rollup-openbsd-x64": "4.65.1",
+ "@rollup/rollup-openharmony-arm64": "4.65.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.65.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.65.1",
+ "@rollup/rollup-win32-x64-gnu": "4.65.1",
+ "@rollup/rollup-win32-x64-msvc": "4.65.1",
"fsevents": "~2.3.2"
}
},
@@ -4134,9 +4046,9 @@
"license": "MIT"
},
"node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz",
+ "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
@@ -4337,16 +4249,10 @@
"node": ">=14.17"
}
},
- "node_modules/uc.micro": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
- "license": "MIT"
- },
"node_modules/underscore": {
- "version": "1.13.7",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
- "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
+ "version": "1.13.8",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz",
+ "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==",
"license": "MIT"
},
"node_modules/undici-types": {
@@ -4356,9 +4262,9 @@
"license": "MIT"
},
"node_modules/update-browserslist-db": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
- "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.4.tgz",
+ "integrity": "sha512-t8wonIOdQyOjtPd2VktlBu6QjTVTks6v8bSi7kd0r2Vll8TK1JYDZtRRdbmCHOAMphkZgrzK+L+vXK4pyZ8t4A==",
"dev": true,
"funding": [
{
@@ -4417,9 +4323,9 @@
"license": "MIT"
},
"node_modules/vite": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
- "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.5.tgz",
+ "integrity": "sha512-4enwjFfi4IwtEh0w+jPzpLVOFQiPHmmzPxcHXQOyEur47o6u0jE573DmGpjA+7irXoMLYRZD5ZaFUEneS3abPg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4524,9 +4430,9 @@
}
},
"node_modules/ws": {
- "version": "8.18.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
- "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "version": "8.22.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz",
+ "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
@@ -4561,9 +4467,9 @@
"license": "ISC"
},
"node_modules/yaml": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz",
- "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==",
+ "version": "2.9.1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz",
+ "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==",
"dev": true,
"license": "ISC",
"bin": {
@@ -4571,6 +4477,9 @@
},
"engines": {
"node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
}
}
}
diff --git a/package.json b/package.json
index 24560f0..84156e3 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
"browser-image-compression": "^2.0.2",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
+ "dompurify": "^3.4.17",
"embla-carousel-react": "^8.6.0",
"framer-motion": "^12.23.24",
"gsap": "^3.14.2",
diff --git a/pages/Auth/Register.tsx b/pages/Auth/Register.tsx
index 56514fb..b98d81e 100644
--- a/pages/Auth/Register.tsx
+++ b/pages/Auth/Register.tsx
@@ -36,7 +36,7 @@ export const Register = () => {
options: {
data: {
username: username,
- avatar_url: `https://ui-avatars.com/api/?name=${username}&background=random`
+ avatar_url: `https://ui-avatars.com/api/?name=${encodeURIComponent(username)}&background=random`
}
}
});
diff --git a/pages/Karya.tsx b/pages/Karya.tsx
index 4837ff9..6b1ce81 100644
--- a/pages/Karya.tsx
+++ b/pages/Karya.tsx
@@ -29,6 +29,7 @@ import { useLoadingStatus } from '../components/LoadingTimeoutProvider';
import { supabase } from '../lib/supabase';
import { motionConfig } from '../lib/motion';
+import { sanitizeHtml } from '../lib/sanitize';
// Helper buat generate pratinjau kode live (HTML)
// Komponen Helper buat lihat Kode
@@ -488,7 +489,7 @@ export const Karya = () => {
@@ -507,7 +508,7 @@ export const Karya = () => {
{/* Iframe Pratinjau buat Kartu - Pake Data URI biar lebih kompatibel */}
@@ -893,7 +894,7 @@ export const Karya = () => {
return (
@@ -1140,7 +1141,7 @@ export const Karya = () => {
)}
@@ -1161,7 +1162,7 @@ export const Karya = () => {
) : (