diff --git a/.gitignore b/.gitignore
index 87907f5..ffce916 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,9 @@
*.out
coverage.*
+# Admin SPA
+/admin/node_modules/
+
# Env and local config
.env
.env.*
diff --git a/admin/env.d.ts b/admin/env.d.ts
new file mode 100644
index 0000000..11f02fe
--- /dev/null
+++ b/admin/env.d.ts
@@ -0,0 +1 @@
+///
| + {{ column.label }} + | +
|---|
| + + | +
| + {{ emptyText ?? t('backend::lang.list.no_records') }} + | +
| + {{ cellText(row, column) }} + | +
+ {{ t('backend::lang.list.load_failed') }} +
+L?ve(a,b,_,!0,!1,P):He(d,m,v,b,_,C,E,S,P)},ee=(a,d,m,v,b,_,C,E,S)=>{let x=0;const L=d.length;let P=a.length-1,N=L-1;for(;x<=P&&x<=N;){const D=a[x],W=d[x]=S?ft(d[x]):st(d[x]);if(Jt(D,W))w(D,W,m,null,b,_,C,E,S);else break;x++}for(;x<=P&&x<=N;){const D=a[P],W=d[N]=S?ft(d[N]):st(d[N]);if(Jt(D,W))w(D,W,m,null,b,_,C,E,S);else break;P--,N--}if(x>P){if(x<=N){const D=N+1,W=D