@coffer-org/web 7.2.0 → 7.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/ChatWidget-Bhj-WiNC.js +5 -0
- package/dist/assets/DiagnosticsPage-CAWQ6aOl.js +1 -0
- package/dist/assets/{MarkdownEditor-0mNSwLu_.js → MarkdownEditor-On2GbApm.js} +3 -3
- package/dist/assets/NewRecordView-Y6PoWPB9.js +1 -0
- package/dist/assets/PluginSettingsPage-CcTksC-8.js +1 -0
- package/dist/assets/ScanSummary-xxY2oZVM.js +1 -0
- package/dist/assets/SettingsForm-NWfklsPY.js +1 -0
- package/dist/assets/SettingsPage-CjsbuhdW.js +3 -0
- package/dist/assets/ThemeSwitcher-DKrSbFhp.js +1 -0
- package/dist/assets/{api-DD1tY5Dq.js → api-QNHQU9to.js} +1 -1
- package/dist/assets/{auth-context-BCos5wiL.js → auth-context-CoCE5oPD.js} +1 -1
- package/dist/assets/condition-B5taAXkb.js +1 -0
- package/dist/assets/countries-CoGvAZ5u.js +1 -0
- package/dist/assets/{data-size-qpzofknI.js → data-size-BMG0D59K.js} +1 -1
- package/dist/assets/{development-olQNibq5.js → development-ChLInqDF.js} +1 -1
- package/dist/assets/{esm-BsLSfif3.js → esm-CX8ST5Fv.js} +1 -1
- package/dist/assets/esm-oGoWacTd.js +24 -0
- package/dist/assets/extend-yQ8zoqGc.js +1 -0
- package/dist/assets/fields-CV3RQg0Y.js +64 -0
- package/dist/assets/file-text-CITvp61x.js +1 -0
- package/dist/assets/{icons-BTbA1N7a.js → icons-0CjpO0K1.js} +1 -1
- package/dist/assets/ilamy-view-CQD1H32m.js +7 -0
- package/dist/assets/index-4Lr8BOK1.js +22 -0
- package/dist/assets/index-lbeXf7OV.css +2 -0
- package/dist/assets/{input-tJjsdU1x.js → input-BFMNMo6y.js} +1 -1
- package/dist/assets/list-cache-DOhsI_p2.js +1 -0
- package/dist/assets/{markdown-vendor-CtaBI5gJ.js → markdown-vendor-WSL3P01P.js} +15 -15
- package/dist/assets/phone-input-BZ9vGYpI.js +21 -0
- package/dist/assets/phone-input-BpNLpzg_.js +1 -0
- package/dist/assets/plugin-Cjr7lgQH.js +1 -0
- package/dist/assets/{version-CtfLXkhy.js → plugin-label-CfdhA4_L.js} +1 -1
- package/dist/assets/{popover-C2xHG6L3.js → popover-C1KB68Kk.js} +1 -1
- package/dist/assets/registration-BBxYynR4.js +1 -0
- package/dist/assets/settings-Bo5IOwVg.js +1 -0
- package/dist/assets/shelf-Cj_pNvd-.js +1 -0
- package/dist/assets/showcase-BeBnutzT.js +1 -0
- package/dist/assets/src-0TBpEeKK.js +1 -0
- package/dist/assets/src-1AsWJbID.js +7 -0
- package/dist/assets/src-4bmZI2h_.js +1 -0
- package/dist/assets/src-B2aXBzDf.js +4 -0
- package/dist/assets/src-BHz-TcxU.js +1 -0
- package/dist/assets/src-BZK1QVol.js +1 -0
- package/dist/assets/src-BjYucEBM.js +1 -0
- package/dist/assets/src-Bl8rYgUt2.js +1 -0
- package/dist/assets/src-BmyfVP9z.js +1 -0
- package/dist/assets/src-BrHtOaqX.js +1 -0
- package/dist/assets/src-Bzgh6Ge5.js +1 -0
- package/dist/assets/src-C46sbhiF.js +2 -0
- package/dist/assets/src-CD1zBxk2.js +1 -0
- package/dist/assets/src-CE1TPDES.js +6 -0
- package/dist/assets/src-CQOQ3BNT.js +1 -0
- package/dist/assets/{src-IYiBUs1S.js → src-Cz38tTr3.js} +1 -1
- package/dist/assets/src-D14fQdLH.js +1 -0
- package/dist/assets/src-DgQcfYnz.js +1 -0
- package/dist/assets/src-DnN2GqEI.js +1 -0
- package/dist/assets/src-Dr_dOgc9.js +6 -0
- package/dist/assets/src-Ds6m7Evp2.js +1 -0
- package/dist/assets/src-Mln-mCD3.js +1 -0
- package/dist/assets/src-Q4BhkNtH.js +1 -0
- package/dist/assets/src-qJ0szNVM.js +1 -0
- package/dist/assets/src-rMuD7zD4.js +1 -0
- package/dist/assets/{src-DEcZTAam.js → src-tKMBP4Dv.js} +3 -3
- package/dist/assets/src-xh_qAK43.js +1 -0
- package/dist/assets/ui-BuqzqLDw.js +2 -0
- package/dist/assets/ui-CqUVBwcW.js +2 -0
- package/dist/assets/ui-Dj0Nsb2P.js +2 -0
- package/dist/assets/ui-QzaKLk9q.js +2 -0
- package/dist/assets/ui-vendor-C0IUUP3F.js +44 -0
- package/dist/index.html +22 -22
- package/dist-vendor/web-ui.js +20098 -14890
- package/package.json +1 -1
- package/dist/assets/ChatWidget-ByBb2eNs.js +0 -31
- package/dist/assets/DiagnosticsPage-tAFkmCz8.js +0 -1
- package/dist/assets/NewRecordView-CTSqFBfe.js +0 -1
- package/dist/assets/PluginSettingsPage-BFsSZgTa.js +0 -1
- package/dist/assets/ScanSummary-CaG-s5qh.js +0 -1
- package/dist/assets/SettingsForm-C_K9RpFr.js +0 -1
- package/dist/assets/SettingsPage-Cqp1tUyi.js +0 -3
- package/dist/assets/ThemeSwitcher-BPuCvU1U.js +0 -1
- package/dist/assets/arrow-left-DDsxjRCq.js +0 -1
- package/dist/assets/esm-DJsKiDbH.js +0 -24
- package/dist/assets/extend-BMkkNVfm.js +0 -1
- package/dist/assets/fields-GPyF03tK.js +0 -64
- package/dist/assets/file-text-DI3tERhf.js +0 -1
- package/dist/assets/index-C5rNjIku.css +0 -2
- package/dist/assets/index-DpBBejzP.js +0 -24
- package/dist/assets/lib-DU7Qh2A4.js +0 -1
- package/dist/assets/list-cache-B4i_A9fj.js +0 -1
- package/dist/assets/phone-input-BeYLRpyW.js +0 -1
- package/dist/assets/phone-input-CZF7hU3E.js +0 -21
- package/dist/assets/plugin-CFEkHH3f.js +0 -1
- package/dist/assets/plugin-ui-CKd6q8ec.js +0 -1
- package/dist/assets/settings-rQsBFoL2.js +0 -1
- package/dist/assets/shelf-CpE68_8d.js +0 -1
- package/dist/assets/showcase-CUDyXMb7.js +0 -1
- package/dist/assets/src-2QhdFJyH.js +0 -1
- package/dist/assets/src-BRA1s942.js +0 -1
- package/dist/assets/src-Bmc_xgWr.js +0 -1
- package/dist/assets/src-BnvKHmLu.js +0 -1
- package/dist/assets/src-Bv7IbF5F.js +0 -1
- package/dist/assets/src-C3X1cmlu.js +0 -1
- package/dist/assets/src-C3hdIsRT.js +0 -1
- package/dist/assets/src-CIrBx5O0.js +0 -1
- package/dist/assets/src-CTlBmB5n.js +0 -1
- package/dist/assets/src-Cp4yFztL.js +0 -4
- package/dist/assets/src-CvUhNHtO.js +0 -1
- package/dist/assets/src-D5pqHmdF.js +0 -1
- package/dist/assets/src-D9ZNj5Fi2.js +0 -1
- package/dist/assets/src-DAUYP87f2.js +0 -1
- package/dist/assets/src-DEqFDnFO.js +0 -1
- package/dist/assets/src-DXSkgVrX.js +0 -4
- package/dist/assets/src-DaHZILQZ.js +0 -1
- package/dist/assets/src-Dvbi--2I.js +0 -6
- package/dist/assets/src-Uu0k-CHA.js +0 -1
- package/dist/assets/src-WB1-7_Wh.js +0 -1
- package/dist/assets/src-dXlj2maQ.js +0 -1
- package/dist/assets/src-d_-Z83D-.js +0 -2
- package/dist/assets/src-eAsO2o4h2.js +0 -1
- package/dist/assets/src-uWOnIJWD.js +0 -6
- package/dist/assets/src-yL3q5Nfe.js +0 -1
- package/dist/assets/ui-A8aS2-NQ.js +0 -2
- package/dist/assets/ui-BK1F_c4b.js +0 -2
- package/dist/assets/ui-C9-epiVm.js +0 -2
- package/dist/assets/ui-kICtw37s.js +0 -1
- package/dist/assets/ui-vendor-BuwRGdK1.js +0 -44
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownEditor-On2GbApm.js","assets/rolldown-runtime-QTnfLwEv.js","assets/i18n-vendor-T6EnJ_TL.js","assets/react-vendor-CzSUaSLk.js","assets/input-BFMNMo6y.js","assets/popover-C1KB68Kk.js","assets/ui-vendor-C0IUUP3F.js","assets/icons-0CjpO0K1.js","assets/esm-oGoWacTd.js","assets/development-ChLInqDF.js","assets/esm-YFvMvTG9.css","assets/esm-CX8ST5Fv.js","assets/dist-COeDLrWj.js","assets/phone-input-BpNLpzg_.js","assets/phone-input-BZ9vGYpI.js","assets/src-Mln-mCD3.js","assets/src-DgQcfYnz.js","assets/fields-CV3RQg0Y.js","assets/shelf-Cj_pNvd-.js","assets/plugin-Cjr7lgQH.js","assets/extend-yQ8zoqGc.js","assets/ical-FRtCagm-.js","assets/src-BjYucEBM.js","assets/settings-Bo5IOwVg.js","assets/src-4bmZI2h_.js","assets/src-Cz38tTr3.js","assets/src-CD1zBxk2.js","assets/data-size-BMG0D59K.js","assets/src-BrHtOaqX.js","assets/showcase-BeBnutzT.js","assets/condition-B5taAXkb.js","assets/src-C46sbhiF.js","assets/src-CQOQ3BNT.js","assets/src-BZK1QVol.js","assets/src-tKMBP4Dv.js","assets/src-Dr_dOgc9.js","assets/src-Bzgh6Ge5.js","assets/src-Q4BhkNtH.js","assets/src-B2aXBzDf.js","assets/src-DnN2GqEI.js","assets/src-rMuD7zD4.js","assets/src-BHz-TcxU.js","assets/src-Ds6m7Evp2.js","assets/src-Bl8rYgUt2.js","assets/src-xh_qAK43.js","assets/src-CE1TPDES.js","assets/src-D14fQdLH.js","assets/src-0TBpEeKK.js","assets/src-BmyfVP9z.js","assets/src-qJ0szNVM.js","assets/ui-Dj0Nsb2P.js","assets/src-1AsWJbID.js","assets/countries-CoGvAZ5u.js","assets/markdown-vendor-WSL3P01P.js","assets/registration-BBxYynR4.js","assets/ui-BuqzqLDw.js","assets/ui-CqUVBwcW.js","assets/ui-QzaKLk9q.js","assets/SettingsPage-CjsbuhdW.js","assets/ThemeSwitcher-DKrSbFhp.js","assets/api-QNHQU9to.js","assets/auth-context-CoCE5oPD.js","assets/plugin-label-CfdhA4_L.js","assets/DiagnosticsPage-CAWQ6aOl.js","assets/PluginSettingsPage-CcTksC-8.js","assets/SettingsForm-NWfklsPY.js","assets/NewRecordView-Y6PoWPB9.js","assets/list-cache-DOhsI_p2.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e,r as t}from"./rolldown-runtime-QTnfLwEv.js";import{a as n,i as r,r as i,t as a}from"./i18n-vendor-T6EnJ_TL.js";import{a as o,d as s,f as c,i as l,l as u,m as d,n as f,o as p,p as m,r as h,s as g,t as _,u as v}from"./react-vendor-CzSUaSLk.js";import{$ as y,$n as b,$r as x,$t as S,A as C,An as w,At as T,B as E,Bn as ee,Bt as te,C as ne,Ci as D,Cn as re,Cr as ie,Ct as ae,D as oe,Di as se,Dn as ce,Dr as le,Dt as ue,E as de,Ei as fe,En as pe,Er as me,Et as he,F as ge,Fn as _e,Fr as ve,Ft as ye,G as be,Gn as xe,Gr as Se,Gt as Ce,H as we,Hn as Te,Hr as Ee,Ht as De,I as Oe,In as ke,Ir as Ae,It as je,J as Me,Jn as Ne,Jr as Pe,Jt as Fe,K as Ie,Kn as Le,Kr as Re,Kt as ze,L as Be,Ln as Ve,Lr as He,Lt as Ue,M as We,Mn as Ge,Mr as Ke,Mt as qe,N as Je,Nn as Ye,Nt as Xe,O as Ze,Oi as Qe,On as $e,Ot as et,P as tt,Pn as nt,Pt as rt,Q as it,Qn as at,Qr as ot,Qt as st,R as ct,Rn as lt,Rr as ut,Rt as dt,S as ft,Si as pt,Sn as mt,Sr as ht,St as gt,T as _t,Ti as vt,Tn as yt,Tr as bt,Tt as xt,Un as St,Ur as Ct,Ut as wt,V as O,Vn as k,Vt as Tt,W as Et,Wn as Dt,X as Ot,Xn as kt,Xr as At,Xt as jt,Y as Mt,Yn as Nt,Yr as Pt,Yt as Ft,Z as It,Zn as Lt,Zr as Rt,Zt as zt,_ as Bt,_r as Vt,_t as Ht,a as Ut,ai as Wt,an as Gt,ar as Kt,at as qt,b as Jt,bi as Yt,bn as Xt,bt as Zt,c as Qt,ci as $t,cn as en,cr as tn,ct as nn,d as rn,di as an,dn as on,dr as sn,dt as A,ei as cn,en as ln,er as un,et as dn,f as fn,fi as pn,fn as mn,fr as hn,ft as gn,g as _n,gi as vn,gn as yn,gr as bn,gt as j,h as xn,hi as Sn,hn as Cn,hr as wn,i as Tn,in as En,ir as Dn,it as On,j as kn,jn as An,jr as jn,jt as Mn,k as Nn,kn as Pn,kr as Fn,kt as In,l as Ln,li as Rn,ln as zn,lr as Bn,lt as Vn,m as Hn,mi as Un,mn as Wn,mr as Gn,mt as Kn,n as qn,ni as Jn,nn as Yn,nr as Xn,nt as Zn,o as Qn,oi as $n,on as er,or as tr,ot as nr,p as rr,pi as ir,pn as ar,pr as or,pt as sr,q as cr,qn as lr,qr as ur,qt as dr,ri as fr,rn as pr,rr as mr,rt as hr,s as gr,si as _r,sn as vr,sr as yr,st as br,ti as xr,tn as Sr,tr as Cr,tt as wr,u as Tr,ui as Er,un as Dr,ur as Or,ut as kr,v as Ar,vi as jr,vn as Mr,vr as Nr,vt as Pr,w as Fr,wi as Ir,wn as Lr,wr as Rr,x as zr,xi as Br,xn as Vr,xr as Hr,xt as Ur,y as Wr,yi as Gr,yn as Kr,yr as qr,yt as Jr,z as Yr,zn as Xr,zt as Zr}from"./src-1AsWJbID.js";import{r as Qr}from"./countries-CoGvAZ5u.js";import{M as $r,S as ei,a as ti,c as ni,d as ri,i as ii,l as ai,m as oi,n as si,o as ci,p as li,t as ui,v as di,y as fi}from"./fields-CV3RQg0Y.js";import{i as pi,n as mi,r as hi,t as M}from"./input-BFMNMo6y.js";import{t as gi}from"./ThemeSwitcher-DKrSbFhp.js";import{c as _i,f as vi,i as yi,l as N,n as bi,o as xi,r as Si,s as Ci}from"./phone-input-BZ9vGYpI.js";import{a as wi,i as Ti,s as Ei,t as Di,u as Oi}from"./popover-C1KB68Kk.js";import{t as ki}from"./file-text-CITvp61x.js";import{St as Ai,xt as ji}from"./ui-vendor-C0IUUP3F.js";import{c as Mi,s as Ni}from"./condition-B5taAXkb.js";import{_ as Pi,a as Fi,b as Ii,c as Li,d as Ri,h as zi,i as Bi,l as Vi,m as Hi,o as Ui,p as Wi,s as Gi,t as Ki,u as qi,v as Ji,y as Yi}from"./shelf-Cj_pNvd-.js";import{a as Xi,c as Zi,d as Qi,f as $i,i as ea,l as ta,n as na,o as ra,p as ia,r as aa,s as oa,t as sa,u as ca}from"./list-cache-DOhsI_p2.js";import{C as la,D as ua,E as da,F as fa,L as pa,M as ma,O as ha,R as ga,S as _a,T as va,_ as ya,b as ba,d as xa,f as Sa,g as Ca,i as wa,j as Ta,k as Ea,l as Da,n as Oa,o as ka,p as Aa,r as ja,s as Ma,t as Na,u as Pa,v as Fa,w as Ia,x as La}from"./api-QNHQU9to.js";import{t as Ra}from"./auth-context-CoCE5oPD.js";import"./plugin-Cjr7lgQH.js";import{t as za}from"./SettingsForm-NWfklsPY.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var P=t(n(),1),Ba=d(),Va={common:{loading:`Завантаження…`,saving:`Збереження…`,error:`Помилка`,back:`Назад`,yes:`Так`,no:`Ні`,notFound:`Тип не знайдено`,daysUnit:`дн.`,peopleUnit:`ос.`,empty:`Немає записів`},actions:{new:`Новий`,addFirst:`Додати перший запис`,edit:`Редагувати`,copy:`Копіювати`,copied:`Скопійовано`,save:`Зберегти`,create:`Створити`,cancel:`Скасувати`,confirm:`Підтвердити`,confirmDelete:`Видалити цей запис?`,delete:`Видалити`,clear:`Очистити`,favoriteAdd:`Додати до обраного`,favoriteRemove:`Вилучити з обраного`,upload:`Завантажити`,retry:`Повторити`,replace:`Замінити`,confirmDeletePhoto:`Видалити фото?`,add:`Додати`,pickColor:`Обрати колір`,countrySearch:`наприклад, США`,actionSuccess:`Готово`,actionError:`Помилка`,actionNotFound:`Дію не зареєстровано`,notice:`Повідомлення`},save:{saving:`Збереження…`,done:`Збережено`,failed:`Не вдалося зберегти`},upload:{tooLarge:`Файл завеликий (макс. 25 МБ)`,failed:`Не вдалося завантажити`,progress:`Прогрес завантаження`},files:{preview:`Попередній перегляд`,download:`Завантажити`,loadingPreview:`Завантаження попереднього перегляду…`,previewFailed:`Не вдалося завантажити попередній перегляд`,previewTruncated:`Попередній перегляд скорочено до 1 МБ.`,none:`Файлу ще немає`,add:`Додати файл`},source:{download:`Завантажити собі`,empty:`Файлу немає`},localpath:{listFailed:`Не вдалося отримати список каталогу`,up:`На рівень вище`,showHidden:`Показати приховані файли`,hideHidden:`Сховати приховані файли`,selectFolder:`Обрати цю теку`,browse:`Огляд`},blocks:{prevMonth:`Попередній місяць`,nextMonth:`Наступний місяць`},embed:{open:`Відкрити`,pastePlaceholder:`Вставте URL…`,resolveFailed:`Не вдалося завантажити прев'ю`},reminder:{today:`сьогодні`,inDays_one:`через {{count}} день`,inDays_few:`через {{count}} дні`,inDays_many:`через {{count}} днів`,inDays_other:`через {{count}} днів`,inWeeks_one:`через {{count}} тиждень`,inWeeks_few:`через {{count}} тижні`,inWeeks_many:`через {{count}} тижнів`,inWeeks_other:`через {{count}} тижнів`,inMonths_one:`через {{count}} місяць`,inMonths_few:`через {{count}} місяці`,inMonths_many:`через {{count}} місяців`,inMonths_other:`через {{count}} місяців`,overdue:`прострочено {{days}} дн`},age:{years_one:`{{count}} рік`,years_few:`{{count}} роки`,years_many:`{{count}} років`,years_other:`{{count}} років`},timetable:{next:`наступний`,runs_one:`{{count}} рейс`,runs_few:`{{count}} рейси`,runs_many:`{{count}} рейсів`,runs_other:`{{count}} рейсів`},units:{days:`днів`},nav:{selectType:`Оберіть тип у меню`,plugins:`Плагіни`,home:`Головна`,search:`Пошук`,settings:`Налаштування`,trash:`Кошик`,toggleSidebar:`Показати або сховати меню`},trash:{title:`Кошик`,description:`Видалені записи зберігаються в базі даних. Тут їх можна відновити або видалити назавжди.`,empty:`Кошик порожній`,restore:`Відновити`,purge:`Видалити назавжди`,confirmPurge:`Видалити запис назавжди? Цю дію не можна скасувати.`,restored:`Запис відновлено`,purged:`Запис видалено назавжди`},dashboard:{title:`Головна`,empty:`Немає активних полиць`},settings:{title:`Налаштування`,appearance:`Вигляд`,theme:`Тема`,language:`Мова`,systemDescription:`Налаштування всієї системи та базові пакети.`,systemUpdateTitle:`Оновити базові пакети (core + рантайм)`,componentsTitle:`Компоненти`,componentsDescription:`Системні пакети та плагіни: оновлення, увімкнення, видалення даних.`,personalTitle:`Особисте`,usersTitle:`Користувачі`,usersDescription:`Керування всіма акаунтами інстансу.`,diagnosticsTitle:`Діагностика`,diagnosticsDescription:`Стан сервера, агенти, конектори та останні події оркестратора.`},appearance:{label:`Оформлення`,theme:`Тема`,colours:`Відтінок`,neutral:`Без кольору`,hue:{red:`Червоний`,orange:`Помаранчевий`,yellow:`Жовтий`,lime:`Лайм`,green:`Зелений`,emerald:`Смарагд`,teal:`Бірюза`,azure:`Лазур`,blue:`Синій`,violet:`Фіолетовий`,purple:`Пурпуровий`,pink:`Рожевий`,grey:`Сірий`}},theme:{label:`Тема`,auto:`Авто`,light:`Світла`,dark:`Темна`,eink:`E-ink`},diagnostics:{title:`Діагностика`,description:`Стан сервера та останні події оркестратора. Вміст повідомлень тут не показується.`,adminOnly:`Діагностика доступна лише адміністраторам.`,refresh:`Оновити`,refreshing:`Оновлення…`,loadFailed:`Не вдалося завантажити діагностику.`,server:`Сервер`,healthy:`Працює`,unavailable:`Недоступний`,agents:`Зареєстровані агенти`,connectors:`Зареєстровані конектори`,versions:`Версії пакетів`,component:`Компонент`,installed:`Встановлена`,latest:`Остання`,outdated:`Доступні оновлення для пакетів: {{count}}.`,noData:`Немає даних про версії.`,recentMessages:`Останні повідомлення`,time:`Час`,connector:`Конектор`,role:`Роль`,duration:`Тривалість`,tokens:`Токени вхід / вихід`,noMessages:`Метрик повідомлень поки немає.`,recentErrors:`Останні помилки виконання`,noErrors:`Після останнього запуску помилок не записано.`},group:{title:`Групування`,field:`Поле`,all:`Всі записи`,noValue:`Без значення`,yes:`Так`,no:`Ні`},table:{total:`Разом`,noValue:`Без значення`},triState:{yes:`Так`,no:`Ні`,unknown:`Невідомо`},plugins:{loading:`Завантаження…`,restartBannerBefore:`Зміни застосуються після `,restartBannerBold:`рестарту сервера`,restartBannerAfter:` (набір активних плагінів читається на старті).`,confirmPurge:`Видалити ВСІ дані плагіна «{{id}}»? Таблиці буде дропнуто безповоротно.`,genericError:`Помилка: {{code}}`,settingsTitle:`Налаштування`,purgeButton:`Видалити дані`,purgeTitle:`Видалити всі дані плагіна (безповоротно)`,switchDisable:`Вимкнути`,switchEnable:`Увімкнути`,blockedByDependents:`Не можна вимкнути: від нього залежать увімкнені плагіни — {{list}}`,metaDepends:`залежить:`,metaLibraries:`бібліотеки:`,metaExtends:`розширення:`,updateButton:`Оновити`,checkUpdates:`Перевірити оновлення`,checkingUpdates:`Перевіряю…`,updateCheckError:`Не вдалося перевірити оновлення.`,updatesAvailable:`Доступні оновлення: {{count}}.`,noUpdates:`Оновлень немає.`,lastChecked:`Перевірено о {{time}}.`,restartTimeout:`Пакети встановлено, але сервер не підтвердив перезапуск за 60 секунд. Перевірте діагностику та повторіть перевірку пізніше.`,updateTitle:`Оновити з v{{from}} до v{{to}}`,confirmUpdate:`Оновити плагін «{{id}}» з v{{from}} до v{{to}}? Сервер перезапуститься одразу після встановлення — переконайтесь, що він працює під process-manager'ом (systemd/pm2/docker), який автоматично його підніме. Рекомендовано зробити резервну копію бази даних заздалегідь.`,updateError:`Оновлення не вдалося`,updateAllButton:`Оновити все ({{count}})`,runtimeLabel:`Рантайм (server/web/cli)`,confirmUpdateAll:`Оновити {{count}} компонент(ів)?
|
|
3
|
+
|
|
4
|
+
{{list}}
|
|
5
|
+
|
|
6
|
+
Сервер перезапуститься одразу після встановлення — переконайтесь, що він працює під process-manager'ом (systemd/pm2/docker), який автоматично його підніме. Рекомендовано зробити резервну копію бази даних заздалегідь.`,errors:{has_dependents:`Від нього залежать увімкнені: {{list}}.`,missing_deps:`Спершу увімкни залежності: {{list}}.`,unknown_plugin:`Невідомий плагін.`}},auth:{loginTitle:`Вхід`,welcomeEyebrow:`Особистий простір`,welcomeTitle:`Ваші дані. Під вашим контролем.`,welcomeText:`Увійдіть, щоб продовжити роботу з Coffer.`,secureConnection:`Захищене з’єднання`,setupTitle:`Створити першого адміністратора`,login:`Логін`,password:`Пароль`,displayName:`Ім'я`,signIn:`Увійти`,createAccount:`Створити акаунт`,invalidCredentials:`Невірний логін або пароль.`,genericError:`Щось пішло не так.`,accountTitle:`Мій акаунт`,sessionTitle:`Сеанс`,logoutDescription:`Завершити поточний сеанс на цьому пристрої.`,logout:`Вийти`,fieldDisplayName:`Ім'я`,fieldLogin:`Логін`,fieldPasswordOptional:`Новий пароль (лишіть порожнім, щоб не міняти)`,tokensTitle:`API-токени`,tokenNamePlaceholder:`Назва токена (напр. "agent")`,tokenCreate:`Створити токен`,tokenCreatedOnce:`Скопіюйте токен зараз — більше він не покажеться:`,tokenRevoke:`Відкликати`,tokenConfirmRevoke:`Відкликати цей токен? Усе, що його використовує, перестане працювати.`,grantsTitle:`Підключені застосунки`,grantsEmpty:`Жоден застосунок ще не авторизовано. Вони зʼявляться тут після підтвердження на екрані згоди Coffer.`,grantConfirmRevoke:`Відключити цей застосунок? Його токени доступу перестануть працювати одразу.`,linksTitle:`Прив’язані акаунти`,linksEmpty:`Ще немає прив’язаних акаунтів.`,linkMint:`Прив’язати акаунт`,linkNotLinked:`Не прив’язаний`,linkCodeCreatedOnce:`Скопіюйте цей код зараз — більше він не покажеться:`,linkOpenConnector:`Відкрити {{connector}}`,linkConfirmUnlink:`Відв’язати цей акаунт? Він більше не зможе звертатися до вас тут.`,linkUnlink:`Відв’язати`,usersTitle:`Користувачі`,addUser:`Додати користувача`,roleAdmin:`Адмін`,roleMember:`Учасник`,fieldRole:`Роль`,fieldDisabled:`Вимкнено`,userCreateTitle:`Новий користувач`,lastAdminError:`Не можна прибрати останнього адміна.`},form:{serverRejected:`Сервер відхилив:`,createTitle:`Новий — {{label}}`,editTitle:`Редагувати — {{label}}`,mdPlaceholder:`Текст у форматі Markdown…`,mdLink:`Адреса посилання`,md:{bold:`Жирний`,italic:`Курсив`,code:`Код у рядку`,h1:`Заголовок 1`,h2:`Заголовок 2`,bulletList:`Маркований список`,orderedList:`Нумерований список`,blockquote:`Цитата`,strike:`Закреслений`,h3:`Заголовок 3`,taskList:`Чеклист`,codeBlock:`Блок коду`,horizontalRule:`Розділювач`,table:`Таблиця`,link:`Посилання`,unlink:`Прибрати посилання`,image:`Зображення`,imageUrl:`Адреса зображення`,imageAlt:`Опис`,undo:`Скасувати`,redo:`Повторити`,addRow:`Додати рядок`,addColumn:`Додати стовпець`,deleteRow:`Видалити рядок`,deleteColumn:`Видалити стовпець`,deleteTable:`Видалити таблицю`},photo:`+ Фото`,properties:`Властивості`,keyPlaceholder:`ключ`,valuePlaceholderShort:`значення`,addProperty:`Властивість`,days:`дн`,hours:`год`,minutes:`хв`,seconds:`с`,addTag:`Додати тег…`,addRow:`+ Додати рядок`,search:`Пошук…`,loading:`Завантаження…`,loadError:`Помилка завантаження`,noRecords:`Немає записів`,noSeries:`Поки немає вимірювань`,noDates:`Поки немає датованих записів`,offGrid:`{{n}} поза сіткою`,unknownStage:`Етап не зі списку`,addRecord:`+ Додати…`,addItem:`+ Додати пункт`},list:{empty:`Поки порожньо`,searchPlaceholder:`Пошук…`,sortBy:`Сортувати за`,sortRating:`Рейтинг`,asc:`За зростанням`,desc:`За спаданням`,peopleCount_one:`{{count}} ос.`,peopleCount_few:`{{count}} ос.`,peopleCount_many:`{{count}} ос.`,peopleCount_other:`{{count}} ос.`,pairsCount_one:`{{count}} пара`,pairsCount_few:`{{count}} пари`,pairsCount_many:`{{count}} пар`,pairsCount_other:`{{count}} пар`},search:{title:`Глобальний пошук`,placeholder:`Пошук полиць і записів…`,allShelves:`Усі полиці`,results:`Результати`,noResults:`Нічого не знайдено`},record:{count_one:`{{count}} запис`,count_few:`{{count}} записи`,count_many:`{{count}} записів`,count_other:`{{count}} записів`,hide:`Сховати`,show:`Показати`},extend:{shownWhen:`Показується коли:`},weekdaysShort:[`Пн`,`Вт`,`Ср`,`Чт`,`Пт`,`Сб`,`Нд`],lang:{uk:`Українська`,ru:`Русский`,en:`English`},validation:{server:`Сервер відхилив це значення`,required:`обов'язкове поле`,invalid_type:`неприпустимий тип значення`,min_length:`мінімум {{min}} симв.`,max_length:`максимум {{max}} симв.`,pattern:`неприпустимий формат`,email:`некоректна email-адреса`,min:`не менше {{min}}`,max:`не більше {{max}}`,int:`має бути цілим`,date_format:`формат YYYY-MM-DD`,date_min:`не раніше {{min}}`,date_max:`не пізніше {{max}}`,enum:`оберіть зі списку`,json:`невалідний JSON`,structure:`невалідна структура`,int_list:`невалідні посилання на записи`,kv_single:`дозволено лише одну пару`,links_structure:`невалідна структура підключень`,time_format:`формат HH:MM:SS`,datetime_format:`формат YYYY-MM-DDTHH:MM`,tags_list:`очікується масив тегів`,slotted_length:`невірна кількість елементів`,check_structure:`невалідна структура відмітки`,measured_structure:`очікується {value, unit}`,measured_unit:`невідома одиниця`,derived:`обчислюване поле — недоступне для запису`,money_structure:`некоректна сума`,geo_structure:`очікується {lat, lng}`,illustrated_structure:`очікується {text, image}`,dimensions_structure:`очікується {w, h, d}`,money_currency:`невідома валюта`,color_format:`формат #RRGGBB`,row_structure:`невалідна структура рядків`,row_duplicate:`значення «{{key}}» повторюється між рядками`,array:`очікується масив`,array_item:`невалідне значення у масиві`,ip_structure:`невалідна IP-адреса`,cidr_structure:`невалідний CIDR`,per_weekday:`масив із 7 чисел`,period_order:`початок не може бути після кінця`,period_structure:`очікується {from, until}`,range_structure:`очікується {from, to}`,last_admin:`Не можна прибрати останнього адміна.`,range_order:`from має бути ≤ to`,file_structure:`некоректний файл`,file_remote_url:`file-поле тримає завантажений файл, а не віддалений URL`,file_unknown_key:`у файлі можуть бути лише name, mime і size`,file_name:`очікується голе ім’я файлу, без шляху`,file_not_uploaded:`такого завантаженого файлу немає — спершу завантажте його`,code_structure:`очікується {code, lang}`,source_binary:`очікується текстовий файл, не бінарний`,source_too_large:`файл завеликий (ліміт {{maxBytes}} байт)`,url:`некоректний URL`,embed_structure:`некоректне вкладення`,colorname:`невідома назва кольору`,notWritable:`нема куди записувати`},core:{backrefs:{more_one:`ще {{count}}`,more_few:`ще {{count}}`,more_many:`ще {{count}}`,more_other:`ще {{count}}`},settings:{label:`Система`,publicUrl:`Публічна адреса`,publicUrlHint:`Лише origin, без кінцевого слеша — напр. https://coffer.example`,language:`Мова`,agent_id:`Агент`,trigger_prefix:`Префікс тригера`,reply_window:`Вікно відповіді (с)`},fields:{type:`Тип`,subtype:`Підтип`,name:`Назва`,weekday:`День тижня`,value:`Значення`,text:`Текст`,check:`Позначка`,currency:`Валюта`},presets:{slug:`лише малі латинські літери, цифри й дефіс`,imei:`IMEI — рівно 15 цифр`,mac:`MAC — формат XX:XX:XX:XX:XX:XX`,iban:`IBAN — 2 літери, 2 цифри, далі літери й цифри (без пробілів)`,hostname:`імʼя хоста / FQDN (мітки через крапку: літери, цифри, дефіс)`,tel:`номер телефону`,link:`URL (scheme:// або домен із крапкою)`},period:{from:`З`,until:`По`},sex:{M:`Чоловіча`,F:`Жіноча`,other:`Інша`},weekdays:{mon:`Понеділок`,tue:`Вівторок`,wed:`Середа`,thu:`Четвер`,fri:`П'ятниця`,sat:`Субота`,sun:`Неділя`},colors:Qr.uk,countries:{AF:`Афганістан`,AL:`Албанія`,DZ:`Алжир`,AD:`Андорра`,AO:`Ангола`,AG:`Антигуа і Барбуда`,AR:`Аргентина`,AM:`Вірменія`,AU:`Австралія`,AT:`Австрія`,AZ:`Азербайджан`,BS:`Багамські Острови`,BH:`Бахрейн`,BD:`Бангладеш`,BY:`Білорусь`,BE:`Бельгія`,BZ:`Беліз`,BJ:`Бенін`,BT:`Бутан`,BO:`Болівія`,BA:`Боснія і Герцеговина`,BW:`Ботсвана`,BR:`Бразилія`,BN:`Бруней`,BG:`Болгарія`,BF:`Буркіна-Фасо`,BI:`Бурунді`,CV:`Кабо-Верде`,KH:`Камбоджа`,CM:`Камерун`,CA:`Канада`,CF:`ЦАР`,TD:`Чад`,CL:`Чилі`,CN:`Китай`,CO:`Колумбія`,KM:`Комори`,CG:`Конго`,CD:`ДР Конго`,CR:`Коста-Рика`,CI:`Кот-д'Івуар`,HR:`Хорватія`,CU:`Куба`,CY:`Кіпр`,CZ:`Чехія`,DK:`Данія`,DJ:`Джибуті`,DM:`Домініка`,DO:`Домініканська Республіка`,EC:`Еквадор`,EG:`Єгипет`,SV:`Сальвадор`,GQ:`Екваторіальна Гвінея`,ER:`Еритрея`,EE:`Естонія`,SZ:`Есватіні`,ET:`Ефіопія`,FJ:`Фіджі`,FI:`Фінляндія`,FR:`Франція`,GA:`Габон`,GM:`Гамбія`,GE:`Грузія`,DE:`Німеччина`,GH:`Гана`,GR:`Греція`,GD:`Гренада`,GT:`Гватемала`,GN:`Гвінея`,GW:`Гвінея-Бісау`,GY:`Гаяна`,HT:`Гаїті`,HN:`Гондурас`,HU:`Угорщина`,IS:`Ісландія`,IN:`Індія`,ID:`Індонезія`,IR:`Іран`,IQ:`Ірак`,IE:`Ірландія`,IL:`Ізраїль`,IT:`Італія`,JM:`Ямайка`,JP:`Японія`,JO:`Йорданія`,KZ:`Казахстан`,KE:`Кенія`,KI:`Кірибаті`,KP:`КНДР`,KR:`Південна Корея`,KW:`Кувейт`,KG:`Киргизстан`,LA:`Лаос`,LV:`Латвія`,LB:`Ліван`,LS:`Лесото`,LR:`Ліберія`,LY:`Лівія`,LI:`Ліхтенштейн`,LT:`Литва`,LU:`Люксембург`,MG:`Мадагаскар`,MW:`Малаві`,MY:`Малайзія`,MV:`Мальдіви`,ML:`Малі`,MT:`Мальта`,MH:`Маршаллові Острови`,MR:`Мавританія`,MU:`Маврикій`,MX:`Мексика`,FM:`Мікронезія`,MD:`Молдова`,MC:`Монако`,MN:`Монголія`,ME:`Чорногорія`,MA:`Марокко`,MZ:`Мозамбік`,MM:`М'янма`,NA:`Намібія`,NR:`Науру`,NP:`Непал`,NL:`Нідерланди`,NZ:`Нова Зеландія`,NI:`Нікарагуа`,NE:`Нігер`,NG:`Нігерія`,MK:`Північна Македонія`,NO:`Норвегія`,OM:`Оман`,PK:`Пакистан`,PW:`Палау`,PA:`Панама`,PG:`Папуа Нова Гвінея`,PY:`Парагвай`,PE:`Перу`,PH:`Філіппіни`,PL:`Польща`,PT:`Португалія`,QA:`Катар`,RO:`Румунія`,RU:`Росія`,RW:`Руанда`,KN:`Сент-Кітс і Невіс`,LC:`Сент-Люсія`,VC:`Сент-Вінсент і Гренадіни`,WS:`Самоа`,SM:`Сан-Марино`,ST:`Сан-Томе і Принсіпі`,SA:`Саудівська Аравія`,SN:`Сенегал`,RS:`Сербія`,SC:`Сейшели`,SL:`Сьєрра-Леоне`,SG:`Сінгапур`,SK:`Словаччина`,SI:`Словенія`,SB:`Соломонові Острови`,SO:`Сомалі`,ZA:`ПАР`,SS:`Південний Судан`,ES:`Іспанія`,LK:`Шрі-Ланка`,SD:`Судан`,SR:`Суринам`,SE:`Швеція`,CH:`Швейцарія`,SY:`Сирія`,TW:`Тайвань`,TJ:`Таджикистан`,TZ:`Танзанія`,TH:`Таїланд`,TL:`Тімор-Лесте`,TG:`Того`,TO:`Тонга`,TT:`Тринідад і Тобаго`,TN:`Туніс`,TR:`Туреччина`,TM:`Туркменістан`,TV:`Тувалу`,UG:`Уганда`,UA:`Україна`,AE:`ОАЕ`,GB:`Велика Британія`,US:`США`,UY:`Уругвай`,UZ:`Узбекистан`,VU:`Вануату`,VE:`Венесуела`,VN:`В'єтнам`,YE:`Ємен`,ZM:`Замбія`,ZW:`Зімбабве`},units:{UAH:`₴ UAH`,USD:`$ USD`,EUR:`€ EUR`,GBP:`£ GBP`,CZK:`Kč CZK`,PLN:`zł PLN`,mg:`мг`,g:`г`,kg:`кг`,t:`т`,oz:`oz`,lb:`lb`,ml:`мл`,cl:`сл`,dl:`дл`,l:`л`,tsp:`ч.л.`,tbsp:`ст.л.`,cup:`чашка`,fl_oz:`fl oz`,pcs:`шт`,pair:`пара`,set:`набір`,pack:`пачка`,s:`сек`,min:`хв`,h:`год`,d:`день`,w:`тиждень`,C:`°C`,F:`°F`,K:`К`,mm:`мм`,cm:`см`,m:`м`,km:`км`,in:`дюйм`,ft:`фут`,mi:`миля`,nm:`морська миля`,cm2:`см²`,m2:`м²`,ha:`га`,km2:`км²`,ft2:`фут²`,ac:`акр`,B:`Б`,KB:`КБ`,MB:`МБ`,GB:`ГБ`,TB:`ТБ`,mAh:`мАг`,Ah:`Аг`,Wh:`Вт·год`,kWh:`кВт·год`,mW:`мВт`,W:`Вт`,kW:`кВт`,mV:`мВ`,V:`В`,ms:`м/с`,kmh:`км/год`,mph:`mph`,kn:`вузол`,"%":`%`,ppm:`ppm`}}},Ha={common:{loading:`Загрузка…`,saving:`Сохранение…`,error:`Ошибка`,back:`Назад`,yes:`Да`,no:`Нет`,notFound:`Тип не найден`,daysUnit:`дн.`,peopleUnit:`чел.`,empty:`Нет записей`},actions:{new:`Новый`,addFirst:`Добавить первую запись`,edit:`Редактировать`,copy:`Копировать`,copied:`Скопировано`,save:`Сохранить`,create:`Создать`,cancel:`Отмена`,confirm:`Подтвердить`,confirmDelete:`Удалить эту запись?`,delete:`Удалить`,clear:`Очистить`,favoriteAdd:`Добавить в избранное`,favoriteRemove:`Убрать из избранного`,upload:`Загрузить`,retry:`Повторить`,replace:`Заменить`,confirmDeletePhoto:`Удалить фото?`,add:`Добавить`,pickColor:`Выбрать цвет`,countrySearch:`например, США`,actionSuccess:`Готово`,actionError:`Ошибка`,actionNotFound:`Действие не зарегистрировано`,notice:`Уведомление`},save:{saving:`Сохранение…`,done:`Сохранено`,failed:`Не удалось сохранить`},upload:{tooLarge:`Файл слишком большой (макс. 25 МБ)`,failed:`Не удалось загрузить`,progress:`Прогресс загрузки`},files:{preview:`Предпросмотр`,download:`Скачать`,loadingPreview:`Загрузка предпросмотра…`,previewFailed:`Не удалось загрузить предпросмотр`,previewTruncated:`Предпросмотр сокращён до 1 МБ.`,none:`Файла пока нет`,add:`Добавить файл`},source:{download:`Скачать`,empty:`Файла нет`},localpath:{listFailed:`Не удалось получить список каталога`,up:`На уровень выше`,showHidden:`Показать скрытые файлы`,hideHidden:`Скрыть скрытые файлы`,selectFolder:`Выбрать эту папку`,browse:`Обзор`},blocks:{prevMonth:`Предыдущий месяц`,nextMonth:`Следующий месяц`},embed:{open:`Открыть`,pastePlaceholder:`Вставьте URL…`,resolveFailed:`Не удалось загрузить превью`},reminder:{today:`сегодня`,inDays_one:`через {{count}} день`,inDays_few:`через {{count}} дня`,inDays_many:`через {{count}} дней`,inDays_other:`через {{count}} дней`,inWeeks_one:`через {{count}} неделю`,inWeeks_few:`через {{count}} недели`,inWeeks_many:`через {{count}} недель`,inWeeks_other:`через {{count}} недель`,inMonths_one:`через {{count}} месяц`,inMonths_few:`через {{count}} месяца`,inMonths_many:`через {{count}} месяцев`,inMonths_other:`через {{count}} месяцев`,overdue:`просрочено {{days}} дн`},age:{years_one:`{{count}} год`,years_few:`{{count}} года`,years_many:`{{count}} лет`,years_other:`{{count}} лет`},timetable:{next:`следующий`,runs_one:`{{count}} рейс`,runs_few:`{{count}} рейса`,runs_many:`{{count}} рейсов`,runs_other:`{{count}} рейсов`},units:{days:`дней`},nav:{selectType:`Выберите тип в меню`,plugins:`Плагины`,home:`Главная`,search:`Поиск`,settings:`Настройки`,trash:`Корзина`,toggleSidebar:`Показать или скрыть меню`},trash:{title:`Корзина`,description:`Удалённые записи сохраняются в базе данных. Здесь их можно восстановить или удалить навсегда.`,empty:`Корзина пуста`,restore:`Восстановить`,purge:`Удалить навсегда`,confirmPurge:`Удалить запись навсегда? Это действие нельзя отменить.`,restored:`Запись восстановлена`,purged:`Запись удалена навсегда`},dashboard:{title:`Главная`,empty:`Нет активных полок`},settings:{title:`Настройки`,appearance:`Вид`,theme:`Тема`,language:`Язык`,systemDescription:`Настройки всей системы и базовые пакеты.`,systemUpdateTitle:`Обновить базовые пакеты (core + рантайм)`,componentsTitle:`Компоненты`,componentsDescription:`Системные пакеты и плагины: обновление, включение, удаление данных.`,personalTitle:`Личное`,usersTitle:`Пользователи`,usersDescription:`Управление всеми аккаунтами инстанса.`,diagnosticsTitle:`Диагностика`,diagnosticsDescription:`Состояние сервера, агенты, коннекторы и последние события оркестратора.`},appearance:{label:`Оформление`,theme:`Тема`,colours:`Оттенок`,neutral:`Без цвета`,hue:{red:`Красный`,orange:`Оранжевый`,yellow:`Жёлтый`,lime:`Лайм`,green:`Зелёный`,emerald:`Изумруд`,teal:`Бирюза`,azure:`Лазурь`,blue:`Синий`,violet:`Фиолетовый`,purple:`Пурпурный`,pink:`Розовый`,grey:`Серый`}},theme:{label:`Тема`,auto:`Авто`,light:`Светлая`,dark:`Тёмная`,eink:`E-ink`},diagnostics:{title:`Диагностика`,description:`Состояние сервера и последние события оркестратора. Содержимое сообщений здесь не показывается.`,adminOnly:`Диагностика доступна только администраторам.`,refresh:`Обновить`,refreshing:`Обновляю…`,loadFailed:`Не удалось загрузить диагностику.`,server:`Сервер`,healthy:`Работает`,unavailable:`Недоступен`,agents:`Зарегистрированные агенты`,connectors:`Зарегистрированные коннекторы`,versions:`Версии пакетов`,component:`Компонент`,installed:`Установлена`,latest:`Последняя`,outdated:`Доступны обновления для пакетов: {{count}}.`,noData:`Нет данных о версиях.`,recentMessages:`Последние сообщения`,time:`Время`,connector:`Коннектор`,role:`Роль`,duration:`Длительность`,tokens:`Токены вход / выход`,noMessages:`Метрик сообщений пока нет.`,recentErrors:`Последние ошибки выполнения`,noErrors:`После последнего запуска ошибки не записывались.`},group:{title:`Группировка`,field:`Поле`,all:`Все записи`,noValue:`Без значения`,yes:`Да`,no:`Нет`},triState:{yes:`Да`,no:`Нет`,unknown:`Неизвестно`},table:{total:`Итого`,noValue:`Без значения`},plugins:{loading:`Загрузка…`,restartBannerBefore:`Изменения применятся после `,restartBannerBold:`перезапуска сервера`,restartBannerAfter:` (набор активных плагинов читается при старте).`,confirmPurge:`Удалить ВСЕ данные плагина «{{id}}»? Таблицы будут удалены безвозвратно.`,genericError:`Ошибка: {{code}}`,settingsTitle:`Настройки`,purgeButton:`Удалить данные`,purgeTitle:`Удалить все данные плагина (безвозвратно)`,switchDisable:`Выключить`,switchEnable:`Включить`,blockedByDependents:`Нельзя выключить: от него зависят включённые плагины — {{list}}`,metaDepends:`зависит:`,metaLibraries:`библиотеки:`,metaExtends:`расширения:`,updateButton:`Обновить`,checkUpdates:`Проверить обновления`,checkingUpdates:`Проверяю…`,updateCheckError:`Не удалось проверить обновления.`,updatesAvailable:`Доступны обновления: {{count}}.`,noUpdates:`Обновлений нет.`,lastChecked:`Проверено в {{time}}.`,restartTimeout:`Пакеты установлены, но сервер не подтвердил перезапуск за 60 секунд. Проверьте диагностику и повторите проверку позже.`,updateTitle:`Обновить с v{{from}} до v{{to}}`,confirmUpdate:`Обновить плагин «{{id}}» с v{{from}} до v{{to}}? Сервер перезапустится сразу после установки — убедитесь, что он работает под process-manager'ом (systemd/pm2/docker), который автоматически его поднимет. Рекомендуется сделать резервную копию базы данных заранее.`,updateError:`Обновление не удалось`,updateAllButton:`Обновить все ({{count}})`,runtimeLabel:`Рантайм (server/web/cli)`,confirmUpdateAll:`Обновить {{count}} компонент(ов)?
|
|
7
|
+
|
|
8
|
+
{{list}}
|
|
9
|
+
|
|
10
|
+
Сервер перезапустится сразу после установки — убедитесь, что он работает под process-manager'ом (systemd/pm2/docker), который автоматически его поднимет. Рекомендуется сделать резервную копию базы данных заранее.`,errors:{has_dependents:`От него зависят включённые: {{list}}.`,missing_deps:`Сначала включи зависимости: {{list}}.`,unknown_plugin:`Неизвестный плагин.`}},auth:{loginTitle:`Вход`,welcomeEyebrow:`Личное пространство`,welcomeTitle:`Ваши данные. Под вашим контролем.`,welcomeText:`Войдите, чтобы продолжить работу с Coffer.`,secureConnection:`Защищённое соединение`,setupTitle:`Создать первого администратора`,login:`Логин`,password:`Пароль`,displayName:`Имя`,signIn:`Войти`,createAccount:`Создать аккаунт`,invalidCredentials:`Неверный логин или пароль.`,genericError:`Что-то пошло не так.`,accountTitle:`Мой аккаунт`,sessionTitle:`Сессия`,logoutDescription:`Завершить текущую сессию на этом устройстве.`,logout:`Выйти`,fieldDisplayName:`Имя`,fieldLogin:`Логин`,fieldPasswordOptional:`Новый пароль (оставьте пустым, чтобы не менять)`,tokensTitle:`API-токены`,tokenNamePlaceholder:`Название токена (напр. "agent")`,tokenCreate:`Создать токен`,tokenCreatedOnce:`Скопируйте токен сейчас — он больше не будет показан:`,tokenRevoke:`Отозвать`,tokenConfirmRevoke:`Отозвать этот токен? Всё, что его использует, перестанет работать.`,grantsTitle:`Подключённые приложения`,grantsEmpty:`Ни одно приложение ещё не авторизовано. Они появятся здесь после подтверждения на экране согласия Coffer.`,grantConfirmRevoke:`Отключить это приложение? Его токены доступа перестанут работать сразу.`,linksTitle:`Связанные аккаунты`,linksEmpty:`Пока нет связанных аккаунтов.`,linkMint:`Связать аккаунт`,linkNotLinked:`Не связан`,linkCodeCreatedOnce:`Скопируйте этот код сейчас — он больше не будет показан:`,linkOpenConnector:`Открыть {{connector}}`,linkConfirmUnlink:`Отвязать этот аккаунт? Он больше не сможет обращаться к вам здесь.`,linkUnlink:`Отвязать`,usersTitle:`Пользователи`,addUser:`Добавить пользователя`,roleAdmin:`Админ`,roleMember:`Участник`,fieldRole:`Роль`,fieldDisabled:`Отключён`,userCreateTitle:`Новый пользователь`,lastAdminError:`Нельзя убрать последнего админа.`},form:{serverRejected:`Сервер отклонил:`,createTitle:`Новый — {{label}}`,editTitle:`Редактировать — {{label}}`,mdPlaceholder:`Текст в формате Markdown…`,mdLink:`Адрес ссылки`,md:{bold:`Жирный`,italic:`Курсив`,code:`Код в строке`,h1:`Заголовок 1`,h2:`Заголовок 2`,bulletList:`Маркированный список`,orderedList:`Нумерованный список`,blockquote:`Цитата`,strike:`Зачёркнутый`,h3:`Заголовок 3`,taskList:`Чеклист`,codeBlock:`Блок кода`,horizontalRule:`Разделитель`,table:`Таблица`,link:`Ссылка`,unlink:`Убрать ссылку`,image:`Изображение`,imageUrl:`Адрес изображения`,imageAlt:`Описание`,undo:`Отменить`,redo:`Повторить`,addRow:`Добавить строку`,addColumn:`Добавить столбец`,deleteRow:`Удалить строку`,deleteColumn:`Удалить столбец`,deleteTable:`Удалить таблицу`},photo:`+ Фото`,properties:`Свойства`,keyPlaceholder:`ключ`,valuePlaceholderShort:`значение`,addProperty:`Свойство`,days:`дн`,hours:`ч`,minutes:`мин`,seconds:`с`,addTag:`Добавить тег…`,addRow:`+ Добавить строку`,search:`Поиск…`,loading:`Загрузка…`,loadError:`Ошибка загрузки`,noRecords:`Нет записей`,noSeries:`Пока нет измерений`,noDates:`Пока нет датированных записей`,offGrid:`{{n}} вне сетки`,unknownStage:`Этап не из списка`,addRecord:`+ Добавить…`,addItem:`+ Добавить пункт`},list:{empty:`Пока пусто`,searchPlaceholder:`Поиск…`,sortBy:`Сортировать по`,sortRating:`Рейтинг`,asc:`По возрастанию`,desc:`По убыванию`,peopleCount_one:`{{count}} чел.`,peopleCount_few:`{{count}} чел.`,peopleCount_many:`{{count}} чел.`,peopleCount_other:`{{count}} чел.`,pairsCount_one:`{{count}} пара`,pairsCount_few:`{{count}} пары`,pairsCount_many:`{{count}} пар`,pairsCount_other:`{{count}} пар`},search:{title:`Глобальный поиск`,placeholder:`Поиск полок и записей…`,allShelves:`Все полки`,results:`Результаты`,noResults:`Ничего не найдено`},record:{count_one:`{{count}} запись`,count_few:`{{count}} записи`,count_many:`{{count}} записей`,count_other:`{{count}} записей`,hide:`Скрыть`,show:`Показать`},extend:{shownWhen:`Показывается когда:`},weekdaysShort:[`Пн`,`Вт`,`Ср`,`Чт`,`Пт`,`Сб`,`Вс`],lang:{uk:`Українська`,ru:`Русский`,en:`English`},validation:{server:`Сервер отклонил это значение`,required:`обязательное поле`,invalid_type:`недопустимый тип значения`,min_length:`минимум {{min}} симв.`,max_length:`максимум {{max}} симв.`,pattern:`недопустимый формат`,email:`некорректный email-адрес`,min:`не меньше {{min}}`,max:`не больше {{max}}`,int:`должно быть целым`,date_format:`формат YYYY-MM-DD`,date_min:`не раньше {{min}}`,date_max:`не позже {{max}}`,enum:`выберите из списка`,json:`невалидный JSON`,structure:`недопустимая структура`,int_list:`недопустимые ссылки на записи`,kv_single:`допустима только одна пара`,links_structure:`недопустимая структура подключений`,time_format:`формат HH:MM:SS`,datetime_format:`формат YYYY-MM-DDTHH:MM`,tags_list:`ожидается массив тегов`,slotted_length:`неверное количество элементов`,check_structure:`неверная структура отметки`,measured_structure:`ожидается {value, unit}`,measured_unit:`неизвестная единица`,derived:`вычисляемое поле — недоступно для записи`,money_structure:`некорректная сумма`,geo_structure:`ожидается {lat, lng}`,illustrated_structure:`ожидается {text, image}`,dimensions_structure:`ожидается {w, h, d}`,money_currency:`неизвестная валюта`,color_format:`формат #RRGGBB`,row_structure:`недопустимая структура строк`,row_duplicate:`значение «{{key}}» повторяется между строками`,array:`ожидается массив`,array_item:`недопустимое значение в массиве`,ip_structure:`недопустимый IP-адрес`,cidr_structure:`недопустимый CIDR`,per_weekday:`массив из 7 чисел`,period_order:`начало не должно быть позже конца`,period_structure:`ожидается {from, until}`,range_structure:`ожидается {from, to}`,last_admin:`Нельзя убрать последнего админа.`,range_order:`from должно быть ≤ to`,file_structure:`некорректный файл`,file_remote_url:`file-поле хранит загруженный файл, а не удалённый URL`,file_unknown_key:`у файла могут быть только name, mime и size`,file_name:`ожидается голое имя файла, без пути`,file_not_uploaded:`такого загруженного файла нет — сначала загрузите его`,code_structure:`ожидается {code, lang}`,source_binary:`ожидается текстовый файл, не бинарный`,source_too_large:`файл слишком большой (лимит {{maxBytes}} байт)`,url:`некорректный URL`,embed_structure:`некорректное вложение`,colorname:`неизвестное название цвета`,notWritable:`нечего записывать`},core:{backrefs:{more_one:`ещё {{count}}`,more_few:`ещё {{count}}`,more_many:`ещё {{count}}`,more_other:`ещё {{count}}`},settings:{label:`Система`,publicUrl:`Публичный адрес`,publicUrlHint:`Только origin, без завершающего слеша — напр. https://coffer.example`,language:`Язык`,agent_id:`Агент`,trigger_prefix:`Префикс триггера`,reply_window:`Окно ответа (с)`},fields:{type:`Тип`,subtype:`Подтип`,name:`Название`,weekday:`День недели`,value:`Значение`,text:`Текст`,check:`Отметка`,currency:`Валюта`},presets:{slug:`только строчные латинские буквы, цифры и дефис`,imei:`IMEI — ровно 15 цифр`,mac:`MAC — формат XX:XX:XX:XX:XX:XX`,iban:`IBAN — 2 буквы, 2 цифры, далее буквы и цифры (без пробелов)`,hostname:`имя хоста / FQDN (метки через точку: буквы, цифры, дефис)`,tel:`номер телефона`,link:`URL (scheme:// или домен с точкой)`},period:{from:`С`,until:`По`},sex:{M:`Мужской`,F:`Женский`,other:`Другой`},weekdays:{mon:`Понедельник`,tue:`Вторник`,wed:`Среда`,thu:`Четверг`,fri:`Пятница`,sat:`Суббота`,sun:`Воскресенье`},colors:Qr.ru,countries:{AF:`Афганистан`,AL:`Албания`,DZ:`Алжир`,AD:`Андорра`,AO:`Ангола`,AG:`Антигуа и Барбуда`,AR:`Аргентина`,AM:`Армения`,AU:`Австралия`,AT:`Австрия`,AZ:`Азербайджан`,BS:`Багамы`,BH:`Бахрейн`,BD:`Бангладеш`,BY:`Беларусь`,BE:`Бельгия`,BZ:`Белиз`,BJ:`Бенин`,BT:`Бутан`,BO:`Боливия`,BA:`Босния и Герцеговина`,BW:`Ботсвана`,BR:`Бразилия`,BN:`Бруней`,BG:`Болгария`,BF:`Буркина-Фасо`,BI:`Бурунди`,CV:`Кабо-Верде`,KH:`Камбоджа`,CM:`Камерун`,CA:`Канада`,CF:`Центрально-Африканская Республика`,TD:`Чад`,CL:`Чили`,CN:`Китай`,CO:`Колумбия`,KM:`Коморы`,CG:`Конго - Браззавиль`,CD:`Конго - Киншаса`,CR:`Коста-Рика`,CI:`Кот-д’Ивуар`,HR:`Хорватия`,CU:`Куба`,CY:`Кипр`,CZ:`Чехия`,DK:`Дания`,DJ:`Джибути`,DM:`Доминика`,DO:`Доминиканская Республика`,EC:`Эквадор`,EG:`Египет`,SV:`Сальвадор`,GQ:`Экваториальная Гвинея`,ER:`Эритрея`,EE:`Эстония`,SZ:`Эсватини`,ET:`Эфиопия`,FJ:`Фиджи`,FI:`Финляндия`,FR:`Франция`,GA:`Габон`,GM:`Гамбия`,GE:`Грузия`,DE:`Германия`,GH:`Гана`,GR:`Греция`,GD:`Гренада`,GT:`Гватемала`,GN:`Гвинея`,GW:`Гвинея-Бисау`,GY:`Гайана`,HT:`Гаити`,HN:`Гондурас`,HU:`Венгрия`,IS:`Исландия`,IN:`Индия`,ID:`Индонезия`,IR:`Иран`,IQ:`Ирак`,IE:`Ирландия`,IL:`Израиль`,IT:`Италия`,JM:`Ямайка`,JP:`Япония`,JO:`Иордания`,KZ:`Казахстан`,KE:`Кения`,KI:`Кирибати`,KP:`КНДР`,KR:`Республика Корея`,KW:`Кувейт`,KG:`Киргизия`,LA:`Лаос`,LV:`Латвия`,LB:`Ливан`,LS:`Лесото`,LR:`Либерия`,LY:`Ливия`,LI:`Лихтенштейн`,LT:`Литва`,LU:`Люксембург`,MG:`Мадагаскар`,MW:`Малави`,MY:`Малайзия`,MV:`Мальдивы`,ML:`Мали`,MT:`Мальта`,MH:`Маршалловы о-ва`,MR:`Мавритания`,MU:`Маврикий`,MX:`Мексика`,FM:`Федеративные Штаты Микронезии`,MD:`Молдова`,MC:`Монако`,MN:`Монголия`,ME:`Черногория`,MA:`Марокко`,MZ:`Мозамбик`,MM:`Мьянма (Бирма)`,NA:`Намибия`,NR:`Науру`,NP:`Непал`,NL:`Нидерланды`,NZ:`Новая Зеландия`,NI:`Никарагуа`,NE:`Нигер`,NG:`Нигерия`,MK:`Северная Македония`,NO:`Норвегия`,OM:`Оман`,PK:`Пакистан`,PW:`Палау`,PA:`Панама`,PG:`Папуа — Новая Гвинея`,PY:`Парагвай`,PE:`Перу`,PH:`Филиппины`,PL:`Польша`,PT:`Португалия`,QA:`Катар`,RO:`Румыния`,RU:`Россия`,RW:`Руанда`,KN:`Сент-Китс и Невис`,LC:`Сент-Люсия`,VC:`Сент-Винсент и Гренадины`,WS:`Самоа`,SM:`Сан-Марино`,ST:`Сан-Томе и Принсипи`,SA:`Саудовская Аравия`,SN:`Сенегал`,RS:`Сербия`,SC:`Сейшельские о-ва`,SL:`Сьерра-Леоне`,SG:`Сингапур`,SK:`Словакия`,SI:`Словения`,SB:`Соломоновы о-ва`,SO:`Сомали`,ZA:`Южно-Африканская Республика`,SS:`Южный Судан`,ES:`Испания`,LK:`Шри-Ланка`,SD:`Судан`,SR:`Суринам`,SE:`Швеция`,CH:`Швейцария`,SY:`Сирия`,TW:`Тайвань`,TJ:`Таджикистан`,TZ:`Танзания`,TH:`Таиланд`,TL:`Восточный Тимор`,TG:`Того`,TO:`Тонга`,TT:`Тринидад и Тобаго`,TN:`Тунис`,TR:`Турция`,TM:`Туркменистан`,TV:`Тувалу`,UG:`Уганда`,UA:`Украина`,AE:`ОАЭ`,GB:`Великобритания`,US:`Соединенные Штаты`,UY:`Уругвай`,UZ:`Узбекистан`,VU:`Вануату`,VE:`Венесуэла`,VN:`Вьетнам`,YE:`Йемен`,ZM:`Замбия`,ZW:`Зимбабве`},units:{UAH:`₴ UAH`,USD:`$ USD`,EUR:`€ EUR`,GBP:`£ GBP`,CZK:`Kč CZK`,PLN:`zł PLN`,mg:`мг`,g:`г`,kg:`кг`,t:`т`,oz:`oz`,lb:`lb`,ml:`мл`,cl:`сл`,dl:`дл`,l:`л`,tsp:`ч.л.`,tbsp:`ст.л.`,cup:`чашка`,fl_oz:`fl oz`,pcs:`шт`,pair:`пара`,set:`набор`,pack:`пачка`,s:`сек`,min:`мин`,h:`ч`,d:`день`,w:`неделя`,C:`°C`,F:`°F`,K:`К`,mm:`мм`,cm:`см`,m:`м`,km:`км`,in:`дюйм`,ft:`фут`,mi:`миля`,nm:`морская миля`,cm2:`см²`,m2:`м²`,ha:`га`,km2:`км²`,ft2:`фут²`,ac:`акр`,B:`Б`,KB:`КБ`,MB:`МБ`,GB:`ГБ`,TB:`ТБ`,mAh:`мАч`,Ah:`Ач`,Wh:`Вт·ч`,kWh:`кВт·ч`,mW:`мВт`,W:`Вт`,kW:`кВт`,mV:`мВ`,V:`В`,ms:`м/с`,kmh:`км/ч`,mph:`mph`,kn:`узел`,"%":`%`,ppm:`ppm`}}},Ua={common:{loading:`Loading…`,saving:`Saving…`,error:`Error`,back:`Back`,yes:`Yes`,no:`No`,notFound:`Type not found`,daysUnit:`d`,peopleUnit:`ppl`,empty:`No records`},actions:{new:`New`,addFirst:`Add first record`,edit:`Edit`,copy:`Copy`,copied:`Copied`,save:`Save`,create:`Create`,cancel:`Cancel`,confirm:`Confirm`,confirmDelete:`Delete this record?`,delete:`Delete`,clear:`Clear`,favoriteAdd:`Add to favorites`,favoriteRemove:`Remove from favorites`,upload:`Upload`,retry:`Retry`,replace:`Replace`,confirmDeletePhoto:`Delete photo?`,add:`Add`,pickColor:`Pick a colour`,countrySearch:`e.g. United States`,actionSuccess:`Done`,actionError:`Error`,actionNotFound:`Action not registered`,notice:`Notice`},save:{saving:`Saving…`,done:`Saved`,failed:`Save failed`},upload:{tooLarge:`File too large (max 25 MB)`,failed:`Upload failed`,progress:`Upload progress`},files:{preview:`Preview`,download:`Download`,loadingPreview:`Loading preview…`,previewFailed:`Could not load preview`,previewTruncated:`Preview truncated at 1 MB.`,none:`No file yet`,add:`Add a file`},source:{download:`Download`,empty:`No file`},localpath:{listFailed:`Could not list this directory`,up:`Up one level`,showHidden:`Show hidden files`,hideHidden:`Hide hidden files`,selectFolder:`Select this folder`,browse:`Browse`},blocks:{prevMonth:`Previous month`,nextMonth:`Next month`},embed:{open:`Open`,pastePlaceholder:`Paste a URL…`,resolveFailed:`Could not load preview`},reminder:{today:`today`,inDays_one:`in {{count}} day`,inDays_other:`in {{count}} days`,inWeeks_one:`in {{count}} week`,inWeeks_other:`in {{count}} weeks`,inMonths_one:`in {{count}} month`,inMonths_other:`in {{count}} months`,overdue:`overdue {{days}}d`},age:{years_one:`{{count}} year`,years_other:`{{count}} years`},timetable:{next:`next`,runs_one:`{{count}} run`,runs_other:`{{count}} runs`},units:{days:`days`},nav:{selectType:`Select a type from the menu`,plugins:`Plugins`,home:`Home`,search:`Search`,settings:`Settings`,trash:`Trash`,toggleSidebar:`Show or hide the menu`},trash:{title:`Trash`,description:`Deleted records remain in the database. Restore them here or remove them permanently.`,empty:`Trash is empty`,restore:`Restore`,purge:`Delete permanently`,confirmPurge:`Delete this record permanently? This cannot be undone.`,restored:`Record restored`,purged:`Record permanently deleted`},dashboard:{title:`Home`,empty:`No active shelves`},settings:{title:`Settings`,appearance:`Appearance`,theme:`Theme`,language:`Language`,systemDescription:`App-wide settings and base packages.`,systemUpdateTitle:`Update the base packages (core + runtime)`,componentsTitle:`Components`,componentsDescription:`System packages and plugins: updates, enable/disable, purge data.`,personalTitle:`Personal`,usersTitle:`Users`,usersDescription:`Manage every account on this instance.`,diagnosticsTitle:`Diagnostics`,diagnosticsDescription:`Inspect runtime health, agents, connectors, and recent orchestration activity.`},appearance:{label:`Appearance`,theme:`Theme`,colours:`Hue`,neutral:`Neutral`,hue:{red:`Red`,orange:`Orange`,yellow:`Yellow`,lime:`Lime`,green:`Green`,emerald:`Emerald`,teal:`Teal`,azure:`Azure`,blue:`Blue`,violet:`Violet`,purple:`Purple`,pink:`Pink`,grey:`Grey`}},theme:{label:`Theme`,auto:`Auto`,light:`Light`,dark:`Dark`,eink:`E-ink`},diagnostics:{title:`Diagnostics`,description:`Runtime health and recent orchestration activity. Message content is not shown here.`,adminOnly:`Diagnostics are available to administrators only.`,refresh:`Refresh`,refreshing:`Refreshing…`,loadFailed:`Could not load diagnostics.`,server:`Server`,healthy:`Healthy`,unavailable:`Unavailable`,agents:`Registered agents`,connectors:`Registered connectors`,versions:`Package versions`,component:`Component`,installed:`Installed`,latest:`Latest`,outdated:`{{count}} package(s) have updates available.`,noData:`No version data.`,recentMessages:`Recent messages`,time:`Time`,connector:`Connector`,role:`Role`,duration:`Duration`,tokens:`Tokens in / out`,noMessages:`No message metrics yet.`,recentErrors:`Recent runtime errors`,noErrors:`No runtime errors recorded since the last restart.`},group:{title:`Grouping`,field:`Field`,all:`All records`,noValue:`No value`,yes:`Yes`,no:`No`},table:{total:`Total`,noValue:`No value`},triState:{yes:`Yes`,no:`No`,unknown:`Unknown`},plugins:{loading:`Loading…`,restartBannerBefore:`Changes will take effect after `,restartBannerBold:`server restart`,restartBannerAfter:` (the active plugin set is read at startup).`,confirmPurge:`Delete ALL data for plugin "{{id}}"? Tables will be dropped permanently.`,genericError:`Error: {{code}}`,settingsTitle:`Settings`,purgeButton:`Delete data`,purgeTitle:`Delete all plugin data (permanently)`,switchDisable:`Disable`,switchEnable:`Enable`,blockedByDependents:`Can't disable: enabled plugins depend on it — {{list}}`,metaDepends:`depends on:`,metaLibraries:`libraries:`,metaExtends:`extends:`,updateButton:`Update`,checkUpdates:`Check for updates`,checkingUpdates:`Checking…`,updateCheckError:`Could not check for updates.`,updatesAvailable:`Updates available: {{count}}.`,noUpdates:`No updates available.`,lastChecked:`Checked at {{time}}.`,restartTimeout:`Packages were installed, but the server did not confirm a restart within 60 seconds. Check diagnostics and try again later.`,updateTitle:`Update from v{{from}} to v{{to}}`,confirmUpdate:`Update plugin "{{id}}" from v{{from}} to v{{to}}? The server will restart immediately after install — make sure it runs under a process manager (systemd/pm2/docker) that will bring it back up automatically. A database backup beforehand is recommended.`,updateError:`Update failed`,updateAllButton:`Update all ({{count}})`,runtimeLabel:`Runtime (server/web/cli)`,confirmUpdateAll:`Update {{count}} component(s)?
|
|
11
|
+
|
|
12
|
+
{{list}}
|
|
13
|
+
|
|
14
|
+
The server will restart immediately after install — make sure it runs under a process manager (systemd/pm2/docker) that will bring it back up automatically. A database backup beforehand is recommended.`,errors:{has_dependents:`Enabled plugins depend on it: {{list}}.`,missing_deps:`Enable dependencies first: {{list}}.`,unknown_plugin:`Unknown plugin.`}},auth:{loginTitle:`Sign in`,welcomeEyebrow:`Personal workspace`,welcomeTitle:`Your data. In your hands.`,welcomeText:`Sign in to continue working with Coffer.`,secureConnection:`Secure connection`,setupTitle:`Create the first admin account`,login:`Login`,password:`Password`,displayName:`Display name`,signIn:`Sign in`,createAccount:`Create account`,invalidCredentials:`Wrong login or password.`,genericError:`Something went wrong.`,accountTitle:`My account`,sessionTitle:`Session`,logoutDescription:`End the current session on this device.`,logout:`Sign out`,fieldDisplayName:`Display name`,fieldLogin:`Login`,fieldPasswordOptional:`New password (leave blank to keep unchanged)`,tokensTitle:`API tokens`,tokenNamePlaceholder:`Token name (e.g. "agent")`,tokenCreate:`Create token`,tokenCreatedOnce:`Copy this token now — it will not be shown again:`,tokenRevoke:`Revoke`,tokenConfirmRevoke:`Revoke this token? Anything using it will stop working.`,grantsTitle:`Connected apps`,grantsEmpty:`No app has been authorized yet. Apps appear here after you approve them on the Coffer consent screen.`,grantConfirmRevoke:`Disconnect this app? Its access tokens stop working immediately.`,linksTitle:`Linked accounts`,linksEmpty:`No accounts linked yet.`,linkMint:`Link an account`,linkNotLinked:`Not linked`,linkCodeCreatedOnce:`Copy this code now — it will not be shown again:`,linkOpenConnector:`Open {{connector}}`,linkConfirmUnlink:`Unlink this account? It will no longer be able to reach you here.`,linkUnlink:`Unlink`,usersTitle:`Users`,addUser:`Add user`,roleAdmin:`Admin`,roleMember:`Member`,fieldRole:`Role`,fieldDisabled:`Disabled`,userCreateTitle:`New user`,lastAdminError:`Cannot remove the last admin.`},form:{serverRejected:`Server rejected:`,createTitle:`New — {{label}}`,editTitle:`Edit — {{label}}`,mdPlaceholder:`Markdown text…`,mdLink:`Link address`,md:{bold:`Bold`,italic:`Italic`,code:`Inline code`,h1:`Heading 1`,h2:`Heading 2`,bulletList:`Bulleted list`,orderedList:`Numbered list`,blockquote:`Quote`,strike:`Strikethrough`,h3:`Heading 3`,taskList:`Checklist`,codeBlock:`Code block`,horizontalRule:`Divider`,table:`Table`,link:`Link`,unlink:`Remove link`,image:`Image`,imageUrl:`Image address`,imageAlt:`Description`,undo:`Undo`,redo:`Redo`,addRow:`Add row`,addColumn:`Add column`,deleteRow:`Delete row`,deleteColumn:`Delete column`,deleteTable:`Delete table`},photo:`+ Photo`,properties:`Properties`,keyPlaceholder:`key`,valuePlaceholderShort:`value`,addProperty:`Property`,days:`d`,hours:`h`,minutes:`min`,seconds:`s`,addTag:`Add tag…`,addRow:`+ Add row`,search:`Search…`,loading:`Loading…`,loadError:`Load error`,noRecords:`No records`,noSeries:`No readings yet`,noDates:`No dated entries yet`,offGrid:`{{n}} not on the grid`,unknownStage:`Stage not in the list`,addRecord:`+ Add…`,addItem:`+ Add item`},list:{empty:`Nothing here yet`,searchPlaceholder:`Search…`,sortBy:`Sort by`,sortRating:`Rating`,asc:`Ascending`,desc:`Descending`,peopleCount_one:`{{count}} person`,peopleCount_other:`{{count}} ppl`,pairsCount_one:`{{count}} pair`,pairsCount_other:`{{count}} pairs`},search:{title:`Global Search`,placeholder:`Search shelves and records…`,allShelves:`All shelves`,results:`Results`,noResults:`Nothing found`},record:{count_one:`{{count}} record`,count_other:`{{count}} records`,hide:`Hide`,show:`Show`},extend:{shownWhen:`Shown when:`},weekdaysShort:[`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`,`Sun`],lang:{uk:`Українська`,ru:`Русский`,en:`English`},validation:{server:`The server rejected this value`,required:`required field`,invalid_type:`invalid value type`,min_length:`minimum {{min}} chars`,max_length:`maximum {{max}} chars`,pattern:`invalid format`,email:`invalid email address`,min:`at least {{min}}`,max:`at most {{max}}`,int:`must be an integer`,date_format:`format YYYY-MM-DD`,date_min:`not earlier than {{min}}`,date_max:`not later than {{max}}`,enum:`choose from the list`,json:`invalid JSON`,structure:`invalid structure`,int_list:`invalid record references`,kv_single:`only one pair allowed`,links_structure:`invalid connections structure`,time_format:`format HH:MM:SS`,datetime_format:`format YYYY-MM-DDTHH:MM`,tags_list:`expected array of tags`,slotted_length:`wrong number of items`,check_structure:`invalid check structure`,measured_structure:`expected {value, unit}`,measured_unit:`unknown unit`,derived:`computed field — not writable`,money_structure:`invalid amount`,geo_structure:`expected {lat, lng}`,illustrated_structure:`expected {text, image}`,dimensions_structure:`expected {w, h, d}`,money_currency:`unknown currency`,color_format:`format #RRGGBB`,row_structure:`invalid row structure`,row_duplicate:`value "{{key}}" is duplicated across rows`,array:`expected an array`,array_item:`invalid value in array`,ip_structure:`invalid IP address`,cidr_structure:`invalid CIDR`,per_weekday:`array of 7 numbers`,period_order:`start must not be after end`,period_structure:`expected {from, until}`,range_structure:`expected {from, to}`,last_admin:`Cannot remove the last admin.`,range_order:`from must be ≤ to`,file_structure:`invalid file`,file_remote_url:`file fields hold an uploaded file, not a remote URL`,file_unknown_key:`a file may only carry name, mime and size`,file_name:`expected a bare filename, without a path`,file_not_uploaded:`no such uploaded file — upload it first`,code_structure:`expected {code, lang}`,source_binary:`expected a text file, not binary`,source_too_large:`file is too large (limit {{maxBytes}} bytes)`,url:`invalid URL`,embed_structure:`invalid embed`,colorname:`unknown color name`,notWritable:`nothing to write to`},core:{backrefs:{more_one:`{{count}} more`,more_other:`{{count}} more`},settings:{label:`System`,publicUrl:`Public URL`,publicUrlHint:`Origin only, no trailing slash — e.g. https://coffer.example`,language:`Language`,agent_id:`Agent`,trigger_prefix:`Trigger prefix`,reply_window:`Reply window (s)`},fields:{type:`Type`,subtype:`Subtype`,name:`Name`,weekday:`Weekday`,value:`Value`,text:`Text`,check:`Check`,currency:`Currency`},presets:{slug:`lowercase latin letters, digits and hyphen only`,imei:`IMEI — exactly 15 digits`,mac:`MAC — format XX:XX:XX:XX:XX:XX`,iban:`IBAN — 2 letters, 2 digits, then letters and digits (no spaces)`,hostname:`hostname / FQDN (dot-separated labels: letters, digits, hyphen)`,tel:`phone number`,link:`URL (scheme:// or a domain with a dot)`},period:{from:`From`,until:`Until`},sex:{M:`Male`,F:`Female`,other:`Other`},weekdays:{mon:`Monday`,tue:`Tuesday`,wed:`Wednesday`,thu:`Thursday`,fri:`Friday`,sat:`Saturday`,sun:`Sunday`},colors:Qr.en,countries:{AF:`Afghanistan`,AL:`Albania`,DZ:`Algeria`,AD:`Andorra`,AO:`Angola`,AG:`Antigua & Barbuda`,AR:`Argentina`,AM:`Armenia`,AU:`Australia`,AT:`Austria`,AZ:`Azerbaijan`,BS:`Bahamas`,BH:`Bahrain`,BD:`Bangladesh`,BY:`Belarus`,BE:`Belgium`,BZ:`Belize`,BJ:`Benin`,BT:`Bhutan`,BO:`Bolivia`,BA:`Bosnia & Herzegovina`,BW:`Botswana`,BR:`Brazil`,BN:`Brunei`,BG:`Bulgaria`,BF:`Burkina Faso`,BI:`Burundi`,CV:`Cape Verde`,KH:`Cambodia`,CM:`Cameroon`,CA:`Canada`,CF:`Central African Republic`,TD:`Chad`,CL:`Chile`,CN:`China`,CO:`Colombia`,KM:`Comoros`,CG:`Congo - Brazzaville`,CD:`Congo - Kinshasa`,CR:`Costa Rica`,CI:`Côte d’Ivoire`,HR:`Croatia`,CU:`Cuba`,CY:`Cyprus`,CZ:`Czechia`,DK:`Denmark`,DJ:`Djibouti`,DM:`Dominica`,DO:`Dominican Republic`,EC:`Ecuador`,EG:`Egypt`,SV:`El Salvador`,GQ:`Equatorial Guinea`,ER:`Eritrea`,EE:`Estonia`,SZ:`Eswatini`,ET:`Ethiopia`,FJ:`Fiji`,FI:`Finland`,FR:`France`,GA:`Gabon`,GM:`Gambia`,GE:`Georgia`,DE:`Germany`,GH:`Ghana`,GR:`Greece`,GD:`Grenada`,GT:`Guatemala`,GN:`Guinea`,GW:`Guinea-Bissau`,GY:`Guyana`,HT:`Haiti`,HN:`Honduras`,HU:`Hungary`,IS:`Iceland`,IN:`India`,ID:`Indonesia`,IR:`Iran`,IQ:`Iraq`,IE:`Ireland`,IL:`Israel`,IT:`Italy`,JM:`Jamaica`,JP:`Japan`,JO:`Jordan`,KZ:`Kazakhstan`,KE:`Kenya`,KI:`Kiribati`,KP:`North Korea`,KR:`South Korea`,KW:`Kuwait`,KG:`Kyrgyzstan`,LA:`Laos`,LV:`Latvia`,LB:`Lebanon`,LS:`Lesotho`,LR:`Liberia`,LY:`Libya`,LI:`Liechtenstein`,LT:`Lithuania`,LU:`Luxembourg`,MG:`Madagascar`,MW:`Malawi`,MY:`Malaysia`,MV:`Maldives`,ML:`Mali`,MT:`Malta`,MH:`Marshall Islands`,MR:`Mauritania`,MU:`Mauritius`,MX:`Mexico`,FM:`Micronesia`,MD:`Moldova`,MC:`Monaco`,MN:`Mongolia`,ME:`Montenegro`,MA:`Morocco`,MZ:`Mozambique`,MM:`Myanmar (Burma)`,NA:`Namibia`,NR:`Nauru`,NP:`Nepal`,NL:`Netherlands`,NZ:`New Zealand`,NI:`Nicaragua`,NE:`Niger`,NG:`Nigeria`,MK:`North Macedonia`,NO:`Norway`,OM:`Oman`,PK:`Pakistan`,PW:`Palau`,PA:`Panama`,PG:`Papua New Guinea`,PY:`Paraguay`,PE:`Peru`,PH:`Philippines`,PL:`Poland`,PT:`Portugal`,QA:`Qatar`,RO:`Romania`,RU:`Russia`,RW:`Rwanda`,KN:`St. Kitts & Nevis`,LC:`St. Lucia`,VC:`St. Vincent & Grenadines`,WS:`Samoa`,SM:`San Marino`,ST:`São Tomé & Príncipe`,SA:`Saudi Arabia`,SN:`Senegal`,RS:`Serbia`,SC:`Seychelles`,SL:`Sierra Leone`,SG:`Singapore`,SK:`Slovakia`,SI:`Slovenia`,SB:`Solomon Islands`,SO:`Somalia`,ZA:`South Africa`,SS:`South Sudan`,ES:`Spain`,LK:`Sri Lanka`,SD:`Sudan`,SR:`Suriname`,SE:`Sweden`,CH:`Switzerland`,SY:`Syria`,TW:`Taiwan`,TJ:`Tajikistan`,TZ:`Tanzania`,TH:`Thailand`,TL:`Timor-Leste`,TG:`Togo`,TO:`Tonga`,TT:`Trinidad & Tobago`,TN:`Tunisia`,TR:`Türkiye`,TM:`Turkmenistan`,TV:`Tuvalu`,UG:`Uganda`,UA:`Ukraine`,AE:`United Arab Emirates`,GB:`United Kingdom`,US:`United States`,UY:`Uruguay`,UZ:`Uzbekistan`,VU:`Vanuatu`,VE:`Venezuela`,VN:`Vietnam`,YE:`Yemen`,ZM:`Zambia`,ZW:`Zimbabwe`},units:{UAH:`₴ UAH`,USD:`$ USD`,EUR:`€ EUR`,GBP:`£ GBP`,CZK:`Kč CZK`,PLN:`zł PLN`,mg:`mg`,g:`g`,kg:`kg`,t:`t`,oz:`oz`,lb:`lb`,ml:`ml`,cl:`cl`,dl:`dl`,l:`l`,tsp:`tsp`,tbsp:`tbsp`,cup:`cup`,fl_oz:`fl oz`,pcs:`pcs`,pair:`pair`,set:`set`,pack:`pack`,s:`s`,min:`min`,h:`h`,d:`day`,w:`week`,C:`°C`,F:`°F`,K:`K`,mm:`mm`,cm:`cm`,m:`m`,km:`km`,in:`in`,ft:`ft`,mi:`mi`,nm:`nmi`,cm2:`cm²`,m2:`m²`,ha:`ha`,km2:`km²`,ft2:`ft²`,ac:`ac`,B:`B`,KB:`KB`,MB:`MB`,GB:`GB`,TB:`TB`,mAh:`mAh`,Ah:`Ah`,Wh:`Wh`,kWh:`kWh`,mW:`mW`,W:`W`,kW:`kW`,mV:`mV`,V:`V`,ms:`m/s`,kmh:`km/h`,mph:`mph`,kn:`kn`,"%":`%`,ppm:`ppm`}}};function Wa(e,t){return e.includes(`.`)&&console.warn(`[i18n] missing key:`,e),t??e}var Ga=typeof localStorage<`u`?localStorage.getItem(`lang`)??`uk`:`uk`;r.use(i).init({resources:{uk:{translation:Va},ru:{translation:Ha},en:{translation:Ua}},lng:Ga,fallbackLng:`uk`,interpolation:{escapeValue:!1},parseMissingKeyHandler:Wa}),fetch(`/api/settings/system`).then(e=>e.ok?e.json():null).then(e=>{let t=e?.language;if(t&&t!==r.language){r.changeLanguage(t);try{localStorage.setItem(`lang`,t)}catch{}}}).catch(e=>console.warn(`[i18n] language reconcile failed:`,e));var Ka=r,qa=e({calendar:()=>Ja,default:()=>Ya}),Ja={plugin:{label:`Calendar`,description:`Calendars, events and tasks.`},library:{label:`Calendar`},entry:{label:`Calendar`,fields:{summary:`Title`,description:`Description`,when:`When`,allDay:`All day`,location:`Location`,recurrence:`Repeats`,exdates:`Skipped dates`,master:`Series`,recurrenceId:`Replaces the instance of`,status:`Status`,uid:`Sync id`,ics:`Client data`,tags:`Tags`,notes:`Notes`},options:{type:{event:`Event`,task:`Task`},status:{tentative:`Tentative`,confirmed:`Confirmed`,needs_action:`To do`,in_process:`In progress`,completed:`Done`,cancelled:`Cancelled`}}},task_details:{label:`Task`,fields:{priority:`Priority`,percent:`Progress`,completed:`Completed at`}},validation:{rrule:`Not a valid repeat rule`},view:{today:`Today`,prev:{day:`Previous day`,week:`Previous week`,month:`Previous month`,year:`Previous year`},next:{day:`Next day`,week:`Next week`,month:`Next month`,year:`Next year`},scale:{day:`Day`,week:`Week`,month:`Month`,year:`Year`},more:`+{{count}}`,withoutDate:`Without a date`,allDay:`all day`,createTitle:`New entry`,createElsewhere:`New records are created from the list, not here.`,lib:{previous:`Previous`,next:`Next`,new:`New entry`,event:`event`,events:`events`,more:`more`}},recurrence:{never:`Does not repeat`,freq:`Repeat`,daily:`Daily`,weekly:`Weekly`,monthly:`Monthly`,yearly:`Yearly`,interval:`Every`,ends:`Ends`,endsNever:`Never`,endsAfter:`After`,endsOn:`On`,times:`times`,raw:`Rule (RRULE)`,exceptions:`Exceptions`,sentence:{every:{daily_one:`Every day`,daily_other:`Every {{count}} days`,weekly_one:`Every week`,weekly_other:`Every {{count}} weeks`,monthly_one:`Every month`,monthly_other:`Every {{count}} months`,yearly_one:`Every year`,yearly_other:`Every {{count}} years`},on:`{{every}} on {{days}}`,times_one:`{{count}} time`,times_other:`{{count}} times`,until:`until {{date}}`}},days:{mo:`Monday`,tu:`Tuesday`,we:`Wednesday`,th:`Thursday`,fr:`Friday`,sa:`Saturday`,su:`Sunday`},daysShort:{mo:`Mo`,tu:`Tu`,we:`We`,th:`Th`,fr:`Fr`,sa:`Sa`,su:`Su`},daysIn:{mo:`Monday`,tu:`Tuesday`,we:`Wednesday`,th:`Thursday`,fr:`Friday`,sa:`Saturday`,su:`Sunday`}},Ya={calendar:Ja},Xa=e({calendar:()=>Za,default:()=>Qa}),Za={plugin:{label:`Календарь`,description:`Календари, события и задачи.`},library:{label:`Календарь`},entry:{label:`Календарь`,fields:{summary:`Название`,description:`Описание`,when:`Когда`,allDay:`Весь день`,location:`Место`,recurrence:`Повторение`,exdates:`Пропущенные даты`,master:`Серия`,recurrenceId:`Заменяет экземпляр`,status:`Статус`,uid:`Идентификатор синхронизации`,ics:`Данные клиента`,tags:`Теги`,notes:`Заметки`},options:{type:{event:`Событие`,task:`Задача`},status:{tentative:`Предварительно`,confirmed:`Подтверждено`,needs_action:`Нужно сделать`,in_process:`В процессе`,completed:`Выполнено`,cancelled:`Отменено`}}},task_details:{label:`Задача`,fields:{priority:`Приоритет`,percent:`Прогресс`,completed:`Выполнено в`}},validation:{rrule:`Некорректное правило повторения`},view:{today:`Сегодня`,prev:{day:`Предыдущий день`,week:`Предыдущая неделя`,month:`Предыдущий месяц`,year:`Предыдущий год`},next:{day:`Следующий день`,week:`Следующая неделя`,month:`Следующий месяц`,year:`Следующий год`},scale:{day:`День`,week:`Неделя`,month:`Месяц`,year:`Год`},more:`+{{count}}`,withoutDate:`Без даты`,allDay:`весь день`,createTitle:`Новая запись`,createElsewhere:`Новые записи создаются из списка, а не здесь.`,lib:{previous:`Назад`,next:`Вперёд`,new:`Новая запись`,event:`событие`,events:`события`,more:`ещё`}},recurrence:{never:`Не повторяется`,freq:`Повторять`,daily:`Ежедневно`,weekly:`Еженедельно`,monthly:`Ежемесячно`,yearly:`Ежегодно`,interval:`Каждые`,ends:`Заканчивается`,endsNever:`Никогда`,endsAfter:`После`,endsOn:`В дату`,times:`раз`,raw:`Правило (RRULE)`,exceptions:`Исключения`,sentence:{every:{daily_one:`Каждый день`,daily_few:`Каждые {{count}} дня`,daily_many:`Каждые {{count}} дней`,daily_other:`Каждые {{count}} дней`,weekly_one:`Каждую неделю`,weekly_few:`Каждые {{count}} недели`,weekly_many:`Каждые {{count}} недель`,weekly_other:`Каждые {{count}} недель`,monthly_one:`Каждый месяц`,monthly_few:`Каждые {{count}} месяца`,monthly_many:`Каждые {{count}} месяцев`,monthly_other:`Каждые {{count}} месяцев`,yearly_one:`Каждый год`,yearly_few:`Каждые {{count}} года`,yearly_many:`Каждые {{count}} лет`,yearly_other:`Каждые {{count}} лет`},on:`{{every}} в {{days}}`,times_one:`{{count}} раз`,times_few:`{{count}} раза`,times_many:`{{count}} раз`,times_other:`{{count}} раз`,until:`до {{date}}`}},days:{mo:`Понедельник`,tu:`Вторник`,we:`Среда`,th:`Четверг`,fr:`Пятница`,sa:`Суббота`,su:`Воскресенье`},daysShort:{mo:`Пн`,tu:`Вт`,we:`Ср`,th:`Чт`,fr:`Пт`,sa:`Сб`,su:`Вс`},daysIn:{mo:`понедельник`,tu:`вторник`,we:`среду`,th:`четверг`,fr:`пятницу`,sa:`субботу`,su:`воскресенье`}},Qa={calendar:Za},$a=e({calendar:()=>eo,default:()=>to}),eo={plugin:{label:`Календар`,description:`Календарі, події та завдання.`},library:{label:`Календар`},entry:{label:`Календар`,fields:{summary:`Назва`,description:`Опис`,when:`Коли`,allDay:`Увесь день`,location:`Місце`,recurrence:`Повторення`,exdates:`Пропущені дати`,master:`Серія`,recurrenceId:`Замінює екземпляр`,status:`Статус`,uid:`Ідентифікатор синхронізації`,ics:`Дані клієнта`,tags:`Теги`,notes:`Нотатки`},options:{type:{event:`Подія`,task:`Завдання`},status:{tentative:`Попередньо`,confirmed:`Підтверджено`,needs_action:`Треба зробити`,in_process:`У процесі`,completed:`Виконано`,cancelled:`Скасовано`}}},task_details:{label:`Завдання`,fields:{priority:`Пріоритет`,percent:`Прогрес`,completed:`Виконано о`}},validation:{rrule:`Некоректне правило повторення`},view:{today:`Сьогодні`,prev:{day:`Попередній день`,week:`Попередній тиждень`,month:`Попередній місяць`,year:`Попередній рік`},next:{day:`Наступний день`,week:`Наступний тиждень`,month:`Наступний місяць`,year:`Наступний рік`},scale:{day:`День`,week:`Тиждень`,month:`Місяць`,year:`Рік`},more:`+{{count}}`,withoutDate:`Без дати`,allDay:`увесь день`,createTitle:`Новий запис`,createElsewhere:`Нові записи створюються зі списку, а не тут.`,lib:{previous:`Назад`,next:`Вперед`,new:`Новий запис`,event:`подія`,events:`події`,more:`ще`}},recurrence:{never:`Не повторюється`,freq:`Повторювати`,daily:`Щодня`,weekly:`Щотижня`,monthly:`Щомісяця`,yearly:`Щороку`,interval:`Кожні`,ends:`Закінчується`,endsNever:`Ніколи`,endsAfter:`Після`,endsOn:`На дату`,times:`разів`,raw:`Правило (RRULE)`,exceptions:`Винятки`,sentence:{every:{daily_one:`Щодня`,daily_few:`Кожні {{count}} дні`,daily_many:`Кожні {{count}} днів`,daily_other:`Кожні {{count}} днів`,weekly_one:`Щотижня`,weekly_few:`Кожні {{count}} тижні`,weekly_many:`Кожні {{count}} тижнів`,weekly_other:`Кожні {{count}} тижнів`,monthly_one:`Щомісяця`,monthly_few:`Кожні {{count}} місяці`,monthly_many:`Кожні {{count}} місяців`,monthly_other:`Кожні {{count}} місяців`,yearly_one:`Щороку`,yearly_few:`Кожні {{count}} роки`,yearly_many:`Кожні {{count}} років`,yearly_other:`Кожні {{count}} років`},on:`{{every}} у {{days}}`,times_one:`{{count}} раз`,times_few:`{{count}} рази`,times_many:`{{count}} разів`,times_other:`{{count}} разів`,until:`до {{date}}`}},days:{mo:`Понеділок`,tu:`Вівторок`,we:`Середа`,th:`Четвер`,fr:`П'ятниця`,sa:`Субота`,su:`Неділя`},daysShort:{mo:`Пн`,tu:`Вт`,we:`Ср`,th:`Чт`,fr:`Пт`,sa:`Сб`,su:`Нд`},daysIn:{mo:`понеділок`,tu:`вівторок`,we:`середу`,th:`четвер`,fr:`п'ятницю`,sa:`суботу`,su:`неділю`}},to={calendar:eo},no=e({default:()=>ro}),ro={"claude-agent":{plugin:{label:`Claude AI agent`,description:`In-process Claude Agent SDK runtime with optional RAG.`},settings:{label:`Claude agent settings`,groups:{runtime:`Model & runtime`,rag:`RAG search`,langfuse:`Langfuse tracing`},auth_mode:`Billing mode`,auth_mode_subscription:`Subscription (session from system)`,auth_mode_api_key:`API key (pay per token)`,anthropic_api_key:`Anthropic API key`,claude_model:`Claude model`,skip_permissions:`Skip permissions check`,response_timeout:`Response timeout (s)`,rag_enabled:`Enable RAG`,openai_api_key:`OpenAI API key (embeddings, optional — default from OPENAI_API_KEY)`,langfuse_public_key:`Langfuse public key`,langfuse_secret_key:`Langfuse secret key`,langfuse_base_url:`Langfuse base URL`,tracing_enabled:`Enable Langfuse tracing`,thinking_enabled:`Extended thinking (opus/sonnet/fable only)`},models:{haiku:{label:`Haiku 4.5 · cheapest`,title:`Haiku 4.5`,hint:`cheapest`},"sonnet-medium":{label:`Sonnet 5 · quick`,title:`Sonnet 5`,hint:`quick`},"sonnet-high":{label:`Sonnet 5 · thorough`,title:`Sonnet 5`,hint:`thorough`},"opus-medium":{label:`Opus 5 · strong`,title:`Opus 5`,hint:`strong`},"opus-high":{label:`Opus 5 · maximum`,title:`Opus 5`,hint:`maximum`}}}},io=e({default:()=>ao}),ao={"claude-agent":{plugin:{label:`Claude AI-агент`,description:`Claude Agent SDK внутри процесса, с опциональным RAG.`},settings:{label:`Настройки Claude-агента`,groups:{runtime:`Модель и выполнение`,rag:`Поиск RAG`,langfuse:`Трейсинг Langfuse`},auth_mode:`Способ оплаты`,auth_mode_subscription:`Подписка (сессия из системы)`,auth_mode_api_key:`API-ключ (оплата за токены)`,anthropic_api_key:`Ключ Anthropic API`,claude_model:`Модель Claude`,skip_permissions:`Пропустить проверку прав`,response_timeout:`Тайм-аут ответа (с)`,rag_enabled:`Включить RAG`,openai_api_key:`Ключ OpenAI (эмбеддинги, опц. — по умолчанию из OPENAI_API_KEY)`,langfuse_public_key:`Langfuse public key`,langfuse_secret_key:`Langfuse secret key`,langfuse_base_url:`Langfuse base URL`,tracing_enabled:`Включить трейсинг Langfuse`,thinking_enabled:`Extended thinking (только opus/sonnet/fable)`},models:{haiku:{label:`Haiku 4.5 · экономно`,title:`Haiku 4.5`,hint:`экономно`},"sonnet-medium":{label:`Sonnet 5 · быстро`,title:`Sonnet 5`,hint:`быстро`},"sonnet-high":{label:`Sonnet 5 · тщательно`,title:`Sonnet 5`,hint:`тщательно`},"opus-medium":{label:`Opus 5 · мощно`,title:`Opus 5`,hint:`мощно`},"opus-high":{label:`Opus 5 · максимум`,title:`Opus 5`,hint:`максимум`}}}},oo=e({default:()=>so}),so={"claude-agent":{plugin:{label:`Claude AI-агент`,description:`Claude Agent SDK усередині процесу, з опційним RAG.`},settings:{label:`Налаштування Claude-агента`,groups:{runtime:`Модель і виконання`,rag:`Пошук RAG`,langfuse:`Трейсинг Langfuse`},auth_mode:`Спосіб оплати`,auth_mode_subscription:`Підписка (сесія з системи)`,auth_mode_api_key:`API-ключ (оплата за токени)`,anthropic_api_key:`Ключ Anthropic API`,claude_model:`Модель Claude`,skip_permissions:`Пропустити перевірку прав`,response_timeout:`Тайм-аут відповіді (с)`,rag_enabled:`Увімкнути RAG`,openai_api_key:`Ключ OpenAI (ембединги, опц. — типово з OPENAI_API_KEY)`,langfuse_public_key:`Langfuse public key`,langfuse_secret_key:`Langfuse secret key`,langfuse_base_url:`Langfuse base URL`,tracing_enabled:`Увімкнути трейсинг Langfuse`,thinking_enabled:`Extended thinking (лише opus/sonnet/fable)`},models:{haiku:{label:`Haiku 4.5 · економно`,title:`Haiku 4.5`,hint:`економно`},"sonnet-medium":{label:`Sonnet 5 · швидко`,title:`Sonnet 5`,hint:`швидко`},"sonnet-high":{label:`Sonnet 5 · ретельно`,title:`Sonnet 5`,hint:`ретельно`},"opus-medium":{label:`Opus 5 · потужно`,title:`Opus 5`,hint:`потужно`},"opus-high":{label:`Opus 5 · максимум`,title:`Opus 5`,hint:`максимум`}}}},co=e({console:()=>lo,default:()=>uo}),lo={plugin:{label:`Console access`,description:`Drive Coffer from a terminal AI (Claude Code / Codex) via the coffer MCP.`},settings:{label:`Console access`,intro:"## Use Coffer from the console\n\nThe Coffer server itself exposes your libraries to a terminal AI as MCP tools (`list_libraries`, `describe_type`, `list_records`, `get_record`, `create_record`, `update_record`, `delete_record`, `refresh_schema`, `search_records`, plus the tools of any installed plugin). It is schema-driven: any plugin or library you enable shows up after a server restart — no client changes.\n\nThe transport is **Streamable HTTP** on `POST /mcp` of that same server (`{{origin}}/mcp`); there is no separate process to start: the MCP tools live inside the server itself. You need an API token: **Settings → API tokens**. The token's role decides the tool set (`member` — data, `admin` — plus plugin admin tools).",claude:'### Claude Code / Claude CLI\n\n```sh\nclaude mcp add coffer -s user --transport http {{origin}}/mcp \\\n --header "Authorization: Bearer <API_TOKEN>"\n```\n\nThen in any session the tools appear as `mcp__coffer__*`. Ask e.g. _"list my libraries"_ or _"add a record to …"_ and the agent calls them directly.',codex:'### Codex CLI\n\nAdd to `~/.codex/config.toml` (keep the token in the `COFFER_TOKEN` environment variable):\n\n```toml\n[mcp_servers.coffer]\nurl = "{{origin}}/mcp"\nbearer_token_env_var = "COFFER_TOKEN"\n```',skills:"### Skills\n\nFor repeatable flows, drop a `SKILL.md` (Claude Code) or a prompt file that chains the `coffer` tools — e.g. a weekly review that reads a library and writes a summary record. The MCP tools are the only building blocks you need; no Coffer-specific SDK is required on the client side."}},uo={console:lo},fo=e({console:()=>po,default:()=>mo}),po={plugin:{label:`Консольный доступ`,description:`Управление Coffer из терминального AI (Claude Code / Codex) через MCP-сервер coffer.`},settings:{label:`Консольный доступ`,intro:"## Coffer из консоли\n\nСам сервер Coffer отдаёт твои библиотеки терминальному AI как MCP-инструменты (`list_libraries`, `describe_type`, `list_records`, `get_record`, `create_record`, `update_record`, `delete_record`, `refresh_schema`, `search_records`, плюс инструменты установленных плагинов). Управляется схемой: любой включённый плагин или библиотека появляется после перезапуска сервера — без изменений на клиенте.\n\nТранспорт — **Streamable HTTP** на `POST /mcp` того же сервера (`{{origin}}/mcp`); отдельного процесса нет — инструменты MCP живут внутри самого сервера. Нужен API-токен: **Настройки → API-токены**. Роль токена определяет набор инструментов (`member` — данные, `admin` — плюс админские инструменты плагинов).",claude:'### Claude Code / Claude CLI\n\n```sh\nclaude mcp add coffer -s user --transport http {{origin}}/mcp \\\n --header "Authorization: Bearer <API_TOKEN>"\n```\n\nЗатем в любой сессии инструменты появляются как `mcp__coffer__*`. Спроси напр. _«покажи мои библиотеки»_ или _«добавь запись в …»_ — агент вызовет их напрямую.',codex:'### Codex CLI\n\nДобавь в `~/.codex/config.toml` (токен — в переменной окружения `COFFER_TOKEN`):\n\n```toml\n[mcp_servers.coffer]\nurl = "{{origin}}/mcp"\nbearer_token_env_var = "COFFER_TOKEN"\n```',skills:"### Навыки (skills)\n\nДля повторяющихся сценариев положи `SKILL.md` (Claude Code) или промпт-файл, который цепочкой вызывает инструменты `coffer` — напр. еженедельный обзор, читающий библиотеку и пишущий запись-итог. MCP-инструментов достаточно; отдельный Coffer SDK на клиенте не нужен."}},mo={console:po},ho=e({console:()=>go,default:()=>_o}),go={plugin:{label:`Консольний доступ`,description:`Керування Coffer з термінального AI (Claude Code / Codex) через MCP-сервер coffer.`},settings:{label:`Консольний доступ`,intro:"## Coffer з консолі\n\nСам сервер Coffer віддає твої бібліотеки термінальному AI як MCP-інструменти (`list_libraries`, `describe_type`, `list_records`, `get_record`, `create_record`, `update_record`, `delete_record`, `refresh_schema`, `search_records`, плюс інструменти встановлених плагінів). Керується схемою: будь-який увімкнений плагін чи бібліотека зʼявляється після перезапуску сервера — без змін на клієнті.\n\nТранспорт — **Streamable HTTP** на `POST /mcp` того самого сервера (`{{origin}}/mcp`); окремого процесу немає — інструменти MCP живуть усередині самого сервера. Потрібен API-токен: **Налаштування → API-токени**. Роль токена вирішує набір інструментів (`member` — дані, `admin` — ще й адмінські інструменти плагінів).",claude:'### Claude Code / Claude CLI\n\n```sh\nclaude mcp add coffer -s user --transport http {{origin}}/mcp \\\n --header "Authorization: Bearer <API_TOKEN>"\n```\n\nПотім у будь-якій сесії інструменти зʼявляються як `mcp__coffer__*`. Спитай напр. _«покажи мої бібліотеки»_ або _«додай запис до …»_ — агент викличе їх напряму.',codex:'### Codex CLI\n\nДодай у `~/.codex/config.toml` (токен — у змінній оточення `COFFER_TOKEN`):\n\n```toml\n[mcp_servers.coffer]\nurl = "{{origin}}/mcp"\nbearer_token_env_var = "COFFER_TOKEN"\n```',skills:"### Навички (skills)\n\nДля повторюваних сценаріїв поклади `SKILL.md` (Claude Code) або промпт-файл, що ланцюжком викликає інструменти `coffer` — напр. щотижневий огляд, який читає бібліотеку й пише запис-підсумок. MCP-інструментів достатньо; окремий Coffer SDK на клієнті не потрібен."}},_o={console:go},vo=e({dav:()=>yo,default:()=>bo}),yo={plugin:{label:`CalDAV`,description:`Serves calendars over CalDAV and ICS.`},calendars:`Calendars`},bo={dav:yo},xo=e({dav:()=>So,default:()=>Co}),So={plugin:{label:`CalDAV`,description:`Отдача календарей по CalDAV и ICS.`},calendars:`Календари`},Co={dav:So},wo=e({dav:()=>To,default:()=>Eo}),To={plugin:{label:`CalDAV`,description:`Віддача календарів за CalDAV та ICS.`},calendars:`Календарі`},Eo={dav:To},Do=e({default:()=>ko,devices:()=>Oo}),Oo=JSON.parse('{"plugin":{"label":"Devices & network","description":"Networks, devices and their settings."},"settings":{"label":"Devices network scan","scan_info":"LAN scan runs automatically twice a day. Press the button to run a scan now.","scan_button":"Scan now","secrets_help":"<details>\\n<summary>How to fill service secrets</summary>\\n\\nAdd plaintext secrets to `~/.profile` as `export PREFIX_FIELD=value`. The LAN scan reads them and fills the matching secret slots on each service card. Hashed values (bcrypt/argon2/…) are skipped. Empty slots are always created so you can fill them manually.\\n\\n| Service | Variables |\\n| --- | --- |\\n| Home Assistant | `HOME_ASSISTANT_LOGIN`, `HOME_ASSISTANT_PASSWORD`, `HOME_ASSISTANT_TOKEN` |\\n| Nextcloud | `NEXTCLOUD_LOGIN`, `NEXTCLOUD_PASSWORD`, `NEXTCLOUD_TOKEN` |\\n| Syncthing | `SYNCTHING_TOKEN`, `SYNCTHING_LOGIN`, `SYNCTHING_PASSWORD` |\\n| Transmission | `TRANSMISSION_LOGIN`, `TRANSMISSION_PASSWORD` |\\n| Firefly III | `FIREFLY_TOKEN`, `FIREFLY_PASSWORD`, `FIREFLY_CRON_TOKEN` |\\n| MariaDB | `MARIADB_ROOT_PASSWORD`, `MARIADB_USER`, `MARIADB_PASSWORD` |\\n| Pi-hole | `PIHOLE_PASSWORD`, `PIHOLE_TOKEN` |\\n| Kodi | `KODI_LOGIN`, `KODI_PASSWORD` |\\n| Gitea | `GITEA_API_KEY`, `GITEA_PASSWORD` |\\n| Grafana | `GRAFANA_LOGIN`, `GRAFANA_PASSWORD`, `GRAFANA_TOKEN` |\\n| Vaultwarden | `VAULTWARDEN_ADMIN_TOKEN` |\\n| Portainer | `PORTAINER_LOGIN`, `PORTAINER_PASSWORD` |\\n| Proxmox | `PROXMOX_ROOT_PASSWORD`, `PROXMOX_TOKEN` |\\n| AdGuard Home | `ADGUARD_LOGIN`, `ADGUARD_PASSWORD` |\\n| Uptime Kuma | `UPTIME_KUMA_LOGIN`, `UPTIME_KUMA_PASSWORD` |\\n| Node-RED | `NODE_RED_PASSWORD`, `NODE_RED_TOKEN` |\\n| qBittorrent | `QBITTORRENT_LOGIN`, `QBITTORRENT_PASSWORD` |\\n| Radarr | `RADARR_API_KEY` |\\n| Sonarr | `SONARR_API_KEY` |\\n| Prowlarr | `PROWLARR_API_KEY` |\\n| Jellyfin | `JELLYFIN_TOKEN` |\\n| Plex | `PLEX_TOKEN` |\\n| Redis | `REDIS_PASSWORD` |\\n| PostgreSQL | `POSTGRES_USER`, `POSTGRES_PASSWORD` |\\n| Mosquitto | `MOSQUITTO_USER`, `MOSQUITTO_PASSWORD` |\\n\\n</details>","sync_targets_info":"### Where device data is written\\n\\nAfter a scan, cards sync into local app configs. Only empty/missing entries are written — manual edits are preserved.\\n\\n**Network / DNS**\\n- SSH config — `~/.ssh/config`\\n- Pi-hole — dnsmasq host-records\\n\\n**File managers**\\n- KDE Dolphin — `~/.local/share/remoteview/*.desktop` (sftp/smb/ftp/webdav)\\n- GTK (Nautilus/Thunar) — `~/.config/gtk-3.0/bookmarks`\\n- rclone — `~/.config/rclone/rclone.conf`\\n\\n**Media**\\n- Syncthing Tray — `~/.config/syncthingtray.ini`\\n- Delfin (Jellyfin) — `~/.config/delfin/config.toml`\\n- Kodi — `userdata/sources.xml`\\n\\n**Remote access**\\n- Remmina — `~/.local/share/remmina/*.remmina` (rdp/vnc/sftp)\\n- KRDC — `~/.local/share/krdc/bookmarks.xml` (rdp/vnc)\\n\\n**Bookmarks**\\n- Firefox — webexport HTML","ssh_config_path":"SSH config path","pihole_conf_path":"Pi-hole dnsmasq conf path","syncthing_ini_path":"Syncthing Tray INI path","gtk_bookmarks_path":"GTK bookmarks path","kodi_sources_path":"Kodi sources.xml path","krdc_bookmarks_path":"KRDC bookmarks path","rclone_config_path":"rclone config path","remmina_dir":"Remmina directory","remoteview_dir":"KDE Dolphin (remoteview) directory","delfin_config_path":"Delfin config path","pihole_reload_cmd":"Pi-hole reload command"},"scan":{"failTitle":"Scan failed","noMacTitle":"Devices without MAC ({{count}})","noMacBody":"Not created — MAC required for identification:","copyIp":"Copy IP","summaryTitle":"Scan complete","activeLabel":"Active","createdLabel":"Created","macUpdatedLabel":"MAC updated","skippedLabel":"Skipped","summaryPartialTitle":"Scan complete — with refusals","failedLabel":"Refused","failedTitle":"Not written ({{count}})","failedBody":"The server refused these records — the rest of the scan went through:"},"unknownDevice":"Unknown","library":{"label":"Network"},"fleet":{"label":"Network devices"},"hardware":{"label":"Devices"},"all":{"label":"Devices"},"accessTypes":{"http":"HTTP","https":"HTTPS","ssh":"SSH","mysql":"MySQL","mqtt":"MQTT","ws":"WebSocket","dns":"DNS","other":"Other"},"visibilityTypes":{"lan":"LAN","public":"Public","other":"Other"},"connFields":{"url":"URL","login":"Login","password":"Password","token":"Token"},"service":{"type":"Type","category":"Category","url":"URL","access":"Access","description":"Description","description_mode":"Description source","description_mode_key":"Translation key","description_mode_own":"Custom text","visibility":"Visibility","hide":"Hidden","links":"Links","secrets":"Secrets","secretName":"Name","secretValue":"Value","login":"Login","token":"Token","password":"Password","code":"Code","cat":{"access":"Access","infra":"Infrastructure","monitoring":"Monitoring","database":"Database","automation":"Automation","network":"Network","media":"Media","lighting":"Lighting","files":"Files","backup":"Backup","downloads":"Downloads","finance":"Finance","calendars":"Calendars","communication":"Communication","web":"Web","ai":"AI","devices":"Devices","other":"Other"},"desc":{"ssh":"SSH access to the device terminal.","pacoloco":"Pacoloco caching proxy for Arch Linux packages.","portainer":"Portainer web UI for managing Docker containers.","grafana":"Grafana dashboards for monitoring and visualizing metrics.","mariadb":"MariaDB/MySQL database server.","mysql":"MySQL database server.","postgres":"PostgreSQL database server.","redis":"Redis — in-memory key-value store.","homeassistant":"Home Assistant web UI for home automation control.","zigbee2mqtt":"Zigbee2MQTT web UI — bridge between Zigbee devices and MQTT.","mosquitto":"Mosquitto MQTT broker for IoT messaging.","mqtt":"MQTT broker for IoT messaging.","node-red":"Node-RED editor for visual automation programming.","pihole":"Pi-hole admin UI — network-wide DNS ad filter.","pihole-dns":"Pi-hole DNS server — ad filtering at the DNS level.","dns":"DNS server.","kodi":"Kodi web UI for controlling the media player and library.","jellyfin":"Jellyfin web UI — media server for streaming video and music.","pinchflat":"Pinchflat — downloads YouTube videos by subscription.","android-tv":"Web UI for controlling an Android TV media box.","twonky":"Twonky — DLNA/UPnP media server for streaming content on the network.","dlna":"UPnP/DLNA media server for streaming content to network devices.","hyperion":"Hyperion panel for controlling the ambient light by the media box.","hyperhdr":"HyperHDR panel for controlling Ambilight backlight.","wled":"WLED control panel — ESP-based RGB lighting controller.","syncthing":"Syncthing web UI for managing file synchronization.","syncthing-sync":"Syncthing sync protocol (port 22000).","nextcloud":"Nextcloud web UI — cloud storage and collaboration.","webdav":"WebDAV endpoint for mounting as a network drive.","smb":"SMB/Samba file shares.","transmission":"Transmission web UI — BitTorrent client.","firefly":"Firefly III web UI — personal finance manager.","radicale":"Radicale CalDAV/CardDAV server for calendars and contacts.","nginx-site":"nginx-based web page or proxy.","apache":"Apache web server.","lighttpd":"lighttpd web server.","http":"HTTP service or web UI.","api":"HTTP REST API.","printer":"Printer IPP endpoint for network printing.","caddy":"Caddy web server.","docker":"Docker container engine.","proxmox":"Proxmox VE virtualization hypervisor.","plex":"Plex media server for streaming.","sonarr":"Sonarr TV series manager.","radarr":"Radarr movie manager.","prowlarr":"Prowlarr indexer manager for the *arr apps.","qbittorrent":"qBittorrent BitTorrent client web UI.","adguard":"AdGuard Home DNS ad-blocker.","tailscale":"Tailscale mesh VPN.","wireguard":"WireGuard VPN.","netdata":"Netdata real-time monitoring.","prometheus":"Prometheus metrics & monitoring.","uptime-kuma":"Uptime Kuma availability monitor.","gitea":"Gitea self-hosted Git server.","vaultwarden":"Vaultwarden password manager (Bitwarden-compatible).","rdp":"Remote desktop access over RDP.","vnc":"Remote desktop access over VNC.","ftp":"File transfer over FTP.","cockpit":"Cockpit web console for server administration.","openwrt":"OpenWrt router firmware and its web interface.","opnsense":"OPNsense firewall and router platform.","unbound":"Unbound recursive DNS resolver.","zerotier":"ZeroTier virtual network.","ntp":"Network time synchronization over NTP.","snmp":"SNMP agent for equipment monitoring.","nut":"NUT daemon for UPS monitoring and safe shutdown.","authentik":"Authentik identity provider and single sign-on.","watchtower":"Watchtower automatic Docker container updates.","truenas":"TrueNAS storage system and its web interface.","coffer":"Coffer personal data platform.","traefik":"Traefik reverse proxy and its dashboard.","nginx-proxy-manager":"Nginx Proxy Manager web interface for proxy hosts and certificates.","cloudflared":"Cloudflare Tunnel connector for access without open ports.","homepage":"Homepage dashboard with service links.","zabbix":"Zabbix monitoring server and its web interface.","loki":"Loki log aggregation for Grafana.","scrutiny":"Scrutiny S.M.A.R.T. disk health monitoring.","ntfy":"ntfy push notification server.","influxdb":"InfluxDB time series database.","mongodb":"MongoDB document database.","elasticsearch":"Elasticsearch search and analytics engine.","esphome":"ESPHome firmware and API for ESP devices.","zwave-js":"Z-Wave JS UI gateway for Z-Wave devices.","n8n":"n8n workflow automation.","frigate":"Frigate video recorder with object detection.","immich":"Immich photo and video library.","navidrome":"Navidrome music streaming server.","audiobookshelf":"Audiobookshelf audiobook and podcast server.","komga":"Komga comic and book server.","jellyseerr":"Jellyseerr media request manager.","emby":"Emby media server.","rtsp":"RTSP video stream from a camera.","onvif":"ONVIF camera control and discovery.","nfs":"NFS network file share.","paperless":"Paperless-ngx document archive with OCR.","filebrowser":"File Browser web file manager.","borg":"BorgBackup deduplicating backup repository.","deluge":"Deluge torrent client.","sabnzbd":"SABnzbd Usenet downloader.","lidarr":"Lidarr music collection manager.","bazarr":"Bazarr subtitle manager for Sonarr and Radarr.","cups":"CUPS print server.","octoprint":"OctoPrint 3D printer control.","ipmi":"IPMI/BMC out-of-band server management.","actual":"Actual Budget personal budgeting.","baikal":"Baikal CalDAV and CardDAV server.","ollama":"Ollama local language model runtime.","open-webui":"Open WebUI chat interface for local models.","freshrss":"FreshRSS feed reader.","matrix":"Matrix/Synapse chat homeserver.","other":"Unknown or other service."}},"deviceGroups":{"pc":"PCs & laptops","server":"Servers","mobile":"Phones & tablets","tv":"TV & media","printer":"Printers","iot":"IoT","network":"Infrastructure","other":"Other"},"connectService":"+ Connect service","network":{"label":"Network","fields":{"description":"Description","vlan":"VLAN ID","domain":"Domain (DNS suffix)","subnet":"Subnet (CIDR)","gateway":"Gateway","dnsPrimary":"Primary DNS","dnsFallback":"Fallback DNS","poolStart":"Static pool: from","poolEnd":"Static pool: to","notes":"Notes"}},"device_info":{"label":"Device","fields":{"hostname":"Hostname","addresses":"Network addresses","ip":"IP address","mac":"MAC address","group":"Group","vendor":"Vendor","model":"Model","os":"OS","cpu":"CPU","ram":"RAM","gpu":"GPU","arch":"Architecture","kernel":"Kernel","disks_usage":"Disks","services":"Services"},"disk":{"mount":"Mount","size":"Size","used":"Used","free":"Free","usage":"Used, %","state":"State"},"disk_state":{"ok":"OK","warn":"Filling up","full":"Full"}},"service_catalog":{"label":"Service catalog"}}'),ko={devices:Oo},Ao=e({default:()=>Mo,devices:()=>jo}),jo=JSON.parse('{"plugin":{"label":"Устройства и сеть","description":"Сети, устройства и их параметры."},"settings":{"label":"Сканирование сети устройств","scan_info":"Сканирование LAN запускается автоматически дважды в день. Нажмите кнопку, чтобы запустить прогон сейчас.","scan_button":"Сканировать сейчас","secrets_help":"<details>\\n<summary>Как заполнить секреты сервисов</summary>\\n\\nДобавьте секреты в открытом виде в `~/.profile` как `export PREFIX_FIELD=value`. Скан LAN читает их и заполняет соответствующие слоты секретов на карточке сервиса. Хешированные значения (bcrypt/argon2/…) пропускаются. Пустые слоты создаются всегда — можно заполнить вручную.\\n\\n| Сервис | Переменные |\\n| --- | --- |\\n| Home Assistant | `HOME_ASSISTANT_LOGIN`, `HOME_ASSISTANT_PASSWORD`, `HOME_ASSISTANT_TOKEN` |\\n| Nextcloud | `NEXTCLOUD_LOGIN`, `NEXTCLOUD_PASSWORD`, `NEXTCLOUD_TOKEN` |\\n| Syncthing | `SYNCTHING_TOKEN`, `SYNCTHING_LOGIN`, `SYNCTHING_PASSWORD` |\\n| Transmission | `TRANSMISSION_LOGIN`, `TRANSMISSION_PASSWORD` |\\n| Firefly III | `FIREFLY_TOKEN`, `FIREFLY_PASSWORD`, `FIREFLY_CRON_TOKEN` |\\n| MariaDB | `MARIADB_ROOT_PASSWORD`, `MARIADB_USER`, `MARIADB_PASSWORD` |\\n| Pi-hole | `PIHOLE_PASSWORD`, `PIHOLE_TOKEN` |\\n| Kodi | `KODI_LOGIN`, `KODI_PASSWORD` |\\n| Gitea | `GITEA_API_KEY`, `GITEA_PASSWORD` |\\n| Grafana | `GRAFANA_LOGIN`, `GRAFANA_PASSWORD`, `GRAFANA_TOKEN` |\\n| Vaultwarden | `VAULTWARDEN_ADMIN_TOKEN` |\\n| Portainer | `PORTAINER_LOGIN`, `PORTAINER_PASSWORD` |\\n| Proxmox | `PROXMOX_ROOT_PASSWORD`, `PROXMOX_TOKEN` |\\n| AdGuard Home | `ADGUARD_LOGIN`, `ADGUARD_PASSWORD` |\\n| Uptime Kuma | `UPTIME_KUMA_LOGIN`, `UPTIME_KUMA_PASSWORD` |\\n| Node-RED | `NODE_RED_PASSWORD`, `NODE_RED_TOKEN` |\\n| qBittorrent | `QBITTORRENT_LOGIN`, `QBITTORRENT_PASSWORD` |\\n| Radarr | `RADARR_API_KEY` |\\n| Sonarr | `SONARR_API_KEY` |\\n| Prowlarr | `PROWLARR_API_KEY` |\\n| Jellyfin | `JELLYFIN_TOKEN` |\\n| Plex | `PLEX_TOKEN` |\\n| Redis | `REDIS_PASSWORD` |\\n| PostgreSQL | `POSTGRES_USER`, `POSTGRES_PASSWORD` |\\n| Mosquitto | `MOSQUITTO_USER`, `MOSQUITTO_PASSWORD` |\\n\\n</details>","sync_targets_info":"### Куда пишутся данные устройств\\n\\nПосле скана карточки синхронизируются в конфиги локальных программ. Пишутся только пустые/отсутствующие записи — ручные изменения сохраняются.\\n\\n**Сеть / DNS**\\n- SSH config — `~/.ssh/config`\\n- Pi-hole — dnsmasq host-records\\n\\n**Файловые менеджеры**\\n- KDE Dolphin — `~/.local/share/remoteview/*.desktop` (sftp/smb/ftp/webdav)\\n- GTK (Nautilus/Thunar) — `~/.config/gtk-3.0/bookmarks`\\n- rclone — `~/.config/rclone/rclone.conf`\\n\\n**Медиа**\\n- Syncthing Tray — `~/.config/syncthingtray.ini`\\n- Delfin (Jellyfin) — `~/.config/delfin/config.toml`\\n- Kodi — `userdata/sources.xml`\\n\\n**Удалённый доступ**\\n- Remmina — `~/.local/share/remmina/*.remmina` (rdp/vnc/sftp)\\n- KRDC — `~/.local/share/krdc/bookmarks.xml` (rdp/vnc)\\n\\n**Закладки**\\n- Firefox — webexport HTML","ssh_config_path":"Путь SSH config","pihole_conf_path":"Путь Pi-hole dnsmasq conf","syncthing_ini_path":"Путь Syncthing Tray INI","gtk_bookmarks_path":"Путь GTK-закладок","kodi_sources_path":"Путь Kodi sources.xml","krdc_bookmarks_path":"Путь KRDC-закладок","rclone_config_path":"Путь rclone config","remmina_dir":"Каталог Remmina","remoteview_dir":"Каталог KDE Dolphin (remoteview)","delfin_config_path":"Путь Delfin config","pihole_reload_cmd":"Команда reload Pi-hole"},"scan":{"failTitle":"Скан не удался","noMacTitle":"Устройства без MAC ({{count}})","noMacBody":"Не созданы — MAC обязателен для идентификации:","copyIp":"Копировать IP","summaryTitle":"Скан завершён","activeLabel":"Активные","createdLabel":"Создано","macUpdatedLabel":"Обновлено MAC","skippedLabel":"Пропущено","summaryPartialTitle":"Скан завершён — с отказами","failedLabel":"Отказано","failedTitle":"Не записаны ({{count}})","failedBody":"Сервер отклонил эти записи — остальная часть скана прошла:"},"unknownDevice":"Неизвестное","library":{"label":"Сеть"},"fleet":{"label":"Сетевые устройства"},"hardware":{"label":"Устройства"},"all":{"label":"Устройства"},"accessTypes":{"http":"HTTP","https":"HTTPS","ssh":"SSH","mysql":"MySQL","mqtt":"MQTT","ws":"WebSocket","dns":"DNS","other":"Другое"},"visibilityTypes":{"lan":"LAN","public":"Публичный","other":"Другое"},"connFields":{"url":"URL","login":"Логин","password":"Пароль","token":"Токен"},"service":{"type":"Тип","category":"Категория","url":"URL","access":"Доступ","description":"Описание","description_mode":"Источник описания","description_mode_key":"Ключ перевода","description_mode_own":"Свой текст","visibility":"Видимость","hide":"Скрытый","links":"Ссылки","secrets":"Секреты","secretName":"Название","secretValue":"Значение","login":"Логин","token":"Токен","password":"Пароль","code":"Код","cat":{"access":"Доступ","infra":"Инфраструктура","monitoring":"Мониторинг","database":"База данных","automation":"Автоматизация","network":"Сеть","media":"Медиа","lighting":"Подсветка","files":"Файлы","backup":"Резервные копии","downloads":"Загрузки","finance":"Финансы","calendars":"Календари","communication":"Связь","web":"Веб","ai":"ИИ","devices":"Устройства","other":"Прочее"},"desc":{"ssh":"SSH-доступ к терминалу устройства.","pacoloco":"Кэш-прокси Pacoloco для пакетов Arch Linux.","portainer":"Веб-интерфейс Portainer для управления Docker-контейнерами.","grafana":"Дашборды Grafana для мониторинга и визуализации метрик.","mariadb":"СУБД MariaDB/MySQL.","mysql":"СУБД MySQL.","postgres":"СУБД PostgreSQL.","redis":"Redis — in-memory хранилище ключ-значение.","homeassistant":"Веб-интерфейс Home Assistant для управления домашней автоматизацией.","zigbee2mqtt":"Веб-интерфейс Zigbee2MQTT — мост между Zigbee-устройствами и MQTT.","mosquitto":"MQTT-брокер Mosquitto для обмена сообщениями IoT.","mqtt":"MQTT-брокер для обмена сообщениями IoT.","node-red":"Редактор Node-RED для визуального программирования автоматизаций.","pihole":"Веб-админка Pi-hole — DNS-фильтр рекламы для локальной сети.","pihole-dns":"DNS-сервер Pi-hole — фильтр рекламы на уровне DNS.","dns":"DNS-сервер.","kodi":"Веб-интерфейс Kodi для управления медиаплеером и библиотекой.","jellyfin":"Веб-интерфейс Jellyfin — медиасервер для стриминга видео и музыки.","pinchflat":"Pinchflat — загрузчик видео с YouTube по подпискам.","android-tv":"Веб-интерфейс управления медиаприставкой на Android TV.","twonky":"Twonky — DLNA/UPnP медиасервер для стриминга контента в сети.","dlna":"UPnP/DLNA медиасервер для стриминга контента на сетевые устройства.","hyperion":"Панель Hyperion для управления подсветкой возле медиаприставки.","hyperhdr":"Панель HyperHDR для управления подсветкой Ambilight.","wled":"Панель управления WLED — контроллер RGB-подсветки на базе ESP.","syncthing":"Веб-панель Syncthing для управления синхронизацией файлов.","syncthing-sync":"Протокол синхронизации Syncthing (порт 22000).","nextcloud":"Веб-интерфейс Nextcloud — облачное хранилище и совместная работа.","webdav":"WebDAV-точка доступа для монтирования как сетевого диска.","smb":"Общие папки SMB/Samba.","transmission":"Веб-интерфейс Transmission — BitTorrent-клиент.","firefly":"Веб-интерфейс Firefly III — личный финансовый менеджер.","radicale":"CalDAV/CardDAV-сервер Radicale для календарей и контактов.","nginx-site":"Веб-страница или прокси на базе nginx.","apache":"Веб-сервер Apache.","lighttpd":"Веб-сервер lighttpd.","http":"HTTP-сервис или веб-интерфейс.","api":"HTTP REST API.","printer":"IPP-интерфейс принтера для сетевой печати.","caddy":"Веб-сервер Caddy.","docker":"Docker — движок контейнеров.","proxmox":"Proxmox VE — гипервизор виртуализации.","plex":"Plex — медиасервер для стриминга.","sonarr":"Sonarr — менеджер сериалов.","radarr":"Radarr — менеджер фильмов.","prowlarr":"Prowlarr — менеджер индексеров для *arr.","qbittorrent":"qBittorrent — веб-интерфейс BitTorrent-клиента.","adguard":"AdGuard Home — DNS-фильтр рекламы.","tailscale":"Tailscale — mesh-VPN.","wireguard":"WireGuard VPN.","netdata":"Netdata — мониторинг в реальном времени.","prometheus":"Prometheus — система метрик и мониторинга.","uptime-kuma":"Uptime Kuma — мониторинг доступности сервисов.","gitea":"Gitea — self-hosted Git-сервер.","vaultwarden":"Vaultwarden — менеджер паролей (Bitwarden-совместимый).","rdp":"Удалённый рабочий стол по RDP.","vnc":"Удалённый рабочий стол по VNC.","ftp":"Передача файлов по FTP.","cockpit":"Веб-консоль Cockpit для администрирования сервера.","openwrt":"Прошивка роутера OpenWrt и её веб-интерфейс.","opnsense":"Межсетевой экран и маршрутизатор OPNsense.","unbound":"Рекурсивный DNS-резолвер Unbound.","zerotier":"Виртуальная сеть ZeroTier.","ntp":"Синхронизация времени по NTP.","snmp":"SNMP-агент для мониторинга оборудования.","nut":"Служба NUT для мониторинга ИБП и корректного выключения.","authentik":"Провайдер аутентификации и единого входа Authentik.","watchtower":"Автоматическое обновление Docker-контейнеров Watchtower.","truenas":"Система хранения TrueNAS и её веб-интерфейс.","coffer":"Платформа личных данных Coffer.","traefik":"Обратный прокси Traefik и его панель.","nginx-proxy-manager":"Веб-интерфейс Nginx Proxy Manager для прокси-хостов и сертификатов.","cloudflared":"Коннектор Cloudflare Tunnel для доступа без открытых портов.","homepage":"Дашборд Homepage со ссылками на сервисы.","zabbix":"Сервер мониторинга Zabbix и его веб-интерфейс.","loki":"Агрегация логов Loki для Grafana.","scrutiny":"Мониторинг здоровья дисков Scrutiny по S.M.A.R.T.","ntfy":"Сервер push-уведомлений ntfy.","influxdb":"База данных временных рядов InfluxDB.","mongodb":"Документная база данных MongoDB.","elasticsearch":"Поисковый и аналитический движок Elasticsearch.","esphome":"Прошивка и API ESPHome для устройств на ESP.","zwave-js":"Шлюз Z-Wave JS UI для Z-Wave-устройств.","n8n":"Автоматизация сценариев n8n.","frigate":"Видеорегистратор Frigate с распознаванием объектов.","immich":"Библиотека фото и видео Immich.","navidrome":"Сервер потоковой музыки Navidrome.","audiobookshelf":"Сервер аудиокниг и подкастов Audiobookshelf.","komga":"Сервер комиксов и книг Komga.","jellyseerr":"Менеджер запросов на медиа Jellyseerr.","emby":"Медиасервер Emby.","rtsp":"RTSP-видеопоток с камеры.","onvif":"Управление и обнаружение камер по ONVIF.","nfs":"Сетевой файловый ресурс NFS.","paperless":"Архив документов Paperless-ngx с распознаванием текста.","filebrowser":"Веб-файловый менеджер File Browser.","borg":"Репозиторий резервных копий BorgBackup с дедупликацией.","deluge":"Торрент-клиент Deluge.","sabnzbd":"Загрузчик Usenet SABnzbd.","lidarr":"Менеджер музыкальной коллекции Lidarr.","bazarr":"Менеджер субтитров Bazarr для Sonarr и Radarr.","cups":"Сервер печати CUPS.","octoprint":"Управление 3D-принтером OctoPrint.","ipmi":"Внеполосное управление сервером через IPMI/BMC.","actual":"Личный бюджет Actual Budget.","baikal":"Сервер CalDAV и CardDAV Baikal.","ollama":"Локальный запуск языковых моделей Ollama.","open-webui":"Чат-интерфейс Open WebUI для локальных моделей.","freshrss":"Читалка RSS-лент FreshRSS.","matrix":"Домашний сервер чата Matrix/Synapse.","other":"Неизвестный или другой сервис."}},"deviceGroups":{"pc":"ПК и ноутбуки","server":"Серверы","mobile":"Телефоны и планшеты","tv":"ТВ и медиа","printer":"Принтеры","iot":"IoT","network":"Инфраструктура","other":"Другое"},"connectService":"+ Подключить сервис","network":{"label":"Сеть","fields":{"description":"Описание","vlan":"VLAN ID","domain":"Домен (DNS-суффикс)","subnet":"Подсеть (CIDR)","gateway":"Шлюз","dnsPrimary":"DNS основной","dnsFallback":"DNS резервный","poolStart":"Статический пул: от","poolEnd":"Статический пул: до","notes":"Заметки"}},"device_info":{"label":"Устройство","fields":{"hostname":"Hostname","addresses":"Сетевые адреса","ip":"IP-адрес","mac":"MAC-адрес","group":"Группа","vendor":"Производитель","model":"Модель","os":"ОС","cpu":"CPU","ram":"RAM","gpu":"GPU","arch":"Архитектура","kernel":"Ядро","disks_usage":"Диски","services":"Сервисы"},"disk":{"mount":"Точка монтирования","size":"Размер","used":"Занято","free":"Свободно","usage":"Занято, %","state":"Состояние"},"disk_state":{"ok":"Норма","warn":"Заполняется","full":"Полный"}},"service_catalog":{"label":"Каталог сервисов"}}'),Mo={devices:jo},No=e({default:()=>Fo,devices:()=>Po}),Po=JSON.parse('{"plugin":{"label":"Пристрої та мережа","description":"Мережі, пристрої та їхні параметри."},"settings":{"label":"Сканування мережі пристроїв","scan_info":"Сканування LAN запускається автоматично двічі на день. Натисніть кнопку, щоб запустити прогін зараз.","scan_button":"Сканувати зараз","secrets_help":"<details>\\n<summary>Як заповнити секрети сервісів</summary>\\n\\nДодайте секрети у відкритому вигляді в `~/.profile` як `export PREFIX_FIELD=value`. Скан LAN читає їх і заповнює відповідні слоти секретів на картці сервісу. Хешовані значення (bcrypt/argon2/…) пропускаються. Порожні слоти створюються завжди — можна заповнити вручну.\\n\\n| Сервіс | Змінні |\\n| --- | --- |\\n| Home Assistant | `HOME_ASSISTANT_LOGIN`, `HOME_ASSISTANT_PASSWORD`, `HOME_ASSISTANT_TOKEN` |\\n| Nextcloud | `NEXTCLOUD_LOGIN`, `NEXTCLOUD_PASSWORD`, `NEXTCLOUD_TOKEN` |\\n| Syncthing | `SYNCTHING_TOKEN`, `SYNCTHING_LOGIN`, `SYNCTHING_PASSWORD` |\\n| Transmission | `TRANSMISSION_LOGIN`, `TRANSMISSION_PASSWORD` |\\n| Firefly III | `FIREFLY_TOKEN`, `FIREFLY_PASSWORD`, `FIREFLY_CRON_TOKEN` |\\n| MariaDB | `MARIADB_ROOT_PASSWORD`, `MARIADB_USER`, `MARIADB_PASSWORD` |\\n| Pi-hole | `PIHOLE_PASSWORD`, `PIHOLE_TOKEN` |\\n| Kodi | `KODI_LOGIN`, `KODI_PASSWORD` |\\n| Gitea | `GITEA_API_KEY`, `GITEA_PASSWORD` |\\n| Grafana | `GRAFANA_LOGIN`, `GRAFANA_PASSWORD`, `GRAFANA_TOKEN` |\\n| Vaultwarden | `VAULTWARDEN_ADMIN_TOKEN` |\\n| Portainer | `PORTAINER_LOGIN`, `PORTAINER_PASSWORD` |\\n| Proxmox | `PROXMOX_ROOT_PASSWORD`, `PROXMOX_TOKEN` |\\n| AdGuard Home | `ADGUARD_LOGIN`, `ADGUARD_PASSWORD` |\\n| Uptime Kuma | `UPTIME_KUMA_LOGIN`, `UPTIME_KUMA_PASSWORD` |\\n| Node-RED | `NODE_RED_PASSWORD`, `NODE_RED_TOKEN` |\\n| qBittorrent | `QBITTORRENT_LOGIN`, `QBITTORRENT_PASSWORD` |\\n| Radarr | `RADARR_API_KEY` |\\n| Sonarr | `SONARR_API_KEY` |\\n| Prowlarr | `PROWLARR_API_KEY` |\\n| Jellyfin | `JELLYFIN_TOKEN` |\\n| Plex | `PLEX_TOKEN` |\\n| Redis | `REDIS_PASSWORD` |\\n| PostgreSQL | `POSTGRES_USER`, `POSTGRES_PASSWORD` |\\n| Mosquitto | `MOSQUITTO_USER`, `MOSQUITTO_PASSWORD` |\\n\\n</details>","sync_targets_info":"### Куди пишуться дані пристроїв\\n\\nПісля скану картки синхронізуються в конфіги локальних програм. Пишуться лише порожні/відсутні записи — ручні зміни зберігаються.\\n\\n**Мережа / DNS**\\n- SSH config — `~/.ssh/config`\\n- Pi-hole — dnsmasq host-records\\n\\n**Файлові менеджери**\\n- KDE Dolphin — `~/.local/share/remoteview/*.desktop` (sftp/smb/ftp/webdav)\\n- GTK (Nautilus/Thunar) — `~/.config/gtk-3.0/bookmarks`\\n- rclone — `~/.config/rclone/rclone.conf`\\n\\n**Медіа**\\n- Syncthing Tray — `~/.config/syncthingtray.ini`\\n- Delfin (Jellyfin) — `~/.config/delfin/config.toml`\\n- Kodi — `userdata/sources.xml`\\n\\n**Віддалений доступ**\\n- Remmina — `~/.local/share/remmina/*.remmina` (rdp/vnc/sftp)\\n- KRDC — `~/.local/share/krdc/bookmarks.xml` (rdp/vnc)\\n\\n**Закладки**\\n- Firefox — webexport HTML","ssh_config_path":"Шлях SSH config","pihole_conf_path":"Шлях Pi-hole dnsmasq conf","syncthing_ini_path":"Шлях Syncthing Tray INI","gtk_bookmarks_path":"Шлях GTK-закладок","kodi_sources_path":"Шлях Kodi sources.xml","krdc_bookmarks_path":"Шлях KRDC-закладок","rclone_config_path":"Шлях rclone config","remmina_dir":"Тека Remmina","remoteview_dir":"Тека KDE Dolphin (remoteview)","delfin_config_path":"Шлях Delfin config","pihole_reload_cmd":"Команда reload Pi-hole"},"scan":{"failTitle":"Скан не вдався","noMacTitle":"Пристрої без MAC ({{count}})","noMacBody":"Не створено — MAC обов\'язковий для ідентифікації:","copyIp":"Копіювати IP","summaryTitle":"Скан завершено","activeLabel":"Активні","createdLabel":"Створено","macUpdatedLabel":"Оновлено MAC","skippedLabel":"Пропущено","summaryPartialTitle":"Скан завершено — з відмовами","failedLabel":"Відмовлено","failedTitle":"Не записані ({{count}})","failedBody":"Сервер відхилив ці записи — решта скану пройшла:"},"unknownDevice":"Невідоме","library":{"label":"Мережа"},"fleet":{"label":"Мережеві пристрої"},"hardware":{"label":"Пристрої"},"all":{"label":"Пристрої"},"accessTypes":{"http":"HTTP","https":"HTTPS","ssh":"SSH","mysql":"MySQL","mqtt":"MQTT","ws":"WebSocket","dns":"DNS","other":"Інше"},"visibilityTypes":{"lan":"LAN","public":"Публічний","other":"Інше"},"connFields":{"url":"URL","login":"Логін","password":"Пароль","token":"Токен"},"service":{"type":"Тип","category":"Категорія","url":"URL","access":"Доступ","description":"Опис","description_mode":"Джерело опису","description_mode_key":"Ключ перекладу","description_mode_own":"Власний текст","visibility":"Видимість","hide":"Прихований","links":"Посилання","secrets":"Секрети","secretName":"Назва","secretValue":"Значення","login":"Логін","token":"Токен","password":"Пароль","code":"Код","cat":{"access":"Доступ","infra":"Інфраструктура","monitoring":"Моніторинг","database":"База даних","automation":"Автоматизація","network":"Мережа","media":"Медіа","lighting":"Підсвітка","files":"Файли","backup":"Резервні копії","downloads":"Завантаження","finance":"Фінанси","calendars":"Календарі","communication":"Зв\'язок","web":"Веб","ai":"ШІ","devices":"Пристрої","other":"Інше"},"desc":{"ssh":"SSH-доступ до терміналу пристрою.","pacoloco":"Кеш-проксі Pacoloco для пакетів Arch Linux.","portainer":"Веб-інтерфейс Portainer для керування Docker-контейнерами.","grafana":"Дашборди Grafana для моніторингу та візуалізації метрик.","mariadb":"СУБД MariaDB/MySQL.","mysql":"СУБД MySQL.","postgres":"СУБД PostgreSQL.","redis":"Redis — in-memory сховище ключ-значення.","homeassistant":"Веб-інтерфейс Home Assistant для керування домашньою автоматизацією.","zigbee2mqtt":"Веб-інтерфейс Zigbee2MQTT — міст між Zigbee-пристроями і MQTT.","mosquitto":"MQTT-брокер Mosquitto для обміну повідомленнями IoT.","mqtt":"MQTT-брокер для обміну повідомленнями IoT.","node-red":"Редактор Node-RED для візуального програмування автоматизацій.","pihole":"Веб-адмінка Pi-hole — DNS-фільтр реклами для локальної мережі.","pihole-dns":"DNS-сервер Pi-hole — фільтр реклами на рівні DNS.","dns":"DNS-сервер.","kodi":"Веб-інтерфейс Kodi для керування медіаплеєром і бібліотекою.","jellyfin":"Веб-інтерфейс Jellyfin — медіасервер для стрімінгу відео та музики.","pinchflat":"Pinchflat — завантажувач відео з YouTube за підписками.","android-tv":"Веб-інтерфейс керування медіаприставкою на Android TV.","twonky":"Twonky — DLNA/UPnP медіасервер для стрімінгу контенту в мережі.","dlna":"UPnP/DLNA медіасервер для стрімінгу контенту на мережеві пристрої.","hyperion":"Панель Hyperion для керування підсвіткою біля медіаприставки.","hyperhdr":"Панель HyperHDR для керування підсвіткою Ambilight.","wled":"Панель керування WLED — контролер RGB-підсвітки на базі ESP.","syncthing":"Веб-панель Syncthing для керування синхронізацією файлів.","syncthing-sync":"Протокол синхронізації Syncthing (порт 22000).","nextcloud":"Веб-інтерфейс Nextcloud — хмарне сховище та колаборація.","webdav":"WebDAV-точка доступу для монтування як мережевого диска.","smb":"Спільні теки SMB/Samba.","transmission":"Веб-інтерфейс Transmission — BitTorrent-клієнт.","firefly":"Веб-інтерфейс Firefly III — особистий фінансовий менеджер.","radicale":"CalDAV/CardDAV-сервер Radicale для календарів і контактів.","nginx-site":"Веб-сторінка або проксі на базі nginx.","apache":"Веб-сервер Apache.","lighttpd":"Веб-сервер lighttpd.","http":"HTTP-сервіс або веб-інтерфейс.","api":"HTTP REST API.","printer":"IPP-інтерфейс принтера для мережевого друку.","caddy":"Веб-сервер Caddy.","docker":"Docker — рушій контейнерів.","proxmox":"Proxmox VE — гіпервізор віртуалізації.","plex":"Plex — медіасервер для стрімінгу.","sonarr":"Sonarr — менеджер серіалів.","radarr":"Radarr — менеджер фільмів.","prowlarr":"Prowlarr — менеджер індексерів для *arr.","qbittorrent":"qBittorrent — веб-інтерфейс BitTorrent-клієнта.","adguard":"AdGuard Home — DNS-фільтр реклами.","tailscale":"Tailscale — mesh-VPN.","wireguard":"WireGuard VPN.","netdata":"Netdata — моніторинг у реальному часі.","prometheus":"Prometheus — система метрик і моніторингу.","uptime-kuma":"Uptime Kuma — моніторинг доступності сервісів.","gitea":"Gitea — self-hosted Git-сервер.","vaultwarden":"Vaultwarden — менеджер паролів (Bitwarden-сумісний).","rdp":"Віддалений робочий стіл через RDP.","vnc":"Віддалений робочий стіл через VNC.","ftp":"Передавання файлів через FTP.","cockpit":"Вебконсоль Cockpit для адміністрування сервера.","openwrt":"Прошивка роутера OpenWrt та її вебінтерфейс.","opnsense":"Мережевий екран і маршрутизатор OPNsense.","unbound":"Рекурсивний DNS-резолвер Unbound.","zerotier":"Віртуальна мережа ZeroTier.","ntp":"Синхронізація часу через NTP.","snmp":"SNMP-агент для моніторингу обладнання.","nut":"Служба NUT для моніторингу ДБЖ і коректного вимкнення.","authentik":"Провайдер автентифікації та єдиного входу Authentik.","watchtower":"Автоматичне оновлення Docker-контейнерів Watchtower.","truenas":"Система зберігання TrueNAS та її вебінтерфейс.","coffer":"Платформа особистих даних Coffer.","traefik":"Зворотний проксі Traefik та його панель.","nginx-proxy-manager":"Вебінтерфейс Nginx Proxy Manager для проксі-хостів і сертифікатів.","cloudflared":"Конектор Cloudflare Tunnel для доступу без відкритих портів.","homepage":"Дашборд Homepage із посиланнями на сервіси.","zabbix":"Сервер моніторингу Zabbix та його вебінтерфейс.","loki":"Агрегація логів Loki для Grafana.","scrutiny":"Моніторинг стану дисків Scrutiny за S.M.A.R.T.","ntfy":"Сервер push-сповіщень ntfy.","influxdb":"База даних часових рядів InfluxDB.","mongodb":"Документна база даних MongoDB.","elasticsearch":"Пошуковий та аналітичний рушій Elasticsearch.","esphome":"Прошивка та API ESPHome для пристроїв на ESP.","zwave-js":"Шлюз Z-Wave JS UI для Z-Wave-пристроїв.","n8n":"Автоматизація сценаріїв n8n.","frigate":"Відеореєстратор Frigate з розпізнаванням об\'єктів.","immich":"Бібліотека фото та відео Immich.","navidrome":"Сервер потокової музики Navidrome.","audiobookshelf":"Сервер аудіокниг і подкастів Audiobookshelf.","komga":"Сервер коміксів і книжок Komga.","jellyseerr":"Менеджер запитів на медіа Jellyseerr.","emby":"Медіасервер Emby.","rtsp":"RTSP-відеопотік з камери.","onvif":"Керування та виявлення камер за ONVIF.","nfs":"Мережевий файловий ресурс NFS.","paperless":"Архів документів Paperless-ngx із розпізнаванням тексту.","filebrowser":"Вебфайловий менеджер File Browser.","borg":"Репозиторій резервних копій BorgBackup із дедуплікацією.","deluge":"Торент-клієнт Deluge.","sabnzbd":"Завантажувач Usenet SABnzbd.","lidarr":"Менеджер музичної колекції Lidarr.","bazarr":"Менеджер субтитрів Bazarr для Sonarr і Radarr.","cups":"Сервер друку CUPS.","octoprint":"Керування 3D-принтером OctoPrint.","ipmi":"Позасмугове керування сервером через IPMI/BMC.","actual":"Особистий бюджет Actual Budget.","baikal":"Сервер CalDAV і CardDAV Baikal.","ollama":"Локальний запуск мовних моделей Ollama.","open-webui":"Чат-інтерфейс Open WebUI для локальних моделей.","freshrss":"Читалка RSS-стрічок FreshRSS.","matrix":"Домашній сервер чату Matrix/Synapse.","other":"Невідомий або інший сервіс."}},"deviceGroups":{"pc":"ПК та ноутбуки","server":"Сервери","mobile":"Телефони та планшети","tv":"ТВ та медіа","printer":"Принтери","iot":"IoT","network":"Інфраструктура","other":"Інше"},"connectService":"+ Підключити сервіс","network":{"label":"Мережа","fields":{"description":"Опис","vlan":"VLAN ID","domain":"Домен (DNS-суфікс)","subnet":"Підмережа (CIDR)","gateway":"Шлюз","dnsPrimary":"DNS основний","dnsFallback":"DNS резервний","poolStart":"Статичний пул: від","poolEnd":"Статичний пул: до","notes":"Нотатки"}},"device_info":{"label":"Пристрій","fields":{"hostname":"Hostname","addresses":"Мережеві адреси","ip":"IP-адреса","mac":"MAC-адреса","group":"Група","vendor":"Виробник","model":"Модель","os":"ОС","cpu":"CPU","ram":"RAM","gpu":"GPU","arch":"Архітектура","kernel":"Ядро","disks_usage":"Диски","services":"Сервіси"},"disk":{"mount":"Точка монтування","size":"Розмір","used":"Зайнято","free":"Вільно","usage":"Зайнято, %","state":"Стан"},"disk_state":{"ok":"Норма","warn":"Заповнюється","full":"Повний"}},"service_catalog":{"label":"Каталог сервісів"}}'),Fo={devices:Po},Io=e({default:()=>Ro,documents:()=>Lo}),Lo={plugin:{label:`Documents`,description:`Personal documents and identity.`},library:{label:`Documents`},person_identity:{label:`Identity`,fields:{nationality:`Nationality`,variants:`Variants (languages)`},variants:{lang:`Language`,name:`First name`,surname:`Last name`}},personal_document:{label:`Document`,fields:{about:`Description`,surname:`Surname`,given_names:`Given names`,sex:`Sex`,birth_date:`Date of birth`,nationality:`Nationality`,number:`Document number`,record_no:`Record No.`,issued:`Date of issue`,expires:`Expiry date`,authority:`Issuing authority`,storage:`Storage location`,mrz:`MRZ (machine-readable zone)`,owner:`Owner`,photos:`Other photos`,notes:`Notes`,tags:`Tags`,portrait:`Document photo`},options:{sex:{M:`Male`,F:`Female`},type:{P:`Passport`,PA:`Passport (biometric)`,ID:`ID card`,DL:`Driver's licence`,RP:`Residence permit`,TP:`Temporary protection`,MIL:`Military ID`,TIN:`Tax number`,SSN:`Social insurance number`,V:`Visa`,WP:`Work permit`,MC:`Medical card / policy`,INS:`Insurance policy`,BR:`Birth certificate`,MAR:`Marriage certificate`,DIV:`Divorce certificate`,DEA:`Death certificate`,EDU:`Diploma or education certificate`,VAC:`Vaccination certificate`,OT:`Other`}}}},Ro={documents:Lo},zo=e({default:()=>Vo,documents:()=>Bo}),Bo={plugin:{label:`Документы`,description:`Личные документы и идентичность.`},library:{label:`Документы`},person_identity:{label:`Идентичность`,fields:{nationality:`Гражданство`,variants:`Варианты (языки)`},variants:{lang:`Язык`,name:`Имя`,surname:`Фамилия`}},personal_document:{label:`Документ`,fields:{about:`Описание`,surname:`Фамилия`,given_names:`Имя и отчество`,sex:`Пол`,birth_date:`Дата рождения`,nationality:`Гражданство`,number:`Номер документа`,record_no:`Запись №`,issued:`Выдан`,expires:`Действителен до`,authority:`Кем выдан`,storage:`Место хранения`,mrz:`MRZ (строка)`,owner:`Владелец`,photos:`Другие фото`,notes:`Заметки`,tags:`Теги`,portrait:`Фото на документе`},options:{sex:{M:`Мужской`,F:`Женский`},type:{P:`Паспорт`,PA:`Паспорт (биометрический)`,ID:`ID-карта`,DL:`Водительское удостоверение`,RP:`Вид на жительство`,TP:`Временная защита`,MIL:`Военный билет`,TIN:`Налоговый номер (ИНН)`,SSN:`Номер социального страхования`,V:`Виза`,WP:`Разрешение на работу`,MC:`Медицинская карта / полис`,INS:`Страховой полис`,BR:`Свидетельство о рождении`,MAR:`Свидетельство о браке`,DIV:`Свидетельство о расторжении брака`,DEA:`Свидетельство о смерти`,EDU:`Диплом или свидетельство об образовании`,VAC:`Сертификат о вакцинации`,OT:`Другое`}}}},Vo={documents:Bo},Ho=e({default:()=>Wo,documents:()=>Uo}),Uo={plugin:{label:`Документи`,description:`Особисті документи та ідентичність.`},library:{label:`Документи`},person_identity:{label:`Ідентичність`,fields:{nationality:`Громадянство`,variants:`Варіанти (мови)`},variants:{lang:`Мова`,name:`Ім'я`,surname:`Прізвище`}},personal_document:{label:`Документ`,fields:{about:`Опис`,surname:`Прізвище`,given_names:`Ім'я та по батькові`,sex:`Стать`,birth_date:`Дата народження`,nationality:`Громадянство`,number:`Номер документа`,record_no:`Запис №`,issued:`Виданий`,expires:`Дійсний до`,authority:`Ким виданий`,storage:`Де зберігається`,mrz:`MRZ (машиночитаємий рядок)`,owner:`Власник`,photos:`Інші фото`,notes:`Нотатки`,tags:`Теги`,portrait:`Фото на документі`},options:{sex:{M:`Чоловіча`,F:`Жіноча`},type:{P:`Паспорт`,PA:`Паспорт (біометричний)`,ID:`ID-картка`,DL:`Посвідчення водія`,RP:`Посвідка на проживання`,TP:`Тимчасовий захист`,MIL:`Військовий квиток`,TIN:`Податковий номер (РНОКПП)`,SSN:`Номер соціального страхування`,V:`Віза`,WP:`Дозвіл на роботу`,MC:`Медична картка / полюс`,INS:`Страховий поліс`,BR:`Свідоцтво про народження`,MAR:`Свідоцтво про шлюб`,DIV:`Свідоцтво про розірвання шлюбу`,DEA:`Свідоцтво про смерть`,EDU:`Диплом або свідоцтво про освіту`,VAC:`Сертифікат про вакцинацію`,OT:`Інше`}}}},Wo={documents:Uo},Go=e({default:()=>qo,drone:()=>Ko}),Ko={plugin:{label:`Drones`,description:`FPV drones and their components.`},library:{label:`Drones`},fleet:{label:`Drone fleet`},options:{none:`None`,adhesive:`Adhesive / no holes`,videoSystems:{analog_5_8:`Analog 5.8 GHz`},polarization:{rhcp:`RHCP (right-hand circular)`,lhcp:`LHCP (left-hand circular)`,linear:`Linear`},antennaTypes:{omni:`Omnidirectional / dipole`,patch:`Patch`,helical:`Helical`,pagoda:`Pagoda`,cloverleaf:`Cloverleaf`,monopole:`Monopole`,whip:`Whip`},cameraAspect:{switchable:`Switchable`},cameraOutput:{analog_cvbs:`Analog CVBS`},outcome:{ok:`OK`,low_voltage:`Low voltage`,crash:`Crash`,lost:`Lost`},sky:{clear:`Clear`,cloudy:`Cloudy`,overcast:`Overcast`,fog:`Fog`,rain:`Rain`,snow:`Snow`}},drone:{label:`FPV Drone`,fields:{frame_size:`Frame`,purpose:`Purpose`,motors:`Motors`,props:`Propellers`,camera:`Camera`,flight_controller:`Flight controller`,vtx:`Video transmitter`,gps_module:`GPS module`,radio_link:`Radio link`,receiver:`Receiver`,video_system:`Video system`,power_module:`Power`,flight_time:`Flight time`,firmware:`Firmware`,firmware_version:`Firmware version`,firmware_target:`Firmware target`,notes:`Notes`,snippet_title:`Title`,snippet_summary:`What it covers`,snippet:`Note`,flights:`Flights`},groups:{snippets:`Configuration notes`}},flight:{label:`Flight`,groups:{weather:`Weather`,setup:`Setup`},fields:{date:`Date`,description:`Description`,place:`Place`,aircraft:`Aircraft`,batteries:`Batteries used`,packs:`Packs`,battery:`Battery`,duration:`Duration`,pack_outcome:`Outcome`,pack_notes:`Notes`,outcome:`Outcome`,temp:`Temperature`,wind:`Wind`,sky:`Sky`,firmware_version:`Firmware version`,tune:`Tune`,damage:`Damaged parts`,video:`Video`,photos:`Photos`,edit_link:`Edited cut`,tags:`Tags`,notes:`Notes`}},drone_battery:{label:`Drone battery`,fields:{charger:`Charger`,cells:`Cell count`,capacity:`Capacity`,c_rate:`C-rating`,auw:`AUW (all-up weight)`,flights:`Flights`,notes:`Notes`}},drone_vtx:{label:`Video transmitter (VTX)`,fields:{input_voltage:`Input voltage`,protocol:`Protocol`,antenna_interface:`Antenna connector`,channel_count:`Channels`,mounting:`Mounting`,built_in_microphone:`Built-in microphone`,frequency_groups:`Frequency groups`,power_level:`Level`,current_ma:`Current, mA`,dbm:`Power, dBm`,notes:`Notes`},groups:{power_levels:`Power levels`}},drone_goggles:{label:`FPV goggles`,fields:{display_size:`Display`,display_resolution:`Resolution`,display_brightness:`Brightness`,view_angle:`Field of view`,antenna:`Antenna`,frequency_bands:`Frequency bands`,battery:`Battery`,battery_life:`Battery life`,charging:`Charging`,band:`Band`,channels:`Frequencies, MHz`,notes:`Notes`},groups:{band_channels:`Band channels`}},drone_gps:{label:`Drone GPS module`,fields:{gnss_chip:`GNSS chip`,compass_chip:`Compass`,barometer:`Barometer`,interface:`Interface`,input_voltage:`Input voltage`,update_rate_hz:`Update rate (Hz)`,receiving_channels:`Receiving channels`,supported_protocols:`Protocols`,baud_rates:`Baud rates`,satellite_systems:`Satellite systems`,notes:`Notes`}},drone_flight_controller:{label:`Flight controller`,fields:{mcu:`MCU`,gyro:`Gyroscope`,barometer:`Barometer`,osd_chip:`OSD chip`,blackbox:`Blackbox`,bluetooth:`Bluetooth`,wifi:`Wi-Fi`,current_sensor_input:`Current sensor`,power_input:`Input voltage`,constant_current:`Constant current`,peak_current:`Peak current`,bec_5v:`BEC 5V`,bec_9v:`BEC 9V`,mounting:`Mounting`,uart_count:`UART ports`,supported_firmware:`Supported firmware`,firmware_target:`Firmware target`,build_role:`Build role`,notes:`Notes`}},drone_antenna:{label:`Antenna`,fields:{rf_band:`Bands`,polarization:`Polarization`,antenna_type:`Type`,connector:`Connector`,gain_dbi:`Gain, dBi`,cable_length:`Cable length, mm`,notes:`Notes`}},drone_receiver:{label:`Receiver`,fields:{radio_link:`Radio link`,rf_band:`Bands`,output_protocol:`Output protocol`,antenna_connector:`Antenna connector`,antenna_count:`Antennas`,telemetry:`Telemetry`,diversity:`Diversity`,input_voltage:`Input voltage`,firmware_version:`Firmware version`,notes:`Notes`}},drone_camera:{label:`FPV camera`,fields:{sensor:`Sensor`,resolution_tvl:`Resolution, TVL`,aspect_ratio:`Aspect ratio`,lens_mm:`Lens, mm`,fov_deg:`Field of view, °`,output:`Output`,camera_size:`Size class`,input_voltage:`Input voltage`,notes:`Notes`}},contrib:{subtype:{aircraft:`Aircraft`,radio:`FPV controller`,frame:`Frame and parts`,rtf:`Ready-to-fly drone (RTF)`,accessory:`Accessory`}},migration:{slot_unmatched:`Legacy {slot}: no things/item[type=drone, subtype={subtype}] named "{text}" — link it manually.`,slot_ambiguous:`Legacy {slot}: "{text}" matches {count} things/item[type=drone, subtype={subtype}] records — link it manually.`}},qo={drone:Ko},Jo=e({default:()=>Xo,drone:()=>Yo}),Yo={plugin:{label:`Дроны`,description:`FPV-дроны и их компоненты.`},library:{label:`Дроны`},fleet:{label:`Парк дронов`},options:{none:`Нет`,adhesive:`На клей / без отверстий`,videoSystems:{analog_5_8:`Аналог 5.8 ГГц`},polarization:{rhcp:`RHCP (правая круговая)`,lhcp:`LHCP (левая круговая)`,linear:`Линейная`},antennaTypes:{omni:`Всенаправленная / диполь`,patch:`Патч`,helical:`Спиральная`,pagoda:`Pagoda`,cloverleaf:`Клевер`,monopole:`Монополь`,whip:`Штырь`},cameraAspect:{switchable:`Переключаемое`},cameraOutput:{analog_cvbs:`Аналог CVBS`},outcome:{ok:`Успешно`,low_voltage:`Низкое напряжение`,crash:`Авария`,lost:`Потерян`},sky:{clear:`Ясно`,cloudy:`Облачно`,overcast:`Пасмурно`,fog:`Туман`,rain:`Дождь`,snow:`Снег`}},drone:{label:`FPV-дрон`,fields:{frame_size:`Рама`,purpose:`Назначение`,motors:`Моторы`,props:`Пропеллеры`,camera:`Камера`,flight_controller:`Полётный контроллер`,vtx:`Видеопередатчик`,gps_module:`GPS-модуль`,radio_link:`Радиосвязь`,receiver:`Приёмник`,video_system:`Видеосистема`,power_module:`Питание`,flight_time:`Время полёта`,firmware:`Прошивка`,firmware_version:`Версия прошивки`,firmware_target:`Цель прошивки`,notes:`Заметки`,snippet_title:`Название`,snippet_summary:`О чём`,snippet:`Заметка`,flights:`Полёты`},groups:{snippets:`Заметки по настройке`}},flight:{label:`Полёт`,groups:{weather:`Погода`,setup:`Настройка`},fields:{date:`Дата`,description:`Описание`,place:`Место`,aircraft:`Летательный аппарат`,batteries:`Использованные аккумуляторы`,packs:`Комплекты`,battery:`Аккумулятор`,duration:`Длительность`,pack_outcome:`Результат`,pack_notes:`Заметки`,outcome:`Результат`,temp:`Температура`,wind:`Ветер`,sky:`Небо`,firmware_version:`Версия прошивки`,tune:`Настройка ПИД`,damage:`Повреждённые детали`,video:`Видео`,photos:`Фото`,edit_link:`Смонтированное видео`,tags:`Теги`,notes:`Заметки`}},drone_battery:{label:`Аккумулятор дрона`,fields:{charger:`Зарядное устройство`,cells:`Количество ячеек`,capacity:`Ёмкость`,c_rate:`C-рейтинг`,auw:`AUW (вес в полёте)`,flights:`Полёты`,notes:`Заметки`}},drone_vtx:{label:`Видеопередатчик (VTX)`,fields:{input_voltage:`Входное напряжение`,protocol:`Протокол`,antenna_interface:`Антенный разъём`,channel_count:`Каналов`,mounting:`Крепление`,built_in_microphone:`Встроенный микрофон`,frequency_groups:`Группы частот`,power_level:`Уровень`,current_ma:`Ток, мА`,dbm:`Мощность, дБм`,notes:`Заметки`},groups:{power_levels:`Уровни мощности`}},drone_goggles:{label:`FPV-очки`,fields:{display_size:`Дисплей`,display_resolution:`Разрешение`,display_brightness:`Яркость`,view_angle:`Угол обзора`,antenna:`Антенна`,frequency_bands:`Радиодиапазоны`,battery:`Аккумулятор`,battery_life:`Время работы`,charging:`Зарядка`,band:`Диапазон`,channels:`Частоты, МГц`,notes:`Заметки`},groups:{band_channels:`Каналы по диапазонам`}},drone_gps:{label:`GPS-модуль дрона`,fields:{gnss_chip:`GNSS чип`,compass_chip:`Компас`,barometer:`Барометр`,interface:`Интерфейс`,input_voltage:`Входное напряжение`,update_rate_hz:`Частота обновления (Гц)`,receiving_channels:`Каналов приёма`,supported_protocols:`Протоколы`,baud_rates:`Baud rates`,satellite_systems:`Спутниковые системы`,notes:`Заметки`}},drone_flight_controller:{label:`Полётный контроллер`,fields:{mcu:`MCU`,gyro:`Гироскоп`,barometer:`Барометр`,osd_chip:`OSD-чип`,blackbox:`Blackbox`,bluetooth:`Bluetooth`,wifi:`Wi-Fi`,current_sensor_input:`Датчик тока`,power_input:`Входное напряжение`,constant_current:`Постоянный ток`,peak_current:`Пиковый ток`,bec_5v:`BEC 5V`,bec_9v:`BEC 9V`,mounting:`Крепление`,uart_count:`UART портов`,supported_firmware:`Поддерживаемые прошивки`,firmware_target:`Цель прошивки`,build_role:`Роль в сборке`,notes:`Заметки`}},drone_antenna:{label:`Антенна`,fields:{rf_band:`Диапазоны`,polarization:`Поляризация`,antenna_type:`Тип`,connector:`Разъём`,gain_dbi:`Усиление, дБи`,cable_length:`Длина кабеля, мм`,notes:`Заметки`}},drone_receiver:{label:`Приёмник`,fields:{radio_link:`Радиолинк`,rf_band:`Диапазоны`,output_protocol:`Протокол вывода`,antenna_connector:`Антенный разъём`,antenna_count:`Антенн`,telemetry:`Телеметрия`,diversity:`Diversity`,input_voltage:`Входное напряжение`,firmware_version:`Версия прошивки`,notes:`Заметки`}},drone_camera:{label:`FPV камера`,fields:{sensor:`Матрица`,resolution_tvl:`Разрешение, TVL`,aspect_ratio:`Соотношение сторон`,lens_mm:`Объектив, мм`,fov_deg:`Угол обзора, °`,output:`Выход`,camera_size:`Типоразмер`,input_voltage:`Входное напряжение`,notes:`Заметки`}},contrib:{subtype:{aircraft:`Летательный аппарат`,radio:`FPV контроллер`,frame:`Рама и детали`,rtf:`Дрон готовый к полёту (RTF)`,accessory:`Аксессуар`}},migration:{slot_unmatched:`Устаревший текст {slot}: ни один things/item[type=drone, subtype={subtype}] не назван "{text}" — свяжите вручную.`,slot_ambiguous:`Устаревший текст {slot}: "{text}" совпадает с {count} записями things/item[type=drone, subtype={subtype}] — свяжите вручную.`}},Xo={drone:Yo},Zo=e({default:()=>$o,drone:()=>Qo}),Qo={plugin:{label:`Дрони`,description:`FPV-дрони та їхні компоненти.`},library:{label:`Дрони`},fleet:{label:`Парк дронів`},options:{none:`Немає`,adhesive:`На клей / без отворів`,videoSystems:{analog_5_8:`Аналог 5.8 ГГц`},polarization:{rhcp:`RHCP (права кругова)`,lhcp:`LHCP (ліва кругова)`,linear:`Лінійна`},antennaTypes:{omni:`Всенаправлена / диполь`,patch:`Патч`,helical:`Спіральна`,pagoda:`Pagoda`,cloverleaf:`Конюшина`,monopole:`Монополь`,whip:`Штир`},cameraAspect:{switchable:`Перемикається`},cameraOutput:{analog_cvbs:`Аналог CVBS`},outcome:{ok:`Успішно`,low_voltage:`Низька напруга`,crash:`Аварія`,lost:`Втрачено`},sky:{clear:`Ясно`,cloudy:`Хмарно`,overcast:`Похмуро`,fog:`Туман`,rain:`Дощ`,snow:`Сніг`}},drone:{label:`FPV-дрон`,fields:{frame_size:`Рама`,purpose:`Призначення`,motors:`Мотори`,props:`Пропелери`,camera:`Камера`,flight_controller:`Польотний контролер`,vtx:`Відеопередавач`,gps_module:`GPS-модуль`,radio_link:`Радіозв'язок`,receiver:`Приймач`,video_system:`Відеосистема`,power_module:`Живлення`,flight_time:`Час польоту`,firmware:`Прошивка`,firmware_version:`Версія прошивки`,firmware_target:`Ціль прошивки`,notes:`Нотатки`,snippet_title:`Назва`,snippet_summary:`Про що`,snippet:`Нотатка`,flights:`Польоти`},groups:{snippets:`Нотатки з налаштування`}},flight:{label:`Політ`,groups:{weather:`Погода`,setup:`Налаштування`},fields:{date:`Дата`,description:`Опис`,place:`Місце`,aircraft:`Літальний апарат`,batteries:`Використані акумулятори`,packs:`Комплекти`,battery:`Акумулятор`,duration:`Тривалість`,pack_outcome:`Результат`,pack_notes:`Нотатки`,outcome:`Результат`,temp:`Температура`,wind:`Вітер`,sky:`Небо`,firmware_version:`Версія прошивки`,tune:`Налаштування ПІД`,damage:`Пошкоджені деталі`,video:`Відео`,photos:`Фото`,edit_link:`Змонтоване відео`,tags:`Теги`,notes:`Нотатки`}},drone_battery:{label:`Акумулятор дрона`,fields:{charger:`Зарядний пристрій`,cells:`Кількість комірок`,capacity:`Ємність`,c_rate:`C-рейтинг`,auw:`AUW (вага в польоті)`,flights:`Польоти`,notes:`Нотатки`}},drone_vtx:{label:`Відеопередавач (VTX)`,fields:{input_voltage:`Вхідна напруга`,protocol:`Протокол`,antenna_interface:`Антенний роз'єм`,channel_count:`Каналів`,mounting:`Кріплення`,built_in_microphone:`Вбудований мікрофон`,frequency_groups:`Групи частот`,power_level:`Рівень`,current_ma:`Струм, мА`,dbm:`Потужність, дБм`,notes:`Нотатки`},groups:{power_levels:`Рівні потужності`}},drone_goggles:{label:`FPV-окуляри`,fields:{display_size:`Дисплей`,display_resolution:`Роздільна здатність`,display_brightness:`Яскравість`,view_angle:`Кут огляду`,antenna:`Антена`,frequency_bands:`Радіосмуги`,battery:`Акумулятор`,battery_life:`Час роботи`,charging:`Зарядка`,band:`Діапазон`,channels:`Частоти, МГц`,notes:`Нотатки`},groups:{band_channels:`Канали за діапазонами`}},drone_gps:{label:`GPS-модуль дрона`,fields:{gnss_chip:`GNSS чіп`,compass_chip:`Компас`,barometer:`Барометр`,interface:`Інтерфейс`,input_voltage:`Вхідна напруга`,update_rate_hz:`Частота оновлення (Гц)`,receiving_channels:`Каналів прийому`,supported_protocols:`Протоколи`,baud_rates:`Baud rates`,satellite_systems:`Супутникові системи`,notes:`Нотатки`}},drone_flight_controller:{label:`Польотний контролер`,fields:{mcu:`MCU`,gyro:`Гіроскоп`,barometer:`Барометр`,osd_chip:`OSD-чіп`,blackbox:`Blackbox`,bluetooth:`Bluetooth`,wifi:`Wi-Fi`,current_sensor_input:`Датчик струму`,power_input:`Вхідна напруга`,constant_current:`Постійний струм`,peak_current:`Піковий струм`,bec_5v:`BEC 5V`,bec_9v:`BEC 9V`,mounting:`Кріплення`,uart_count:`UART портів`,supported_firmware:`Підтримувані прошивки`,firmware_target:`Ціль прошивки`,build_role:`Роль у збірці`,notes:`Нотатки`}},drone_antenna:{label:`Антена`,fields:{rf_band:`Діапазони`,polarization:`Поляризація`,antenna_type:`Тип`,connector:`Роз'єм`,gain_dbi:`Підсилення, дБі`,cable_length:`Довжина кабелю, мм`,notes:`Нотатки`}},drone_receiver:{label:`Приймач`,fields:{radio_link:`Радіолінк`,rf_band:`Діапазони`,output_protocol:`Протокол виводу`,antenna_connector:`Антенний роз'єм`,antenna_count:`Антен`,telemetry:`Телеметрія`,diversity:`Diversity`,input_voltage:`Вхідна напруга`,firmware_version:`Версія прошивки`,notes:`Нотатки`}},drone_camera:{label:`FPV камера`,fields:{sensor:`Матриця`,resolution_tvl:`Роздільна здатність, TVL`,aspect_ratio:`Співвідношення сторін`,lens_mm:`Об'єктив, мм`,fov_deg:`Кут огляду, °`,output:`Вихід`,camera_size:`Типорозмір`,input_voltage:`Вхідна напруга`,notes:`Нотатки`}},contrib:{subtype:{aircraft:`Літальний апарат`,radio:`FPV контролер`,frame:`Рама та деталі`,rtf:`Дрон готовий до польоту (RTF)`,accessory:`Аксесуар`}},migration:{slot_unmatched:`Старий текст {slot}: жоден things/item[type=drone, subtype={subtype}] не має назви "{text}" — прив'яжіть вручну.`,slot_ambiguous:`Старий текст {slot}: "{text}" збігається з {count} записами things/item[type=drone, subtype={subtype}] — прив'яжіть вручну.`}},$o={drone:Qo},es=e({default:()=>ns,finance:()=>ts}),ts={plugin:{label:`Finance`,description:`Read-only mirror of Firefly III.`},presets:{bic:`Enter a valid BIC/SWIFT code (8 or 11 characters)`},library:{label:`Finance`},settings:{label:`Finance settings`,firefly_url:`Firefly III URL`,token:`Personal Access Token`,test_button:`Test connection`,sync_button:`Sync now`,wise_csv:`Wise CSV statement`,wise_account:`Import into account`,wise_import_button:`Import Wise`},account:{label:`Account`,fields:{description:`Description`,kind:`Kind`,currency:`Currency`,current_balance:`Balance`,iban:`IBAN`,bank:`Bank`,bic:`BIC / SWIFT`,firefly_id:`Firefly ID`,notes:`Notes`},options:{asset:`Asset`,expense:`Expense`,revenue:`Revenue`,liability:`Liability`,cash:`Cash`}},transaction:{label:`Transaction`,fields:{date:`Date`,amount:`Amount`,kind:`Kind`,description:`Description`,source:`Source`,destination:`Destination`,category:`Category`,firefly_id:`Firefly ID`,notes:`Notes`},options:{withdrawal:`Withdrawal`,deposit:`Deposit`,transfer:`Transfer`}},bill:{label:`Bill`,fields:{description:`Description`,amount_min:`Min amount`,amount_max:`Max amount`,repeat:`Repeat`,next_expected:`Next expected`,active:`Active`,firefly_id:`Firefly ID`,notes:`Notes`},options:{weekly:`Weekly`,monthly:`Monthly`,quarterly:`Quarterly`,yearly:`Yearly`}},item_financing:{label:`Installment / credit`,fields:{creditor:`Creditor`,holder:`Registered to`,total:`Total amount`,downPayment:`Down payment`,monthly:`Monthly payment`,remaining:`Remaining`,termMonths:`Term, months`,paidMonths:`Paid, months`,rate:`Rate, %`,startDate:`Start date`,nextPayment:`Next payment`,paidOff:`Paid off`,notes:`Notes`}}},ns={finance:ts},rs=e({default:()=>as,finance:()=>is}),is={plugin:{label:`Финансы`,description:`Зеркало Firefly III, только для чтения.`},presets:{bic:`Введите корректный BIC/SWIFT (8 или 11 символов)`},library:{label:`Финансы`},settings:{label:`Настройки финансов`,firefly_url:`URL Firefly III`,token:`Personal Access Token`,test_button:`Проверить соединение`,sync_button:`Синхронизировать`,wise_csv:`Wise CSV выписка`,wise_account:`Счёт для импорта`,wise_import_button:`Импортировать Wise`},account:{label:`Счёт`,fields:{description:`Описание`,kind:`Тип`,currency:`Валюта`,current_balance:`Баланс`,iban:`IBAN`,bank:`Банк`,bic:`BIC / SWIFT`,firefly_id:`Firefly ID`,notes:`Заметки`},options:{asset:`Актив`,expense:`Расходы`,revenue:`Доход`,liability:`Обязательство`,cash:`Наличные`}},transaction:{label:`Транзакция`,fields:{date:`Дата`,amount:`Сумма`,kind:`Тип`,description:`Описание`,source:`Откуда`,destination:`Куда`,category:`Категория`,firefly_id:`Firefly ID`,notes:`Заметки`},options:{withdrawal:`Расход`,deposit:`Поступление`,transfer:`Перевод`}},bill:{label:`Счёт к оплате`,fields:{description:`Описание`,amount_min:`Мин. сумма`,amount_max:`Макс. сумма`,repeat:`Периодичность`,next_expected:`Следующий`,active:`Активный`,firefly_id:`Firefly ID`,notes:`Заметки`},options:{weekly:`Еженедельно`,monthly:`Ежемесячно`,quarterly:`Ежеквартально`,yearly:`Ежегодно`}},item_financing:{label:`Рассрочка / кредит`,fields:{creditor:`Кому должны`,holder:`На кого оформлено`,total:`Сумма долга`,downPayment:`Первый взнос`,monthly:`Платёж/мес`,remaining:`Остаток долга`,termMonths:`Срок, мес`,paidMonths:`Оплачено, мес`,rate:`Ставка, %`,startDate:`Дата начала`,nextPayment:`Следующий платёж`,paidOff:`Погашено`,notes:`Заметки`}}},as={finance:is},os=e({default:()=>cs,finance:()=>ss}),ss={plugin:{label:`Фінанси`,description:`Дзеркало Firefly III, лише для читання.`},presets:{bic:`Введіть коректний BIC/SWIFT (8 або 11 символів)`},library:{label:`Фінанси`},settings:{label:`Налаштування фінансів`,firefly_url:`URL Firefly III`,token:`Personal Access Token`,test_button:`Перевірити з'єднання`,sync_button:`Синхронізувати`,wise_csv:`Wise CSV виписка`,wise_account:`Рахунок для імпорту`,wise_import_button:`Імпортувати Wise`},account:{label:`Рахунок`,fields:{description:`Опис`,kind:`Тип`,currency:`Валюта`,current_balance:`Баланс`,iban:`IBAN`,bank:`Банк`,bic:`BIC / SWIFT`,firefly_id:`Firefly ID`,notes:`Нотатки`},options:{asset:`Актив`,expense:`Витрати`,revenue:`Дохід`,liability:`Зобов'язання`,cash:`Готівка`}},transaction:{label:`Транзакція`,fields:{date:`Дата`,amount:`Сума`,kind:`Тип`,description:`Опис`,source:`Звідки`,destination:`Куди`,category:`Категорія`,firefly_id:`Firefly ID`,notes:`Нотатки`},options:{withdrawal:`Видаток`,deposit:`Надходження`,transfer:`Переказ`}},bill:{label:`Рахунок до сплати`,fields:{description:`Опис`,amount_min:`Мін. сума`,amount_max:`Макс. сума`,repeat:`Періодичність`,next_expected:`Наступний`,active:`Активний`,firefly_id:`Firefly ID`,notes:`Нотатки`},options:{weekly:`Щотижня`,monthly:`Щомісяця`,quarterly:`Щокварталу`,yearly:`Щороку`}},item_financing:{label:`Розстрочка / кредит`,fields:{creditor:`Кому винні`,holder:`На кого оформлено`,total:`Сума боргу`,downPayment:`Перший внесок`,monthly:`Платіж/міс`,remaining:`Залишок боргу`,termMonths:`Строк, міс`,paidMonths:`Сплачено, міс`,rate:`Ставка, %`,startDate:`Дата початку`,nextPayment:`Наступний платіж`,paidOff:`Погашено`,notes:`Нотатки`}}},cs={finance:ss},ls=e({default:()=>ds,garden:()=>us}),us={plugin:{label:`Garden`,description:`Plants and their care.`},library:{label:`Garden`},plant:{label:`Plant`,fields:{about:`Description`,photos:`Gallery`,variety:`Variety`,location:`Location`,sunlight:`Sunlight`,pot:`Pot / label`,planted:`Planted`,wateringDays:`Watering (days)`,lastWatered:`Last watered`,fertilizerDays:`Fertilizing (days)`,lastFertilized:`Last fertilized`,nextWatering:`Next watering`,nextFertilizing:`Next fertilizing`,notes:`Notes`,tags:`Tags`},actions:{watered:`Watered`,fertilized:`Fertilized`,done:`Done`,failed:`Update failed`},options:{location:{windowsill:`Windowsill`,balcony:`Balcony`,hanging:`Hanging`,floor:`Floor`,other:`Other`},sunlight:{shade:`Shade`,partial:`Partial shade`,indirect:`Indirect light`,direct:`Direct sun`}}},contrib:{type:{garden:`Garden`}}},ds={garden:us},fs=e({default:()=>ms,garden:()=>ps}),ps={plugin:{label:`Сад`,description:`Растения и уход за ними.`},library:{label:`Сад`},plant:{label:`Растение`,fields:{about:`Описание`,photos:`Галерея`,variety:`Сорт`,location:`Место`,sunlight:`Освещённость`,pot:`Горшок / метка`,planted:`Посажено`,wateringDays:`Полив (дни)`,lastWatered:`Последний полив`,fertilizerDays:`Подкормка (дни)`,lastFertilized:`Последняя подкормка`,nextWatering:`Следующий полив`,nextFertilizing:`Следующая подкормка`,notes:`Заметки`,tags:`Теги`},actions:{watered:`Полил`,fertilized:`Подкормил`,done:`Готово`,failed:`Не удалось обновить`},options:{location:{windowsill:`Подоконник`,balcony:`Балкон`,hanging:`Подвесной`,floor:`Пол`,other:`Другое`},sunlight:{shade:`Тень`,partial:`Рассеянный свет`,indirect:`Непрямой свет`,direct:`Прямое солнце`}}},contrib:{type:{garden:`Сад / растения`}}},ms={garden:ps},hs=e({default:()=>_s,garden:()=>gs}),gs={plugin:{label:`Сад`,description:`Рослини та догляд за ними.`},library:{label:`Сад`},plant:{label:`Рослина`,fields:{about:`Опис`,photos:`Галерея`,variety:`Сорт`,location:`Місце`,sunlight:`Освітленість`,pot:`Горщик / мітка`,planted:`Посаджено`,wateringDays:`Полив (дні)`,lastWatered:`Останній полив`,fertilizerDays:`Підживлення (дні)`,lastFertilized:`Останнє підживлення`,nextWatering:`Наступний полив`,nextFertilizing:`Наступне підживлення`,notes:`Нотатки`,tags:`Теги`},actions:{watered:`Полив`,fertilized:`Підживив`,done:`Готово`,failed:`Не вдалося`},options:{location:{windowsill:`Підвіконня`,balcony:`Балкон`,hanging:`Підвісний`,floor:`Підлога`,other:`Інше`},sunlight:{shade:`Тінь`,partial:`Розсіяне`,indirect:`Непряме`,direct:`Пряме сонце`}}},contrib:{type:{garden:`Сад / рослини`}}},_s={garden:gs},vs=e({default:()=>bs,geo:()=>ys}),ys={plugin:{label:`Maps`,description:`Coordinates, place search and map picking.`},pick:`Pick on the map`,search:`Search`,searchPlaceholder:`Search for a place`,myLocation:`My location`,label:`Place name`,withoutCoords_one:`{{count}} more without coordinates`,withoutCoords_other:`{{count}} more without coordinates`},bs={geo:ys},xs=e({default:()=>Cs,geo:()=>Ss}),Ss={plugin:{label:`Карты`,description:`Координаты, поиск мест и выбор на карте.`},pick:`Указать на карте`,search:`Найти`,searchPlaceholder:`Поиск места`,myLocation:`Моё местоположение`,label:`Название места`,withoutCoords_one:`ещё {{count}} без координат`,withoutCoords_few:`ещё {{count}} без координат`,withoutCoords_many:`ещё {{count}} без координат`,withoutCoords_other:`ещё {{count}} без координат`},Cs={geo:Ss},ws=e({default:()=>Es,geo:()=>Ts}),Ts={plugin:{label:`Карти`,description:`Координати, пошук місць і вибір на карті.`},pick:`Вказати на карті`,search:`Знайти`,searchPlaceholder:`Пошук місця`,myLocation:`Моє місцезнаходження`,label:`Назва місця`,withoutCoords_one:`ще {{count}} без координат`,withoutCoords_few:`ще {{count}} без координат`,withoutCoords_many:`ще {{count}} без координат`,withoutCoords_other:`ще {{count}} без координат`},Es={geo:Ts},Ds=e({default:()=>ks,health:()=>Os}),Os={plugin:{label:`Health`,description:`Medicines, tests, visits and body metrics.`},library:{label:`Health`},dayPeriods:{any:`Any time`,before_breakfast:`Before breakfast`,with_breakfast:`With breakfast`,after_breakfast:`After breakfast`,with_food:`With food`,after_lunch:`After lunch`,evening:`In the evening`,before_bed:`Before bed`,as_needed:`As needed`},person_body:{label:`Anthropometry`,fields:{weightKg:`Weight (kg)`,heightCm:`Height (cm)`,bloodGroup:`Blood group`,allergies:`Allergies`}},medicine:{label:`Medicine`,fields:{about:`Description`,photos:`Gallery`,quantity:`Quantity`,quantityCheckedAt:`Last quantity check date`,dose:`Dose by day (Mon–Sun)`,dose_person:`Person`,dose_value:`Dose`,daysLeft:`Enough for, days`,supply_state:`Supply`,intakeTimes:`Intake time`,intakePeriods:`Intake courses`,form:`Form`,link:`Link`,store:`Store`,orderNumber:`Order number`,purchaseDate:`Purchase date`,purchasePrice:`Purchase price`,notes:`Notes`},groups:{purchase:`Purchase`},options:{type:{vitamin:`Vitamin`,supplement:`Supplement`,medication:`Medication`,antibiotic:`Antibiotic`,hormone:`Hormonal`,painkiller:`Painkiller`,homeopathy:`Homeopathy`,herbal:`Herbal`},form:{tablet:`Tablets`,capsule:`Capsules`,syrup:`Syrup`,drops:`Drops`,ointment:`Ointment`,gel:`Gel`,spray:`Spray`,injection:`Injection`,powder:`Powder`,suppository:`Suppositories`},supply_state:{enough:`Enough`,low:`Running low`,out:`Out`}}},health_test:{label:`Test / examination`,fields:{description:`Description`,date:`Date`,clinic:`Clinic / laboratory`,status:`Status`,test_type:`Test type`,person:`Patient`,result:`Result`,attachments:`Documents`,notes:`Notes`,indicators:`Indicators`,analyte:`Analyte`,value:`Value`,unit:`Unit`,low:`Low`,high:`High`},options:{status:{ordered:`Ordered`,completed:`Completed`,cancelled:`Cancelled`},test_type:{blood:`Blood test`,urine:`Urine test`,ultrasound:`Ultrasound`,xray:`X-Ray`,mri:`MRI/CT`,other:`Other`}}},settings:{label:`Health sync`,caldav_calendar:`Calendar URL`,caldav_url:`CalDAV server URL`,caldav_username:`Username`,caldav_password:`Password`,time_any:`Time: anytime`,time_before_breakfast:`Time: before breakfast`,time_with_breakfast:`Time: with breakfast`,time_after_breakfast:`Time: after breakfast`,time_with_food:`Time: with food`,time_after_lunch:`Time: after lunch`,time_evening:`Time: evening`,time_before_bed:`Time: before bed`},health_visit:{label:`Doctor visit`,fields:{description:`Description`,date:`Date`,specialist:`Doctor`,specialty:`Specialty`,clinic:`Clinic`,person:`Patient`,reason:`Reason`,result:`Result / diagnosis`,next_step:`Next steps`,cost:`Cost`,photos:`Photos`,files:`Documents`,medicines:`Medicines`,nextVisit:`Next visit`,notes:`Notes`}}},ks={health:Os},As=e({default:()=>Ms,health:()=>js}),js={plugin:{label:`Здоровье`,description:`Препараты, анализы, визиты и антропометрия.`},library:{label:`Здоровье`},dayPeriods:{any:`В любое время`,before_breakfast:`До завтрака`,with_breakfast:`Во время завтрака`,after_breakfast:`После завтрака`,with_food:`Во время еды`,after_lunch:`После обеда`,evening:`Вечером`,before_bed:`Перед сном`,as_needed:`По необходимости`},person_body:{label:`Антропометрия`,fields:{weightKg:`Вес (кг)`,heightCm:`Рост (см)`,bloodGroup:`Группа крови`,allergies:`Аллергии`}},medicine:{label:`Препарат`,fields:{about:`Описание`,photos:`Галерея`,quantity:`Количество`,quantityCheckedAt:`Дата последней проверки количества`,dose:`Доза по дням (пн–вс)`,dose_person:`Человек`,dose_value:`Доза`,daysLeft:`Хватит на, дней`,supply_state:`Запас`,intakeTimes:`Время приёма`,intakePeriods:`Курсы приёма`,form:`Форма выпуска`,link:`Ссылка`,store:`Магазин`,orderNumber:`Номер заказа`,purchaseDate:`Дата приобретения`,purchasePrice:`Цена покупки`,notes:`Заметки`},groups:{purchase:`Покупка`},options:{type:{vitamin:`Витамин`,supplement:`Добавка / БАД`,medication:`Лекарство`,antibiotic:`Антибиотик`,hormone:`Гормональный`,painkiller:`Обезболивающее`,homeopathy:`Гомеопатия`,herbal:`Растительный препарат`},form:{tablet:`Таблетки`,capsule:`Капсулы`,syrup:`Сироп`,drops:`Капли`,ointment:`Мазь`,gel:`Гель`,spray:`Спрей`,injection:`Инъекция`,powder:`Порошок`,suppository:`Свечи`},supply_state:{enough:`Хватает`,low:`Заканчивается`,out:`Нет`}}},health_test:{label:`Анализ / обследование`,fields:{description:`Описание`,date:`Дата`,clinic:`Клиника / лаборатория`,status:`Статус`,test_type:`Тип обследования`,person:`Пациент`,result:`Результат`,attachments:`Документы`,notes:`Заметки`,indicators:`Показатели`,analyte:`Показатель`,value:`Значение`,unit:`Ед. изм.`,low:`Нижняя граница`,high:`Верхняя граница`},options:{status:{ordered:`Заказано`,completed:`Выполнено`,cancelled:`Отменено`},test_type:{blood:`Кровь`,urine:`Моча`,ultrasound:`УЗИ`,xray:`Рентген`,mri:`МРТ/КТ`,other:`Другое`}}},settings:{label:`Синхронизация здоровья`,caldav_calendar:`URL календаря`,caldav_url:`URL CalDAV-сервера`,caldav_username:`Имя пользователя`,caldav_password:`Пароль`,time_any:`Время: в любое время`,time_before_breakfast:`Время: до завтрака`,time_with_breakfast:`Время: во время завтрака`,time_after_breakfast:`Время: после завтрака`,time_with_food:`Время: во время еды`,time_after_lunch:`Время: после обеда`,time_evening:`Время: вечером`,time_before_bed:`Время: перед сном`},health_visit:{label:`Визит к врачу`,fields:{description:`Описание`,date:`Дата`,specialist:`Врач`,specialty:`Специализация`,clinic:`Клиника`,person:`Пациент`,reason:`Причина`,result:`Результат / диагноз`,next_step:`Следующие шаги`,cost:`Стоимость`,photos:`Фотографии`,files:`Документы`,medicines:`Препараты`,nextVisit:`Следующий визит`,notes:`Заметки`}}},Ms={health:js},Ns=e({default:()=>Fs,health:()=>Ps}),Ps={plugin:{label:`Здоров’я`,description:`Препарати, аналізи, візити та антропометрія.`},library:{label:`Здоров'я`},dayPeriods:{any:`Будь-коли`,before_breakfast:`До сніданку`,with_breakfast:`Під час сніданку`,after_breakfast:`Після сніданку`,with_food:`Під час їжі`,after_lunch:`Після обіду`,evening:`Ввечері`,before_bed:`Перед сном`,as_needed:`За потреби`},person_body:{label:`Антропометрія`,fields:{weightKg:`Вага (кг)`,heightCm:`Зріст (см)`,bloodGroup:`Група крові`,allergies:`Алергії`}},medicine:{label:`Препарат`,fields:{about:`Опис`,photos:`Галерея`,quantity:`Кількість`,quantityCheckedAt:`Дата останньої перевірки кількості`,dose:`Доза по днях (пн–нд)`,dose_person:`Особа`,dose_value:`Доза`,daysLeft:`Вистачить на, днів`,supply_state:`Запас`,intakeTimes:`Час прийому`,intakePeriods:`Курси прийому`,form:`Форма випуску`,link:`Посилання`,store:`Магазин`,orderNumber:`Номер замовлення`,purchaseDate:`Дата придбання`,purchasePrice:`Ціна покупки`,notes:`Нотатки`},groups:{purchase:`Купівля`},options:{type:{vitamin:`Вітамін`,supplement:`Добавка / БАД`,medication:`Ліки`,antibiotic:`Антибіотик`,hormone:`Гормональний`,painkiller:`Знеболювальне`,homeopathy:`Гомеопатія`,herbal:`Рослинний препарат`},form:{tablet:`Таблетки`,capsule:`Капсули`,syrup:`Сироп`,drops:`Краплі`,ointment:`Мазь`,gel:`Гель`,spray:`Спрей`,injection:`Ін'єкція`,powder:`Порошок`,suppository:`Свічки`},supply_state:{enough:`Вистачає`,low:`Закінчується`,out:`Немає`}}},health_test:{label:`Аналіз / обстеження`,fields:{description:`Опис`,date:`Дата`,clinic:`Клініка / лабораторія`,status:`Статус`,test_type:`Тип обстеження`,person:`Пацієнт`,result:`Результат`,attachments:`Документи`,notes:`Нотатки`,indicators:`Показники`,analyte:`Показник`,value:`Значення`,unit:`Од. вим.`,low:`Нижня межа`,high:`Верхня межа`},options:{status:{ordered:`Замовлено`,completed:`Виконано`,cancelled:`Скасовано`},test_type:{blood:`Кров`,urine:`Сеча`,ultrasound:`УЗД`,xray:`Рентген`,mri:`МРТ/КТ`,other:`Інше`}}},settings:{label:`Синхронізація здоров’я`,caldav_calendar:`URL календаря`,caldav_url:`URL CalDAV-сервера`,caldav_username:`Ім'я користувача`,caldav_password:`Пароль`,time_any:`Час: будь-коли`,time_before_breakfast:`Час: до сніданку`,time_with_breakfast:`Час: під час сніданку`,time_after_breakfast:`Час: після сніданку`,time_with_food:`Час: під час їжі`,time_after_lunch:`Час: після обіду`,time_evening:`Час: ввечері`,time_before_bed:`Час: перед сном`},health_visit:{label:`Візит до лікаря`,fields:{description:`Опис`,date:`Дата`,specialist:`Лікар`,specialty:`Спеціалізація`,clinic:`Клініка`,person:`Пацієнт`,reason:`Причина`,result:`Результат / діагноз`,next_step:`Наступні кроки`,cost:`Вартість`,photos:`Фотографії`,files:`Документи`,medicines:`Препарати`,nextVisit:`Наступний візит`,notes:`Нотатки`}}},Fs={health:Ps},Is=e({default:()=>Rs,home:()=>Ls}),Ls={plugin:{label:`Home`,description:`Utility meter readings and household.`},library:{label:`Home`},meter_reading:{label:`Meter readings`,fields:{date:`Reading date`,cold_water:`Cold water, m³`,hot_water:`Hot water, m³`,electricity:`Electricity, kWh`,gas:`Gas, m³`,notes:`Note`}},room:{label:`Room`,fields:{description:`Description`,area:`Area`,notes:`Notes`}},material:{label:`Material`,group:{identity:`Identification`,purchase:`Purchase`,media:`Photos & notes`},fields:{description:`Description`,brand:`Brand`,color:`Color`,color_code:`Color code (RAL/NCS)`,rooms:`Used in`,price:`Price`,quantity:`Quantity`,store:`Store`,bought_date:`Purchase date`,link:`Product link`,photo:`Photo`,rating:`Rating`,notes:`Notes`},options:{type:{paint:`Paint`,primer:`Primer`,lacquer:`Lacquer`,enamel:`Enamel`,plaster:`Plaster`,tile:`Tile`,laminate:`Laminate`,wallpaper:`Wallpaper`,skirting:`Skirting`,panel:`Panels`,putty:`Putty`,glue:`Glue`,cement:`Cement`,drywall:`Drywall`,insulation:`Insulation`,fixture:`Fixture`,plumbing:`Plumbing`,other:`Other`}}}},Rs={home:Ls},zs=e({default:()=>Vs,home:()=>Bs}),Bs={plugin:{label:`Дом`,description:`Показания счётчиков и быт.`},library:{label:`Дом`},meter_reading:{label:`Показания счётчиков`,fields:{date:`Дата снятия`,cold_water:`Холодная вода, м³`,hot_water:`Горячая вода, м³`,electricity:`Электричество, кВт·ч`,gas:`Газ, м³`,notes:`Примечание`}},room:{label:`Комната`,fields:{description:`Описание`,area:`Площадь`,notes:`Заметки`}},material:{label:`Материал`,group:{identity:`Идентификация`,purchase:`Покупка`,media:`Фото и заметки`},fields:{description:`Описание`,brand:`Производитель`,color:`Цвет`,color_code:`Код цвета (RAL/NCS)`,rooms:`Где использовано`,price:`Цена`,quantity:`Количество`,store:`Магазин`,bought_date:`Дата покупки`,link:`Ссылка на товар`,photo:`Фото`,rating:`Оценка`,notes:`Заметки`},options:{type:{paint:`Краска`,primer:`Грунтовка`,lacquer:`Лак`,enamel:`Эмаль`,plaster:`Штукатурка`,tile:`Плитка`,laminate:`Ламинат`,wallpaper:`Обои`,skirting:`Плинтус`,panel:`Панели`,putty:`Шпаклёвка`,glue:`Клей`,cement:`Цемент`,drywall:`Гипсокартон`,insulation:`Изоляция`,fixture:`Фурнитура`,plumbing:`Сантехника`,other:`Другое`}}}},Vs={home:Bs},Hs=e({default:()=>Ws,home:()=>Us}),Us={plugin:{label:`Дім`,description:`Показники лічильників та побут.`},library:{label:`Дім`},meter_reading:{label:`Показники лічильників`,fields:{date:`Дата зняття`,cold_water:`Холодна вода, м³`,hot_water:`Гаряча вода, м³`,electricity:`Електрика, кВт·год`,gas:`Газ, м³`,notes:`Примітка`}},room:{label:`Кімната`,fields:{description:`Опис`,area:`Площа`,notes:`Нотатки`}},material:{label:`Матеріал`,group:{identity:`Ідентифікація`,purchase:`Купівля`,media:`Фото та нотатки`},fields:{description:`Опис`,brand:`Виробник`,color:`Колір`,color_code:`Код кольору (RAL/NCS)`,rooms:`Де використано`,price:`Ціна`,quantity:`Кількість`,store:`Магазин`,bought_date:`Дата купівлі`,link:`Посилання на товар`,photo:`Фото`,rating:`Оцінка`,notes:`Нотатки`},options:{type:{paint:`Фарба`,primer:`Ґрунтовка`,lacquer:`Лак`,enamel:`Емаль`,plaster:`Штукатурка`,tile:`Плитка`,laminate:`Ламінат`,wallpaper:`Шпалери`,skirting:`Плінтус`,panel:`Панелі`,putty:`Шпаклівка`,glue:`Клей`,cement:`Цемент`,drywall:`Гіпсокартон`,insulation:`Ізоляція`,fixture:`Фурнітура`,plumbing:`Сантехніка`,other:`Інше`}}}},Ws={home:Us},Gs=e({default:()=>qs,http:()=>Ks}),Ks={plugin:{label:`HTTP connector`,description:`HTTP connector — POST a message to the agent (localhost only).`},settings:{label:`HTTP connector settings`,port:`Port`}},qs={http:Ks},Js=e({default:()=>Xs,http:()=>Ys}),Ys={plugin:{label:`HTTP-коннектор`,description:`HTTP-коннектор для отправки сообщений агенту (только localhost).`},settings:{label:`Настройки HTTP-коннектора`,port:`Порт`}},Xs={http:Ys},Zs=e({default:()=>$s,http:()=>Qs}),Qs={plugin:{label:`HTTP-конектор`,description:`HTTP-конектор для надсилання повідомлень агенту (лише localhost).`},settings:{label:`Налаштування HTTP-конектора`,port:`Порт`}},$s={http:Qs},ec=e({default:()=>nc,kitchen:()=>tc}),tc={plugin:{label:`Kitchen`,description:`Food items and recipes.`},library:{label:`Kitchen`},food_item:{label:`Product`,fields:{about:`Description`,photos:`Gallery`,subcategory:`Category`,quantity:`Quantity`,minQuantity:`Minimum stock`,stockState:`Stock status`,expires:`Expiry date`,variants:`Goods`,notes:`Notes`,tags:`Tags`},options:{stockState:{ok:`In stock`,low:`Below minimum`}},variant:{name:`Product`,quantity:`In stock`,expires:`Expiry date`,location:`Storage location`,shops:`Shops`,photo:`Photo`}},food_recipe:{label:`Recipe`,fields:{images:`Photos`,description:`Description`,readiness:`Readiness`,servings:`Servings`,difficulty:`Difficulty`,category:`Category`,tags:`Tags`,prep_time:`Prep time`,cook_time:`Cook time`,ingredients:`Ingredients`,ingredients_free:`Free-form ingredients`,steps:`Preparation`,notes:`Notes`,steps_body:`Steps`},options:{difficulty:{easy:`Easy`,medium:`Medium`,hard:`Hard`},category:{first:`First course`,main:`Main course`,salad:`Salad`,appetizer:`Appetizer`,side:`Side dish`,dessert:`Dessert`,drink:`Drink`,sauce:`Sauce`},stock_state:{enough:`Enough`,partial:`Partial`,missing:`Missing`},readiness:{ready:`Ready to cook`,not_ready:`Missing ingredients`}},ingredient:{product:`Product`,amount:`Amount`,optional:`Optional`,stock:`Stock`,stock_state:`State`},ingredient_free:{product:`Ingredient`,unit:`Unit`,amount:`Amount`,optional:`Optional`}},preferences:{label:`Preferences`,fields:{preferences:`Food preferences`,shops:`Where we shop`,equipment:`Kitchen equipment`,notes:`Notes`}},contrib:{type:{kitchenware:`Kitchenware`}}},nc={kitchen:tc},rc=e({default:()=>ac,kitchen:()=>ic}),ic={plugin:{label:`Кухня`,description:`Продукты и рецепты.`},library:{label:`Кухня`},food_item:{label:`Продукт`,fields:{about:`Описание`,photos:`Галерея`,subcategory:`Категория`,quantity:`Количество`,minQuantity:`Минимальный запас`,stockState:`Статус запаса`,expires:`Срок годности`,variants:`Товары`,notes:`Заметки`,tags:`Теги`},options:{stockState:{ok:`В наличии`,low:`Ниже минимума`}},variant:{name:`Продукт`,quantity:`В наличии`,expires:`Срок годности`,location:`Место хранения`,shops:`Магазины`,photo:`Фото`}},food_recipe:{label:`Рецепт`,fields:{images:`Фото`,description:`Описание`,readiness:`Готовность`,servings:`Порций`,difficulty:`Сложность`,category:`Категория`,tags:`Теги`,prep_time:`Время подготовки`,cook_time:`Время приготовления`,ingredients:`Ингредиенты`,ingredients_free:`Свободный список ингредиентов`,steps:`Приготовление`,notes:`Заметки`,steps_body:`Шаги`},options:{difficulty:{easy:`Легко`,medium:`Средне`,hard:`Сложно`},category:{first:`Первое`,main:`Второе`,salad:`Салат`,appetizer:`Закуска`,side:`Гарнир`,dessert:`Десерт`,drink:`Напиток`,sauce:`Соус`},stock_state:{enough:`Достаточно`,partial:`Частично`,missing:`Нет`},readiness:{ready:`Можно готовить`,not_ready:`Не хватает ингредиентов`}},ingredient:{product:`Продукт`,amount:`Количество`,optional:`Необязательный`,stock:`Наличие`,stock_state:`Состояние`},ingredient_free:{product:`Ингредиент`,unit:`Единица`,amount:`Количество`,optional:`Необязательный`}},preferences:{label:`Предпочтения`,fields:{preferences:`Пищевые предпочтения`,shops:`Где покупаем`,equipment:`Кухонная техника`,notes:`Заметки`}},contrib:{type:{kitchenware:`Посуда / утварь`}}},ac={kitchen:ic},oc=e({default:()=>cc,kitchen:()=>sc}),sc={plugin:{label:`Кухня`,description:`Продукти та рецепти.`},library:{label:`Кухня`},food_item:{label:`Продукт`,fields:{about:`Опис`,photos:`Галерея`,subcategory:`Категорія`,quantity:`Кількість`,minQuantity:`Мінімальний запас`,stockState:`Статус запасу`,expires:`Термін придатності`,variants:`Товари`,notes:`Нотатки`,tags:`Теги`},options:{stockState:{ok:`У наявності`,low:`Нижче мінімуму`}},variant:{name:`Продукт`,quantity:`У наявності`,expires:`Термін придатності`,location:`Місце зберігання`,shops:`Магазини`,photo:`Фото`}},food_recipe:{label:`Рецепт`,fields:{images:`Фото`,description:`Опис`,readiness:`Готовність`,servings:`Порцій`,difficulty:`Складність`,category:`Категорія`,tags:`Теги`,prep_time:`Час підготовки`,cook_time:`Час приготування`,ingredients:`Інгредієнти`,ingredients_free:`Вільний список інгредієнтів`,steps:`Приготування`,notes:`Нотатки`,steps_body:`Кроки`},options:{difficulty:{easy:`Легко`,medium:`Середньо`,hard:`Складно`},category:{first:`Перше`,main:`Друге`,salad:`Салат`,appetizer:`Закуска`,side:`Гарнір`,dessert:`Десерт`,drink:`Напій`,sauce:`Соус`},stock_state:{enough:`Досить`,partial:`Частково`,missing:`Немає`},readiness:{ready:`Можна готувати`,not_ready:`Бракує інгредієнтів`}},ingredient:{product:`Продукт`,amount:`Кількість`,optional:`Необов'язковий`,stock:`Наявність`,stock_state:`Стан`},ingredient_free:{product:`Інгредієнт`,unit:`Одиниця`,amount:`Кількість`,optional:`Необов'язковий`}},preferences:{label:`Уподобання`,fields:{preferences:`Харчові уподобання`,shops:`Де купуємо`,equipment:`Кухонна техніка`,notes:`Нотатки`}},contrib:{type:{kitchenware:`Посуд / начиння`}}},cc={kitchen:sc},lc=e({default:()=>dc,lab:()=>uc}),uc=JSON.parse(`{"plugin":{"label":"Lab","description":"Field-type demos and experiments."},"library":{"label":"Laboratory"},"settings":{"label":"Lab settings","intro":"## Demo settings\\n\\nThis page is an example of a plugin settings page. Values below are stored as a **single** settings record. Edit a field, save — and it persists.","fields":{"greeting":"Greeting text","enabled":"Feature enabled","mode":"Mode","retries":"Retry count (0–10)"},"modes":{"fast":"Fast","safe":"Safe","debug":"Debug"},"actions_info":"### Actions\\n\\nButtons below trigger registered actions. The first succeeds after a short delay; the second deliberately fails to show error handling.","run_button":"Run demo action","fail_button":"Run failing action","variants":{"default":"Primary","secondary":"Secondary","ghost":"Ghost","link":"Link"}},"field_demo":{"label":"Field Demo","fields":{"image":"Image — single photo","avatar":"Avatar — single (big circle)","cover":"Cover — hero (single)","text_plain":"Text — plain","text_minmax":"Text — min/max + in table","text_pattern":"Text — pattern (letters only)","text_multiline":"Text — multiline","text_email":"Text — format: email","text_emails":"Text — format: email + multiple","text_url":"Text — format: url","text_tel":"Text — format: tel","text_password":"Text — format: password","imei":"IMEI — pattern (15 digits)","mac":"MAC — pattern (XX:XX:XX:XX:XX:XX)","iban":"IBAN — pattern (account)","textarea":"Textarea","small_text":"Small text (scalar textarea)","markdown":"Markdown (WYSIWYG)","code":"Code — monospace editor (yaml)","number_int":"Number — integer (int)","number_decimal":"Number — decimal","integer":"Integer (min/max)","rating_5":"Rating — 5 stars","rating_10":"Rating — 10 stars","rating_split_5":"Rating — left column (5 stars)","rating_split_10":"Rating — right column (10 stars)","date":"Date","date_future":"Date — future only","time_field":"Time (HH:MM)","datetime":"Datetime","datetimes_multi":"Datetime — multiple","boolean":"Boolean (checkbox)","select":"Select","select_multi":"Select — multiple","day_period":"Day-period (intake time)","day_period_multi":"Day-period — multiple","country":"Country (with flag)","country_multi":"Country — multiple","tags_field":"Tags (with suggestions)","demo_check":"Check (single)","demo_check_multi":"Check (multiple)","demo_check_stages":"Delivery (stages)","stage_ordered":"Ordered","stage_paid":"Paid","stage_shipped":"Shipped","color_hex":"Color — hex (#RRGGBB)","color_multi":"Color — multiple","color_name":"ColorName (CSS name)","duration_short":"Duration (min, step 5)","measured_currency":"Measured — currency","measured_weight":"Measured — weight","measured_custom":"Measured — custom units","demo_reminder":"Reminder","demo_weight":"Weight","demo_dimensions":"Dimensions","demo_datasize":"Data size","demo_ram":"RAM","demo_disk":"Disk size","demo_weekday":"Weekday","demo_weekdays":"Weekdays — multiple","ip_addr":"IP address","ip_addrs":"IP addresses — multiple","cidr_subnet":"CIDR (subnet)","numbers_multi":"Number — multiple","dates_multi":"Date — multiple","row_single":"Row — single","variants":"Per-row — language (name/surname by language)","row_ingredients":"Row — ingredients (relation+measured+computed)","relation_single":"Relation — single record","relation_multi":"Relation — multiple records","coll_text":"Collection — text","coll_integer":"Collection — integer","coll_select":"Collection — select","pp_person":"Person","pp_value":"Value","per_weekday":"Per-weekday (7 slots)","per_weekday_per_person":"Per-weekday + per-record (by person)","image_gallery":"Image — gallery (multiple)","avatar_row":"Avatar — row (multiple)","cover_carousel":"Cover — carousel (multiple)","json":"JSON","key_value":"Key-value — multiple pairs","key_value_secret":"Key-value — secret (one pair)","services_bylist":"Services (collection over static list)","type":"Type (classifier → extends)","periods":"Periods (date ranges)","button_demo":"Button — demo action (lab.demoAction)","price":"Price","ageRange":"Age range","tempRange":"Temperature range","agree":"Agree","origin":"Country of origin","birthYear":"Birth year","attachment":"Attachment","doc":"Document","voice":"Voice note","clip":"Video clip","gallery":"Media gallery","place":"Location","compact_note":"Compact note (no edit control)","embed_wide":"Embed — wide (multiple)","embed_narrow":"Embed — narrow (multiple)","perkey_fixed":"Fixed perKey — qty per size","calendar_dates":"Calendar — dates (collection)","journal_log":"Journal — log entries (collection)","demo_table":"Table — sortable, grouped, with totals","meter_value":"Meter value (plain number)","demo_slug":"Slug — identifier (URL-friendly)","demo_link":"Link — external link","demo_mask_card":"Input mask — card number","demo_percent":"Percent — percentage (0–100%)","demo_year":"Year — year (1900–2100)","demo_local_dir":"LocalDir — local directory","demo_local_file":"LocalFile — local file","demo_tag":"Tag — single tag","demo_i18n":"i18n — translatable text","demo_source":"Source — source file (download)","demo_poster":"Poster — vertical poster","demo_number_range":"NumberRange — integer range","demo_real_range":"RealRange — decimal range","demo_month":"Date — month granularity (YYYY-MM)","demo_unit":"Unit — measurement unit","demo_amount":"Amount — number with external unit","demo_hostname":"Hostname — host name / domain","times_multi":"Time — times list (multiple)","demo_recurrence":"Recurrence — RRULE series pattern","demo_exdates":"Datetime — recurrence exceptions (multiple)","demo_sheet":"Sheet — 2D sheet layout","demo_table_specs":"Table — specifications table","sheet_a1":"Cell A1","sheet_b1":"Cell B1","sheet_a2":"Cell A2","sheet_b2":"Cell B2","demo_status":"Record status","demo_author":"Author","stack_note_1":"Top note block (100% width)","stack_note_2":"Bottom description block (100% width)","illustrated_one":"Illustrated — single (picture + prose)","illustrated_many":"Illustrated — collection (multiple, custom parts)","demo_stepper":"Delivery (reached stage)","chart_readings":"Weight log (chart source)","heatmap_sessions":"Practice log (heat-map source)","attachment_one":"Attachment — single (file + its name)","attachment_many":"Attachments — collection (multiple, document uploader)","identifier":"Identifier","colorname":"Colour name","age":"Date of birth","path":"Path","mrz":"Machine-readable zone","timetable":"Timetable","analyte":"Analyte","value":"Value","unit":"Unit","low":"Lower bound","high":"Upper bound","flow_amount":"Amount","flow_from":"From","flow_to":"To","children":"Child records"},"options":{"stage":{"ordered":"Ordered","packed":"Packed","shipped":"Shipped","delivered":"Delivered"},"select":{"red":"Red","green":"Green","blue":"Blue"},"pp_select":{"s":"S","m":"M","l":"L"},"type":{"basic":"Basic","advanced":"Advanced"},"env":{"dev":"Development","prod":"Production"},"size":{"s":"S","m":"M","l":"L"}},"per_row":{"name":"First name","surname":"Last name","url":"URL","token":"Token","env":"Environment","lang":"Language","product":"Product","amount":"Amount","stock":"Stock","size":"Size","qty":"Qty","param":"Parameter","val":"Value","occurs_on":"Occurs on","logged_at":"Logged at","entry":"Entry","measured_on":"Measured on","reading":"Reading","happened_on":"Happened on"},"table":{"part":"Part","vendor":"Vendor","qty":"Qty"},"units":{"shot":"shot","scoop":"measuring spoon"},"groups":{"demo":"Text fields","properties_inspector":"Properties Inspector","vertical_stack":"Vertical Stack","text_pattern":"Text with pattern validation","text_email":"Email address","text_url":"Web URL","text_password":"Password","slug_link":"Identifiers & links (Slug & Link)","string_mask":"Text input masks","percent_year":"Percents & years (Percent & Year)","local_paths":"Local server paths","tag_i18n":"Tags & i18n localization","source_poster":"Sources & posters (Source & Poster)","ranges":"Numeric ranges (Ranges)","ratings":"Star Ratings (Rating 5 & 10)","hostname":"Network Hostname","date_month":"Month selection (Date Month)","unit_amount":"Units & amounts (Unit & Amount)","datetimes":"Date and time","times_multi":"Times (Time — multiple)","recurrence":"Recurrence (RRULE)","embeds":"Embedded content","split_rating":"Rating (5 & 10 stars)","spread":"Spread card","aside":"Aside sidebar","figure":"Figure with caption","illustrated":"Illustrated (picture + prose)","epigraph":"Epigraph quote","masthead":"Masthead header","timeline":"Events timeline","countdown":"Countdown timer","deck":"Card deck","people":"Linked person","identity":"Profile & contacts","score":"Score scale","status":"Status","meter":"Progress meter","receipt":"Receipt calculation","balance":"Account balance","route":"Route & map","nutrition":"Nutrition facts","specimen":"Color specimen","idcard":"ID Card","periods":"Date ranges","json":"JSON structure","per_weekday":"Weekdays","media_carousel":"Galleries & carousels","files":"Files & attachments","key_value":"Key-value pairs","classifier":"Type classifier","catalogue_gap":"Types the catalogue was missing","assay":"Readings against their reference span"},"blocks":{"bento":"Bento Grid","grid":"Column Grid","prose":"Prose text","plaque":"Plaque plate","ledger":"Dotted leader rows","stats":"Headline stats","facets":"Facets tags","terminal":"Terminal & code","callout":"Callout alert","compare":"Side-by-side compare","tab1":"Storage","tab2":"Network","section1":"Schedule","section2":"Addressing","divider":"Editorial blocks","leaves":"Typographic leaves","domain":"Domain leaves","computed":"Computed leaves","terminal_caption":"Config snippet","compare_left":"Geography","compare_right":"Checklist","countdown_caption":"Until expiry","balance_caption":"Current balance"},"validation":{"letters_only":"Letters only"},"info":{"intro":"Demonstration shelf of all platform field types. Fill in the fields below to see them in action."},"actions":{"scan_done":"Found {{count}} devices","fail_title":"Action failed","fail_body":"Server returned an error (code {{code}})"}},"field_demo_child":{"label":"Child Record","fields":{"demo_id":"Parent demo UUID","notes":"Note"}},"demo_extra":{"label":"Extended fields (extend)","fields":{"extra_text":"Additional text","extra_number":"Additional number","extra_flag":"Additional flag"}}}`),dc={lab:uc},fc=e({default:()=>mc,lab:()=>pc}),pc=JSON.parse(`{"plugin":{"label":"Лаборатория","description":"Демо и эксперименты с типами полей."},"library":{"label":"Лаборатория"},"settings":{"label":"Настройки лаборатории","intro":"## Демо-настройки\\n\\nЭта страница — пример страницы настроек плагина. Значения ниже хранятся как **единственная** запись настроек. Измени поле, сохрани — и оно сохранится.","fields":{"greeting":"Текст приветствия","enabled":"Функция включена","mode":"Режим","retries":"Число повторов (0–10)"},"modes":{"fast":"Быстрый","safe":"Безопасный","debug":"Отладка"},"actions_info":"### Действия\\n\\nКнопки ниже запускают зарегистрированные действия. Первая завершается успехом после короткой задержки; вторая намеренно падает, чтобы показать обработку ошибок.","run_button":"Запустить демо-действие","fail_button":"Запустить действие с ошибкой","variants":{"default":"Основная","secondary":"Второстепенная","ghost":"Призрак","link":"Ссылка"}},"field_demo":{"label":"Демо полей","fields":{"image":"Image — одно фото","avatar":"Аватар — одно (большой круг)","cover":"Обложка — hero (одно)","text_plain":"Text — обычный","text_minmax":"Text — min/max + в таблице","text_pattern":"Text — pattern (только буквы)","text_multiline":"Text — многострочный","text_email":"Text — format: email","text_emails":"Text — format: email + multiple","text_url":"Text — format: url","text_tel":"Text — format: tel","text_password":"Text — format: password","imei":"IMEI — pattern (15 цифр)","mac":"MAC — pattern (XX:XX:XX:XX:XX:XX)","iban":"IBAN — pattern (счёт)","textarea":"Textarea","small_text":"Малый текст (scalar textarea)","markdown":"Markdown (WYSIWYG)","code":"Code — моноширинный редактор (yaml)","number_int":"Number — целое (int)","number_decimal":"Number — дробное","integer":"Integer (min/max)","rating_5":"Rating — 5 звёзд","rating_10":"Rating — 10 звёзд","rating_split_5":"Rating — левая колонка (5 звёзд)","rating_split_10":"Rating — правая колонка (10 звёзд)","date":"Дата","date_future":"Дата — только будущее","time_field":"Time (HH:MM)","datetime":"Datetime","datetimes_multi":"Datetime — multiple","boolean":"Boolean (checkbox)","select":"Select","select_multi":"Select — multiple","day_period":"Day-period (время приёма)","day_period_multi":"Day-period — multiple","country":"Country (с флагом)","country_multi":"Country — multiple","tags_field":"Tags (с подсказками)","demo_check":"Check (один)","demo_check_multi":"Check (несколько)","demo_check_stages":"Доставка (этапы)","stage_ordered":"Заказано","stage_paid":"Оплачено","stage_shipped":"Доставлено","color_hex":"Color — hex (#RRGGBB)","color_multi":"Color — multiple","color_name":"ColorName (CSS-название)","duration_short":"Duration (мин, шаг 5)","measured_currency":"Measured — валюта","measured_weight":"Measured — вес","measured_custom":"Measured — custom единицы","demo_reminder":"Напоминание","demo_weight":"Вес","demo_dimensions":"Габариты","demo_datasize":"Объём данных","demo_ram":"Оперативная память","demo_disk":"Объём диска","demo_weekday":"День недели","demo_weekdays":"Дни недели — multiple","ip_addr":"IP-адрес","ip_addrs":"IP-адреса — multiple","cidr_subnet":"CIDR (подсеть)","numbers_multi":"Number — multiple","dates_multi":"Date — multiple","row_single":"Row — одна строка","variants":"Per-row — language (имя/фамилия по языкам)","row_ingredients":"Row — ингредиенты (relation+measured+computed)","relation_single":"Relation — одна запись","relation_multi":"Relation — несколько записей","coll_text":"Коллекция — text","coll_integer":"Коллекция — integer","coll_select":"Коллекция — select","pp_person":"Человек","pp_value":"Значение","per_weekday":"Per-weekday (7 слотов)","per_weekday_per_person":"Per-weekday + per-record (по людям)","image_gallery":"Image — галерея (multiple)","avatar_row":"Аватар — ряд (несколько)","cover_carousel":"Обложка — карусель (несколько)","json":"JSON","key_value":"Key-value — несколько пар","key_value_secret":"Key-value — секрет (одна пара)","services_bylist":"Services (коллекция над статическим списком)","type":"Type (классификатор → extends)","periods":"Periods (диапазоны дат)","button_demo":"Button — demo действие (lab.demoAction)","price":"Цена","ageRange":"Диапазон возраста","tempRange":"Диапазон температуры","agree":"Согласие","origin":"Страна происхождения","birthYear":"Год рождения","attachment":"Вложение","doc":"Документ","voice":"Голосовая заметка","clip":"Видеоклип","gallery":"Медиагалерея","place":"Местоположение","compact_note":"Компактная заметка (без кнопок)","embed_wide":"Embed — широкий (multiple)","embed_narrow":"Embed — узкий (multiple)","perkey_fixed":"Fixed perKey — количество на размер","calendar_dates":"Календарь — даты (коллекция)","journal_log":"Журнал — записи (коллекция)","demo_table":"Таблица — с сортировкой, группировкой и итогами","meter_value":"Значение шкалы (простое число)","demo_slug":"Slug — идентификатор (URL-friendly)","demo_link":"Link — внешняя ссылка","demo_mask_card":"Маска ввода — номер карты","demo_percent":"Percent — процент (0–100%)","demo_year":"Year — год (1900–2100)","demo_local_dir":"LocalDir — локальная папка","demo_local_file":"LocalFile — локальный файл","demo_tag":"Tag — один тег","demo_i18n":"i18n — переводимый текст","demo_source":"Source — исходный файл (скачивание)","demo_poster":"Poster — вертикальный постер","demo_number_range":"NumberRange — диапазон целых чисел","demo_real_range":"RealRange — диапазон вещественных чисел","demo_month":"Date — гранулярность месяц (YYYY-MM)","demo_unit":"Unit — единица измерения","demo_amount":"Amount — число с внешней единицей","demo_hostname":"Hostname — имя хоста / домен","times_multi":"Time — список времени (multiple)","demo_recurrence":"Recurrence — правило повторения серии (RRULE)","demo_exdates":"Datetime — исключения повторения (multiple)","demo_sheet":"Sheet — таблица 2D","demo_table_specs":"Table — таблица параметров","sheet_a1":"Ячейка A1","sheet_b1":"Ячейка B1","sheet_a2":"Ячейка A2","sheet_b2":"Ячейка B2","demo_status":"Статус записи","demo_author":"Автор","stack_note_1":"Верхний блок заметки (100% ширины)","stack_note_2":"Нижний блок описания (100% ширины)","illustrated_one":"Иллюстрированное — одиночное (изображение + текст)","illustrated_many":"Иллюстрированное — коллекция (множественное, свои части)","demo_stepper":"Доставка (достигнутый этап)","chart_readings":"Журнал веса (источник графика)","heatmap_sessions":"Журнал занятий (источник тепловой карты)","attachment_one":"Вложение — одиночное (файл и его название)","attachment_many":"Вложения — коллекция (множественное, загрузка документов)","identifier":"Идентификатор","colorname":"Название цвета","age":"Дата рождения","path":"Путь","mrz":"Машиночитаемая зона","timetable":"Расписание","analyte":"Показатель","value":"Значение","unit":"Единица","low":"Нижняя граница","high":"Верхняя граница","flow_amount":"Сумма","flow_from":"Откуда","flow_to":"Куда","children":"Дочерние записи"},"options":{"stage":{"ordered":"Заказано","packed":"Упаковано","shipped":"Отправлено","delivered":"Доставлено"},"select":{"red":"Красный","green":"Зелёный","blue":"Синий"},"pp_select":{"s":"S","m":"M","l":"L"},"type":{"basic":"Базовый","advanced":"Расширенный"},"env":{"dev":"Разработка","prod":"Продакшн"},"size":{"s":"S","m":"M","l":"L"}},"per_row":{"name":"Имя","surname":"Фамилия","url":"URL","token":"Токен","env":"Среда","lang":"Язык","product":"Продукт","amount":"Количество","stock":"Наличие","size":"Размер","qty":"Количество","param":"Параметр","val":"Значение","occurs_on":"Дата события","logged_at":"Дата записи","entry":"Запись","measured_on":"Дата измерения","reading":"Показание","happened_on":"Дата занятия"},"table":{"part":"Деталь","vendor":"Поставщик","qty":"Кол-во"},"units":{"shot":"шот","scoop":"мерная ложка"},"groups":{"demo":"Текстовые поля","properties_inspector":"Инспектор свойств (Properties Inspector)","vertical_stack":"Вертикальная колонка (Stack)","text_pattern":"Текст с валидацией (Pattern)","text_email":"Электронная почта (Email)","text_url":"Веб-ссылка (URL)","text_password":"Скрытый пароль (Password)","slug_link":"Идентификаторы и ссылки (Slug & Link)","string_mask":"Маски ввода текста","percent_year":"Проценты и года (Percent & Year)","local_paths":"Локальные пути на сервере","tag_i18n":"Теги и локализация (Tag & i18n)","source_poster":"Исходники и постеры (Source & Poster)","ranges":"Числовые диапазоны (Ranges)","ratings":"Рейтинг звёздами (Rating 5 & 10)","hostname":"Сетевое имя (Hostname)","date_month":"Выбор месяца (Date Month)","unit_amount":"Единицы и количества (Unit & Amount)","datetimes":"Дата и время (Datetime)","times_multi":"Время (Time — multiple)","recurrence":"Повторение (RRULE)","embeds":"Встраиваемый контент (Embed)","split_rating":"Рейтинг (5 и 10 звёзд)","spread":"Разворот карточки (Spread)","aside":"Боковая панель (Aside)","figure":"Изображение с подписью (Figure)","illustrated":"Иллюстрированное (изображение + текст)","epigraph":"Эпиграф и цитата (Epigraph)","masthead":"Шапка издания (Masthead)","timeline":"Таймлайн событий (Timeline)","countdown":"Обратный отсчёт (Countdown)","deck":"Колода карточек (Deck)","people":"Связанная персона (People)","identity":"Профиль и контакты (Identity)","score":"Шкала оценки (Score)","status":"Статус (Status)","meter":"Индикатор прогресса (Meter)","receipt":"Чек и расчёт (Receipt)","balance":"Баланс (Balance)","route":"Маршрут и карта (Route)","nutrition":"Пищевая ценность (Nutrition)","specimen":"Образец цвета (Specimen)","idcard":"Удостоверение (ID Card)","periods":"Диапазоны дат (Periods)","json":"JSON-структура","per_weekday":"Дни недели (Per-weekday)","media_carousel":"Галереи и карусели","files":"Файлы и вложения","key_value":"Ключ-значение (Key-value)","classifier":"Классификатор типа","catalogue_gap":"Типы, которых не было в каталоге","assay":"Показатели на своём референсном интервале"},"blocks":{"bento":"Bento Grid (Асимметричная сетка)","grid":"Сетка колонок (Grid)","prose":"Форматированный текст (Prose)","plaque":"Табличка данных (Plaque)","ledger":"Строки с точечной линией (Ledger)","stats":"Числовые показатели (Stats)","facets":"Теги-пилюли (Facets)","terminal":"Терминал и код (Terminal)","callout":"Предупреждение (Callout)","compare":"Сравнение (Compare)","tab1":"Накопитель","tab2":"Сеть","section1":"Расписание","section2":"Адресация","divider":"Редакционные блоки","leaves":"Типографские листья","domain":"Предметные листья","computed":"Вычисляемые листья","terminal_caption":"Фрагмент конфигурации","compare_left":"География","compare_right":"Чек-лист","countdown_caption":"До истечения","balance_caption":"Текущий баланс"},"validation":{"letters_only":"Только буквы"},"info":{"intro":"Демонстрационная полка всех типов полей платформы. Заполните поля ниже, чтобы увидеть их в действии."},"actions":{"scan_done":"Найдено {{count}} устройств","fail_title":"Действие не выполнено","fail_body":"Сервер вернул ошибку (код {{code}})"}},"field_demo_child":{"label":"Дочерняя запись","fields":{"demo_id":"UUID родительского демо","notes":"Заметка"}},"demo_extra":{"label":"Расширенные поля (extend)","fields":{"extra_text":"Дополнительный текст","extra_number":"Дополнительное число","extra_flag":"Дополнительный флажок"}}}`),mc={lab:pc},hc=e({default:()=>_c,lab:()=>gc}),gc=JSON.parse(`{"plugin":{"label":"Лабораторія","description":"Демо й експерименти з типами полів."},"library":{"label":"Лабораторія"},"settings":{"label":"Налаштування лабораторії","intro":"## Демо-налаштування\\n\\nЦя сторінка — приклад сторінки налаштувань плагіна. Значення нижче зберігаються як **єдиний** запис налаштувань. Зміни поле, збережи — і воно лишиться.","fields":{"greeting":"Текст привітання","enabled":"Функцію ввімкнено","mode":"Режим","retries":"Кількість повторів (0–10)"},"modes":{"fast":"Швидкий","safe":"Безпечний","debug":"Налагодження"},"actions_info":"### Дії\\n\\nКнопки нижче запускають зареєстровані дії. Перша завершується успіхом після короткої затримки; друга навмисно падає, щоб показати обробку помилок.","run_button":"Запустити демо-дію","fail_button":"Запустити дію з помилкою","variants":{"default":"Основна","secondary":"Другорядна","ghost":"Привид","link":"Посилання"}},"field_demo":{"label":"Демо полів","fields":{"image":"Image — одне фото","avatar":"Аватар — одне (велике коло)","cover":"Обкладинка — hero (одне)","text_plain":"Text — звичайний","text_minmax":"Text — min/max + в таблиці","text_pattern":"Text — pattern (лише літери)","text_multiline":"Text — multiline","text_email":"Text — format: email","text_emails":"Text — format: email + multiple","text_url":"Text — format: url","text_tel":"Text — format: tel","text_password":"Text — format: password","imei":"IMEI — pattern (15 цифр)","mac":"MAC — pattern (XX:XX:XX:XX:XX:XX)","iban":"IBAN — pattern (рахунок)","textarea":"Textarea","small_text":"Малий текст (scalar textarea)","markdown":"Markdown (WYSIWYG)","code":"Code — моноширинний редактор (yaml)","number_int":"Number — ціле (int)","number_decimal":"Number — дробове","integer":"Integer (min/max)","rating_5":"Rating — 5 зірок","rating_10":"Rating — 10 зірок","rating_split_5":"Rating — ліва колонка (5 зірок)","rating_split_10":"Rating — права колонка (10 зірок)","date":"Date","date_future":"Date — лише майбутнє","time_field":"Time (HH:MM)","datetime":"Datetime","datetimes_multi":"Datetime — multiple","boolean":"Boolean (checkbox)","select":"Select","select_multi":"Select — multiple","day_period":"Day-period (час прийому)","day_period_multi":"Day-period — multiple","country":"Country (з прапором)","country_multi":"Country — multiple","tags_field":"Tags (з підказками)","demo_check":"Check (один)","demo_check_multi":"Check (кілька)","demo_check_stages":"Доставка (етапи)","stage_ordered":"Замовлено","stage_paid":"Оплачено","stage_shipped":"Доставлено","color_hex":"Color — hex (#RRGGBB)","color_multi":"Color — multiple","color_name":"ColorName (CSS-назва)","duration_short":"Duration (хв, крок 5)","measured_currency":"Measured — валюта","measured_weight":"Measured — вага","measured_custom":"Measured — custom одиниці","demo_reminder":"Нагадування","demo_weight":"Вага","demo_dimensions":"Габарити","demo_datasize":"Обсяг даних","demo_ram":"Оперативна пам'ять","demo_disk":"Обсяг диску","demo_weekday":"День тижня","demo_weekdays":"Дні тижня — multiple","ip_addr":"IP-адреса","ip_addrs":"IP-адреси — multiple","cidr_subnet":"CIDR (підмережа)","numbers_multi":"Number — multiple","dates_multi":"Date — multiple","row_single":"Row — один рядок","variants":"Per-row — language (ім'я/прізвище мовами)","row_ingredients":"Row — інгредієнти (relation+measured+computed)","relation_single":"Relation — один запис","relation_multi":"Relation — кілька записів","coll_text":"Колекція — text","coll_integer":"Колекція — integer","coll_select":"Колекція — select","pp_person":"Особа","pp_value":"Значення","per_weekday":"Per-weekday (7 слотів)","per_weekday_per_person":"Per-weekday + per-record (по людях)","image_gallery":"Image — галерея (multiple)","avatar_row":"Аватар — ряд (кілька)","cover_carousel":"Обкладинка — карусель (кілька)","json":"JSON","key_value":"Key-value — кілька пар","key_value_secret":"Key-value — секрет (одна пара)","services_bylist":"Services (колекція над статичним списком)","type":"Type (класифікатор → extends)","periods":"Periods (діапазони дат)","button_demo":"Button — demo дія (lab.demoAction)","price":"Ціна","ageRange":"Діапазон віку","tempRange":"Діапазон температури","agree":"Згода","origin":"Країна походження","birthYear":"Рік народження","attachment":"Вкладення","doc":"Документ","voice":"Голосова нотатка","clip":"Відеокліп","gallery":"Медіагалерея","place":"Місцезнаходження","compact_note":"Компактна нотатка (без кнопок)","embed_wide":"Embed — широкий (multiple)","embed_narrow":"Embed — вузький (multiple)","perkey_fixed":"Fixed perKey — кількість на розмір","calendar_dates":"Календар — дати (колекція)","journal_log":"Журнал — записи (колекція)","demo_table":"Таблиця — з сортуванням, групуванням і підсумками","meter_value":"Значення шкали (просте число)","demo_slug":"Slug — ідентифікатор (URL-friendly)","demo_link":"Link — зовнішнє посилання","demo_mask_card":"Маска введення — номер картки","demo_percent":"Percent — відсоток (0–100%)","demo_year":"Year — рік (1900–2100)","demo_local_dir":"LocalDir — локальна папка","demo_local_file":"LocalFile — локальний файл","demo_tag":"Tag — один тег","demo_i18n":"i18n — текст для перекладу","demo_source":"Source — вихідний файл (завантаження)","demo_poster":"Poster — вертикальний постер","demo_number_range":"NumberRange — діапазон цілих чисел","demo_real_range":"RealRange — діапазон дійсних чисел","demo_month":"Date — гранулярність місяць (YYYY-MM)","demo_unit":"Unit — одиниця вимірювання","demo_amount":"Amount — число із зовнішньою одиницею","demo_hostname":"Hostname — ім'я хоста / домен","times_multi":"Time — список часу (multiple)","demo_recurrence":"Recurrence — правило повторення серії (RRULE)","demo_exdates":"Datetime — винятки повторення (multiple)","demo_sheet":"Sheet — таблиця 2D","demo_table_specs":"Table — таблиця параметрів","sheet_a1":"Комірка A1","sheet_b1":"Комірка B1","sheet_a2":"Комірка A2","sheet_b2":"Комірка B2","demo_status":"Статус запису","demo_author":"Автор","stack_note_1":"Верхній блок нотатки (100% ширини)","stack_note_2":"Нижній блок опису (100% ширини)","illustrated_one":"Ілюстроване — одинарне (зображення + текст)","illustrated_many":"Ілюстроване — колекція (множинне, власні частини)","demo_stepper":"Доставка (досягнутий етап)","chart_readings":"Журнал ваги (джерело графіка)","heatmap_sessions":"Журнал занять (джерело теплової карти)","attachment_one":"Вкладення — одинарне (файл і його назва)","attachment_many":"Вкладення — колекція (множинне, завантаження документів)","identifier":"Ідентифікатор","colorname":"Назва кольору","age":"Дата народження","path":"Шлях","mrz":"Машиночитувана зона","timetable":"Розклад","analyte":"Показник","value":"Значення","unit":"Одиниця","low":"Нижня межа","high":"Верхня межа","flow_amount":"Сума","flow_from":"Звідки","flow_to":"Куди","children":"Дочірні записи"},"options":{"stage":{"ordered":"Замовлено","packed":"Спаковано","shipped":"Відправлено","delivered":"Доставлено"},"select":{"red":"Червоний","green":"Зелений","blue":"Синій"},"pp_select":{"s":"S","m":"M","l":"L"},"type":{"basic":"Базовий","advanced":"Розширений"},"env":{"dev":"Розробка","prod":"Продакшн"},"size":{"s":"S","m":"M","l":"L"}},"per_row":{"name":"Ім'я","surname":"Прізвище","url":"URL","token":"Токен","env":"Середовище","lang":"Мова","product":"Продукт","amount":"Кількість","stock":"Наявність","size":"Розмір","qty":"Кількість","param":"Параметр","val":"Значення","occurs_on":"Дата події","logged_at":"Дата запису","entry":"Запис","measured_on":"Дата вимірювання","reading":"Показник","happened_on":"Дата заняття"},"table":{"part":"Деталь","vendor":"Постачальник","qty":"К-сть"},"units":{"shot":"шот","scoop":"мірна ложка"},"groups":{"demo":"Текстові поля","properties_inspector":"Інспектор властивостей (Properties Inspector)","vertical_stack":"Вертикальна колонка (Stack)","text_pattern":"Текст з валідацією (Pattern)","text_email":"Електронна пошта (Email)","text_url":"Веб-посилання (URL)","text_password":"Прихований пароль (Password)","slug_link":"Ідентифікатори та посилання (Slug & Link)","string_mask":"Маски введення тексту","percent_year":"Відсотки та роки (Percent & Year)","local_paths":"Локальні шляхи на сервері","tag_i18n":"Теги та локалізація (Tag & i18n)","source_poster":"Джерела та постери (Source & Poster)","ranges":"Числові діапазони (Ranges)","ratings":"Рейтинг зірками (Rating 5 & 10)","hostname":"Мережеве ім'я (Hostname)","date_month":"Вибір місяця (Date Month)","unit_amount":"Одиниці та кількості (Unit & Amount)","datetimes":"Дата і час (Datetime)","times_multi":"Час (Time — multiple)","recurrence":"Повторення (RRULE)","embeds":"Вбудований контент (Embed)","split_rating":"Рейтинг (5 та 10 зірок)","spread":"Розворот картки (Spread)","aside":"Бічна панель (Aside)","figure":"Зображення з підписом (Figure)","illustrated":"Ілюстроване (зображення + текст)","epigraph":"Епіграф та цитата (Epigraph)","masthead":"Шапка видання (Masthead)","timeline":"Таймлайн подій (Timeline)","countdown":"Зворотний відлік (Countdown)","deck":"Колода карток (Deck)","people":"Пов'язана персона (People)","identity":"Профіль та контакти (Identity)","score":"Шкала оцінки (Score)","status":"Статус (Status)","meter":"Індикатор прогресу (Meter)","receipt":"Чек та розрахунок (Receipt)","balance":"Баланс (Balance)","route":"Маршрут і мапа (Route)","nutrition":"Харчова цінність (Nutrition)","specimen":"Зразок кольору (Specimen)","idcard":"Посвідчення (ID Card)","periods":"Діапазони дат (Periods)","json":"JSON-структура","per_weekday":"Дні тижня (Per-weekday)","media_carousel":"Галереї та каруселі","files":"Файли та вкладення","key_value":"Ключ-значення (Key-value)","classifier":"Класифікатор типу","catalogue_gap":"Типи, яких не було в каталозі","assay":"Показники на своєму референсному інтервалі"},"blocks":{"bento":"Bento Grid (Асиметрична сітка)","grid":"Сітка колонок (Grid)","prose":"Форматований текст (Prose)","plaque":"Табличка даних (Plaque)","ledger":"Рядки з точковою лінією (Ledger)","stats":"Числові показники (Stats)","facets":"Теги-пігулки (Facets)","terminal":"Термінал та код (Terminal)","callout":"Попередження (Callout)","compare":"Порівняння (Compare)","tab1":"Накопичувач","tab2":"Мережа","section1":"Розклад","section2":"Адресація","divider":"Редакційні блоки","leaves":"Типографічні листи","domain":"Предметні листи","computed":"Обчислювані листи","terminal_caption":"Фрагмент конфігурації","compare_left":"Географія","compare_right":"Чекліст","countdown_caption":"До завершення","balance_caption":"Поточний баланс"},"validation":{"letters_only":"Лише літери"},"info":{"intro":"Демонстраційна полиця усіх типів полів платформи. Заповніть поля нижче, щоб побачити їх у дії."},"actions":{"scan_done":"Знайдено {{count}} пристроїв","fail_title":"Дію не виконано","fail_body":"Сервер повернув помилку (код {{code}})"}},"field_demo_child":{"label":"Дочірній запис","fields":{"demo_id":"UUID батьківського демо","notes":"Нотатка"}},"demo_extra":{"label":"Розширені поля (extend)","fields":{"extra_text":"Додатковий текст","extra_number":"Додаткове число","extra_flag":"Додатковий прапорець"}}}`),_c={lab:gc},vc=e({default:()=>bc,media:()=>yc}),yc={plugin:{label:`Media`,description:`Movies & series watchlist, synced from Jellyfin.`},library:{label:`Media`},settings:{label:`Media settings`,tmdb_key:`TMDB API key`,omdb_key:`OMDb API key`,jellyfin_url:`Jellyfin URL`,jellyfin_token:`Jellyfin API token`,jellyfin_user_id:`Jellyfin user id`,test_button:`Test Jellyfin`,sync_button:`Sync Jellyfin`},title:{label:`Title`,fields:{kind:`Kind`,about:`Description`,year:`Year`,genres:`Genres`,runtime:`Runtime`,tmdb_id:`TMDB ID`,imdb_id:`IMDb ID`,scores:`Ratings`,tmdb_rating:`TMDB rating`,imdb_rating:`IMDb rating`,status:`Status`,watched_date:`Watched on`,seasons:`Seasons`,episodes:`Episodes`,in_library:`In library`,jellyfin_id:`Jellyfin ID`,source:`Source`,link:`Link`,notes:`Notes`},options:{kind:{movie:`Movie`,series:`Series`},status:{want:`Want to watch`,unwatched:`Unwatched`,watching:`Watching`,watched:`Watched`,dropped:`Dropped`},source:{manual:`Manual`,jellyfin:`Jellyfin`,agent:`Agent`}}}},bc={media:yc},xc=e({default:()=>Cc,media:()=>Sc}),Sc={plugin:{label:`Медиа`,description:`Список фильмов и сериалов, синхронизируется с Jellyfin.`},library:{label:`Медиа`},settings:{label:`Настройки Медиа`,tmdb_key:`TMDB API ключ`,omdb_key:`OMDb API ключ`,jellyfin_url:`Jellyfin URL`,jellyfin_token:`Jellyfin API токен`,jellyfin_user_id:`Jellyfin user id`,test_button:`Проверить Jellyfin`,sync_button:`Синхронизировать Jellyfin`},title:{label:`Тайтл`,fields:{kind:`Тип`,about:`Описание`,year:`Год`,genres:`Жанры`,runtime:`Длительность`,tmdb_id:`TMDB ID`,imdb_id:`IMDb ID`,scores:`Рейтинги`,tmdb_rating:`Рейтинг TMDB`,imdb_rating:`Рейтинг IMDb`,status:`Статус`,watched_date:`Просмотрено`,seasons:`Сезоны`,episodes:`Эпизоды`,in_library:`В библиотеке`,jellyfin_id:`Jellyfin ID`,source:`Источник`,link:`Ссылка`,notes:`Заметки`},options:{kind:{movie:`Фильм`,series:`Сериал`},status:{want:`Хочу посмотреть`,unwatched:`Не просмотрено`,watching:`Смотрю`,watched:`Просмотрел`,dropped:`Брошено`},source:{manual:`Вручную`,jellyfin:`Jellyfin`,agent:`Агент`}}}},Cc={media:Sc},wc=e({default:()=>Ec,media:()=>Tc}),Tc={plugin:{label:`Медіа`,description:`Список фільмів і серіалів, синхронізований з Jellyfin.`},library:{label:`Медіа`},settings:{label:`Налаштування Медіа`,tmdb_key:`TMDB API ключ`,omdb_key:`OMDb API ключ`,jellyfin_url:`Jellyfin URL`,jellyfin_token:`Jellyfin API токен`,jellyfin_user_id:`Jellyfin user id`,test_button:`Перевірити Jellyfin`,sync_button:`Синхронізувати Jellyfin`},title:{label:`Тайтл`,fields:{kind:`Тип`,about:`Опис`,year:`Рік`,genres:`Жанри`,runtime:`Тривалість`,tmdb_id:`TMDB ID`,imdb_id:`IMDb ID`,scores:`Рейтинги`,tmdb_rating:`Рейтинг TMDB`,imdb_rating:`Рейтинг IMDb`,status:`Статус`,watched_date:`Переглянуто`,seasons:`Сезони`,episodes:`Епізоди`,in_library:`У бібліотеці`,jellyfin_id:`Jellyfin ID`,source:`Джерело`,link:`Посилання`,notes:`Нотатки`},options:{kind:{movie:`Фільм`,series:`Серіал`},status:{want:`Хочу подивитись`,unwatched:`Не переглянуто`,watching:`Дивлюсь`,watched:`Переглянув`,dropped:`Закинув`},source:{manual:`Вручну`,jellyfin:`Jellyfin`,agent:`Агент`}}}},Ec={media:Tc},Dc=e({default:()=>kc,people:()=>Oc}),Oc={plugin:{label:`People`,description:`Contacts and personal data about people.`},library:{label:`People`},person:{label:`Person`,fields:{logo:`Photo`,fullName:`Name`,birthDate:`Date of birth`,sex:`Sex`,phone:`Phone`,email:`Email`,address:`Address`,occupation:`Occupation`,notes:`Notes`,description:`Description`,tags:`Tags`,photos:`Gallery`}}},kc={people:Oc},Ac=e({default:()=>Mc,people:()=>jc}),jc={plugin:{label:`Люди`,description:`Контакты и личные данные людей.`},library:{label:`Люди`},person:{label:`Человек`,fields:{logo:`Фото`,fullName:`Имя`,birthDate:`Дата рождения`,sex:`Пол`,phone:`Телефон`,email:`Email`,address:`Адрес`,occupation:`Род занятий`,notes:`Заметки`,description:`Описание`,tags:`Теги`,photos:`Галерея`}}},Mc={people:jc},Nc=e({default:()=>Fc,people:()=>Pc}),Pc={plugin:{label:`Люди`,description:`Контакти та особисті дані людей.`},library:{label:`Люди`},person:{label:`Людина`,fields:{logo:`Фото`,fullName:`Ім'я`,birthDate:`Дата народження`,sex:`Стать`,phone:`Телефон`,email:`Email`,address:`Адреса`,occupation:`Рід занять`,notes:`Нотатки`,description:`Опис`,tags:`Теги`,photos:`Галерея`}}},Fc={people:Pc},Ic=e({default:()=>Rc,telegram:()=>Lc}),Lc={providerName:`Telegram`,plugin:{label:`Telegram bot`,description:`Connects Telegram to the orchestrator via GramJS.`},settings:{label:`Telegram bot settings`,api_id:`API ID`,api_hash:`API Hash`,bot_token:`Bot token`,phone:`Phone number`,reasoning_display:`Reasoning display`,reasoning_display_off:`Hidden`,reasoning_display_collapsible:`Collapsible block`,reasoning_display_separate:`Separate messages`},model:{prompt:`Choose a model:`,confirm:`Done`},start:{welcome:`👋 Hi! Send a message to get started.`},link:{needed:`I don’t know who you are yet. Open Coffer → Settings → Account, tap “Link an account”, and follow the link it gives you — it opens @{{bot}} here on Telegram.`,neededNoBot:`I don’t know who you are yet. Open Coffer → Settings → Account, tap “Link an account”, and send me the code it gives you as: /start <code>`,ok:`Linked. You can talk to me now.`,bad:`That link has expired or was already used. Generate a fresh one in Coffer → Settings → Account.`,noSender:`I cannot tell who sent this here, so I cannot link anything to you. Open the link in a direct chat with me instead — your code is still good.`}},Rc={telegram:Lc},zc=e({default:()=>Vc,telegram:()=>Bc}),Bc={providerName:`Telegram`,plugin:{label:`Telegram-бот`,description:`Подключает Telegram к оркестратору через GramJS.`},settings:{label:`Настройки Telegram-бота`,api_id:`API ID`,api_hash:`API Hash`,bot_token:`Токен бота`,phone:`Номер телефона`,reasoning_display:`Показ рассуждений`,reasoning_display_off:`Не показывать`,reasoning_display_collapsible:`Свёрнутым блоком`,reasoning_display_separate:`Отдельными сообщениями`},model:{prompt:`Выберите модель:`,confirm:`Готово`},start:{welcome:`👋 Привет! Напишите сообщение, чтобы начать.`},link:{needed:`Я пока не знаю, кто вы. Откройте Coffer → Настройки → Аккаунт, нажмите «Связать аккаунт» и перейдите по ссылке, которая там появится — она откроет @{{bot}} здесь, в Telegram.`,neededNoBot:`Я пока не знаю, кто вы. Откройте Coffer → Настройки → Аккаунт, нажмите «Связать аккаунт» и пришлите мне код в виде: /start <код>`,ok:`Привязано. Теперь можете общаться со мной.`,bad:`Эта ссылка устарела или уже использована. Сгенерируйте новую в Coffer → Настройки → Аккаунт.`,noSender:`Я не вижу, кто это отправил, поэтому ничего не привяжу. Откройте ссылку в личном чате со мной — ваш код ещё действителен.`}},Vc={telegram:Bc},Hc=e({default:()=>Wc,telegram:()=>Uc}),Uc={providerName:`Telegram`,plugin:{label:`Telegram-бот`,description:`Підключає Telegram до оркестратора через GramJS.`},settings:{label:`Налаштування Telegram-бота`,api_id:`API ID`,api_hash:`API Hash`,bot_token:`Токен бота`,phone:`Номер телефону`,reasoning_display:`Показ міркувань`,reasoning_display_off:`Не показувати`,reasoning_display_collapsible:`Згорнутим блоком`,reasoning_display_separate:`Окремими повідомленнями`},model:{prompt:`Оберіть модель:`,confirm:`Готово`},start:{welcome:`👋 Привіт! Напишіть повідомлення, щоб почати.`},link:{needed:`Я поки не знаю, хто ви. Відкрийте Coffer → Налаштування → Акаунт, натисніть «Прив’язати акаунт» і перейдіть за посиланням, яке там з’явиться — воно відкриє @{{bot}} тут, у Telegram.`,neededNoBot:`Я поки не знаю, хто ви. Відкрийте Coffer → Налаштування → Акаунт, натисніть «Прив’язати акаунт» і надішліть мені код у вигляді: /start <код>`,ok:`Прив’язано. Тепер можете спілкуватися зі мною.`,bad:`Це посилання застаріло або вже використане. Згенеруйте нове в Coffer → Налаштування → Акаунт.`,noSender:`Я не бачу, хто це надіслав, тому нічого не прив’яжу. Відкрийте посилання в особистому чаті зі мною — ваш код ще дійсний.`}},Wc={telegram:Uc},Gc=e({default:()=>qc,things:()=>Kc}),Kc={plugin:{label:`Things`,description:`Personal belongings and storage locations.`},library:{label:`Things`},item:{label:`Item`,fields:{about:`Description`,brand:`Brand`,model:`Model`,location:`Storage location`,quantity:`Quantity`,owner:`Owner`,color:`Color`,material:`Material`,madeIn:`Country of origin`,weight:`Weight`,dimensions:`Dimensions`,serialNumber:`Serial number`,purchaseDate:`Purchase date`,purchasePrice:`Purchase price`,condition:`Condition`,warrantyExpires:`Warranty expires`,link:`Link`,photos:`Gallery`,tags:`Tags`,paymentStatus:`Payment`,receipt:`Receipt`,orderNumber:`Order number`,manual:`Manual`,store:`Store`,store_legacy:`Store (legacy text)`,notes:`Notes`},options:{type:{clothing:`Clothing`,bag:`Bag / backpack`,cable:`Cable / adapter`,tool:`Tool`,furniture:`Furniture`,appliance:`Appliance`,household:`Household`,consumable:`Consumable`,personal_care:`Personal care`,sports:`Sports`,hobby:`Hobby / craft`,hardware:`Hardware / parts`,decor:`Decor / lighting`,stationery:`Stationery`,other:`Other`},condition:{new:`New`,good:`Good`,fair:`Fair`,poor:`Poor`},paymentStatus:{bought:`Bought`,installment:`Installment`,credit:`Credit`}},groups:{specs:`Specifications`,purchase:`Purchase`,media:`Media & Documents`}},storage_location:{label:`Storage location`,fields:{description:`Description`,path:`Hierarchy (levels)`,contents:`Stored here`,notes:`Notes`}},store:{label:`Store`,fields:{logo:`Logo`,description:`Description`,country:`Country`,rating:`Rating`,status:`Status`,linkKind:`Link kind`,url:`URL`,address:`Address`,geo:`Location on the map`,hours:`Opening hours`,open:`Opens`,close:`Closes`,account:`Account / loyalty card`,scriptTitle:`Title`,scriptKind:`What it extracts`,urlPattern:`URL pattern`,script:`Script`,scriptNote:`Note`,photos:`Photos`,tags:`Tags`,notes:`Notes`},groups:{links:`Links`,place:`Physical outlet`,scripts:`Extraction scripts`},options:{type:{marketplace:`Marketplace`,online_store:`Online store`,retail:`Retail shop`,secondhand:`Second-hand`,manufacturer:`Manufacturer`},status:{active:`In use`,rare:`Rarely`,abandoned:`No longer`},linkKind:{site:`Storefront`,account:`Account`,orders:`Orders`,support:`Support`,other:`Other`},scriptKind:{product:`Product page`,orders:`Order list`,receipt:`Receipt`,search:`Search results`,other:`Other`}}}},qc={things:Kc},Jc=e({default:()=>Xc,things:()=>Yc}),Yc={plugin:{label:`Вещи`,description:`Учёт личных вещей и мест хранения.`},library:{label:`Вещи`},item:{label:`Вещь`,fields:{about:`Описание`,brand:`Бренд`,model:`Модель`,location:`Место хранения`,quantity:`Количество`,owner:`Владелец`,color:`Цвет`,material:`Материал`,madeIn:`Страна производства`,weight:`Вес`,dimensions:`Размеры`,serialNumber:`Серийный номер`,purchaseDate:`Дата приобретения`,purchasePrice:`Цена покупки`,condition:`Состояние`,warrantyExpires:`Гарантия до`,link:`Ссылка`,photos:`Галерея`,tags:`Теги`,paymentStatus:`Способ оплаты`,receipt:`Чек / гарантийник`,orderNumber:`Номер заказа`,manual:`Инструкция`,store:`Магазин`,store_legacy:`Магазин (старый текст)`,notes:`Заметки`},options:{type:{clothing:`Одежда`,bag:`Сумка / рюкзак`,cable:`Кабель / адаптер`,tool:`Инструмент`,furniture:`Мебель`,appliance:`Бытовая техника`,household:`Хозтовары / дом`,consumable:`Расходники`,personal_care:`Гигиена / уход`,sports:`Спорт`,hobby:`Хобби / крафт`,hardware:`Крепёж / детали`,decor:`Декор / освещение`,stationery:`Канцелярия`,other:`Другое`},condition:{new:`Новый`,good:`Хороший`,fair:`Удовлетворительный`,poor:`Плохой`},paymentStatus:{bought:`Куплено`,installment:`Рассрочка`,credit:`Кредит`}},groups:{specs:`Характеристики`,purchase:`Покупка`,media:`Файлы и фото`}},storage_location:{label:`Место хранения`,fields:{description:`Описание`,path:`Иерархия (уровни)`,contents:`Хранится здесь`,notes:`Заметки`}},store:{label:`Магазин`,fields:{logo:`Логотип`,description:`Описание`,country:`Страна`,rating:`Оценка`,status:`Статус`,linkKind:`Тип ссылки`,url:`Ссылка`,address:`Адрес`,geo:`Точка на карте`,hours:`Часы работы`,open:`Открытие`,close:`Закрытие`,account:`Аккаунт / карта лояльности`,scriptTitle:`Название`,scriptKind:`Что извлекает`,urlPattern:`Шаблон URL`,script:`Скрипт`,scriptNote:`Заметка`,photos:`Фото`,tags:`Теги`,notes:`Заметки`},groups:{links:`Ссылки`,place:`Физическая точка`,scripts:`Скрипты извлечения`},options:{type:{marketplace:`Маркетплейс`,online_store:`Интернет-магазин`,retail:`Розничный магазин`,secondhand:`Барахолка`,manufacturer:`Производитель`},status:{active:`Пользуюсь`,rare:`Редко`,abandoned:`Больше нет`},linkKind:{site:`Витрина`,account:`Личный кабинет`,orders:`Заказы`,support:`Поддержка`,other:`Другое`},scriptKind:{product:`Карточка товара`,orders:`Список заказов`,receipt:`Чек`,search:`Результаты поиска`,other:`Другое`}}}},Xc={things:Yc},Zc=e({default:()=>$c,things:()=>Qc}),Qc={plugin:{label:`Речі`,description:`Облік особистих речей і місць зберігання.`},library:{label:`Речі`},item:{label:`Річ`,fields:{about:`Опис`,brand:`Бренд`,model:`Модель`,location:`Місце зберігання`,quantity:`Кількість`,owner:`Власник`,color:`Колір`,material:`Матеріал`,madeIn:`Країна виробництва`,weight:`Вага`,dimensions:`Розміри`,serialNumber:`Серійний номер`,purchaseDate:`Дата придбання`,purchasePrice:`Ціна покупки`,condition:`Стан`,warrantyExpires:`Гарантія до`,link:`Посилання`,photos:`Галерея`,tags:`Теги`,paymentStatus:`Спосіб оплати`,receipt:`Чек / гарантійник`,orderNumber:`Номер замовлення`,manual:`Інструкція`,store:`Магазин`,store_legacy:`Магазин (старий текст)`,notes:`Нотатки`},options:{type:{clothing:`Одяг`,bag:`Сумка / рюкзак`,cable:`Кабель / адаптер`,tool:`Інструмент`,furniture:`Меблі`,appliance:`Побутова техніка`,household:`Побутове / дім`,consumable:`Розхідники`,personal_care:`Гігієна / догляд`,sports:`Спорт`,hobby:`Хобі / крафт`,hardware:`Кріплення / деталі`,decor:`Декор / освітлення`,stationery:`Канцелярія`,other:`Інше`},condition:{new:`Новий`,good:`Добрий`,fair:`Задовільний`,poor:`Поганий`},paymentStatus:{bought:`Куплено`,installment:`Розстрочка`,credit:`Кредит`}},groups:{specs:`Характеристики`,purchase:`Купівля`,media:`Файли та фото`}},storage_location:{label:`Місце зберігання`,fields:{description:`Опис`,path:`Ієрархія (рівні)`,contents:`Зберігається тут`,notes:`Нотатки`}},store:{label:`Магазин`,fields:{logo:`Логотип`,description:`Опис`,country:`Країна`,rating:`Оцінка`,status:`Статус`,linkKind:`Тип посилання`,url:`Посилання`,address:`Адреса`,geo:`Точка на карті`,hours:`Години роботи`,open:`Відкриття`,close:`Закриття`,account:`Акаунт / картка лояльності`,scriptTitle:`Назва`,scriptKind:`Що видобуває`,urlPattern:`Шаблон URL`,script:`Скрипт`,scriptNote:`Нотатка`,photos:`Фото`,tags:`Теги`,notes:`Нотатки`},groups:{links:`Посилання`,place:`Фізична точка`,scripts:`Скрипти видобування`},options:{type:{marketplace:`Маркетплейс`,online_store:`Інтернет-магазин`,retail:`Роздрібний магазин`,secondhand:`Секонд-хенд`,manufacturer:`Виробник`},status:{active:`Користуюся`,rare:`Рідко`,abandoned:`Більше ні`},linkKind:{site:`Вітрина`,account:`Особистий кабінет`,orders:`Замовлення`,support:`Підтримка`,other:`Інше`},scriptKind:{product:`Картка товару`,orders:`Список замовлень`,receipt:`Чек`,search:`Результати пошуку`,other:`Інше`}}}},$c={things:Qc},el=e({default:()=>nl,transit:()=>tl}),tl={plugin:{label:`Transit`,description:`Public transport routes and schedules.`},library:{label:`Transit`},settings:{label:`Transit sync`,caldav_calendar:`Calendar URL`,caldav_url:`CalDAV server URL`,caldav_username:`Username`,caldav_password:`Password`},bus_route:{label:`Route`,fields:{description:`Description`,route_number:`Route No.`,from:`From`,to:`To`,stop:`Stop`,weekday_times:`Weekdays`,saturday_times:`Saturday`,sunday_times:`Sunday`,notes:`Notes`,tags:`Tags`}}},nl={transit:tl},rl=e({default:()=>al,transit:()=>il}),il={plugin:{label:`Транспорт`,description:`Маршруты общественного транспорта и расписания.`},library:{label:`Транспорт`},settings:{label:`Синхронизация транспорта`,caldav_calendar:`URL календаря`,caldav_url:`URL CalDAV-сервера`,caldav_username:`Имя пользователя`,caldav_password:`Пароль`},bus_route:{label:`Маршрут`,fields:{description:`Описание`,route_number:`Маршрут №`,from:`Откуда`,to:`Куда`,stop:`Остановка`,weekday_times:`Будни`,saturday_times:`Суббота`,sunday_times:`Воскресенье`,notes:`Заметки`,tags:`Теги`}}},al={transit:il},ol=e({default:()=>cl,transit:()=>sl}),sl={plugin:{label:`Транспорт`,description:`Маршрути громадського транспорту та розклади.`},library:{label:`Транспорт`},settings:{label:`Синхронізація транспорту`,caldav_calendar:`URL календаря`,caldav_url:`URL CalDAV-сервера`,caldav_username:`Ім'я користувача`,caldav_password:`Пароль`},bus_route:{label:`Маршрут`,fields:{description:`Опис`,route_number:`Маршрут №`,from:`Звідки`,to:`Куди`,stop:`Зупинка`,weekday_times:`Будні`,saturday_times:`Субота`,sunday_times:`Неділя`,notes:`Нотатки`,tags:`Теги`}}},cl={transit:sl},ll=e({default:()=>dl,travel:()=>ul}),ul={plugin:{label:`Travel`,description:`Trips, flights and bookings.`},library:{label:`Travel`},trip:{label:`Trip`,fields:{description:`Description`,destination:`Destination`,date_from:`Departure date`,date_to:`Return date`,status:`Status`,participants:`Participants`,budget:`Budget`,days:`Days`,spent:`Booked`,budget_state:`Budget`,notes:`Notes`,photos:`Photos`,packing_items:`Items from my things`,packing_list:`Free-form packing list`,legs:`Legs`,accommodations:`Accommodations`,insurances:`Insurances`,activities:`Activities`,tags:`Tags`},options:{status:{planned:`Planned`,active:`In progress`,completed:`Completed`,cancelled:`Cancelled`},budget_state:{within:`Within budget`,over:`Over budget`}},packing:{prepared:`Prepared`,packed:`Packed`,packed_back:`Packed back`,item:`Item`},leg:{date:`Date`,leg_type:`Type`,operator:`Carrier`,number:`Flight / trip number`,seat:`Seat`,class:`Class`,booking_ref:`Booking ref`,terminal:`Terminal`,gate:`Gate`,origin_city:`Origin city`,origin_code:`Airport / station code`,departure_time:`Departure time`,destination_city:`Destination city`,destination_code:`Destination airport / station code`,arrival_time:`Arrival time`,duration:`Duration`,checked_in:`Checked in`,documents:`Tickets & documents`,notes:`Notes`},leg_opt:{leg_type:{flight:`Flight`,train:`Train`,bus:`Bus`,car:`Car`,ferry:`Ferry`,other:`Other`},class:{economy:`Economy`,business:`Business`,first:`First`}},accom:{accom_type:`Type`,location:`Address`,address:`Address`,rating:`Stars`,breakfast:`Breakfast included`,check_in:`Check-in`,check_out:`Check-out`,booking_ref:`Booking reference`,cost:`Cost`,documents:`Voucher & documents`,notes:`Notes`},accom_opt:{accom_type:{hotel:`Hotel`,apartment:`Apartment`,hostel:`Hostel`,other:`Other`},rating:{1:`★`,2:`★★`,3:`★★★`,4:`★★★★`,5:`★★★★★`}},insur:{insurer:`Insurer`,policy_number:`Policy number`,coverage:`Coverage`,cost:`Cost`,valid_from:`Valid from`,valid_until:`Valid until`,emergency_phone:`Emergency phone`,documents:`Policy & documents`,notes:`Notes`},act:{activity_type:`Type`,date:`Date`,time_start:`Start time`,time_end:`End time`,location:`Location`,booking_ref:`Booking ref`,cost:`Cost`,documents:`Tickets & documents`,notes:`Notes`},act_opt:{activity_type:{sightseeing:`Sightseeing`,museum:`Museum`,beach:`Beach`,nature:`Nature`,restaurant:`Restaurant`,tour:`Tour`,shopping:`Shopping`,entertainment:`Entertainment`,other:`Other`}}}},dl={travel:ul},fl=e({default:()=>ml,travel:()=>pl}),pl={plugin:{label:`Путешествия`,description:`Поездки, перелёты и бронирования.`},library:{label:`Путешествия`},trip:{label:`Поездка`,fields:{description:`Описание`,destination:`Направление`,date_from:`Дата вылета`,date_to:`Дата возвращения`,status:`Статус`,participants:`Участники`,budget:`Бюджет`,days:`Дней`,spent:`Забронировано`,budget_state:`Бюджет`,notes:`Заметки`,photos:`Фото`,packing_items:`Вещи из списка`,packing_list:`Свободный список вещей`,legs:`Перевозки`,accommodations:`Проживание`,insurances:`Страховки`,activities:`Активности`,tags:`Теги`},options:{status:{planned:`Запланировано`,active:`В пути`,completed:`Завершено`,cancelled:`Отменено`},budget_state:{within:`В пределах бюджета`,over:`Превышен`}},packing:{prepared:`Подготовлено`,packed:`Сложено в сумки`,packed_back:`Собрано обратно`,item:`Вещь`},leg:{date:`Дата`,leg_type:`Тип`,operator:`Перевозчик`,number:`Номер рейса`,seat:`Место`,class:`Класс`,booking_ref:`Код бронирования`,terminal:`Терминал`,gate:`Выход`,origin_city:`Город отправления`,origin_code:`Код аэропорта/вокзала`,departure_time:`Время отправления`,destination_city:`Город прибытия`,destination_code:`Код аэропорта/вокзала назначения`,arrival_time:`Время прибытия`,duration:`Продолжительность`,checked_in:`Зарегистрировано`,documents:`Билеты и документы`,notes:`Заметки`},leg_opt:{leg_type:{flight:`Рейс`,train:`Поезд`,bus:`Автобус`,car:`Авто`,ferry:`Паром`,other:`Другое`},class:{economy:`Эконом`,business:`Бизнес`,first:`Первый`}},accom:{accom_type:`Тип`,location:`Адрес`,address:`Адрес`,rating:`Звёзды`,breakfast:`Завтрак включён`,check_in:`Заезд`,check_out:`Выезд`,booking_ref:`Номер бронирования`,cost:`Стоимость`,documents:`Ваучер и документы`,notes:`Заметки`},accom_opt:{accom_type:{hotel:`Отель`,apartment:`Апартаменты`,hostel:`Хостел`,other:`Другое`},rating:{1:`★`,2:`★★`,3:`★★★`,4:`★★★★`,5:`★★★★★`}},insur:{insurer:`Страховщик`,policy_number:`Номер полиса`,coverage:`Покрытие`,cost:`Стоимость`,valid_from:`Действительна с`,valid_until:`Действительна до`,emergency_phone:`Телефон экстренной помощи`,documents:`Полис и документы`,notes:`Заметки`},act:{activity_type:`Тип`,date:`Дата`,time_start:`Время начала`,time_end:`Время завершения`,location:`Локация`,booking_ref:`Код бронирования`,cost:`Стоимость`,documents:`Билеты и документы`,notes:`Заметки`},act_opt:{activity_type:{sightseeing:`Осмотр города`,museum:`Музей`,beach:`Пляж`,nature:`Природа`,restaurant:`Ресторан`,tour:`Экскурсия`,shopping:`Шопинг`,entertainment:`Развлечения`,other:`Другое`}}}},ml={travel:pl},hl=e({default:()=>_l,travel:()=>gl}),gl={plugin:{label:`Подорожі`,description:`Поїздки, перельоти та бронювання.`},library:{label:`Подорожі`},trip:{label:`Поїздка`,fields:{description:`Опис`,destination:`Напрямок`,date_from:`Дата вильоту`,date_to:`Дата повернення`,status:`Статус`,participants:`Учасники`,budget:`Бюджет`,days:`Днів`,spent:`Заброньовано`,budget_state:`Бюджет`,notes:`Нотатки`,photos:`Фото`,packing_items:`Речі зі списку`,packing_list:`Вільний список речей`,legs:`Перевезення`,accommodations:`Проживання`,insurances:`Страховки`,activities:`Активності`,tags:`Теги`},options:{status:{planned:`Заплановано`,active:`В дорозі`,completed:`Завершено`,cancelled:`Скасовано`},budget_state:{within:`У межах бюджету`,over:`Перевищено`}},packing:{prepared:`Підготовлено`,packed:`Спаковано`,packed_back:`Зібрано назад`,item:`Річ`},leg:{date:`Дата`,leg_type:`Тип`,operator:`Перевізник`,number:`Номер рейсу`,seat:`Місце`,class:`Клас`,booking_ref:`Підтвердження`,terminal:`Термінал`,gate:`Гейт`,origin_city:`Місто відправлення`,origin_code:`Код аеропорту/вокзалу`,departure_time:`Час відправлення`,destination_city:`Місто прибуття`,destination_code:`Код аеропорту/вокзалу призначення`,arrival_time:`Час прибуття`,duration:`Тривалість`,checked_in:`Зареєстровано`,documents:`Квитки й документи`,notes:`Нотатки`},leg_opt:{leg_type:{flight:`Рейс`,train:`Потяг`,bus:`Автобус`,car:`Авто`,ferry:`Паром`,other:`Інше`},class:{economy:`Економ`,business:`Бізнес`,first:`Перший`}},accom:{accom_type:`Тип`,location:`Адреса`,address:`Адреса`,rating:`Зірки`,breakfast:`Сніданок включено`,check_in:`Заїзд`,check_out:`Виїзд`,booking_ref:`Номер бронювання`,cost:`Вартість`,documents:`Ваучер і документи`,notes:`Нотатки`},accom_opt:{accom_type:{hotel:`Готель`,apartment:`Апартаменти`,hostel:`Хостел`,other:`Інше`},rating:{1:`★`,2:`★★`,3:`★★★`,4:`★★★★`,5:`★★★★★`}},insur:{insurer:`Страховик`,policy_number:`Номер полісу`,coverage:`Покриття`,cost:`Вартість`,valid_from:`Дійсна з`,valid_until:`Дійсна до`,emergency_phone:`Телефон екстреної допомоги`,documents:`Поліс і документи`,notes:`Нотатки`},act:{activity_type:`Тип`,date:`Дата`,time_start:`Час початку`,time_end:`Час завершення`,location:`Локація`,booking_ref:`Підтвердження`,cost:`Вартість`,documents:`Квитки й документи`,notes:`Нотатки`},act_opt:{activity_type:{sightseeing:`Огляд міста`,museum:`Музей`,beach:`Пляж`,nature:`Природа`,restaurant:`Ресторан`,tour:`Екскурсія`,shopping:`Шопінг`,entertainment:`Розваги`,other:`Інше`}}}},_l={travel:gl},vl=e({default:()=>bl,webchat:()=>yl}),yl={plugin:{label:`Web chat`,description:`In-browser chat with the agent.`},title:`Agent`,open:`Open chat`,close:`Close`,expand:`Expand`,collapse:`Collapse`,newConversation:`New conversation`,threads:`Conversations`,you:`You`,makePrivate:`Make private`,makePublic:`Make public`,empty:`No messages yet`,suggestions:`Suggestions`,placeholder:`Ask about your data…`,send:`Send`,stop:`Stop`,attach:`Attach file`,removeAttachment:`Remove {{name}}`,uploading:`Uploading…`,uploadProgress:`Upload progress`,uploadTooLarge:`File is too large (maximum 25 MB).`,uploadFailed:`Could not upload the file.`,retryUpload:`Retry upload`,dropFiles:`Drop files here`,dropFilesHint:`The file will be attached to your next message`,thinking:`Thinking…`,error:`Error: {{message}}`,reasoning:`Reasoning`,agentPicker:`Agent and preset`,level:`Level {{value}} of {{max}}`,quality:`Quality {{value}} of 5`,time:`Time {{value}} of 5`,settings:{label:`Web chat`,reasoning_display:`Reasoning display`,reasoning_display_live:`Live block`,reasoning_display_off:`Hidden`}},bl={webchat:yl},xl=e({default:()=>Cl,webchat:()=>Sl}),Sl={plugin:{label:`Чат на сайте`,description:`Веб-чат для общения с агентом.`},title:`Агент`,open:`Открыть чат`,close:`Закрыть`,expand:`Развернуть`,collapse:`Свернуть`,newConversation:`Новый разговор`,threads:`Разговоры`,you:`Вы`,makePrivate:`Сделать приватным`,makePublic:`Сделать публичным`,empty:`Пока нет сообщений`,suggestions:`Подсказки`,placeholder:`Спроси о своих данных…`,send:`Отправить`,stop:`Стоп`,attach:`Прикрепить файл`,removeAttachment:`Удалить {{name}}`,uploading:`Загрузка…`,uploadProgress:`Прогресс загрузки`,uploadTooLarge:`Файл слишком большой (максимум 25 МБ).`,uploadFailed:`Не удалось загрузить файл.`,retryUpload:`Повторить загрузку`,dropFiles:`Перетащите файлы сюда`,dropFilesHint:`Файл будет прикреплён к следующему сообщению`,thinking:`Думает…`,error:`Ошибка: {{message}}`,reasoning:`Рассуждения`,agentPicker:`Агент и пресет`,level:`Уровень {{value}} из {{max}}`,quality:`Качество {{value}} из 5`,time:`Время {{value}} из 5`,settings:{label:`Чат на сайте`,reasoning_display:`Показ рассуждений`,reasoning_display_live:`Живым блоком`,reasoning_display_off:`Не показывать`}},Cl={webchat:Sl},wl=e({default:()=>El,webchat:()=>Tl}),Tl={plugin:{label:`Чат на сайті`,description:`Вебчат для спілкування з агентом.`},title:`Агент`,open:`Відкрити чат`,close:`Закрити`,expand:`Розгорнути`,collapse:`Згорнути`,newConversation:`Нова розмова`,threads:`Розмови`,you:`Ви`,makePrivate:`Зробити приватною`,makePublic:`Зробити публічною`,empty:`Ще немає повідомлень`,suggestions:`Підказки`,placeholder:`Запитай про свої дані…`,send:`Надіслати`,stop:`Стоп`,attach:`Додати файл`,removeAttachment:`Видалити {{name}}`,uploading:`Завантаження…`,uploadProgress:`Прогрес завантаження`,uploadTooLarge:`Файл завеликий (максимум 25 МБ).`,uploadFailed:`Не вдалося завантажити файл.`,retryUpload:`Повторити завантаження`,dropFiles:`Перетягніть файли сюди`,dropFilesHint:`Файл буде додано до наступного повідомлення`,thinking:`Думає…`,error:`Помилка: {{message}}`,reasoning:`Міркування`,agentPicker:`Агент і пресет`,level:`Рівень {{value}} з {{max}}`,quality:`Якість {{value}} з 5`,time:`Час {{value}} з 5`,settings:{label:`Чат на сайті`,reasoning_display:`Показ міркувань`,reasoning_display_live:`Живим блоком`,reasoning_display_off:`Не показувати`}},El={webchat:Tl},Dl=e({default:()=>kl,webexport:()=>Ol}),Ol={plugin:{label:`Web export`,description:`Static HTML export host: shared output dir and common css/js assets.`},settings:{label:`Web export settings`,output_dir:`Output directory`}},kl={webexport:Ol},Al=e({default:()=>Ml,webexport:()=>jl}),jl={plugin:{label:`Веб-экспорт`,description:`Хост статического HTML-экспорта: общая папка вывода и общие css/js.`},settings:{label:`Настройки веб-экспорта`,output_dir:`Папка вывода`}},Ml={webexport:jl},Nl=e({default:()=>Fl,webexport:()=>Pl}),Pl={plugin:{label:`Веб-експорт`,description:`Хост статичного HTML-експорту: спільна тека виводу та спільні css/js.`},settings:{label:`Налаштування веб-експорту`,output_dir:`Тека виводу`}},Fl={webexport:Pl},Il=Object.assign({"../plugin-calendar/locales/en.json":qa,"../plugin-calendar/locales/ru.json":Xa,"../plugin-calendar/locales/uk.json":$a,"../plugin-claude-agent/locales/en.json":no,"../plugin-claude-agent/locales/ru.json":io,"../plugin-claude-agent/locales/uk.json":oo,"../plugin-console/locales/en.json":co,"../plugin-console/locales/ru.json":fo,"../plugin-console/locales/uk.json":ho,"../plugin-dav/locales/en.json":vo,"../plugin-dav/locales/ru.json":xo,"../plugin-dav/locales/uk.json":wo,"../plugin-devices/locales/en.json":Do,"../plugin-devices/locales/ru.json":Ao,"../plugin-devices/locales/uk.json":No,"../plugin-documents/locales/en.json":Io,"../plugin-documents/locales/ru.json":zo,"../plugin-documents/locales/uk.json":Ho,"../plugin-drone/locales/en.json":Go,"../plugin-drone/locales/ru.json":Jo,"../plugin-drone/locales/uk.json":Zo,"../plugin-finance/locales/en.json":es,"../plugin-finance/locales/ru.json":rs,"../plugin-finance/locales/uk.json":os,"../plugin-garden/locales/en.json":ls,"../plugin-garden/locales/ru.json":fs,"../plugin-garden/locales/uk.json":hs,"../plugin-geo/locales/en.json":vs,"../plugin-geo/locales/ru.json":xs,"../plugin-geo/locales/uk.json":ws,"../plugin-health/locales/en.json":Ds,"../plugin-health/locales/ru.json":As,"../plugin-health/locales/uk.json":Ns,"../plugin-home/locales/en.json":Is,"../plugin-home/locales/ru.json":zs,"../plugin-home/locales/uk.json":Hs,"../plugin-http/locales/en.json":Gs,"../plugin-http/locales/ru.json":Js,"../plugin-http/locales/uk.json":Zs,"../plugin-kitchen/locales/en.json":ec,"../plugin-kitchen/locales/ru.json":rc,"../plugin-kitchen/locales/uk.json":oc,"../plugin-lab/locales/en.json":lc,"../plugin-lab/locales/ru.json":fc,"../plugin-lab/locales/uk.json":hc,"../plugin-media/locales/en.json":vc,"../plugin-media/locales/ru.json":xc,"../plugin-media/locales/uk.json":wc,"../plugin-people/locales/en.json":Dc,"../plugin-people/locales/ru.json":Ac,"../plugin-people/locales/uk.json":Nc,"../plugin-telegram/locales/en.json":Ic,"../plugin-telegram/locales/ru.json":zc,"../plugin-telegram/locales/uk.json":Hc,"../plugin-things/locales/en.json":Gc,"../plugin-things/locales/ru.json":Jc,"../plugin-things/locales/uk.json":Zc,"../plugin-transit/locales/en.json":el,"../plugin-transit/locales/ru.json":rl,"../plugin-transit/locales/uk.json":ol,"../plugin-travel/locales/en.json":ll,"../plugin-travel/locales/ru.json":fl,"../plugin-travel/locales/uk.json":hl,"../plugin-webchat/locales/en.json":vl,"../plugin-webchat/locales/ru.json":xl,"../plugin-webchat/locales/uk.json":wl,"../plugin-webexport/locales/en.json":Dl,"../plugin-webexport/locales/ru.json":Al,"../plugin-webexport/locales/uk.json":Nl});for(let[e,t]of Object.entries(Il)){let n=e.match(/\/([a-z]{2})\.json$/)?.[1];n&&t.default&&Ka.addResourceBundle(n,`translation`,t.default,!0,!0)}var Ll=/^[a-z][a-z0-9+.-]*:\/\//i;function Rl(e){let t=e.trim();if(!t)return null;let n=Ll.test(t),r;try{r=new URL(n?t:`http://${t}`)}catch{return{host:t}}let i={};return n&&(i.scheme=r.protocol.replace(/:$/,``)),r.username&&(i.username=r.username),r.password&&(i.password=r.password),r.hostname&&(i.host=r.hostname),r.port&&(i.port=Number(r.port)),r.pathname&&r.pathname!==`/`&&(i.path=r.pathname),r.search&&(i.query=r.search.slice(1)),r.hash&&(i.hash=r.hash.slice(1)),i}function zl(e){return e?`${e.scheme?`${e.scheme}://`:``}${e.username?`${e.username}${e.password?`:${e.password}`:``}@`:``}${e.host??``}${e.port==null?``:`:${e.port}`}${e.path??``}${e.query?`?${e.query}`:``}${e.hash?`#${e.hash}`:``}`:``}function Bl(e){return!e||!zl(e)?``:e.scheme?zl(e):`https://${zl(e)}`}var Vl=hi(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),Hl=hi(`corner-left-up`,[[`path`,{d:`M14 9 9 4 4 9`,key:`1af5af`}],[`path`,{d:`M20 20h-7a4 4 0 0 1-4-4V4`,key:`1blwi3`}]]),Ul=hi(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),Wl=hi(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),Gl=hi(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),Kl=hi(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),ql=hi(`file-code`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12.5 8 15l2 2.5`,key:`1tg20x`}],[`path`,{d:`m14 12.5 2 2.5-2 2.5`,key:`yinavb`}]]),Jl=hi(`file-x`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14.5 12.5-5 5`,key:`b62r18`}],[`path`,{d:`m9.5 12.5 5 5`,key:`1rk7el`}]]),Yl=hi(`film`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M7 3v18`,key:`bbkbws`}],[`path`,{d:`M3 7.5h4`,key:`zfgn84`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`path`,{d:`M3 16.5h4`,key:`1230mu`}],[`path`,{d:`M17 3v18`,key:`in4fa5`}],[`path`,{d:`M17 7.5h4`,key:`myr1c1`}],[`path`,{d:`M17 16.5h4`,key:`go4c1d`}]]),Xl=hi(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]),Zl=hi(`mail`,[[`path`,{d:`m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7`,key:`132q7q`}],[`rect`,{x:`2`,y:`4`,width:`20`,height:`16`,rx:`2`,key:`izxlao`}]]),Ql=hi(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),$l=hi(`music`,[[`path`,{d:`M9 18V5l12-2v13`,key:`1jmyc2`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}],[`circle`,{cx:`18`,cy:`16`,r:`3`,key:`1hluhg`}]]),eu=hi(`phone`,[[`path`,{d:`M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384`,key:`9njp5v`}]]),F=_(),tu=new Map;function nu(e,t){if(tu.has(e))throw Error(`[actions] '${e}' already registered`);tu.set(e,t)}function ru(e){return tu.get(e)}var iu=e({});nu(`devices.runScan`,async e=>{let t=await fetch(`/api/plugins/devices/scan`,{method:`POST`});if(!t.ok){let e=await t.json(),n=Error(e.error??`Server error ${t.status}`);throw n.ui={kind:`popup`,variant:`error`,title:`devices.scan.failTitle`,message:e.error??`Server error ${t.status}`},n}let{result:n}=await t.json();return{kind:`popup`,variant:n.failed.length+n.noMac.length>0?`error`:`success`,component:{name:`devices.scan.summary`,data:{active:n.active,created:n.created,macChanged:n.macChanged,skipped:n.skipped,noMac:n.noMac,failed:n.failed}}}});var au=e({});nu(`finance.testConnection`,async e=>{let t=await fetch(`/api/plugins/finance/test`,{method:`POST`});if(!t.ok){let e=await t.json();throw Error(e.error??`Server error ${t.status}`)}}),nu(`finance.sync`,async e=>{let t=await fetch(`/api/plugins/finance/sync`,{method:`POST`});if(!t.ok){let e=await t.json();throw Error(e.error??`Server error ${t.status}`)}}),nu(`finance.importWise`,async e=>{let t=await fetch(`/api/plugins/finance/import-wise`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error??`Server error ${t.status}`);if(n.errors?.length)throw Error(`Imported ${n.imported}, skipped ${n.skipped}, errors ${n.errors.length}: ${n.errors[0]}`)});var ou=e({}),su=()=>new Date().toISOString().slice(0,10);async function cu(e,t){let n={[t]:su()};if(!(await fetch(`/api/${e.library}/${e.shelf}/${e.recordId}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})).ok){let e=Error(`update failed`);throw e.ui={kind:`toast`,variant:`error`,message:`garden.plant.actions.failed`},e}return{kind:`toast`,variant:`success`,message:`garden.plant.actions.done`}}nu(`garden.watered`,e=>cu(e,`lastWatered`)),nu(`garden.fertilized`,e=>cu(e,`lastFertilized`));var lu=e({});nu(`lab.demoAction`,async e=>(await new Promise(e=>setTimeout(e,800)),{kind:`toast`,variant:`success`,message:`lab.field_demo.actions.scan_done`,params:{count:Math.floor(Math.random()*9)+1}})),nu(`lab.demoFail`,async()=>{await new Promise(e=>setTimeout(e,400));let e=Error(`Demo error`);throw e.ui={kind:`popup`,variant:`error`,title:`lab.field_demo.actions.fail_title`,message:`lab.field_demo.actions.fail_body`,params:{code:500}},e});var uu=e({});nu(`media.testJellyfin`,async e=>{let t=await fetch(`/api/plugins/media/test`,{method:`POST`});if(!t.ok){let e=await t.json();throw Error(e.error??`Server error ${t.status}`)}}),nu(`media.syncJellyfin`,async e=>{let t=await fetch(`/api/plugins/media/sync`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error??`Server error ${t.status}`)}),Object.keys(Object.assign({"../plugin-devices/src/actions.ts":iu,"../plugin-finance/src/actions.ts":au,"../plugin-garden/src/actions.ts":ou,"../plugin-lab/src/field_demo/actions.ts":lu,"../plugin-media/src/actions.ts":uu}));var du={"--w-rjv-font-family":`monospace`,"--w-rjv-color":`#0184a6`,"--w-rjv-key-string":`#0184a6`,"--w-rjv-background-color":`#202020`,"--w-rjv-line-color":`#323232`,"--w-rjv-arrow-color":`var(--w-rjv-color)`,"--w-rjv-edit-color":`var(--w-rjv-color)`,"--w-rjv-info-color":`#656565`,"--w-rjv-update-color":`#ebcb8b`,"--w-rjv-copied-color":`#0184a6`,"--w-rjv-copied-success-color":`#28a745`,"--w-rjv-curlybraces-color":`#1896b6`,"--w-rjv-brackets-color":`#1896b6`,"--w-rjv-quotes-color":`var(--w-rjv-key-string)`,"--w-rjv-quotes-string-color":`var(--w-rjv-type-string-color)`,"--w-rjv-type-string-color":`#cb4b16`,"--w-rjv-type-int-color":`#268bd2`,"--w-rjv-type-float-color":`#859900`,"--w-rjv-type-bigint-color":`#268bd2`,"--w-rjv-type-boolean-color":`#2aa198`,"--w-rjv-type-date-color":`#586e75`,"--w-rjv-type-url-color":`#649bd8`,"--w-rjv-type-null-color":`#d33682`,"--w-rjv-type-nan-color":`#076678`,"--w-rjv-type-undefined-color":`#586e75`},fu={"--w-rjv-font-family":`monospace`,"--w-rjv-color":`#002b36`,"--w-rjv-key-string":`#002b36`,"--w-rjv-background-color":`#ffffff`,"--w-rjv-line-color":`#ebebeb`,"--w-rjv-arrow-color":`var(--w-rjv-color)`,"--w-rjv-edit-color":`var(--w-rjv-color)`,"--w-rjv-info-color":`#0000004d`,"--w-rjv-update-color":`#ebcb8b`,"--w-rjv-copied-color":`#002b36`,"--w-rjv-copied-success-color":`#28a745`,"--w-rjv-curlybraces-color":`#236a7c`,"--w-rjv-colon-color":`#002b36`,"--w-rjv-brackets-color":`#236a7c`,"--w-rjv-quotes-color":`var(--w-rjv-key-string)`,"--w-rjv-quotes-string-color":`var(--w-rjv-type-string-color)`,"--w-rjv-type-string-color":`#cb4b16`,"--w-rjv-type-int-color":`#268bd2`,"--w-rjv-type-float-color":`#859900`,"--w-rjv-type-bigint-color":`#268bd2`,"--w-rjv-type-boolean-color":`#2aa198`,"--w-rjv-type-date-color":`#586e75`,"--w-rjv-type-url-color":`#0969da`,"--w-rjv-type-null-color":`#d33682`,"--w-rjv-type-nan-color":`#859900`,"--w-rjv-type-undefined-color":`#586e75`};function pu(e){return(e??``).replace(/```[\s\S]*?```/g,` `).replace(/`([^`]+)`/g,`$1`).replace(/!\[[^\]]*\]\([^)]*\)/g,` `).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/^#{1,6}\s+/gm,``).replace(/[*_~>#-]+/g,` `).replace(/\s+/g,` `).trim()}var I=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/text.tsx`,mu=(0,P.lazy)(()=>m(()=>import(`./MarkdownEditor-On2GbApm.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))),hu;function gu(){hu??=m(()=>import(`./MarkdownEditor-On2GbApm.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))}var _u=(0,P.lazy)(()=>m(()=>import(`./esm-oGoWacTd.js`),__vite__mapDeps([8,1,2,7,9,10]))),vu=(0,P.lazy)(()=>m(()=>import(`./esm-CX8ST5Fv.js`),__vite__mapDeps([11,1,2,7]))),yu=(0,P.lazy)(()=>m(()=>import(`./dist-COeDLrWj.js`).then(e=>({default:e.HexColorPicker})),__vite__mapDeps([12,1,2]))),bu=(0,P.lazy)(()=>m(()=>import(`./phone-input-BpNLpzg_.js`).then(e=>({default:e.PhoneInput})),__vite__mapDeps([13,14,1,2,3,4,6,7]))),xu={iban:{pattern:`#### #### #### #### #### #### #### ##`,transform:e=>e.replace(/[^a-z0-9]/gi,``).toUpperCase()}};function Su({name:e,field:t,value:n,onChange:r,selectOptions:i,excludeValues:a}){let o=t.hints,s=o.inputType??`text`;if(ti(t))return(0,F.jsxDEV)(Et,{field:t,value:n,onChange:r,offered:i,exclude:a},void 0,!1,{fileName:I,lineNumber:105,columnNumber:7},this);if(o.multiple===!0)return(0,F.jsxDEV)(It,{value:n,onChange:r,renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{type:s,value:e,onChange:e=>t(e.target.value),className:`flex-1`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:I,lineNumber:119,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:115,columnNumber:7},this);let c=typeof n==`string`?n:String(n??``);if(typeof o.mask==`string`){let t=xu[o.mask]??o.mask,n=o.maskStore===`unmasked`;return(0,F.jsxDEV)(un,{id:e,mask:t,value:c,onValueChange:(e,t)=>r(n?t:e)},void 0,!1,{fileName:I,lineNumber:146,columnNumber:7},this)}return(0,F.jsxDEV)(M,{id:e,type:s,value:c,onChange:e=>r(e.target.value),minLength:o.minLength,maxLength:o.maxLength},void 0,!1,{fileName:I,lineNumber:155,columnNumber:5},this)}function Cu({field:e,value:t}){return hr(e,t,t=>(0,F.jsxDEV)(Tu,{field:e,value:t},void 0,!1,{fileName:I,lineNumber:173,columnNumber:41},this),void 0,Ie(e))}function wu(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:t=>(0,F.jsxDEV)(Cu,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:186,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Su,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n,selectOptions:e.selectOptions,excludeValues:e.excludeValues},void 0,!1,{fileName:I,lineNumber:188,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:178,columnNumber:5},this)}function Tu({field:e,value:t}){let n=(0,F.jsxDEV)(be,{field:e,value:t},void 0,!1,{fileName:I,lineNumber:215,columnNumber:17},this),{chipClassName:r,chipStyle:i}=Ie(e);return!oi(e)||!Zn(t)||!r||!i?n:(0,F.jsxDEV)(`span`,{className:r(t),style:i(t),"data-testid":`option-chip`,children:n},void 0,!1,{fileName:I,lineNumber:221,columnNumber:5},this)}function Eu({field:e,value:t}){let{t:n}=a();if(e.hints.multiple===!0){let r=(Array.isArray(t)?t:qt(t)).map(t=>Zr(n,e,t));return(0,F.jsxDEV)(`span`,{className:`truncate`,children:r.length?r.join(`, `):`—`},void 0,!1,{fileName:I,lineNumber:233,columnNumber:12},this)}return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(Zr(n,e,t))},void 0,!1,{fileName:I,lineNumber:235,columnNumber:10},this)}D({kinds:[`text`,`unit`],Page:wu,Inline:Eu,Value:Tu,keys:cr}),D({kinds:[`slug`],voice:`data`,Page:wu,Inline:Eu,Value:Tu,keys:cr});function Du({value:e}){let t=(Array.isArray(e)?e:qt(e)).map(e=>String(e??``).trim()).filter(Boolean);return t.length===0?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:275,columnNumber:34},this):(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 flex-wrap items-baseline`,children:t.map((e,n)=>(0,F.jsxDEV)(`span`,{className:`inline-flex items-baseline`,children:[n>0&&(0,F.jsxDEV)(`span`,{"aria-hidden":!0,className:`px-1.5 text-faint`,children:`›`},void 0,!1,{fileName:I,lineNumber:281,columnNumber:13},this),(0,F.jsxDEV)(`span`,{className:n===t.length-1?`font-semibold`:``,children:e},void 0,!1,{fileName:I,lineNumber:285,columnNumber:11},this)]},`${n}-${e}`,!0,{fileName:I,lineNumber:279,columnNumber:9},this))},void 0,!1,{fileName:I,lineNumber:277,columnNumber:5},this)}function Ou(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:e=>(0,F.jsxDEV)(Du,{value:e},void 0,!1,{fileName:I,lineNumber:302,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(It,{value:e,onChange:t,renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{value:e,onChange:e=>t(e.target.value),className:`flex-1`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:I,lineNumber:310,columnNumber:13},this)},void 0,!1,{fileName:I,lineNumber:306,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:294,columnNumber:5},this)}D({kinds:[`path`],Page:Ou,Inline:({value:e})=>(0,F.jsxDEV)(Du,{value:e},void 0,!1,{fileName:I,lineNumber:331,columnNumber:44},void 0)});function ku({value:e}){let t=String(e??``),{t:n}=a();return Zn(t)?(0,F.jsxDEV)(`button`,{type:`button`,title:n(`actions.copy`),"aria-label":`${n(`actions.copy`)}: ${t}`,className:`max-w-full truncate text-left align-bottom hover:text-primary transition-colors`,onClick:()=>void navigator.clipboard?.writeText(t),children:t},void 0,!1,{fileName:I,lineNumber:351,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:349,columnNumber:28},this)}function Au(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:e=>(0,F.jsxDEV)(ku,{value:e},void 0,!1,{fileName:I,lineNumber:375,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(M,{value:String(e??``),onChange:e=>t(e.target.value)},void 0,!1,{fileName:I,lineNumber:377,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:367,columnNumber:5},this)}D({kinds:[`identifier`],voice:`data`,activate:`value`,Page:Au,Inline:({value:e})=>(0,F.jsxDEV)(`span`,{className:`truncate`,children:String(e??``)},void 0,!1,{fileName:I,lineNumber:390,columnNumber:44},void 0)});function ju({value:e}){let t=String(e??``);return Zn(t)?(0,F.jsxDEV)(`div`,{className:`max-w-full overflow-x-auto`,children:(0,F.jsxDEV)(`pre`,{className:`whitespace-pre text-xs leading-relaxed tracking-[0.14em]`,children:t},void 0,!1,{fileName:I,lineNumber:406,columnNumber:7},this)},void 0,!1,{fileName:I,lineNumber:405,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:403,columnNumber:28},this)}function Mu(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`textarea`,bare:e.bare,view:e=>(0,F.jsxDEV)(ju,{value:e},void 0,!1,{fileName:I,lineNumber:423,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(_i,{value:String(e??``),rows:2,className:`font-mono text-xs tracking-[0.14em]`,onChange:e=>t(e.target.value)},void 0,!1,{fileName:I,lineNumber:425,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:413,columnNumber:5},this)}D({kinds:[`mrz`],voice:`data`,Page:Mu,Inline:({value:e})=>(0,F.jsxDEV)(`span`,{className:`truncate`,children:String(e??``)},void 0,!1,{fileName:I,lineNumber:440,columnNumber:44},void 0)});function Nu(e){let t=e.replace(/\D/g,``);if(t)return(e.trim().startsWith(`+`)?`+`:``)+t}function Pu({value:e}){let t=String(e??``);if(!Zn(t))return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:462,columnNumber:28},this);let n=Nu(t);return n?(0,F.jsxDEV)(`a`,{href:`tel:${n}`,className:`inline-block max-w-full truncate align-bottom text-primary underline`,title:t,children:t},void 0,!1,{fileName:I,lineNumber:466,columnNumber:5},this):(0,F.jsxDEV)(`span`,{className:`truncate`,children:t},void 0,!1,{fileName:I,lineNumber:464,columnNumber:21},this)}function Fu(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-48`,bare:e.bare,view:e=>(0,F.jsxDEV)(Pu,{value:e},void 0,!1,{fileName:I,lineNumber:483,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:485,columnNumber:29},this),children:(0,F.jsxDEV)(bu,{value:String(e),onChange:e=>t(e??``)},void 0,!1,{fileName:I,lineNumber:486,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:485,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:474,columnNumber:5},this)}function Iu({value:e}){return(0,F.jsxDEV)(Pu,{value:e},void 0,!1,{fileName:I,lineNumber:503,columnNumber:10},this)}D({kinds:[`tel`],voice:`data`,Page:Fu,Inline:Iu,activate:`value`});var Lu=/^[^\s@]+@[^\s@]+$/;function Ru(e){let t=e.trim();return Lu.test(t)?t:void 0}function zu({value:e}){let t=String(e??``);if(!Zn(t))return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:536,columnNumber:28},this);let n=Ru(t);return n?(0,F.jsxDEV)(`a`,{href:`mailto:${n}`,className:`inline-block max-w-full truncate align-bottom text-primary underline`,title:t,children:t},void 0,!1,{fileName:I,lineNumber:540,columnNumber:5},this):(0,F.jsxDEV)(`span`,{className:`truncate`,children:t},void 0,!1,{fileName:I,lineNumber:538,columnNumber:21},this)}function Bu({field:e,value:t}){return hr(e,t,e=>(0,F.jsxDEV)(zu,{value:e},void 0,!1,{fileName:I,lineNumber:554,columnNumber:41},this),void 0,Ie(e))}function Vu(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:t=>(0,F.jsxDEV)(Bu,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:567,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Su,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n,selectOptions:e.selectOptions,excludeValues:e.excludeValues},void 0,!1,{fileName:I,lineNumber:572,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:559,columnNumber:5},this)}function Hu({field:e,value:t}){if(e.hints.multiple===!0){let e=Array.isArray(t)?t:qt(t);return e.length?(0,F.jsxDEV)(`span`,{className:`truncate`,children:e.map((e,t)=>(0,F.jsxDEV)(P.Fragment,{children:[t>0?`, `:``,(0,F.jsxDEV)(zu,{value:e},void 0,!1,{fileName:I,lineNumber:594,columnNumber:13},this)]},t,!0,{fileName:I,lineNumber:592,columnNumber:11},this))},void 0,!1,{fileName:I,lineNumber:590,columnNumber:7},this):(0,F.jsxDEV)(`span`,{className:`truncate`,children:`—`},void 0,!1,{fileName:I,lineNumber:588,columnNumber:31},this)}return(0,F.jsxDEV)(zu,{value:t},void 0,!1,{fileName:I,lineNumber:600,columnNumber:10},this)}D({kinds:[`email`],Page:Vu,Inline:Hu,Value:({value:e})=>(0,F.jsxDEV)(zu,{value:e},void 0,!1,{fileName:I,lineNumber:609,columnNumber:42},void 0),keys:cr,activate:`value`});var Uu=e=>/^[a-z][a-z0-9+.-]*:\/\//i.test(e)?e:`https://${e}`;function Wu({value:e}){let t=String(e??``);return t?(0,F.jsxDEV)(`a`,{href:Uu(t),target:`_blank`,rel:`noopener noreferrer`,className:`inline-block max-w-full truncate align-bottom text-primary underline`,title:t,children:t},void 0,!1,{fileName:I,lineNumber:624,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:622,columnNumber:18},this)}function Gu(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:e=>(0,F.jsxDEV)(Wu,{value:e},void 0,!1,{fileName:I,lineNumber:646,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(M,{type:`url`,value:String(e),onChange:e=>t(e.target.value)},void 0,!1,{fileName:I,lineNumber:648,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:638,columnNumber:5},this)}D({kinds:[`link`],Page:Gu,Inline:({value:e})=>(0,F.jsxDEV)(Wu,{value:e},void 0,!1,{fileName:I,lineNumber:657,columnNumber:44},void 0),Value:({value:e})=>(0,F.jsxDEV)(Wu,{value:e},void 0,!1,{fileName:I,lineNumber:660,columnNumber:42},void 0),activate:`value`});function Ku({name:e,field:t,value:n,onChange:r}){return t.hints.multiple===!0?(0,F.jsxDEV)(It,{value:n,onChange:r,display:()=>`•••`,renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{type:`password`,value:e,autoComplete:`new-password`,onChange:e=>t(e.target.value),className:`flex-1`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:I,lineNumber:676,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:671,columnNumber:7},this):(0,F.jsxDEV)(M,{id:e,type:`password`,value:n,autoComplete:`current-password`,onChange:e=>r(e.target.value)},void 0,!1,{fileName:I,lineNumber:694,columnNumber:5},this)}function qu({field:e,value:t}){return e.hints.multiple===!0?(0,F.jsxDEV)(Te,{items:Xe(t,[]),content:()=>`•••`},void 0,!1,{fileName:I,lineNumber:706,columnNumber:12},this):(0,F.jsxDEV)(`span`,{className:`text-muted-foreground text-sm select-none`,children:`•••`},void 0,!1,{fileName:I,lineNumber:708,columnNumber:10},this)}function Ju(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:t=>(0,F.jsxDEV)(qu,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:721,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Ku,{name:`field-${e.field.label}`,field:e.field,value:String(t),onChange:n},void 0,!1,{fileName:I,lineNumber:723,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:713,columnNumber:5},this)}function Yu(){return(0,F.jsxDEV)(`span`,{children:`•••`},void 0,!1,{fileName:I,lineNumber:735,columnNumber:10},this)}D({kinds:[`password`],Page:Ju,Inline:Yu});function Xu(e){let t=e.field.hints.maxLength;return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`textarea`,width:`w-full`,bare:e.bare,view:e=>Zn(e)?(0,F.jsxDEV)(`p`,{className:`text-[15px] text-foreground leading-relaxed whitespace-pre-wrap`,children:String(e)},void 0,!1,{fileName:I,lineNumber:760,columnNumber:16},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:759,columnNumber:34},this),edit:(n,r)=>(0,F.jsxDEV)(_i,{id:`field-${e.field.label}`,value:String(n),maxLength:t,onChange:e=>r(e.target.value)},void 0,!1,{fileName:I,lineNumber:763,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:749,columnNumber:5},this)}function Zu({value:e}){return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(String(e??``))},void 0,!1,{fileName:I,lineNumber:775,columnNumber:10},this)}D({kinds:[`textarea`],layout:`block`,box:`textarea`,Page:Xu,Inline:Zu}),D({kinds:[`smalltext`],Page:Xu,Inline:Zu});function Qu(e){let{t}=a(),n=e.field.hints.maxLength;return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`textarea`,width:`w-full`,bare:e.bare,view:e=>{if(!Zn(e))return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:808,columnNumber:34},this);let n=String(e);return(0,F.jsxDEV)(`p`,{className:`text-[15px] text-foreground leading-relaxed whitespace-pre-wrap`,children:t(n,{defaultValue:n})},void 0,!1,{fileName:I,lineNumber:811,columnNumber:11},this)},edit:(t,r)=>(0,F.jsxDEV)(_i,{id:`field-${e.field.label}`,value:String(t),maxLength:n,onChange:e=>r(e.target.value)},void 0,!1,{fileName:I,lineNumber:815,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:798,columnNumber:5},this)}function $u({value:e}){let{t}=a(),n=String(e??``);return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(t(n,{defaultValue:n}))},void 0,!1,{fileName:I,lineNumber:829,columnNumber:10},this)}D({kinds:[`i18n`],layout:`block`,box:`textarea`,Page:Qu,Inline:$u});function ed({value:e,onChange:t}){let{t:n}=a();return(0,F.jsxDEV)(`div`,{className:`md-editor flex min-h-0 min-w-0 flex-1 flex-col`,children:(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:849,columnNumber:27},this),children:(0,F.jsxDEV)(mu,{value:e,onChange:t,placeholder:n(`form.mdPlaceholder`)},void 0,!1,{fileName:I,lineNumber:850,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:849,columnNumber:7},this)},void 0,!1,{fileName:I,lineNumber:848,columnNumber:5},this)}function td({value:e}){return On(e,e=>(0,F.jsxDEV)(te,{value:String(e)},void 0,!1,{fileName:I,lineNumber:857,columnNumber:31},this))}function nd(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:t=>(0,F.jsxDEV)(`div`,{onPointerEnter:gu,onPointerDown:gu,onFocus:gu,children:(0,F.jsxDEV)(td,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:875,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:874,columnNumber:9},this),edit:(t,n)=>(0,F.jsxDEV)(ed,{name:`field-${e.field.label}`,field:e.field,value:String(t),onChange:n},void 0,!1,{fileName:I,lineNumber:879,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:862,columnNumber:5},this)}function rd({value:e}){return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(pu(String(e??``)))||`—`},void 0,!1,{fileName:I,lineNumber:892,columnNumber:10},this)}D({kinds:[`markdown`],layout:`block`,editor:`modal`,Page:nd,Inline:rd});function id(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:e=>(0,F.jsxDEV)(`pre`,{className:`min-w-0 min-h-32 text-[13px] leading-normal font-mono border border-transparent rounded-lg p-3 overflow-x-auto whitespace-pre-wrap text-foreground`,children:Zn(e)?String(e):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:921,columnNumber:38},this)},void 0,!1,{fileName:I,lineNumber:920,columnNumber:9},this),edit:(t,n)=>(0,F.jsxDEV)(`div`,{"data-color-mode":`dark`,className:`json-editor-wrap min-w-0`,children:(0,F.jsxDEV)(`div`,{className:`rounded-xl overflow-hidden border border-border min-w-0`,children:(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:927,columnNumber:33},this),children:(0,F.jsxDEV)(_u,{value:String(t),language:e.field.hints.language??`text`,onChange:e=>n(e.target.value),padding:12,style:{fontFamily:`ui-monospace, monospace`,fontSize:13,background:`transparent`,minHeight:`8rem`}},void 0,!1,{fileName:I,lineNumber:928,columnNumber:15},this)},void 0,!1,{fileName:I,lineNumber:927,columnNumber:13},this)},void 0,!1,{fileName:I,lineNumber:926,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:925,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:908,columnNumber:5},this)}function ad({value:e}){return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(String(e??``))},void 0,!1,{fileName:I,lineNumber:949,columnNumber:10},this)}D({kinds:[`snippet`],layout:`block`,editor:`modal`,Page:id,Inline:ad});function od(e){return typeof e==`string`?e:e==null?``:JSON.stringify(e,null,2)}function sd({value:e,onChange:t}){let n=!0;if(e.trim())try{JSON.parse(e)}catch{n=!1}return(0,F.jsxDEV)(`div`,{"data-color-mode":`dark`,className:`json-editor-wrap min-w-0`,children:[(0,F.jsxDEV)(`div`,{className:`rounded-xl overflow-hidden border min-w-0 ${n?`border-border`:`border-destructive`}`,children:(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:989,columnNumber:29},this),children:(0,F.jsxDEV)(_u,{value:e,language:`json`,placeholder:`{ }`,onChange:e=>t(e.target.value),padding:12,style:{fontFamily:`ui-monospace, monospace`,fontSize:13,background:`transparent`,minHeight:`8rem`}},void 0,!1,{fileName:I,lineNumber:990,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:989,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:988,columnNumber:7},this),!n&&(0,F.jsxDEV)(`p`,{className:`text-xs text-destructive mt-1 flex items-center gap-1`,children:[(0,F.jsxDEV)(Fn,{name:`lucide:alert-triangle`,size:12,className:`shrink-0`},void 0,!1,{fileName:I,lineNumber:1007,columnNumber:11},this),` JSON`]},void 0,!0,{fileName:I,lineNumber:1006,columnNumber:9},this)]},void 0,!0,{fileName:I,lineNumber:987,columnNumber:5},this)}function cd({value:e}){if(e==null||e===``)return(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`—`},void 0,!1,{fileName:I,lineNumber:1017,columnNumber:45},this);let t;try{t=typeof e==`object`?e:JSON.parse(String(e))}catch{t=void 0}let n=typeof document<`u`&&document.documentElement.classList.contains(`dark`);return typeof t!=`object`||!t?(0,F.jsxDEV)(`pre`,{className:`min-w-0 text-xs bg-card border border-border rounded-lg p-3 overflow-x-auto text-muted-foreground font-mono`,children:String(e)},void 0,!1,{fileName:I,lineNumber:1027,columnNumber:7},this):(0,F.jsxDEV)(`div`,{className:`min-w-0 bg-card border border-border rounded-lg p-3 overflow-x-auto font-mono text-xs`,children:(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:1034,columnNumber:27},this),children:(0,F.jsxDEV)(vu,{value:t,style:{...n?du:fu,"--w-rjv-background-color":`transparent`},displayDataTypes:!1,enableClipboard:!0,collapsed:2},void 0,!1,{fileName:I,lineNumber:1035,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:1034,columnNumber:7},this)},void 0,!1,{fileName:I,lineNumber:1033,columnNumber:5},this)}function ld(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:t=>(0,F.jsxDEV)(cd,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:1058,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(sd,{name:`field-${e.field.label}`,field:e.field,value:od(t),onChange:n},void 0,!1,{fileName:I,lineNumber:1060,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:1049,columnNumber:5},this)}D({kinds:[`json`],layout:`block`,editor:`modal`,Page:ld});function ud(e){let t=String(e);return(0,F.jsxDEV)(F.Fragment,{children:[/^#[0-9a-fA-F]{6}$/.test(t)&&(0,F.jsxDEV)(ht,{icon:{kind:`swatch`,value:t},size:`xs`},void 0,!1,{fileName:I,lineNumber:1080,columnNumber:17},this),(0,F.jsxDEV)(`span`,{className:`font-mono`,children:t},void 0,!1,{fileName:I,lineNumber:1081,columnNumber:7},this)]},void 0,!0,{fileName:I,lineNumber:1079,columnNumber:5},this)}function dd({value:e,onChange:t,onEnter:n}){let{t:r}=a(),i=/^#[0-9a-fA-F]{6}$/.test(e)?e:`#000000`;return(0,F.jsxDEV)(`div`,{className:`flex min-h-9 items-center gap-2 pl-2`,children:[(0,F.jsxDEV)(Di,{children:[(0,F.jsxDEV)(wi,{asChild:!0,children:(0,F.jsxDEV)(`button`,{type:`button`,"aria-label":r(`actions.pickColor`),className:`h-5 w-5 shrink-0 cursor-pointer rounded-full border border-border`,style:{background:i}},void 0,!1,{fileName:I,lineNumber:1108,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:1107,columnNumber:9},this),(0,F.jsxDEV)(Ti,{className:`w-auto p-2`,children:(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`flex h-[200px] w-[200px] items-center justify-center text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:1118,columnNumber:15},this),children:(0,F.jsxDEV)(yu,{color:i,onChange:t},void 0,!1,{fileName:I,lineNumber:1123,columnNumber:13},this)},void 0,!1,{fileName:I,lineNumber:1116,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:1115,columnNumber:9},this)]},void 0,!0,{fileName:I,lineNumber:1106,columnNumber:7},this),(0,F.jsxDEV)(M,{value:e,onChange:e=>t(e.target.value),pattern:`#[0-9a-fA-F]{6}`,maxLength:7,className:`h-auto w-28 border-0 bg-transparent p-0 font-mono text-sm shadow-none focus-visible:ring-0`,placeholder:`#000000`,onKeyDown:n?e=>{e.key===`Enter`&&(e.preventDefault(),n())}:void 0},void 0,!1,{fileName:I,lineNumber:1127,columnNumber:7},this)]},void 0,!0,{fileName:I,lineNumber:1105,columnNumber:5},this)}function fd({value:e,onChange:t,field:n}){return n.hints.multiple===!0?(0,F.jsxDEV)(It,{value:e,onChange:t,validate:e=>/^#[0-9a-fA-F]{6}$/.test(e),display:ud,renderInput:(e,t,n)=>(0,F.jsxDEV)(dd,{value:e,onChange:t,onEnter:n},void 0,!1,{fileName:I,lineNumber:1156,columnNumber:39},this)},void 0,!1,{fileName:I,lineNumber:1151,columnNumber:7},this):(0,F.jsxDEV)(dd,{value:typeof e==`string`?e:``,onChange:t},void 0,!1,{fileName:I,lineNumber:1160,columnNumber:10},this)}function pd({value:e}){return(0,F.jsxDEV)(F.Fragment,{children:ud(e)},void 0,!1,{fileName:I,lineNumber:1165,columnNumber:10},this)}function md({field:e,items:t}){let{t:n}=a(),r=ti(e);return(0,F.jsxDEV)(`div`,{className:`flex flex-wrap gap-2`,children:t.map((t,i)=>{let a=String(t),o=/^#[0-9a-fA-F]{6}$/.test(a),s=r?Zr(n,e,a):``;return(0,F.jsxDEV)(`figure`,{className:`w-24 overflow-hidden rounded-xl border border-border`,title:a,children:[(0,F.jsxDEV)(`div`,{className:o?`h-16 w-full`:`h-16 w-full bg-muted`,style:o?{backgroundColor:a}:void 0},void 0,!1,{fileName:I,lineNumber:1191,columnNumber:13},this),(0,F.jsxDEV)(`figcaption`,{className:`flex flex-col bg-card px-2 py-1 leading-tight`,children:[s&&s!==a&&(0,F.jsxDEV)(`span`,{className:`truncate text-xs`,children:s},void 0,!1,{fileName:I,lineNumber:1196,columnNumber:40},this),(0,F.jsxDEV)(`span`,{className:`truncate font-mono text-xs text-muted-foreground`,children:a},void 0,!1,{fileName:I,lineNumber:1197,columnNumber:15},this)]},void 0,!0,{fileName:I,lineNumber:1195,columnNumber:13},this)]},i,!0,{fileName:I,lineNumber:1189,columnNumber:11},this)})},void 0,!1,{fileName:I,lineNumber:1183,columnNumber:5},this)}function hd({field:e,value:t}){if(e.hints.multiple===!0){let n=Xe(t,[]);return n.length?(0,F.jsxDEV)(md,{field:e,items:n},void 0,!1,{fileName:I,lineNumber:1211,columnNumber:12},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:1210,columnNumber:31},this)}let n=String(t);return!n||!/^#[0-9a-fA-F]{6}$/.test(n)?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:1214,columnNumber:54},this):(0,F.jsxDEV)(`div`,{className:`flex items-center gap-2`,children:[(0,F.jsxDEV)(ht,{icon:{kind:`swatch`,value:n},size:`md`},void 0,!1,{fileName:I,lineNumber:1217,columnNumber:7},this),(0,F.jsxDEV)(`span`,{className:`font-mono text-sm`,children:n},void 0,!1,{fileName:I,lineNumber:1218,columnNumber:7},this)]},void 0,!0,{fileName:I,lineNumber:1216,columnNumber:5},this)}function gd(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-fit`,bare:e.bare,view:t=>(0,F.jsxDEV)(hd,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:1234,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(fd,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:I,lineNumber:1236,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:1225,columnNumber:5},this)}function _d({draft:e,setDraft:t}){let n=typeof e==`string`?e:``,r=/^#[0-9a-fA-F]{6}$/.test(n)?n:`#000000`;return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`flex h-40 items-center justify-center text-sm text-muted-foreground`,children:`…`},void 0,!1,{fileName:I,lineNumber:1259,columnNumber:27},this),children:(0,F.jsxDEV)(yu,{color:r,onChange:t,style:{width:`100%`}},void 0,!1,{fileName:I,lineNumber:1260,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:1259,columnNumber:7},this),(0,F.jsxDEV)(M,{value:n,onChange:e=>t(e.target.value),pattern:`#[0-9a-fA-F]{6}`,maxLength:7,placeholder:`#000000`,className:`font-mono text-sm`},void 0,!1,{fileName:I,lineNumber:1262,columnNumber:7},this)]},void 0,!0,{fileName:I,lineNumber:1258,columnNumber:5},this)}D({kinds:[`color`],Page:gd,Value:pd,Picker:_d});function vd({value:e,onChange:t,field:n}){let{t:r}=a(),i=n.hints.suggestions,o=P.useId(),s=e=>i&&i.length>0?(0,F.jsxDEV)(`datalist`,{id:o,children:i.filter(t=>!e.includes(t)).map(e=>(0,F.jsxDEV)(`option`,{value:e},e,!1,{fileName:I,lineNumber:1288,columnNumber:13},this))},void 0,!1,{fileName:I,lineNumber:1284,columnNumber:7},this):null;if(n.hints.multiple===!0){let n=qt(e);return(0,F.jsxDEV)(It,{value:e,onChange:t,renderInput:(e,t,a)=>(0,F.jsxDEV)(F.Fragment,{children:[s(n),(0,F.jsxDEV)(M,{value:e,list:i?.length?o:void 0,onChange:e=>t(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),a())},placeholder:r(`form.addTag`),className:`flex-1`},void 0,!1,{fileName:I,lineNumber:1302,columnNumber:13},this)]},void 0,!0,{fileName:I,lineNumber:1300,columnNumber:11},this)},void 0,!1,{fileName:I,lineNumber:1296,columnNumber:7},this)}let c=typeof e==`string`?e:String(e??``);return(0,F.jsxDEV)(F.Fragment,{children:[s(c?[c]:[]),(0,F.jsxDEV)(M,{value:c,list:i?.length?o:void 0,onChange:e=>t(e.target.value)},void 0,!1,{fileName:I,lineNumber:1327,columnNumber:7},this)]},void 0,!0,{fileName:I,lineNumber:1325,columnNumber:5},this)}function yd({field:e,value:t}){return(0,F.jsxDEV)(Te,{items:e.hints.multiple===!0?Xe(t,[]):t?[String(t)]:[],content:e=>String(e)},void 0,!1,{fileName:I,lineNumber:1338,columnNumber:10},this)}function bd(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:t=>(0,F.jsxDEV)(yd,{field:e.field,value:t},void 0,!1,{fileName:I,lineNumber:1351,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(vd,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:I,lineNumber:1353,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:1343,columnNumber:5},this)}function xd({field:e,value:t}){if(e.hints.multiple===!0){let e=qt(String(t??``));return(0,F.jsxDEV)(`span`,{className:`truncate`,children:e.length?String(e.length):`—`},void 0,!1,{fileName:I,lineNumber:1367,columnNumber:12},this)}return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(String(t??``))},void 0,!1,{fileName:I,lineNumber:1369,columnNumber:10},this)}D({kinds:[`tag`],voice:`data`,Page:bd,Inline:xd,Value:Tu});function Sd(e){let{t}=a(),n=e.label??(e.field.label?t(e.field.label):void 0);return(0,F.jsxDEV)(O,{field:e.field,value:e.value,error:e.error,mode:e.mode,geom:`title`,bare:e.bare,view:t=>Zn(t)?(0,F.jsxDEV)(`span`,{className:`text-[28px] font-bold text-foreground leading-tight`,...e.bare?{}:{role:`heading`,"aria-level":1},children:String(t)},void 0,!1,{fileName:I,lineNumber:1413,columnNumber:11},this):n?(0,F.jsxDEV)(`span`,{className:`text-[28px] font-bold text-muted-foreground/50 leading-tight`,children:n},void 0,!1,{fileName:I,lineNumber:1420,columnNumber:11},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:I,lineNumber:1422,columnNumber:11},this),edit:(t,n)=>(0,F.jsxDEV)(`input`,{id:`field-${e.field.label}`,value:String(t),onChange:e=>n(e.target.value),style:{fontSize:`28px`,padding:`4px 12px`},className:`w-full rounded-lg border border-border bg-background font-bold text-foreground leading-tight outline-none transition-colors focus-visible:ring-2 focus-visible:ring-ring placeholder:text-faint`,placeholder:`…`},void 0,!1,{fileName:I,lineNumber:1426,columnNumber:9},this)},void 0,!1,{fileName:I,lineNumber:1395,columnNumber:5},this)}function Cd({value:e}){return(0,F.jsxDEV)(`span`,{className:`truncate`,children:br(String(e??``))},void 0,!1,{fileName:I,lineNumber:1440,columnNumber:10},this)}D({kinds:[`title`],voice:`display`,Page:Sd,Inline:Cd});var L=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/localpath.tsx`;function wd(e){let t=e.lastIndexOf(`/`);return t<0?{dirPrefix:``,partial:e}:{dirPrefix:e.slice(0,t),partial:e.slice(t+1)}}function Td(e,t){return`${e.replace(/\/+$/,``)}/${t}`}function Ed(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<0?`~`:t.slice(0,n)||`/`}function Dd({dirsOnly:e,exts:t,initialDir:n,onPick:r}){let{t:i}=a(),[o,s]=(0,P.useState)(n||`~`),[c,l]=(0,P.useState)([]),[u,d]=(0,P.useState)(!1),[f,p]=(0,P.useState)(!1);(0,P.useEffect)(()=>{let n=!1;return p(!1),pn(o,e?void 0:t).then(e=>{n||l(e)}).catch(e=>{n||(console.error(`[localpath] listDir failed:`,e),l([]),p(!0))}),()=>{n=!0}},[o,e,t]);let m=c.filter(t=>(!e||t.isDir)&&(u||!t.name.startsWith(`.`)));return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`flex items-center gap-1.5`,children:[(0,F.jsxDEV)(N,{variant:`ghost`,size:`iconSm`,onClick:()=>s(Ed(o)),"aria-label":i(`localpath.up`),disabled:o===`~`||o===`/`,children:(0,F.jsxDEV)(Hl,{size:15},void 0,!1,{fileName:L,lineNumber:99,columnNumber:11},this)},void 0,!1,{fileName:L,lineNumber:92,columnNumber:9},this),(0,F.jsxDEV)(`span`,{className:`flex-1 truncate font-mono text-xs text-muted-foreground`,title:o,children:o},void 0,!1,{fileName:L,lineNumber:101,columnNumber:9},this),(0,F.jsxDEV)(N,{variant:`ghost`,size:`iconSm`,onClick:()=>d(e=>!e),"aria-label":i(u?`localpath.hideHidden`:`localpath.showHidden`),title:i(u?`localpath.hideHidden`:`localpath.showHidden`),children:u?(0,F.jsxDEV)(Kl,{size:15},void 0,!1,{fileName:L,lineNumber:111,columnNumber:25},this):(0,F.jsxDEV)(Gl,{size:15},void 0,!1,{fileName:L,lineNumber:111,columnNumber:45},this)},void 0,!1,{fileName:L,lineNumber:104,columnNumber:9},this)]},void 0,!0,{fileName:L,lineNumber:91,columnNumber:7},this),(0,F.jsxDEV)(bi,{className:`h-56 -mx-1 px-1`,children:(0,F.jsxDEV)(`div`,{className:`flex flex-col`,children:[f?(0,F.jsxDEV)(`span`,{className:`px-2 py-3 text-xs text-destructive`,children:i(`localpath.listFailed`)},void 0,!1,{fileName:L,lineNumber:118,columnNumber:13},this):m.length===0&&(0,F.jsxDEV)(`span`,{className:`px-2 py-3 text-xs text-muted-foreground`,children:`—`},void 0,!1,{fileName:L,lineNumber:120,columnNumber:37},this),m.map(t=>(0,F.jsxDEV)(`div`,{className:`group flex items-center rounded-md hover:bg-muted`,children:[(0,F.jsxDEV)(`button`,{type:`button`,className:`flex min-w-0 flex-1 items-center gap-2 px-2 py-1.5 text-left text-sm`,onClick:()=>t.isDir?s(Td(o,t.name)):r(Td(o,t.name),!1),children:[t.isDir?(0,F.jsxDEV)(Ct,{size:15,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:L,lineNumber:130,columnNumber:19},this):(0,F.jsxDEV)(ki,{size:15,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:L,lineNumber:132,columnNumber:19},this),(0,F.jsxDEV)(`span`,{className:`truncate`,children:t.name},void 0,!1,{fileName:L,lineNumber:134,columnNumber:17},this),t.isDir&&(0,F.jsxDEV)(Se,{size:14,className:`ml-auto shrink-0 text-muted-foreground opacity-0 group-hover:opacity-100`},void 0,!1,{fileName:L,lineNumber:136,columnNumber:19},this)]},void 0,!0,{fileName:L,lineNumber:124,columnNumber:15},this),e&&t.isDir&&(0,F.jsxDEV)(N,{variant:`ghost`,size:`iconSm`,className:`mr-1`,onClick:()=>r(Td(o,t.name),!0),"aria-label":i(`localpath.selectFolder`),title:i(`localpath.selectFolder`),children:(0,F.jsxDEV)(mi,{size:15},void 0,!1,{fileName:L,lineNumber:152,columnNumber:19},this)},void 0,!1,{fileName:L,lineNumber:144,columnNumber:17},this)]},t.name,!0,{fileName:L,lineNumber:123,columnNumber:13},this))]},void 0,!0,{fileName:L,lineNumber:116,columnNumber:9},this)},void 0,!1,{fileName:L,lineNumber:115,columnNumber:7},this),e&&(0,F.jsxDEV)(N,{variant:`outline`,size:`sm`,onClick:()=>r(o,!0),children:[(0,F.jsxDEV)(mi,{size:14},void 0,!1,{fileName:L,lineNumber:163,columnNumber:11},this),` Choose this directory`]},void 0,!0,{fileName:L,lineNumber:162,columnNumber:9},this)]},void 0,!0,{fileName:L,lineNumber:89,columnNumber:5},this)}function Od({name:e,field:t,value:n,onChange:r}){let{t:i}=a(),o=t.kind===`localDir`,s=t.hints.exts,[c,l]=(0,P.useState)(!1);return(0,F.jsxDEV)(`div`,{className:`flex items-stretch gap-1.5`,children:[(0,F.jsxDEV)(M,{id:e,value:n,onChange:e=>r(e.target.value),placeholder:`~/…`,spellCheck:!1,autoComplete:`off`},void 0,!1,{fileName:L,lineNumber:188,columnNumber:7},this),(0,F.jsxDEV)(Di,{open:c,onOpenChange:l,children:[(0,F.jsxDEV)(wi,{asChild:!0,children:(0,F.jsxDEV)(N,{type:`button`,variant:`outline`,size:`icon`,"aria-label":i(`localpath.browse`),children:(0,F.jsxDEV)(Ct,{size:16},void 0,!1,{fileName:L,lineNumber:199,columnNumber:13},this)},void 0,!1,{fileName:L,lineNumber:198,columnNumber:11},this)},void 0,!1,{fileName:L,lineNumber:197,columnNumber:9},this),(0,F.jsxDEV)(Ti,{align:`end`,className:`w-80 p-3`,children:c&&(0,F.jsxDEV)(Dd,{dirsOnly:o,exts:s,initialDir:wd(n).dirPrefix||`~`,onPick:(e,t)=>{r(t?`${e.replace(/\/+$/,``)}/`:e),t||l(!1)}},void 0,!1,{fileName:L,lineNumber:204,columnNumber:13},this)},void 0,!1,{fileName:L,lineNumber:202,columnNumber:9},this)]},void 0,!0,{fileName:L,lineNumber:196,columnNumber:7},this)]},void 0,!0,{fileName:L,lineNumber:187,columnNumber:5},this)}function kd(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:e=>Zn(e)?(0,F.jsxDEV)(`span`,{className:`font-mono text-sm break-all`,children:String(e)},void 0,!1,{fileName:L,lineNumber:230,columnNumber:35},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:L,lineNumber:230,columnNumber:102},this),edit:(t,n)=>(0,F.jsxDEV)(Od,{name:`field-${e.field.label}`,field:e.field,value:String(t),onChange:n},void 0,!1,{fileName:L,lineNumber:232,columnNumber:9},this)},void 0,!1,{fileName:L,lineNumber:222,columnNumber:5},this)}function Ad({value:e}){return(0,F.jsxDEV)(`span`,{className:`font-mono truncate`,children:br(String(e??``))},void 0,!1,{fileName:L,lineNumber:244,columnNumber:10},this)}function jd({field:e,draft:t,setDraft:n}){let r=typeof t==`string`?t:String(t??``),i=e.kind===`localDir`,a=e.hints.exts;return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[(0,F.jsxDEV)(M,{value:r,onChange:e=>n(e.target.value),placeholder:`~/…`,spellCheck:!1,autoComplete:`off`},void 0,!1,{fileName:L,lineNumber:261,columnNumber:7},this),(0,F.jsxDEV)(Dd,{dirsOnly:i,exts:a,initialDir:wd(r).dirPrefix||`~`,onPick:(e,t)=>n(t?`${e.replace(/\/+$/,``)}/`:e)},void 0,!1,{fileName:L,lineNumber:268,columnNumber:7},this)]},void 0,!0,{fileName:L,lineNumber:260,columnNumber:5},this)}D({kinds:[`localDir`,`localFile`],Page:kd,Inline:Ad,Picker:jd,pickerSize:`large`});function Md(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}var Nd;(function(e){e.event=`event`,e.props=`prop`})(Nd||={});function Pd(){}function Fd(e){var t,n=void 0;return function(){for(var r=[],i=arguments.length;i--;)r[i]=arguments[i];return t&&r.length===t.length&&r.every(function(e,n){return e===t[n]})?n:(t=r,n=e.apply(void 0,r),n)}}function Id(e){return!!(e||``).match(/\d/)}function Ld(e){return e==null}function Rd(e){return typeof e==`number`&&isNaN(e)}function zd(e){return Ld(e)||Rd(e)||typeof e==`number`&&!isFinite(e)}function Bd(e){return e.replace(/[-[\]/{}()*+?.\\^$|]/g,`\\$&`)}function Vd(e){switch(e){case`lakh`:return/(\d+?)(?=(\d\d)+(\d)(?!\d))(\.\d+)?/g;case`wan`:return/(\d)(?=(\d{4})+(?!\d))/g;default:return/(\d)(?=(\d{3})+(?!\d))/g}}function Hd(e,t,n){var r=Vd(n),i=e.search(/[1-9]/);return i=i===-1?e.length:i,e.substring(0,i)+e.substring(i,e.length).replace(r,`$1`+t)}function Ud(e){var t=(0,P.useRef)(e);return t.current=e,(0,P.useRef)(function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];return t.current.apply(t,e)}).current}function Wd(e,t){t===void 0&&(t=!0);var n=e[0]===`-`,r=n&&t;e=e.replace(`-`,``);var i=e.split(`.`);return{beforeDecimal:i[0],afterDecimal:i[1]||``,hasNegation:n,addNegation:r}}function Gd(e){if(!e)return e;var t=e[0]===`-`;t&&(e=e.substring(1,e.length));var n=e.split(`.`),r=n[0].replace(/^0+/,``)||`0`,i=n[1]||``;return(t?`-`:``)+r+(i?`.`+i:``)}function Kd(e,t,n){for(var r=``,i=n?`0`:``,a=0;a<=t-1;a++)r+=e[a]||i;return r}function qd(e,t){return Array(t+1).join(e)}function Jd(e){var t=e+``,n=t[0]===`-`?`-`:``;n&&(t=t.substring(1));var r=t.split(/[eE]/g),i=r[0],a=r[1];if(a=Number(a),!a)return n+i;i=i.replace(`.`,``);var o=1+a,s=i.length;return o<0?i=`0.`+qd(`0`,Math.abs(o))+i:o>=s?i+=qd(`0`,o-s):i=(i.substring(0,o)||`0`)+`.`+i.substring(o),n+i}function Yd(e,t,n){if([``,`-`].indexOf(e)!==-1)return e;var r=(e.indexOf(`.`)!==-1||n)&&t,i=Wd(e),a=i.beforeDecimal,o=i.afterDecimal,s=i.hasNegation,c=parseFloat(`0.`+(o||`0`)),l=(o.length<=t?`0.`+o:c.toFixed(t)).split(`.`),u=a;a&&Number(l[0])&&(u=a.split(``).reverse().reduce(function(e,t,n){return e.length>n?(Number(e[0])+Number(t)).toString()+e.substring(1,e.length):t+e},l[0]));var d=Kd(l[1]||``,t,n),f=s?`-`:``,p=r?`.`:``;return``+f+u+p+d}function Xd(e,t){if(e.value=e.value,e!==null){if(e.createTextRange){var n=e.createTextRange();return n.move(`character`,t),n.select(),!0}return e.selectionStart||e.selectionStart===0?(e.focus(),e.setSelectionRange(t,t),!0):(e.focus(),!1)}}var Zd=Fd(function(e,t){for(var n=0,r=0,i=e.length,a=t.length;e[n]===t[n]&&n<i;)n++;for(;e[i-1-r]===t[a-1-r]&&a-r>n&&i-r>n;)r++;return{from:{start:n,end:i-r},to:{start:n,end:a-r}}}),Qd=function(e,t){var n=Math.min(e.selectionStart,t);return{from:{start:n,end:e.selectionEnd},to:{start:n,end:t}}};function $d(e,t,n){return Math.min(Math.max(e,t),n)}function ef(e){return Math.max(e.selectionStart,e.selectionEnd)}function tf(){return typeof navigator<`u`&&!(navigator.platform&&/iPhone|iPod/.test(navigator.platform))}function nf(e){return{from:{start:0,end:0},to:{start:0,end:e.length},lastValue:``}}function rf(e){var t=e.currentValue,n=e.formattedValue,r=e.currentValueIndex,i=e.formattedValueIndex;return t[r]===n[i]}function af(e,t,n,r,i,a,o){o===void 0&&(o=rf);var s=i.findIndex(function(e){return e}),c=e.slice(0,s);!t&&!n.startsWith(c)&&(t=c,n=c+n,r+=c.length);for(var l=n.length,u=e.length,d={},f=Array(l),p=0;p<l;p++){f[p]=-1;for(var m=0,h=u;m<h;m++)if(o({currentValue:n,lastValue:t,formattedValue:e,currentValueIndex:p,formattedValueIndex:m})&&d[m]!==!0){f[p]=m,d[m]=!0;break}}for(var g=r;g<l&&(f[g]===-1||!a(n[g]));)g++;var _=g===l||f[g]===-1?u:f[g];for(g=r-1;g>0&&f[g]===-1;)g--;var v=g===-1||f[g]===-1?0:f[g]+1;return v>_?_:r-v<_-r?v:_}function of(e,t,n,r){var i=e.length;if(t=$d(t,0,i),r===`left`){for(;t>=0&&!n[t];)t--;t===-1&&(t=n.indexOf(!0))}else{for(;t<=i&&!n[t];)t++;t>i&&(t=n.lastIndexOf(!0))}return t===-1&&(t=i),t}function sf(e){for(var t=Array.from({length:e.length+1}).map(function(){return!0}),n=0,r=t.length;n<r;n++)t[n]=!!(Id(e[n])||Id(e[n-1]));return t}function cf(e,t,n,r,i,a){a===void 0&&(a=Pd);var o=Ud(function(e,t){var n,a;return zd(e)?(a=``,n=``):typeof e==`number`||t?(a=typeof e==`number`?Jd(e):e,n=r(a)):(a=i(e,void 0),n=r(a)),{formattedValue:n,numAsString:a}}),s=(0,P.useState)(function(){return o(Ld(e)?t:e,n)}),c=s[0],l=s[1],u=Ud(function(e,t){e.formattedValue!==c.formattedValue&&l({formattedValue:e.formattedValue,numAsString:e.value}),a(e,t)}),d=e,f=n;Ld(e)&&(d=c.numAsString,f=!0);var p=o(d,f);return(0,P.useMemo)(function(){l(p)},[p.formattedValue]),(0,P.useEffect)(function(){if(!Ld(t)&&Ld(e)&&c.formattedValue!==``){var n=parseFloat(c.numAsString);u({formattedValue:c.formattedValue,value:c.numAsString,floatValue:isNaN(n)?void 0:n},{event:void 0,source:Nd.props})}},[]),[c,u]}function lf(e){return e.replace(/[^0-9]/g,``)}function uf(e){return e}function df(e){var t=e.type;t===void 0&&(t=`text`);var n=e.displayType;n===void 0&&(n=`input`);var r=e.customInput,i=e.renderText,a=e.getInputRef,o=e.format;o===void 0&&(o=uf);var s=e.removeFormatting;s===void 0&&(s=lf);var c=e.defaultValue,l=e.valueIsNumericString,u=e.onValueChange,d=e.isAllowed,f=e.onChange;f===void 0&&(f=Pd);var p=e.onKeyDown;p===void 0&&(p=Pd);var m=e.onMouseUp;m===void 0&&(m=Pd);var h=e.onFocus;h===void 0&&(h=Pd);var g=e.onBlur;g===void 0&&(g=Pd);var _=e.value,v=e.getCaretBoundary;v===void 0&&(v=sf);var y=e.isValidInputCharacter;y===void 0&&(y=Id);var b=e.isCharacterSame,x=Md(e,[`type`,`displayType`,`customInput`,`renderText`,`getInputRef`,`format`,`removeFormatting`,`defaultValue`,`valueIsNumericString`,`onValueChange`,`isAllowed`,`onChange`,`onKeyDown`,`onMouseUp`,`onFocus`,`onBlur`,`value`,`getCaretBoundary`,`isValidInputCharacter`,`isCharacterSame`]),S=cf(_,c,!!l,o,s,u),C=S[0],w=C.formattedValue,T=C.numAsString,E=S[1],ee=(0,P.useRef)(),te=(0,P.useRef)({formattedValue:w,numAsString:T}),ne=function(e,t){te.current={formattedValue:e.formattedValue,numAsString:e.value},E(e,t)},D=(0,P.useState)(!1),re=D[0],ie=D[1],ae=(0,P.useRef)(null),oe=(0,P.useRef)({setCaretTimeout:null,focusTimeout:null});(0,P.useEffect)(function(){return ie(!0),function(){clearTimeout(oe.current.setCaretTimeout),clearTimeout(oe.current.focusTimeout)}},[]);var se=o,ce=function(e,t){var n=parseFloat(t);return{formattedValue:e,value:t,floatValue:isNaN(n)?void 0:n}},le=function(e,t,n){e.selectionStart===0&&e.selectionEnd===e.value.length||(Xd(e,t),oe.current.setCaretTimeout=setTimeout(function(){e.value===n&&e.selectionStart!==t&&Xd(e,t)},0))},ue=function(e,t,n){return of(e,t,v(e),n)},de=function(e,t,n){var r=v(t),i=af(t,w,e,n,r,y,b);return i=of(t,i,r),i},fe=function(e){var t=e.formattedValue;t===void 0&&(t=``);var n=e.input,r=e.source,i=e.event,a=e.numAsString,o;if(n){var s=e.inputValue||n.value,c=ef(n);n.value=t,o=de(s,t,c),o!==void 0&&le(n,o,t)}t!==w&&ne(ce(t,a),{event:i,source:r})};(0,P.useEffect)(function(){var e=te.current,t=e.formattedValue,n=e.numAsString;(w!==t||T!==n)&&ne(ce(w,T),{event:void 0,source:Nd.props})},[w,T]);var pe=ae.current?ef(ae.current):void 0;(typeof window<`u`?P.useLayoutEffect:P.useEffect)(function(){var e=ae.current;if(w!==te.current.formattedValue&&e){var t=de(te.current.formattedValue,w,pe);e.value=w,le(e,t,w)}},[w]);var me=function(e,t,n){var r=t.target,i=ee.current?Qd(ee.current,r.selectionEnd):Zd(w,e),a=Object.assign(Object.assign({},i),{lastValue:w}),o=s(e,a),c=se(o);if(o=s(c,void 0),d&&!d(ce(c,o))){var l=t.target,u=de(e,w,ef(l));return l.value=w,le(l,u,w),!1}return fe({formattedValue:c,numAsString:o,inputValue:e,event:t,source:n,input:t.target}),!0},he=function(e,t){t===void 0&&(t=0),ee.current={selectionStart:e.selectionStart,selectionEnd:e.selectionEnd+t}},ge=function(e){var t=e.target.value;me(t,e,Nd.event)&&f(e),ee.current=void 0},_e=function(e){var t=e.target,n=e.key,r=t.selectionStart,i=t.selectionEnd,a=t.value;a===void 0&&(a=``);var o;n===`ArrowLeft`||n===`Backspace`?o=Math.max(r-1,0):n===`ArrowRight`?o=Math.min(r+1,a.length):n===`Delete`&&(o=r);var s=0;n===`Delete`&&r===i&&(s=1);var c=n===`ArrowLeft`||n===`ArrowRight`;if(o===void 0||r!==i&&!c){p(e),he(t,s);return}var l=o;c?(l=ue(a,o,n===`ArrowLeft`?`left`:`right`),l!==o&&e.preventDefault()):n===`Delete`&&!y(a[o])?l=ue(a,o,`right`):n===`Backspace`&&!y(a[o])&&(l=ue(a,o,`left`)),l!==o&&le(t,l,a),p(e),he(t,s)},ve=function(e){var t=e.target,n=function(){var e=t.selectionStart,n=t.selectionEnd,r=t.value;if(r===void 0&&(r=``),e===n){var i=ue(r,e);i!==e&&le(t,i,r)}};n(),requestAnimationFrame(function(){n()}),m(e),he(t)},ye=function(e){e.persist&&e.persist();var t=e.target,n=e.currentTarget;ae.current=t,oe.current.focusTimeout=setTimeout(function(){var r=t.selectionStart,i=t.selectionEnd,a=t.value;a===void 0&&(a=``);var o=ue(a,r);o!==r&&!(r===0&&i===a.length)&&le(t,o,a),h(Object.assign(Object.assign({},e),{currentTarget:n}))},0)},be=function(e){ae.current=null,clearTimeout(oe.current.focusTimeout),clearTimeout(oe.current.setCaretTimeout),g(e)},xe=re&&tf()?`numeric`:void 0,Se=Object.assign({inputMode:xe},x,{type:t,value:w,onChange:ge,onKeyDown:_e,onMouseUp:ve,onFocus:ye,onBlur:be});if(n===`text`)return i?P.createElement(P.Fragment,null,i(w,x)||null):P.createElement(`span`,Object.assign({},x,{ref:a}),w);if(r){var Ce=r;return P.createElement(Ce,Object.assign({},Se,{ref:a}))}return P.createElement(`input`,Object.assign({},Se,{ref:a}))}function ff(e,t){var n=t.decimalScale,r=t.fixedDecimalScale,i=t.prefix;i===void 0&&(i=``);var a=t.suffix;a===void 0&&(a=``);var o=t.allowNegative,s=t.thousandsGroupStyle;if(s===void 0&&(s=`thousand`),e===``||e===`-`)return e;var c=pf(t),l=c.thousandSeparator,u=c.decimalSeparator,d=n!==0&&e.indexOf(`.`)!==-1||n&&r,f=Wd(e,o),p=f.beforeDecimal,m=f.afterDecimal,h=f.addNegation;return n!==void 0&&(m=Kd(m,n,!!r)),l&&(p=Hd(p,l,s)),i&&(p=i+p),a&&(m+=a),h&&(p=`-`+p),e=p+(d&&u||``)+m,e}function pf(e){var t=e.decimalSeparator;t===void 0&&(t=`.`);var n=e.thousandSeparator,r=e.allowedDecimalSeparators;return n===!0&&(n=`,`),r||=[t,`.`],{decimalSeparator:t,thousandSeparator:n,allowedDecimalSeparators:r}}function mf(e,t){e===void 0&&(e=``);var n=RegExp(`(-)`),r=RegExp(`(-)(.)*(-)`),i=n.test(e),a=r.test(e);return e=e.replace(/-/g,``),i&&!a&&t&&(e=`-`+e),e}function hf(e,t){return RegExp(`(^-)|[0-9]|`+Bd(e),t?`g`:void 0)}function gf(e,t,n){return e===``||!t?.match(/\d/)&&!n?.match(/\d/)&&typeof e==`string`&&!isNaN(Number(e))}function _f(e,t,n){var r;t===void 0&&(t=nf(e));var i=n.allowNegative,a=n.prefix;a===void 0&&(a=``);var o=n.suffix;o===void 0&&(o=``);var s=n.decimalScale,c=t.from,l=t.to,u=l.start,d=l.end,f=pf(n),p=f.allowedDecimalSeparators,m=f.decimalSeparator,h=e[d]===m;if(Id(e)&&(e===a||e===o)&&t.lastValue===``)return e;if(d-u===1&&p.indexOf(e[u])!==-1){var g=s===0?``:m;e=e.substring(0,u)+g+e.substring(u+1,e.length)}var _=function(e,t,n){var r=!1,i=!1;a.startsWith(`-`)?r=!1:e.startsWith(`--`)?(r=!1,i=!0):o.startsWith(`-`)&&e.length===o.length?r=!1:e[0]===`-`&&(r=!0);var s=+!!r;return i&&(s=2),s&&(e=e.substring(s),t-=s,n-=s),{value:e,start:t,end:n,hasNegation:r}},v=_(e,u,d),y=v.hasNegation;r=v,e=r.value,u=r.start,d=r.end;var b=_(t.lastValue,c.start,c.end),x=b.start,S=b.end,C=b.value,w=e.substring(u,d);e.length&&C.length&&(x>C.length-o.length||S<a.length)&&!(w&&o.startsWith(w))&&(e=C);var T=0;e.startsWith(a)?T+=a.length:u<a.length&&(T=u),e=e.substring(T),d-=T;var E=e.length,ee=e.length-o.length;e.endsWith(o)?E=ee:(d>ee||d>e.length-o.length)&&(E=d),e=e.substring(0,E),e=mf(y?`-`+e:e,i),e=(e.match(hf(m,!0))||[]).join(``);var te=e.indexOf(m);e=e.replace(new RegExp(Bd(m),`g`),function(e,t){return t===te?`.`:``});var ne=Wd(e,i),D=ne.beforeDecimal,re=ne.afterDecimal,ie=ne.addNegation;return l.end-l.start<c.end-c.start&&D===``&&h&&!parseFloat(re)&&(e=ie?`-`:``),e}function vf(e,t){var n=t.prefix;n===void 0&&(n=``);var r=t.suffix;r===void 0&&(r=``);var i=Array.from({length:e.length+1}).map(function(){return!0}),a=e[0]===`-`;i.fill(!1,0,Math.min(n.length+ +!!a,e.length));var o=e.length;return i.fill(!1,o-r.length+1,o+1),i}function yf(e){var t=pf(e),n=t.thousandSeparator,r=t.decimalSeparator,i=e.prefix;i===void 0&&(i=``);var a=e.allowNegative;if(a===void 0&&(a=!0),n===r)throw Error(`
|
|
15
|
+
Decimal separator can't be same as thousand separator.
|
|
16
|
+
thousandSeparator: `+n+` (thousandSeparator = {true} is same as thousandSeparator = ",")
|
|
17
|
+
decimalSeparator: `+r+` (default value for decimalSeparator is .)
|
|
18
|
+
`);return i.startsWith(`-`)&&a&&(console.error(`
|
|
19
|
+
Prefix can't start with '-' when allowNegative is true.
|
|
20
|
+
prefix: `+i+`
|
|
21
|
+
allowNegative: `+a+`
|
|
22
|
+
`),a=!1),Object.assign(Object.assign({},e),{allowNegative:a})}function bf(e){e=yf(e),e.decimalSeparator,e.allowedDecimalSeparators,e.thousandsGroupStyle;var t=e.suffix,n=e.allowNegative,r=e.allowLeadingZeros,i=e.onKeyDown;i===void 0&&(i=Pd);var a=e.onBlur;a===void 0&&(a=Pd);var o=e.thousandSeparator,s=e.decimalScale,c=e.fixedDecimalScale,l=e.prefix;l===void 0&&(l=``);var u=e.defaultValue,d=e.value,f=e.valueIsNumericString,p=e.onValueChange,m=Md(e,[`decimalSeparator`,`allowedDecimalSeparators`,`thousandsGroupStyle`,`suffix`,`allowNegative`,`allowLeadingZeros`,`onKeyDown`,`onBlur`,`thousandSeparator`,`decimalScale`,`fixedDecimalScale`,`prefix`,`defaultValue`,`value`,`valueIsNumericString`,`onValueChange`]),h=pf(e),g=h.decimalSeparator,_=h.allowedDecimalSeparators,v=function(t){return ff(t,e)},y=function(t,n){return _f(t,n,e)},b=Ld(d)?u:d,x=f??gf(b,l,t);Ld(d)?Ld(u)||(x||=typeof u==`number`):x||=typeof d==`number`;var S=function(e){return zd(e)?e:(typeof e==`number`&&(e=Jd(e)),x&&typeof s==`number`?Yd(e,s,!!c):e)},C=cf(S(d),S(u),!!x,v,y,p),w=C[0],T=w.numAsString,E=w.formattedValue,ee=C[1];return Object.assign(Object.assign({},m),{value:E,valueIsNumericString:!1,isValidInputCharacter:function(e){return e===g||Id(e)},isCharacterSame:function(e){var t=e.currentValue,n=e.lastValue,r=e.formattedValue,i=e.currentValueIndex,a=e.formattedValueIndex,o=t[i],u=r[a],f=Zd(n,t).to,p=function(e){return y(e).indexOf(`.`)+l.length};return d===0&&c&&s&&t[f.start]===g&&p(t)<i&&p(r)>a?!1:i>=f.start&&i<f.end&&_&&_.includes(o)&&u===g?!0:o===u},onValueChange:ee,format:v,removeFormatting:y,getCaretBoundary:function(t){return vf(t,e)},onKeyDown:function(e){var t=e.target,r=e.key,a=t.selectionStart,u=t.selectionEnd,d=t.value;if(d===void 0&&(d=``),(r===`Backspace`||r===`Delete`)&&u<l.length&&d!==`-`){e.preventDefault();return}if(a!==u){i(e);return}r===`Backspace`&&d[0]===`-`&&a===l.length+1&&n&&Xd(t,1),s&&c&&(r===`Backspace`&&d[a-1]===g?(Xd(t,a-1),e.preventDefault()):r===`Delete`&&d[a]===g&&e.preventDefault()),_?.includes(r)&&d[a]===g&&Xd(t,a+1);var f=o===!0?`,`:o;r===`Backspace`&&d[a-1]===f&&Xd(t,a-1),r===`Delete`&&d[a]===f&&Xd(t,a+1),i(e)},onBlur:function(t){var n=T;n.match(/\d/g)||(n=``),r||(n=Gd(n)),c&&s&&(n=Yd(n,s,c)),n!==T&&ee({formattedValue:ff(n,e),value:n,floatValue:parseFloat(n)},{event:t,source:Nd.event}),a(t)}})}function xf(e){var t=bf(e);return P.createElement(df,Object.assign({},t))}var R=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/number.tsx`;function Sf(e){return(0,F.jsxDEV)(`span`,{className:`font-mono`,children:String(e)},void 0,!1,{fileName:R,lineNumber:39,columnNumber:10},this)}function Cf({name:e,field:t,value:n,onChange:r}){let i=t.hints;return t.hints.multiple===!0?(0,F.jsxDEV)(It,{value:n,onChange:r,validate:e=>!isNaN(Number(e))&&e!==``,display:Sf,renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{type:`number`,value:e,onChange:e=>t(e.target.value),placeholder:`0`,className:`flex-1`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:R,lineNumber:52,columnNumber:11},this)},void 0,!1,{fileName:R,lineNumber:46,columnNumber:7},this):(0,F.jsxDEV)(xf,{customInput:M,id:e,value:n===``||n==null?``:String(n),thousandSeparator:!0,decimalScale:t.column===`integer`?0:void 0,min:i.min,max:i.max,step:i.step,onValueChange:e=>r(e.floatValue??``),placeholder:`0`},void 0,!1,{fileName:R,lineNumber:70,columnNumber:5},this)}function wf({field:e,value:t}){return(0,F.jsxDEV)(`span`,{className:`font-mono`,children:Ue(t,e)},void 0,!1,{fileName:R,lineNumber:93,columnNumber:10},this)}function Tf({field:e,value:t}){return e.hints.multiple===!0?(0,F.jsxDEV)(Te,{items:Xe(t,[]),content:Sf},void 0,!1,{fileName:R,lineNumber:99,columnNumber:12},this):On(t,t=>(0,F.jsxDEV)(`span`,{children:Ue(t,e)},void 0,!1,{fileName:R,lineNumber:101,columnNumber:31},this))}function Ef(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-32`,bare:e.bare,view:t=>(0,F.jsxDEV)(Tf,{field:e.field,value:t},void 0,!1,{fileName:R,lineNumber:115,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Cf,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:R,lineNumber:117,columnNumber:9},this)},void 0,!1,{fileName:R,lineNumber:106,columnNumber:5},this)}function Df({field:e,value:t}){return t==null||t===``?null:(0,F.jsxDEV)(`span`,{className:`truncate font-mono tabular-nums`,children:Ue(t,e)},void 0,!1,{fileName:R,lineNumber:127,columnNumber:10},this)}D({kinds:[`number`],Page:Ef,Inline:Df,Value:wf});var Of=e=>Array.from({length:e},(e,t)=>(0,F.jsxDEV)(Le,{className:`size-5 data-[state=empty]:text-border`,style:{color:gt(`yellow`)}},t,!1,{fileName:R,lineNumber:140,columnNumber:5},void 0));function kf({value:e,onChange:t,field:n}){let r=Number(n.hints.max??5),i=e?Number(e):0;return(0,F.jsxDEV)(`div`,{className:`flex items-center min-h-9${t?``:` pointer-events-none`}`,children:(0,F.jsxDEV)(xe,{value:i,max:r,clearable:!0,readOnly:!t,activationMode:`manual`,onValueChange:e=>t?.(e===0?``:e),"aria-label":n.label,children:Of(r)},void 0,!1,{fileName:R,lineNumber:161,columnNumber:7},this)},void 0,!1,{fileName:R,lineNumber:160,columnNumber:5},this)}function Af({field:e,value:t}){return(0,F.jsxDEV)(kf,{field:e,value:t},void 0,!1,{fileName:R,lineNumber:182,columnNumber:10},this)}function jf({field:e,draft:t,save:n}){return(0,F.jsxDEV)(kf,{field:e,value:t,onChange:e=>n(e)},void 0,!1,{fileName:R,lineNumber:191,columnNumber:10},this)}function Mf(e){let t=et();return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-fit`,bare:e.bare,view:(n,r)=>r&&t?(0,F.jsxDEV)(kf,{field:e.field,value:n,onChange:e=>void r(e)},void 0,!1,{fileName:R,lineNumber:216,columnNumber:11},this):(0,F.jsxDEV)(kf,{field:e.field,value:n},void 0,!1,{fileName:R,lineNumber:218,columnNumber:11},this),edit:(t,n)=>(0,F.jsxDEV)(kf,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:R,lineNumber:221,columnNumber:30},this)},void 0,!1,{fileName:R,lineNumber:205,columnNumber:5},this)}function Nf({value:e}){let t=Number(e);return(0,F.jsxDEV)(`span`,{className:`inline-flex items-center gap-0.5 truncate`,children:Number.isNaN(t)||!t?`—`:(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(`span`,{style:{color:gt(`yellow`)},className:`inline-flex`,children:(0,F.jsxDEV)(Fn,{name:`lucide:star`,size:12,className:`fill-current`},void 0,!1,{fileName:R,lineNumber:237,columnNumber:13},this)},void 0,!1,{fileName:R,lineNumber:236,columnNumber:11},this),t]},void 0,!0,{fileName:R,lineNumber:233,columnNumber:9},this)},void 0,!1,{fileName:R,lineNumber:229,columnNumber:5},this)}D({kinds:[`rating`],Page:Mf,Inline:Nf,Value:Af,Picker:jf,pickerCommits:!0,editor:`inplace`});function Pf({value:e,onChange:t,field:n}){let{t:r}=a(),i=Number(n.hints.step??60),o=e?Number(e):0,s=Math.floor(o/86400),c=Math.floor(o%86400/3600),l=Math.floor(o%3600/60),u=o%60,d=i<60;function f(e,n,r,i){let a=Math.max(0,e*86400+n*3600+r*60+i);t(a>0?a:``)}let p=({val:e,unit:t,...n})=>(0,F.jsxDEV)(Si,{className:`w-[5.25rem]`,children:[(0,F.jsxDEV)(xi,{type:`number`,value:e||``,min:0,placeholder:`0`,...n},void 0,!1,{fileName:R,lineNumber:277,columnNumber:7},this),(0,F.jsxDEV)(yi,{align:`inline-end`,children:(0,F.jsxDEV)(Ci,{children:t},void 0,!1,{fileName:R,lineNumber:279,columnNumber:9},this)},void 0,!1,{fileName:R,lineNumber:278,columnNumber:7},this)]},void 0,!0,{fileName:R,lineNumber:276,columnNumber:5},this);return(0,F.jsxDEV)(`div`,{className:`flex items-center gap-2 flex-wrap ${Ce}`,children:[(0,F.jsxDEV)(p,{val:s,unit:r(`form.days`),onChange:e=>f(Number(e.target.value)||0,c,l,u)},void 0,!1,{fileName:R,lineNumber:285,columnNumber:7},this),(0,F.jsxDEV)(p,{val:c,unit:r(`form.hours`),max:23,onChange:e=>f(s,Number(e.target.value)||0,l,u)},void 0,!1,{fileName:R,lineNumber:286,columnNumber:7},this),(0,F.jsxDEV)(p,{val:l,unit:r(`form.minutes`),max:59,step:d?1:Math.max(1,Math.floor(i/60)),onChange:e=>f(s,c,Number(e.target.value)||0,u)},void 0,!1,{fileName:R,lineNumber:287,columnNumber:7},this),d&&(0,F.jsxDEV)(p,{val:u,unit:r(`form.seconds`),max:59,step:i,onChange:e=>f(s,c,l,Number(e.target.value)||0)},void 0,!1,{fileName:R,lineNumber:295,columnNumber:9},this)]},void 0,!0,{fileName:R,lineNumber:284,columnNumber:5},this)}function Ff({value:e}){let{t}=a(),n=Number(e);return!n||Number.isNaN(n)?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:R,lineNumber:310,columnNumber:43},this):(0,F.jsxDEV)(`span`,{className:`text-sm`,children:dt(n,t)},void 0,!1,{fileName:R,lineNumber:311,columnNumber:10},this)}function If(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-fit`,bare:e.bare,view:t=>(0,F.jsxDEV)(Ff,{field:e.field,value:t},void 0,!1,{fileName:R,lineNumber:325,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Pf,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:R,lineNumber:327,columnNumber:9},this)},void 0,!1,{fileName:R,lineNumber:316,columnNumber:5},this)}function Lf({value:e}){let{t}=a(),n=Number(e);return!n||Number.isNaN(n)?(0,F.jsxDEV)(`span`,{children:`—`},void 0,!1,{fileName:R,lineNumber:336,columnNumber:43},this):(0,F.jsxDEV)(`span`,{className:`truncate`,children:dt(n,t)},void 0,!1,{fileName:R,lineNumber:337,columnNumber:10},this)}D({kinds:[`duration`],Page:If,Inline:Lf});var z=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/datetime.tsx`;function Rf(e,t){return e.granularity??t}function zf(e,t=`minute`){let n=String(e??``);return t===`second`?n.length>19?n.slice(0,19):n:t===`hour`?n.length>13?n.slice(0,13):n:n.length>16?n.slice(0,16):n}function Bf(e,t){return function(n){return(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(Fn,{name:e,size:13,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:z,lineNumber:86,columnNumber:9},this),(0,F.jsxDEV)(`span`,{children:t?t(String(n)):String(n)},void 0,!1,{fileName:z,lineNumber:87,columnNumber:9},this)]},void 0,!0,{fileName:z,lineNumber:85,columnNumber:7},this)}}function Vf({value:e,format:t,icon:n}){return(0,F.jsxDEV)(Te,{items:Xe(e,[]),content:Bf(n,t)},void 0,!1,{fileName:z,lineNumber:96,columnNumber:10},this)}function Hf({value:e}){let{i18n:t}=a();return(0,F.jsxDEV)(F.Fragment,{children:Bf(`lucide:calendar`,e=>ot(e,t.language)||e)(e)},void 0,!1,{fileName:z,lineNumber:107,columnNumber:10},this)}function Uf({value:e}){let{i18n:t}=a();return(0,F.jsxDEV)(F.Fragment,{children:Bf(`lucide:calendar-clock`,e=>At(e,t.language)||e)(e)},void 0,!1,{fileName:z,lineNumber:112,columnNumber:10},this)}function Wf({field:e,value:t}){let{i18n:n}=a();return e.hints.multiple===!0?(0,F.jsxDEV)(Vf,{value:t,icon:`lucide:calendar`,format:e=>ot(e,n.language)||e},void 0,!1,{fileName:z,lineNumber:120,columnNumber:12},this):On(t,t=>{let r=Rf(e.hints,`day`);return(0,F.jsxDEV)(`span`,{className:`whitespace-nowrap`,children:r===`month`||r===`year`?String(t):ot(String(t),n.language)||String(t)},void 0,!1,{fileName:z,lineNumber:127,columnNumber:7},this)})}function Gf({name:e,field:t,value:n,onChange:r}){let i=Rf(t.hints,`day`),a=i===`month`?`month`:i===`year`?`number`:`date`;if(t.hints.multiple===!0)return(0,F.jsxDEV)(It,{value:n,onChange:r,display:Bf(`lucide:calendar`),renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{type:a,value:e,onChange:e=>t(e.target.value),className:`flex-1`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:z,lineNumber:144,columnNumber:11},this)},void 0,!1,{fileName:z,lineNumber:139,columnNumber:7},this);let o=typeof n==`string`?n:String(n??``);return i===`year`?(0,F.jsxDEV)(b,{value:o,onChange:r},void 0,!1,{fileName:z,lineNumber:165,columnNumber:28},this):i===`month`?(0,F.jsxDEV)(Lt,{value:o,onChange:r},void 0,!1,{fileName:z,lineNumber:166,columnNumber:29},this):(0,F.jsxDEV)(Kt,{value:o,onChange:r},void 0,!1,{fileName:z,lineNumber:167,columnNumber:10},this)}function Kf(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-40`,bare:e.bare,view:t=>(0,F.jsxDEV)(Wf,{field:e.field,value:t},void 0,!1,{fileName:z,lineNumber:181,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Gf,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:z,lineNumber:183,columnNumber:9},this)},void 0,!1,{fileName:z,lineNumber:172,columnNumber:5},this)}function qf(e,t,n){if(e==null||e===``)return[];let r=Rf(t.hints,`day`),i=String(e);return[{value:i,rawValue:e,label:r===`year`||r===`month`?i:ot(i,n.locale)||i}]}function Jf({field:e,draft:t,save:n}){let r=Rf(e.hints,`day`),i=typeof t==`string`?t:String(t??``);if(r===`year`)return(0,F.jsxDEV)(at,{value:i,onChange:e=>n(e)},void 0,!1,{fileName:z,lineNumber:212,columnNumber:28},this);if(r===`month`)return(0,F.jsxDEV)(kt,{value:i,onChange:e=>n(e)},void 0,!1,{fileName:z,lineNumber:213,columnNumber:29},this);let a=Rt(i);return(0,F.jsxDEV)(qr,{mode:`single`,selected:a,captionLayout:`dropdown`,defaultMonth:a,className:`w-full`,onSelect:e=>n(e?Pt(e):``)},void 0,!1,{fileName:z,lineNumber:216,columnNumber:5},this)}function Yf({field:e,value:t}){let{i18n:n}=a(),r=Rf(e.hints,`day`),i=String(t??``);return i?(0,F.jsxDEV)(`span`,{className:`truncate whitespace-nowrap`,children:r===`month`||r===`year`?i:ot(i,n.language)||i},void 0,!1,{fileName:z,lineNumber:241,columnNumber:5},this):null}D({kinds:[`date`],Page:Kf,Inline:Yf,Value:Hf,Picker:Jf,pickerCommits:!0,keys:qf});var Xf={hour:/^([01]\d|2[0-3])$/,minute:/^([01]\d|2[0-3]):[0-5]\d$/,second:/^([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/};function Zf({field:e,value:t}){return e.hints.multiple!==!0&&(t==null||t===``)?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:z,lineNumber:268,columnNumber:83},this):e.hints.multiple===!0?(0,F.jsxDEV)(Vf,{value:t,icon:`lucide:clock`},void 0,!1,{fileName:z,lineNumber:270,columnNumber:5},this):(0,F.jsxDEV)(`span`,{className:`font-mono text-sm`,children:String(t)},void 0,!1,{fileName:z,lineNumber:272,columnNumber:5},this)}function Qf({name:e,field:t,value:n,onChange:r}){let i=Rf(t.hints,`second`),a=i===`second`?1:i===`minute`?60:3600;if(t.hints.multiple===!0)return(0,F.jsxDEV)(It,{value:n,onChange:r,validate:e=>Xf[i]?.test(e)??!1,display:Bf(`lucide:clock`),renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{type:`time`,step:a,value:e,onChange:e=>t(e.target.value),className:`w-36`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:z,lineNumber:288,columnNumber:11},this)},void 0,!1,{fileName:z,lineNumber:282,columnNumber:7},this);let o=typeof n==`string`?n:String(n??``);if(i===`hour`)return(0,F.jsxDEV)(M,{id:e,type:`time`,step:a,value:o,onChange:e=>r(e.target.value),className:`appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none`},void 0,!1,{fileName:z,lineNumber:313,columnNumber:7},this);let s=i===`second`;return(0,F.jsxDEV)(vr,{value:o,onValueChange:r,showSeconds:s,children:[(0,F.jsxDEV)(mn,{id:e,children:[(0,F.jsxDEV)(on,{segment:`hour`},void 0,!1,{fileName:z,lineNumber:328,columnNumber:9},this),(0,F.jsxDEV)(Cn,{},void 0,!1,{fileName:z,lineNumber:329,columnNumber:9},this),(0,F.jsxDEV)(on,{segment:`minute`},void 0,!1,{fileName:z,lineNumber:330,columnNumber:9},this),s&&(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(Cn,{},void 0,!1,{fileName:z,lineNumber:333,columnNumber:13},this),(0,F.jsxDEV)(on,{segment:`second`},void 0,!1,{fileName:z,lineNumber:334,columnNumber:13},this)]},void 0,!0,{fileName:z,lineNumber:332,columnNumber:11},this),(0,F.jsxDEV)(yn,{},void 0,!1,{fileName:z,lineNumber:337,columnNumber:9},this)]},void 0,!0,{fileName:z,lineNumber:327,columnNumber:7},this),(0,F.jsxDEV)(zn,{children:[(0,F.jsxDEV)(Dr,{},void 0,!1,{fileName:z,lineNumber:340,columnNumber:9},this),(0,F.jsxDEV)(ar,{},void 0,!1,{fileName:z,lineNumber:341,columnNumber:9},this),s&&(0,F.jsxDEV)(Wn,{},void 0,!1,{fileName:z,lineNumber:342,columnNumber:25},this),(0,F.jsxDEV)(en,{},void 0,!1,{fileName:z,lineNumber:343,columnNumber:9},this)]},void 0,!0,{fileName:z,lineNumber:339,columnNumber:7},this)]},void 0,!0,{fileName:z,lineNumber:326,columnNumber:5},this)}function $f(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-32`,bare:e.bare,view:t=>(0,F.jsxDEV)(Zf,{field:e.field,value:t},void 0,!1,{fileName:z,lineNumber:360,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Qf,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:z,lineNumber:362,columnNumber:9},this)},void 0,!1,{fileName:z,lineNumber:351,columnNumber:5},this)}function ep(e){return String(e).padStart(2,`0`)}var tp=Array.from({length:24},(e,t)=>({value:ep(t),title:ep(t)})),np=Array.from({length:60},(e,t)=>({value:ep(t),title:ep(t)}));function rp({value:e,onChange:t,granularity:n}){let[r=``,i=``,a=``]=e.split(`:`),o=n!==`hour`,s=n===`second`,c=(e,t,n)=>{if(!o)return e;let r=`${e||`00`}:${t||`00`}`;return s?`${r}:${n||`00`}`:r},l=(e,t,n)=>(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(Dt,{options:e,value:t,multiple:!1,literal:!0,search:!1,onPick:e=>n(String(e))},void 0,!1,{fileName:z,lineNumber:408,columnNumber:7},this)},void 0,!1,{fileName:z,lineNumber:407,columnNumber:5},this);return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 gap-1`,children:[l(tp,r,e=>t(c(e,i,a))),o&&l(np,i,e=>t(c(r,e,a))),s&&l(np,a,e=>t(c(r,i,e)))]},void 0,!0,{fileName:z,lineNumber:412,columnNumber:5},this)}function ip({field:e,draft:t,setDraft:n}){let r=Rf(e.hints,`second`);return(0,F.jsxDEV)(rp,{value:typeof t==`string`?t:String(t??``),onChange:n,granularity:r},void 0,!1,{fileName:z,lineNumber:425,columnNumber:10},this)}function ap({value:e}){return(0,F.jsxDEV)(`span`,{className:`font-mono text-sm`,children:String(e??``)},void 0,!1,{fileName:z,lineNumber:430,columnNumber:10},this)}D({kinds:[`time`],Page:$f,Value:ap,Picker:ip});var op={hour:/^\d{4}-\d{2}-\d{2}T([01]\d|2[0-3])$/,minute:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}$/,second:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/};function sp({field:e,value:t}){let{i18n:n}=a();if(e.hints.multiple!==!0&&(t==null||t===``))return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:z,lineNumber:450,columnNumber:83},this);let r=Rf(e.hints,`minute`);return e.hints.multiple===!0?(0,F.jsxDEV)(Vf,{value:t,icon:`lucide:calendar-clock`,format:e=>At(zf(e,r),n.language)||zf(e,r).replace(`T`,` `)},void 0,!1,{fileName:z,lineNumber:453,columnNumber:5},this):(0,F.jsxDEV)(`span`,{className:`whitespace-nowrap`,children:At(zf(t,r),n.language)},void 0,!1,{fileName:z,lineNumber:459,columnNumber:5},this)}function cp({name:e,field:t,value:n,onChange:r}){let i=Rf(t.hints,`minute`),a=i===`second`?1:i===`hour`?3600:60;if(t.hints.multiple===!0)return(0,F.jsxDEV)(It,{value:n,onChange:r,validate:e=>op[i]?.test(e)??!1,display:Bf(`lucide:calendar-clock`,e=>zf(e,i).replace(`T`,` `)),renderInput:(e,t,n)=>(0,F.jsxDEV)(M,{type:`datetime-local`,step:a,value:e,onChange:e=>t(e.target.value),className:`w-52`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),n())}},void 0,!1,{fileName:z,lineNumber:475,columnNumber:11},this)},void 0,!1,{fileName:z,lineNumber:469,columnNumber:7},this);let{date:o,time:s}=cn(zf(n,i));return(0,F.jsxDEV)(`div`,{className:`flex gap-2`,children:[(0,F.jsxDEV)(Kt,{value:o,onChange:e=>r(x(e,s||`00:00`))},void 0,!1,{fileName:z,lineNumber:496,columnNumber:7},this),(0,F.jsxDEV)(M,{id:e,type:`time`,step:a,value:s,onChange:e=>r(x(o,e.target.value)),className:`w-32 appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none`},void 0,!1,{fileName:z,lineNumber:497,columnNumber:7},this)]},void 0,!0,{fileName:z,lineNumber:495,columnNumber:5},this)}function lp(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-56`,bare:e.bare,view:t=>(0,F.jsxDEV)(sp,{field:e.field,value:t},void 0,!1,{fileName:z,lineNumber:520,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(cp,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:z,lineNumber:522,columnNumber:9},this)},void 0,!1,{fileName:z,lineNumber:511,columnNumber:5},this)}function up({value:e,field:t}){let{i18n:n}=a();return(0,F.jsxDEV)(`span`,{className:`truncate`,children:At(zf(e,Rf(t.hints,`minute`)),n.language)},void 0,!1,{fileName:z,lineNumber:536,columnNumber:10},this)}function dp(e,t,n){if(e==null||e===``)return[];let r=zf(e,Rf(t.hints,`minute`));return[{value:r,rawValue:e,label:At(r,n.locale)}]}function fp({field:e,draft:t,setDraft:n}){let r=Rf(e.hints,`minute`),{date:i,time:a}=cn(zf(t,r)),o=Rt(i);return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-wrap gap-2`,children:[(0,F.jsxDEV)(qr,{mode:`single`,selected:o,captionLayout:`dropdown`,defaultMonth:o,onSelect:e=>n(x(e?Pt(e):``,a||`00:00`))},void 0,!1,{fileName:z,lineNumber:557,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(rp,{value:a,onChange:e=>n(x(i,e)),granularity:r},void 0,!1,{fileName:z,lineNumber:565,columnNumber:9},this)},void 0,!1,{fileName:z,lineNumber:564,columnNumber:7},this)]},void 0,!0,{fileName:z,lineNumber:556,columnNumber:5},this)}D({kinds:[`datetime`],pickerSize:`large`,Page:lp,Picker:fp,Inline:up,Value:Uf,keys:dp});var pp=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/choice.tsx`;function mp({value:e}){return(0,F.jsxDEV)(`span`,{children:T(e)?(0,F.jsxDEV)(Fn,{name:`lucide:check`,size:14,className:`inline text-success`},void 0,!1,{fileName:pp,lineNumber:55,columnNumber:36},this):`—`},void 0,!1,{fileName:pp,lineNumber:55,columnNumber:10},this)}function hp({value:e,onChange:t,label:n}){let{saving:r}=le();return(0,F.jsxDEV)(Vt,{checked:T(e),disabled:r,"aria-label":n,onCheckedChange:e=>t?.(e===!0)},void 0,!1,{fileName:pp,lineNumber:69,columnNumber:5},this)}function gp(e){let t=et();return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-32`,bare:e.bare,view:(n,r)=>r&&t?(0,F.jsxDEV)(hp,{value:n,label:e.label,onChange:e=>void r(e)},void 0,!1,{fileName:pp,lineNumber:100,columnNumber:11},this):(0,F.jsxDEV)(mp,{field:e.field,value:n},void 0,!1,{fileName:pp,lineNumber:102,columnNumber:11},this),edit:(t,n)=>(0,F.jsxDEV)(hp,{value:t,label:e.label,onChange:n},void 0,!1,{fileName:pp,lineNumber:105,columnNumber:30},this)},void 0,!1,{fileName:pp,lineNumber:89,columnNumber:5},this)}function _p({value:e}){return(0,F.jsxDEV)(`span`,{children:T(e)?(0,F.jsxDEV)(Fn,{name:`lucide:check`,size:14,className:`inline text-success`},void 0,!1,{fileName:pp,lineNumber:111,columnNumber:36},this):`—`},void 0,!1,{fileName:pp,lineNumber:111,columnNumber:10},this)}function vp(e,t,n){if(e==null||e===``)return[];let r=ye(e);return[{value:r?`true`:`false`,rawValue:r,label:r?n.t(`group.yes`):n.t(`group.no`)}]}D({kinds:[`boolean`],Page:gp,Inline:_p,Value:mp,editor:`inplace`,keys:vp});var B=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/file.tsx`;function yp(e){return yr({title:e(`actions.confirmDelete`),confirmLabel:e(`actions.delete`),variant:`destructive`})}function bp(e){return e==null?null:e>=1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}var xp=/\.(txt|md|markdown|csv|json|xml|log|yaml|yml|ini|toml|js|jsx|ts|tsx|css|html)$/i;function Sp(e){let t=e.mime?.toLowerCase().split(`;`,1)[0];return t===`application/pdf`||/\.pdf$/i.test(e.name)?`pdf`:t?.startsWith(`text/`)||t===`application/json`||t===`application/xml`||xp.test(e.name)?`text`:null}var Cp=1e6;function wp({rec:e,kind:t,onClose:n}){let{t:r}=a(),[i,o]=(0,P.useState)(null),[s,c]=(0,P.useState)(!1);return(0,P.useEffect)(()=>{if(t!==`text`)return;let n=new AbortController;return o(null),c(!1),fetch(Un(e.name),{signal:n.signal}).then(e=>{if(!e.ok)throw Error(`preview_${e.status}`);return e.text()}).then(e=>o(e.length>Cp?`${e.slice(0,Cp)}\n\n${r(`files.previewTruncated`)}`:e)).catch(e=>{e?.name!==`AbortError`&&c(!0)}),()=>n.abort()},[t,e.name,r]),(0,F.jsxDEV)(tn,{open:!0,onOpenChange:e=>!e&&n(),children:(0,F.jsxDEV)(Or,{className:`h-[88dvh] max-w-5xl overflow-hidden @lg:h-[85dvh]`,children:[(0,F.jsxDEV)(hn,{children:(0,F.jsxDEV)(or,{className:`truncate pr-8`,children:e.name},void 0,!1,{fileName:B,lineNumber:102,columnNumber:11},this)},void 0,!1,{fileName:B,lineNumber:101,columnNumber:9},this),(0,F.jsxDEV)(Bn,{children:t===`pdf`?(0,F.jsxDEV)(`iframe`,{title:e.name,src:Un(e.name),className:`h-full w-full rounded-lg border border-border bg-white`},void 0,!1,{fileName:B,lineNumber:106,columnNumber:13},this):s?(0,F.jsxDEV)(`div`,{className:`flex h-full items-center justify-center text-sm text-destructive`,children:r(`files.previewFailed`)},void 0,!1,{fileName:B,lineNumber:112,columnNumber:13},this):i===null?(0,F.jsxDEV)(`div`,{className:`flex h-full items-center justify-center text-sm text-muted-foreground`,children:r(`files.loadingPreview`)},void 0,!1,{fileName:B,lineNumber:116,columnNumber:13},this):(0,F.jsxDEV)(`pre`,{className:`h-full overflow-auto whitespace-pre-wrap break-words rounded-lg border border-border bg-background p-4 font-mono text-xs leading-relaxed`,children:i},void 0,!1,{fileName:B,lineNumber:120,columnNumber:13},this)},void 0,!1,{fileName:B,lineNumber:104,columnNumber:9},this)]},void 0,!0,{fileName:B,lineNumber:100,columnNumber:7},this)},void 0,!1,{fileName:B,lineNumber:99,columnNumber:5},this)}function Tp({rec:e}){let{t}=a(),n=Sp(e),[r,i]=(0,P.useState)(!1);return n?(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(N,{type:`button`,variant:`ghost`,size:`iconSm`,className:`text-muted-foreground hover:text-primary`,title:t(`files.preview`),"aria-label":t(`files.preview`),onClick:()=>i(!0),children:(0,F.jsxDEV)(Kl,{size:15},void 0,!1,{fileName:B,lineNumber:146,columnNumber:9},this)},void 0,!1,{fileName:B,lineNumber:137,columnNumber:7},this),r&&(0,F.jsxDEV)(wp,{rec:e,kind:n,onClose:()=>i(!1)},void 0,!1,{fileName:B,lineNumber:148,columnNumber:16},this)]},void 0,!0,{fileName:B,lineNumber:136,columnNumber:5},this):null}function Ep({rec:e}){return(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(ki,{size:16,className:`text-muted-foreground shrink-0`},void 0,!1,{fileName:B,lineNumber:158,columnNumber:7},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,children:e.name},void 0,!1,{fileName:B,lineNumber:159,columnNumber:7},this),bp(e.size)&&(0,F.jsxDEV)(`span`,{className:`text-xs text-muted-foreground`,children:bp(e.size)},void 0,!1,{fileName:B,lineNumber:160,columnNumber:35},this)]},void 0,!0,{fileName:B,lineNumber:157,columnNumber:5},this)}function Dp({kind:e,rec:t,className:n}){return e===`audio`?(0,F.jsxDEV)(`audio`,{controls:!0,src:Un(t.name),className:n},void 0,!1,{fileName:B,lineNumber:168,columnNumber:5},this):(0,F.jsxDEV)(`video`,{controls:!0,src:Un(t.name),className:n},void 0,!1,{fileName:B,lineNumber:170,columnNumber:5},this)}var Op={file:`*`,document:`.pdf,.doc,.docx,.xls,.xlsx,.txt,.csv`,audio:`audio/*`,video:`video/*`,image:`image/*`,media:`image/*,video/*`,avatar:`image/*`,cover:`image/*`,poster:`image/*`};function kp({kind:e,value:t,onChange:n}){let{t:r}=a(),{busy:i,error:o,progress:s,upload:c,retry:l,canRetry:u}=C(),d=Nn(t),f=e=>n(e.length?e:``);async function p(e){if(!e)return;let t=await c(e);t&&f([...d,t])}async function m(){let e=await l();e&&f([...d,e])}return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:[d.map((e,t)=>(0,F.jsxDEV)(`div`,{className:`flex min-h-9 items-center gap-2 rounded-lg border border-border px-2`,children:[(0,F.jsxDEV)(Ep,{rec:e},void 0,!1,{fileName:B,lineNumber:219,columnNumber:11},this),(0,F.jsxDEV)(Tp,{rec:e},void 0,!1,{fileName:B,lineNumber:220,columnNumber:11},this),(0,F.jsxDEV)(`a`,{href:Un(e.name),download:!0,className:`text-muted-foreground hover:text-primary`,title:r(`files.download`),"aria-label":r(`files.download`),children:(0,F.jsxDEV)(Ul,{size:15},void 0,!1,{fileName:B,lineNumber:228,columnNumber:13},this)},void 0,!1,{fileName:B,lineNumber:221,columnNumber:11},this),(0,F.jsxDEV)(N,{type:`button`,variant:`ghost`,size:`iconSm`,disabled:i,className:`text-muted-foreground hover:text-destructive`,onClick:async()=>{await yp(r)&&f(d.filter((e,n)=>n!==t))},children:(0,F.jsxDEV)(Ke,{size:13},void 0,!1,{fileName:B,lineNumber:240,columnNumber:13},this)},void 0,!1,{fileName:B,lineNumber:230,columnNumber:11},this)]},`${e.name}-${t}`,!0,{fileName:B,lineNumber:218,columnNumber:9},this)),(0,F.jsxDEV)(it,{accept:Op[e]??`*`,busy:i,error:o,progress:s,onPick:p,onRetry:()=>void m(),canRetry:u},void 0,!1,{fileName:B,lineNumber:244,columnNumber:7},this)]},void 0,!0,{fileName:B,lineNumber:216,columnNumber:5},this)}function Ap({kind:e,value:t,onChange:n}){let{t:r}=a(),{busy:i,error:o,progress:s,upload:c,retry:l,canRetry:u}=C(),d=Nn(t)[0];async function f(e){if(!e)return;let t=await c(e);t&&n(t)}async function p(){let e=await l();e&&n(e)}return d?(0,F.jsxDEV)(`div`,{"data-testid":`single-file`,className:`flex min-h-9 items-center gap-2 rounded-lg border border-border px-2 hover:border-ring`,children:[(0,F.jsxDEV)(Ep,{rec:d},void 0,!1,{fileName:B,lineNumber:314,columnNumber:7},this),(0,F.jsxDEV)(Tp,{rec:d},void 0,!1,{fileName:B,lineNumber:315,columnNumber:7},this),(0,F.jsxDEV)(`a`,{href:Un(d.name),download:!0,className:`text-muted-foreground hover:text-primary`,title:r(`files.download`),"aria-label":r(`files.download`),children:(0,F.jsxDEV)(Ul,{size:15},void 0,!1,{fileName:B,lineNumber:323,columnNumber:9},this)},void 0,!1,{fileName:B,lineNumber:316,columnNumber:7},this),(0,F.jsxDEV)(N,{type:`button`,variant:`ghost`,size:`iconSm`,disabled:i,className:`text-muted-foreground hover:text-destructive`,onClick:async()=>{await yp(r)&&n(``)},children:(0,F.jsxDEV)(Ke,{size:13},void 0,!1,{fileName:B,lineNumber:335,columnNumber:9},this)},void 0,!1,{fileName:B,lineNumber:325,columnNumber:7},this)]},void 0,!0,{fileName:B,lineNumber:310,columnNumber:5},this):(0,F.jsxDEV)(it,{accept:Op[e]??`*`,busy:i,error:o,progress:s,onPick:e=>void f(e),onRetry:()=>void p(),canRetry:u,compact:!0},void 0,!1,{fileName:B,lineNumber:297,columnNumber:7},this)}function jp({kind:e,value:t,onChange:n}){let{t:r}=a(),{busy:i,error:o,progress:s,upload:c,retry:l,canRetry:u}=C(),d=Nn(t),f=e=>n(e.length?e:``);async function p(e){if(!e)return;let t=await c(e);t&&f([...d,t])}async function m(){let e=await l();e&&f([...d,e])}return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:[d.map((t,n)=>(0,F.jsxDEV)(`div`,{className:`flex items-start gap-2`,children:[(0,F.jsxDEV)(Dp,{kind:e,rec:t,className:e===`audio`?`min-w-0 flex-1`:`min-w-0 flex-1 max-h-72 rounded-lg`},void 0,!1,{fileName:B,lineNumber:373,columnNumber:11},this),(0,F.jsxDEV)(N,{type:`button`,variant:`ghost`,size:`iconSm`,disabled:i,className:`shrink-0 text-muted-foreground hover:text-destructive`,onClick:async()=>{await yp(r)&&f(d.filter((e,t)=>t!==n))},children:(0,F.jsxDEV)(Ke,{size:13},void 0,!1,{fileName:B,lineNumber:388,columnNumber:13},this)},void 0,!1,{fileName:B,lineNumber:378,columnNumber:11},this)]},`${t.name}-${n}`,!0,{fileName:B,lineNumber:372,columnNumber:9},this)),(0,F.jsxDEV)(it,{accept:Op[e]??`*`,busy:i,error:o,progress:s,onPick:p,onRetry:()=>void m(),canRetry:u},void 0,!1,{fileName:B,lineNumber:392,columnNumber:7},this)]},void 0,!0,{fileName:B,lineNumber:370,columnNumber:5},this)}function Mp(e,t,n,r){if(e===`avatar`)return(0,F.jsxDEV)(Jt,{value:t,onChange:n,accept:Op[e],multiple:r},void 0,!1,{fileName:B,lineNumber:409,columnNumber:12},this);if(e===`cover`)return(0,F.jsxDEV)(ft,{value:t,onChange:n,accept:Op[e],multiple:r},void 0,!1,{fileName:B,lineNumber:412,columnNumber:12},this);if(e===`image`||e===`media`||e===`poster`){let i=e===`poster`;return r?(0,F.jsxDEV)(de,{value:t,onChange:n,accept:Op[e],poster:i},void 0,!1,{fileName:B,lineNumber:417,columnNumber:7},this):(0,F.jsxDEV)(_t,{value:t,onChange:n,accept:Op[e],poster:i},void 0,!1,{fileName:B,lineNumber:419,columnNumber:7},this)}return e===`audio`||e===`video`?(0,F.jsxDEV)(jp,{kind:e,value:t,onChange:n},void 0,!1,{fileName:B,lineNumber:423,columnNumber:12},this):(0,F.jsxDEV)(kp,{kind:e,value:t,onChange:n},void 0,!1,{fileName:B,lineNumber:425,columnNumber:10},this)}function Np({kind:e,value:t}){let{t:n}=a(),r=Nn(t);return r.length?e===`avatar`?(0,F.jsxDEV)(Wr,{value:t},void 0,!1,{fileName:B,lineNumber:438,columnNumber:33},this):e===`cover`?(0,F.jsxDEV)(zr,{value:t},void 0,!1,{fileName:B,lineNumber:439,columnNumber:32},this):e===`image`||e===`media`?(0,F.jsxDEV)(ne,{value:t},void 0,!1,{fileName:B,lineNumber:440,columnNumber:52},this):e===`poster`?(0,F.jsxDEV)(ne,{value:t,poster:!0},void 0,!1,{fileName:B,lineNumber:441,columnNumber:33},this):e===`audio`||e===`video`?(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:r.map((t,n)=>(0,F.jsxDEV)(Dp,{kind:e,rec:t,className:e===`audio`?`w-full`:`max-h-72 rounded-lg`},`${t.name}-${n}`,!1,{fileName:B,lineNumber:446,columnNumber:11},this))},void 0,!1,{fileName:B,lineNumber:444,columnNumber:7},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:r.map((e,t)=>(0,F.jsxDEV)(`div`,{className:`flex min-h-9 items-center gap-2 rounded-lg border border-border px-2 hover:border-ring`,children:[(0,F.jsxDEV)(Ep,{rec:e},void 0,!1,{fileName:B,lineNumber:463,columnNumber:11},this),(0,F.jsxDEV)(Tp,{rec:e},void 0,!1,{fileName:B,lineNumber:464,columnNumber:11},this),(0,F.jsxDEV)(`a`,{href:Un(e.name),download:!0,className:`text-muted-foreground hover:text-primary`,title:n(`files.download`),"aria-label":n(`files.download`),children:(0,F.jsxDEV)(Ul,{size:15},void 0,!1,{fileName:B,lineNumber:472,columnNumber:13},this)},void 0,!1,{fileName:B,lineNumber:465,columnNumber:11},this)]},`${e.name}-${t}`,!0,{fileName:B,lineNumber:459,columnNumber:9},this))},void 0,!1,{fileName:B,lineNumber:457,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:B,lineNumber:437,columnNumber:28},this)}function Pp({value:e,children:t}){let[n,r]=(0,P.useState)(!1);return!n&&!Nn(e??``).length?(0,F.jsxDEV)(Fp,{onReveal:()=>r(!0)},void 0,!1,{fileName:B,lineNumber:509,columnNumber:63},this):(0,F.jsxDEV)(F.Fragment,{children:t()},void 0,!1,{fileName:B,lineNumber:510,columnNumber:10},this)}function Fp({onReveal:e}){let{t}=a();return(0,F.jsxDEV)(`button`,{type:`button`,onClick:e,title:t(`files.add`),className:`group text-faint hover:text-muted-foreground focus-visible:ring-ring inline-flex items-center gap-1.5 rounded-sm text-sm focus-visible:ring-2 focus-visible:outline-none`,children:[(0,F.jsxDEV)(`span`,{children:t(`files.none`)},void 0,!1,{fileName:B,lineNumber:522,columnNumber:7},this),(0,F.jsxDEV)(He,{size:13,className:`opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100`},void 0,!1,{fileName:B,lineNumber:523,columnNumber:7},this)]},void 0,!0,{fileName:B,lineNumber:516,columnNumber:5},this)}function Ip(e){let t=e.field.kind,n=e.field.hints.multiple===!0,r=et();return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:(i,a)=>{if(!a||!r)return(0,F.jsxDEV)(Np,{kind:t,value:i??``},void 0,!1,{fileName:B,lineNumber:558,columnNumber:38},this);let o=()=>Mp(t,i??``,e=>void a(e),n);return e.bare?o():(0,F.jsxDEV)(Pp,{value:i,children:o},void 0,!1,{fileName:B,lineNumber:564,columnNumber:36},this)},edit:(e,r)=>Mp(t,e??``,r,n)},void 0,!1,{fileName:B,lineNumber:547,columnNumber:5},this)}function Lp(e){let t=Nn(e.value)[0];if(!t)return(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`—`},void 0,!1,{fileName:B,lineNumber:575,columnNumber:20},this);let n=e.field?.kind,r=n===`audio`?$l:n===`video`?Yl:ki,i=bp(t.size);return(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-center gap-1.5 text-sm`,children:[(0,F.jsxDEV)(r,{size:14,className:`text-muted-foreground shrink-0`},void 0,!1,{fileName:B,lineNumber:581,columnNumber:7},this),(0,F.jsxDEV)(`span`,{className:`truncate`,children:t.name},void 0,!1,{fileName:B,lineNumber:582,columnNumber:7},this),i&&(0,F.jsxDEV)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:i},void 0,!1,{fileName:B,lineNumber:583,columnNumber:14},this)]},void 0,!0,{fileName:B,lineNumber:580,columnNumber:5},this)}D({kinds:[`image`,`media`,`poster`],layout:Br,box:`none`,Page:Ip,Inline:Fr,editor:`inplace`}),D({kinds:[`file`,`document`,`audio`,`video`],layout:Br,box:`none`,Page:Ip,Inline:Lp,editor:`inplace`}),D({kinds:[`avatar`],layout:Br,box:`none`,Page:Ip,Inline:Ar,editor:`inplace`}),D({kinds:[`cover`],layout:`block`,Page:Ip,Inline:Fr,editor:`inplace`});var V=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/illustrated.tsx`,Rp=170;function zp(e){let t=fi(e.parts??[]);return{tKey:t.text??`text`,iKey:t.image??`image`}}function Bp(e,t){let{tKey:n,iKey:r}=zp(t),i=e&&typeof e==`object`?e:null;return i?{text:i[n],image:i[r]}:{}}function Vp(e){let t=e.hints.config??{};return{width:t.imageWidth??Rp,side:t.side??`left`}}function Hp(e){return e.parts?.find(e=>e.role===`image`)?.meta.kind??`image`}var Up=e=>e===`poster`?`aspect-[2/3]`:`aspect-square`;function Wp({name:e,width:t,kind:n=`image`}){let[r,i]=(0,P.useState)(!1);return(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(`button`,{type:`button`,"data-testid":`illustrated-image`,onClick:()=>i(!0),style:{"--illus-w":`${t}px`},className:`relative block ${Up(n)} w-full cursor-zoom-in overflow-hidden rounded-xl border border-border transition-colors hover:border-ring @sm:w-(--illus-w)`,children:(0,F.jsxDEV)(Ze,{name:e},void 0,!1,{fileName:V,lineNumber:121,columnNumber:9},this)},void 0,!1,{fileName:V,lineNumber:114,columnNumber:7},this),r&&(0,F.jsxDEV)(oe,{images:[e],index:0,onClose:()=>i(!1),onIndex:()=>{}},void 0,!1,{fileName:V,lineNumber:123,columnNumber:16},this)]},void 0,!0,{fileName:V,lineNumber:113,columnNumber:5},this)}function Gp({width:e,side:t,picture:n,prose:r}){return(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[n!=null&&(0,F.jsxDEV)(`div`,{"data-testid":`illustrated-figure`,style:{"--illus-w":`${e}px`},className:`mb-3 w-full @sm:mb-2 @sm:w-(--illus-w) ${t===`right`?`@sm:float-right @sm:ml-4`:`@sm:float-left @sm:mr-4`}`,children:n},void 0,!1,{fileName:V,lineNumber:156,columnNumber:9},this),r!=null&&(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:r},void 0,!1,{fileName:V,lineNumber:166,columnNumber:25},this),(0,F.jsxDEV)(`div`,{className:`clear-both`},void 0,!1,{fileName:V,lineNumber:168,columnNumber:7},this)]},void 0,!0,{fileName:V,lineNumber:154,columnNumber:5},this)}function Kp({field:e,value:t}){let{text:n,image:r}=Bp(t,e),{width:i,side:a}=Vp(e),o=r!=null&&r!==``?Nn(r)[0]:void 0,s=n!=null&&n!==``;return(0,F.jsxDEV)(Gp,{width:i,side:a,picture:o?(0,F.jsxDEV)(Wp,{name:o.name,width:i,kind:Hp(e)},void 0,!1,{fileName:V,lineNumber:186,columnNumber:22},this):null,prose:s?(0,F.jsxDEV)(`div`,{"data-testid":`illustrated-text`,className:`min-w-0`,children:(0,F.jsxDEV)(te,{value:String(n)},void 0,!1,{fileName:V,lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:V,lineNumber:189,columnNumber:11},this):null},void 0,!1,{fileName:V,lineNumber:183,columnNumber:5},this)}function qp({field:e,value:t,onChange:n}){let{tKey:r,iKey:i}=zp(e),{text:a,image:o}=Bp(t,e),{width:s}=Vp(e),c=Hp(e),l=o!=null&&o!==``?Nn(o)[0]:void 0,u=e.parts?.find(e=>e.role===`text`),d=u!=null&&u.mode!==`stored`,f=e.parts?.find(e=>e.role===`image`),p=f!=null&&f.mode!==`stored`,m=e=>{let t=wr(e.text),a=wr(e.image);n(t==null&&a==null?``:{[r]:t,[i]:a})};return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-3 min-w-0`,children:[p?(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:l?(0,F.jsxDEV)(Wp,{name:l.name,width:s,kind:c},void 0,!1,{fileName:V,lineNumber:233,columnNumber:18},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:V,lineNumber:233,columnNumber:85},this)},void 0,!1,{fileName:V,lineNumber:232,columnNumber:9},this):(0,F.jsxDEV)(_t,{value:o??``,onChange:e=>m({text:a,image:e}),width:s,poster:c===`poster`},void 0,!1,{fileName:V,lineNumber:236,columnNumber:9},this),d?(0,F.jsxDEV)(`p`,{className:`text-[15px] text-muted-foreground whitespace-pre-wrap`,children:a!=null&&a!==``?String(a):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:V,lineNumber:245,columnNumber:57},this)},void 0,!1,{fileName:V,lineNumber:244,columnNumber:9},this):(0,F.jsxDEV)(_i,{id:`field-${e.label}`,value:a==null?``:String(a),onChange:e=>m({text:e.target.value,image:o})},void 0,!1,{fileName:V,lineNumber:248,columnNumber:9},this)]},void 0,!0,{fileName:V,lineNumber:230,columnNumber:5},this)}function Jp({image:e,fixed:t,width:n,kind:r=`image`,onChange:i}){let a=e!=null&&e!==``?Nn(e)[0]:void 0;return t||!i?(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:a?(0,F.jsxDEV)(Wp,{name:a.name,width:n,kind:r},void 0,!1,{fileName:V,lineNumber:285,columnNumber:16},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:V,lineNumber:285,columnNumber:83},this)},void 0,!1,{fileName:V,lineNumber:284,columnNumber:7},this):(0,F.jsxDEV)(Pp,{value:e,children:()=>(0,F.jsxDEV)(_t,{value:e??``,onChange:i,width:n,poster:r===`poster`},void 0,!1,{fileName:V,lineNumber:300,columnNumber:14},this)},void 0,!1,{fileName:V,lineNumber:299,columnNumber:5},this)}function Yp({text:e,fixed:t,meta:n,label:r,onChange:i}){return t||!i?(0,F.jsxDEV)(`p`,{className:`text-[15px] text-muted-foreground whitespace-pre-wrap`,children:e!=null&&e!==``?String(e):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:V,lineNumber:333,columnNumber:55},this)},void 0,!1,{fileName:V,lineNumber:332,columnNumber:7},this):(0,F.jsxDEV)(we,{field:{...n,kind:`markdown`,hints:{...n.hints,noLabel:!0}},value:e??``,label:r,geom:`none`,width:`w-full`,view:e=>e!=null&&e!==``?(0,F.jsxDEV)(te,{value:String(e)},void 0,!1,{fileName:V,lineNumber:345,columnNumber:45},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:V,lineNumber:345,columnNumber:82},this),edit:(e,t)=>(0,F.jsxDEV)(_i,{value:e==null?``:String(e),onChange:e=>t(e.target.value)},void 0,!1,{fileName:V,lineNumber:346,columnNumber:25},this),onCommit:i},void 0,!1,{fileName:V,lineNumber:339,columnNumber:5},this)}function Xp({field:e,value:t,onChange:n,label:r,error:i}){let{tKey:a,iKey:o}=zp(e),{text:s,image:c}=Bp(t,e),{width:l,side:u}=Vp(e),d=Hp(e),f=e.parts?.find(e=>e.role===`text`),p=f!=null&&f.mode!==`stored`,m=e.parts?.find(e=>e.role===`image`),h=m!=null&&m.mode!==`stored`,g=e.hints.noLabel===!0||r===void 0,_=(e,t)=>{let r=wr(e),i=wr(t);return n(r==null&&i==null?``:{[a]:r,[o]:i})};return(0,F.jsxDEV)(`div`,{className:`group/field relative w-full`,children:[!g&&(0,F.jsxDEV)(Fe,{label:r},void 0,!1,{fileName:V,lineNumber:389,columnNumber:20},this),(0,F.jsxDEV)(Gp,{width:l,side:u,picture:(0,F.jsxDEV)(Jp,{image:c,fixed:h,width:l,kind:d,onChange:h?void 0:e=>void _(s,e)},void 0,!1,{fileName:V,lineNumber:396,columnNumber:11},this),prose:(0,F.jsxDEV)(Yp,{text:s,fixed:p,meta:f?.meta??e,label:r,onChange:p?void 0:e=>_(e,c)},void 0,!1,{fileName:V,lineNumber:405,columnNumber:11},this)},void 0,!1,{fileName:V,lineNumber:392,columnNumber:7},this),(0,F.jsxDEV)(dr,{error:i},void 0,!1,{fileName:V,lineNumber:414,columnNumber:7},this)]},void 0,!0,{fileName:V,lineNumber:388,columnNumber:5},this)}function Zp(e){let{live:t,write:n}=nn(e);return t?(0,F.jsxDEV)(Xp,{field:e.field,value:e.value,onChange:n,label:e.label,error:e.error},void 0,!1,{fileName:V,lineNumber:427,columnNumber:12},this):(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:t=>(0,F.jsxDEV)(Kp,{field:e.field,value:t},void 0,!1,{fileName:V,lineNumber:439,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(qp,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:V,lineNumber:441,columnNumber:9},this)},void 0,!1,{fileName:V,lineNumber:430,columnNumber:5},this)}function Qp({field:e,value:t}){let{text:n}=Bp(t,e);return n==null||n===``?(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`—`},void 0,!1,{fileName:V,lineNumber:449,columnNumber:43},this):(0,F.jsxDEV)(`span`,{className:`truncate`,children:String(n)},void 0,!1,{fileName:V,lineNumber:450,columnNumber:10},this)}D({kinds:[`illustrated`],layout:`block`,Page:Zp,Inline:Qp,editor:`own`});var H=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/attachment.tsx`;function $p(e){let t=fi(e.parts??[]);return{lKey:t.label??`label`,fKey:t.file??`file`}}function em(e,t){let{lKey:n,fKey:r}=$p(t),i=e&&typeof e==`object`?e:null;return i?{label:i[n],file:i[r]}:{}}function tm(e){return e.parts?.find(e=>e.role===`file`)?.meta.kind??`file`}function nm(e,t){let n=e.parts?.find(e=>e.role===t);return n!=null&&n.mode!==`stored`}function rm({name:e,file:t}){return(0,F.jsxDEV)(`div`,{"data-testid":`attachment`,className:`flex min-w-0 flex-col gap-1`,children:[e,t]},void 0,!0,{fileName:H,lineNumber:99,columnNumber:5},this)}function im({label:e,dash:t}){return e==null||e===``?t?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:H,lineNumber:114,columnNumber:52},this):null:(0,F.jsxDEV)(`span`,{"data-testid":`attachment-label`,className:`block truncate text-[15px] font-medium`,children:String(e)},void 0,!1,{fileName:H,lineNumber:116,columnNumber:5},this)}function am({field:e,value:t}){let{label:n,file:r}=em(t,e);return(0,F.jsxDEV)(rm,{name:(0,F.jsxDEV)(im,{label:n},void 0,!1,{fileName:H,lineNumber:132,columnNumber:13},this),file:(0,F.jsxDEV)(Np,{kind:tm(e),value:r??``},void 0,!1,{fileName:H,lineNumber:133,columnNumber:13},this)},void 0,!1,{fileName:H,lineNumber:131,columnNumber:5},this)}function om({file:e,fixed:t,kind:n,onChange:r}){return t||!r?(0,F.jsxDEV)(Np,{kind:n,value:e??``},void 0,!1,{fileName:H,lineNumber:156,columnNumber:34},this):(0,F.jsxDEV)(Pp,{value:e,children:()=>(0,F.jsxDEV)(Ap,{kind:n,value:e??``,onChange:r},void 0,!1,{fileName:H,lineNumber:165,columnNumber:35},this)},void 0,!1,{fileName:H,lineNumber:165,columnNumber:5},this)}function sm({label:e,fixed:t,meta:n,fieldLabel:r,onChange:i}){return t||!i?(0,F.jsxDEV)(im,{label:e,dash:!0},void 0,!1,{fileName:H,lineNumber:201,columnNumber:34},this):(0,F.jsxDEV)(we,{field:{...n,kind:`text`,hints:{...n.hints,noLabel:!0}},value:e??``,label:r,geom:`none`,width:`w-full`,view:e=>e!=null&&e!==``?(0,F.jsxDEV)(im,{label:e},void 0,!1,{fileName:H,lineNumber:210,columnNumber:45},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:H,lineNumber:210,columnNumber:76},this),edit:(e,t)=>(0,F.jsxDEV)(M,{value:e==null?``:String(e),onChange:e=>t(e.target.value)},void 0,!1,{fileName:H,lineNumber:211,columnNumber:25},this),onCommit:i},void 0,!1,{fileName:H,lineNumber:204,columnNumber:5},this)}function cm({field:e,value:t,onChange:n}){let{lKey:r,fKey:i}=$p(e),{label:a,file:o}=em(t,e),s=tm(e),c=nm(e,`label`),l=nm(e,`file`),u=e=>{let t=wr(e.label),a=wr(e.file);n(t==null&&a==null?``:{[r]:t,[i]:a})};return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:[c?(0,F.jsxDEV)(im,{label:a,dash:!0},void 0,!1,{fileName:H,lineNumber:245,columnNumber:9},this):(0,F.jsxDEV)(M,{id:`field-${e.label}`,value:a==null?``:String(a),onChange:e=>u({label:e.target.value,file:o})},void 0,!1,{fileName:H,lineNumber:247,columnNumber:9},this),l?(0,F.jsxDEV)(Np,{kind:s,value:o??``},void 0,!1,{fileName:H,lineNumber:254,columnNumber:9},this):(0,F.jsxDEV)(Ap,{kind:s,value:o??``,onChange:e=>u({label:a,file:e})},void 0,!1,{fileName:H,lineNumber:256,columnNumber:9},this)]},void 0,!0,{fileName:H,lineNumber:243,columnNumber:5},this)}function lm({field:e,value:t,onChange:n,label:r,error:i}){let{lKey:a,fKey:o}=$p(e),{label:s,file:c}=em(t,e),l=tm(e),u=nm(e,`label`),d=nm(e,`file`),f=e.parts?.find(e=>e.role===`label`),p=e.hints.noLabel===!0||r===void 0,m=(e,t)=>{let r=wr(e),i=wr(t);return n(r==null&&i==null?``:{[a]:r,[o]:i})};return(0,F.jsxDEV)(`div`,{className:`group/field relative w-full`,children:[!p&&(0,F.jsxDEV)(Fe,{label:r},void 0,!1,{fileName:H,lineNumber:297,columnNumber:20},this),(0,F.jsxDEV)(rm,{name:(0,F.jsxDEV)(sm,{label:s,fixed:u,meta:f?.meta??e,fieldLabel:r,onChange:u?void 0:e=>m(e,c)},void 0,!1,{fileName:H,lineNumber:302,columnNumber:11},this),file:(0,F.jsxDEV)(om,{file:c,fixed:d,kind:l,onChange:d?void 0:e=>void m(s,e)},void 0,!1,{fileName:H,lineNumber:311,columnNumber:11},this)},void 0,!1,{fileName:H,lineNumber:300,columnNumber:7},this),(0,F.jsxDEV)(dr,{error:i},void 0,!1,{fileName:H,lineNumber:319,columnNumber:7},this)]},void 0,!0,{fileName:H,lineNumber:296,columnNumber:5},this)}function um(e){let{live:t,write:n}=nn(e);return t?(0,F.jsxDEV)(lm,{field:e.field,value:e.value,onChange:n,label:e.label,error:e.error},void 0,!1,{fileName:H,lineNumber:331,columnNumber:12},this):(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:t=>(0,F.jsxDEV)(am,{field:e.field,value:t},void 0,!1,{fileName:H,lineNumber:343,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(cm,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:H,lineNumber:345,columnNumber:9},this)},void 0,!1,{fileName:H,lineNumber:334,columnNumber:5},this)}function dm({field:e,value:t}){let{label:n,file:r}=em(t,e);if(n!=null&&n!==``)return(0,F.jsxDEV)(`span`,{className:`truncate`,children:String(n)},void 0,!1,{fileName:H,lineNumber:358,columnNumber:45},this);let i=Nn(r)[0];return i?(0,F.jsxDEV)(`span`,{className:`truncate text-muted-foreground`,children:i.name},void 0,!1,{fileName:H,lineNumber:360,columnNumber:19},this):(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`—`},void 0,!1,{fileName:H,lineNumber:361,columnNumber:10},this)}D({kinds:[`attachment`],layout:`block`,Page:um,Inline:dm,editor:`own`});function fm(e){if(!(typeof e!=`string`||!e))try{let t=JSON.parse(e),n=Array.isArray(t)?t[0]:t;return n&&typeof n==`object`&&typeof n.name==`string`?n.name:typeof n==`string`?n:void 0}catch{return e}}function pm(e,t){for(let[n,r]of Ui(e.fields))if(n===t)return r.kind}function mm(e,t,n){let r=pm(e,t);if(r&&Ri(r)){let e=fm(n[t]);return e?{kind:`image`,value:Un(e)}:void 0}}function hm(e,t){let n=e.views?.select;if(n){let r=Array.isArray(n.title)?n.title:[n.title];return{icon:n.icon?mm(e,n.icon,t):void 0,title:r.map(e=>String(t[e]??``)).filter(Boolean).join(` `),subtitle:n.subtitle&&String(t[n.subtitle]??``)||void 0}}let r=Vi(e),i=r?fm(t[r]):void 0;return{icon:i?{kind:`image`,value:Un(i)}:void 0,title:qi(e,t)}}var U=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/edit.tsx`;function gm({value:e,onChange:t,field:n,t:r,recordCtx:i={library:``,shelf:``,recordId:``}}){let a=n.hints.rowMultiple===!0,o=n.hints.fields??[],s=n.hints.unique??[],c=new Set((n.parts??[]).filter(e=>e.mode!==`stored`).map(di)),l=(0,P.useRef)(0),u=e=>e.map(e=>({id:++l.current,data:e})),d=()=>Object.fromEntries(o.map(e=>[e.key,``])),f=()=>{let t=Xe(e,a?[]:{});return a?Array.isArray(t)?t:[]:[t&&!Array.isArray(t)&&Object.keys(t).length?t:d()]},[p,m]=(0,P.useState)(()=>u(f()));(0,P.useEffect)(()=>{e||m(a?[]:u([d()]))},[e]);let h=e=>o.some(t=>{let n=(e[t.key]??``).trim();return t.prim===`checkbox`?n===`true`:n!==``});function g(e){m(e);let n=e.map(e=>e.data).filter(h);t(a?n.length?n:``:n.length?n[0]:``)}function _(e,t,n){g(p.map((r,i)=>i===e?{...r,data:{...r.data,[t]:String(n)}}:r))}function v(e,t){return s.includes(e)?p.filter((e,n)=>n!==t).map(t=>t.data[e]??``).filter(Boolean):[]}function y({id:e,data:t},n){return(0,F.jsxDEV)(`div`,{className:`flex items-start gap-2 flex-wrap border border-border rounded-xl p-3`,children:[o.map(e=>c.has(e.key)?(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 flex-1 min-w-32`,children:[e.label?(0,F.jsxDEV)(Fe,{label:r(e.label)},void 0,!1,{fileName:U,lineNumber:126,columnNumber:28},this):null,(0,F.jsxDEV)(`div`,{className:`flex h-9 items-center rounded-lg border border-transparent px-3 text-sm text-muted-foreground`,children:t[e.key]||(0,F.jsxDEV)(k,{},void 0,!1,{fileName:U,lineNumber:128,columnNumber:34},this)},void 0,!1,{fileName:U,lineNumber:127,columnNumber:15},this)]},e.key,!0,{fileName:U,lineNumber:125,columnNumber:13},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 flex-1 min-w-32`,children:(0,F.jsxDEV)(We,{field:ui(e),value:e.prim===`checkbox`?t[e.key]===`true`:t[e.key]??``,excludeValues:v(e.key,n),onChange:t=>_(n,e.key,t),label:e.label?r(e.label):void 0,mode:`edit`,recordCtx:i},void 0,!1,{fileName:U,lineNumber:133,columnNumber:15},this)},e.key,!1,{fileName:U,lineNumber:132,columnNumber:13},this)),a&&(0,F.jsxDEV)(St,{className:`mt-6`,onClick:()=>g(p.filter((e,t)=>t!==n))},void 0,!1,{fileName:U,lineNumber:145,columnNumber:22},this)]},e,!0,{fileName:U,lineNumber:121,columnNumber:7},this)}return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2.5`,children:[p.map(y),a&&(0,F.jsxDEV)(Mt,{onClick:()=>m(e=>[...e,...u([d()])]),children:r(`form.addRow`)},void 0,!1,{fileName:U,lineNumber:153,columnNumber:20},this)]},void 0,!0,{fileName:U,lineNumber:151,columnNumber:5},this)}function _m({value:e,onChange:t,field:n}){let{t:r}=a(),i=(0,P.useMemo)(()=>$r(n.hints.units)??[],[n.hints]),o=n.parts?.find(e=>e.role===`unit`),s=o!=null&&o.mode!==`stored`,c=n.parts?.find(e=>e.role===`value`),l=c!=null&&c.mode!==`stored`,u=(0,P.useMemo)(()=>fi(n.parts??[]),[n.parts]),d=u.value??`value`,f=u.unit??`unit`,p=s&&typeof o.value==`string`?o.value:``,m=(0,P.useMemo)(()=>{let t=e&&typeof e==`object`?e:Xe(String(e),null);return typeof t!=`object`||!t?{value:``,unit:p||(i[0]?.value??``)}:{value:t[d]??``,unit:t[f]??``}},[e,i,p,d,f]),h=e=>{if(l){t({[f]:e.unit});return}t(e.value===``?``:{[d]:e.value,[f]:e.unit})};return(0,F.jsxDEV)(Si,{className:`min-w-0`,children:[l?(0,F.jsxDEV)(`div`,{className:`flex h-9 flex-1 min-w-0 items-center px-3 text-sm text-muted-foreground`,children:m.value===``?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:U,lineNumber:235,columnNumber:34},this):String(m.value)},void 0,!1,{fileName:U,lineNumber:234,columnNumber:9},this):(0,F.jsxDEV)(xi,{type:`number`,className:`min-w-0`,value:m.value===``?``:String(m.value),min:n.hints.min,max:n.hints.max,step:n.hints.step??`any`,onChange:e=>{let t=parseFloat(e.target.value);h({...m,value:isNaN(t)?``:t})},placeholder:`0`},void 0,!1,{fileName:U,lineNumber:238,columnNumber:9},this),(0,F.jsxDEV)(yi,{align:`inline-end`,className:`pr-1`,children:s?(0,F.jsxDEV)(`span`,{className:`px-2 text-xs text-muted-foreground`,children:fn(n,m.unit||p,r)},void 0,!1,{fileName:U,lineNumber:254,columnNumber:11},this):(0,F.jsxDEV)(ee,{value:m.unit||``,onChange:e=>h({...m,unit:e}),items:i.map(e=>({value:e.value,title:r(e.label)})),triggerClassName:`h-7 gap-1 border-0 bg-transparent px-2 text-muted-foreground shadow-none focus:ring-0`},void 0,!1,{fileName:U,lineNumber:258,columnNumber:11},this)},void 0,!1,{fileName:U,lineNumber:252,columnNumber:7},this)]},void 0,!0,{fileName:U,lineNumber:232,columnNumber:5},this)}function vm({field:e,value:t,onChange:n,excludeValues:r}){let{t:i}=a(),o=e.relation?.library??``,s=e.relation?.shelf??``,c=!!e.hints.multi,{labelMap:l,records:u,loadState:d}=tt(o,s,String(e.hints.displayKey??`name`),(0,P.useMemo)(()=>{let t=e.relation?.filter;if(t)return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,String(t)]))},[e.relation?.filter])),f=jr(o,s),p=(0,P.useMemo)(()=>t?c?Array.isArray(t)?t.map(String):Xe(t,[]).map(String):[String(t)]:[],[t,c]),m=ge(o,s,p),h=(0,P.useMemo)(()=>{let e=new Map(u.map(e=>[String(e.id),e]));for(let[t,n]of m)e.has(t)||e.set(t,n);return[...e.values()]},[u,m]),g=(0,P.useMemo)(()=>h.filter(e=>String(e.id)===String(t)||p.includes(String(e.id))||!r?.includes(String(e.id))).map(e=>{let t=f?hm(f,e):{title:String(e.id)},n=f?(0,F.jsxDEV)(Hr,{shelf:f,row:e,size:`sm`,height:28},void 0,!1,{fileName:U,lineNumber:332,columnNumber:28},this):void 0;return{value:String(e.id),title:t.title,icon:t.icon,subtitle:t.subtitle,node:n}}),[h,r,t,p,f]);return d===`loading`?(0,F.jsxDEV)(`p`,{className:`text-muted-foreground text-sm py-1`,children:i(`form.loading`)},void 0,!1,{fileName:U,lineNumber:340,columnNumber:39},this):d===`error`?(0,F.jsxDEV)(`p`,{className:`text-destructive text-sm py-1`,children:i(`form.loadError`)},void 0,!1,{fileName:U,lineNumber:341,columnNumber:37},this):g.length?c?(0,F.jsxDEV)(Xr,{selected:p,items:g,placeholder:i(`form.addRecord`),labelOf:e=>l.get(e)??g.find(t=>t.value===e)?.title??e,onChange:e=>n(e.length?e:``)},void 0,!1,{fileName:U,lineNumber:349,columnNumber:5},this):(0,F.jsxDEV)(ee,{value:t==null?``:String(t),onChange:n,items:g},void 0,!1,{fileName:U,lineNumber:346,columnNumber:22},this):(0,F.jsxDEV)(`p`,{className:`text-muted-foreground text-sm py-1`,children:i(`form.noRecords`)},void 0,!1,{fileName:U,lineNumber:343,columnNumber:29},this)}function ym(e){return{text:``,checks:Array(e).fill(!1)}}function bm({value:e,onChange:t,field:n,recordCtx:r={library:``,shelf:``,recordId:null}}){let i=n.hints.slots??[``],a=Hn(n.hints.fields),[o,s]=(0,P.useState)(()=>Xe(e,{}));(0,P.useEffect)(()=>{e||s({})},[e,i.length]);let c=a.length?{text:String(o.text??``),checks:Array.from({length:i.length},(e,t)=>o[`check`+t]===!0)}:dn(e,i.length);function l(e){s(e);let n=a.length?a.some(t=>{let n=e[t.key];return n!=null&&n!==``&&!(Array.isArray(n)&&n.length===0)}):String(e.text??``).trim()!==``,r=Array.isArray(e.checks)?e.checks:[],o=i.some((t,n)=>e[`check`+n]===!0)||i.some((e,t)=>r[t]===!0);if(a.length)t(n||o?e:``);else{let a={text:String(e.text??``),checks:i.map((t,n)=>e[`check`+n]===!0||r[n]===!0)};t(n||o?y(a):``)}}return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1`,children:[(0,F.jsxDEV)(xn,{row:c,slotCount:i.length,editing:!0,onChange:e=>{let t={...o};i.forEach((n,r)=>{t[`check`+r]=e.checks[r]===!0}),a.length||(t.text=e.text),l(t)},content:a.length?(0,F.jsxDEV)(rr,{fields:a,row:o,editing:!0,onChange:(e,t)=>l({...o,[e]:t}),recordCtx:r},void 0,!1,{fileName:U,lineNumber:433,columnNumber:13},this):void 0},void 0,!1,{fileName:U,lineNumber:419,columnNumber:7},this),(0,F.jsxDEV)(Ot,{slots:i},void 0,!1,{fileName:U,lineNumber:443,columnNumber:7},this)]},void 0,!0,{fileName:U,lineNumber:418,columnNumber:5},this)}function xm({value:e,onChange:t,field:n}){let{t:r}=a(),i=n.hints.slots??[``],[o,s]=(0,P.useState)(()=>Xe(e,[]));(0,P.useEffect)(()=>{e||s([])},[e]);function c(e){s(e);let n=e.filter(e=>e.text.trim()!==``||e.checks.some(Boolean));t(n.length?n:``)}return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1.5 py-1`,children:[o.map((e,t)=>(0,F.jsxDEV)(xn,{row:e,slotCount:i.length,editing:!0,onChange:e=>c(o.map((n,r)=>r===t?e:n)),onRemove:()=>c(o.filter((e,n)=>n!==t))},t,!1,{fileName:U,lineNumber:474,columnNumber:9},this)),(0,F.jsxDEV)(Ot,{slots:i},void 0,!1,{fileName:U,lineNumber:483,columnNumber:7},this),(0,F.jsxDEV)(Mt,{onClick:()=>s(e=>[...e,ym(i.length)]),children:r(`form.addItem`)},void 0,!1,{fileName:U,lineNumber:484,columnNumber:7},this)]},void 0,!0,{fileName:U,lineNumber:472,columnNumber:5},this)}function Sm(e){let t=e=>!!e&&typeof e==`object`&&`unit`in e;if(Array.isArray(e))return e.filter(t);try{let n=JSON.parse(String(e??``));if(Array.isArray(n))return n.map(e=>{if(t(e))return e;try{return JSON.parse(String(e))}catch{return null}}).filter(Boolean)}catch{}return[]}function Cm({field:e,value:t,onChange:n}){let{t:r}=a(),i=(0,P.useMemo)(()=>Sm(t),[t]),[o,s]=(0,P.useState)(``);function c(e){n(e.length?e:``)}function l(){!o||typeof o!=`object`||o.value===``||(c([...i,o]),s(``))}return(0,F.jsxDEV)(Te,{items:i,content:Tr(e,r),onRemove:e=>c(i.filter((t,n)=>n!==e)),editor:(0,F.jsxDEV)(`div`,{className:`flex gap-2 items-center min-w-0`,children:[(0,F.jsxDEV)(`div`,{className:`flex-1 min-w-0`,children:(0,F.jsxDEV)(_m,{value:o,onChange:e=>s(e),field:e},void 0,!1,{fileName:U,lineNumber:634,columnNumber:13},this)},void 0,!1,{fileName:U,lineNumber:633,columnNumber:11},this),(0,F.jsxDEV)(N,{type:`button`,variant:`outline`,size:`sm`,onClick:l,children:(0,F.jsxDEV)(He,{size:14},void 0,!1,{fileName:U,lineNumber:637,columnNumber:13},this)},void 0,!1,{fileName:U,lineNumber:636,columnNumber:11},this)]},void 0,!0,{fileName:U,lineNumber:632,columnNumber:9},this)},void 0,!1,{fileName:U,lineNumber:627,columnNumber:5},this)}var wm=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/composite.tsx`;function Tm(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-56`,bare:e.bare,view:t=>(0,F.jsxDEV)(Ln,{field:e.field,value:t},void 0,!1,{fileName:wm,lineNumber:48,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(vm,{field:e.field,value:t,onChange:n,excludeValues:e.excludeValues},void 0,!1,{fileName:wm,lineNumber:50,columnNumber:9},this)},void 0,!1,{fileName:wm,lineNumber:39,columnNumber:5},this)}function Em({field:e,draft:t,setDraft:n,save:r}){let{t:i}=a(),o=e.relation?.library??``,s=e.relation?.shelf??``,c=!!e.hints.multi,l=String(e.hints.displayKey??`name`),u=(0,P.useMemo)(()=>{let t=e.relation?.filter;if(t)return Object.fromEntries(Object.entries(t).map(([e,t])=>[e,String(t)]))},[e.relation?.filter]),d=(0,P.useMemo)(()=>t==null||t===``?[]:c?(Array.isArray(t)?t:Xe(t,[])).map(String):[String(t)],[t,c]),{records:f,loadState:p}=tt(o,s,l,u),m=ge(o,s,d),h=jr(o,s),g=(0,P.useMemo)(()=>{let e=new Map(f.map(e=>[String(e.id),e]));for(let[t,n]of m)e.has(t)||e.set(t,n);return[...e.entries()].map(([e,t])=>{let n=h?hm(h,t):{title:e,icon:void 0,subtitle:void 0};return{value:e,title:n.title||e,...n.icon&&{icon:n.icon},...n.subtitle&&{subtitle:n.subtitle}}})},[f,m,h]);return p===`loading`?(0,F.jsxDEV)(`p`,{className:`text-muted-foreground text-sm py-1`,children:i(`form.loading`)},void 0,!1,{fileName:wm,lineNumber:114,columnNumber:39},this):p===`error`?(0,F.jsxDEV)(`p`,{className:`text-destructive text-sm py-1`,children:i(`form.loadError`)},void 0,!1,{fileName:wm,lineNumber:115,columnNumber:37},this):g.length?(0,F.jsxDEV)(Dt,{field:e,options:g,value:c?d:t,multiple:c,literal:!0,onPick:e=>{if(!c){r(e===``?``:Number(e));return}let t=e.map(Number);n(t.length?t:``)}},void 0,!1,{fileName:wm,lineNumber:119,columnNumber:5},this):(0,F.jsxDEV)(`p`,{className:`text-muted-foreground text-sm py-1`,children:i(`form.noRecords`)},void 0,!1,{fileName:wm,lineNumber:116,columnNumber:31},this)}function Dm({value:e}){let t=Xe(e,null);return(0,F.jsxDEV)(`span`,{className:`truncate`,children:Array.isArray(t)?t.length?String(t.length):`—`:e?`1`:`—`},void 0,!1,{fileName:wm,lineNumber:142,columnNumber:10},this)}function Om(e,t,n){if(e==null||e===``)return[];let r=String(e),i=n.labelMap?.get(r)??r;return[{value:r,rawValue:e,label:i,sort:i}]}D({kinds:[`relation`],layout:Br,Page:Tm,Inline:Dm,Picker:Em,pickerCommits:e=>e.hints.multi!==!0,keys:Om});function km({field:e,value:t}){let{t:n}=a();return(0,F.jsxDEV)(Te,{items:Array.isArray(t)?t:qt(String(t??``)),content:Tr(e,n)},void 0,!1,{fileName:wm,lineNumber:173,columnNumber:10},this)}function Am(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-48`,bare:e.bare,view:t=>e.field.hints.multiple===!0?(0,F.jsxDEV)(km,{field:e.field,value:t},void 0,!1,{fileName:wm,lineNumber:189,columnNumber:11},this):(0,F.jsxDEV)(gr,{field:e.field,value:t},void 0,!1,{fileName:wm,lineNumber:191,columnNumber:11},this),edit:(t,n)=>e.field.hints.multiple===!0?(0,F.jsxDEV)(Cm,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:wm,lineNumber:196,columnNumber:11},this):(0,F.jsxDEV)(_m,{value:t,onChange:n,field:e.field},void 0,!1,{fileName:wm,lineNumber:202,columnNumber:11},this)},void 0,!1,{fileName:wm,lineNumber:178,columnNumber:5},this)}function jm({field:e,value:t}){let{t:n}=a(),{vKey:r,uKey:i}=rn(e),o=Xe(t,null);return(0,F.jsxDEV)(`span`,{className:`truncate`,children:o?`${Ue(o[r],e)} ${fn(e,String(o[i]??``),n)}`:`—`},void 0,!1,{fileName:wm,lineNumber:222,columnNumber:10},this)}D({kinds:[`measured`],Page:Am,Inline:jm});function Mm(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:t=>{let n=e.field.hints.slots??[``],r=e.field.hints.fields;return e.field.hints.multiple===!0?(0,F.jsxDEV)(Qt,{value:t,slots:n},void 0,!1,{fileName:wm,lineNumber:248,columnNumber:11},this):(0,F.jsxDEV)(Qn,{value:t,slots:n,fields:r,recordCtx:e.recordCtx},void 0,!1,{fileName:wm,lineNumber:250,columnNumber:11},this)},edit:(t,n)=>e.field.hints.multiple===!0?(0,F.jsxDEV)(xm,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:wm,lineNumber:255,columnNumber:11},this):(0,F.jsxDEV)(bm,{field:e.field,value:t,recordCtx:e.recordCtx,onChange:n},void 0,!1,{fileName:wm,lineNumber:257,columnNumber:11},this)},void 0,!1,{fileName:wm,lineNumber:235,columnNumber:5},this)}function Nm({value:e,field:t}){let n=dn(e,(t.hints.slots??[``]).length),r=n.checks.length;return!n.text&&!n.checks.some(Boolean)?(0,F.jsxDEV)(`span`,{className:`truncate`,children:`—`},void 0,!1,{fileName:wm,lineNumber:273,columnNumber:54},this):(0,F.jsxDEV)(`span`,{className:`truncate`,children:r?`${n.checks.filter(Boolean).length}/${r}`:n.text||`—`},void 0,!1,{fileName:wm,lineNumber:275,columnNumber:10},this)}D({kinds:[`check`],layout:`block`,Page:Mm,Inline:Nm});var Pm=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/amount.tsx`;function Fm({field:e,value:t}){let{t:n}=a(),r=e.hints.unitValue;return t==null||t===``?(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`—`},void 0,!1,{fileName:Pm,lineNumber:21,columnNumber:45},this):(0,F.jsxDEV)(`span`,{className:`font-mono`,children:[Ue(t,e),r?(0,F.jsxDEV)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:n(`core.units.${String(r)}`)},void 0,!1,{fileName:Pm,lineNumber:25,columnNumber:12},this):null]},void 0,!0,{fileName:Pm,lineNumber:23,columnNumber:5},this)}function Im(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-32`,bare:e.bare,view:t=>(0,F.jsxDEV)(Fm,{field:e.field,value:t},void 0,!1,{fileName:Pm,lineNumber:41,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Cf,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:Pm,lineNumber:43,columnNumber:9},this)},void 0,!1,{fileName:Pm,lineNumber:32,columnNumber:5},this)}function Lm({field:e,value:t}){return(0,F.jsxDEV)(`span`,{className:`truncate font-mono`,children:t==null||t===``?`—`:Ue(t,e)},void 0,!1,{fileName:Pm,lineNumber:50,columnNumber:10},this)}D({kinds:[`amount`],Page:Im,Inline:Lm});var Rm=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/period.tsx`;function zm(e){let t=fi(e.parts??[]);return{fromKey:t.from??`from`,untilKey:t.until??`until`}}function Bm(e){if(Array.isArray(e))return e;if(e&&typeof e==`object`&&Object.keys(e).length)return[e];if(typeof e==`string`&&e)try{let t=JSON.parse(e);if(Array.isArray(t))return t;if(t&&typeof t==`object`&&Object.keys(t).length)return[t]}catch{}return[]}function Vm(e,t){return e?t===`datetime`?String(e).replace(`T`,` `):String(e):`…`}function Hm(e,t,n,r){return`${Vm(e[n],t)}–${Vm(e[r],t)}`}function Um({field:e,value:t,onChange:n}){let{t:r}=a();return(0,F.jsxDEV)(gm,{value:t,onChange:n,field:e,t:r},void 0,!1,{fileName:Rm,lineNumber:79,columnNumber:10},this)}function Wm({field:e,value:t}){let n=e.hints.granularity??`day`,{fromKey:r,untilKey:i}=zm(e);return(0,F.jsxDEV)(Te,{items:Bm(t),content:e=>(0,F.jsxDEV)(`span`,{className:`font-mono`,children:Hm(e,n,r,i)},void 0,!1,{fileName:Rm,lineNumber:89,columnNumber:23},this)},void 0,!1,{fileName:Rm,lineNumber:87,columnNumber:5},this)}function Gm(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,bare:e.bare,view:t=>(0,F.jsxDEV)(Wm,{field:e.field,value:t},void 0,!1,{fileName:Rm,lineNumber:104,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Um,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:Rm,lineNumber:106,columnNumber:9},this)},void 0,!1,{fileName:Rm,lineNumber:96,columnNumber:5},this)}function Km({value:e,field:t}){let n=t.hints.granularity??`day`,{fromKey:r,untilKey:i}=zm(t),a=Bm(e);return(0,F.jsxDEV)(`span`,{className:`truncate`,children:a.length?a.map(e=>Hm(e,n,r,i)).join(`, `):`—`},void 0,!1,{fileName:Rm,lineNumber:122,columnNumber:5},this)}D({kinds:[`period`],Page:Gm,Inline:Km});var qm=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/group-edit.tsx`;function Jm(e,t,n){let r=Mn(t,n);return e===`view`?r.editing?{mode:`edit`,value:r.draft,onChange:r.setDraft,actions:(0,F.jsxDEV)(Sr,{size:`xs`,busy:r.busy,onSave:()=>r.commit(),onCancel:r.cancel},void 0,!1,{fileName:qm,lineNumber:59,columnNumber:14},this)}:{mode:`view`,value:t,onChange:e=>n(e),actions:(0,F.jsxDEV)(ze,{scope:`group`,onEdit:r.beginEdit},void 0,!1,{fileName:qm,lineNumber:52,columnNumber:16},this)}:{mode:e,value:t,onChange:e=>n(e),actions:null}}function Ym(e,t){let n=e!==`view`,r=et()&&t===`view`;return{editing:n,live:r,rowTools:n||r}}var W=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/group.tsx`;function Xm({onRemove:e}){return(0,F.jsxDEV)(`div`,{className:`flex shrink-0 flex-col`,children:[(0,F.jsxDEV)(`div`,{className:`min-h-8 mb-1.5`,"aria-hidden":!0},void 0,!1,{fileName:W,lineNumber:53,columnNumber:7},this),(0,F.jsxDEV)(St,{onClick:e},void 0,!1,{fileName:W,lineNumber:54,columnNumber:7},this)]},void 0,!0,{fileName:W,lineNumber:52,columnNumber:5},this)}function Zm({index:e,count:t,children:n}){let r=t>1;return!r&&!n?null:(0,F.jsxDEV)(`div`,{className:`mb-2 flex min-w-0 flex-wrap items-baseline gap-x-4 gap-y-1 border-b border-border pb-2`,"data-testid":`row-title`,children:[r&&(0,F.jsxDEV)(`span`,{className:`text-[11px] tabular-nums text-faint`,"data-testid":`row-ordinal`,children:String(e+1).padStart(2,`0`)},void 0,!1,{fileName:W,lineNumber:78,columnNumber:9},this),n]},void 0,!0,{fileName:W,lineNumber:73,columnNumber:5},this)}function Qm(e){let t=e.view?.title??[];return{subs:t.flatMap(t=>{let n=e.fields.find(e=>ri(e)&&e.key===t);return n?[n]:[]}),inTitle:new Set(t)}}function $m({group:e,value:t,onChange:n,recordCtx:r}){let{t:i}=a(),o=Ur(),s=Array.isArray(t)?t:[],c=e.unique??[],{subs:l,inTitle:u}=Qm(e);function d(e,t,r){n(s.map((n,i)=>i===e?{...n,[t]:r}:n))}function f(t,n,a){return t.type.derived?(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:[t.type.label?(0,F.jsxDEV)(Fe,{label:i(t.type.label)},void 0,!1,{fileName:W,lineNumber:134,columnNumber:29},this):null,(0,F.jsxDEV)(We,{field:t.type,value:n[t.key]??``,mode:`view`,bare:!0,recordCtx:r},void 0,!1,{fileName:W,lineNumber:135,columnNumber:11},this)]},t.key,!0,{fileName:W,lineNumber:133,columnNumber:9},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:(0,F.jsxDEV)(We,{field:t.type,fieldKey:t.key,value:n[t.key]??``,excludeValues:kr(s,c,t.key,a),onChange:e=>d(a,t.key,e),label:t.type.label?i(t.type.label):void 0,mode:`edit`,recordCtx:r,error:li(e)?o([e.key,a,t.key]):void 0},void 0,!1,{fileName:W,lineNumber:144,columnNumber:9},this)},t.key,!1,{fileName:W,lineNumber:143,columnNumber:7},this)}function p(t,i){return(0,F.jsxDEV)(rt,{values:t,children:(0,F.jsxDEV)(S,{children:[(0,F.jsxDEV)(Zm,{index:i,count:s.length,children:l.length>0?l.map(e=>(0,F.jsxDEV)(`div`,{className:`flex min-w-0 items-baseline ${Gt(e.type)}`.trim(),children:(0,F.jsxDEV)(We,{field:e.type,fieldKey:e.key,value:t[e.key]??``,onChange:t=>d(i,e.key,t),mode:`edit`,bare:!0,recordCtx:r},void 0,!1,{fileName:W,lineNumber:169,columnNumber:21},this)},e.key,!1,{fileName:W,lineNumber:168,columnNumber:19},this)):null},void 0,!1,{fileName:W,lineNumber:165,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`flex items-start gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`flex-1 min-w-0`,children:(0,F.jsxDEV)(qe,{scroll:e.display===`scroll`,items:e.fields.flatMap((e,n)=>ri(e)&&u.has(e.key)?[]:ii(e)?!li(e)&&e.display===`scroll`?[{key:e.label??`flow`,span:12,node:(0,F.jsxDEV)(qe,{scroll:!0,items:e.fields.flatMap(e=>ri(e)?[{key:e.key,node:f(e,t,i)}]:[])},void 0,!1,{fileName:W,lineNumber:198,columnNumber:29},this)}]:[{key:e.key??e.label??`g`,span:pt(e),node:(0,F.jsxDEV)(lh,{group:e,value:t[e.key],onChange:t=>d(i,e.key,t),recordCtx:r,mode:`edit`},void 0,!1,{fileName:W,lineNumber:215,columnNumber:27},this)}]:ri(e)?[{key:e.key,span:pt(e),node:f(e,t,i)}]:[])},void 0,!1,{fileName:W,lineNumber:184,columnNumber:15},this)},void 0,!1,{fileName:W,lineNumber:183,columnNumber:13},this),(0,F.jsxDEV)(Xm,{onRemove:()=>n(s.filter((e,t)=>t!==i))},void 0,!1,{fileName:W,lineNumber:233,columnNumber:13},this)]},void 0,!0,{fileName:W,lineNumber:182,columnNumber:11},this)]},void 0,!0,{fileName:W,lineNumber:164,columnNumber:9},this)},i,!1,{fileName:W,lineNumber:163,columnNumber:7},this)}return(0,F.jsxDEV)(`div`,{className:`flex flex-col ${ln}`,children:[s.map(p),(0,F.jsxDEV)(Mt,{onClick:()=>n([...s,{}]),children:i(`form.addRow`)},void 0,!1,{fileName:W,lineNumber:243,columnNumber:7},this)]},void 0,!0,{fileName:W,lineNumber:241,columnNumber:5},this)}function eh({group:e,value:t,onChange:n,recordCtx:r,mode:i}){let{t:o}=a(),s=En(),c=et()&&i===`view`,l=Jm(i,t,e=>n(e));return l.mode===`view`?(0,F.jsxDEV)(rh,{group:e,value:l.value,onChange:e=>l.onChange(e),recordCtx:r,actions:c?null:l.actions,editable:c},void 0,!1,{fileName:W,lineNumber:273,columnNumber:7},this):(0,F.jsxDEV)(`fieldset`,{className:`${pr(s)} flex flex-col min-w-0 ${ln}`,children:[(0,F.jsxDEV)(jt,{as:`legend`,label:o(e.label),icon:Yn(e),count:Array.isArray(l.value)?l.value.length:0,actions:l.actions},void 0,!1,{fileName:W,lineNumber:287,columnNumber:7},this),(0,F.jsxDEV)($m,{group:e,value:l.value,onChange:e=>l.onChange(e),recordCtx:r},void 0,!1,{fileName:W,lineNumber:294,columnNumber:7},this)]},void 0,!0,{fileName:W,lineNumber:286,columnNumber:5},this)}var th=e=>`${pr(e)} flex flex-col min-w-0 ${ln}`;function nh({sub:e,row:t,group:n,recordCtx:r,onChange:i,heading:o}){let{t:s}=a(),c=et()&&!!i,l=c?i:void 0;return(0,F.jsxDEV)(`div`,{className:`${o?`flex min-w-0 items-baseline`:`flex flex-col gap-0.5 min-w-0`} ${Gt(e.type)}`.trim(),children:[!o&&e.type.label?(0,F.jsxDEV)(Fe,{label:s(e.type.label)},void 0,!1,{fileName:W,lineNumber:348,columnNumber:37},this):null,(0,F.jsxDEV)(We,{field:e.type,fieldKey:c?e.key:void 0,value:t[e.key]??``,mode:`view`,bare:!c,recordCtx:r,onChange:l},void 0,!1,{fileName:W,lineNumber:349,columnNumber:7},this)]},void 0,!0,{fileName:W,lineNumber:345,columnNumber:5},this)}function rh({group:e,value:t,onChange:n,recordCtx:r,actions:i,editable:o=!1}){let{t:s}=a(),c=En(),l=Array.isArray(t)?t:[],[u,d]=(0,P.useState)([]),f=[...l,...u],p=e=>Object.values(e).some(e=>e!==``&&e!=null&&e!==!1),{subs:m,inTitle:h}=Qm(e);function g(e,t,r){let i=f.map((n,i)=>i===e?{...n,[t]:r}:n).filter(p);d([]),n(i)}function _(e){if(e<l.length){d([]),n(l.filter((t,n)=>n!==e));return}d(t=>t.filter((t,n)=>n!==e-l.length))}return(0,F.jsxDEV)(`fieldset`,{className:th(c),children:[(0,F.jsxDEV)(jt,{as:`legend`,label:s(e.label),icon:Yn(e),count:f.length,actions:i},void 0,!1,{fileName:W,lineNumber:424,columnNumber:7},this),(0,F.jsxDEV)(Ft,{depth:c+1,children:(0,F.jsxDEV)(`div`,{className:`flex flex-col ${ln}`,children:[f.map((t,n)=>(0,F.jsxDEV)(rt,{values:t,children:(0,F.jsxDEV)(S,{children:[(0,F.jsxDEV)(Zm,{index:n,count:f.length,children:m.length>0?m.map(i=>(0,F.jsxDEV)(nh,{heading:!0,sub:i,row:t,group:e,recordCtx:r,onChange:e=>g(n,i.key,e)},i.key,!1,{fileName:W,lineNumber:433,columnNumber:25},this)):null},void 0,!1,{fileName:W,lineNumber:430,columnNumber:17},this),(0,F.jsxDEV)(`div`,{className:`flex min-w-0 items-start gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(qe,{scroll:e.display===`scroll`,items:e.fields.flatMap((i,a)=>ri(i)&&h.has(i.key)?[]:ii(i)?!li(i)&&i.display===`scroll`?[{key:i.label??`flow`,span:12,node:(0,F.jsxDEV)(qe,{scroll:!0,items:i.fields.flatMap(i=>{if(!ri(i))return[];let a=i.key;return[{key:a,node:(0,F.jsxDEV)(nh,{sub:i,row:t,group:e,recordCtx:r,onChange:e=>g(n,a,e)},void 0,!1,{fileName:W,lineNumber:469,columnNumber:45},this)}]})},void 0,!1,{fileName:W,lineNumber:460,columnNumber:35},this)}]:[{key:i.key??i.label??`g`,span:pt(i),node:(0,F.jsxDEV)(lh,{group:i,value:t[i.key],onChange:e=>g(n,i.key,e),recordCtx:r,mode:`view`},void 0,!1,{fileName:W,lineNumber:492,columnNumber:33},this)}]:ri(i)?[{key:i.key,span:pt(i),node:(0,F.jsxDEV)(nh,{sub:i,row:t,group:e,recordCtx:r,onChange:e=>g(n,i.key,e)},void 0,!1,{fileName:W,lineNumber:511,columnNumber:31},this)}]:[])},void 0,!1,{fileName:W,lineNumber:447,columnNumber:21},this)},void 0,!1,{fileName:W,lineNumber:446,columnNumber:19},this),o&&(0,F.jsxDEV)(St,{className:`mt-6`,onClick:()=>_(n)},void 0,!1,{fileName:W,lineNumber:525,columnNumber:32},this)]},void 0,!0,{fileName:W,lineNumber:445,columnNumber:17},this)]},void 0,!0,{fileName:W,lineNumber:429,columnNumber:15},this)},n,!1,{fileName:W,lineNumber:428,columnNumber:13},this)),o&&(0,F.jsxDEV)(Mt,{onClick:()=>d(e=>[...e,{}]),children:s(`form.addRow`)},void 0,!1,{fileName:W,lineNumber:530,columnNumber:24},this)]},void 0,!0,{fileName:W,lineNumber:426,columnNumber:9},this)},void 0,!1,{fileName:W,lineNumber:425,columnNumber:7},this)]},void 0,!0,{fileName:W,lineNumber:423,columnNumber:5},this)}var ih=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/table-group.tsx`;function ah({group:e,value:t,onChange:n,recordCtx:r,mode:i}){let{t:o}=a(),s=Ur(),c=En(),l=e.fields.filter(e=>ri(e)||ii(e)&&!!e.kind),u=e=>e.key,d=e=>ci(e)?e.type.label:e.label,f=e=>ci(e)?{field:e.type}:{field:e,el:e},p=l.reduce((e,t,n)=>pt(t)>pt(l[e])?n:e,0),m=(e,t)=>t===p,h=e.unique??[],g=Jm(i,t,e=>n(e)),{editing:_,live:v,rowTools:y}=Ym(g.mode,i),b=Array.isArray(g.value)?g.value:[],[x,S]=(0,P.useState)([]),C=v?[...b,...x]:b,w=e=>Object.values(e).some(e=>e!==``&&e!=null&&e!==!1),T=e=>{S([]),g.onChange(v?e.filter(w):e)},E=(e,t,n)=>T(C.map((r,i)=>i===e?{...r,[t]:n}:r)),ee=e=>{if(!v||e<b.length)return T(C.filter((t,n)=>n!==e));S(t=>t.filter((t,n)=>n!==e-b.length))},te=(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`overflow-x-auto rounded-lg border border-border bg-muted shadow-2xs`,children:(0,F.jsxDEV)(`table`,{className:`w-full border-collapse text-sm`,children:[(0,F.jsxDEV)(`thead`,{children:(0,F.jsxDEV)(`tr`,{className:`border-b border-border bg-muted`,children:[l.map((e,t)=>(0,F.jsxDEV)(`th`,{className:`text-left px-3.5 py-2.5 ${m(e,t)?`w-full min-w-[140px]`:`whitespace-nowrap min-w-[90px]`}`,children:(0,F.jsxDEV)(wt,{children:d(e)?o(d(e)):``},void 0,!1,{fileName:ih,lineNumber:94,columnNumber:13},this)},u(e),!1,{fileName:ih,lineNumber:90,columnNumber:11},this)),y&&(0,F.jsxDEV)(`th`,{className:`w-10 px-2`,"aria-hidden":!0},void 0,!1,{fileName:ih,lineNumber:97,columnNumber:22},this)]},void 0,!0,{fileName:ih,lineNumber:88,columnNumber:7},this)},void 0,!1,{fileName:ih,lineNumber:87,columnNumber:5},this),(0,F.jsxDEV)(`tbody`,{className:`divide-y divide-border/30`,children:C.map((t,n)=>(0,F.jsxDEV)(rt,{values:t,children:(0,F.jsxDEV)(`tr`,{className:`align-top hover:bg-muted transition-colors`,children:[l.map((i,a)=>(0,F.jsxDEV)(`td`,{className:`px-3.5 py-2.5 min-h-10 ${m(i,a)?`min-w-[140px]`:`min-w-[90px]`} ${Gt(f(i).field)}`.trim(),children:(0,F.jsxDEV)(We,{...f(i),value:t[u(i)]??(ci(i)?``:null),excludeValues:kr(C,h,u(i),n),onChange:e=>E(n,u(i),e),fieldKey:v?u(i):void 0,mode:_?`edit`:`view`,bare:!v,recordCtx:r,error:li(e)?s([e.key,n,u(i)]):void 0},void 0,!1,{fileName:ih,lineNumber:114,columnNumber:17},this)},u(i),!1,{fileName:ih,lineNumber:110,columnNumber:15},this)),y&&(0,F.jsxDEV)(`td`,{className:`px-2 py-2 min-h-10 w-10`,children:(0,F.jsxDEV)(St,{onClick:()=>ee(n)},void 0,!1,{fileName:ih,lineNumber:129,columnNumber:17},this)},void 0,!1,{fileName:ih,lineNumber:128,columnNumber:15},this)]},void 0,!0,{fileName:ih,lineNumber:108,columnNumber:11},this)},n,!1,{fileName:ih,lineNumber:107,columnNumber:9},this))},void 0,!1,{fileName:ih,lineNumber:103,columnNumber:5},this)]},void 0,!0,{fileName:ih,lineNumber:141,columnNumber:9},this)},void 0,!1,{fileName:ih,lineNumber:140,columnNumber:7},this),y&&(0,F.jsxDEV)(Mt,{onClick:()=>v?S(e=>[...e,{}]):T([...C,{}]),children:o(`form.addRow`)},void 0,!1,{fileName:ih,lineNumber:146,columnNumber:20},this)]},void 0,!0,{fileName:ih,lineNumber:139,columnNumber:5},this);return i===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(c)} flex flex-col gap-2 min-w-0`,children:[(0,F.jsxDEV)(jt,{as:`h3`,label:o(e.label),icon:Yn(e),count:C.length,actions:v?null:g.actions},void 0,!1,{fileName:ih,lineNumber:157,columnNumber:7},this),(0,F.jsxDEV)(Ft,{depth:c+1,children:te},void 0,!1,{fileName:ih,lineNumber:164,columnNumber:7},this)]},void 0,!0,{fileName:ih,lineNumber:156,columnNumber:5},this):te}var oh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/fixed-collection.tsx`;function sh({group:e,value:t,onChange:n,recordCtx:r,mode:i=`edit`}){let{t:o}=a(),s=En(),c=Jm(i,t,e=>n(e)),l=c.mode!==`view`,u=et()&&i===`view`,d=e.view?.by,f=e.fields.find(e=>ri(e)&&e.key===d),p=e.fields.filter(e=>ri(e)&&e.key!==d),m=je(f.type),h=Array.isArray(c.value)?c.value:[],g=m.map(e=>h.find(t=>String(t[f.key]??``)===String(e.value))??{[f.key]:e.value}),_=e=>p.some(t=>e[t.key]!=null&&e[t.key]!==``);function v(e){c.onChange(e.filter(_))}let y=Ur();function b(t,n){if(!li(e))return;let r=g[t];if(!(!r||!_(r)))return y([e.key,g.slice(0,t).filter(_).length,n])}function x(e,t,n){v(g.map((r,i)=>i===e?{...r,[t]:n}:r))}return(0,F.jsxDEV)(`fieldset`,{className:`${pr(s)} flex flex-col min-w-0 ${ln}`,children:[(0,F.jsxDEV)(jt,{as:`legend`,label:o(e.label),icon:Yn(e),actions:u?null:c.actions},void 0,!1,{fileName:oh,lineNumber:95,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`flex flex-col ${ln}`,children:g.map((e,t)=>(0,F.jsxDEV)(rt,{values:e,children:(0,F.jsxDEV)(S,{children:(0,F.jsxDEV)(`div`,{className:`flex items-start gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 min-w-0 shrink-0`,children:[f.type.label?(0,F.jsxDEV)(Fe,{label:o(f.type.label)},void 0,!1,{fileName:oh,lineNumber:102,columnNumber:36},this):null,(0,F.jsxDEV)(`span`,{className:`text-sm px-1 py-2`,children:Zr(o,{options:m},String(e[f.key]??``))},void 0,!1,{fileName:oh,lineNumber:103,columnNumber:19},this)]},void 0,!0,{fileName:oh,lineNumber:101,columnNumber:17},this),(0,F.jsxDEV)(`div`,{className:`flex-1 min-w-0`,children:(0,F.jsxDEV)(qe,{items:p.map(n=>({key:n.key,span:pt(n),node:l?(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 min-w-0`,children:(0,F.jsxDEV)(We,{field:n.type,value:e[n.key]??``,onChange:e=>x(t,n.key,e),label:n.type.label?o(n.type.label):void 0,mode:`edit`,recordCtx:r,error:b(t,n.key)},void 0,!1,{fileName:oh,lineNumber:114,columnNumber:27},this)},void 0,!1,{fileName:oh,lineNumber:113,columnNumber:25},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-0.5 min-w-0 ${Gt(n.type)}`.trim(),children:[n.type.label?(0,F.jsxDEV)(Fe,{label:o(n.type.label)},void 0,!1,{fileName:oh,lineNumber:130,columnNumber:45},this):null,(0,F.jsxDEV)(We,{field:n.type,fieldKey:u?n.key:void 0,value:e[n.key]??``,onChange:u?e=>x(t,n.key,e):void 0,mode:`view`,bare:!u,recordCtx:r,error:b(t,n.key)},void 0,!1,{fileName:oh,lineNumber:131,columnNumber:27},this)]},void 0,!0,{fileName:oh,lineNumber:129,columnNumber:25},this)}))},void 0,!1,{fileName:oh,lineNumber:108,columnNumber:19},this)},void 0,!1,{fileName:oh,lineNumber:107,columnNumber:17},this)]},void 0,!0,{fileName:oh,lineNumber:100,columnNumber:15},this)},void 0,!1,{fileName:oh,lineNumber:99,columnNumber:13},this)},String(e[f.key]),!1,{fileName:oh,lineNumber:98,columnNumber:11},this))},void 0,!1,{fileName:oh,lineNumber:96,columnNumber:7},this)]},void 0,!0,{fileName:oh,lineNumber:94,columnNumber:5},this)}var ch=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/group-field.tsx`;function lh({group:e,value:t,onChange:n,recordCtx:r,mode:i}){let{t:o}=a(),s=et()&&i===`view`,c=Ur(),l=e.kind?vt({kind:e.kind}):void 0;if(l)return(0,F.jsxDEV)(gn,{field:e,value:t,commit:n,children:(0,F.jsxDEV)(l.Page,{el:e,value:t,mode:i,recordCtx:r},void 0,!1,{fileName:ch,lineNumber:56,columnNumber:9},this)},void 0,!1,{fileName:ch,lineNumber:55,columnNumber:7},this);if(ni(e)&&e.fixed)return(0,F.jsxDEV)(sh,{group:e,value:t,onChange:e=>n(e),recordCtx:r,mode:i},void 0,!1,{fileName:ch,lineNumber:63,columnNumber:7},this);if(ni(e)&&e.display===`scroll`)return(0,F.jsxDEV)(ah,{group:e,value:t,onChange:e=>n(e),recordCtx:r,mode:i},void 0,!1,{fileName:ch,lineNumber:77,columnNumber:7},this);if(ni(e))return(0,F.jsxDEV)(eh,{group:e,value:t,onChange:e=>n(e),recordCtx:r,mode:i},void 0,!1,{fileName:ch,lineNumber:90,columnNumber:7},this);if(ai(e)){let a=t??{},l=(e,t)=>n({...a,[e]:t}),u=e.fields.filter(e=>ri(e));return(0,F.jsxDEV)(rt,{values:a,children:(0,F.jsxDEV)(`fieldset`,{className:`flex flex-col min-w-0 ${ln}`,children:[(0,F.jsxDEV)(jt,{as:`legend`,label:o(e.label),icon:Yn(e)},void 0,!1,{fileName:ch,lineNumber:110,columnNumber:11},this),(0,F.jsxDEV)(S,{children:(0,F.jsxDEV)(qe,{items:u.map(t=>({key:t.key,span:pt(t),node:(0,F.jsxDEV)(We,{field:t.type,fieldKey:s?t.key:void 0,value:a[t.key]??``,onChange:e=>l(t.key,e),label:t.type.label?o(t.type.label):void 0,mode:i,recordCtx:r,error:li(e)?c([e.key,t.key]):void 0},void 0,!1,{fileName:ch,lineNumber:119,columnNumber:19},this)}))},void 0,!1,{fileName:ch,lineNumber:114,columnNumber:13},this)},void 0,!1,{fileName:ch,lineNumber:113,columnNumber:11},this)]},void 0,!0,{fileName:ch,lineNumber:109,columnNumber:9},this)},void 0,!1,{fileName:ch,lineNumber:108,columnNumber:7},this)}return null}var uh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/storage-group.tsx`;function dh({el:e,value:t,recordCtx:n,mode:r}){let{write:i}=Kn();return(0,F.jsxDEV)(lh,{group:e,value:t,onChange:e=>void i(e),recordCtx:n,mode:r===`view`?`view`:`edit`},void 0,!1,{fileName:uh,lineNumber:20,columnNumber:5},this)}function fh({el:e,value:t,recordCtx:n,mode:r}){let{write:i}=Kn();return(0,F.jsxDEV)(lh,{group:e,value:t,onChange:e=>void i(e),recordCtx:n,mode:r===`view`?`view`:`edit`},void 0,!1,{fileName:uh,lineNumber:33,columnNumber:5},this)}function ph({el:e,value:t}){let n=e,r=t&&typeof t==`object`?t:{},i=(n?.fields??[]).filter(e=>ri(e));return i.length?(0,F.jsxDEV)(rt,{values:r,children:(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-center gap-2`,children:i.map(e=>(0,F.jsxDEV)(kn,{field:e.type,value:r[e.key]},e.key,!1,{fileName:uh,lineNumber:63,columnNumber:11},this))},void 0,!1,{fileName:uh,lineNumber:61,columnNumber:7},this)},void 0,!1,{fileName:uh,lineNumber:60,columnNumber:5},this):null}D({kinds:[`collection`],layout:`block`,Page:dh,Value:ph,editor:`own`}),D({kinds:[`embedded`],layout:`block`,Page:fh,editor:`own`});var mh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/weekday-grid.tsx`,hh=[`mon`,`tue`,`wed`,`thu`,`fri`,`sat`,`sun`],gh={kind:`number`,prim:`number`,column:`real`,label:``,hints:{}};function _h({group:e,value:t,onChange:n,mode:r}){let{t:i}=a(),o=i(`weekdaysShort`,{returnObjects:!0}),s=et(),c=Array.isArray(t)?t:[],l=new Map(c.map(e=>[e.day,Number(e.value)])),u=r!==`view`,d=e.fields.slice(1).find(e=>ri(e)),f=d?.type.hints.min,p=d?.type.hints.max,m=d?.type.hints.step,h=d?{...d.type,label:``}:gh;function g(e,t){n(hh.flatMap(n=>{let r=n===e?t:l.get(n)??0;return r>0?[{day:n,value:r}]:[]}))}let _=(e,t)=>(0,F.jsxDEV)(M,{type:`number`,className:`w-full text-center px-1 [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`,min:f,max:p,step:m??`any`,value:e===0||e==null?``:String(e),onChange:e=>t(e.target.value===``?``:Number(e.target.value))},void 0,!1,{fileName:mh,lineNumber:67,columnNumber:5},this),v=Math.max(p??0,...hh.map(e=>l.get(e)??0),1),y=hh[(new Date().getDay()+6)%7],b=e=>(0,F.jsxDEV)(`div`,{className:`relative h-11 w-full overflow-hidden rounded-lg border ${e?`border-border text-primary`:`border-border text-faint`}`,children:[e>0&&(0,F.jsxDEV)(`span`,{"aria-hidden":!0,className:`absolute inset-x-0 bottom-0 bg-accent`,style:{height:`${Math.round(Math.min(e,v)/v*100)}%`}},void 0,!1,{fileName:mh,lineNumber:94,columnNumber:9},this),(0,F.jsxDEV)(`span`,{className:`relative flex h-full items-center justify-center text-sm font-semibold tabular-nums`,children:e||(0,F.jsxDEV)(k,{},void 0,!1,{fileName:mh,lineNumber:103,columnNumber:15},this)},void 0,!1,{fileName:mh,lineNumber:102,columnNumber:7},this)]},void 0,!0,{fileName:mh,lineNumber:86,columnNumber:5},this);return!u&&!s&&!c.some(e=>Number(e.value)>0)?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:mh,lineNumber:111,columnNumber:83},this):(0,F.jsxDEV)(`div`,{className:`flex ${Ce}`,children:(0,F.jsxDEV)(`div`,{className:`grid grid-cols-[repeat(7,minmax(2.25rem,1fr))] gap-1.5 w-full max-w-72`,children:hh.map((e,t)=>{let n=l.get(e)??0;return(0,F.jsxDEV)(`div`,{className:`flex flex-col items-stretch gap-1 min-w-0 text-center`,children:[(0,F.jsxDEV)(`span`,{className:`text-[10px] ${e===y?`font-semibold text-primary`:`text-muted-foreground`}`,children:o[t]},void 0,!1,{fileName:mh,lineNumber:128,columnNumber:15},this),s?(0,F.jsxDEV)(we,{field:h,value:n||``,geom:`none`,width:`w-full`,view:()=>b(n),edit:_,onCommit:t=>g(e,Number(t)||0)},void 0,!1,{fileName:mh,lineNumber:132,columnNumber:17},this):u?_(n||``,t=>g(e,Number(t)||0)):b(n)]},e,!0,{fileName:mh,lineNumber:127,columnNumber:13},this)})},void 0,!1,{fileName:mh,lineNumber:120,columnNumber:7},this)},void 0,!1,{fileName:mh,lineNumber:116,columnNumber:5},this)}var vh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/url-widget.tsx`;function yh({value:e,onChange:t,mode:n}){let r=e??null;if(n===`view`){let e=zl(r);return e?(0,F.jsxDEV)(`a`,{href:Bl(r),target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline text-sm break-all`,children:[e,` `,(0,F.jsxDEV)(Wl,{size:12},void 0,!1,{fileName:vh,lineNumber:34,columnNumber:16},this)]},void 0,!0,{fileName:vh,lineNumber:28,columnNumber:7},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:vh,lineNumber:26,columnNumber:23},this)}return(0,F.jsxDEV)(M,{type:`text`,inputMode:`url`,value:zl(r),onChange:e=>t(Rl(e.target.value))},void 0,!1,{fileName:vh,lineNumber:40,columnNumber:10},this)}var bh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/checklist-group.tsx`;function xh({group:e,value:t,onChange:n,recordCtx:r,mode:i}){let{t:o}=a(),s=En(),c=Ur(),l=(t,n)=>li(e)?c([e.key,t,n]):void 0,u=e.fields.filter(e=>ri(e)&&/^check\d+$/.test(e.key)),d=e.fields.filter(e=>ri(e)&&!/^check\d+$/.test(e.key)),f=d.map(e=>({key:e.key,type:e.type})),p=d.find(e=>e.key===`text`),m=u.map(e=>e.type.label??``),h=Jm(i,t,e=>n(e)),g=Array.isArray(h.value)?h.value:[],{rowId:_,updateRow:v,removeRow:y}=Vn(g,h.onChange),{editing:b,live:x,rowTools:S}=Ym(h.mode,i),C=e=>({text:p?String(e[p.key]??``):``,checks:u.map(t=>e[t.key]===!0)}),w=(e,t)=>{let n={...t};return u.forEach((t,r)=>{n[t.key]=e.checks[r]===!0}),p&&(n[p.key]=e.text),n},T=(e,t,n)=>(0,F.jsxDEV)(we,{field:{...n.type,hints:{...n.type.hints,noLabel:!0}},label:n.type.label?o(n.type.label):void 0,value:e[n.key]===!0,error:l(t,n.key),geom:`none`,width:`w-fit`,view:(e,t)=>(0,F.jsxDEV)(Vt,{checked:e===!0,disabled:!t,"aria-label":n.type.label?o(n.type.label):void 0,onCheckedChange:e=>t?.(e===!0)},void 0,!1,{fileName:bh,lineNumber:92,columnNumber:9},this),edit:(e,t)=>(0,F.jsxDEV)(Vt,{checked:e===!0,onCheckedChange:e=>t(e===!0)},void 0,!1,{fileName:bh,lineNumber:99,columnNumber:25},this),onCommit:r=>v(t,{...e,[n.key]:r===!0})},n.key,!1,{fileName:bh,lineNumber:81,columnNumber:5},this),E=(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2 min-w-0`,children:[(0,F.jsxDEV)(`ul`,{className:`flex flex-col gap-1.5`,children:g.map((e,t)=>(0,F.jsxDEV)(`li`,{children:(0,F.jsxDEV)(xn,{row:C(e),slotCount:m.length,editing:b,checkCells:x?u.map(n=>T(e,t,n)):void 0,onChange:n=>v(t,w(n,e)),onRemove:S?()=>y(t):void 0,content:(0,F.jsxDEV)(rr,{fields:f,row:e,editing:b,onChange:(n,r)=>v(t,{...e,[n]:r}),error:e=>l(t,e),recordCtx:r},void 0,!1,{fileName:bh,lineNumber:119,columnNumber:19},this)},void 0,!1,{fileName:bh,lineNumber:111,columnNumber:15},this)},_(e),!1,{fileName:bh,lineNumber:110,columnNumber:13},this))},void 0,!1,{fileName:bh,lineNumber:106,columnNumber:7},this),S&&(0,F.jsxDEV)(Mt,{onClick:()=>h.onChange([...g,{}]),children:o(`form.addRow`)},void 0,!1,{fileName:bh,lineNumber:133,columnNumber:20},this),(0,F.jsxDEV)(Ot,{slots:m},void 0,!1,{fileName:bh,lineNumber:134,columnNumber:7},this)]},void 0,!0,{fileName:bh,lineNumber:105,columnNumber:5},this);return i===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(s)} flex flex-col gap-1 min-w-0`,children:[(0,F.jsxDEV)(jt,{as:`h3`,label:o(e.label),count:g.length,actions:!x&&h.actions},void 0,!1,{fileName:bh,lineNumber:146,columnNumber:7},this),(0,F.jsxDEV)(Ft,{depth:s+1,children:E},void 0,!1,{fileName:bh,lineNumber:147,columnNumber:7},this)]},void 0,!0,{fileName:bh,lineNumber:145,columnNumber:5},this):E}var Sh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/two-cell-group.tsx`;function Ch(e,t){return{kind:t,label:``,prim:t,column:`text`,hints:{},parts:e.fields.map(e=>{let t=e;return{role:t.key,key:t.key,meta:t.type,mode:t.type.derived?`computedStored`:`stored`,overridden:!1}})}}function wh(e){let{RowEdit:t,RowLive:n,Body:r}=e;return function({el:i,value:o,mode:s}){let{t:c}=a(),l=En(),{write:u}=Kn(),d=Ur(),f=i,p=Ch(f,e.kind),m=Jm(s,o,u),h=Array.isArray(m.value)?m.value:[],{editing:g,live:_,rowTools:v}=Ym(m.mode,s),{rowId:y,updateRow:b,removeRow:x}=Vn(h,m.onChange),S=e=>t=>li(f)?d([f.key,e,t]):void 0,C=(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-col ${e.rowGap}`,"data-testid":e.testid,children:[h.map((e,i)=>(0,F.jsxDEV)(`div`,{className:`flex items-start gap-2`,children:[g?(0,F.jsxDEV)(t,{meta:p,row:e,onChange:e=>b(i,e),error:S(i)},void 0,!1,{fileName:Sh,lineNumber:127,columnNumber:15},this):_?(0,F.jsxDEV)(n,{meta:p,row:e,onChange:e=>b(i,e),error:S(i)},void 0,!1,{fileName:Sh,lineNumber:129,columnNumber:15},this):(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(r,{field:p,value:e},void 0,!1,{fileName:Sh,lineNumber:132,columnNumber:17},this)},void 0,!1,{fileName:Sh,lineNumber:131,columnNumber:15},this),v&&(0,F.jsxDEV)(St,{onClick:()=>x(i)},void 0,!1,{fileName:Sh,lineNumber:135,columnNumber:26},this)]},y(e),!0,{fileName:Sh,lineNumber:125,columnNumber:11},this)),v&&(0,F.jsxDEV)(Mt,{onClick:()=>m.onChange([...h,{}]),children:c(`form.addRow`)},void 0,!1,{fileName:Sh,lineNumber:138,columnNumber:22},this)]},void 0,!0,{fileName:Sh,lineNumber:123,columnNumber:7},this);return s===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(l)} flex min-w-0 flex-col gap-1`,children:[(0,F.jsxDEV)(jt,{as:`h3`,label:c(f.label),count:h.length},void 0,!1,{fileName:Sh,lineNumber:151,columnNumber:9},this),(0,F.jsxDEV)(Ft,{depth:l+1,children:C},void 0,!1,{fileName:Sh,lineNumber:152,columnNumber:9},this)]},void 0,!0,{fileName:Sh,lineNumber:150,columnNumber:7},this):C}}var Th=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/illustrated-group.tsx`;function Eh({meta:e,row:t,onChange:n,error:r}){let{tKey:i,iKey:a}=zp(e),{width:o}=Vp(e),s=Hp(e),c=t[i],l=t[a],u=e.parts?.find(e=>e.role===`text`),d=u!=null&&u.mode!==`stored`,f=e.parts?.find(e=>e.role===`image`),p=f!=null&&f.mode!==`stored`,m=l!=null&&l!==``?Nn(l)[0]:void 0;return(0,F.jsxDEV)(`div`,{className:`flex flex-1 flex-col gap-3 min-w-0`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[p?(0,F.jsxDEV)(`div`,{className:`text-sm text-muted-foreground`,children:m?(0,F.jsxDEV)(Wp,{name:m.name,width:o,kind:s},void 0,!1,{fileName:Th,lineNumber:53,columnNumber:20},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:Th,lineNumber:53,columnNumber:87},this)},void 0,!1,{fileName:Th,lineNumber:52,columnNumber:11},this):(0,F.jsxDEV)(_t,{value:l??``,onChange:e=>n({...t,[a]:wr(e)}),width:o,poster:s===`poster`},void 0,!1,{fileName:Th,lineNumber:56,columnNumber:11},this),(0,F.jsxDEV)(dr,{error:r?.(a)},void 0,!1,{fileName:Th,lineNumber:63,columnNumber:9},this)]},void 0,!0,{fileName:Th,lineNumber:50,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[d?(0,F.jsxDEV)(`p`,{className:`text-[15px] text-muted-foreground whitespace-pre-wrap`,children:c!=null&&c!==``?String(c):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:Th,lineNumber:68,columnNumber:59},this)},void 0,!1,{fileName:Th,lineNumber:67,columnNumber:11},this):(0,F.jsxDEV)(_i,{value:c==null?``:String(c),onChange:e=>n({...t,[i]:wr(e.target.value)})},void 0,!1,{fileName:Th,lineNumber:71,columnNumber:11},this),(0,F.jsxDEV)(dr,{error:r?.(i)},void 0,!1,{fileName:Th,lineNumber:76,columnNumber:9},this)]},void 0,!0,{fileName:Th,lineNumber:65,columnNumber:7},this)]},void 0,!0,{fileName:Th,lineNumber:49,columnNumber:5},this)}function Dh({meta:e,row:t,onChange:n,error:r}){let{tKey:i,iKey:a}=zp(e),{width:o,side:s}=Vp(e),c=Hp(e),l=t[i],u=t[a],d=e.parts?.find(e=>e.role===`text`),f=d!=null&&d.mode!==`stored`,p=e.parts?.find(e=>e.role===`image`),m=p!=null&&p.mode!==`stored`;return(0,F.jsxDEV)(`div`,{className:`flex-1 min-w-0`,children:(0,F.jsxDEV)(Gp,{width:o,side:s,picture:(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(Jp,{image:u,fixed:m,width:o,kind:c,onChange:m?void 0:e=>n({...t,[a]:wr(e)})},void 0,!1,{fileName:Th,lineNumber:109,columnNumber:13},this),(0,F.jsxDEV)(dr,{error:r?.(a)},void 0,!1,{fileName:Th,lineNumber:116,columnNumber:13},this)]},void 0,!0,{fileName:Th,lineNumber:108,columnNumber:11},this),prose:(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(Yp,{text:l,fixed:f,meta:d?.meta??e,onChange:f?void 0:e=>n({...t,[i]:wr(e)})},void 0,!1,{fileName:Th,lineNumber:121,columnNumber:13},this),(0,F.jsxDEV)(dr,{error:r?.(i)},void 0,!1,{fileName:Th,lineNumber:127,columnNumber:13},this)]},void 0,!0,{fileName:Th,lineNumber:120,columnNumber:11},this)},void 0,!1,{fileName:Th,lineNumber:104,columnNumber:7},this)},void 0,!1,{fileName:Th,lineNumber:101,columnNumber:5},this)}D({kinds:[`illustratedList`],layout:`block`,Page:wh({kind:`illustrated`,testid:`illustrated-list`,rowGap:`gap-4`,RowEdit:Eh,RowLive:Dh,Body:Kp}),editor:`own`});var Oh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/attachment-group.tsx`;function kh({meta:e,row:t,onChange:n,error:r}){let{lKey:i,fKey:a}=$p(e),o=tm(e),s=t[i],c=t[a],l=nm(e,`label`),u=nm(e,`file`);return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[l?(0,F.jsxDEV)(`p`,{className:`text-[15px] text-muted-foreground`,children:s!=null&&s!==``?String(s):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:Oh,lineNumber:48,columnNumber:62},this)},void 0,!1,{fileName:Oh,lineNumber:47,columnNumber:11},this):(0,F.jsxDEV)(M,{value:s==null?``:String(s),onChange:e=>n({...t,[i]:wr(e.target.value)})},void 0,!1,{fileName:Oh,lineNumber:51,columnNumber:11},this),(0,F.jsxDEV)(dr,{error:r?.(i)},void 0,!1,{fileName:Oh,lineNumber:56,columnNumber:9},this)]},void 0,!0,{fileName:Oh,lineNumber:45,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[u?(0,F.jsxDEV)(Np,{kind:o,value:c??``},void 0,!1,{fileName:Oh,lineNumber:60,columnNumber:11},this):(0,F.jsxDEV)(Ap,{kind:o,value:c??``,onChange:e=>n({...t,[a]:wr(e)})},void 0,!1,{fileName:Oh,lineNumber:62,columnNumber:11},this),(0,F.jsxDEV)(dr,{error:r?.(a)},void 0,!1,{fileName:Oh,lineNumber:68,columnNumber:9},this)]},void 0,!0,{fileName:Oh,lineNumber:58,columnNumber:7},this)]},void 0,!0,{fileName:Oh,lineNumber:44,columnNumber:5},this)}function Ah({meta:e,row:t,onChange:n,error:r}){let{lKey:i,fKey:a}=$p(e),o=tm(e),s=t[i],c=t[a],l=e.parts?.find(e=>e.role===`label`),u=nm(e,`label`),d=nm(e,`file`);return(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(rm,{name:(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(sm,{label:s,fixed:u,meta:l?.meta??e,onChange:u?void 0:e=>n({...t,[i]:wr(e)})},void 0,!1,{fileName:Oh,lineNumber:96,columnNumber:13},this),(0,F.jsxDEV)(dr,{error:r?.(i)},void 0,!1,{fileName:Oh,lineNumber:102,columnNumber:13},this)]},void 0,!0,{fileName:Oh,lineNumber:95,columnNumber:11},this),file:(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(om,{file:c,fixed:d,kind:o,onChange:d?void 0:e=>n({...t,[a]:wr(e)})},void 0,!1,{fileName:Oh,lineNumber:107,columnNumber:13},this),(0,F.jsxDEV)(dr,{error:r?.(a)},void 0,!1,{fileName:Oh,lineNumber:113,columnNumber:13},this)]},void 0,!0,{fileName:Oh,lineNumber:106,columnNumber:11},this)},void 0,!1,{fileName:Oh,lineNumber:93,columnNumber:7},this)},void 0,!1,{fileName:Oh,lineNumber:90,columnNumber:5},this)}D({kinds:[`attachmentList`],layout:`block`,Page:wh({kind:`attachment`,testid:`attachment-list`,rowGap:`gap-3`,RowEdit:kh,RowLive:Ah,Body:am}),editor:`own`});var jh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/widgets/group-widgets.tsx`;function Mh({el:e,value:t,mode:n,bare:r}){let{t:i}=a(),{write:o}=Kn(),s=e,c=(0,F.jsxDEV)(_h,{group:s,value:t,onChange:e=>void o(e),mode:n},void 0,!1,{fileName:jh,lineNumber:28,columnNumber:18},this);return r?c:(0,F.jsxDEV)(`div`,{className:`group/field flex flex-col min-w-0 ${ln}`,children:[s.label&&(0,F.jsxDEV)(Fe,{label:i(s.label)},void 0,!1,{fileName:jh,lineNumber:34,columnNumber:23},this),c]},void 0,!0,{fileName:jh,lineNumber:33,columnNumber:5},this)}var Nh={kind:`url`,prim:`text`,column:`text`,label:``,hints:{}};function Ph({el:e,value:t,mode:n,bare:r}){let{t:i}=a(),o=Kn(),s=e,c=et(),l=(e,t,n)=>(0,F.jsxDEV)(yh,{value:t,onChange:e=>n(e),mode:e},void 0,!1,{fileName:jh,lineNumber:61,columnNumber:5},this);return r?l(n===`view`?`view`:`edit`,t,e=>void o.write(e)):c&&o.writable?(0,F.jsxDEV)(we,{field:Nh,value:t,label:s.label?i(s.label):void 0,geom:`none`,width:`w-full`,view:e=>l(`view`,e,()=>{}),edit:(e,t)=>l(`edit`,e,t),onCommit:o.write},void 0,!1,{fileName:jh,lineNumber:66,columnNumber:7},this):(0,F.jsxDEV)(`div`,{className:`group/field flex flex-col min-w-0 ${ln}`,children:[s.label&&(0,F.jsxDEV)(Fe,{label:i(s.label)},void 0,!1,{fileName:jh,lineNumber:81,columnNumber:23},this),l(n===`view`?`view`:`edit`,t,e=>void o.write(e))]},void 0,!0,{fileName:jh,lineNumber:80,columnNumber:5},this)}function Fh({el:e,value:t,recordCtx:n,mode:r}){let{write:i}=Kn();return(0,F.jsxDEV)(xh,{group:e,value:t,onChange:e=>void i(e),recordCtx:n,mode:r},void 0,!1,{fileName:jh,lineNumber:90,columnNumber:5},this)}D({kinds:[`per-weekday`],layout:`block`,Page:Mh,editor:`own`}),D({kinds:[`url`],layout:`block`,Page:Ph,activate:`value`}),D({kinds:[`checklist`],layout:`block`,Page:Fh,editor:`own`});var Ih=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/actions/TemplateHost.tsx`,Lh=new Map;function Rh(e){let t=fe(e);if(!t)return null;let n=Lh.get(e);return n||(n=(0,P.lazy)(t),Lh.set(e,n)),n}var zh=class extends P.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}render(){return this.state.failed?this.props.fallback:this.props.children}};function Bh({name:e,data:t}){let{t:n}=a(),r=(0,F.jsxDEV)(F.Fragment,{children:n(`actions.notice`)},void 0,!1,{fileName:Ih,lineNumber:33,columnNumber:20},this),i=Rh(e);return i?(0,F.jsxDEV)(zh,{fallback:r,children:(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(lr,{},void 0,!1,{fileName:Ih,lineNumber:41,columnNumber:27},this),children:(0,F.jsxDEV)(i,{data:t,t:n},void 0,!1,{fileName:Ih,lineNumber:42,columnNumber:9},this)},void 0,!1,{fileName:Ih,lineNumber:41,columnNumber:7},this)},void 0,!1,{fileName:Ih,lineNumber:40,columnNumber:5},this):(console.warn(`[template] unknown '${e}'`),r)}var Vh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/actions/PopupBody.tsx`;function Hh({ui:e}){let{t}=a();return(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(or,{children:e.title?t(e.title,e.params):t(`actions.notice`)},void 0,!1,{fileName:Vh,lineNumber:11,columnNumber:7},this),e.component?(0,F.jsxDEV)(Bh,{name:e.component.name,data:e.component.data},void 0,!1,{fileName:Vh,lineNumber:13,columnNumber:9},this):(0,F.jsxDEV)(sn,{children:t(e.message??``,e.params)},void 0,!1,{fileName:Vh,lineNumber:15,columnNumber:9},this)]},void 0,!0,{fileName:Vh,lineNumber:10,columnNumber:5},this)}var Uh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/layout-elements.tsx`;function Wh({el:e}){let t=e?.label;return t?(0,F.jsxDEV)(Oe,{label:t},void 0,!1,{fileName:Uh,lineNumber:29,columnNumber:18},this):(0,F.jsxDEV)(`hr`,{className:`border-border`},void 0,!1,{fileName:Uh,lineNumber:29,columnNumber:54},this)}function Gh({el:e}){return(0,F.jsxDEV)(`div`,{className:`rounded-lg border border-border bg-muted px-4 py-3 text-sm text-foreground`,children:(0,F.jsxDEV)(Yr,{value:E(e.text)},void 0,!1,{fileName:Uh,lineNumber:36,columnNumber:7},this)},void 0,!1,{fileName:Uh,lineNumber:35,columnNumber:5},this)}function Kh(e){let{t}=a(),n=e.el,r=e.recordCtx,[i,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(null),l=e=>{if(e.kind===`popup`){c(e);return}let n=e.component?(0,F.jsxDEV)(Bh,{name:e.component.name,data:e.component.data},void 0,!1,{fileName:Uh,lineNumber:54,columnNumber:7},this):t(e.message??``,e.params);e.variant===`success`?Qe.success(n):e.variant===`error`?Qe.error(n):Qe(n)};return(0,F.jsxDEV)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,F.jsxDEV)(N,{variant:n.variant??`outline`,onClick:async()=>{let e=ru(n.value);if(!e){Qe.error(t(`actions.actionNotFound`));return}o(!0);try{let n=await e({library:r.library,shelf:r.shelf,recordId:r.recordId??``});n?l(n):Qe.success(t(`actions.actionSuccess`))}catch(e){let n=e.ui;n?l(n):Qe.error(e instanceof Error?e.message:t(`actions.actionError`))}finally{o(!1)}},disabled:i,className:`max-w-full min-w-0`,children:[i?(0,F.jsxDEV)(lr,{},void 0,!1,{fileName:Uh,lineNumber:86,columnNumber:20},this):n.icon&&(0,F.jsxDEV)(Fn,{name:n.icon,size:16},void 0,!1,{fileName:Uh,lineNumber:86,columnNumber:45},this),(0,F.jsxDEV)(`span`,{className:`truncate`,children:t(n.label)},void 0,!1,{fileName:Uh,lineNumber:87,columnNumber:9},this)]},void 0,!0,{fileName:Uh,lineNumber:85,columnNumber:7},this),(0,F.jsxDEV)(tn,{open:!!s,onOpenChange:e=>!e&&c(null),children:(0,F.jsxDEV)(Or,{children:(0,F.jsxDEV)(hn,{children:s&&(0,F.jsxDEV)(Hh,{ui:s},void 0,!1,{fileName:Uh,lineNumber:91,columnNumber:35},this)},void 0,!1,{fileName:Uh,lineNumber:91,columnNumber:11},this)},void 0,!1,{fileName:Uh,lineNumber:90,columnNumber:9},this)},void 0,!1,{fileName:Uh,lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:Uh,lineNumber:84,columnNumber:5},this)}function qh({el:e,children:t}){let{t:n}=a(),r=e;return(0,F.jsxDEV)(ct,{label:r.label?n(r.label):void 0,icon:Yn(r),children:t},void 0,!1,{fileName:Uh,lineNumber:105,columnNumber:5},this)}D({kinds:[`divider`],layout:`block`,Page:Wh}),D({kinds:[`info`],layout:`block`,Page:Gh}),D({kinds:[`button`],layout:`scalar`,Page:Kh}),D({kinds:[`group`],layout:`block`,Page:qh,editor:`own`});var Jh=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/tristate.tsx`,Yh={unknown:`yes`,yes:`no`,no:`unknown`},Xh={yes:!0,no:!1,unknown:`indeterminate`},Zh=[`yes`,`no`,`unknown`];function Qh({value:e,onChange:t,label:n}){let{saving:r}=le(),i=e||`unknown`;return(0,F.jsxDEV)(ji,{checked:Xh[i],disabled:r,onCheckedChange:()=>t?.(Yh[i]),"aria-label":n,className:pi(`peer h-4.5 w-4.5 shrink-0 rounded border border-border bg-background transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,`data-[state=checked]:border-ring data-[state=checked]:text-primary`,`data-[state=indeterminate]:border-ring data-[state=indeterminate]:text-primary`),children:(0,F.jsxDEV)(Ai,{className:`flex items-center justify-center text-current`,children:i===`yes`?(0,F.jsxDEV)(mi,{className:`h-3.5 w-3.5`,strokeWidth:3},void 0,!1,{fileName:Jh,lineNumber:43,columnNumber:11},this):(0,F.jsxDEV)(Ei,{className:`h-3.5 w-3.5`,strokeWidth:3},void 0,!1,{fileName:Jh,lineNumber:45,columnNumber:11},this)},void 0,!1,{fileName:Jh,lineNumber:41,columnNumber:7},this)},void 0,!1,{fileName:Jh,lineNumber:29,columnNumber:5},this)}function $h({value:e}){let t=String(e||`unknown`)??`unknown`;return(0,F.jsxDEV)(ng[t]??Ei,{size:16,className:t===`yes`?`text-success`:t===`no`?`text-destructive`:`text-muted-foreground`},void 0,!1,{fileName:Jh,lineNumber:60,columnNumber:5},this)}function eg({draft:e,save:t}){let{t:n}=a();return(0,F.jsxDEV)(Dt,{options:Zh.map(e=>({value:e,title:n(`triState.${e}`)})),value:String(e||`unknown`),multiple:!1,literal:!0,search:!1,onPick:e=>t(e)},void 0,!1,{fileName:Jh,lineNumber:75,columnNumber:5},this)}function tg(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-32`,bare:e.bare,view:t=>(0,F.jsxDEV)($h,{field:e.field,value:t},void 0,!1,{fileName:Jh,lineNumber:97,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Qh,{value:String(t??``),onChange:n,label:e.label},void 0,!1,{fileName:Jh,lineNumber:98,columnNumber:30},this)},void 0,!1,{fileName:Jh,lineNumber:88,columnNumber:5},this)}var ng={yes:mi,unknown:Ei,no:vi};function rg({value:e}){let t=String(e??`unknown`);return(0,F.jsxDEV)(ng[t]??Ei,{size:16,className:t===`yes`?`text-success`:t===`no`?`text-destructive`:`text-muted-foreground`},void 0,!1,{fileName:Jh,lineNumber:112,columnNumber:5},this)}D({kinds:[`triState`],Page:tg,Inline:rg,Value:$h,Picker:eg,pickerCommits:!0});var ig=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/stepper.tsx`;function ag(e,t){let n=String(t??``),r=je(e);if(!r.length)return{state:`unlisted`,value:n};if(n===``)return{state:`empty`};let i=r.findIndex(e=>e.value===n);return i===-1?{state:`unknown`,value:n}:{state:`reached`,index:i}}function og({value:e}){let{t}=a();return(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 flex-wrap items-center gap-1.5 text-destructive`,"data-testid":`stepper-unknown`,children:[(0,F.jsxDEV)(Fn,{name:`lucide:alert-triangle`,size:14,className:`shrink-0`},void 0,!1,{fileName:ig,lineNumber:77,columnNumber:7},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis whitespace-pre font-mono text-[13px]`,children:e},void 0,!1,{fileName:ig,lineNumber:78,columnNumber:7},this),(0,F.jsxDEV)(`span`,{className:`text-xs`,children:t(`form.unknownStage`,`Stage not in the list`)},void 0,!1,{fileName:ig,lineNumber:79,columnNumber:7},this)]},void 0,!0,{fileName:ig,lineNumber:76,columnNumber:5},this)}function sg({value:e}){return e===``?(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`—`},void 0,!1,{fileName:ig,lineNumber:90,columnNumber:28},this):(0,F.jsxDEV)(`span`,{className:`inline-block max-w-full overflow-hidden text-ellipsis whitespace-pre align-bottom`,"data-testid":`stepper-unlisted`,children:e},void 0,!1,{fileName:ig,lineNumber:92,columnNumber:5},this)}function cg({field:e,value:t}){let{t:n}=a(),r=ag(e,t);if(r.state===`unlisted`)return(0,F.jsxDEV)(sg,{value:r.value},void 0,!1,{fileName:ig,lineNumber:109,columnNumber:38},this);if(r.state===`unknown`)return(0,F.jsxDEV)(og,{value:r.value},void 0,!1,{fileName:ig,lineNumber:110,columnNumber:37},this);let i=je(e),o=r.state===`reached`?r.index:-1;return(0,F.jsxDEV)(`ol`,{className:`flex min-w-0 flex-wrap items-center gap-x-1 gap-y-1.5`,"data-testid":`stepper-rail`,children:i.map((e,t)=>{let r=t<o?`passed`:t===o?`current`:`remaining`;return(0,F.jsxDEV)(`li`,{className:`flex min-w-0 items-center gap-1`,children:[t>0&&(0,F.jsxDEV)(`span`,{"aria-hidden":!0,className:`h-px w-2 shrink-0 bg-border`},void 0,!1,{fileName:ig,lineNumber:119,columnNumber:23},this),(0,F.jsxDEV)(`span`,{"data-testid":`stepper-stage-${r}`,"data-stage":e.value,className:pi(`min-w-0 truncate rounded-full border px-2 py-0.5 text-[11px] leading-4`,r===`passed`&&`border-ring text-primary`,r===`current`&&`border-ring text-primary font-semibold ring-1 ring-ring`,r===`remaining`&&`border-border text-muted-foreground`),children:n(e.title)},void 0,!1,{fileName:ig,lineNumber:120,columnNumber:13},this)]},e.value,!0,{fileName:ig,lineNumber:118,columnNumber:11},this)})},void 0,!1,{fileName:ig,lineNumber:114,columnNumber:5},this)}function lg({field:e,value:t}){let n=ag(e,t);return n.state===`unknown`?(0,F.jsxDEV)(og,{value:n.value},void 0,!1,{fileName:ig,lineNumber:151,columnNumber:37},this):(0,F.jsxDEV)(be,{field:e,value:t},void 0,!1,{fileName:ig,lineNumber:152,columnNumber:10},this)}function ug(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:t=>(0,F.jsxDEV)(cg,{field:e.field,value:t},void 0,!1,{fileName:ig,lineNumber:166,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Et,{field:e.field,value:t,onChange:n,offered:e.selectOptions},void 0,!1,{fileName:ig,lineNumber:168,columnNumber:9},this)},void 0,!1,{fileName:ig,lineNumber:157,columnNumber:5},this)}function dg({field:e,value:t}){let{t:n}=a(),r=ag(e,t);if(r.state===`unlisted`)return(0,F.jsxDEV)(sg,{value:r.value},void 0,!1,{fileName:ig,lineNumber:184,columnNumber:38},this);if(r.state===`empty`)return(0,F.jsxDEV)(`span`,{className:`truncate`,children:`—`},void 0,!1,{fileName:ig,lineNumber:185,columnNumber:35},this);if(r.state===`unknown`)return(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-center gap-1 text-destructive`,"data-testid":`stepper-inline-unknown`,children:[(0,F.jsxDEV)(Fn,{name:`lucide:alert-triangle`,size:13,className:`shrink-0`},void 0,!1,{fileName:ig,lineNumber:189,columnNumber:9},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis whitespace-pre font-mono`,children:r.value},void 0,!1,{fileName:ig,lineNumber:190,columnNumber:9},this)]},void 0,!0,{fileName:ig,lineNumber:188,columnNumber:7},this);let i=je(e).length;return(0,F.jsxDEV)(`span`,{className:`truncate`,children:[Zr(n,e,t),` `,(0,F.jsxDEV)(`span`,{className:`text-muted-foreground text-xs`,children:`${r.index+1}/${i}`},void 0,!1,{fileName:ig,lineNumber:196,columnNumber:38},this)]},void 0,!0,{fileName:ig,lineNumber:195,columnNumber:5},this)}function fg(e,t,n){if(e==null||e===``)return[];let r=ag(t,e),i=String(e),a=Zr(n.t,t,i);return[{value:i,rawValue:e,label:a,sort:r.state===`reached`?String(r.index).padStart(3,`0`):r.state===`unlisted`?a:`999${i}`}]}D({kinds:[`stepper`],layout:`block`,Page:ug,Inline:dg,Value:lg,editor:`popover`,keys:fg});var pg=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/money.tsx`;function mg(e){let t=e.hints.currencyValue;return typeof t==`string`&&t?t:void 0}function hg(e,t){if(e==null||e===``||Number.isNaN(Number(e)))return``;let n=Number(e);if(!t)return new Intl.NumberFormat(void 0,{maximumFractionDigits:2}).format(n);try{return new Intl.NumberFormat(void 0,{style:`currency`,currency:t}).format(n)}catch{return`${new Intl.NumberFormat(void 0,{maximumFractionDigits:2}).format(n)} ${ia(t)}`}}function gg({value:e,field:t}){let n=hg(e,mg(t));return n?(0,F.jsxDEV)(`span`,{children:n},void 0,!1,{fileName:pg,lineNumber:46,columnNumber:14},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:pg,lineNumber:46,columnNumber:33},this)}function _g({field:e,value:t,onChange:n}){let r=mg(e);return(0,F.jsxDEV)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[(0,F.jsxDEV)(xf,{customInput:M,className:`flex-1 min-w-0`,value:t==null||t===``?``:Number(t),thousandSeparator:!0,decimalScale:2,min:e.hints.min,max:e.hints.max,placeholder:`0.00`,onValueChange:e=>n(e.value===``?``:e.floatValue??``)},void 0,!1,{fileName:pg,lineNumber:53,columnNumber:7},this),r&&(0,F.jsxDEV)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:ia(r)},void 0,!1,{fileName:pg,lineNumber:64,columnNumber:15},this)]},void 0,!0,{fileName:pg,lineNumber:52,columnNumber:5},this)}function vg(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-40`,bare:e.bare,view:t=>(0,F.jsxDEV)(gg,{value:t,field:e.field},void 0,!1,{fileName:pg,lineNumber:80,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(_g,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:pg,lineNumber:82,columnNumber:9},this)},void 0,!1,{fileName:pg,lineNumber:71,columnNumber:5},this)}function yg({value:e,field:t}){return(0,F.jsxDEV)(gg,{value:e,field:t},void 0,!1,{fileName:pg,lineNumber:89,columnNumber:10},this)}D({kinds:[`money`],Page:vg,Inline:yg});var bg=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/range.tsx`;function xg(e){let t=fi(e.parts??[]);return{fromKey:t.from??`from`,toKey:t.to??`to`}}function Sg(e,t){let{fromKey:n,toKey:r}=xg(t),i=e&&typeof e==`object`?e:(()=>{try{let t=JSON.parse(String(e??``));return t&&typeof t==`object`?t:null}catch{return null}})();return i?{from:i[n],to:i[r]}:{}}function Cg({field:e,value:t,onChange:n}){let r=(0,P.useMemo)(()=>Sg(t,e),[t,e]),i=e.hints,a=e=>e===``?void 0:Number(e),{fromKey:o,toKey:s}=xg(e),c=e.parts?.find(e=>e.role===`from`),l=c!=null&&c.mode!==`stored`,u=e.parts?.find(e=>e.role===`to`),d=u!=null&&u.mode!==`stored`,f=e=>n(e.from==null&&e.to==null?``:{[o]:e.from,[s]:e.to});return(0,F.jsxDEV)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[l?(0,F.jsxDEV)(`div`,{className:`flex flex-1 min-w-0 items-center rounded-lg border border-transparent px-3 text-sm text-muted-foreground`,children:r.from??(0,F.jsxDEV)(k,{},void 0,!1,{fileName:bg,lineNumber:76,columnNumber:22},this)},void 0,!1,{fileName:bg,lineNumber:75,columnNumber:9},this):(0,F.jsxDEV)(M,{type:`number`,className:`flex-1 min-w-0`,placeholder:`від`,value:r.from??``,min:i.min,max:i.max,step:i.step,onChange:e=>f({from:a(e.target.value),to:r.to})},void 0,!1,{fileName:bg,lineNumber:79,columnNumber:9},this),(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`–`},void 0,!1,{fileName:bg,lineNumber:90,columnNumber:7},this),d?(0,F.jsxDEV)(`div`,{className:`flex flex-1 min-w-0 items-center rounded-lg border border-transparent px-3 text-sm text-muted-foreground`,children:r.to??(0,F.jsxDEV)(k,{},void 0,!1,{fileName:bg,lineNumber:93,columnNumber:20},this)},void 0,!1,{fileName:bg,lineNumber:92,columnNumber:9},this):(0,F.jsxDEV)(M,{type:`number`,className:`flex-1 min-w-0`,placeholder:`до`,value:r.to??``,min:i.min,max:i.max,step:i.step,onChange:e=>f({from:r.from,to:a(e.target.value)})},void 0,!1,{fileName:bg,lineNumber:96,columnNumber:9},this)]},void 0,!0,{fileName:bg,lineNumber:73,columnNumber:5},this)}function wg({value:e,field:t}){let n=Sg(e,t);return n.from==null&&n.to==null?(0,F.jsxDEV)(k,{},void 0,!1,{fileName:bg,lineNumber:113,columnNumber:46},this):(0,F.jsxDEV)(`span`,{children:[n.from??`…`,`–`,n.to??`…`]},void 0,!0,{fileName:bg,lineNumber:118,columnNumber:5},this)}function Tg(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-48`,bare:e.bare,view:t=>(0,F.jsxDEV)(wg,{value:t,field:e.field},void 0,!1,{fileName:bg,lineNumber:135,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Cg,{field:e.field,value:t,onChange:n},void 0,!1,{fileName:bg,lineNumber:137,columnNumber:9},this)},void 0,!1,{fileName:bg,lineNumber:126,columnNumber:5},this)}function Eg({value:e,field:t}){return(0,F.jsxDEV)(wg,{value:e,field:t},void 0,!1,{fileName:bg,lineNumber:144,columnNumber:10},this)}D({kinds:[`numberRange`,`realRange`],Page:Tg,Inline:Eg});var Dg=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/source.tsx`;function Og(e,t){return`${(e??``).trim().toLowerCase().replace(/[^\p{L}\p{N}.-]+/gu,`-`).replace(/^-+|-+$/g,``)||`file`}.${t}`}function kg(e,t,n){let r=e.hints.fileName;return typeof r==`string`&&r!==``?`${r}.${n}`:Og(t,n)}function Ag(e){return typeof e==`string`?e:``}function jg({field:e,label:t,value:n,onChange:r}){let{t:i}=a(),[o,s]=(0,P.useState)(!1),c=e.hints.ext??`txt`,l=kg(e,t??e.label,c),u=Ag(n),d=u.length>0,f=async e=>{if(e){s(!0);try{let t=await e.text();await r?.(t)}finally{s(!1)}}};return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2 min-w-0`,children:[(0,F.jsxDEV)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border px-3 py-2`,children:[d?(0,F.jsxDEV)(ql,{size:16,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:Dg,lineNumber:103,columnNumber:11},this):(0,F.jsxDEV)(Jl,{size:16,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:Dg,lineNumber:105,columnNumber:11},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,children:d?l:i(`source.empty`)},void 0,!1,{fileName:Dg,lineNumber:107,columnNumber:9},this),(0,F.jsxDEV)(N,{type:`button`,variant:`ghost`,size:`iconSm`,disabled:!d,onClick:()=>{let e=URL.createObjectURL(new Blob([u],{type:`text/plain;charset=utf-8`})),t=document.createElement(`a`);t.href=e,t.download=l,t.click(),setTimeout(()=>URL.revokeObjectURL(e),0)},title:i(`source.download`),"aria-label":i(`source.download`),children:(0,F.jsxDEV)(Ul,{size:15},void 0,!1,{fileName:Dg,lineNumber:117,columnNumber:11},this)},void 0,!1,{fileName:Dg,lineNumber:108,columnNumber:9},this)]},void 0,!0,{fileName:Dg,lineNumber:101,columnNumber:7},this),(0,F.jsxDEV)(it,{accept:`.${c},text/*`,busy:o,error:null,onPick:e=>void f(e),compact:!0},void 0,!1,{fileName:Dg,lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:Dg,lineNumber:100,columnNumber:5},this)}function Mg(e){let t=(t,n)=>(0,F.jsxDEV)(jg,{field:e.field,label:e.label,value:t,onChange:n},void 0,!1,{fileName:Dg,lineNumber:127,columnNumber:5},this);return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,bare:e.bare,view:(e,n)=>t(e,n),edit:(e,n)=>t(e,n)},void 0,!1,{fileName:Dg,lineNumber:130,columnNumber:5},this)}function Ng({field:e,value:t}){let{t:n}=a(),r=e.hints.ext??`txt`;return Ag(t)?(0,F.jsxDEV)(`span`,{className:`truncate font-mono text-xs`,children:kg(e,n(e.label),r)},void 0,!1,{fileName:Dg,lineNumber:151,columnNumber:10},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:Dg,lineNumber:150,columnNumber:30},this)}D({kinds:[`source`],layout:`scalar`,Page:Mg,Inline:Ng});var G=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/embed.tsx`;function Pg(e){let t=e=>!!e&&typeof e==`object`&&typeof e.url==`string`;if(Array.isArray(e))return e.filter(t);if(t(e))return[e];try{let n=JSON.parse(String(e??``));return Array.isArray(n)?n.filter(t):t(n)?[n]:[]}catch{return[]}}var Fg=e=>(e.type===`video`||e.type===`rich`)&&!!e.html;function Ig(e){try{return new URL(e).hostname}catch{return e}}function Lg(e){try{let t=new URL(e);if(t.protocol===`http:`||t.protocol===`https:`)return e}catch{}}function Rg({rec:e,onOpen:t,onRemove:n}){return(0,F.jsxDEV)(`div`,{className:`group relative @container`,children:[(0,F.jsxDEV)(`button`,{type:`button`,onClick:t,className:`flex w-full items-center gap-2 overflow-hidden rounded-lg border border-border text-left @[20rem]:flex-col @[20rem]:items-stretch @[20rem]:gap-0`,children:[(0,F.jsxDEV)(`div`,{className:`relative aspect-video w-20 shrink-0 bg-muted @[20rem]:w-full`,children:[e.thumbnail?(0,F.jsxDEV)(`img`,{src:e.thumbnail,alt:``,className:`h-full w-full object-cover`},void 0,!1,{fileName:G,lineNumber:68,columnNumber:13},this):(0,F.jsxDEV)(Xl,{className:`absolute inset-0 m-auto text-muted-foreground`,size:20},void 0,!1,{fileName:G,lineNumber:70,columnNumber:13},this),Fg(e)&&(0,F.jsxDEV)(`span`,{className:`absolute inset-0 m-auto flex h-8 w-8 items-center justify-center rounded-full bg-black/60 text-white`,children:(0,F.jsxDEV)(ut,{size:16},void 0,!1,{fileName:G,lineNumber:74,columnNumber:15},this)},void 0,!1,{fileName:G,lineNumber:73,columnNumber:13},this)]},void 0,!0,{fileName:G,lineNumber:66,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1 px-2 py-2`,children:[(0,F.jsxDEV)(`div`,{className:`truncate text-sm font-medium`,children:e.title??e.url},void 0,!1,{fileName:G,lineNumber:79,columnNumber:11},this),e.provider&&(0,F.jsxDEV)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.provider},void 0,!1,{fileName:G,lineNumber:80,columnNumber:28},this)]},void 0,!0,{fileName:G,lineNumber:78,columnNumber:9},this)]},void 0,!0,{fileName:G,lineNumber:61,columnNumber:7},this),n&&(0,F.jsxDEV)(N,{type:`button`,variant:`ghost`,size:`iconSm`,className:`absolute right-1 top-1 text-muted-foreground opacity-0 hover:text-destructive group-hover:opacity-100`,onClick:n,children:(0,F.jsxDEV)(Ke,{size:13},void 0,!1,{fileName:G,lineNumber:91,columnNumber:11},this)},void 0,!1,{fileName:G,lineNumber:84,columnNumber:9},this)]},void 0,!0,{fileName:G,lineNumber:60,columnNumber:5},this)}function zg({rec:e}){let t=e.title||Ig(e.url),n=Lg(e.url),r=`group flex items-center gap-2 overflow-hidden rounded-lg border border-border bg-muted px-3 py-2 transition-colors hover:bg-muted`,i=(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(`div`,{className:`shrink-0 text-muted-foreground group-hover:text-foreground`,children:Fg(e)?(0,F.jsxDEV)(ut,{size:16},void 0,!1,{fileName:G,lineNumber:107,columnNumber:26},this):(0,F.jsxDEV)(Xl,{size:16},void 0,!1,{fileName:G,lineNumber:107,columnNumber:47},this)},void 0,!1,{fileName:G,lineNumber:106,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`truncate text-sm font-medium`,children:t},void 0,!1,{fileName:G,lineNumber:110,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`truncate text-xs text-muted-foreground`,children:e.url},void 0,!1,{fileName:G,lineNumber:111,columnNumber:9},this)]},void 0,!0,{fileName:G,lineNumber:109,columnNumber:7},this)]},void 0,!0,{fileName:G,lineNumber:105,columnNumber:5},this);return n?(0,F.jsxDEV)(`a`,{href:n,target:`_blank`,rel:`noopener noreferrer`,className:r,children:i},void 0,!1,{fileName:G,lineNumber:117,columnNumber:5},this):(0,F.jsxDEV)(`div`,{className:r,children:i},void 0,!1,{fileName:G,lineNumber:121,columnNumber:5},this)}function Bg({rec:e,onClose:t}){let{t:n}=a(),r=Lg(e.url);return(0,F.jsxDEV)(tn,{open:!0,onOpenChange:e=>!e&&t(),children:(0,F.jsxDEV)(Or,{className:`max-w-2xl`,children:[(0,F.jsxDEV)(or,{className:`truncate`,children:e.title??e.url},void 0,!1,{fileName:G,lineNumber:132,columnNumber:9},this),Fg(e)?(0,F.jsxDEV)(`iframe`,{title:e.title??`embed`,srcDoc:e.html,sandbox:`allow-scripts allow-presentation`,allowFullScreen:!0,className:`aspect-video w-full rounded-md border-0`},void 0,!1,{fileName:G,lineNumber:134,columnNumber:11},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-3`,children:[e.thumbnail&&(0,F.jsxDEV)(`img`,{src:e.thumbnail,alt:``,className:`w-full rounded-md`},void 0,!1,{fileName:G,lineNumber:143,columnNumber:31},this),e.description&&(0,F.jsxDEV)(`p`,{className:`text-sm text-muted-foreground`,children:e.description},void 0,!1,{fileName:G,lineNumber:144,columnNumber:33},this)]},void 0,!0,{fileName:G,lineNumber:142,columnNumber:11},this),r&&(0,F.jsxDEV)(`a`,{href:r,target:`_blank`,rel:`noopener noreferrer`,children:(0,F.jsxDEV)(N,{type:`button`,variant:`outline`,className:`w-full`,children:[(0,F.jsxDEV)(Wl,{size:15},void 0,!1,{fileName:G,lineNumber:150,columnNumber:15},this),` `,n(`embed.open`)]},void 0,!0,{fileName:G,lineNumber:149,columnNumber:13},this)},void 0,!1,{fileName:G,lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:G,lineNumber:131,columnNumber:7},this)},void 0,!1,{fileName:G,lineNumber:130,columnNumber:5},this)}function Vg({value:e,onChange:t,multiple:n}){let{t:r}=a(),i=Pg(e),[o,s]=(0,P.useState)(null),[c,l]=(0,P.useState)(``),[u,d]=(0,P.useState)(!1),[f,p]=(0,P.useState)(!1),m=e=>t?.(e.length?e:``);async function h(){if(u||!c.trim())return;d(!0),p(!1);let e=await vn(c.trim());if(d(!1),!e)return p(!0);m([...i,e]),l(``)}return(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:[t?(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 gap-2 @md:grid-cols-2 @2xl:grid-cols-3`,children:i.map((e,t)=>(0,F.jsxDEV)(Rg,{rec:e,onOpen:()=>s(e),onRemove:()=>m(i.filter((e,n)=>n!==t))},`${e.url}-${t}`,!1,{fileName:G,lineNumber:196,columnNumber:13},this))},void 0,!1,{fileName:G,lineNumber:194,columnNumber:9},this):i.length>0&&(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:i.map((e,t)=>(0,F.jsxDEV)(zg,{rec:e},`${e.url}-${t}`,!1,{fileName:G,lineNumber:209,columnNumber:15},this))},void 0,!1,{fileName:G,lineNumber:207,columnNumber:11},this),t&&(n||i.length===0)&&(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1`,children:[(0,F.jsxDEV)(`div`,{className:`flex gap-2`,children:[(0,F.jsxDEV)(M,{value:c,placeholder:r(`embed.pastePlaceholder`),onChange:e=>l(e.target.value),onKeyDown:e=>e.key===`Enter`&&(e.preventDefault(),h())},void 0,!1,{fileName:G,lineNumber:217,columnNumber:13},this),(0,F.jsxDEV)(N,{type:`button`,variant:`outline`,disabled:u||!c.trim(),onClick:h,children:u?`…`:`+`},void 0,!1,{fileName:G,lineNumber:223,columnNumber:13},this)]},void 0,!0,{fileName:G,lineNumber:216,columnNumber:11},this),f&&(0,F.jsxDEV)(`span`,{className:`text-xs text-destructive`,children:r(`embed.resolveFailed`)},void 0,!1,{fileName:G,lineNumber:227,columnNumber:19},this)]},void 0,!0,{fileName:G,lineNumber:215,columnNumber:9},this),o&&(0,F.jsxDEV)(Bg,{rec:o,onClose:()=>s(null)},void 0,!1,{fileName:G,lineNumber:230,columnNumber:16},this)]},void 0,!0,{fileName:G,lineNumber:191,columnNumber:5},this)}function Hg(e){let t=e.field.hints.multiple===!0;return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:e=>(0,F.jsxDEV)(Vg,{value:e,multiple:t},void 0,!1,{fileName:G,lineNumber:252,columnNumber:20},this),edit:(e,n)=>(0,F.jsxDEV)(Vg,{value:e,onChange:n,multiple:t},void 0,!1,{fileName:G,lineNumber:254,columnNumber:9},this)},void 0,!1,{fileName:G,lineNumber:243,columnNumber:5},this)}function Ug(e){let t=Pg(e.value);if(t.length===0)return null;let n=t[0];return(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-center gap-1`,children:[Fg(n)?(0,F.jsxDEV)(ut,{size:12},void 0,!1,{fileName:G,lineNumber:266,columnNumber:26},this):(0,F.jsxDEV)(Xl,{size:12},void 0,!1,{fileName:G,lineNumber:266,columnNumber:47},this),(0,F.jsxDEV)(`span`,{className:`truncate`,children:n.title??Ig(n.url)},void 0,!1,{fileName:G,lineNumber:267,columnNumber:7},this),t.length>1&&(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:[`+`,t.length-1]},void 0,!0,{fileName:G,lineNumber:268,columnNumber:27},this)]},void 0,!0,{fileName:G,lineNumber:265,columnNumber:5},this)}D({kinds:[`embed`],layout:`block`,Page:Hg,Inline:Ug,pickerSize:`large`,activate:`value`});var Wg=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/reminder.tsx`;function Gg(){return new Date().toISOString().slice(0,10)}function Kg(e,t){return Math.round((Date.parse(e)-Date.parse(t))/864e5)}function qg(e,t,n=Gg()){if(!e)return`neutral`;let r=Kg(e,n);return r<0?`overdue`:r===0?`today`:r<=t?`soon`:`neutral`}var Jg={days:`reminder.inDays`,weeks:`reminder.inWeeks`,months:`reminder.inMonths`};function Yg(e){return e<14?{unit:`days`,count:e}:e<60?{unit:`weeks`,count:Math.round(e/7)}:{unit:`months`,count:Math.round(e/30)}}var Xg={overdue:`text-destructive`,today:`text-primary font-medium`,soon:`text-warning`,neutral:``};function Zg({field:e,value:t}){let{t:n,i18n:r}=a(),i=String(t??``);if(!i)return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:Wg,lineNumber:81,columnNumber:18},this);let o=qg(i,e.hints.lead??30),s=Kg(i,Gg()),c=null;if(o===`today`)c=n(`reminder.today`);else if(o===`overdue`)c=n(`reminder.overdue`,{days:Math.abs(s)});else if(o===`soon`){let{unit:e,count:t}=Yg(s);c=n(Jg[e],{count:t})}return(0,F.jsxDEV)(`span`,{className:Xg[o],children:[(0,F.jsxDEV)(`span`,{className:`whitespace-nowrap`,children:ot(i,r.language)},void 0,!1,{fileName:Wg,lineNumber:100,columnNumber:7},this),c?(0,F.jsxDEV)(`span`,{className:`ml-2 text-xs`,children:c},void 0,!1,{fileName:Wg,lineNumber:101,columnNumber:15},this):null]},void 0,!0,{fileName:Wg,lineNumber:96,columnNumber:5},this)}function Qg(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-40`,bare:e.bare,view:t=>(0,F.jsxDEV)(Zg,{field:e.field,value:t},void 0,!1,{fileName:Wg,lineNumber:117,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(M,{type:`date`,value:String(e??``),onChange:e=>t(e.target.value)},void 0,!1,{fileName:Wg,lineNumber:119,columnNumber:9},this)},void 0,!1,{fileName:Wg,lineNumber:108,columnNumber:5},this)}function $g({field:e,value:t}){return(0,F.jsxDEV)(Zg,{field:e,value:t},void 0,!1,{fileName:Wg,lineNumber:130,columnNumber:10},this)}D({kinds:[`reminder`],Page:Qg,Inline:$g,Picker:Jf,pickerCommits:!0});var e_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/age.tsx`;function t_(){return new Date().toISOString().slice(0,10)}function n_(e,t=t_()){if(!e)return null;let n=new Date(`${e}T00:00:00Z`),r=new Date(`${t}T00:00:00Z`);if(Number.isNaN(n.getTime())||Number.isNaN(r.getTime())||n.getTime()>r.getTime())return null;let i=r.getUTCFullYear()-n.getUTCFullYear(),a=r.getUTCMonth()-n.getUTCMonth(),o=r.getUTCDate()-n.getUTCDate();return(a<0||a===0&&o<0)&&i--,i}function r_({value:e}){let{t,i18n:n}=a(),r=String(e??``);if(!r)return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:e_,lineNumber:46,columnNumber:18},this);let i=n_(r);return(0,F.jsxDEV)(`span`,{children:[(0,F.jsxDEV)(`span`,{className:`whitespace-nowrap`,children:ot(r,n.language)},void 0,!1,{fileName:e_,lineNumber:53,columnNumber:7},this),i===null?null:(0,F.jsxDEV)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:`· ${t(`age.years`,{count:i})}`},void 0,!1,{fileName:e_,lineNumber:55,columnNumber:9},this)]},void 0,!0,{fileName:e_,lineNumber:49,columnNumber:5},this)}function i_(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-40`,bare:e.bare,view:e=>(0,F.jsxDEV)(r_,{value:e},void 0,!1,{fileName:e_,lineNumber:72,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(M,{type:`date`,value:String(e??``),onChange:e=>t(e.target.value)},void 0,!1,{fileName:e_,lineNumber:74,columnNumber:9},this)},void 0,!1,{fileName:e_,lineNumber:63,columnNumber:5},this)}function a_({value:e}){return(0,F.jsxDEV)(r_,{value:e},void 0,!1,{fileName:e_,lineNumber:85,columnNumber:10},this)}D({kinds:[`age`],Page:i_,Inline:a_,Picker:Jf,pickerCommits:!0});var o_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/timetable.tsx`;function s_(e){let t=String(e??``).trim(),n=/^([01]\d|2[0-3]):([0-5]\d)/.exec(t);return n?`${n[1]}:${n[2]}`:null}function c_(e){return Number(e.slice(0,2))*60+Number(e.slice(3,5))}function l_(e){let t=[...new Set(e.map(s_).filter(e=>e!==null))].sort((e,t)=>c_(e)-c_(t)),n=[];for(let e of t){let t=e.slice(0,2),r=n[n.length-1];r&&r.hour===t?r.minutes.push(e.slice(3,5)):n.push({hour:t,minutes:[e.slice(3,5)]})}return n}function u_(e,t){let n=s_(t);return n?[...new Set(e.map(s_).filter(e=>e!==null))].sort((e,t)=>c_(e)-c_(t)).find(e=>c_(e)>=c_(n))??null:null}function d_(){let e=new Date;return`${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}`}function f_({value:e}){let{t}=a(),n=In(e),r=l_(n);if(!r.length)return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:o_,lineNumber:87,columnNumber:28},this);let i=`${r[0].hour}:${r[0].minutes[0]}`,o=r[r.length-1],s=`${o.hour}:${o.minutes[o.minutes.length-1]}`,c=r.reduce((e,t)=>e+t.minutes.length,0),l=u_(n,d_());return(0,F.jsxDEV)(`div`,{className:`min-w-0 overflow-hidden rounded-lg border border-border`,"data-testid":`timetable`,children:[(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-baseline gap-x-3 gap-y-1 border-b border-border bg-muted px-3 py-2`,"data-testid":`timetable-header`,children:[(0,F.jsxDEV)(`span`,{className:`font-mono text-sm tabular-nums whitespace-nowrap`,children:[i,` – `,s]},void 0,!0,{fileName:o_,lineNumber:103,columnNumber:9},this),(0,F.jsxDEV)(wt,{children:t(`timetable.runs`,{count:c})},void 0,!1,{fileName:o_,lineNumber:106,columnNumber:9},this),l&&(0,F.jsxDEV)(`span`,{className:`ml-auto text-xs whitespace-nowrap text-primary`,"data-testid":`timetable-next`,children:[t(`timetable.next`),` `,(0,F.jsxDEV)(`span`,{className:`font-mono tabular-nums`,children:l},void 0,!1,{fileName:o_,lineNumber:109,columnNumber:35},this)]},void 0,!0,{fileName:o_,lineNumber:108,columnNumber:11},this)]},void 0,!0,{fileName:o_,lineNumber:99,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`columns-1 gap-x-6 px-3 py-1 [&>*]:break-inside-avoid @md:columns-2 @lg:columns-3`,children:r.map(e=>(0,F.jsxDEV)(`div`,{className:`flex items-baseline gap-3 border-b border-border py-1 last:border-b-0`,children:[(0,F.jsxDEV)(`span`,{className:`w-6 shrink-0 font-mono text-xs tabular-nums text-muted-foreground`,children:e.hour},void 0,!1,{fileName:o_,lineNumber:122,columnNumber:13},this),(0,F.jsxDEV)(`span`,{className:`flex min-w-0 flex-wrap gap-x-2 font-mono text-sm tabular-nums`,children:e.minutes.map(t=>(0,F.jsxDEV)(`span`,{className:l===`${e.hour}:${t}`?`font-semibold text-primary underline underline-offset-4`:``,children:t},t,!1,{fileName:o_,lineNumber:127,columnNumber:19},this))},void 0,!1,{fileName:o_,lineNumber:123,columnNumber:13},this)]},e.hour,!0,{fileName:o_,lineNumber:121,columnNumber:11},this))},void 0,!1,{fileName:o_,lineNumber:119,columnNumber:7},this)]},void 0,!0,{fileName:o_,lineNumber:96,columnNumber:5},this)}function p_({value:e}){let t=l_(In(e));if(!t.length)return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:o_,lineNumber:142,columnNumber:28},this);let n=t[t.length-1];return(0,F.jsxDEV)(`span`,{className:`truncate font-mono text-sm tabular-nums`,children:[t[0].hour,`:`,t[0].minutes[0],` – `,n.hour,`:`,n.minutes[n.minutes.length-1]]},void 0,!0,{fileName:o_,lineNumber:145,columnNumber:5},this)}function m_(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`none`,width:`w-full`,bare:e.bare,view:e=>(0,F.jsxDEV)(f_,{value:e},void 0,!1,{fileName:o_,lineNumber:162,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(Qf,{name:`field-${e.field.label}`,field:e.field,value:t,onChange:n},void 0,!1,{fileName:o_,lineNumber:166,columnNumber:9},this)},void 0,!1,{fileName:o_,lineNumber:153,columnNumber:5},this)}D({kinds:[`timetable`],layout:`block`,Page:m_,Inline:p_});var h_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/weight.tsx`;function g_(e){if(e==null||e===``||Number.isNaN(Number(e)))return null;let t=Number(e);return t<1e3?{n:t,unit:`g`}:{n:Number((t/1e3).toFixed(2)),unit:`kg`}}function __({value:e}){let{t}=a(),n=g_(e);return n?(0,F.jsxDEV)(`span`,{children:[n.n,` `,t(`core.units.${n.unit}`)]},void 0,!0,{fileName:h_,lineNumber:25,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:h_,lineNumber:20,columnNumber:18},this)}function v_({unit:e,onPick:t,label:n}){let{t:r}=a();return(0,F.jsxDEV)(`div`,{role:`radiogroup`,"aria-label":n,className:`flex shrink-0 rounded-lg border border-border p-0.5`,children:[`g`,`kg`].map(n=>(0,F.jsxDEV)(`button`,{type:`button`,role:`radio`,"aria-checked":n===e,onClick:()=>t(n),className:`rounded-md px-2 py-1 text-xs transition-colors ${n===e?`bg-background font-medium text-primary`:`text-muted-foreground hover:text-foreground`}`,children:r(`core.units.${n}`)},n,!1,{fileName:h_,lineNumber:43,columnNumber:9},this))},void 0,!1,{fileName:h_,lineNumber:41,columnNumber:5},this)}function y_({value:e,onChange:t,label:n}){let r=e===``?``:Number(e),[i,a]=(0,P.useState)(r!==``&&Number(r)>=1e3?`kg`:`g`),o=r===``?``:i===`kg`?Number(r)/1e3:r,s=e=>Math.round(i===`kg`?e*1e3:e);return(0,F.jsxDEV)(`div`,{className:`flex gap-2 min-w-0`,children:[(0,F.jsxDEV)(M,{type:`number`,className:`flex-1 min-w-0`,min:0,value:o,onChange:e=>t(e.target.value===``?``:String(s(Number(e.target.value))))},void 0,!1,{fileName:h_,lineNumber:69,columnNumber:7},this),(0,F.jsxDEV)(v_,{unit:i,onPick:a,label:n},void 0,!1,{fileName:h_,lineNumber:76,columnNumber:7},this)]},void 0,!0,{fileName:h_,lineNumber:68,columnNumber:5},this)}function b_(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-40`,bare:e.bare,view:e=>(0,F.jsxDEV)(__,{value:e},void 0,!1,{fileName:h_,lineNumber:92,columnNumber:20},this),edit:(t,n)=>(0,F.jsxDEV)(y_,{value:String(t??``),onChange:n,label:e.label??``},void 0,!1,{fileName:h_,lineNumber:94,columnNumber:9},this)},void 0,!1,{fileName:h_,lineNumber:83,columnNumber:5},this)}function x_({value:e}){return(0,F.jsxDEV)(__,{value:e},void 0,!1,{fileName:h_,lineNumber:101,columnNumber:10},this)}D({kinds:[`weight`],Page:b_,Inline:x_});var S_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/dimensions.tsx`;function C_(e){if(e&&typeof e==`object`)return e;try{let t=JSON.parse(String(e??``));return t&&typeof t==`object`?t:{}}catch{return{}}}function w_(e){let t=C_(e);if(t.w==null||t.h==null||t.d==null)return``;let n=e=>Number((e/10).toFixed(1));return`${n(t.w)}×${n(t.h)}×${n(t.d)} см`}function T_({value:e,onChange:t}){let n=C_(e),r=(e,r)=>{let i={...n,[e]:r===``?void 0:Math.round(Number(r))};t(i.w==null&&i.h==null&&i.d==null?``:i)},i=(e,t)=>(0,F.jsxDEV)(M,{type:`number`,min:0,className:`w-20 min-w-0`,placeholder:t,value:n[e]??``,onChange:t=>r(e,t.target.value)},void 0,!1,{fileName:S_,lineNumber:33,columnNumber:5},this);return(0,F.jsxDEV)(`div`,{className:`flex items-center gap-1 min-w-0 ${Ce}`,children:[i(`w`,`Ш`),(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`×`},void 0,!1,{fileName:S_,lineNumber:45,columnNumber:7},this),i(`h`,`В`),(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`×`},void 0,!1,{fileName:S_,lineNumber:47,columnNumber:7},this),i(`d`,`Г`),(0,F.jsxDEV)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:`мм`},void 0,!1,{fileName:S_,lineNumber:49,columnNumber:7},this)]},void 0,!0,{fileName:S_,lineNumber:43,columnNumber:5},this)}function E_({value:e}){let t=w_(e);return t?(0,F.jsxDEV)(`span`,{children:t},void 0,!1,{fileName:S_,lineNumber:59,columnNumber:14},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:S_,lineNumber:59,columnNumber:33},this)}function D_(e){return(0,F.jsxDEV)(O,{field:e.field,value:e.value,label:e.label,error:e.error,mode:e.mode,geom:`inline`,width:`w-fit`,bare:e.bare,view:e=>(0,F.jsxDEV)(E_,{value:e},void 0,!1,{fileName:S_,lineNumber:72,columnNumber:20},this),edit:(e,t)=>(0,F.jsxDEV)(T_,{value:e,onChange:t},void 0,!1,{fileName:S_,lineNumber:73,columnNumber:34},this)},void 0,!1,{fileName:S_,lineNumber:63,columnNumber:5},this)}function O_({value:e}){return(0,F.jsxDEV)(E_,{value:e},void 0,!1,{fileName:S_,lineNumber:78,columnNumber:10},this)}D({kinds:[`dimensions`],voice:`data`,Page:D_,Inline:O_});var k_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/core/backrefs.tsx`,A_=8;function j_({el:e,recordCtx:t}){let{t:n}=a(),r=e.from,i=t.recordId,[o,s]=(0,P.useState)(null);if((0,P.useEffect)(()=>{if(!i){s([]);return}let e=!0;return ir(r.library,r.shelf,{[r.field]:i}).then(t=>{e&&s(t)}),()=>{e=!1}},[i,r.library,r.shelf,r.field]),o===null)return(0,F.jsxDEV)(lr,{},void 0,!1,{fileName:k_,lineNumber:67,columnNumber:29},this);if(o.length===0)return(0,F.jsxDEV)(k,{},void 0,!1,{fileName:k_,lineNumber:71,columnNumber:33},this);let c=jr(r.library,r.shelf),l=o.slice(0,A_),u=o.length-l.length;return(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[l.map(e=>{let t=e.id;return(0,F.jsxDEV)(h,{to:`/${r.library}/${r.shelf}/${t}`,className:`inline-flex items-center gap-1.5 min-h-9 text-primary border border-transparent rounded-lg px-3 text-sm hover:border-border transition-colors`,children:c?(0,F.jsxDEV)(Hr,{shelf:c,row:e,size:`sm`,height:28},void 0,!1,{fileName:k_,lineNumber:87,columnNumber:18},this):nr(String(t))},t,!1,{fileName:k_,lineNumber:82,columnNumber:11},this)}),u>0&&(0,F.jsxDEV)(h,{to:`/${r.library}/${r.shelf}?${encodeURIComponent(r.field)}=${encodeURIComponent(i)}`,className:`inline-flex items-center min-h-9 px-3 text-sm text-muted-foreground hover:text-primary transition-colors`,children:n(`core.backrefs.more`,{count:u})},void 0,!1,{fileName:k_,lineNumber:92,columnNumber:9},this)]},void 0,!0,{fileName:k_,lineNumber:78,columnNumber:5},this)}D({kinds:[`backrefs`],layout:`block`,Page:j_});var M_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/block-shell.tsx`;function N_(e,t){return t===void 0?void 0:e.find(e=>e.name===t)}function P_(e,t){return t.map(t=>N_(e,t)).filter(e=>e!==void 0)}function F_({label:e,icon:t,children:n}){let{t:r}=a();return e?(0,F.jsxDEV)(ct,{label:r(e),icon:t,children:n},void 0,!1,{fileName:M_,lineNumber:64,columnNumber:5},this):(0,F.jsxDEV)(F.Fragment,{children:n},void 0,!1,{fileName:M_,lineNumber:62,columnNumber:22},this)}function I_(e,t){let n=e.field.label??(ri(e.field)?e.field.type.label:void 0);return n?t(n):void 0}function L_(e){return ri(e.field)?Gt(e.field.type):``}var R_=(0,P.createContext)(!1);function z_({children:e}){return(0,F.jsxDEV)(R_.Provider,{value:!0,children:e},void 0,!1,{fileName:M_,lineNumber:113,columnNumber:10},this)}function B_(){return(0,P.useContext)(R_)}function V_({handle:e}){let{t}=a(),n=I_(e,t);return n?(0,F.jsxDEV)(`span`,{className:De,children:n},void 0,!1,{fileName:M_,lineNumber:130,columnNumber:18},this):null}function H_(e){return ri(e.field)&&er(e.field.type)===`data`}var U_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/grid.tsx`,W_={2:`grid-cols-1 @sm:grid-cols-2`,3:`grid-cols-1 @sm:grid-cols-2 @3xl:grid-cols-3`,4:`grid-cols-1 @sm:grid-cols-2 @3xl:grid-cols-4`};function G_({el:e}){let t=e,n=t.view?.columns??3,r=j(),i=(0,F.jsxDEV)(`div`,{className:`grid gap-3 ${W_[n]??W_[3]}`,children:r.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0`,"data-testid":`grid-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:U_,lineNumber:32,columnNumber:13},this)},e.name,!1,{fileName:U_,lineNumber:31,columnNumber:11},this))},void 0,!1,{fileName:U_,lineNumber:27,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:i},void 0,!1,{fileName:U_,lineNumber:39,columnNumber:5},this)}D({kinds:[`grid`],layout:`block`,editor:`own`,Page:G_});var K_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/bento.tsx`,q_=`rounded-lg border border-border bg-card p-3 min-w-0`,J_={"2x1":`@sm:col-span-2`,"1x2":`@sm:row-span-2`,"2x2":`@sm:col-span-2 @sm:row-span-2`,wide:`col-span-full`};function Y_({el:e}){let t=e,n=t.view?.spans??{},r=(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 @sm:grid-cols-3 auto-rows-auto gap-3`,children:j().map((e,t)=>{if(e.handle.hidden)return null;let r=n[e.name];return(0,F.jsxDEV)(`div`,{className:`${q_} ${r?J_[r]??``:``}`,"data-testid":`bento-tile-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:K_,lineNumber:44,columnNumber:13},this)},e.name,!1,{fileName:K_,lineNumber:39,columnNumber:11},this)})},void 0,!1,{fileName:K_,lineNumber:30,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:r},void 0,!1,{fileName:K_,lineNumber:51,columnNumber:5},this)}D({kinds:[`bento`],layout:`block`,editor:`own`,Page:Y_});var X_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/split.tsx`;D({kinds:[`split`],layout:`block`,editor:`own`,Page:({el:e})=>{let t=e,[n,r]=t.view?.ratio??[1,1],i=t.view?.first??[],a=t.view?.second??[];return(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 gap-4 @sm:[grid-template-columns:var(--split)]`,style:{"--split":`${n}fr ${r}fr`},children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 space-y-3`,children:i.map(e=>(0,F.jsxDEV)(A,{name:e},e,!1,{fileName:X_,lineNumber:29,columnNumber:13},void 0))},void 0,!1,{fileName:X_,lineNumber:27,columnNumber:9},void 0),(0,F.jsxDEV)(`div`,{className:`min-w-0 space-y-3`,children:a.map(e=>(0,F.jsxDEV)(A,{name:e},e,!1,{fileName:X_,lineNumber:34,columnNumber:13},void 0))},void 0,!1,{fileName:X_,lineNumber:32,columnNumber:9},void 0)]},void 0,!0,{fileName:X_,lineNumber:23,columnNumber:7},void 0)}});var Z_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/aside.tsx`;D({kinds:[`aside`],layout:`block`,editor:`own`,Page:({el:e})=>{let t=e,n=t.view?.main??[],r=t.view?.aside??[];return(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 gap-4 @sm:grid-cols-[minmax(0,1fr)_14rem]`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 space-y-3`,children:n.map(e=>(0,F.jsxDEV)(A,{name:e},e,!1,{fileName:Z_,lineNumber:25,columnNumber:13},void 0))},void 0,!1,{fileName:Z_,lineNumber:23,columnNumber:9},void 0),(0,F.jsxDEV)(`aside`,{className:`min-w-0 space-y-2 text-sm text-muted-foreground @sm:border-l @sm:border-border @sm:pl-4`,children:r.map(e=>(0,F.jsxDEV)(A,{name:e},e,!1,{fileName:Z_,lineNumber:30,columnNumber:13},void 0))},void 0,!1,{fileName:Z_,lineNumber:28,columnNumber:9},void 0)]},void 0,!0,{fileName:Z_,lineNumber:22,columnNumber:7},void 0)}});var Q_=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/spread.tsx`;function $_({el:e}){let t=e,n=t.view?.visual,r=t.view?.quote,i=t.view?.facts??[],a=j(),o=N_(a,r),s=P_(a,i);return(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 gap-4 @sm:grid-cols-[minmax(0,1.4fr)_minmax(0,1fr)]`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:(0,F.jsxDEV)(A,{name:n},void 0,!1,{fileName:Q_,lineNumber:25,columnNumber:9},this)},void 0,!1,{fileName:Q_,lineNumber:24,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-col gap-3`,children:[o&&!o.handle.hidden&&(0,F.jsxDEV)(`blockquote`,{className:`border-l-2 border-ring pl-3 italic text-muted-foreground`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:Q_,lineNumber:30,columnNumber:13},this)},void 0,!1,{fileName:Q_,lineNumber:29,columnNumber:11},this),s.map(e=>(0,F.jsxDEV)(A,{name:e.name},e.name,!1,{fileName:Q_,lineNumber:34,columnNumber:11},this))]},void 0,!0,{fileName:Q_,lineNumber:27,columnNumber:7},this)]},void 0,!0,{fileName:Q_,lineNumber:23,columnNumber:5},this)}D({kinds:[`spread`],layout:`block`,editor:`own`,Page:$_});var ev=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/tabs.tsx`;function tv(){return(0,F.jsxDEV)(F.Fragment,{children:j().map(e=>(0,F.jsxDEV)(A,{name:e.name},e.name,!1,{fileName:ev,lineNumber:31,columnNumber:9},this))},void 0,!1,{fileName:ev,lineNumber:29,columnNumber:5},this)}function nv({el:e}){let t=e,{t:n}=a(),r=t.view?.tabs??[],[i,o]=(0,P.useState)(0);return(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[(0,F.jsxDEV)(`div`,{role:`tablist`,className:`flex flex-nowrap gap-1 overflow-x-auto border-b border-border`,children:r.map((e,t)=>(0,F.jsxDEV)(`button`,{type:`button`,role:`tab`,"aria-selected":t===i,onClick:()=>o(t),className:`flex shrink-0 items-center gap-1.5 whitespace-nowrap border-b-2 px-3 py-2 text-sm font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${t===i?`border-ring text-primary`:`border-transparent text-muted-foreground`}`,children:[e.icon&&(0,F.jsxDEV)(Fn,{name:e.icon,size:14,className:`shrink-0`},void 0,!1,{fileName:ev,lineNumber:57,columnNumber:26},this),n(e.label)]},e.name,!0,{fileName:ev,lineNumber:47,columnNumber:11},this))},void 0,!1,{fileName:ev,lineNumber:45,columnNumber:7},this),r.map((e,t)=>(0,F.jsxDEV)(`div`,{role:`tabpanel`,hidden:t!==i,className:`min-w-0 space-y-3 pt-3`,children:(0,F.jsxDEV)(sr,{name:e.name,children:(0,F.jsxDEV)(tv,{},void 0,!1,{fileName:ev,lineNumber:65,columnNumber:13},this)},void 0,!1,{fileName:ev,lineNumber:64,columnNumber:11},this)},e.name,!1,{fileName:ev,lineNumber:63,columnNumber:9},this))]},void 0,!0,{fileName:ev,lineNumber:44,columnNumber:5},this)}D({kinds:[`tabs`],layout:`block`,editor:`own`,Page:nv});var rv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/accordion.tsx`;function iv(){return(0,F.jsxDEV)(F.Fragment,{children:j().map(e=>(0,F.jsxDEV)(A,{name:e.name},e.name,!1,{fileName:rv,lineNumber:28,columnNumber:9},this))},void 0,!1,{fileName:rv,lineNumber:26,columnNumber:5},this)}function av({el:e}){let t=e,{t:n}=a();return(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-col gap-2`,children:(t.view?.sections??[]).map(e=>(0,F.jsxDEV)(`details`,{className:`rounded-lg border border-border`,open:e.open,children:[(0,F.jsxDEV)(`summary`,{className:`flex cursor-pointer items-center gap-1.5 px-3 py-2 font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[e.icon&&(0,F.jsxDEV)(Fn,{name:e.icon,size:14,className:`shrink-0`},void 0,!1,{fileName:rv,lineNumber:44,columnNumber:30},this),n(e.label)]},void 0,!0,{fileName:rv,lineNumber:43,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`space-y-3 px-3 pb-3`,children:(0,F.jsxDEV)(sr,{name:e.name,children:(0,F.jsxDEV)(iv,{},void 0,!1,{fileName:rv,lineNumber:49,columnNumber:15},this)},void 0,!1,{fileName:rv,lineNumber:48,columnNumber:13},this)},void 0,!1,{fileName:rv,lineNumber:47,columnNumber:11},this)]},e.name,!0,{fileName:rv,lineNumber:42,columnNumber:9},this))},void 0,!1,{fileName:rv,lineNumber:40,columnNumber:5},this)}D({kinds:[`accordion`],layout:`block`,editor:`own`,Page:av});var ov=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/ledger.tsx`;function sv({el:e}){let t=e,{t:n}=a(),r=(0,F.jsxDEV)(`div`,{className:`flex flex-col divide-y divide-border`,"data-testid":`ledger`,children:j().map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0 py-2`,"data-testid":`ledger-row-${t}`,children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`flex w-full min-w-0 items-baseline gap-2`,"data-testid":`ledger-leader`,children:[(0,F.jsxDEV)(`span`,{className:`shrink-0`,children:I_(e,n)},void 0,!1,{fileName:ov,lineNumber:55,columnNumber:19},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 flex-1 border-b border-dotted border-border`,"data-testid":`ledger-dots`},void 0,!1,{fileName:ov,lineNumber:56,columnNumber:19},this),(0,F.jsxDEV)(`span`,{className:`shrink-0 text-right font-medium ${L_(e)}`.trim(),children:t},void 0,!1,{fileName:ov,lineNumber:57,columnNumber:19},this)]},void 0,!0,{fileName:ov,lineNumber:54,columnNumber:17},this)},void 0,!1,{fileName:ov,lineNumber:50,columnNumber:13},this)},e.name,!1,{fileName:ov,lineNumber:49,columnNumber:11},this))},void 0,!1,{fileName:ov,lineNumber:42,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:r},void 0,!1,{fileName:ov,lineNumber:69,columnNumber:5},this)}D({kinds:[`ledger`],layout:`block`,editor:`own`,Page:sv,childWidth:`w-full`});var cv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/stats.tsx`;function lv({el:e}){let t=e,{t:n}=a(),r=(0,F.jsxDEV)(`div`,{className:`flex flex-wrap gap-x-8 gap-y-4 @sm:flex-nowrap @sm:divide-x @sm:divide-border py-1`,"data-testid":`stats`,children:j().map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1 @sm:px-5 @sm:first:pl-0`,"data-testid":`stats-item-${t}`,children:(0,F.jsxDEV)(z_,{children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`flex min-w-0 flex-col items-start gap-0.5 py-1`,"data-testid":`stats-figure`,children:[(0,F.jsxDEV)(`span`,{className:H_(e)?`min-w-0 text-2xl font-semibold text-foreground ${L_(e)}`.trim():`min-w-0 text-base font-medium text-foreground break-words`,children:t},void 0,!1,{fileName:cv,lineNumber:68,columnNumber:21},this),(0,F.jsxDEV)(`span`,{className:De,children:I_(e,n)},void 0,!1,{fileName:cv,lineNumber:77,columnNumber:21},this)]},void 0,!0,{fileName:cv,lineNumber:61,columnNumber:19},this)},void 0,!1,{fileName:cv,lineNumber:57,columnNumber:15},this)},void 0,!1,{fileName:cv,lineNumber:56,columnNumber:13},this)},e.name,!1,{fileName:cv,lineNumber:51,columnNumber:11},this))},void 0,!1,{fileName:cv,lineNumber:44,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:r},void 0,!1,{fileName:cv,lineNumber:88,columnNumber:5},this)}D({kinds:[`stats`],layout:`block`,editor:`own`,Page:lv,childWidth:`w-full`});var uv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/facets.tsx`;function dv({el:e}){let t=e,{t:n}=a(),r=(0,F.jsxDEV)(`div`,{className:`flex flex-wrap gap-2`,"data-testid":`facets`,children:j().map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0 rounded-full border border-border px-3 py-1 text-sm`,"data-testid":`facets-pill-${t}`,children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-baseline gap-1.5`,"data-testid":`facets-pair`,children:[(0,F.jsxDEV)(`span`,{className:`shrink-0`,children:I_(e,n)},void 0,!1,{fileName:uv,lineNumber:53,columnNumber:19},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 font-semibold text-foreground`,children:t},void 0,!1,{fileName:uv,lineNumber:54,columnNumber:19},this)]},void 0,!0,{fileName:uv,lineNumber:52,columnNumber:17},this)},void 0,!1,{fileName:uv,lineNumber:48,columnNumber:13},this)},e.name,!1,{fileName:uv,lineNumber:43,columnNumber:11},this))},void 0,!1,{fileName:uv,lineNumber:39,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:r},void 0,!1,{fileName:uv,lineNumber:64,columnNumber:5},this)}D({kinds:[`facets`],layout:`block`,editor:`own`,Page:dv,childWidth:`w-fit`});var fv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/prose.tsx`,pv=`first-letter:float-left first-letter:mr-2 first-letter:text-5xl first-letter:font-bold first-letter:leading-[0.8]`;function mv({el:e}){let t=e,n=t.view?.dropCap,r=(0,F.jsxDEV)(`div`,{className:`max-w-[65ch] space-y-3 font-serif text-base leading-relaxed`,"data-testid":`prose`,children:j().map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0 ${e.name===n?pv:``}`,"data-testid":`prose-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:fv,lineNumber:35,columnNumber:13},this)},e.name,!1,{fileName:fv,lineNumber:30,columnNumber:11},this))},void 0,!1,{fileName:fv,lineNumber:26,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:r},void 0,!1,{fileName:fv,lineNumber:42,columnNumber:5},this)}D({kinds:[`prose`],layout:`block`,editor:`own`,Page:mv});var hv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/epigraph.tsx`;function gv({el:e}){let t=e,n=t.view?.source,r=t.view?.attribution,i=N_(j(),r);return(0,F.jsxDEV)(`blockquote`,{className:`border-l-2 border-ring pl-4`,"data-testid":`epigraph`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 text-lg leading-snug italic`,"data-testid":`epigraph-source`,children:(0,F.jsxDEV)(A,{name:n},void 0,!1,{fileName:hv,lineNumber:22,columnNumber:9},this)},void 0,!1,{fileName:hv,lineNumber:21,columnNumber:7},this),i&&!i.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`mt-2 min-w-0 text-sm text-muted-foreground before:mr-1 before:content-['—']`,"data-testid":`epigraph-attribution`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:hv,lineNumber:29,columnNumber:11},this)},void 0,!1,{fileName:hv,lineNumber:25,columnNumber:9},this)]},void 0,!0,{fileName:hv,lineNumber:20,columnNumber:5},this)}D({kinds:[`epigraph`],layout:`block`,editor:`own`,Page:gv});var _v=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/terminal.tsx`;function vv({el:e}){let t=e,{t:n}=a(),r=t.view?.caption,i=j(),o=(0,F.jsxDEV)(`div`,{className:`overflow-hidden rounded-lg border border-border bg-card`,"data-testid":`terminal`,children:[r&&(0,F.jsxDEV)(`div`,{className:`border-b border-border bg-muted px-3 py-1.5 text-xs font-medium text-muted-foreground`,"data-testid":`terminal-caption`,children:n(r)},void 0,!1,{fileName:_v,lineNumber:29,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`overflow-x-auto p-3 font-mono text-sm`,"data-testid":`terminal-body`,children:i.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0`,"data-testid":`terminal-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:_v,lineNumber:41,columnNumber:15},this)},e.name,!1,{fileName:_v,lineNumber:40,columnNumber:13},this))},void 0,!1,{fileName:_v,lineNumber:36,columnNumber:7},this)]},void 0,!0,{fileName:_v,lineNumber:27,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:o},void 0,!1,{fileName:_v,lineNumber:49,columnNumber:5},this)}D({kinds:[`terminal`],layout:`block`,editor:`own`,Page:vv});var yv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/plaque.tsx`;function bv({el:e}){let t=e,n=t.view?.title,r=t.view?.subtitle??[],i=j(),a=N_(i,n),o=P_(i,r),s=(0,F.jsxDEV)(`div`,{className:`flex flex-col items-center gap-3 py-4 text-center`,"data-testid":`plaque`,children:[a&&!a.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 w-full border-b border-border pb-3`,"data-testid":`plaque-item-0`,children:(0,F.jsxDEV)(A,{name:n,render:(e,t)=>(0,F.jsxDEV)(`div`,{className:`text-base font-semibold text-foreground`,"data-testid":`plaque-title`,children:t},void 0,!1,{fileName:yv,lineNumber:36,columnNumber:15},this)},void 0,!1,{fileName:yv,lineNumber:33,columnNumber:11},this)},void 0,!1,{fileName:yv,lineNumber:32,columnNumber:9},this),o.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0`,"data-testid":`plaque-item-${t+1}`,children:(0,F.jsxDEV)(A,{name:e.name,render:(e,t)=>(0,F.jsxDEV)(`div`,{className:De,"data-testid":`plaque-subtitle`,children:t},void 0,!1,{fileName:yv,lineNumber:49,columnNumber:17},this)},void 0,!1,{fileName:yv,lineNumber:46,columnNumber:13},this)},e.name,!1,{fileName:yv,lineNumber:45,columnNumber:11},this))]},void 0,!0,{fileName:yv,lineNumber:30,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:s},void 0,!1,{fileName:yv,lineNumber:60,columnNumber:5},this)}D({kinds:[`plaque`],layout:`block`,editor:`own`,Page:bv});var xv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/figure.tsx`;function Sv({el:e}){let t=e,n=t.view?.image,r=t.view?.caption,i=N_(j(),r);return(0,F.jsxDEV)(`figure`,{className:`min-w-0`,"data-testid":`figure`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0`,"data-testid":`figure-image`,children:(0,F.jsxDEV)(A,{name:n},void 0,!1,{fileName:xv,lineNumber:22,columnNumber:9},this)},void 0,!1,{fileName:xv,lineNumber:21,columnNumber:7},this),i&&!i.handle.hidden&&(0,F.jsxDEV)(`figcaption`,{className:`mt-2 min-w-0 text-sm text-muted-foreground italic`,"data-testid":`figure-caption`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:xv,lineNumber:26,columnNumber:11},this)},void 0,!1,{fileName:xv,lineNumber:25,columnNumber:9},this)]},void 0,!0,{fileName:xv,lineNumber:20,columnNumber:5},this)}D({kinds:[`figure`],layout:`block`,editor:`own`,Page:Sv});var Cv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/compare.tsx`;function wv({el:e}){let t=e,{t:n}=a(),r=t.view?.left??[],i=t.view?.right??[],o=t.view?.leftLabel,s=t.view?.rightLabel,c=(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 gap-4 @sm:grid-cols-2`,"data-testid":`compare`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 space-y-3`,"data-testid":`compare-left`,children:[o&&(0,F.jsxDEV)(`div`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,children:n(o)},void 0,!1,{fileName:Cv,lineNumber:30,columnNumber:23},this),r.map(e=>(0,F.jsxDEV)(A,{name:e},e,!1,{fileName:Cv,lineNumber:32,columnNumber:11},this))]},void 0,!0,{fileName:Cv,lineNumber:29,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 space-y-3 @sm:border-l @sm:border-border @sm:pl-4`,"data-testid":`compare-right`,children:[s&&(0,F.jsxDEV)(`div`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,children:n(s)},void 0,!1,{fileName:Cv,lineNumber:36,columnNumber:24},this),i.map(e=>(0,F.jsxDEV)(A,{name:e},e,!1,{fileName:Cv,lineNumber:38,columnNumber:11},this))]},void 0,!0,{fileName:Cv,lineNumber:35,columnNumber:7},this)]},void 0,!0,{fileName:Cv,lineNumber:28,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:c},void 0,!1,{fileName:Cv,lineNumber:44,columnNumber:5},this)}D({kinds:[`compare`],layout:`block`,editor:`own`,Page:wv});var Tv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/callout.tsx`,Ev={note:`border-l-4 border-ring bg-muted`,warn:`border-l-4 border-warning bg-muted font-medium`,danger:`border-l-[6px] border-destructive bg-muted font-semibold`};function Dv({el:e}){let t=e,n=t.view?.tone??`note`,r=j(),i=(0,F.jsxDEV)(`div`,{className:`space-y-2 rounded-lg px-4 py-3 ${Ev[n]??Ev.note}`,"data-testid":`callout`,"data-tone":n,children:r.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0`,"data-testid":`callout-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:Tv,lineNumber:35,columnNumber:13},this)},e.name,!1,{fileName:Tv,lineNumber:34,columnNumber:11},this))},void 0,!1,{fileName:Tv,lineNumber:30,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:i},void 0,!1,{fileName:Tv,lineNumber:42,columnNumber:5},this)}D({kinds:[`callout`],layout:`block`,editor:`own`,Page:Dv});var Ov=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/masthead.tsx`;function kv({el:e}){let t=e,n=t.view?.title,r=t.view?.overline,i=t.view?.meta??[],a=j(),o=N_(a,r),s=P_(a,i).filter(e=>!e.handle.hidden);return(0,F.jsxDEV)(`div`,{className:`space-y-1`,"data-testid":`masthead`,children:[o&&!o.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,"data-testid":`masthead-overline`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:Ov,lineNumber:29,columnNumber:11},this)},void 0,!1,{fileName:Ov,lineNumber:28,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 text-2xl leading-tight font-bold`,"data-testid":`masthead-title`,children:(0,F.jsxDEV)(A,{name:n},void 0,!1,{fileName:Ov,lineNumber:33,columnNumber:9},this)},void 0,!1,{fileName:Ov,lineNumber:32,columnNumber:7},this),s.length>0&&(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-x-1 border-t border-b border-border py-1.5 text-sm text-muted-foreground`,"data-testid":`masthead-meta`,children:s.map((e,t)=>(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-center ${t>0?`before:mr-2 before:text-muted-foreground before:content-['·']`:``}`,"data-testid":`masthead-meta-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:Ov,lineNumber:46,columnNumber:15},this)},e.name,!1,{fileName:Ov,lineNumber:41,columnNumber:13},this))},void 0,!1,{fileName:Ov,lineNumber:36,columnNumber:9},this)]},void 0,!0,{fileName:Ov,lineNumber:26,columnNumber:5},this)}D({kinds:[`masthead`],layout:`block`,editor:`own`,Page:kv});var Av=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/score.tsx`;function jv({el:e}){let{t}=a(),n=e,r=n.view?.source,i=Array.isArray(r)?r:r===void 0?[]:[r],o=n.view?.verdict,s=n.view?.max,c=j(),l=N_(c,o),u=P_(c,i).filter(e=>!e.handle.hidden),d=u.length>1,f=(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-baseline gap-3`,"data-testid":`score`,children:[u.map(e=>(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[(0,F.jsxDEV)(A,{name:e.name,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`inline-flex items-baseline gap-0.5 text-3xl font-bold ${L_(e)}`.trim(),"data-testid":`score-figure`,children:[t,s!=null&&(0,F.jsxDEV)(`span`,{className:`text-lg font-normal text-muted-foreground`,children:[`/`,s]},void 0,!0,{fileName:Av,lineNumber:55,columnNumber:33},this)]},void 0,!0,{fileName:Av,lineNumber:47,columnNumber:15},this)},void 0,!1,{fileName:Av,lineNumber:44,columnNumber:11},this),d&&(0,F.jsxDEV)(`div`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,"data-testid":`score-source-label`,children:t(e.handle.field.label??e.name)},void 0,!1,{fileName:Av,lineNumber:63,columnNumber:13},this)]},e.name,!0,{fileName:Av,lineNumber:43,columnNumber:9},this)),l&&!l.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 text-muted-foreground`,"data-testid":`score-verdict`,children:(0,F.jsxDEV)(A,{name:o},void 0,!1,{fileName:Av,lineNumber:71,columnNumber:11},this)},void 0,!1,{fileName:Av,lineNumber:70,columnNumber:9},this)]},void 0,!0,{fileName:Av,lineNumber:41,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:n.label,icon:n.icon,children:f},void 0,!1,{fileName:Av,lineNumber:77,columnNumber:5},this)}D({kinds:[`score`],layout:`block`,editor:`own`,Page:jv});var Mv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/status.tsx`;function Nv({el:e}){let t=e,n=t.view?.source,r=t.view?.since,i=j(),a=B_(),o=N_(i,r),s=(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-3`,"data-testid":`status`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:(0,F.jsxDEV)(A,{name:n,ownLabel:a,render:(e,t)=>{let{chipClassName:n,chipStyle:r}=Ie(e.field.type),i=(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-center gap-2 rounded-lg border px-3 py-1.5 font-medium ${n?n(e.value):``}`,style:r?r(e.value):void 0,"data-testid":`status-banner`,children:t},void 0,!1,{fileName:Mv,lineNumber:45,columnNumber:15},this);return a?(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 flex-col items-start gap-0.5`,children:[i,(0,F.jsxDEV)(V_,{handle:e},void 0,!1,{fileName:Mv,lineNumber:58,columnNumber:17},this)]},void 0,!0,{fileName:Mv,lineNumber:56,columnNumber:15},this):i}},void 0,!1,{fileName:Mv,lineNumber:39,columnNumber:9},this)},void 0,!1,{fileName:Mv,lineNumber:38,columnNumber:7},this),o&&!o.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 text-sm text-muted-foreground`,"data-testid":`status-since`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:Mv,lineNumber:66,columnNumber:11},this)},void 0,!1,{fileName:Mv,lineNumber:65,columnNumber:9},this)]},void 0,!0,{fileName:Mv,lineNumber:37,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:s},void 0,!1,{fileName:Mv,lineNumber:72,columnNumber:5},this)}D({kinds:[`status`],layout:`block`,editor:`own`,Page:Nv});var Pv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/meter.tsx`;function Fv(e,t,n){return!t||n===void 0||!Number.isFinite(e)?`neutral`:t===`ceiling`?e>n?`danger`:`success`:e<n?`danger`:`success`}var Iv={danger:`bg-destructive`,success:`bg-success`,neutral:`bg-primary`},Lv={danger:`text-destructive`,success:`text-success`,neutral:``};function Rv(e,t,n,r){if(!n)return;if(n===`ceiling`){let t=e?.max==null?r:Number(e.max);return Number.isFinite(t)?t:void 0}let i=e?.min==null?t.hints.min:e.min,a=i==null?r:Number(i);return Number.isFinite(a)?a:void 0}function zv(e,t,n){let r=Number(e?.min??t.hints.min??0),i=e?.max??t.hints.max??(Number.isFinite(n)?n:void 0),a=i==null?r+1:Number(i);return{min:Number.isFinite(r)?r:0,max:Number.isFinite(a)&&a>r?a:r+1}}function Bv(e){if(e==null||e===``)return NaN;if(typeof e==`object`&&`value`in e){let t=e.value;return t==null||t===``?NaN:Number(t)}return Number(e)}function Vv({el:e}){let t=e,n=t.view?.source,r=t.view?.of,i=t.view,a=i?.direction,o=j(),s=B_(),c=N_(o,r),l=N_(o,n),u=c?Bv(c.handle.value):void 0,d=a===`ceiling`?u:void 0,{min:f,max:p}=l?zv(i,l.handle.field.type,d):{min:0,max:1},m=l?Rv(i,l.handle.field.type,a,u):void 0,h=l?Fv(Bv(l.handle.value),a,m):`neutral`,g=h===`danger`?jn:h===`success`?mi:null,_=(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-end gap-3`,"data-testid":`meter`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(A,{name:n,ownLabel:s,render:(e,t)=>{let n=Bv(e.value);if(!Number.isFinite(n))return t;let r=Math.max(0,Math.min(1,(n-f)/(p-f)));return(0,F.jsxDEV)(`span`,{className:`flex min-w-0 flex-col gap-1`,"data-testid":`meter-figure`,"data-tone":h,children:[(0,F.jsxDEV)(`span`,{className:`inline-flex items-center gap-1.5 text-2xl font-semibold ${Lv[h]} ${L_(e)}`.trim(),children:[g&&(0,F.jsxDEV)(g,{size:18,className:`shrink-0`,"aria-hidden":`true`},void 0,!1,{fileName:Pv,lineNumber:206,columnNumber:29},this),t]},void 0,!0,{fileName:Pv,lineNumber:203,columnNumber:17},this),(0,F.jsxDEV)(`span`,{role:`progressbar`,"aria-valuemin":f,"aria-valuemax":p,"aria-valuenow":Number.isFinite(n)?Math.max(f,Math.min(p,n)):f,className:`h-2 w-full overflow-hidden rounded-full bg-border`,"data-testid":`meter-bar`,children:(0,F.jsxDEV)(`span`,{className:`block h-full rounded-full transition-[width] ${Iv[h]}`,style:{width:`${r*100}%`},"data-testid":`meter-fill`},void 0,!1,{fileName:Pv,lineNumber:217,columnNumber:19},this)},void 0,!1,{fileName:Pv,lineNumber:209,columnNumber:17},this),s&&(0,F.jsxDEV)(V_,{handle:e},void 0,!1,{fileName:Pv,lineNumber:225,columnNumber:32},this)]},void 0,!0,{fileName:Pv,lineNumber:202,columnNumber:15},this)}},void 0,!1,{fileName:Pv,lineNumber:190,columnNumber:9},this)},void 0,!1,{fileName:Pv,lineNumber:189,columnNumber:7},this),c&&!c.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 text-sm text-muted-foreground ${Lv[h]}`.trim(),"data-testid":`meter-of`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:Pv,lineNumber:233,columnNumber:11},this)},void 0,!1,{fileName:Pv,lineNumber:232,columnNumber:9},this)]},void 0,!0,{fileName:Pv,lineNumber:188,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:_},void 0,!1,{fileName:Pv,lineNumber:239,columnNumber:5},this)}D({kinds:[`meter`],layout:`block`,editor:`own`,Page:Vv});var Hv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/balance.tsx`;function Uv({el:e}){let t=e,n=t.view?.source,{t:r}=a(),i=t.view?.caption,o=(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1`,"data-testid":`balance`,children:[(0,F.jsxDEV)(A,{name:n,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`text-3xl font-semibold ${L_(e)}`.trim(),"data-testid":`balance-figure`,children:t},void 0,!1,{fileName:Hv,lineNumber:36,columnNumber:11},this)},void 0,!1,{fileName:Hv,lineNumber:33,columnNumber:7},this),i&&(0,F.jsxDEV)(`div`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,"data-testid":`balance-caption`,children:r(i)},void 0,!1,{fileName:Hv,lineNumber:42,columnNumber:9},this)]},void 0,!0,{fileName:Hv,lineNumber:32,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:o},void 0,!1,{fileName:Hv,lineNumber:49,columnNumber:5},this)}D({kinds:[`balance`],layout:`block`,editor:`own`,Page:Uv});var Wv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/countdown.tsx`,Gv=864e5;function Kv(e,t){let n=typeof e==`string`?e.slice(0,10):``;if(!/^\d{4}-\d{2}-\d{2}$/.test(n))return null;let r=Date.parse(n),i=Date.parse(t);return Number.isNaN(r)||Number.isNaN(i)?null:Math.round((r-i)/Gv)}function qv(){return new Date().toISOString().slice(0,10)}function Jv({el:e}){let t=e,n=t.view?.source,{t:r}=a(),i=t.view?.caption,o=B_(),s=(0,F.jsxDEV)(`div`,{"data-testid":`countdown`,children:(0,F.jsxDEV)(A,{name:n,ownLabel:o,render:(e,t)=>{let n=Kv(e.value,qv());return n===null?t:(0,F.jsxDEV)(`span`,{className:`inline-flex items-baseline gap-3`,"data-testid":`countdown-figure`,"data-direction":n>0?`remaining`:n<0?`elapsed`:`today`,children:[(0,F.jsxDEV)(`span`,{className:`inline-flex flex-col items-start gap-0.5`,children:[(0,F.jsxDEV)(`span`,{className:`inline-flex items-baseline gap-1.5`,children:[(0,F.jsxDEV)(n>0?ur:n<0?Pe:Ei,{size:16,className:`shrink-0 self-center text-muted-foreground`,"aria-hidden":`true`},void 0,!1,{fileName:Wv,lineNumber:82,columnNumber:19},this),(0,F.jsxDEV)(`span`,{className:`text-3xl font-bold tabular-nums`,children:Math.abs(n)},void 0,!1,{fileName:Wv,lineNumber:83,columnNumber:19},this)]},void 0,!0,{fileName:Wv,lineNumber:81,columnNumber:17},this),i&&(0,F.jsxDEV)(`span`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,"data-testid":`countdown-caption`,children:r(i)},void 0,!1,{fileName:Wv,lineNumber:86,columnNumber:19},this)]},void 0,!0,{fileName:Wv,lineNumber:80,columnNumber:15},this),(0,F.jsxDEV)(`span`,{className:`inline-flex flex-col items-start gap-0.5`,children:[(0,F.jsxDEV)(`span`,{className:`text-sm text-muted-foreground`,"data-testid":`countdown-date`,children:t},void 0,!1,{fileName:Wv,lineNumber:92,columnNumber:17},this),o&&(0,F.jsxDEV)(V_,{handle:e},void 0,!1,{fileName:Wv,lineNumber:99,columnNumber:32},this)]},void 0,!0,{fileName:Wv,lineNumber:91,columnNumber:15},this)]},void 0,!0,{fileName:Wv,lineNumber:68,columnNumber:13},this)}},void 0,!1,{fileName:Wv,lineNumber:59,columnNumber:7},this)},void 0,!1,{fileName:Wv,lineNumber:58,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:s},void 0,!1,{fileName:Wv,lineNumber:108,columnNumber:5},this)}D({kinds:[`countdown`],layout:`block`,editor:`own`,Page:Jv});function Yv(e,t){return e.hints.multi?Xe(t,[]).map(String):Zn(t)?[String(t)]:[]}var Xv=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/deck.tsx`;function Zv({field:e,value:t}){let n=e.relation?.library??``,r=e.relation?.shelf??``,i=Yv(e,t),a=ge(n,r,i),o=jr(n,r);return i.length?(0,F.jsxDEV)(`div`,{className:`overflow-x-auto`,"data-testid":`deck`,children:(0,F.jsxDEV)(`div`,{className:`flex gap-3 pb-1`,children:i.map(e=>{let t=a.get(e);return(0,F.jsxDEV)(`div`,{className:`flex w-40 shrink-0 flex-col gap-2 rounded-lg border border-border p-3`,"data-testid":`deck-card`,children:(0,F.jsxDEV)(h,{to:`/${n}/${r}/${e}`,className:`min-w-0 hover:text-primary`,children:o&&t?(0,F.jsxDEV)(Hr,{shelf:o,row:t},void 0,!1,{fileName:Xv,lineNumber:53,columnNumber:29},this):nr(e)},void 0,!1,{fileName:Xv,lineNumber:52,columnNumber:15},this)},e,!1,{fileName:Xv,lineNumber:47,columnNumber:13},this)})},void 0,!1,{fileName:Xv,lineNumber:43,columnNumber:7},this)},void 0,!1,{fileName:Xv,lineNumber:42,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:Xv,lineNumber:40,columnNumber:27},this)}function Qv({el:e}){let t=e,n=t.view?.source;return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:(0,F.jsxDEV)(A,{name:n,render:e=>(0,F.jsxDEV)(Zv,{field:e.field.type,value:e.value},void 0,!1,{fileName:Xv,lineNumber:70,columnNumber:29},this)},void 0,!1,{fileName:Xv,lineNumber:68,columnNumber:7},this)},void 0,!1,{fileName:Xv,lineNumber:67,columnNumber:5},this)}D({kinds:[`deck`],layout:`block`,editor:`own`,Page:Qv});var $v=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/people.tsx`;function ey({field:e,value:t}){let n=e.relation?.library??``,r=e.relation?.shelf??``,i=Yv(e,t),a=ge(n,r,i),o=jr(n,r);return i.length?(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,"data-testid":`people`,children:[(0,F.jsxDEV)(`div`,{className:`flex items-center`,"data-testid":`people-avatars`,children:i.map((e,t)=>{let n=a.get(e),{icon:r}=o&&n?hm(o,n):{icon:void 0};return(0,F.jsxDEV)(`span`,{className:`rounded-full ring-2 ring-surface ${t>0?`-ml-2.5`:``}`,style:{zIndex:i.length-t},"data-testid":`people-avatar-${t}`,children:r?(0,F.jsxDEV)(ht,{icon:r,framed:!0,size:`md`},void 0,!1,{fileName:$v,lineNumber:54,columnNumber:17},this):(0,F.jsxDEV)(ht,{icon:{kind:`icon`,value:o?.icon??`lucide:user`},framed:!0,size:`md`},void 0,!1,{fileName:$v,lineNumber:56,columnNumber:17},this)},e,!1,{fileName:$v,lineNumber:47,columnNumber:13},this)})},void 0,!1,{fileName:$v,lineNumber:42,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-center gap-x-1.5 text-sm`,"data-testid":`people-names`,children:i.map(e=>{let t=a.get(e),{title:i}=o&&t?hm(o,t):{title:nr(e)};return(0,F.jsxDEV)(h,{to:`/${n}/${r}/${e}`,className:`hover:text-primary hover:underline`,children:i},e,!1,{fileName:$v,lineNumber:67,columnNumber:13},this)})},void 0,!1,{fileName:$v,lineNumber:62,columnNumber:7},this)]},void 0,!0,{fileName:$v,lineNumber:41,columnNumber:5},this):(0,F.jsxDEV)(k,{},void 0,!1,{fileName:$v,lineNumber:39,columnNumber:27},this)}function ty({el:e}){let t=e,n=t.view?.source;return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:(0,F.jsxDEV)(A,{name:n,render:e=>(0,F.jsxDEV)(ey,{field:e.field.type,value:e.value},void 0,!1,{fileName:$v,lineNumber:84,columnNumber:29},this)},void 0,!1,{fileName:$v,lineNumber:82,columnNumber:7},this)},void 0,!1,{fileName:$v,lineNumber:81,columnNumber:5},this)}D({kinds:[`people`],layout:`block`,editor:`own`,Page:ty});var ny=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/identity.tsx`,ry=e=>/^[a-z][a-z0-9+.-]*:\/\//i.test(e)?e:`https://${e}`;function iy(e,t){if(e.kind===`tel`){let e=String(t??``).trim();return e?`tel:${e}`:void 0}if(e.kind===`email`){let e=String(t??``).trim();return e?`mailto:${e}`:void 0}if(e.kind===`link`){let e=String(t??``).trim();return e?ry(e):void 0}}var ay={tel:eu,email:Zl,link:Oi};function oy({el:e}){let t=e,{t:n}=a(),r=t.view?.avatar,i=t.view?.name,o=t.view?.role,s=t.view?.channels??[],c=j(),l=N_(c,r),u=N_(c,o),d=P_(c,s),f=d.filter(e=>!e.handle.hidden),p=(0,F.jsxDEV)(`div`,{className:`flex items-center gap-3`,"data-testid":`identity`,children:[l&&!l.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`shrink-0`,"data-testid":`identity-avatar`,children:(0,F.jsxDEV)(A,{name:r},void 0,!1,{fileName:ny,lineNumber:78,columnNumber:11},this)},void 0,!1,{fileName:ny,lineNumber:77,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 text-lg font-semibold`,"data-testid":`identity-name`,children:(0,F.jsxDEV)(A,{name:i},void 0,!1,{fileName:ny,lineNumber:83,columnNumber:11},this)},void 0,!1,{fileName:ny,lineNumber:82,columnNumber:9},this),u&&!u.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 text-sm text-muted-foreground`,"data-testid":`identity-role`,children:(0,F.jsxDEV)(A,{name:o},void 0,!1,{fileName:ny,lineNumber:87,columnNumber:13},this)},void 0,!1,{fileName:ny,lineNumber:86,columnNumber:11},this)]},void 0,!0,{fileName:ny,lineNumber:81,columnNumber:7},this),f.length>0&&(0,F.jsxDEV)(`div`,{className:`flex shrink-0 items-center gap-1.5`,"data-testid":`identity-channels`,children:d.map(e=>e.handle.hidden?null:(0,F.jsxDEV)(`span`,{children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>{let r=e.field.type,i=iy(r,e.value);if(!i)return t;let a=ay[r.kind]??Oi;return(0,F.jsxDEV)(`a`,{href:i,"aria-label":I_(e,n),className:`inline-flex h-9 w-9 items-center justify-center rounded-lg border border-border text-muted-foreground transition-colors hover:border-ring hover:text-primary`,children:(0,F.jsxDEV)(a,{size:16},void 0,!1,{fileName:ny,lineNumber:110,columnNumber:25},this)},void 0,!1,{fileName:ny,lineNumber:105,columnNumber:23},this)}},void 0,!1,{fileName:ny,lineNumber:96,columnNumber:17},this)},e.name,!1,{fileName:ny,lineNumber:95,columnNumber:15},this))},void 0,!1,{fileName:ny,lineNumber:92,columnNumber:9},this)]},void 0,!0,{fileName:ny,lineNumber:75,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:p},void 0,!1,{fileName:ny,lineNumber:123,columnNumber:5},this)}D({kinds:[`identity`],layout:`block`,editor:`own`,Page:oy});var sy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/timeline.tsx`;function cy(){return new Date().toISOString().slice(0,10)}function ly(e,t){let n=typeof e==`string`?e.slice(0,10):``;if(!/^\d{4}-\d{2}-\d{2}$/.test(n))return null;let r=Date.parse(n),i=Date.parse(t);return Number.isNaN(r)||Number.isNaN(i)?null:r<i}function uy({el:e}){let t=e,n=j(),r=(0,F.jsxDEV)(`div`,{className:`relative flex flex-col gap-2`,"data-testid":`timeline`,children:[(0,F.jsxDEV)(`div`,{className:`absolute top-2 bottom-2 left-[5px] w-px bg-border`,"aria-hidden":!0},void 0,!1,{fileName:sy,lineNumber:51,columnNumber:7},this),n.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`relative min-w-0`,"data-testid":`timeline-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name,render:(e,t)=>{let n=ly(e.value,cy());return(0,F.jsxDEV)(`span`,{className:`flex min-w-0 items-start gap-3`,"data-testid":`timeline-entry`,children:[(0,F.jsxDEV)(`span`,{className:`relative z-10 mt-1 h-2.5 w-2.5 shrink-0 rounded-full border-2 border-ring ${n?`bg-primary`:`bg-card`}`,"data-testid":`timeline-dot`,"data-past":n===null?void 0:n,"aria-hidden":!0},void 0,!1,{fileName:sy,lineNumber:62,columnNumber:21},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 flex-1 pb-1`,children:t},void 0,!1,{fileName:sy,lineNumber:68,columnNumber:21},this)]},void 0,!0,{fileName:sy,lineNumber:61,columnNumber:19},this)}},void 0,!1,{fileName:sy,lineNumber:56,columnNumber:13},this)},e.name,!1,{fileName:sy,lineNumber:55,columnNumber:11},this))]},void 0,!0,{fileName:sy,lineNumber:50,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:r},void 0,!1,{fileName:sy,lineNumber:79,columnNumber:5},this)}D({kinds:[`timeline`],layout:`block`,editor:`own`,Page:uy});var dy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/receipt.tsx`;function fy({el:e}){let t=e,{t:n}=a(),r=t.view?.lines??[],i=t.view?.total,o=j(),s=P_(o,r),c=N_(o,i),l=(0,F.jsxDEV)(`div`,{className:`flex flex-col`,"data-testid":`receipt`,children:[(0,F.jsxDEV)(`div`,{className:`flex flex-col divide-y divide-dashed divide-border`,children:s.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0 py-1.5`,"data-testid":`receipt-line-${t}`,children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`flex w-full min-w-0 items-baseline justify-between gap-3`,"data-testid":`receipt-line`,children:[(0,F.jsxDEV)(`span`,{className:`min-w-0 text-muted-foreground`,children:I_(e,n)},void 0,!1,{fileName:dy,lineNumber:47,columnNumber:21},this),(0,F.jsxDEV)(`span`,{className:`shrink-0 text-right ${L_(e)}`.trim(),children:t},void 0,!1,{fileName:dy,lineNumber:48,columnNumber:21},this)]},void 0,!0,{fileName:dy,lineNumber:46,columnNumber:19},this)},void 0,!1,{fileName:dy,lineNumber:42,columnNumber:15},this)},e.name,!1,{fileName:dy,lineNumber:41,columnNumber:13},this))},void 0,!1,{fileName:dy,lineNumber:38,columnNumber:7},this),c&&!c.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`mt-2 min-w-0 border-t-2 border-border pt-2`,"data-testid":`receipt-total-row`,children:(0,F.jsxDEV)(A,{name:i,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`flex w-full min-w-0 items-baseline justify-between gap-3 text-lg font-bold`,"data-testid":`receipt-total`,children:[(0,F.jsxDEV)(`span`,{className:`min-w-0`,children:I_(e,n)},void 0,!1,{fileName:dy,lineNumber:66,columnNumber:17},this),(0,F.jsxDEV)(`span`,{className:`shrink-0 text-right ${L_(e)}`.trim(),children:t},void 0,!1,{fileName:dy,lineNumber:67,columnNumber:17},this)]},void 0,!0,{fileName:dy,lineNumber:62,columnNumber:15},this)},void 0,!1,{fileName:dy,lineNumber:58,columnNumber:11},this)},void 0,!1,{fileName:dy,lineNumber:57,columnNumber:9},this)]},void 0,!0,{fileName:dy,lineNumber:37,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:l},void 0,!1,{fileName:dy,lineNumber:76,columnNumber:5},this)}D({kinds:[`receipt`],layout:`block`,editor:`own`,Page:fy,childWidth:`w-full`});var K=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/idcard.tsx`;function py(e){let t=e.replace(/\s+/g,``);if(!t)return``;let n=[];for(let e=0;e<t.length;e+=4)n.push(t.slice(e,e+4));return n.join(` `)}function my({slots:e,t}){return e.length?(0,F.jsxDEV)(`div`,{className:`mt-3`,"data-testid":`idcard-blank`,children:(0,F.jsxDEV)(qe,{items:e.map(e=>({key:e.name,span:3,node:(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:[(0,F.jsxDEV)(`div`,{className:De,children:t(e.handle.field.type?.label??e.handle.field.label??e.name)},void 0,!1,{fileName:K,lineNumber:57,columnNumber:15},this),(0,F.jsxDEV)(k,{},void 0,!1,{fileName:K,lineNumber:61,columnNumber:15},this)]},void 0,!0,{fileName:K,lineNumber:56,columnNumber:13},this)}))},void 0,!1,{fileName:K,lineNumber:51,columnNumber:7},this)},void 0,!1,{fileName:K,lineNumber:50,columnNumber:5},this):null}function hy({slots:e,testid:t}){return e.length?(0,F.jsxDEV)(`div`,{"data-testid":t,children:(0,F.jsxDEV)(qe,{items:e.map(e=>({key:e.name,span:pt(e.handle.field),node:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:K,lineNumber:78,columnNumber:17},this)}))},void 0,!1,{fileName:K,lineNumber:74,columnNumber:7},this)},void 0,!1,{fileName:K,lineNumber:73,columnNumber:5},this):null}var gy={passport:new Set([`photo`,`mrz`]),biometric:new Set([`photo`,`mrz`]),idcard:new Set([`photo`]),licence:new Set([`photo`]),residence:new Set([`photo`]),protection:new Set([`photo`]),military:new Set([`photo`]),tax:new Set([]),social:new Set([]),visa:new Set([`photo`]),workpermit:new Set([]),medical:new Set([]),insurance:new Set([]),birth:new Set([]),marriage:new Set([]),divorce:new Set([]),death:new Set([]),diploma:new Set([]),vaccination:new Set([])},_y={passport:`page`,biometric:`page`,idcard:`plastic`,licence:`plastic`,residence:`plastic`,protection:`plastic`,military:`plastic`,tax:`plastic`,social:`plastic`,visa:`sticker`,workpermit:`sticker`,medical:`form`,insurance:`form`,birth:`paper`,marriage:`paper`,divorce:`paper`,death:`paper`,diploma:`paper`,vaccination:`paper`};function vy({el:e}){let{t}=a(),n=e,r=n.view?.number,i=n.view?.overline,o=n.view?.photo,s=n.view?.mrz,c=n.view?.meta??[],l=n.view?.footer??[],u=j(),d=N_(u,i),f=N_(u,o),p=N_(u,s),m=(d?je(d.handle.field.type??{}).find(e=>e.value===String(d.handle.value??``))?.face:void 0)??`plain`,h=_y[m]??`plain`,g=gy[m],_=e=>g===void 0||g.has(e),v=e=>e!==void 0&&!e.handle.hidden&&Zn(e.handle.value),y=_(`photo`)&&v(f),b=_(`mrz`)&&v(p),x=[..._(`photo`)&&!y&&f?[f]:[],..._(`mrz`)&&!b&&p?[p]:[]],S=e=>{let t=e.handle.field.type?.hints?.faces;return t===void 0||t.includes(m)},C=P_(u,c).filter(e=>!e.handle.hidden&&S(e)),w=P_(u,l).filter(e=>!e.handle.hidden&&S(e));return(0,F.jsxDEV)(`div`,{className:`idcard-paper overflow-hidden rounded-xl border border-border bg-card`,"data-face":m,"data-form":h,"data-testid":`idcard`,children:[(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-4 px-5 py-4`,children:[(0,F.jsxDEV)(`div`,{className:`flex min-w-0 items-baseline justify-between gap-4 border-b border-border pb-3`,"data-testid":`idcard-head`,children:[d&&!d.handle.hidden?(0,F.jsxDEV)(`div`,{className:De,"data-testid":`idcard-overline`,children:(0,F.jsxDEV)(A,{name:i,ownLabel:!0},void 0,!1,{fileName:K,lineNumber:276,columnNumber:15},this)},void 0,!1,{fileName:K,lineNumber:273,columnNumber:13},this):(0,F.jsxDEV)(`span`,{"aria-hidden":!0},void 0,!1,{fileName:K,lineNumber:281,columnNumber:13},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 shrink-0`,children:(0,F.jsxDEV)(A,{name:r,ownLabel:!0,render:(e,t)=>{let n=py(typeof e.value==`string`||typeof e.value==`number`?String(e.value):``);return n?(0,F.jsxDEV)(`span`,{className:`text-lg font-semibold tracking-widest text-primary`,"data-testid":`idcard-number`,children:n},void 0,!1,{fileName:K,lineNumber:300,columnNumber:19},this):t}},void 0,!1,{fileName:K,lineNumber:284,columnNumber:13},this)},void 0,!1,{fileName:K,lineNumber:283,columnNumber:11},this)]},void 0,!0,{fileName:K,lineNumber:268,columnNumber:9},this),(f||C.length>0)&&(0,F.jsxDEV)(`div`,{className:`flex min-w-0 items-start gap-5`,children:[y&&(0,F.jsxDEV)(`div`,{className:`aspect-[3/4] w-28 shrink-0 overflow-hidden rounded-md border border-border bg-muted`,"data-testid":`idcard-photo`,children:(0,F.jsxDEV)(A,{name:o,ownLabel:!0},void 0,!1,{fileName:K,lineNumber:320,columnNumber:17},this)},void 0,!1,{fileName:K,lineNumber:314,columnNumber:15},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:(0,F.jsxDEV)(hy,{slots:C,testid:`idcard-meta`},void 0,!1,{fileName:K,lineNumber:324,columnNumber:15},this)},void 0,!1,{fileName:K,lineNumber:323,columnNumber:13},this)]},void 0,!0,{fileName:K,lineNumber:310,columnNumber:11},this),(w.length>0||x.length>0)&&(0,F.jsxDEV)(`div`,{className:`border-t border-border pt-3`,children:[(0,F.jsxDEV)(hy,{slots:w,testid:`idcard-footer`},void 0,!1,{fileName:K,lineNumber:336,columnNumber:13},this),(0,F.jsxDEV)(my,{slots:x,t},void 0,!1,{fileName:K,lineNumber:337,columnNumber:13},this)]},void 0,!0,{fileName:K,lineNumber:335,columnNumber:11},this)]},void 0,!0,{fileName:K,lineNumber:266,columnNumber:7},this),b&&(0,F.jsxDEV)(`div`,{className:`border-t border-dashed border-border px-5 py-3`,"data-testid":`idcard-mrz`,children:(0,F.jsxDEV)(A,{name:s,ownLabel:!0},void 0,!1,{fileName:K,lineNumber:351,columnNumber:11},this)},void 0,!1,{fileName:K,lineNumber:350,columnNumber:9},this)]},void 0,!0,{fileName:K,lineNumber:257,columnNumber:5},this)}D({kinds:[`idcard`],layout:`block`,editor:`own`,Page:vy});var yy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/route.tsx`;function by({el:e}){let t=e,n=t.view?.from,r=t.view?.to,i=t.view?.depart,a=t.view?.arrive,o=t.view?.duration,s=j(),c=N_(s,n),l=N_(s,r),u=N_(s,i),d=N_(s,a),f=P_(s,t.view?.stub??[]).filter(e=>!e.handle.hidden),p=N_(s,o),m=c!==void 0&&!c.handle.hidden,h=l!==void 0&&!l.handle.hidden,g=p!==void 0&&!p.handle.hidden;return(0,F.jsxDEV)(`div`,{className:`flex items-start gap-3`,"data-testid":`route`,children:[m&&(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-1 flex-col items-start gap-1`,"data-testid":`route-from`,children:[(0,F.jsxDEV)(A,{name:n,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`text-xl font-bold`,"data-testid":`route-endpoint-0`,children:t},void 0,!1,{fileName:yy,lineNumber:48,columnNumber:15},this)},void 0,!1,{fileName:yy,lineNumber:45,columnNumber:11},this),u&&!u.handle.hidden&&(0,F.jsxDEV)(`span`,{className:`min-w-0 text-xs text-muted-foreground`,"data-testid":`route-depart`,children:(0,F.jsxDEV)(A,{name:i},void 0,!1,{fileName:yy,lineNumber:55,columnNumber:15},this)},void 0,!1,{fileName:yy,lineNumber:54,columnNumber:13},this)]},void 0,!0,{fileName:yy,lineNumber:44,columnNumber:9},this),(m||h||g)&&(0,F.jsxDEV)(`div`,{className:`relative flex min-w-[3rem] flex-1 shrink-0 flex-col items-center justify-center self-stretch`,"data-testid":`route-axis`,children:[(0,F.jsxDEV)(`span`,{className:`absolute inset-x-0 top-1/2 border-t border-dashed border-border`,"aria-hidden":!0},void 0,!1,{fileName:yy,lineNumber:65,columnNumber:11},this),g&&(0,F.jsxDEV)(`span`,{className:`relative z-10 bg-card px-1.5 text-xs font-medium text-muted-foreground`,"data-testid":`route-duration`,children:(0,F.jsxDEV)(A,{name:o},void 0,!1,{fileName:yy,lineNumber:71,columnNumber:15},this)},void 0,!1,{fileName:yy,lineNumber:67,columnNumber:13},this)]},void 0,!0,{fileName:yy,lineNumber:61,columnNumber:9},this),h&&(0,F.jsxDEV)(`div`,{className:`flex min-w-0 flex-1 flex-col items-end gap-1 text-right`,"data-testid":`route-to`,children:[(0,F.jsxDEV)(A,{name:r,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`text-xl font-bold`,"data-testid":`route-endpoint-1`,children:t},void 0,!1,{fileName:yy,lineNumber:81,columnNumber:15},this)},void 0,!1,{fileName:yy,lineNumber:78,columnNumber:11},this),d&&!d.handle.hidden&&(0,F.jsxDEV)(`span`,{className:`min-w-0 text-xs text-muted-foreground`,"data-testid":`route-arrive`,children:(0,F.jsxDEV)(A,{name:a},void 0,!1,{fileName:yy,lineNumber:88,columnNumber:15},this)},void 0,!1,{fileName:yy,lineNumber:87,columnNumber:13},this)]},void 0,!0,{fileName:yy,lineNumber:77,columnNumber:9},this),f.length>0&&(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(`div`,{className:`route-perf`,"aria-hidden":!0},void 0,!1,{fileName:yy,lineNumber:99,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-baseline gap-x-6 gap-y-2 pt-3`,"data-testid":`route-stub`,children:f.map(e=>(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:yy,lineNumber:103,columnNumber:17},this)},e.name,!1,{fileName:yy,lineNumber:102,columnNumber:15},this))},void 0,!1,{fileName:yy,lineNumber:100,columnNumber:11},this)]},void 0,!0,{fileName:yy,lineNumber:94,columnNumber:9},this)]},void 0,!0,{fileName:yy,lineNumber:42,columnNumber:5},this)}D({kinds:[`route`],layout:`block`,editor:`own`,Page:by});var xy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/specimen.tsx`;function Sy({el:e}){let t=e,{t:n}=a(),r=t.view?.title,i=t.view?.subtitle,o=t.view?.conditions??[],s=j(),c=N_(s,i),l=P_(s,o),u=l.filter(e=>!e.handle.hidden);return(0,F.jsxDEV)(`div`,{className:`space-y-2`,"data-testid":`specimen`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0`,children:(0,F.jsxDEV)(A,{name:r,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`text-xl font-medium italic`,"data-testid":`specimen-title`,children:t},void 0,!1,{fileName:xy,lineNumber:45,columnNumber:13},this)},void 0,!1,{fileName:xy,lineNumber:42,columnNumber:9},this)},void 0,!1,{fileName:xy,lineNumber:41,columnNumber:7},this),c&&!c.handle.hidden&&(0,F.jsxDEV)(`div`,{className:`min-w-0 text-sm text-muted-foreground`,"data-testid":`specimen-subtitle`,children:(0,F.jsxDEV)(A,{name:i},void 0,!1,{fileName:xy,lineNumber:53,columnNumber:11},this)},void 0,!1,{fileName:xy,lineNumber:52,columnNumber:9},this),u.length>0&&(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1`,"data-testid":`specimen-conditions`,children:l.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{"data-testid":`specimen-condition-${t}`,children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`inline-flex min-w-0 items-baseline gap-1.5`,children:[(0,F.jsxDEV)(Fn,{name:`lucide:circle`,size:8,className:`relative top-[0.15em] shrink-0 fill-current text-muted-foreground`},void 0,!1,{fileName:xy,lineNumber:66,columnNumber:23},this),(0,F.jsxDEV)(`span`,{className:`shrink-0 text-muted-foreground`,children:I_(e,n)},void 0,!1,{fileName:xy,lineNumber:71,columnNumber:23},this),(0,F.jsxDEV)(`span`,{className:`min-w-0 font-medium text-foreground`,children:t},void 0,!1,{fileName:xy,lineNumber:72,columnNumber:23},this)]},void 0,!0,{fileName:xy,lineNumber:65,columnNumber:21},this)},void 0,!1,{fileName:xy,lineNumber:61,columnNumber:17},this)},e.name,!1,{fileName:xy,lineNumber:60,columnNumber:15},this))},void 0,!1,{fileName:xy,lineNumber:57,columnNumber:9},this)]},void 0,!0,{fileName:xy,lineNumber:40,columnNumber:5},this)}D({kinds:[`specimen`],layout:`block`,editor:`own`,Page:Sy});var Cy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/nutrition.tsx`;function wy({el:e}){let t=e,{t:n}=a(),r=t.view?.energy,i=t.view?.fields??[],o=j(),s=N_(o,r),c=P_(o,i),l=s!==void 0&&!s.handle.hidden,u=c.filter(e=>!e.handle.hidden);if(!l&&u.length===0)return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:null},void 0,!1,{fileName:Cy,lineNumber:39,columnNumber:7},this);let d=(0,F.jsxDEV)(`div`,{className:`w-full max-w-xs border-2 border-text p-3`,"data-testid":`nutrition`,children:[l&&(0,F.jsxDEV)(`div`,{className:`mb-2 border-b-4 border-text pb-2`,"data-testid":`nutrition-energy-row`,children:(0,F.jsxDEV)(A,{name:r,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`flex w-full min-w-0 items-baseline justify-between gap-3`,"data-testid":`nutrition-energy`,children:[(0,F.jsxDEV)(`span`,{className:`min-w-0 text-base font-bold tracking-wide`,children:I_(e,n)},void 0,!1,{fileName:Cy,lineNumber:52,columnNumber:17},this),(0,F.jsxDEV)(`span`,{className:`shrink-0 text-2xl font-black ${L_(e)}`.trim(),children:t},void 0,!1,{fileName:Cy,lineNumber:53,columnNumber:17},this)]},void 0,!0,{fileName:Cy,lineNumber:51,columnNumber:15},this)},void 0,!1,{fileName:Cy,lineNumber:47,columnNumber:11},this)},void 0,!1,{fileName:Cy,lineNumber:46,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`flex flex-col divide-y divide-border`,children:c.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0 py-1`,"data-testid":`nutrition-row-${t}`,children:(0,F.jsxDEV)(A,{name:e.name,ownLabel:!0,render:(e,t)=>(0,F.jsxDEV)(`span`,{className:`flex w-full min-w-0 items-baseline justify-between gap-3 text-sm`,children:[(0,F.jsxDEV)(`span`,{className:`min-w-0`,children:I_(e,n)},void 0,!1,{fileName:Cy,lineNumber:74,columnNumber:21},this),(0,F.jsxDEV)(`span`,{className:`shrink-0 text-right font-medium ${L_(e)}`.trim(),children:t},void 0,!1,{fileName:Cy,lineNumber:75,columnNumber:21},this)]},void 0,!0,{fileName:Cy,lineNumber:73,columnNumber:19},this)},void 0,!1,{fileName:Cy,lineNumber:69,columnNumber:15},this)},e.name,!1,{fileName:Cy,lineNumber:68,columnNumber:13},this))},void 0,!1,{fileName:Cy,lineNumber:61,columnNumber:7},this)]},void 0,!0,{fileName:Cy,lineNumber:44,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:d},void 0,!1,{fileName:Cy,lineNumber:88,columnNumber:5},this)}D({kinds:[`nutrition`],layout:`block`,editor:`own`,Page:wy,childWidth:`w-full`});function Ty(e,t){return e.fields.find(e=>ri(e)&&e.key===t)}function Ey(e,t){let{rowId:n,updateRow:r,removeRow:i}=Vn(e,t);return{rowId:n,updateRow:(t,n,i)=>r(t,{...e[t],[n]:i}),removeRow:i,addRow:()=>t([...e,{}])}}var q=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/calendar.tsx`;function Dy(e){let t=typeof e==`string`?e:typeof e==`number`?String(e):``,n=/^(\d{4})-(\d{2})-(\d{2})/.exec(t);if(n)return{year:Number(n[1]),month:Number(n[2])-1,day:Number(n[3])}}function Oy({day:e,month:t,year:n,matchingRows:r,dateKey:i,dateFld:o,restFields:s,recordCtx:c,errorFor:l,onUpdateRow:u,onRemoveRow:d,onAddRow:f,rowTools:p,editing:m}){let{t:h}=a(),[g,_]=(0,P.useState)(!1);if(e==null)return(0,F.jsxDEV)(`div`,{className:`aspect-square`},void 0,!1,{fileName:q,lineNumber:77,columnNumber:12},this);let v=r[0],y=v!==void 0,b=`${n}-${String(t+1).padStart(2,`0`)}-${String(e).padStart(2,`0`)}`,x=new Date(n,t,e).toLocaleDateString(void 0,{day:`numeric`,month:`long`,year:`numeric`}),S=r.map(({idx:e})=>l(e,i)||s.map(t=>l(e,t.key)).find(Boolean)).find(Boolean),C=(0,F.jsxDEV)(`button`,{type:`button`,role:`button`,onClick:p?()=>_(!0):void 0,"aria-haspopup":p?`dialog`:void 0,"aria-expanded":p?g:void 0,className:`relative flex aspect-square w-full items-center justify-center rounded-md text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${S?`border border-destructive text-destructive font-semibold`:y?`border border-ring bg-background font-semibold text-primary shadow-xs`:`text-foreground hover:bg-muted`}`,"data-testid":v?`calendar-date-${v.idx}`:void 0,"aria-label":b,children:[e,y&&(0,F.jsxDEV)(`span`,{"data-testid":`calendar-marked-${e}`,className:`absolute bottom-1 h-1 w-1 rounded-full ${S?`bg-destructive`:`bg-primary`}`},void 0,!1,{fileName:q,lineNumber:120,columnNumber:9},this),S&&(0,F.jsxDEV)(`span`,{className:`sr-only text-destructive`,children:S},void 0,!1,{fileName:q,lineNumber:125,columnNumber:24},this)]},void 0,!0,{fileName:q,lineNumber:94,columnNumber:5},this);return p?(0,F.jsxDEV)(`div`,{"data-testid":v?`calendar-entry-${v.idx}`:void 0,className:`relative w-full`,children:(0,F.jsxDEV)(xt,{open:g,onOpenChange:_,trigger:e=>(0,F.jsxDEV)(F.Fragment,{children:[C,e]},void 0,!0,{fileName:q,lineNumber:150,columnNumber:11},this),children:(0,F.jsxDEV)(`div`,{className:`space-y-3`,children:[(0,F.jsxDEV)(`div`,{className:`flex items-center justify-between border-b border-border pb-2`,children:[(0,F.jsxDEV)(`span`,{className:`text-xs font-semibold text-foreground`,children:x},void 0,!1,{fileName:q,lineNumber:158,columnNumber:13},this),(0,F.jsxDEV)(`span`,{className:`text-[11px] font-mono text-muted-foreground`,children:b},void 0,!1,{fileName:q,lineNumber:159,columnNumber:13},this)]},void 0,!0,{fileName:q,lineNumber:157,columnNumber:11},this),y?(0,F.jsxDEV)(`div`,{className:`space-y-3`,children:r.map(({row:e,idx:t})=>{let n=l(t,i);return(0,F.jsxDEV)(`div`,{className:`space-y-2 border-b border-border pb-2 last:border-b-0 last:pb-0`,children:[n&&(0,F.jsxDEV)(`div`,{className:`text-xs text-destructive font-medium`,children:n},void 0,!1,{fileName:q,lineNumber:168,columnNumber:29},this),s.length>0&&(0,F.jsxDEV)(`div`,{className:`space-y-1`,children:[(0,F.jsxDEV)(rr,{fields:s,row:e,editing:m,onChange:(e,n)=>u(t,e,n),recordCtx:c,error:e=>l(t,e)},void 0,!1,{fileName:q,lineNumber:171,columnNumber:25},this),s.map(e=>{let n=l(t,e.key);return n?(0,F.jsxDEV)(`div`,{className:`text-xs text-destructive font-medium`,children:n},e.key,!1,{fileName:q,lineNumber:182,columnNumber:29},this):null})]},void 0,!0,{fileName:q,lineNumber:170,columnNumber:23},this),(0,F.jsxDEV)(`div`,{className:`flex items-center justify-end pt-1`,children:(0,F.jsxDEV)(St,{onClick:()=>{d(t),_(!1)}},void 0,!1,{fileName:q,lineNumber:192,columnNumber:23},this)},void 0,!1,{fileName:q,lineNumber:191,columnNumber:21},this)]},t,!0,{fileName:q,lineNumber:167,columnNumber:19},this)})},void 0,!1,{fileName:q,lineNumber:163,columnNumber:13},this):(0,F.jsxDEV)(`div`,{className:`space-y-2 pt-1`,children:(0,F.jsxDEV)(Mt,{onClick:()=>{f(b),_(!1)},children:h(`form.addRow`)},void 0,!1,{fileName:q,lineNumber:207,columnNumber:15},this)},void 0,!1,{fileName:q,lineNumber:204,columnNumber:13},this)]},void 0,!0,{fileName:q,lineNumber:156,columnNumber:9},this)},void 0,!1,{fileName:q,lineNumber:146,columnNumber:7},this)},void 0,!1,{fileName:q,lineNumber:145,columnNumber:5},this):(0,F.jsxDEV)(`div`,{"data-testid":v?`calendar-entry-${v.idx}`:void 0,className:`w-full`,children:C},void 0,!1,{fileName:q,lineNumber:131,columnNumber:7},this)}function ky({rows:e,dateKey:t,dateFld:n,restFields:r,recordCtx:i,errorFor:o,onUpdateRow:s,onRemoveRow:c,onAddRow:l,rowTools:u,editing:d}){let{t:f}=a(),[p,m]=(0,P.useState)(()=>{for(let n of e){let e=Dy(n[t]);if(e)return new Date(e.year,e.month,1)}return new Date}),h=p.getMonth(),g=p.getFullYear(),_=()=>m(new Date(g,h-1,1)),v=()=>m(new Date(g,h+1,1)),y=new Date(g,h,1),b=new Date(g,h+1,0).getDate(),x=y.getDay(),S=[...Array.from({length:x},()=>null),...Array.from({length:b},(e,t)=>t+1)];for(;S.length%7!=0;)S.push(null);let C=[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`],w=new Date(g,h,1).toLocaleDateString(void 0,{month:`long`,year:`numeric`}),T=new Map,E=[];return e.forEach((e,n)=>{let r=Dy(e[t]);if(r&&r.year===g&&r.month===h){let t=T.get(r.day)??[];t.push({row:e,idx:n}),T.set(r.day,t)}else r||E.push({row:e,idx:n})}),(0,F.jsxDEV)(`div`,{className:`w-full max-w-[280px] rounded-lg border border-border bg-card p-3`,"data-testid":`calendar-grid`,children:[(0,F.jsxDEV)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,F.jsxDEV)(`span`,{className:`text-xs font-semibold text-foreground capitalize`,children:w},void 0,!1,{fileName:q,lineNumber:291,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`flex items-center gap-0.5`,children:[(0,F.jsxDEV)(`button`,{type:`button`,onClick:_,"aria-label":f(`blocks.prevMonth`),className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground transition-colors`,children:(0,F.jsxDEV)(Re,{size:13},void 0,!1,{fileName:q,lineNumber:299,columnNumber:13},this)},void 0,!1,{fileName:q,lineNumber:293,columnNumber:11},this),(0,F.jsxDEV)(`button`,{type:`button`,onClick:v,"aria-label":f(`blocks.nextMonth`),className:`rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground transition-colors`,children:(0,F.jsxDEV)(Se,{size:13},void 0,!1,{fileName:q,lineNumber:307,columnNumber:13},this)},void 0,!1,{fileName:q,lineNumber:301,columnNumber:11},this)]},void 0,!0,{fileName:q,lineNumber:292,columnNumber:9},this)]},void 0,!0,{fileName:q,lineNumber:290,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`mb-1 grid grid-cols-7 gap-1 text-center text-[10px] font-medium text-muted-foreground`,children:C.map((e,t)=>(0,F.jsxDEV)(`div`,{className:`py-0.5`,children:e},t,!1,{fileName:q,lineNumber:313,columnNumber:11},this))},void 0,!1,{fileName:q,lineNumber:311,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`grid grid-cols-7 gap-1`,children:S.map((e,a)=>(0,F.jsxDEV)(Oy,{day:e,month:h,year:g,matchingRows:e==null?[]:T.get(e)??[],dateKey:t,dateFld:n,restFields:r,recordCtx:i,errorFor:o,onUpdateRow:s,onRemoveRow:c,onAddRow:l,rowTools:u,editing:d},a,!1,{fileName:q,lineNumber:320,columnNumber:11},this))},void 0,!1,{fileName:q,lineNumber:318,columnNumber:7},this),E.length>0&&(0,F.jsxDEV)(`div`,{className:`mt-3 space-y-1.5 border-t border-border pt-2`,children:E.map(({idx:e})=>{let n=o(e,t);return(0,F.jsxDEV)(`div`,{"data-testid":`calendar-entry-${e}`,className:`flex items-center justify-between text-xs`,children:[(0,F.jsxDEV)(`div`,{"data-testid":`calendar-date-${e}`,className:`text-destructive font-medium`,children:n||`Required`},void 0,!1,{fileName:q,lineNumber:350,columnNumber:17},this),u&&(0,F.jsxDEV)(St,{onClick:()=>c(e)},void 0,!1,{fileName:q,lineNumber:353,columnNumber:30},this)]},e,!0,{fileName:q,lineNumber:345,columnNumber:15},this)})},void 0,!1,{fileName:q,lineNumber:341,columnNumber:9},this)]},void 0,!0,{fileName:q,lineNumber:289,columnNumber:5},this)}function Ay({el:e,value:t,recordCtx:n,mode:r}){let{t:i}=a(),o=En(),s=Ur(),{write:c}=Kn(),l=e,u=l.view?.date,d=Ty(l,u),f=Jm(r,t,e=>c(e)),p=Array.isArray(f.value)?f.value:[],{editing:m,live:h,rowTools:g}=Ym(f.mode,r);if(!d||!u)return(0,F.jsxDEV)(lh,{group:{...l,kind:void 0},value:t,onChange:e=>void c(e),recordCtx:n,mode:r},void 0,!1,{fileName:q,lineNumber:378,columnNumber:7},this);let _=l.fields.filter(e=>ri(e)&&e.key!==u).map(e=>({key:e.key,type:e.type})),v=(0,F.jsxDEV)(ky,{rows:p,dateKey:u,dateFld:d,restFields:_,recordCtx:n,errorFor:(e,t)=>li(l)?s([l.key,e,t]):void 0,onUpdateRow:(e,t,n)=>{let r={...p[e],[t]:n};f.onChange(p.map((t,n)=>n===e?r:t))},onRemoveRow:e=>{f.onChange(p.filter((t,n)=>n!==e))},onAddRow:e=>{f.onChange([...p,{[u]:e}])},rowTools:g,editing:m},void 0,!1,{fileName:q,lineNumber:410,columnNumber:5},this);return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(o)} flex flex-col gap-1 min-w-0`,"data-testid":`calendar`,children:[l.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(l.label),count:p.length,actions:!h&&f.actions},void 0,!1,{fileName:q,lineNumber:429,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:o+1,children:v},void 0,!1,{fileName:q,lineNumber:430,columnNumber:7},this)]},void 0,!0,{fileName:q,lineNumber:428,columnNumber:5},this):v}D({kinds:[`calendar`],layout:`block`,Page:Ay,editor:`own`});var jy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/journal.tsx`;function My(e,t,n,r,i,a,o,s){return r?(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:n,value:t[n]??``,onChange:a,mode:`edit`,bare:!0,recordCtx:o,error:s},void 0,!1,{fileName:jy,lineNumber:84,columnNumber:7},this):(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:i?n:void 0,value:t[n]??``,mode:`view`,bare:!i,recordCtx:o,onChange:i?a:void 0,error:s},void 0,!1,{fileName:jy,lineNumber:98,columnNumber:5},this)}function Ny({el:e,value:t,recordCtx:n,mode:r}){let{t:i}=a(),o=En(),s=Ur(),{write:c}=Kn(),l=e,u=l.view?.date,d=l.view?.text,f=Ty(l,u),p=Ty(l,d),m=Jm(r,t,e=>c(e)),h=Array.isArray(m.value)?m.value:[],{editing:g,live:_,rowTools:v}=Ym(m.mode,r),{rowId:y,updateRow:b,removeRow:x,addRow:C}=Ey(h,e=>m.onChange(e));if(!f||!p||!u||!d)return(0,F.jsxDEV)(lh,{group:{...l,kind:void 0},value:t,onChange:e=>void c(e),recordCtx:n,mode:r},void 0,!1,{fileName:jy,lineNumber:134,columnNumber:7},this);let w=l.fields.filter(e=>ri(e)&&e.key!==u&&e.key!==d).map(e=>({key:e.key,type:e.type})),T=(e,t)=>li(l)?s([l.key,e,t]):void 0,E=(0,F.jsxDEV)(`div`,{className:`flex flex-col ${ln}`,children:[h.map((e,t)=>(0,F.jsxDEV)(S,{children:(0,F.jsxDEV)(`div`,{className:`flex items-start gap-3`,"data-testid":`journal-entry-${t}`,children:[(0,F.jsxDEV)(`div`,{className:`w-20 shrink-0 text-xs text-muted-foreground ${Gt(f.type)}`.trim(),"data-testid":`journal-date-${t}`,children:My(f,e,u,g,_,e=>b(t,u,e),n,T(t,u))},void 0,!1,{fileName:jy,lineNumber:156,columnNumber:13},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1 text-sm`,"data-testid":`journal-text-${t}`,children:My(p,e,d,g,_,e=>b(t,d,e),n,T(t,d))},void 0,!1,{fileName:jy,lineNumber:171,columnNumber:13},this),w.length>0&&(0,F.jsxDEV)(rr,{fields:w,row:e,editing:g,onChange:(e,n)=>b(t,e,n),recordCtx:n,error:e=>T(t,e)},void 0,!1,{fileName:jy,lineNumber:184,columnNumber:15},this),v&&(0,F.jsxDEV)(St,{className:`mt-0.5`,onClick:()=>x(t)},void 0,!1,{fileName:jy,lineNumber:193,columnNumber:26},this)]},void 0,!0,{fileName:jy,lineNumber:155,columnNumber:11},this)},y(e),!1,{fileName:jy,lineNumber:154,columnNumber:9},this)),v&&(0,F.jsxDEV)(Mt,{onClick:C,children:i(`form.addRow`)},void 0,!1,{fileName:jy,lineNumber:197,columnNumber:20},this)]},void 0,!0,{fileName:jy,lineNumber:152,columnNumber:5},this);return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(o)} flex flex-col gap-1 min-w-0`,"data-testid":`journal`,children:[l.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(l.label),count:h.length,actions:!_&&m.actions},void 0,!1,{fileName:jy,lineNumber:205,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:o+1,children:E},void 0,!1,{fileName:jy,lineNumber:206,columnNumber:7},this)]},void 0,!0,{fileName:jy,lineNumber:204,columnNumber:5},this):E}D({kinds:[`journal`],layout:`block`,Page:Ny,editor:`own`});var Py=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/manifest.tsx`;function Fy(e,t,n,r,i,a,o,s){return r?(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:n,value:t[n]??``,onChange:a,mode:`edit`,bare:!0,recordCtx:o,error:s},void 0,!1,{fileName:Py,lineNumber:62,columnNumber:7},this):(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:i?n:void 0,value:t[n]??``,mode:`view`,bare:!i,recordCtx:o,onChange:i?a:void 0,error:s},void 0,!1,{fileName:Py,lineNumber:76,columnNumber:5},this)}function Iy({el:e,value:t,recordCtx:n,mode:r}){let{t:i}=a(),o=En(),s=Ur(),{write:c}=Kn(),l=e,u=l.view?.quantity,d=l.view?.item,f=Ty(l,u),p=Ty(l,d),m=Jm(r,t,e=>c(e)),h=Array.isArray(m.value)?m.value:[],{editing:g,live:_,rowTools:v}=Ym(m.mode,r),{rowId:y,updateRow:b,removeRow:x,addRow:C}=Ey(h,e=>m.onChange(e));if(!f||!p||!u||!d)return(0,F.jsxDEV)(lh,{group:{...l,kind:void 0},value:t,onChange:e=>void c(e),recordCtx:n,mode:r},void 0,!1,{fileName:Py,lineNumber:110,columnNumber:7},this);let w=l.fields.filter(e=>ri(e)&&e.key!==u&&e.key!==d).map(e=>({key:e.key,type:e.type})),T=(e,t)=>li(l)?s([l.key,e,t]):void 0,E=(0,F.jsxDEV)(`div`,{className:`flex flex-col ${ln}`,children:[h.map((e,t)=>(0,F.jsxDEV)(S,{children:(0,F.jsxDEV)(`div`,{className:`flex items-center gap-3`,"data-testid":`manifest-row-${t}`,children:[(0,F.jsxDEV)(`div`,{className:`w-12 shrink-0 text-right text-sm ${Gt(f.type)}`.trim(),"data-testid":`manifest-quantity-${t}`,children:Fy(f,e,u,g,_,e=>b(t,u,e),n,T(t,u))},void 0,!1,{fileName:Py,lineNumber:132,columnNumber:13},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1 text-sm`,"data-testid":`manifest-item-${t}`,children:Fy(p,e,d,g,_,e=>b(t,d,e),n,T(t,d))},void 0,!1,{fileName:Py,lineNumber:147,columnNumber:13},this),w.length>0&&(0,F.jsxDEV)(rr,{fields:w,row:e,editing:g,onChange:(e,n)=>b(t,e,n),recordCtx:n,error:e=>T(t,e)},void 0,!1,{fileName:Py,lineNumber:160,columnNumber:15},this),v&&(0,F.jsxDEV)(St,{onClick:()=>x(t)},void 0,!1,{fileName:Py,lineNumber:169,columnNumber:26},this)]},void 0,!0,{fileName:Py,lineNumber:131,columnNumber:11},this)},y(e),!1,{fileName:Py,lineNumber:130,columnNumber:9},this)),v&&(0,F.jsxDEV)(Mt,{onClick:C,children:i(`form.addRow`)},void 0,!1,{fileName:Py,lineNumber:173,columnNumber:20},this)]},void 0,!0,{fileName:Py,lineNumber:128,columnNumber:5},this);return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(o)} flex flex-col gap-1 min-w-0`,"data-testid":`manifest`,children:[l.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(l.label),count:h.length,actions:!_&&m.actions},void 0,!1,{fileName:Py,lineNumber:181,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:o+1,children:E},void 0,!1,{fileName:Py,lineNumber:182,columnNumber:7},this)]},void 0,!0,{fileName:Py,lineNumber:180,columnNumber:5},this):E}D({kinds:[`manifest`],layout:`block`,Page:Iy,editor:`own`});var Ly=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/assay.tsx`;function Ry(e){if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);return Number.isFinite(t)?t:null}return null}function zy({value:e,low:t,high:n}){return e===null?!1:t!==null&&e<t||n!==null&&e>n}function By(e){let{value:t,low:n,high:r}=e;if(n===null||r===null||!(r>n))return null;let i=r-n,a=n-i*.6,o=r+i*.6,s=e=>(e-a)/(o-a)*100;return{refLeft:s(n),refWidth:s(r)-s(n),tick:t===null?null:Math.min(100,Math.max(0,s(t)))}}function Vy(e,t,n,r,i,a,o,s){return r?(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:n,value:t[n]??``,onChange:a,mode:`edit`,bare:!0,recordCtx:o,error:s},void 0,!1,{fileName:Ly,lineNumber:108,columnNumber:7},this):(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:i?n:void 0,value:t[n]??``,mode:`view`,bare:!i,recordCtx:o,onChange:i?a:void 0,error:s},void 0,!1,{fileName:Ly,lineNumber:122,columnNumber:5},this)}function Hy({reading:e,out:t,idx:n}){let r=By(e);return r?(0,F.jsxDEV)(`div`,{className:`relative h-2.5 min-w-0`,"data-testid":`assay-band-${n}`,"data-out":t||void 0,children:[(0,F.jsxDEV)(`span`,{className:`absolute inset-x-0 top-1 block h-0.5 rounded-full bg-border`},void 0,!1,{fileName:Ly,lineNumber:145,columnNumber:7},this),(0,F.jsxDEV)(`span`,{className:`absolute top-[3px] block h-0.5 rounded-full bg-success`,style:{left:`${r.refLeft}%`,width:`${r.refWidth}%`}},void 0,!1,{fileName:Ly,lineNumber:151,columnNumber:7},this),r.tick!==null&&(0,F.jsxDEV)(`span`,{className:`absolute -top-px block h-3 w-0.5 -translate-x-1/2 rounded-full ${t?`w-1 bg-destructive`:`bg-text`}`,style:{left:`${r.tick}%`},"data-testid":`assay-tick-${n}`},void 0,!1,{fileName:Ly,lineNumber:156,columnNumber:9},this)]},void 0,!0,{fileName:Ly,lineNumber:143,columnNumber:5},this):(0,F.jsxDEV)(`div`,{"data-testid":`assay-band-${n}`},void 0,!1,{fileName:Ly,lineNumber:141,columnNumber:21},this)}function Uy({el:e,value:t,recordCtx:n,mode:r}){let{t:i}=a(),o=En(),s=Ur(),{write:c}=Kn(),l=e,u=l.view?.analyte,d=l.view?.value,f=l.view?.unit,p=l.view?.low,m=l.view?.high,h=Ty(l,u),g=Ty(l,d),_=Ty(l,f),v=Jm(r,t,e=>c(e)),y=Array.isArray(v.value)?v.value:[],{editing:b,live:x,rowTools:C}=Ym(v.mode,r),{rowId:w,updateRow:T,removeRow:E,addRow:ee}=Ey(y,e=>v.onChange(e));if(!h||!g||!u||!d)return(0,F.jsxDEV)(lh,{group:{...l,kind:void 0},value:t,onChange:e=>void c(e),recordCtx:n,mode:r},void 0,!1,{fileName:Ly,lineNumber:192,columnNumber:7},this);let te=new Set([u,d,f,p,m].filter(Boolean)),ne=l.fields.filter(e=>ri(e)&&!te.has(e.key)).map(e=>({key:e.key,type:e.type})),D=(e,t)=>li(l)?s([l.key,e,t]):void 0,re=e=>({value:Ry(e[d]),low:p?Ry(e[p]):null,high:m?Ry(e[m]):null}),ie=(0,F.jsxDEV)(`div`,{className:`flex flex-col ${ln}`,children:[y.map((e,t)=>{let r=re(e),i=zy(r);return(0,F.jsxDEV)(S,{children:(0,F.jsxDEV)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto] items-center gap-x-3 gap-y-1 @sm:grid-cols-[minmax(0,1.4fr)_auto_minmax(90px,1.1fr)]`,"data-testid":`assay-row-${t}`,"data-out":i||void 0,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 text-sm`,"data-testid":`assay-analyte-${t}`,children:Vy(h,e,u,b,x,e=>T(t,u,e),n,D(t,u))},void 0,!1,{fileName:Ly,lineNumber:230,columnNumber:15},this),(0,F.jsxDEV)(`div`,{className:`flex items-baseline justify-end gap-1 text-sm`,children:[(0,F.jsxDEV)(`span`,{className:`font-semibold ${i?`text-destructive`:``} ${Gt(g.type)}`.trim(),"data-testid":`assay-value-${t}`,children:Vy(g,e,d,b,x,e=>T(t,d,e),n,D(t,d))},void 0,!1,{fileName:Ly,lineNumber:244,columnNumber:17},this),_&&f&&(0,F.jsxDEV)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,"data-testid":`assay-unit-${t}`,children:Vy(_,e,f,b,x,e=>T(t,f,e),n,D(t,f))},void 0,!1,{fileName:Ly,lineNumber:260,columnNumber:19},this)]},void 0,!0,{fileName:Ly,lineNumber:243,columnNumber:15},this),(0,F.jsxDEV)(`div`,{className:`col-span-2 min-w-0 @sm:col-span-1`,children:b?(0,F.jsxDEV)(rr,{fields:[p,m].filter(e=>!!e).map(e=>({key:e,type:Ty(l,e).type})),row:e,editing:!0,onChange:(e,n)=>T(t,e,n),recordCtx:n,error:e=>D(t,e)},void 0,!1,{fileName:Ly,lineNumber:279,columnNumber:19},this):(0,F.jsxDEV)(Hy,{reading:r,out:i,idx:t},void 0,!1,{fileName:Ly,lineNumber:290,columnNumber:19},this)},void 0,!1,{fileName:Ly,lineNumber:277,columnNumber:15},this),ne.length>0&&(0,F.jsxDEV)(`div`,{className:`col-span-2 min-w-0 @sm:col-span-3`,children:(0,F.jsxDEV)(rr,{fields:ne,row:e,editing:b,onChange:(e,n)=>T(t,e,n),recordCtx:n,error:e=>D(t,e)},void 0,!1,{fileName:Ly,lineNumber:296,columnNumber:19},this)},void 0,!1,{fileName:Ly,lineNumber:295,columnNumber:17},this),C&&(0,F.jsxDEV)(`div`,{className:`col-span-2 flex justify-end @sm:col-span-3`,children:(0,F.jsxDEV)(St,{onClick:()=>E(t)},void 0,!1,{fileName:Ly,lineNumber:309,columnNumber:19},this)},void 0,!1,{fileName:Ly,lineNumber:308,columnNumber:17},this)]},void 0,!0,{fileName:Ly,lineNumber:225,columnNumber:13},this)},w(e),!1,{fileName:Ly,lineNumber:224,columnNumber:11},this)}),C&&(0,F.jsxDEV)(Mt,{onClick:ee,children:i(`form.addRow`)},void 0,!1,{fileName:Ly,lineNumber:316,columnNumber:20},this)]},void 0,!0,{fileName:Ly,lineNumber:219,columnNumber:5},this);return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(o)} flex flex-col gap-1 min-w-0`,"data-testid":`assay`,children:[l.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(l.label),count:y.length,actions:!x&&v.actions},void 0,!1,{fileName:Ly,lineNumber:324,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:o+1,children:ie},void 0,!1,{fileName:Ly,lineNumber:325,columnNumber:7},this)]},void 0,!0,{fileName:Ly,lineNumber:323,columnNumber:5},this):ie}D({kinds:[`assay`],layout:`block`,Page:Uy,editor:`own`});var Wy=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/flow.tsx`;function Gy({slot:e,testid:t}){let{t:n}=a();return(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,"data-testid":t,children:[e.handle.field.label&&(0,F.jsxDEV)(`div`,{className:`min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,children:n(e.handle.field.label)},void 0,!1,{fileName:Wy,lineNumber:35,columnNumber:35},this),(0,F.jsxDEV)(`div`,{className:`mt-0.5 min-w-0 text-sm`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:Wy,lineNumber:37,columnNumber:9},this)},void 0,!1,{fileName:Wy,lineNumber:36,columnNumber:7},this)]},void 0,!0,{fileName:Wy,lineNumber:34,columnNumber:5},this)}function Ky({el:e}){let{t}=a(),n=En(),r=e,i=r.view?.amount,o=r.view?.from,s=r.view?.to,c=r.view?.meta??[],l=j(),u=N_(l,i),d=N_(l,o),f=N_(l,s),p=P_(l,c).filter(e=>!e.handle.hidden),m=[d,f].filter(e=>!!e&&!e.handle.hidden);return(0,F.jsxDEV)(`section`,{className:`${pr(n)} flex flex-col gap-1 min-w-0`,"data-testid":`flow`,"data-ends":m.length,children:[r.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:t(r.label)},void 0,!1,{fileName:Wy,lineNumber:69,columnNumber:19},this),(0,F.jsxDEV)(Ft,{depth:n+1,children:(0,F.jsxDEV)(`div`,{className:`rounded-xl border border-border border-l-4 bg-card px-4 py-3`,children:[u&&(0,F.jsxDEV)(`div`,{className:`text-2xl font-semibold`,"data-testid":`flow-amount`,children:(0,F.jsxDEV)(A,{name:u.name},void 0,!1,{fileName:Wy,lineNumber:74,columnNumber:15},this)},void 0,!1,{fileName:Wy,lineNumber:73,columnNumber:13},this),m.length>0&&(0,F.jsxDEV)(`div`,{className:`mt-3 flex flex-wrap items-end gap-3`,"data-testid":`flow-path`,children:[d&&!d.handle.hidden&&(0,F.jsxDEV)(Gy,{slot:d,testid:`flow-from`},void 0,!1,{fileName:Wy,lineNumber:80,columnNumber:47},this),m.length===2&&(0,F.jsxDEV)(`span`,{"aria-hidden":!0,className:`shrink-0 pb-0.5 text-lg text-faint`,children:`→`},void 0,!1,{fileName:Wy,lineNumber:84,columnNumber:17},this),f&&!f.handle.hidden&&(0,F.jsxDEV)(Gy,{slot:f,testid:`flow-to`},void 0,!1,{fileName:Wy,lineNumber:88,columnNumber:43},this)]},void 0,!0,{fileName:Wy,lineNumber:79,columnNumber:13},this),p.length>0&&(0,F.jsxDEV)(`div`,{className:`mt-4 border-t border-border pt-3`,"data-testid":`flow-meta`,children:(0,F.jsxDEV)(qe,{items:p.map(e=>({key:e.name,span:pt(e.handle.field),node:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:Wy,lineNumber:98,columnNumber:25},this)}))},void 0,!1,{fileName:Wy,lineNumber:94,columnNumber:15},this)},void 0,!1,{fileName:Wy,lineNumber:93,columnNumber:13},this)]},void 0,!0,{fileName:Wy,lineNumber:71,columnNumber:9},this)},void 0,!1,{fileName:Wy,lineNumber:70,columnNumber:7},this)]},void 0,!0,{fileName:Wy,lineNumber:64,columnNumber:5},this)}D({kinds:[`flow`],layout:`block`,Page:Ky,editor:`own`});var J=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/table.tsx`,qy=` __table_none__`;function Jy(e){return e.fields.filter(e=>ri(e))}var Yy=new Set;function Xy(e,t,n){let r=`${e.key}:${t}:${n}`;Yy.has(r)||(Yy.add(r),console.warn(`[table] '${e.key}': ${t} names '${n}', which is not a column of the row; ignored.`))}function Zy(e,t){let n=Ki(e.type,e.key,t),r=Hi(e.type),i=r?Pi(n,r):n,a=i==null||i===``?NaN:Number(i);return Number.isFinite(a)?a:void 0}function Qy(e,t,n){if(e===`count`)return n.length;let r=n.map(e=>Zy(t,e)).filter(e=>e!==void 0);if(r.length){if(e===`sum`)return r.reduce((e,t)=>e+t,0);if(e===`avg`)return r.reduce((e,t)=>e+t,0)/r.length;if(e===`min`)return Math.min(...r);if(e!==`range`)return Math.max(...r)}}function $y(e,t){let n=t.map(t=>Zy(e,t)).filter(e=>e!==void 0);if(n.length)return[Math.min(...n),Math.max(...n)]}function eb(e,t,n){let r=Hi(e.type);return r?Ii(t.map(t=>Ki(e.type,e.key,t)).find(e=>e&&typeof e==`object`),r,n):n}function tb(e,t,n,r,i,a,o){return n?(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:e.key,value:t[e.key]??``,onChange:i,mode:`edit`,bare:!0,recordCtx:a,error:o},void 0,!1,{fileName:J,lineNumber:135,columnNumber:7},this):(0,F.jsxDEV)(We,{el:e,field:e.type,fieldKey:r?e.key:void 0,value:t[e.key]??``,mode:`view`,bare:!r,recordCtx:a,onChange:r?i:void 0,error:o},void 0,!1,{fileName:J,lineNumber:149,columnNumber:5},this)}function nb({el:e,value:t,recordCtx:n,mode:r}){let{t:i,i18n:o}=a(),s=En(),c=Ur(),{write:l}=Kn(),u=e,d=Jy(u),f=u.view?.sort,p=u.view?.dir??`asc`,m=e=>d.find(t=>t.key===e);f&&!m(f)&&Xy(u,`sort`,f);let[h,g]=(0,P.useState)(f&&m(f)?{key:f,dir:p}:null),_=e=>g(t=>t?.key===e?t.dir===`asc`?{key:e,dir:`desc`}:null:{key:e,dir:`asc`}),v=Jm(r,t,e=>l(e)),y=Array.isArray(v.value)?v.value:[],{editing:b,live:x,rowTools:S}=Ym(v.mode,r),C=(0,P.useMemo)(()=>({t:i,locale:o.language}),[i,o.language]),w=(0,P.useMemo)(()=>{if(b||!h)return y;let e=m(h.key);return e?Bt(y,h.key,h.dir,e.type,C):y},[y,h,b,C]),T=(0,P.useMemo)(()=>new Map(y.map((e,t)=>[e,t])),[y]),E=u.view?.groupBy,ee=m(E);E&&!ee&&Xy(u,`groupBy`,E);let te=(0,P.useMemo)(()=>{if(b||!E||!ee)return[{key:null,sort:``,label:``,rows:w}];let e=new Map,t=[];for(let n of w){let r=Je(ee.type,Ki(ee.type,E,n),C)[0];if(!r){t.push(n);continue}let i=e.get(r.value)??{key:r.value,sort:r.sort??r.value,label:r.label,rows:[]};i.rows.push(n),e.set(r.value,i)}let n=[...e.values()].sort((e,t)=>e.sort.localeCompare(t.sort,void 0,{numeric:!0,sensitivity:`base`}));return t.length&&n.push({key:qy,sort:qy,label:i(`table.noValue`),rows:t}),n},[w,b,E,ee,C,i]),ne=u.view?.numbered===!0,D=u.view?.totals;for(let e of Object.keys(D??{}))m(e)||Xy(u,`totals`,e);let re=!!(D&&Object.keys(D).some(e=>m(e))),ie=(e,t)=>(0,F.jsxDEV)(`tr`,{"data-testid":t,className:`text-xs text-muted-foreground`,children:[ne&&(0,F.jsxDEV)(`td`,{className:`border-b border-border py-1.5 pr-3`},void 0,!1,{fileName:J,lineNumber:249,columnNumber:20},this),d.map((t,r)=>{let a=D?.[t.key],o=a&&m(t.key)?Qy(a,t,e):void 0;return(0,F.jsxDEV)(`td`,{className:`border-b border-border py-1.5 pr-4 ${Gt(t.type)}`.trim(),children:[r===0&&!D?.[t.key]?i(`table.total`):null,o===void 0?null:(0,F.jsxDEV)(We,{el:t,field:t.type,value:eb(t,e,o),mode:`view`,bare:!0,recordCtx:n},void 0,!1,{fileName:J,lineNumber:257,columnNumber:15},this)]},t.key,!0,{fileName:J,lineNumber:254,columnNumber:11},this)}),S&&(0,F.jsxDEV)(`td`,{className:`border-b border-border`},void 0,!1,{fileName:J,lineNumber:269,columnNumber:20},this)]},void 0,!0,{fileName:J,lineNumber:248,columnNumber:5},this),{rowId:ae,updateRow:oe,removeRow:se,addRow:ce}=Ey(y,e=>v.onChange(e)),le=(e,t)=>li(u)?c([u.key,e,t]):void 0,ue=(e,t,r)=>(0,F.jsxDEV)(`tr`,{"data-testid":`table-row-${t}`,children:[ne&&(0,F.jsxDEV)(`td`,{className:`border-b border-border py-2 pr-3 text-xs text-muted-foreground`,children:r},void 0,!1,{fileName:J,lineNumber:280,columnNumber:20},this),d.map(r=>(0,F.jsxDEV)(`td`,{className:`border-b border-border py-2 pr-4 align-top ${Gt(r.type)}`.trim(),children:[(0,F.jsxDEV)(`span`,{className:`table-cell-label ${De}`,children:i(r.type.label)},void 0,!1,{fileName:J,lineNumber:286,columnNumber:11},this),tb(r,e,b,x,e=>oe(t,r.key,e),n,le(t,r.key))]},r.key,!0,{fileName:J,lineNumber:282,columnNumber:9},this)),S&&(0,F.jsxDEV)(`td`,{className:`border-b border-border py-2 align-top`,children:(0,F.jsxDEV)(St,{className:`mt-0.5`,onClick:()=>se(t)},void 0,!1,{fileName:J,lineNumber:292,columnNumber:11},this)},void 0,!1,{fileName:J,lineNumber:291,columnNumber:9},this)]},ae(e),!0,{fileName:J,lineNumber:279,columnNumber:5},this),de=u.view?.summary,fe=(e,t)=>(0,F.jsxDEV)(We,{el:e,field:e.type,value:eb(e,y,t),mode:`view`,recordCtx:n},void 0,!1,{fileName:J,lineNumber:312,columnNumber:5},this),pe=Object.entries(de??{}).flatMap(([e,t])=>{let n=d.find(t=>t.key===e);if(!n)return[];if(t===`range`){let t=$y(n,y);return t?[{key:e,node:(0,F.jsxDEV)(F.Fragment,{children:[fe(n,t[0]),` `,(0,F.jsxDEV)(`span`,{className:`text-muted-foreground`,children:`–`},void 0,!1,{fileName:J,lineNumber:325,columnNumber:38},this),` `,fe(n,t[1])]},void 0,!0,{fileName:J,lineNumber:324,columnNumber:17},this)}]:[]}let r=Qy(t,n,y);return r===void 0?[]:[{key:e,node:t===`count`?(0,F.jsxDEV)(F.Fragment,{children:r},void 0,!1,{fileName:J,lineNumber:334,columnNumber:45},this):fe(n,r)}]}),me=(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2 min-w-0`,children:[pe.length>0&&(0,F.jsxDEV)(`div`,{className:`flex flex-wrap items-baseline gap-x-3 gap-y-1 text-sm text-muted-foreground`,"data-testid":`table-summary`,children:pe.map((e,t)=>(0,F.jsxDEV)(`span`,{className:`inline-flex items-baseline gap-1 text-foreground ${t>0?`before:mr-2 before:text-muted-foreground before:content-['·']`:``}`,children:e.node},e.key,!1,{fileName:J,lineNumber:345,columnNumber:13},this))},void 0,!1,{fileName:J,lineNumber:340,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`table-fold overflow-auto max-h-[60vh]`,children:(0,F.jsxDEV)(`table`,{className:`w-full border-separate border-spacing-0 text-sm`,"data-testid":`table-block`,children:[(0,F.jsxDEV)(`thead`,{className:`eink-solid sticky top-0 z-10 bg-background/95 backdrop-blur`,children:(0,F.jsxDEV)(`tr`,{children:[ne&&(0,F.jsxDEV)(`th`,{className:`border-b border-border py-1.5 pr-3`},void 0,!1,{fileName:J,lineNumber:365,columnNumber:28},this),d.map(e=>(0,F.jsxDEV)(`th`,{className:`border-b border-border py-1.5 pr-4 text-left ${De}`,children:(0,F.jsxDEV)(`button`,{type:`button`,className:`inline-flex items-center gap-1 focus-visible:outline-2 focus-visible:outline-ring`,onClick:()=>_(e.key),children:[i(e.type.label),!b&&h?.key===e.key&&(0,F.jsxDEV)(Fn,{name:h.dir===`asc`?`lucide:arrow-up`:`lucide:arrow-down`,className:`size-3`},void 0,!1,{fileName:J,lineNumber:377,columnNumber:23},this)]},void 0,!0,{fileName:J,lineNumber:368,columnNumber:19},this)},e.key,!1,{fileName:J,lineNumber:367,columnNumber:17},this)),S&&(0,F.jsxDEV)(`th`,{className:`border-b border-border`},void 0,!1,{fileName:J,lineNumber:382,columnNumber:28},this)]},void 0,!0,{fileName:J,lineNumber:364,columnNumber:13},this)},void 0,!1,{fileName:J,lineNumber:363,columnNumber:11},this),te.map(e=>(0,F.jsxDEV)(`tbody`,{children:[e.key!==null&&(0,F.jsxDEV)(`tr`,{"data-testid":`table-group-${e.key}`,children:(0,F.jsxDEV)(`th`,{colSpan:d.length+ +!!ne+ +!!S,className:`border-b border-border pt-4 pb-1 text-left min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground ${ee?Gt(ee.type):``}`.trim(),children:[e.key===qy||!ee?e.label:(0,F.jsxDEV)(We,{el:ee,field:ee.type,value:e.rows[0]?.[E??``],mode:`view`,bare:!0,recordCtx:n},void 0,!1,{fileName:J,lineNumber:420,columnNumber:23},this),` `,(0,F.jsxDEV)(`span`,{className:`text-faint`,children:e.rows.length},void 0,!1,{fileName:J,lineNumber:429,columnNumber:21},this)]},void 0,!0,{fileName:J,lineNumber:389,columnNumber:19},this)},void 0,!1,{fileName:J,lineNumber:388,columnNumber:17},this),e.rows.map((e,t)=>ue(e,T.get(e)??-1,t+1)),re&&e.key!==null&&ie(e.rows,`table-subtotal-${e.key}`)]},e.key??`all`,!0,{fileName:J,lineNumber:386,columnNumber:13},this)),re&&(0,F.jsxDEV)(`tfoot`,{children:ie(y,`table-total`)},void 0,!1,{fileName:J,lineNumber:441,columnNumber:25},this)]},void 0,!0,{fileName:J,lineNumber:362,columnNumber:9},this)},void 0,!1,{fileName:J,lineNumber:361,columnNumber:7},this),S&&(0,F.jsxDEV)(Mt,{onClick:ce,children:i(`form.addRow`)},void 0,!1,{fileName:J,lineNumber:444,columnNumber:20},this)]},void 0,!0,{fileName:J,lineNumber:338,columnNumber:5},this);return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(s)} flex flex-col gap-1 min-w-0`,"data-testid":`table`,children:[u.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(u.label),count:y.length,actions:!x&&v.actions},void 0,!1,{fileName:J,lineNumber:452,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:s+1,children:me},void 0,!1,{fileName:J,lineNumber:453,columnNumber:7},this)]},void 0,!0,{fileName:J,lineNumber:451,columnNumber:5},this):me}D({kinds:[`table`],layout:`block`,Page:nb,editor:`own`});var rb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/properties.tsx`,ib={2:`grid-cols-1 @sm:grid-cols-2`,3:`grid-cols-1 @sm:grid-cols-2 @md:grid-cols-3`,4:`grid-cols-1 @sm:grid-cols-2 @md:grid-cols-4`};function ab({el:e}){let t=e,n=ib[t.view?.columns??2]??ib[2],r=j(),i=(0,F.jsxDEV)(`div`,{className:`@container grid gap-x-4 gap-y-3.5 p-4 rounded-xl border border-border bg-muted ${n}`,children:r.map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`min-w-0`,"data-testid":`properties-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:rb,lineNumber:30,columnNumber:13},this)},e.name,!1,{fileName:rb,lineNumber:29,columnNumber:11},this))},void 0,!1,{fileName:rb,lineNumber:25,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:i},void 0,!1,{fileName:rb,lineNumber:38,columnNumber:5},this)}D({kinds:[`properties`],layout:`block`,editor:`own`,Page:ab});var ob=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/stack.tsx`;function sb({el:e}){let t=e,n=(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-3 w-full`,children:j().map((e,t)=>e.handle.hidden?null:(0,F.jsxDEV)(`div`,{className:`w-full min-w-0`,"data-testid":`stack-item-${t}`,children:(0,F.jsxDEV)(A,{name:e.name},void 0,!1,{fileName:ob,lineNumber:19,columnNumber:13},this)},e.name,!1,{fileName:ob,lineNumber:18,columnNumber:11},this))},void 0,!1,{fileName:ob,lineNumber:14,columnNumber:5},this);return(0,F.jsxDEV)(F_,{label:t.label,icon:t.icon,children:n},void 0,!1,{fileName:ob,lineNumber:27,columnNumber:5},this)}D({kinds:[`stack`],layout:`block`,editor:`own`,Page:sb});function cb(e){let t=typeof e==`string`?e:typeof e==`number`?String(e):``,n=/^(\d{4})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2}))?)?/.exec(t);if(n)return Date.UTC(Number(n[1]),Number(n[2])-1,Number(n[3]),Number(n[4]??0),Number(n[5]??0),Number(n[6]??0))}function lb(e){if(typeof e==`number`)return Number.isFinite(e)?e:void 0;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);return Number.isFinite(t)?t:void 0}}function ub(e,t,n){let r=[];for(let i of e){let e=lb(i[t]);e!==void 0&&r.push({value:e,t:cb(i[n]),row:i})}return r.length>1&&r.every(e=>e.t!==void 0)&&r.sort((e,t)=>e.t-t.t),r}function db(e){return Math.round(e*100)/100}function fb(e,t){let n=t.pad??0,r=Math.max(0,t.width-n*2),i=Math.max(0,t.height-n*2),a=e.filter(e=>Number.isFinite(e.value));if(a.length===0)return{path:``,coords:[],min:void 0,max:void 0};let o=a.map(e=>e.value),s=Math.min(...o),c=Math.max(...o),l=c-s,u=a.map((e,t)=>{let o=a.length>1?t/(a.length-1):0,c=l>0?(e.value-s)/l:.5;return{x:db(n+o*r),y:db(n+(1-c)*i)}}),d=u.map((e,t)=>`${t===0?`M`:`L`} ${e.x} ${e.y}`).join(` `);return{path:u.length===1?`${d} L ${u[0].x} ${u[0].y}`:d,coords:u,min:s,max:c}}function pb(e){if(!(e.length<2))return e[e.length-1].value-e[e.length-2].value}var mb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/chart.tsx`,hb={width:100,height:28,pad:2};function gb(e){let t=Math.round(e*100)/100;return`${t>0?`+`:``}${t}`}function _b({el:e,value:t,recordCtx:n,mode:r}){let{t:i}=a(),o=En(),{write:s}=Kn(),c=e,l=c.view?.value,u=c.view?.date,d=!!c.view?.delta,f=Ty(c,l),p=Ty(c,u),m=Jm(r,t,e=>s(e)),h=Array.isArray(m.value)?m.value:[],g=m.mode!==`view`;if(!l||!u||!f||!p)return(0,F.jsxDEV)(lh,{group:{...c,kind:void 0},value:t,onChange:e=>void s(e),recordCtx:n,mode:r},void 0,!1,{fileName:mb,lineNumber:75,columnNumber:7},this);let _=ub(h,l,u),v=fb(_,hb),y=_[_.length-1],b=d?pb(_):void 0,x=(0,F.jsxDEV)(lh,{group:{...c,kind:void 0},value:m.value,onChange:e=>m.onChange(e),recordCtx:n,mode:`edit`},void 0,!1,{fileName:mb,lineNumber:95,columnNumber:5},this),S=e=>(0,F.jsxDEV)(We,{el:f,field:f.type,value:e.row?.[l]??e.value,mode:`view`,bare:!0,recordCtx:n},void 0,!1,{fileName:mb,lineNumber:109,columnNumber:5},this),C=_.length?_.reduce((e,t)=>t.value<e.value?t:e):void 0,w=_.length?_.reduce((e,t)=>t.value>e.value?t:e):void 0,T=y===void 0?(0,F.jsxDEV)(`p`,{className:`py-1 text-sm text-muted-foreground`,"data-testid":`chart-empty`,children:i(`form.noSeries`,`No readings yet`)},void 0,!1,{fileName:mb,lineNumber:123,columnNumber:7},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1.5`,"data-testid":`chart-body`,children:[(0,F.jsxDEV)(`div`,{className:`flex items-baseline gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 text-2xl font-semibold text-foreground ${Gt(f.type)}`.trim(),"data-testid":`chart-last`,children:S(y)},void 0,!1,{fileName:mb,lineNumber:129,columnNumber:11},this),b!==void 0&&(0,F.jsxDEV)(`span`,{className:`text-sm font-medium tabular-nums ${b>0?`text-success`:b<0?`text-destructive`:`text-muted-foreground`}`,"data-testid":`chart-delta`,children:gb(b)},void 0,!1,{fileName:mb,lineNumber:143,columnNumber:13},this)]},void 0,!0,{fileName:mb,lineNumber:128,columnNumber:9},this),(0,F.jsxDEV)(`svg`,{className:`h-12 w-full text-primary`,viewBox:`0 0 ${hb.width} ${hb.height}`,preserveAspectRatio:`none`,"aria-hidden":`true`,"data-testid":`chart-spark`,children:(0,F.jsxDEV)(`path`,{d:v.path,"data-testid":`chart-path`,fill:`none`,stroke:`currentColor`,strokeWidth:1.5,strokeLinecap:`round`,strokeLinejoin:`round`,vectorEffect:`non-scaling-stroke`},void 0,!1,{fileName:mb,lineNumber:160,columnNumber:11},this)},void 0,!1,{fileName:mb,lineNumber:151,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`flex items-baseline gap-1 text-[10px] text-muted-foreground ${Gt(f.type)}`.trim(),"data-testid":`chart-range`,children:[C&&S(C),(0,F.jsxDEV)(`span`,{"aria-hidden":`true`,children:`–`},void 0,!1,{fileName:mb,lineNumber:182,columnNumber:11},this),w&&S(w)]},void 0,!0,{fileName:mb,lineNumber:177,columnNumber:9},this)]},void 0,!0,{fileName:mb,lineNumber:127,columnNumber:7},this),E=g?x:T;return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(o)} flex flex-col gap-1 min-w-0`,"data-testid":`chart`,children:[c.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(c.label),count:h.length,actions:m.actions},void 0,!1,{fileName:mb,lineNumber:194,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:o+1,children:E},void 0,!1,{fileName:mb,lineNumber:195,columnNumber:7},this)]},void 0,!0,{fileName:mb,lineNumber:193,columnNumber:5},this):E}D({kinds:[`chart`],layout:`block`,Page:_b,editor:`own`});var vb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web-ui/src/render/blocks/heatmap.tsx`,yb=864e5,bb=4,xb=260;function Sb(e,t,n){return!Number.isFinite(e)||e<=0?0:n===t?Math.ceil(bb/2):Math.min(bb,Math.max(1,Math.ceil(e/n*bb)))}function Cb(e){return Math.floor(e/yb)*yb}function wb(e){return new Date(e).toISOString().slice(0,10)}function Tb(e){return(new Date(e).getUTCDay()+6)%7}function Eb(e){return e-Tb(e)*yb}function Db(e){return e+(6-Tb(e))*yb}function Ob(e){if(e.size===0)return;let t=[...e.keys()].sort((e,t)=>e-t),n=t[0],r=t[t.length-1];if(Math.round((Db(r)-Eb(n)+yb)/(yb*7))>xb){let i=kb(t,e);n=i.from,r=i.to}let i=0;for(let[t,a]of e)(t<n||t>r)&&(i+=a);let a=Eb(n),o=Db(r),s=[];for(let e=a;e<=o;e+=yb)s.push(e);return{days:s,from:n,to:r,clipped:i}}function kb(e,t){let n=(xb*7-1)*yb,r=0,i=0,a=0,o=-1,s=Eb(e[0]);for(let c of e){let l=Eb(c),u=l+n;for(;i<e.length&&e[i]<=u;)a+=t.get(e[i++]);for(;r<e.length&&e[r]<l;)a-=t.get(e[r++]);a>=o&&(o=a,s=l)}let c=e.filter(e=>e>=s&&e<=s+n);return{from:c[0],to:c[c.length-1]}}var Ab=[`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`,`Su`];function jb({el:e,value:t,recordCtx:n,mode:r}){let{t:i}=a(),o=En(),{write:s}=Kn(),c=e,l=c.view?.date,u=Ty(c,l),d=Jm(r,t,e=>s(e)),f=Array.isArray(d.value)?d.value:[],p=d.mode!==`view`;if(!l||!u)return(0,F.jsxDEV)(lh,{group:{...c,kind:void 0},value:t,onChange:e=>void s(e),recordCtx:n,mode:r},void 0,!1,{fileName:vb,lineNumber:233,columnNumber:7},this);let m=new Map,h=0;for(let e of f){let t=cb(e[l]);if(t===void 0){h+=1;continue}let n=Cb(t);m.set(n,(m.get(n)??0)+1)}let g=Ob(m),_=g?[...m.entries()].filter(([e])=>e>=g.from&&e<=g.to).map(([,e])=>e):[],v=_.length?Math.max(..._):0,y=_.length?Math.min(..._):0,b=h+(g?.clipped??0),x=(0,F.jsxDEV)(lh,{group:{...c,kind:void 0},value:d.value,onChange:e=>d.onChange(e),recordCtx:n,mode:`edit`},void 0,!1,{fileName:vb,lineNumber:272,columnNumber:5},this),S=g?Array.from({length:g.days.length/7},(e,t)=>{let n=g.days[t*7],r=t>0?g.days[(t-1)*7]:void 0,i=new Date(n).getUTCMonth();return(0,F.jsxDEV)(`div`,{className:`h-3 whitespace-nowrap`,children:r===void 0||new Date(r).getUTCMonth()!==i?new Date(n).toLocaleDateString(void 0,{month:`short`,timeZone:`UTC`}):``},t,!1,{fileName:vb,lineNumber:288,columnNumber:11},this)}):[],C=(g?.days??[]).map(e=>{if(e<g.from||e>g.to)return(0,F.jsxDEV)(`div`,{className:`h-4 w-4`,"data-testid":`heatmap-pad`},e,!1,{fileName:vb,lineNumber:301,columnNumber:14},this);let t=m.get(e)??0,n=Sb(t,y,v),r=wb(e);return(0,F.jsxDEV)(`div`,{"data-testid":`heatmap-day-${r}`,"data-count":t,"data-level":n,title:`${r} · ${t}`,className:`relative h-4 w-4 overflow-hidden rounded-[3px] border border-border`,children:[n>0&&(0,F.jsxDEV)(`span`,{"aria-hidden":!0,className:`absolute inset-x-0 bottom-0 bg-accent`,style:{height:`${Math.round(n/bb*100)}%`}},void 0,!1,{fileName:vb,lineNumber:319,columnNumber:11},this),t>0&&(0,F.jsxDEV)(`span`,{className:`sr-only`,children:`${r} · ${t}`},void 0,!1,{fileName:vb,lineNumber:327,columnNumber:23},this)]},e,!0,{fileName:vb,lineNumber:307,columnNumber:7},this)}),w=g===void 0?(0,F.jsxDEV)(`p`,{className:`py-1 text-sm text-muted-foreground`,"data-testid":`heatmap-empty`,children:i(`form.noDates`,`No dated entries yet`)},void 0,!1,{fileName:vb,lineNumber:334,columnNumber:7},this):(0,F.jsxDEV)(`div`,{className:`max-w-full overflow-x-auto`,"data-testid":`heatmap-body`,children:(0,F.jsxDEV)(`div`,{className:`inline-flex flex-col gap-1`,children:[(0,F.jsxDEV)(`div`,{className:`flex gap-1`,children:[(0,F.jsxDEV)(`div`,{className:`w-5 shrink-0`},void 0,!1,{fileName:vb,lineNumber:341,columnNumber:13},this),(0,F.jsxDEV)(`div`,{className:`grid grid-flow-col auto-cols-[1rem] gap-1 text-[9px] leading-3 text-muted-foreground`,children:S},void 0,!1,{fileName:vb,lineNumber:342,columnNumber:13},this)]},void 0,!0,{fileName:vb,lineNumber:340,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`flex gap-1`,children:[(0,F.jsxDEV)(`div`,{className:`grid w-5 shrink-0 grid-rows-7 gap-1 text-[9px] leading-4 text-muted-foreground`,children:Ab.map((e,t)=>(0,F.jsxDEV)(`div`,{children:t%2==0?e:``},e,!1,{fileName:vb,lineNumber:351,columnNumber:17},this))},void 0,!1,{fileName:vb,lineNumber:347,columnNumber:13},this),(0,F.jsxDEV)(`div`,{className:`grid grid-rows-7 grid-flow-col auto-cols-[1rem] gap-1`,"data-testid":`heatmap-grid`,children:C},void 0,!1,{fileName:vb,lineNumber:354,columnNumber:13},this)]},void 0,!0,{fileName:vb,lineNumber:346,columnNumber:11},this)]},void 0,!0,{fileName:vb,lineNumber:339,columnNumber:9},this)},void 0,!1,{fileName:vb,lineNumber:338,columnNumber:7},this),T=p?x:(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1.5`,children:[w,b>0&&(0,F.jsxDEV)(`p`,{className:`text-[11px] text-muted-foreground`,"data-testid":`heatmap-offgrid`,children:i(`form.offGrid`,{n:b,defaultValue:`{{n}} not on the grid`})},void 0,!1,{fileName:vb,lineNumber:368,columnNumber:9},this)]},void 0,!0,{fileName:vb,lineNumber:365,columnNumber:5},this);return r===`view`?(0,F.jsxDEV)(`section`,{className:`${pr(o)} flex flex-col gap-1 min-w-0`,"data-testid":`heatmap`,children:[c.label&&(0,F.jsxDEV)(jt,{as:`h3`,label:i(c.label),count:f.length,actions:d.actions},void 0,!1,{fileName:vb,lineNumber:379,columnNumber:23},this),(0,F.jsxDEV)(Ft,{depth:o+1,children:T},void 0,!1,{fileName:vb,lineNumber:380,columnNumber:7},this)]},void 0,!0,{fileName:vb,lineNumber:378,columnNumber:5},this):T}D({kinds:[`heatmap`],layout:`block`,Page:jb,editor:`own`});var Mb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/admin/internal-api-token-renderer.tsx`;function Nb(){let e=crypto.getRandomValues(new Uint8Array(32)),t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function Pb({label:e}){let{t}=a(),[n,r]=(0,P.useState)([]),[i,o]=(0,P.useState)(``),[s,c]=(0,P.useState)(null),[l,u]=(0,P.useState)(!1);function d(){La().then(e=>e.ok&&r(e.data))}(0,P.useEffect)(d,[]);async function f(){if(!i.trim())return;u(!0);let e=Nb(),n=await Da(i.trim(),e);u(!1),n.ok?(c(e),o(``),d()):Qe.error(t(`auth.genericError`))}async function p(e){await yr({title:t(`auth.tokenConfirmRevoke`),confirmLabel:t(`auth.tokenRevoke`),variant:`destructive`})&&((await Ea(e)).ok?d():Qe.error(t(`auth.genericError`)))}return(0,F.jsxDEV)(`div`,{children:[(0,F.jsxDEV)(`h2`,{className:`mb-2 ${De}`,children:t(e||`auth.tokensTitle`)},void 0,!1,{fileName:Mb,lineNumber:72,columnNumber:7},this),s&&(0,F.jsxDEV)(Nt,{className:`mb-3 break-all`,children:[t(`auth.tokenCreatedOnce`),` `,(0,F.jsxDEV)(`code`,{children:s},void 0,!1,{fileName:Mb,lineNumber:75,columnNumber:40},this)]},void 0,!0,{fileName:Mb,lineNumber:74,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`mb-3 flex gap-2`,children:[(0,F.jsxDEV)(M,{placeholder:t(`auth.tokenNamePlaceholder`),value:i,onChange:e=>o(e.target.value)},void 0,!1,{fileName:Mb,lineNumber:79,columnNumber:9},this),(0,F.jsxDEV)(N,{type:`button`,disabled:l||!i.trim(),onClick:f,children:t(`auth.tokenCreate`)},void 0,!1,{fileName:Mb,lineNumber:80,columnNumber:9},this)]},void 0,!0,{fileName:Mb,lineNumber:78,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:n.map(e=>(0,F.jsxDEV)(Nr,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`font-semibold text-foreground`,children:e.name},void 0,!1,{fileName:Mb,lineNumber:88,columnNumber:15},this),(0,F.jsxDEV)(`div`,{className:`text-xs text-muted-foreground`,children:[e.createdAt,` `,e.lastUsedAt?`· last used ${e.lastUsedAt}`:``]},void 0,!0,{fileName:Mb,lineNumber:89,columnNumber:15},this)]},void 0,!0,{fileName:Mb,lineNumber:87,columnNumber:13},this),(0,F.jsxDEV)(N,{variant:`destructiveOutline`,size:`sm`,type:`button`,onClick:()=>p(e.id),className:`shrink-0`,children:t(`auth.tokenRevoke`)},void 0,!1,{fileName:Mb,lineNumber:93,columnNumber:13},this)]},e.id,!0,{fileName:Mb,lineNumber:86,columnNumber:11},this))},void 0,!1,{fileName:Mb,lineNumber:84,columnNumber:7},this)]},void 0,!0,{fileName:Mb,lineNumber:71,columnNumber:5},this)}D({kinds:[`internalApiToken`],layout:`block`,Page:Pb,editor:`own`});var Fb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/admin/internal-oauth-grants-renderer.tsx`;function Ib({label:e}){let{t}=a(),[n,r]=(0,P.useState)([]);function i(){ya().then(e=>e.ok&&r(e.data))}(0,P.useEffect)(i,[]);async function o(e){await yr({title:t(`auth.grantConfirmRevoke`),confirmLabel:t(`auth.tokenRevoke`),variant:`destructive`})&&((await ha(e)).ok?i():Qe.error(t(`auth.genericError`)))}return(0,F.jsxDEV)(`div`,{children:[(0,F.jsxDEV)(`h2`,{className:`mb-2 ${De}`,children:t(e||`auth.grantsTitle`)},void 0,!1,{fileName:Fb,lineNumber:45,columnNumber:7},this),n.length===0?(0,F.jsxDEV)(`p`,{className:`text-sm text-muted-foreground`,children:t(`auth.grantsEmpty`)},void 0,!1,{fileName:Fb,lineNumber:47,columnNumber:9},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:n.map(e=>(0,F.jsxDEV)(Nr,{className:`flex items-center gap-4 px-4 py-3`,children:[(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`font-semibold text-foreground`,children:e.clientName},void 0,!1,{fileName:Fb,lineNumber:53,columnNumber:17},this),(0,F.jsxDEV)(`div`,{className:`text-xs text-muted-foreground`,children:[e.createdAt,` `,e.lastUsedAt?`· last used ${e.lastUsedAt}`:``]},void 0,!0,{fileName:Fb,lineNumber:54,columnNumber:17},this)]},void 0,!0,{fileName:Fb,lineNumber:52,columnNumber:15},this),(0,F.jsxDEV)(N,{variant:`destructiveOutline`,size:`sm`,type:`button`,onClick:()=>o(e.clientId),className:`shrink-0`,children:t(`auth.tokenRevoke`)},void 0,!1,{fileName:Fb,lineNumber:58,columnNumber:15},this)]},e.clientId,!0,{fileName:Fb,lineNumber:51,columnNumber:13},this))},void 0,!1,{fileName:Fb,lineNumber:49,columnNumber:9},this)]},void 0,!0,{fileName:Fb,lineNumber:44,columnNumber:5},this)}D({kinds:[`internalOauthGrants`],layout:`block`,Page:Ib,editor:`own`});var Lb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/admin/internal-identity-providers-renderer.tsx`;function Rb({label:e}){let{t}=a(),[n,r]=(0,P.useState)([]),[i,o]=(0,P.useState)([]),[s,c]=(0,P.useState)(null),[l,u]=(0,P.useState)({});function d(){Fa().then(e=>{e.ok&&(r(e.data.providers),o(e.data.links))})}(0,P.useEffect)(d,[]);async function f(e){c(e);let n=await Ma(e);c(null),n.ok?u(t=>({...t,[e]:n.data})):Qe.error(t(`auth.genericError`))}async function p(e,n){await yr({title:t(`auth.linkConfirmUnlink`),confirmLabel:t(`auth.linkUnlink`),variant:`destructive`})&&((await ma(e,n)).ok?d():Qe.error(t(`auth.genericError`)))}return(0,F.jsxDEV)(`div`,{children:[(0,F.jsxDEV)(`h2`,{className:`mb-2 ${De}`,children:t(e||`auth.linksTitle`)},void 0,!1,{fileName:Lb,lineNumber:74,columnNumber:7},this),n.length===0?(0,F.jsxDEV)(`p`,{className:`text-sm text-muted-foreground`,children:t(`auth.linksEmpty`)},void 0,!1,{fileName:Lb,lineNumber:77,columnNumber:9},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:n.map(e=>{let n=t(e.label,{defaultValue:e.id}),r=i.filter(t=>t.provider===e.id),a=l[e.id];return(0,F.jsxDEV)(Nr,{className:`p-4`,children:[r.length===0?(0,F.jsxDEV)(`div`,{className:`flex items-center gap-4`,children:[(0,F.jsxDEV)(Fn,{name:e.icon,size:20,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:Lb,lineNumber:89,columnNumber:21},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`font-semibold text-foreground`,children:n},void 0,!1,{fileName:Lb,lineNumber:91,columnNumber:23},this),(0,F.jsxDEV)(`div`,{className:`text-xs text-muted-foreground`,children:t(`auth.linkNotLinked`)},void 0,!1,{fileName:Lb,lineNumber:92,columnNumber:23},this)]},void 0,!0,{fileName:Lb,lineNumber:90,columnNumber:21},this),(0,F.jsxDEV)(N,{size:`sm`,type:`button`,disabled:s===e.id,onClick:()=>f(e.id),className:`shrink-0`,children:t(`auth.linkMint`)},void 0,!1,{fileName:Lb,lineNumber:94,columnNumber:21},this)]},void 0,!0,{fileName:Lb,lineNumber:88,columnNumber:19},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-2`,children:r.map(r=>(0,F.jsxDEV)(`div`,{className:`flex items-center gap-4`,children:[(0,F.jsxDEV)(Fn,{name:e.icon,size:20,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:Lb,lineNumber:108,columnNumber:25},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`font-semibold text-foreground`,children:n},void 0,!1,{fileName:Lb,lineNumber:110,columnNumber:27},this),(0,F.jsxDEV)(`div`,{className:`text-xs text-muted-foreground`,children:r.linkedAt},void 0,!1,{fileName:Lb,lineNumber:111,columnNumber:27},this)]},void 0,!0,{fileName:Lb,lineNumber:109,columnNumber:25},this),(0,F.jsxDEV)(N,{variant:`destructiveOutline`,size:`sm`,type:`button`,onClick:()=>p(e.id,r.externalId),className:`shrink-0`,children:t(`auth.linkUnlink`)},void 0,!1,{fileName:Lb,lineNumber:113,columnNumber:25},this)]},r.externalId,!0,{fileName:Lb,lineNumber:107,columnNumber:23},this))},void 0,!1,{fileName:Lb,lineNumber:105,columnNumber:19},this),a&&(0,F.jsxDEV)(Nt,{className:`mt-3 break-all`,children:[a.code&&(0,F.jsxDEV)(F.Fragment,{children:[t(`auth.linkCodeCreatedOnce`),` `,(0,F.jsxDEV)(`code`,{children:a.code},void 0,!1,{fileName:Lb,lineNumber:131,columnNumber:57},this)]},void 0,!0,{fileName:Lb,lineNumber:130,columnNumber:23},this),a.url&&(0,F.jsxDEV)(`div`,{className:`mt-1`,children:(0,F.jsxDEV)(`a`,{href:a.url,target:`_blank`,rel:`noreferrer`,className:`underline`,children:t(`auth.linkOpenConnector`,{connector:n})},void 0,!1,{fileName:Lb,lineNumber:136,columnNumber:25},this)},void 0,!1,{fileName:Lb,lineNumber:135,columnNumber:23},this)]},void 0,!0,{fileName:Lb,lineNumber:128,columnNumber:19},this)]},e.id,!0,{fileName:Lb,lineNumber:86,columnNumber:15},this)})},void 0,!1,{fileName:Lb,lineNumber:79,columnNumber:9},this)]},void 0,!0,{fileName:Lb,lineNumber:73,columnNumber:5},this)}function zb({label:e}){return(0,F.jsxDEV)(Rb,{label:e},void 0,!1,{fileName:Lb,lineNumber:153,columnNumber:10},this)}D({kinds:[`internalIdentityLinks`],layout:`block`,Page:zb,editor:`own`}),Rn(qn);var Bb=[{pattern:`/`,purpose:`dashboard`},{pattern:`/trash`,purpose:`reversible trash for deleted records`},{pattern:`/settings`,purpose:`settings index`},{pattern:`/settings/diagnostics`,purpose:`runtime and agent diagnostics (admin)`},{pattern:`/settings/account`,purpose:`the signed-in user's own account settings`},{pattern:`/settings/users`,purpose:`user list (admin)`},{pattern:`/settings/users/new`,purpose:`form for a new user (admin)`},{pattern:`/settings/users/:id`,purpose:`one user (admin)`},{pattern:`/settings/:groupId`,purpose:`one settings group (a plugin, or the instance itself)`},{pattern:`/:library/:shelf`,purpose:`list of every record on a shelf`},{pattern:`/:library/:shelf/new`,purpose:`form for a new record on a shelf`},{pattern:`/:library/:shelf/:id`,purpose:`page of one record`}],Y=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/LoginPage.tsx`,Vb=ei({login:si.string({label:`auth.login`}),password:si.password({label:`auth.password`})}),Hb=e=>typeof e==`string`&&e.trim()!==``;function Ub(){let{t:e}=a(),{values:t,bridge:n}=_n({fm:Gi(Vb),mode:`edit`,recordCtx:{library:``,shelf:`auth`,recordId:`login`},initial:{login:``,password:``}}),[r,i]=(0,P.useState)(null),[o,s]=(0,P.useState)(!1),c=Hb(t.login)&&Hb(t.password);async function l(n){n.preventDefault(),s(!0),i(null);let r=await Na(t.login,t.password);if(s(!1),!r.ok){i(r.status===401?e(`auth.invalidCredentials`):e(`auth.genericError`));return}window.location.href=`/`}return(0,F.jsxDEV)(`main`,{className:`login-page`,children:[(0,F.jsxDEV)(`div`,{className:`login-orb login-orb-one`,"aria-hidden":`true`},void 0,!1,{fileName:Y,lineNumber:56,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`login-orb login-orb-two`,"aria-hidden":`true`},void 0,!1,{fileName:Y,lineNumber:57,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`login-shell`,children:[(0,F.jsxDEV)(`section`,{className:`login-intro`,"aria-label":`Coffer`,children:[(0,F.jsxDEV)(`div`,{className:`login-brand`,children:[(0,F.jsxDEV)(`span`,{className:`login-brand-mark`,"aria-hidden":`true`,children:[(0,F.jsxDEV)(`i`,{},void 0,!1,{fileName:Y,lineNumber:63,columnNumber:15},this),(0,F.jsxDEV)(`i`,{},void 0,!1,{fileName:Y,lineNumber:64,columnNumber:15},this),(0,F.jsxDEV)(`i`,{},void 0,!1,{fileName:Y,lineNumber:65,columnNumber:15},this),(0,F.jsxDEV)(`i`,{},void 0,!1,{fileName:Y,lineNumber:66,columnNumber:15},this)]},void 0,!0,{fileName:Y,lineNumber:62,columnNumber:13},this),(0,F.jsxDEV)(`span`,{children:`Coffer`},void 0,!1,{fileName:Y,lineNumber:68,columnNumber:13},this)]},void 0,!0,{fileName:Y,lineNumber:61,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`login-intro-copy`,children:[(0,F.jsxDEV)(`p`,{className:`login-eyebrow`,children:e(`auth.welcomeEyebrow`)},void 0,!1,{fileName:Y,lineNumber:71,columnNumber:13},this),(0,F.jsxDEV)(`h2`,{children:e(`auth.welcomeTitle`)},void 0,!1,{fileName:Y,lineNumber:72,columnNumber:13},this),(0,F.jsxDEV)(`p`,{children:e(`auth.welcomeText`)},void 0,!1,{fileName:Y,lineNumber:73,columnNumber:13},this)]},void 0,!0,{fileName:Y,lineNumber:70,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`login-status`,children:[(0,F.jsxDEV)(`span`,{className:`login-status-dot`,"aria-hidden":`true`},void 0,!1,{fileName:Y,lineNumber:76,columnNumber:13},this),(0,F.jsxDEV)(`span`,{children:e(`auth.secureConnection`)},void 0,!1,{fileName:Y,lineNumber:77,columnNumber:13},this)]},void 0,!0,{fileName:Y,lineNumber:75,columnNumber:11},this)]},void 0,!0,{fileName:Y,lineNumber:60,columnNumber:9},this),(0,F.jsxDEV)(`form`,{onSubmit:l,className:`login-card`,children:[(0,F.jsxDEV)(`div`,{className:`login-card-heading`,children:[(0,F.jsxDEV)(`div`,{className:`login-mobile-brand`,children:`Coffer`},void 0,!1,{fileName:Y,lineNumber:83,columnNumber:13},this),(0,F.jsxDEV)(`p`,{className:`login-card-kicker`,children:e(`auth.welcomeEyebrow`)},void 0,!1,{fileName:Y,lineNumber:84,columnNumber:13},this),(0,F.jsxDEV)(`h1`,{children:e(`auth.loginTitle`)},void 0,!1,{fileName:Y,lineNumber:85,columnNumber:13},this),(0,F.jsxDEV)(`p`,{className:`login-card-subtitle`,children:e(`auth.welcomeText`)},void 0,!1,{fileName:Y,lineNumber:86,columnNumber:13},this)]},void 0,!0,{fileName:Y,lineNumber:82,columnNumber:11},this),r&&(0,F.jsxDEV)(`div`,{className:`login-error`,role:`alert`,children:r},void 0,!1,{fileName:Y,lineNumber:89,columnNumber:13},this),(0,F.jsxDEV)(`div`,{className:`login-fields`,children:(0,F.jsxDEV)(Be,{items:Vb,ctx:{bridge:n}},void 0,!1,{fileName:Y,lineNumber:94,columnNumber:13},this)},void 0,!1,{fileName:Y,lineNumber:93,columnNumber:11},this),(0,F.jsxDEV)(N,{type:`submit`,disabled:o||!c,className:`login-submit`,children:[(0,F.jsxDEV)(`span`,{children:o?`…`:e(`auth.signIn`)},void 0,!1,{fileName:Y,lineNumber:97,columnNumber:13},this),!o&&(0,F.jsxDEV)(`span`,{className:`login-submit-arrow`,"aria-hidden":`true`,children:`→`},void 0,!1,{fileName:Y,lineNumber:99,columnNumber:15},this)]},void 0,!0,{fileName:Y,lineNumber:96,columnNumber:11},this),(0,F.jsxDEV)(`p`,{className:`login-footer`,children:e(`auth.secureConnection`)},void 0,!1,{fileName:Y,lineNumber:104,columnNumber:11},this)]},void 0,!0,{fileName:Y,lineNumber:81,columnNumber:9},this)]},void 0,!0,{fileName:Y,lineNumber:59,columnNumber:7},this)]},void 0,!0,{fileName:Y,lineNumber:55,columnNumber:5},this)}var Wb=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/SetupPage.tsx`,Gb=ei({displayName:si.string({label:`auth.displayName`}),login:si.string({label:`auth.login`}),password:si.password({label:`auth.password`})}),Kb=e=>typeof e==`string`&&e.trim()!==``;function qb(){let{t:e}=a(),{values:t,bridge:n}=_n({fm:Gi(Gb),mode:`edit`,recordCtx:{library:``,shelf:`auth`,recordId:`setup`},initial:{displayName:``,login:``,password:``}}),[r,i]=(0,P.useState)(null),[o,s]=(0,P.useState)(!1),c=Kb(t.login)&&Kb(t.password)&&Kb(t.displayName);async function l(n){n.preventDefault(),s(!0),i(null);let r=await wa(t.login,t.password,t.displayName);if(s(!1),!r.ok){i(e(`auth.genericError`));return}window.location.href=`/`}return(0,F.jsxDEV)(`div`,{className:`flex min-h-dvh items-center justify-center bg-background px-4`,children:(0,F.jsxDEV)(`form`,{onSubmit:l,className:`w-full max-w-sm rounded-2xl border border-border bg-card p-6`,children:[(0,F.jsxDEV)(`h1`,{className:`mb-6 text-xl font-bold text-foreground`,children:e(`auth.setupTitle`)},void 0,!1,{fileName:Wb,lineNumber:57,columnNumber:9},this),r&&(0,F.jsxDEV)(Nt,{tone:`danger`,className:`mb-4`,children:r},void 0,!1,{fileName:Wb,lineNumber:59,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:`mb-5 flex flex-col gap-3`,children:(0,F.jsxDEV)(Be,{items:Gb,ctx:{bridge:n}},void 0,!1,{fileName:Wb,lineNumber:64,columnNumber:11},this)},void 0,!1,{fileName:Wb,lineNumber:63,columnNumber:9},this),(0,F.jsxDEV)(N,{type:`submit`,disabled:o||!c,className:`w-full`,children:e(`auth.createAccount`)},void 0,!1,{fileName:Wb,lineNumber:66,columnNumber:9},this)]},void 0,!0,{fileName:Wb,lineNumber:56,columnNumber:7},this)},void 0,!1,{fileName:Wb,lineNumber:55,columnNumber:5},this)}var Jb=`coffer-collapsed-libraries`;function Yb(){try{let e=localStorage.getItem(Jb);return new Set(e?JSON.parse(e):[])}catch{return new Set}}function Xb(){let[e,t]=(0,P.useState)(()=>Yb());return{collapsed:e,toggle:(0,P.useCallback)(e=>{t(t=>{let n=new Set(t);n.has(e)?n.delete(e):n.add(e);try{localStorage.setItem(Jb,JSON.stringify([...n]))}catch{}return n})},[])}}var X=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/nav/AppSidebar.tsx`;function Zb(e,t){return[...Qi(e).map(t=>({to:`/${e}/${t.id}`,label:t.label,icon:t.icon})),...t.filter(e=>e.standalone!==!1).map(e=>({to:`/${e.library}/${e.shelf}`,label:e.label,icon:e.icon}))]}function Qb({id:e,label:t,icon:n,links:r}){let{t:i}=a(),{state:o,isMobile:s}=Ye(),{collapsed:c,toggle:d}=Xb(),{pathname:f}=u(),p=r.some(e=>f===e.to||f.startsWith(`${e.to}/`));return o===`collapsed`&&!s?(0,F.jsxDEV)(Cr,{children:(0,F.jsxDEV)(pe,{children:[(0,F.jsxDEV)(Dn,{asChild:!0,children:(0,F.jsxDEV)(yt,{tooltip:i(t),isActive:p,children:[(0,F.jsxDEV)(Fn,{name:n,size:17,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:83,columnNumber:15},this),(0,F.jsxDEV)(`span`,{children:i(t)},void 0,!1,{fileName:X,lineNumber:84,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:82,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:81,columnNumber:11},this),(0,F.jsxDEV)(Xn,{side:`right`,align:`start`,className:`min-w-56`,children:r.map(e=>(0,F.jsxDEV)(mr,{asChild:!0,children:(0,F.jsxDEV)(l,{to:e.to,className:`flex items-center gap-2`,children:[e.icon?(0,F.jsxDEV)(Fn,{name:e.icon,size:16,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:91,columnNumber:29},this):null,i(e.label)]},void 0,!0,{fileName:X,lineNumber:90,columnNumber:17},this)},e.to,!1,{fileName:X,lineNumber:89,columnNumber:15},this))},void 0,!1,{fileName:X,lineNumber:87,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:80,columnNumber:9},this)},void 0,!1,{fileName:X,lineNumber:79,columnNumber:7},this):(0,F.jsxDEV)(Gn,{open:!c.has(e),onOpenChange:()=>d(e),className:`group/collapsible`,render:(0,F.jsxDEV)(pe,{},void 0,!1,{fileName:X,lineNumber:107,columnNumber:15},this),children:[(0,F.jsxDEV)(bn,{render:(0,F.jsxDEV)(yt,{tooltip:i(t),isActive:p},void 0,!1,{fileName:X,lineNumber:109,columnNumber:35},this),children:[(0,F.jsxDEV)(Fn,{name:n,size:17,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:110,columnNumber:9},this),(0,F.jsxDEV)(`span`,{children:i(t)},void 0,!1,{fileName:X,lineNumber:111,columnNumber:9},this),(0,F.jsxDEV)(Se,{className:`ml-auto transition-transform duration-200 group-data-open/collapsible:rotate-90`},void 0,!1,{fileName:X,lineNumber:112,columnNumber:9},this)]},void 0,!0,{fileName:X,lineNumber:109,columnNumber:7},this),(0,F.jsxDEV)(wn,{children:(0,F.jsxDEV)(ce,{children:r.map(e=>(0,F.jsxDEV)(Pn,{children:(0,F.jsxDEV)($e,{render:(0,F.jsxDEV)(l,{to:e.to},void 0,!1,{fileName:X,lineNumber:118,columnNumber:45},this),children:[e.icon?(0,F.jsxDEV)(Fn,{name:e.icon,size:16,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:119,columnNumber:27},this):null,(0,F.jsxDEV)(`span`,{children:i(e.label)},void 0,!1,{fileName:X,lineNumber:120,columnNumber:17},this)]},void 0,!0,{fileName:X,lineNumber:118,columnNumber:15},this)},e.to,!1,{fileName:X,lineNumber:117,columnNumber:13},this))},void 0,!1,{fileName:X,lineNumber:115,columnNumber:9},this)},void 0,!1,{fileName:X,lineNumber:114,columnNumber:7},this)]},void 0,!0,{fileName:X,lineNumber:103,columnNumber:5},this)}function $b({onSearchOpen:e}){let{t}=a(),n=ra();return(0,F.jsxDEV)(Mr,{collapsible:`icon`,...st,children:[(0,F.jsxDEV)(mt,{children:(0,F.jsxDEV)(Lr,{children:[(0,F.jsxDEV)(pe,{children:(0,F.jsxDEV)(yt,{size:`lg`,render:(0,F.jsxDEV)(l,{to:`/`},void 0,!1,{fileName:X,lineNumber:152,columnNumber:50},this),tooltip:t(`nav.home`),children:[(0,F.jsxDEV)(`div`,{className:`flex aspect-square size-7 items-center justify-center rounded-lg border border-ring text-xs font-bold text-primary`,children:`S`},void 0,!1,{fileName:X,lineNumber:153,columnNumber:15},this),(0,F.jsxDEV)(`span`,{className:`font-bold`,children:`Coffer`},void 0,!1,{fileName:X,lineNumber:156,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:152,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:151,columnNumber:11},this),(0,F.jsxDEV)(pe,{children:(0,F.jsxDEV)(yt,{onClick:e,tooltip:t(`search.title`),children:[(0,F.jsxDEV)(ve,{className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:161,columnNumber:15},this),(0,F.jsxDEV)(`span`,{children:t(`search.title`)},void 0,!1,{fileName:X,lineNumber:162,columnNumber:15},this),(0,F.jsxDEV)(`kbd`,{className:`ml-auto text-[10px] text-muted-foreground`,children:`⌘K`},void 0,!1,{fileName:X,lineNumber:163,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:160,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:159,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:150,columnNumber:9},this)},void 0,!1,{fileName:X,lineNumber:149,columnNumber:7},this),(0,F.jsxDEV)(Kr,{children:(0,F.jsxDEV)(Vr,{children:(0,F.jsxDEV)(Lr,{children:[n.map(e=>(0,F.jsxDEV)(Qb,{id:e.meta.id,label:e.meta.label,icon:e.meta.icon??`lucide:folder`,links:Zb(e.meta.id,e.shelves)},e.meta.id,!1,{fileName:X,lineNumber:173,columnNumber:15},this)),Wt().map(e=>(0,F.jsxDEV)(pe,{children:(0,F.jsxDEV)(yt,{render:(0,F.jsxDEV)(l,{to:e.to},void 0,!1,{fileName:X,lineNumber:187,columnNumber:44},this),tooltip:t(e.labelKey),children:[(0,F.jsxDEV)(Fn,{name:e.icon??`lucide:folder`,size:17,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:192,columnNumber:19},this),(0,F.jsxDEV)(`span`,{children:t(e.labelKey)},void 0,!1,{fileName:X,lineNumber:193,columnNumber:19},this)]},void 0,!0,{fileName:X,lineNumber:187,columnNumber:17},this)},e.to,!1,{fileName:X,lineNumber:186,columnNumber:15},this))]},void 0,!0,{fileName:X,lineNumber:171,columnNumber:11},this)},void 0,!1,{fileName:X,lineNumber:170,columnNumber:9},this)},void 0,!1,{fileName:X,lineNumber:169,columnNumber:7},this),(0,F.jsxDEV)(Xt,{children:[(0,F.jsxDEV)(gi,{},void 0,!1,{fileName:X,lineNumber:204,columnNumber:9},this),(0,F.jsxDEV)(Lr,{children:[(0,F.jsxDEV)(pe,{children:(0,F.jsxDEV)(yt,{render:(0,F.jsxDEV)(l,{to:`/trash`},void 0,!1,{fileName:X,lineNumber:207,columnNumber:40},this),tooltip:t(`nav.trash`),children:[(0,F.jsxDEV)(Fn,{name:`lucide:trash-2`,size:17,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:208,columnNumber:15},this),(0,F.jsxDEV)(`span`,{children:t(`nav.trash`)},void 0,!1,{fileName:X,lineNumber:209,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:207,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:206,columnNumber:11},this),(0,F.jsxDEV)(pe,{children:(0,F.jsxDEV)(yt,{render:(0,F.jsxDEV)(l,{to:`/settings`},void 0,!1,{fileName:X,lineNumber:213,columnNumber:40},this),tooltip:t(`nav.settings`),children:[(0,F.jsxDEV)(Fn,{name:`lucide:settings`,size:17,className:`shrink-0`},void 0,!1,{fileName:X,lineNumber:214,columnNumber:15},this),(0,F.jsxDEV)(`span`,{children:t(`nav.settings`)},void 0,!1,{fileName:X,lineNumber:215,columnNumber:15},this)]},void 0,!0,{fileName:X,lineNumber:213,columnNumber:13},this)},void 0,!1,{fileName:X,lineNumber:212,columnNumber:11},this)]},void 0,!0,{fileName:X,lineNumber:205,columnNumber:9},this)]},void 0,!0,{fileName:X,lineNumber:203,columnNumber:7},this),(0,F.jsxDEV)(An,{},void 0,!1,{fileName:X,lineNumber:221,columnNumber:7},this)]},void 0,!0,{fileName:X,lineNumber:148,columnNumber:5},this)}var ex=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/nav/CommandPalette.tsx`;function tx({open:e,onClose:t}){let{t:n}=a(),r=v(),[i,o]=(0,P.useState)(``),[s,c]=(0,P.useState)([]),[l,u]=(0,P.useState)(!1),[d,f]=(0,P.useState)(0),p=(0,P.useRef)(null);(0,P.useEffect)(()=>{e&&(o(``),c([]),f(0),setTimeout(()=>p.current?.focus(),50))},[e]),(0,P.useEffect)(()=>{if(i.length<2){c([]);return}let e=setTimeout(async()=>{u(!0);try{let e=await fetch(`/api/search?q=${encodeURIComponent(i)}&limit=15`);c(e.ok?await e.json():[])}catch{c([])}finally{u(!1)}},250);return()=>clearTimeout(e)},[i]);let m=ra().flatMap(e=>e.shelves.filter(e=>e.standalone!==!1).map(t=>({v:e,m:t}))),h=m.filter(({m:e})=>!i||n(e.label).toLowerCase().includes(i.toLowerCase())).map(({v:e,m:t})=>({kind:`shelf`,label:n(t.label),sub:n(e.meta.label),icon:t.icon,to:`/${t.library}/${t.shelf}`})),g=s.map(e=>{let t=m.find(({m:t})=>t.library===e.library&&t.shelf===e.shelf)?.m;return{kind:`record`,label:e.label||e.id,sub:e.snippet===e.label?t?n(t.label):e.shelf:e.snippet,icon:t?.icon,to:`/${e.library}/${e.shelf}/${e.id}`}}),_=i.length>=2?[...g,...h.slice(0,5)]:h,y=_.length>0?Math.min(d,_.length-1):0;function b(e){r(e.to),t()}function x(e){if(e.key===`Escape`){t();return}e.key===`ArrowDown`&&(e.preventDefault(),f(e=>Math.min(e+1,_.length-1))),e.key===`ArrowUp`&&(e.preventDefault(),f(e=>Math.max(e-1,0))),e.key===`Enter`&&_[y]&&b(_[y])}if(!e)return null;let S=i.length<2,C=i.length>=2&&g.length>0,w=i.length>=2&&h.length>0,T=_.length===0&&!l;return(0,F.jsxDEV)(`div`,{className:`fixed inset-0 z-[60] flex items-start justify-center pt-[10vh] px-4`,onClick:e=>{e.target===e.currentTarget&&t()},children:[(0,F.jsxDEV)(`div`,{className:`absolute inset-0 bg-background/70 backdrop-blur-sm`,onClick:t},void 0,!1,{fileName:ex,lineNumber:140,columnNumber:7},this),(0,F.jsxDEV)(`div`,{role:`dialog`,"aria-label":n(`search.title`),...st,className:`relative w-full max-w-lg bg-background border border-border rounded-xl shadow-xl overflow-hidden`,children:[(0,F.jsxDEV)(`div`,{className:`px-4 pt-3 pb-1 ${De}`,children:n(`search.title`)},void 0,!1,{fileName:ex,lineNumber:150,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`flex items-center gap-2 px-4 py-3 border-b border-border`,children:[(0,F.jsxDEV)(ve,{size:16,className:`text-muted-foreground shrink-0`},void 0,!1,{fileName:ex,lineNumber:153,columnNumber:11},this),(0,F.jsxDEV)(`input`,{ref:p,type:`text`,value:i,onChange:e=>{o(e.target.value),f(0)},onKeyDown:x,placeholder:n(`search.placeholder`),"aria-label":n(`search.title`),className:`flex-1 bg-transparent text-foreground placeholder:text-muted-foreground outline-none text-sm`},void 0,!1,{fileName:ex,lineNumber:154,columnNumber:11},this),l&&(0,F.jsxDEV)(`span`,{className:`text-xs text-muted-foreground`,children:n(`common.loading`)},void 0,!1,{fileName:ex,lineNumber:167,columnNumber:23},this),(0,F.jsxDEV)(`button`,{type:`button`,onClick:t,className:`text-muted-foreground hover:text-foreground transition-colors`,children:(0,F.jsxDEV)(vi,{size:16},void 0,!1,{fileName:ex,lineNumber:173,columnNumber:13},this)},void 0,!1,{fileName:ex,lineNumber:168,columnNumber:11},this)]},void 0,!0,{fileName:ex,lineNumber:152,columnNumber:9},this),(0,F.jsxDEV)(`ul`,{className:`max-h-80 overflow-y-auto py-1`,children:[T&&i.length>=2&&(0,F.jsxDEV)(`li`,{className:`px-4 py-6 text-center text-muted-foreground text-sm`,children:n(`search.noResults`)},void 0,!1,{fileName:ex,lineNumber:180,columnNumber:13},this),S&&(0,F.jsxDEV)(`li`,{className:`px-4 py-1.5 min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,children:n(`search.allShelves`)},void 0,!1,{fileName:ex,lineNumber:182,columnNumber:33},this),C&&(0,F.jsxDEV)(`li`,{className:`px-4 py-1.5 min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,children:n(`search.results`)},void 0,!1,{fileName:ex,lineNumber:183,columnNumber:33},this),_.map((e,t)=>(0,F.jsxDEV)(`li`,{children:[i.length>=2&&t>=g.length&&t===g.length&&w&&(0,F.jsxDEV)(`div`,{className:`px-4 py-1.5 border-t border-border mt-1 pt-2 min-w-0 font-sans text-[11px] font-medium tracking-wide text-muted-foreground`,children:n(`search.allShelves`)},void 0,!1,{fileName:ex,lineNumber:190,columnNumber:19},this),(0,F.jsxDEV)(`button`,{type:`button`,onClick:()=>b(e),onMouseEnter:()=>f(t),className:`w-full flex items-center gap-3 px-4 py-2 text-left transition-colors ${t===y?`bg-background font-medium text-foreground`:`text-foreground hover:bg-muted`}`,children:[e.icon&&(0,F.jsxDEV)(Fn,{name:e.icon,size:16,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:ex,lineNumber:202,columnNumber:33},this),(0,F.jsxDEV)(`span`,{className:`flex-1 min-w-0`,children:[(0,F.jsxDEV)(`span`,{className:`block text-sm font-medium truncate`,children:e.label},void 0,!1,{fileName:ex,lineNumber:204,columnNumber:21},this),e.sub&&(0,F.jsxDEV)(`span`,{className:`block text-xs text-muted-foreground truncate`,children:e.sub},void 0,!1,{fileName:ex,lineNumber:205,columnNumber:34},this)]},void 0,!0,{fileName:ex,lineNumber:203,columnNumber:19},this)]},void 0,!0,{fileName:ex,lineNumber:194,columnNumber:17},this)]},`${e.to}-${t}`,!0,{fileName:ex,lineNumber:188,columnNumber:15},this))]},void 0,!0,{fileName:ex,lineNumber:178,columnNumber:9},this)]},void 0,!0,{fileName:ex,lineNumber:143,columnNumber:7},this)]},void 0,!0,{fileName:ex,lineNumber:131,columnNumber:5},this)}var nx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/Dashboard.tsx`;function rx(){let[e,t]=(0,P.useState)({});return(0,P.useEffect)(()=>{let e=new AbortController;return fetch(`/api/counts`,{signal:e.signal}).then(e=>e.ok?e.json():{}).then(t).catch(()=>{}),()=>e.abort()},[]),e}function ix(){let{t:e,i18n:t}=a(),n=rx(),r=ra();return(0,F.jsxDEV)(`div`,{className:`flex flex-col h-full`,children:[(0,F.jsxDEV)(Tt,{overline:new Intl.DateTimeFormat(t.language,{dateStyle:`full`}).format(new Date),title:`Coffer`},void 0,!1,{fileName:nx,lineNumber:28,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`flex-1 overflow-y-auto`,children:(0,F.jsxDEV)(`div`,{className:`mx-auto max-w-5xl px-5 py-8 md:px-8`,children:r.length===0?(0,F.jsxDEV)(`p`,{className:`text-muted-foreground`,children:e(`dashboard.empty`)},void 0,!1,{fileName:nx,lineNumber:35,columnNumber:13},this):(0,F.jsxDEV)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:r.map(t=>{let r=t.shelves.filter(e=>e.standalone!==!1);return r.length===0?null:(0,F.jsxDEV)(`section`,{className:`rounded-2xl border border-border bg-card p-4`,children:[(0,F.jsxDEV)(`h2`,{className:`mb-3 flex items-center gap-2 ${De}`,children:[t.meta.icon&&(0,F.jsxDEV)(Fn,{name:t.meta.icon,size:16,className:`shrink-0`},void 0,!1,{fileName:nx,lineNumber:44,columnNumber:39},this),e(t.meta.label)]},void 0,!0,{fileName:nx,lineNumber:43,columnNumber:21},this),(0,F.jsxDEV)(`div`,{className:`flex flex-col gap-1`,children:r.map(t=>(0,F.jsxDEV)(l,{to:`/${t.library}/${t.shelf}`,className:`flex items-center gap-2.5 rounded-lg px-2.5 py-2 text-sm text-foreground transition-colors hover:bg-muted`,children:[(0,F.jsxDEV)(Fn,{name:t.icon,size:17,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:nx,lineNumber:54,columnNumber:27},this),(0,F.jsxDEV)(`span`,{className:`flex-1 truncate`,children:e(t.label)},void 0,!1,{fileName:nx,lineNumber:55,columnNumber:27},this),(0,F.jsxDEV)(Ne,{children:n[`${t.library}/${t.shelf}`]??`·`},void 0,!1,{fileName:nx,lineNumber:56,columnNumber:27},this)]},t.shelf,!0,{fileName:nx,lineNumber:49,columnNumber:25},this))},void 0,!1,{fileName:nx,lineNumber:47,columnNumber:21},this)]},t.meta.id,!0,{fileName:nx,lineNumber:42,columnNumber:19},this)})},void 0,!1,{fileName:nx,lineNumber:37,columnNumber:13},this)},void 0,!1,{fileName:nx,lineNumber:33,columnNumber:9},this)},void 0,!1,{fileName:nx,lineNumber:32,columnNumber:7},this)]},void 0,!0,{fileName:nx,lineNumber:27,columnNumber:5},this)}var ax=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/TrashPage.tsx`;function ox(e){let t=ra().flatMap(e=>e.shelves).find(t=>t.library===e.library&&t.shelf===e.shelf);return(t?zi(t,e.record):String(e.record.name??``))||String(e.record.id??``)}function sx(){let{t:e}=a(),[t,n]=(0,P.useState)([]),[r,i]=(0,P.useState)(!0),o=(0,P.useCallback)(async()=>{i(!0);try{n(await _a())}catch{Qe.error(e(`common.error`))}finally{i(!1)}},[e]);(0,P.useEffect)(()=>{o()},[o]);async function s(t){if(!await ua(t.library,t.shelf,Number(t.record.id))){Qe.error(e(`common.error`));return}Qe.success(e(`trash.restored`)),n(e=>e.filter(e=>e!==t))}async function c(t){if(await yr({title:e(`trash.confirmPurge`),confirmLabel:e(`trash.purge`),variant:`destructive`})){if(!await va(t.library,t.shelf,Number(t.record.id))){Qe.error(e(`common.error`));return}Qe.success(e(`trash.purged`)),n(e=>e.filter(e=>e!==t))}}return(0,F.jsxDEV)(`div`,{className:`flex flex-col`,children:[(0,F.jsxDEV)(Tt,{overline:e(`settings.title`),title:e(`trash.title`)},void 0,!1,{fileName:ax,lineNumber:69,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`p-4 sm:p-6 max-w-4xl w-full mx-auto`,children:[(0,F.jsxDEV)(`p`,{className:`text-sm text-muted-foreground mb-5`,children:e(`trash.description`)},void 0,!1,{fileName:ax,lineNumber:71,columnNumber:9},this),r?(0,F.jsxDEV)(`div`,{className:`py-16 text-center text-muted-foreground`,children:e(`common.loading`)},void 0,!1,{fileName:ax,lineNumber:73,columnNumber:11},this):t.length===0?(0,F.jsxDEV)(`div`,{className:`py-16 text-center text-muted-foreground`,children:e(`trash.empty`)},void 0,!1,{fileName:ax,lineNumber:75,columnNumber:11},this):(0,F.jsxDEV)(`div`,{className:`space-y-2`,children:t.map(t=>{let n=Number(t.record.id);return(0,F.jsxDEV)(`div`,{className:`flex items-center gap-3 rounded-xl border border-border bg-card px-4 py-3`,children:[(0,F.jsxDEV)(Ke,{size:18,className:`shrink-0 text-muted-foreground`},void 0,!1,{fileName:ax,lineNumber:85,columnNumber:19},this),(0,F.jsxDEV)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsxDEV)(`div`,{className:`truncate font-medium text-foreground`,children:ox(t)},void 0,!1,{fileName:ax,lineNumber:87,columnNumber:21},this),(0,F.jsxDEV)(`div`,{className:`text-xs text-muted-foreground`,children:[e(t.label),` · `,t.library,`/`,t.shelf,` · #`,n]},void 0,!0,{fileName:ax,lineNumber:88,columnNumber:21},this),(0,F.jsxDEV)(`div`,{className:`text-xs text-muted-foreground`,children:String(t.record.deleted_at??``)},void 0,!1,{fileName:ax,lineNumber:91,columnNumber:21},this)]},void 0,!0,{fileName:ax,lineNumber:86,columnNumber:19},this),(0,F.jsxDEV)(`div`,{className:`flex shrink-0 gap-2`,children:[(0,F.jsxDEV)(N,{variant:`secondary`,size:`sm`,onClick:()=>void s(t),children:[(0,F.jsxDEV)(Ae,{size:15},void 0,!1,{fileName:ax,lineNumber:95,columnNumber:23},this),(0,F.jsxDEV)(`span`,{className:`hidden sm:inline`,children:e(`trash.restore`)},void 0,!1,{fileName:ax,lineNumber:96,columnNumber:23},this)]},void 0,!0,{fileName:ax,lineNumber:94,columnNumber:21},this),(0,F.jsxDEV)(N,{variant:`destructive`,size:`sm`,onClick:()=>void c(t),children:[(0,F.jsxDEV)(Ke,{size:15},void 0,!1,{fileName:ax,lineNumber:99,columnNumber:23},this),(0,F.jsxDEV)(`span`,{className:`hidden sm:inline`,children:e(`trash.purge`)},void 0,!1,{fileName:ax,lineNumber:100,columnNumber:23},this)]},void 0,!0,{fileName:ax,lineNumber:98,columnNumber:21},this)]},void 0,!0,{fileName:ax,lineNumber:93,columnNumber:19},this)]},`${t.library}/${t.shelf}/${n}`,!0,{fileName:ax,lineNumber:81,columnNumber:17},this)})},void 0,!1,{fileName:ax,lineNumber:77,columnNumber:11},this)]},void 0,!0,{fileName:ax,lineNumber:70,columnNumber:7},this)]},void 0,!0,{fileName:ax,lineNumber:68,columnNumber:5},this)}var cx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/AccountSettingsPage.tsx`,lx=ei({displayName:si.string({label:`auth.fieldDisplayName`}),password:si.password({label:`auth.fieldPasswordOptional`}),apiTokens:si.internalApiToken({label:`auth.tokensTitle`}),oauthGrants:si.internalOauthGrants({label:`auth.grantsTitle`}),identityLinks:si.internalIdentityLinks({label:`auth.linksTitle`})});function ux(){let{t:e}=a(),[t,n]=(0,P.useState)(!1);async function r(){let e=await ja();return{displayName:e?.displayName??``,password:e?.password??``}}async function i(e){let t=await ka({displayName:e.displayName,password:e.password});return t.ok?{ok:!0,row:{displayName:t.data.displayName,password:t.data.password}}:t.status===422?{ok:!1,status:422,issues:t.data.issues}:{ok:!1,status:t.status}}async function o(){n(!0);try{await Oa()}finally{window.location.href=`/login`}}return(0,F.jsxDEV)(za,{fields:lx,recordCtx:{library:``,shelf:`account`,recordId:`me`},load:r,save:i,title:e(`auth.accountTitle`),overline:e(`settings.title`),footer:(0,F.jsxDEV)(`section`,{className:`mt-10 border-t border-border pt-6`,"aria-labelledby":`account-session-title`,children:[(0,F.jsxDEV)(`h2`,{id:`account-session-title`,className:`mb-1 ${De}`,children:e(`auth.sessionTitle`)},void 0,!1,{fileName:cx,lineNumber:66,columnNumber:11},this),(0,F.jsxDEV)(Nr,{className:`flex items-center justify-between gap-4 px-4 py-3`,children:[(0,F.jsxDEV)(`p`,{className:`min-w-0 text-sm text-muted-foreground`,children:e(`auth.logoutDescription`)},void 0,!1,{fileName:cx,lineNumber:70,columnNumber:13},this),(0,F.jsxDEV)(N,{type:`button`,variant:`destructive`,size:`sm`,disabled:t,onClick:o,className:`shrink-0`,children:[(0,F.jsxDEV)(Fn,{name:`lucide:log-out`,size:16},void 0,!1,{fileName:cx,lineNumber:79,columnNumber:15},this),e(`auth.logout`)]},void 0,!0,{fileName:cx,lineNumber:71,columnNumber:13},this)]},void 0,!0,{fileName:cx,lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:cx,lineNumber:65,columnNumber:9},this)},void 0,!1,{fileName:cx,lineNumber:57,columnNumber:5},this)}var dx=Fi({shelf:`users`,library:``,label:`auth.usersTitle`,icon:`lucide:users`,views:{title:`login`,list:[`displayName`,`role`,`disabled`]},fields:{login:si.string({label:`auth.fieldLogin`}),displayName:si.string({label:`auth.fieldDisplayName`}),role:si.string({label:`auth.fieldRole`,strict:!0,noSearch:!0,options:[{value:`admin`,title:`auth.roleAdmin`},{value:`member`,title:`auth.roleMember`}]}),disabled:si.boolean({label:`auth.fieldDisabled`})}});function fx(e){if(!e)return null;let[t,n]=e.split(`:`);return!t||n!==`asc`&&n!==`desc`?null:{key:t,dir:n}}function px(){let[e,t]=c(),[n,r]=(0,P.useState)(()=>e.get(`q`)??``),[i,a]=(0,P.useState)(n);(0,P.useEffect)(()=>{let e=setTimeout(()=>{a(n),t(e=>{let t=new URLSearchParams(e);return n?t.set(`q`,n):t.delete(`q`),t},{replace:!0})},300);return()=>clearTimeout(e)},[n,t]);let o=fx(e.get(`sort`));function s(e){t(t=>{let n=new URLSearchParams(t),r=fx(n.get(`sort`)),i;return i=e===`_rank`?r?.key===`_rank`&&r.dir===`desc`?null:{key:e,dir:`desc`}:!r||r.key!==e?{key:e,dir:`asc`}:r.dir===`asc`?{key:e,dir:`desc`}:null,i?n.set(`sort`,`${i.key}:${i.dir}`):n.delete(`sort`),n},{replace:!0})}function l(e){t(t=>{let n=new URLSearchParams(t);return e?n.set(`sort`,`${e.key}:${e.dir}`):n.delete(`sort`),n},{replace:!0})}return{q:n,setQ:r,debouncedQ:i,sort:o,toggleSort:s,setSort:l}}var mx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/shared/Dialog.tsx`;function hx({title:e,onClose:t,children:n}){return(0,F.jsxDEV)(tn,{open:!0,onOpenChange:e=>{e||t()},children:(0,F.jsxDEV)(Or,{children:[(0,F.jsxDEV)(hn,{children:(0,F.jsxDEV)(or,{children:e},void 0,!1,{fileName:mx,lineNumber:24,columnNumber:11},this)},void 0,!1,{fileName:mx,lineNumber:23,columnNumber:9},this),(0,F.jsxDEV)(Bn,{children:n},void 0,!1,{fileName:mx,lineNumber:26,columnNumber:9},this)]},void 0,!0,{fileName:mx,lineNumber:22,columnNumber:7},this)},void 0,!1,{fileName:mx,lineNumber:16,columnNumber:5},this)}var Z=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/list/GroupPanel.tsx`,gx=`__none__`;function _x({grouping:e,total:t,sort:n}){let{t:r}=a(),{fields:i,field:o,setField:s,facets:c,selected:l,setSelected:u}=e;return(0,F.jsxDEV)(`div`,{className:`folder-tree flex flex-col gap-2`,children:[(0,F.jsxDEV)(`div`,{className:`px-1 pt-1`,children:(0,F.jsxDEV)(`div`,{className:`folder-node${l===null?` active`:``}`,onClick:()=>u(null),children:[(0,F.jsxDEV)(`span`,{className:`folder-name`,children:r(`group.all`)},void 0,!1,{fileName:Z,lineNumber:32,columnNumber:11},this),(0,F.jsxDEV)(`span`,{className:`ml-auto shrink-0 tabular-nums text-xs text-muted-foreground`,children:t},void 0,!1,{fileName:Z,lineNumber:33,columnNumber:11},this)]},void 0,!0,{fileName:Z,lineNumber:31,columnNumber:9},this)},void 0,!1,{fileName:Z,lineNumber:30,columnNumber:7},this),n&&n.keys.length>0&&(0,F.jsxDEV)(`div`,{className:`px-1 list:hidden`,children:[(0,F.jsxDEV)(`div`,{className:`folder-tree-header`,children:r(`list.sortBy`)},void 0,!1,{fileName:Z,lineNumber:41,columnNumber:11},this),(0,F.jsxDEV)(nt,{value:n.value?`${n.value.key}:${n.value.dir}`:gx,onValueChange:e=>{if(e===gx)return n.onChange(null);let[t,r]=e.split(`:`);n.onChange({key:t,dir:r})},children:[(0,F.jsxDEV)(Ve,{className:`h-8 w-full text-sm`,children:(0,F.jsxDEV)(lt,{placeholder:r(`list.sortBy`)},void 0,!1,{fileName:Z,lineNumber:51,columnNumber:15},this)},void 0,!1,{fileName:Z,lineNumber:50,columnNumber:13},this),(0,F.jsxDEV)(_e,{children:[(0,F.jsxDEV)(ke,{value:gx,children:[r(`list.sortRating`),` ↑`]},void 0,!0,{fileName:Z,lineNumber:56,columnNumber:15},this),(0,F.jsxDEV)(ke,{value:`_rank:desc`,children:[r(`list.sortRating`),` ↓`]},void 0,!0,{fileName:Z,lineNumber:57,columnNumber:15},this),n.keys.flatMap(({key:e,label:t})=>[(0,F.jsxDEV)(ke,{value:`${e}:asc`,children:[t,` ↑`]},`${e}:asc`,!0,{fileName:Z,lineNumber:59,columnNumber:17},this),(0,F.jsxDEV)(ke,{value:`${e}:desc`,children:[t,` ↓`]},`${e}:desc`,!0,{fileName:Z,lineNumber:62,columnNumber:17},this)])]},void 0,!0,{fileName:Z,lineNumber:53,columnNumber:13},this)]},void 0,!0,{fileName:Z,lineNumber:42,columnNumber:11},this)]},void 0,!0,{fileName:Z,lineNumber:40,columnNumber:9},this),i.length>0&&(0,F.jsxDEV)(`div`,{className:`px-1`,children:[(0,F.jsxDEV)(`div`,{className:`folder-tree-header`,children:r(`group.field`)},void 0,!1,{fileName:Z,lineNumber:74,columnNumber:11},this),(0,F.jsxDEV)(nt,{value:o??void 0,onValueChange:s,children:[(0,F.jsxDEV)(Ve,{className:`h-8 w-full text-sm`,children:(0,F.jsxDEV)(lt,{placeholder:r(`group.field`)},void 0,!1,{fileName:Z,lineNumber:77,columnNumber:15},this)},void 0,!1,{fileName:Z,lineNumber:76,columnNumber:13},this),(0,F.jsxDEV)(_e,{children:i.map(e=>(0,F.jsxDEV)(ke,{value:e.key,children:e.label},e.key,!1,{fileName:Z,lineNumber:81,columnNumber:17},this))},void 0,!1,{fileName:Z,lineNumber:79,columnNumber:13},this)]},void 0,!0,{fileName:Z,lineNumber:75,columnNumber:11},this)]},void 0,!0,{fileName:Z,lineNumber:73,columnNumber:9},this),(0,F.jsxDEV)(`div`,{className:`folder-tree-scroll`,children:(0,F.jsxDEV)(`div`,{className:`folder-tree-nodes`,children:c.map(e=>(0,F.jsxDEV)(`div`,{className:`folder-node${l===e.key?` active`:``}`,title:e.label,onClick:()=>u(e.key),children:[e.tone&&(0,F.jsxDEV)(`span`,{"aria-hidden":`true`,className:`mr-2 inline-block size-2 shrink-0 rounded-full`,style:{background:e.tone},"data-testid":`facet-tone`},void 0,!1,{fileName:Z,lineNumber:104,columnNumber:17},this),(0,F.jsxDEV)(`span`,{className:`folder-name truncate`,children:e.label},void 0,!1,{fileName:Z,lineNumber:111,columnNumber:15},this),(0,F.jsxDEV)(`span`,{className:`ml-auto shrink-0 tabular-nums text-xs text-muted-foreground`,children:e.count},void 0,!1,{fileName:Z,lineNumber:112,columnNumber:15},this)]},e.key,!0,{fileName:Z,lineNumber:94,columnNumber:13},this))},void 0,!1,{fileName:Z,lineNumber:92,columnNumber:9},this)},void 0,!1,{fileName:Z,lineNumber:91,columnNumber:7},this)]},void 0,!0,{fileName:Z,lineNumber:28,columnNumber:5},this)}function vx(e,t){let{t:n,i18n:r}=a(),i=t?Gi(e.fields)[t]:void 0,o=i?.prim===`relation`?i.relation:void 0,s=i?.hints?.displayKey??`name`,{labelMap:c}=tt(o?.library??``,o?.shelf??``,s);return(0,P.useMemo)(()=>({t:n,locale:r.language,labelMap:c}),[n,r.language,c])}function yx(e,t,n,r,i){let a=new Map,o=0;for(let i of t){let t=Je(e,i[n],r);if(!t.length){o++;continue}for(let e of t){let t=a.get(e.value)??{label:e.label,n:0};t.n++,a.set(e.value,t)}}let s=je(e),c=[...a.entries()].map(([e,{label:t,n}])=>({key:e,label:t,tone:s.length?Me(s,e):void 0,count:n})).sort((e,t)=>t.count-e.count||e.label.localeCompare(t.label));return o>0&&c.push({key:bx,label:i,count:o}),c}var bx=`\0__none__`;function xx(e,t){let{t:n}=a(),r=Gi(e.fields),i=(0,P.useMemo)(()=>Li(e).filter(e=>r[e]),[e,r]),o=(0,P.useMemo)(()=>i.map(e=>({key:e,label:r[e]?n(r[e].label):e})),[i,r,n]),[s,l]=c(),u=s.get(`groupBy`),d=s.get(`groupItem`)??null,f=(0,P.useMemo)(()=>{if(u&&i.includes(u))return u;let t=Bi(e);return t&&i.includes(t)?t:i[0]??null},[u,i,e]),p=vx(e,f);return{fields:o,field:f,setField:e=>{l(t=>{let n=new URLSearchParams(t);return n.set(`groupBy`,e),n.delete(`groupItem`),n},{replace:!0})},facets:(0,P.useMemo)(()=>{if(!f)return[];let e=r[f];return e?yx(e,t,f,p,n(`group.noValue`)):[]},[f,r,t,p,n]),selected:d,setSelected:e=>{l(t=>{let n=new URLSearchParams(t);return e===null?n.delete(`groupItem`):n.set(`groupItem`,e),n},{replace:!0})},filtered:(0,P.useMemo)(()=>{if(!f||d===null)return t;let e=r[f];return e?d===`\0__none__`?t.filter(t=>Je(e,t[f],p).length===0):t.filter(t=>Je(e,t[f],p).some(e=>e.value===d)):t},[t,f,r,d,p])}}var Q=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/list/EntityListView.tsx`;function Sx({mod:e,hrefBase:t,fetchRows:n,onDelete:r,resetKey:i,cacheKey:o,overline:s,title:l}){let{t:u}=a(),d=v(),[f,p]=(0,P.useState)(null),[m,h]=(0,P.useState)(null),[g,_]=(0,P.useState)(!1),[y,b]=(0,P.useState)(0),{q:x,setQ:S,debouncedQ:C,sort:w,toggleSort:T,setSort:E}=px(),[,ee]=c(),te=ae(`panel`,1e3),ne=o?`${o}?${C}`:null,[D,re]=(0,P.useState)(()=>ne?aa(ne)?.rows??[]:[]),[ie,oe]=(0,P.useState)(D.length===0),se=(0,P.useRef)(0),ce=(0,P.useCallback)(async(e=C)=>{let t=o?`${o}?${e}`:null,r=t?aa(t):void 0;if(r){re(r.rows),oe(!1);return}oe(!0);let i=++se.current;try{let r=await n(e);if(i!==se.current)return;re(r),t&&ea(t,r)}catch{i===se.current&&re([])}finally{i===se.current&&oe(!1)}},[n,C,o]),le=(0,P.useRef)(null);(0,P.useEffect)(()=>{i!==void 0&&(le.current!==null&&le.current!==i&&(S(``),ee({},{replace:!0})),le.current=i)},[i]),(0,P.useEffect)(()=>{ce()},[ce,y]);let ue=xx(e,D),de=vx(e,w?.key??null),fe=(0,P.useMemo)(()=>{if(!w||w.key===`_rank`&&w.dir===`asc`)return ue.filtered;if(w.key===`_rank`)return[...ue.filtered].reverse();let t=Gi(e.fields)[w.key];return Bt(ue.filtered,w.key,w.dir,t,de)},[ue.filtered,w,e,de]),pe=(0,P.useMemo)(()=>Yi(e),[e]),me=Gi(e.fields),he=(0,P.useMemo)(()=>{let t=Wi(e),n=Er(t);if(!n)return console.error(`[list] unknown view '${t}' for ${e.library}/${e.shelf} — showing table`),Er(`table`);let r=n.check?.(e,pe);return r?(console.error(`[list] view '${t}' is not compatible with ${e.library}/${e.shelf}: ${r} — showing table`),Er(`table`)):n},[e,pe]),ge={keys:pe.map(e=>({key:e,label:Tn(u,e,me[e])})),value:w,onChange:E};function _e(){d(`${t}/new`)}let ye=(0,P.useCallback)(async e=>{if(!await yr({title:u(`actions.confirmDelete`),confirmLabel:u(`actions.delete`),variant:`destructive`}))return;p(e);let t=await r(e);if(p(null),!t.ok){Qe.error(t.error===`last_admin`?u(`auth.lastAdminError`):u(`common.error`));return}o&&(sa(o),Ut(o)),b(e=>e+1)},[r,u,o]),be=(0,P.useCallback)(async t=>{let n=D.find(e=>String(e.id)===t)?._activity;h(t);let r=await Ta(e.library,e.shelf,t,!n?.favorite);if(h(null),!r){Qe.error(u(`common.error`));return}o&&sa(o),b(e=>e+1)},[D,e.library,e.shelf,o,u]);return(0,F.jsxDEV)(`div`,{className:`flex flex-col`,children:[(0,F.jsxDEV)(Tt,{overline:s,title:typeof l==`string`?l:`${u(e.label)} · ${fe.length}`,actions:(0,F.jsxDEV)(F.Fragment,{children:[ie&&D.length>0&&(0,F.jsxDEV)(Ee,{size:16,className:`animate-spin opacity-50 mr-2`,"aria-hidden":!0},void 0,!1,{fileName:Q,lineNumber:229,columnNumber:44},this),(0,F.jsxDEV)(`div`,{className:`relative w-[220px] hidden md:block`,children:[(0,F.jsxDEV)(ve,{size:15,className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none`},void 0,!1,{fileName:Q,lineNumber:232,columnNumber:15},this),(0,F.jsxDEV)(`input`,{type:`search`,value:x,onChange:e=>S(e.target.value),placeholder:u(`list.searchPlaceholder`),className:`w-full h-8 pr-3 text-sm rounded-lg border border-border bg-card text-foreground placeholder:text-muted-foreground focus:outline-none focus:border-ring transition-colors`,style:{paddingLeft:`2rem`}},void 0,!1,{fileName:Q,lineNumber:236,columnNumber:15},this)]},void 0,!0,{fileName:Q,lineNumber:231,columnNumber:13},this),(0,F.jsxDEV)(N,{variant:`outline`,size:`icon`,className:`panel:hidden`,onClick:()=>_(!0),children:(0,F.jsxDEV)(Ql,{size:16},void 0,!1,{fileName:Q,lineNumber:247,columnNumber:15},this)},void 0,!1,{fileName:Q,lineNumber:246,columnNumber:13},this),(0,F.jsxDEV)(N,{onClick:_e,children:[(0,F.jsxDEV)(He,{size:16},void 0,!1,{fileName:Q,lineNumber:250,columnNumber:15},this),(0,F.jsxDEV)(`span`,{className:`hidden sm:inline`,children:u(`actions.new`)},void 0,!1,{fileName:Q,lineNumber:251,columnNumber:15},this)]},void 0,!0,{fileName:Q,lineNumber:249,columnNumber:13},this)]},void 0,!0,{fileName:Q,lineNumber:228,columnNumber:11},this)},void 0,!1,{fileName:Q,lineNumber:224,columnNumber:7},this),(0,F.jsxDEV)(`div`,{className:`flex items-start`,children:[te&&(0,F.jsxDEV)(`div`,{className:`hidden panel:block w-56 shrink-0 border-r border-border sticky top-(--header-height) self-start h-[calc(100dvh-var(--header-height))] overflow-y-auto`,children:(0,F.jsxDEV)(`div`,{className:`pt-2`,children:(0,F.jsxDEV)(_x,{grouping:ue,total:D.length,sort:ge},void 0,!1,{fileName:Q,lineNumber:263,columnNumber:15},this)},void 0,!1,{fileName:Q,lineNumber:262,columnNumber:13},this)},void 0,!1,{fileName:Q,lineNumber:261,columnNumber:11},this),(0,F.jsxDEV)(`div`,{className:he.ownsScroll?`flex-1 min-w-0`:`flex-1 min-w-0 ${$t}`,children:fe.length===0?ie?(0,F.jsxDEV)(`div`,{className:`flex items-center justify-center py-20 text-muted-foreground`,children:(0,F.jsxDEV)(Ee,{size:28,className:`animate-spin`},void 0,!1,{fileName:Q,lineNumber:280,columnNumber:17},this)},void 0,!1,{fileName:Q,lineNumber:279,columnNumber:15},this):(0,F.jsxDEV)(`div`,{className:`flex flex-col items-center justify-center gap-4 py-20 text-muted-foreground`,children:[(0,F.jsxDEV)(Fn,{name:e.icon,size:48,className:`text-muted-foreground`},void 0,!1,{fileName:Q,lineNumber:284,columnNumber:17},this),(0,F.jsxDEV)(`p`,{className:`text-base`,children:u(`list.empty`)},void 0,!1,{fileName:Q,lineNumber:285,columnNumber:17},this),(0,F.jsxDEV)(N,{onClick:_e,children:[(0,F.jsxDEV)(He,{size:16},void 0,!1,{fileName:Q,lineNumber:287,columnNumber:19},this),` `,u(`actions.addFirst`)]},void 0,!0,{fileName:Q,lineNumber:286,columnNumber:17},this)]},void 0,!0,{fileName:Q,lineNumber:283,columnNumber:15},this):(0,F.jsxDEV)(he.View,{rows:fe,shelf:e,keys:pe,hrefBase:t,onDelete:ye,deletingId:f,onToggleFavorite:be,favoriteBusyId:m,sort:w,onToggleSort:T,scrollKey:ne??void 0},void 0,!1,{fileName:Q,lineNumber:292,columnNumber:13},this)},void 0,!1,{fileName:Q,lineNumber:274,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:258,columnNumber:7},this),g&&(0,F.jsxDEV)(hx,{title:u(`group.title`),onClose:()=>_(!1),children:[(0,F.jsxDEV)(`div`,{className:`relative mb-4 md:hidden`,children:[(0,F.jsxDEV)(ve,{size:15,className:`absolute left-2.5 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none`},void 0,!1,{fileName:Q,lineNumber:314,columnNumber:13},this),(0,F.jsxDEV)(`input`,{type:`search`,value:x,onChange:e=>S(e.target.value),placeholder:u(`list.searchPlaceholder`),className:`w-full h-9 pr-3 text-sm rounded-lg border border-border bg-card text-foreground placeholder:text-muted-foreground focus:outline-none focus:border-ring transition-colors`,style:{paddingLeft:`2rem`}},void 0,!1,{fileName:Q,lineNumber:318,columnNumber:13},this)]},void 0,!0,{fileName:Q,lineNumber:313,columnNumber:11},this),(0,F.jsxDEV)(_x,{grouping:ue,total:D.length,sort:ge},void 0,!1,{fileName:Q,lineNumber:327,columnNumber:11},this)]},void 0,!0,{fileName:Q,lineNumber:311,columnNumber:9},this)]},void 0,!0,{fileName:Q,lineNumber:222,columnNumber:5},this)}var Cx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/UsersListPage.tsx`;function wx(){let{t:e}=a();return(0,F.jsxDEV)(Sx,{overline:e(`settings.title`),title:e(`auth.usersTitle`),mod:dx,hrefBase:`/settings/users`,fetchRows:async e=>{let t=await la(e);return t.ok?t.data:[]},onDelete:async e=>{let t=await Sa(Number(e));return t.ok?{ok:!0}:t.status===409?{ok:!1,error:`last_admin`}:{ok:!1}}},void 0,!1,{fileName:Cx,lineNumber:9,columnNumber:5},this)}var Tx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/UserCreatePage.tsx`,Ex=ei({login:si.string({label:`auth.fieldLogin`}),displayName:si.string({label:`auth.fieldDisplayName`}),password:si.password({label:`auth.password`}),role:si.string({label:`auth.fieldRole`,strict:!0,options:[{value:`admin`,title:`auth.roleAdmin`},{value:`member`,title:`auth.roleMember`}]})});function Dx(){let{t:e}=a(),t=v();async function n(){return{login:``,displayName:``,password:``,role:`member`}}async function r(e){let n=[`login`,`displayName`,`password`].filter(t=>typeof e[t]!=`string`||e[t].trim()===``);if(n.length)return{ok:!1,status:422,issues:n.map(e=>({field:e,code:`required`,path:[e]}))};let r=await Pa({login:e.login,displayName:e.displayName,password:e.password,role:e.role});return r.ok?(t(`/settings/users`),{ok:!0,row:{login:r.data.login,displayName:r.data.displayName,password:r.data.password,role:r.data.role}}):r.status===422?{ok:!1,status:422,issues:r.data.issues}:{ok:!1,status:r.status}}return(0,F.jsxDEV)(za,{fields:Ex,recordCtx:{library:``,shelf:`users`,recordId:`new`},load:n,save:r,title:e(`auth.userCreateTitle`),overline:e(`auth.usersTitle`)},void 0,!1,{fileName:Tx,lineNumber:63,columnNumber:5},this)}var Ox=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/UserEditPage.tsx`,kx=ei({displayName:si.string({label:`auth.fieldDisplayName`}),role:si.string({label:`auth.fieldRole`,strict:!0,options:[{value:`admin`,title:`auth.roleAdmin`},{value:`member`,title:`auth.roleMember`}]}),disabled:si.boolean({label:`auth.fieldDisabled`}),password:si.password({label:`auth.fieldPasswordOptional`})});function Ax(){let{id:e}=s(),{t}=a(),n=Number(e);async function r(){let e=await la(),t=e.ok?e.data.find(e=>e.id===n):void 0;return{displayName:t?.displayName??``,role:t?.role??`member`,disabled:t?.disabled??!1,password:t?.password??``}}async function i(e){let t=await pa(n,{displayName:e.displayName,role:e.role,disabled:e.disabled,password:e.password});return t.ok?{ok:!0,row:{displayName:t.data.displayName,role:t.data.role,disabled:t.data.disabled,password:t.data.password}}:t.status===409?{ok:!1,status:422,issues:[{field:`role`,code:`last_admin`,path:[],params:{}}]}:t.status===422?{ok:!1,status:422,issues:t.data.issues}:{ok:!1,status:t.status}}return(0,F.jsxDEV)(za,{fields:kx,recordCtx:{library:``,shelf:`users`,recordId:e??``},load:r,save:i,title:t(`auth.usersTitle`),overline:t(`auth.usersTitle`)},void 0,!1,{fileName:Ox,lineNumber:67,columnNumber:5},this)}var jx=(e,t)=>`coffer:list-origin:${e}/${t}`;function Mx(){try{return window.sessionStorage}catch{return null}}function Nx(e,t){Mx()?.setItem(jx(e.library,e.shelf),JSON.stringify(t))}function Px(e){Mx()?.removeItem(jx(e.library,e.shelf))}function Fx(e,t){let n=Mx()?.getItem(jx(e,t));if(n)try{let e=JSON.parse(n);return typeof e.path==`string`&&typeof e.label==`string`?{path:e.path,label:e.label}:void 0}catch{return}}var Ix=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/list/ShowcaseView.tsx`;function Lx(e,t){return{...e,label:t.label,icon:t.icon,views:{...e.views,list:t.columns,...t.defaultGroupBy?{defaultGroupBy:t.defaultGroupBy}:{}}}}function Rx({showcase:e}){let{t}=a(),n=Zi(e.source.library,e.source.shelf),r=(0,P.useCallback)(async t=>{let n=t?`?q=${encodeURIComponent(t)}`:``;try{return(await Aa(`/api/showcase/${e.library}/${e.id}${n}`)).rows}catch{return[]}},[e.library,e.id]),i=(0,P.useCallback)(async t=>(await xa(e.source.library,e.source.shelf,t),{ok:!0}),[e]);return(0,P.useEffect)(()=>{Nx(e.source,{path:`/${e.library}/${e.id}`,label:e.label})},[e]),n?(0,F.jsxDEV)(Sx,{mod:Lx(n,e),hrefBase:`/${e.source.library}/${e.source.shelf}`,resetKey:`${e.library}:${e.id}`,fetchRows:r,onDelete:i},void 0,!1,{fileName:Ix,lineNumber:71,columnNumber:5},this):(0,F.jsxDEV)(`div`,{className:`p-6 text-muted-foreground`,children:t(`common.notFound`)},void 0,!1,{fileName:Ix,lineNumber:68,columnNumber:23},this)}var zx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/list/ShelfView.tsx`;function Bx(){let{t:e}=a(),{library:t,shelf:n}=s(),r=ra(),i=r.flatMap(e=>e.shelves).find(e=>e.library===t&&e.shelf===n),c=(0,P.useCallback)(async e=>{let r=e?`?q=${encodeURIComponent(e)}`:``;try{return await Aa(`/api/${t}/${n}${r}`)}catch{return[]}},[t,n]),l=(0,P.useCallback)(async e=>(await xa(t,n,e),{ok:!0}),[t,n]),[u,d]=(0,P.useState)(null),[f,p]=(0,P.useState)(!1),m=`${t}/${n}`,[h,g]=(0,P.useState)(m);h!==m&&(g(m),d(null),p(!1)),(0,P.useEffect)(()=>{i&&t&&n&&Px({library:t,shelf:n})},[i,t,n]),(0,P.useEffect)(()=>{if(!i?.single)return;let e=!0;return Aa(`/api/${t}/${n}/single`).then(t=>{e&&d(String(t.id))}).catch(()=>{e&&p(!0)}),()=>{e=!1}},[i,t,n]);let _=!i&&t&&n?ca(t,n):void 0;return _?(0,F.jsxDEV)(Rx,{showcase:_},void 0,!1,{fileName:zx,lineNumber:89,columnNumber:24},this):!i||i.standalone===!1?(0,F.jsxDEV)(`div`,{className:`p-6 text-muted-foreground`,children:e(`common.notFound`)},void 0,!1,{fileName:zx,lineNumber:91,columnNumber:44},this):i.single?f?(0,F.jsxDEV)(`div`,{className:`p-6 text-muted-foreground`,children:e(`common.notFound`)},void 0,!1,{fileName:zx,lineNumber:94,columnNumber:29},this):u?(0,F.jsxDEV)(o,{to:`/${t}/${n}/${u}`,replace:!0},void 0,!1,{fileName:zx,lineNumber:95,columnNumber:23},this):(0,F.jsxDEV)(`div`,{className:`p-6`},void 0,!1,{fileName:zx,lineNumber:95,columnNumber:86},this):(0,F.jsxDEV)(Sx,{overline:e(r.find(e=>e.meta.id===t)?.meta.label??``),mod:i,hrefBase:`/${t}/${n}`,resetKey:`${t}:${n}`,cacheKey:`${t}/${n}`,fetchRows:c,onDelete:l},void 0,!1,{fileName:zx,lineNumber:101,columnNumber:5},this)}var Vx=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/display/index.tsx`;function Hx(e){return e!=null&&e!==``}function Ux(e,t,n){return e.map(e=>({ext:e,data:t?.[e.id]})).filter(({ext:e,data:t})=>t!=null&&Ui(e.fields).some(([e])=>Hx(t[e]))||e.showWhen==null||Ni(e.showWhen,n))}function Wx(e,t,n,r,i){return e||!n?Promise.resolve(void 0):t(()=>n(r,i))}function Gx({shelf:e,record:t,onUpdate:n,onUpdateExtend:r,errorAt:i=(()=>void 0)}){let{t:o}=a(),{saving:s,run:c}=le(),l=Gi(e.fields),u=e=>{let t=l[e];return t?.label?o(t.label):e},d=(e,t)=>{let n=l[e]?.options?.find(e=>e.value===String(t));return n?o(n.title):String(t)},f=!!n,p={library:e.library,shelf:e.shelf,recordId:String(t.id)},m=t,h={bridge:{mode:`view`,recordCtx:p,values:m,getValue:e=>t[e],setValue:(e,t)=>{Wx(s,c,n,e,t)},isHidden:e=>Mi(l[e]?.hidden,m),error:e=>i([e]),touch:()=>{}}},g=(0,P.useMemo)(()=>Ux(Xi(e.library,e.shelf),t._extends,m),[e.library,e.shelf,t,m]);return(0,F.jsxDEV)(Ht.Provider,{value:i,children:(0,F.jsxDEV)(`article`,{className:`max-w-7xl mx-auto px-5 py-8 md:px-8 md:py-10 flex flex-col ${zt}`,children:[(0,F.jsxDEV)(Be,{items:e.fields,ctx:h},void 0,!1,{fileName:Vx,lineNumber:160,columnNumber:9},this),g.map(({ext:n,data:i})=>(0,F.jsxDEV)(Kx,{ext:n,data:i,m:e,recordId:String(t.id),editable:f,onUpdateExtend:r,fieldLabelOf:u,valueLabelOf:d},n.id,!1,{fileName:Vx,lineNumber:165,columnNumber:11},this))]},void 0,!0,{fileName:Vx,lineNumber:155,columnNumber:7},this)},void 0,!1,{fileName:Vx,lineNumber:154,columnNumber:5},this)}function Kx({ext:e,data:t,m:n,recordId:r,editable:i,onUpdateExtend:o,fieldLabelOf:s,valueLabelOf:c}){let{t:l}=a(),{saving:u,run:d}=le(),f=`view`,p=t=>o?n=>Wx(u,d,(t,n)=>o(e.id,t,n),t,n):void 0,m={renderField:(a,o)=>!i&&!Hx(t?.[a])?null:(0,F.jsxDEV)(We,{field:o,fieldKey:a,extId:e.id,value:t?.[a],label:o.label?l(o.label):void 0,mode:f,recordCtx:{library:n.library,shelf:n.shelf,recordId:r},onChange:p(a)},void 0,!1,{fileName:Vx,lineNumber:223,columnNumber:9},this),renderGroup:(e,a)=>{let o=t?.[e];if(!i&&!Hx(o))return null;let s=vt({kind:Yt(a)});return s?(0,F.jsxDEV)(gn,{field:a,value:o,commit:p(e),children:(0,F.jsxDEV)(s.Page,{el:a,value:o,mode:f,recordCtx:{library:n.library,shelf:n.shelf,recordId:r}},void 0,!1,{fileName:Vx,lineNumber:245,columnNumber:11},this)},void 0,!1,{fileName:Vx,lineNumber:244,columnNumber:9},this):null},values:t??{},setValue:o?(t,n)=>Wx(u,d,(t,n)=>o(e.id,t,n),t,n):void 0,isHidden:i?void 0:e=>!Hx(t?.[e]),mode:f},h=Be({items:e.fields,ctx:m});return h==null?null:(0,F.jsxDEV)(`div`,{className:`border-t border-border pt-6`,children:(0,F.jsxDEV)(ct,{label:l(e.label),icon:e.icon??`lucide:puzzle`,rail:!1,tone:`section`,labelAfter:(0,F.jsxDEV)(ie,{ext:e,fieldLabel:s,valueLabel:c},void 0,!1,{fileName:Vx,lineNumber:282,columnNumber:21},this),children:h},void 0,!1,{fileName:Vx,lineNumber:277,columnNumber:7},this)},void 0,!1,{fileName:Vx,lineNumber:276,columnNumber:5},this)}function qx(e){return m(()=>import(e),[])}var Jx=Object.assign({"../plugin-calendar/src/index.ts":()=>m(()=>import(`./src-Mln-mCD3.js`),__vite__mapDeps([15,16,17,1,18,19,20,21])),"../plugin-claude-agent/src/index.ts":()=>m(()=>import(`./src-BjYucEBM.js`),__vite__mapDeps([22,17,1,19,23])),"../plugin-console/src/index.ts":()=>m(()=>import(`./src-4bmZI2h_.js`),__vite__mapDeps([24,17,1,19,23])),"../plugin-dav/src/index.ts":()=>m(()=>import(`./src-Cz38tTr3.js`),__vite__mapDeps([25,19])),"../plugin-devices/src/index.ts":()=>m(()=>import(`./src-CD1zBxk2.js`),__vite__mapDeps([26,27,17,1,28,18,19,20,23,29,30])),"../plugin-documents/src/index.ts":()=>m(()=>import(`./src-C46sbhiF.js`),__vite__mapDeps([31,17,1,18,19,20])),"../plugin-drone/src/index.ts":()=>m(()=>import(`./src-CQOQ3BNT.js`),__vite__mapDeps([32,17,1,18,19,20,29,30])),"../plugin-finance/src/index.ts":()=>m(()=>import(`./src-BZK1QVol.js`),__vite__mapDeps([33,34,17,1,18,19,20,23])),"../plugin-garden/src/index.ts":()=>m(()=>import(`./src-Dr_dOgc9.js`),__vite__mapDeps([35,17,1,18,19])),"../plugin-geo/src/index.ts":()=>m(()=>import(`./src-Bzgh6Ge5.js`),__vite__mapDeps([36,19])),"../plugin-health/src/index.ts":()=>m(()=>import(`./src-Q4BhkNtH.js`),__vite__mapDeps([37,17,1,18,19,20,23])),"../plugin-home/src/index.ts":()=>m(()=>import(`./src-B2aXBzDf.js`),__vite__mapDeps([38,17,1,18,19])),"../plugin-http/src/index.ts":()=>m(()=>import(`./src-DnN2GqEI.js`),__vite__mapDeps([39,17,1,19,23])),"../plugin-kitchen/src/index.ts":()=>m(()=>import(`./src-rMuD7zD4.js`),__vite__mapDeps([40,17,1,18,19])),"../plugin-lab/src/index.ts":()=>m(()=>import(`./src-BHz-TcxU.js`),__vite__mapDeps([41,17,1,18,19,20,16,21,23,28,27,29,30,34])),"../plugin-media/src/index.ts":()=>m(()=>import(`./src-Ds6m7Evp2.js`),__vite__mapDeps([42,17,1,18,19,23])),"../plugin-people/src/index.ts":()=>m(()=>import(`./src-Bl8rYgUt2.js`),__vite__mapDeps([43,17,1,18,19])),"../plugin-telegram/src/index.ts":()=>m(()=>import(`./src-xh_qAK43.js`),__vite__mapDeps([44,17,1,19,23])),"../plugin-things/src/index.ts":()=>m(()=>import(`./src-CE1TPDES.js`),__vite__mapDeps([45,17,1,18,19])),"../plugin-transit/src/index.ts":()=>m(()=>import(`./src-D14fQdLH.js`),__vite__mapDeps([46,17,1,18,19,23])),"../plugin-travel/src/index.ts":()=>m(()=>import(`./src-0TBpEeKK.js`),__vite__mapDeps([47,17,1,18,19])),"../plugin-webchat/src/index.ts":()=>m(()=>import(`./src-BmyfVP9z.js`),__vite__mapDeps([48,17,1,19,23])),"../plugin-webexport/src/index.ts":()=>m(()=>import(`./src-qJ0szNVM.js`),__vite__mapDeps([49,17,1,19,23]))}),Yx=Object.assign({"../plugin-calendar/src/ui.tsx":()=>m(()=>import(`./ui-Dj0Nsb2P.js`),__vite__mapDeps([50,1,2,3,51,52,17,4,14,6,7,5,30,18,53,9,54,21])),"../plugin-devices/src/fields/ui.tsx":()=>m(()=>import(`./ui-BuqzqLDw.js`),__vite__mapDeps([55,1,2,3,51,52,17,4,14,6,7,5,30,18,53,9,27])),"../plugin-geo/src/ui.tsx":()=>m(()=>import(`./ui-CqUVBwcW.js`),__vite__mapDeps([56,1,2,3,51,52,17,4,14,6,7,5,30,18,53,9])),"../plugin-webchat/src/ui/ui.tsx":()=>m(()=>import(`./ui-QzaKLk9q.js`),__vite__mapDeps([57,3,1,2,51,52,17,4,14,6,7,5,30,18,53,9]))});[...Object.keys(Jx),...Object.keys(Yx)];async function Xx(e,t){let n=Object.entries(Jx).find(([t])=>t.includes(`/plugin-${e}/`));if(!n)return null;let r=(await n[1]()).default??null;for(let[n,r]of Object.entries(Yx)){if(!n.includes(`/plugin-${e}/`))continue;let i=(await r()).default;i&&t(i)}return r}var Zx={};function Qx(e,t){return Zx[`${e}/${t}`]}function $x(e){fr(e),e.shelf?.RecordView&&e.shelf.library&&e.shelf.shelf&&(Zx[`${e.shelf.library}/${e.shelf.shelf}`]=e.shelf.RecordView);for(let t of e.renderers??[])D(t);for(let t of e.listViews??[])Rn(t);for(let[t,n]of Object.entries(e.templates??{}))Ir(t,n);for(let[t,n]of Object.entries(e.translations??{}))n&&Ka.addResourceBundle(t,`translation`,n,!0,!0)}function eS(e){if(!e.startsWith(`/`)){console.warn(`[federation] skip non-same-origin css: ${e}`);return}if(document.querySelector(`link[href="${e}"]`))return;let t=document.createElement(`link`);t.rel=`stylesheet`,t.href=e,document.head.appendChild(t)}function tS(e){let t=new Map(e.map(e=>[e.id,e])),n=new Set,r=[],i=e=>{if(!n.has(e.id)){n.add(e.id);for(let n of e.dependsOn){let e=t.get(n);e&&i(e)}r.push(e)}};for(let t of e)i(t);return r}async function nS(){let e=await fetch(`/api/plugins`);if(!e.ok)throw Error(`[federation] /api/plugins ${e.status}`);let t=tS((await e.json()).filter(e=>e.enabled)),n=await Promise.all(t.map(async e=>{{let t=[],n=await Xx(e.id,e=>t.push(e)).catch(t=>(console.error(`[federation] ${e.id}: dev source failed —`,t),null));if(n)return{e,devManifest:n,devBundles:t}}if(!e.schema)return{e};let t=await qx(e.schema).catch(t=>{console.error(`[federation] ${e.id}: schema failed, skipping plugin —`,t)});return t?{e,schemaMod:t,webMod:e.web?await qx(e.web).catch(t=>{console.error(`[federation] ${e.id}: web bundle failed —`,t)}):void 0}:{e}})),r=[];for(let{e,devManifest:t,devBundles:i,schemaMod:a,webMod:o}of n)try{if(t){r.push(t);for(let e of i??[])$x(e);continue}let n=a?.default;if(!n)continue;r.push(n),e.css&&eS(e.css);let s=o?.default;s&&$x(s)}catch(t){console.error(`[federation] ${e.id}: applying bundle failed —`,t)}return r}function rS(e,t){if(!t)return 1;let n=Ji(e);return n===`id`||Gi(e.fields)[n]?.kind!==`title`?1:Zn(t[n])?2:1}var iS=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/record/RecordView.tsx`;function aS(){let{t:e}=a(),{library:t,shelf:n,id:r}=s(),i=v(),o=ra(),c=o.find(e=>e.meta.id===t),l=o.flatMap(e=>e.shelves).find(e=>e.library===t&&e.shelf===n),[u,d]=(0,P.useState)(null),f=(0,P.useRef)(u);(0,P.useEffect)(()=>{f.current=u},[u]);let[p,m]=(0,P.useState)({}),[h,g]=(0,P.useState)(!1),[_,y]=(0,P.useState)(!1),b=Jr(e),x=e=>p[e.join(`.`)];function S(e){d(e??null)}if((0,P.useEffect)(()=>{if(!l||l.standalone===!1||!r)return;let e=!0;return Aa(`/api/${l.library}/${l.shelf}/${r}`).then(t=>{e&&d(t)}).catch(()=>{e&&d(null)}),()=>{e=!1}},[l,r]),!l||l.standalone===!1)return(0,F.jsxDEV)(`div`,{className:`p-6 text-muted-foreground`,children:e(`common.notFound`)},void 0,!1,{fileName:iS,lineNumber:73,columnNumber:44},this);async function C(t,n){if(!l||!r)return;let i=f.current?.[t];m(e=>Pr(e,t)),d(e=>e&&{...e,[t]:n});let a=await fa(l.library,l.shelf,r,{[t]:n});if(a.ok){S(a.row),na(`${l.library}/${l.shelf}`,a.row??{});return}d(e=>e&&{...e,[t]:i});let o=Zt(a.issues??[],b);m(e=>({...Pr(e,t),...o}));let s=(a.issues??[]).find(e=>e.field===t)??a.issues?.[0];return s?b(s.code,s.params):e(`validation.server`)}async function w(t,n,i){if(!l||!r)return;let a=f.current?._extends?.[t]?.[n];m(e=>Pr(e,n)),d(e=>{if(!e)return e;let r=e._extends??{};return{...e,_extends:{...r,[t]:{...r[t],[n]:i}}}});let o=await fa(l.library,l.shelf,r,{[`_extend_${t}`]:{[n]:i}});if(o.ok){S(o.row),na(`${l.library}/${l.shelf}`,o.row??{});return}d(e=>{if(!e)return e;let r=e._extends??{};return{...e,_extends:{...r,[t]:{...r[t],[n]:a}}}}),m(e=>({...Pr(e,n),...Zt(o.issues??[],b)}));let s=(o.issues??[]).find(e=>e.field===n)??o.issues?.[0];return s?b(s.code,s.params):e(`validation.server`)}async function T(){if(!l||!r||!await yr({title:e(`actions.confirmDelete`),confirmLabel:e(`actions.delete`),variant:`destructive`}))return;g(!0);let t=await xa(l.library,l.shelf,r);if(g(!1),!t){Qe.error(e(`common.error`));return}sa(`${l.library}/${l.shelf}`),i(`/${l.library}/${l.shelf}`)}async function E(){if(!l||!r||!u)return;let t=u._activity?.favorite===!0;y(!0);let n=await Ta(l.library,l.shelf,r,!t);if(y(!1),!n){Qe.error(e(`common.error`));return}d(e=>e&&{...e,_activity:n}),sa(`${l.library}/${l.shelf}`)}let ee=Fx(l.library,l.shelf);function te(){let e=window.history.state?.idx;if(typeof e==`number`&&e>0){i(-1);return}i(ee?.path??`/${t}/${n}`)}let ne=Qx(l.library,l.shelf);return(0,F.jsxDEV)(me,{children:(0,F.jsxDEV)(ue,{children:(0,F.jsxDEV)(`div`,{className:`flex flex-col`,children:[(0,F.jsxDEV)(Tt,{overline:e(c?.meta.label??``),title:e(l.label),headingLevel:rS(l,u),leading:(0,F.jsxDEV)(N,{variant:`outline`,size:`icon`,onClick:te,title:e(`common.back`),children:(0,F.jsxDEV)(Vl,{size:16},void 0,!1,{fileName:iS,lineNumber:186,columnNumber:17},this)},void 0,!1,{fileName:iS,lineNumber:185,columnNumber:15},this),actions:u&&!ne&&(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(bt,{},void 0,!1,{fileName:iS,lineNumber:193,columnNumber:19},this),(0,F.jsxDEV)(Rr,{variant:`outline`,favorite:!!u._activity?.favorite,busy:_,labelAdd:e(`actions.favoriteAdd`),labelRemove:e(`actions.favoriteRemove`),onClick:E},void 0,!1,{fileName:iS,lineNumber:194,columnNumber:19},this),!l.single&&(0,F.jsxDEV)(N,{variant:`destructiveOutline`,size:`icon`,disabled:h,onClick:T,title:e(`actions.delete`),children:(0,F.jsxDEV)(Ke,{size:16},void 0,!1,{fileName:iS,lineNumber:210,columnNumber:23},this)},void 0,!1,{fileName:iS,lineNumber:203,columnNumber:21},this)]},void 0,!0,{fileName:iS,lineNumber:192,columnNumber:17},this)},void 0,!1,{fileName:iS,lineNumber:180,columnNumber:11},this),(0,F.jsxDEV)(he,{children:u?ne?(0,F.jsxDEV)(ne,{record:u,onEdit:()=>{}},void 0,!1,{fileName:iS,lineNumber:227,columnNumber:15},this):(0,F.jsxDEV)(Gx,{shelf:l,record:u,onUpdate:C,onUpdateExtend:w,errorAt:x},void 0,!1,{fileName:iS,lineNumber:229,columnNumber:15},this):(0,F.jsxDEV)(`div`,{className:`flex items-center justify-center py-20 text-muted-foreground text-sm`,children:e(`common.loading`)},void 0,!1,{fileName:iS,lineNumber:223,columnNumber:15},this)},void 0,!1,{fileName:iS,lineNumber:221,columnNumber:11},this)]},void 0,!0,{fileName:iS,lineNumber:177,columnNumber:9},this)},void 0,!1,{fileName:iS,lineNumber:176,columnNumber:7},this)},void 0,!1,{fileName:iS,lineNumber:175,columnNumber:5},this)}var oS=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/PluginSlot.tsx`,sS=new WeakMap;function cS(e){let t=sS.get(e);return t||(t=(0,P.lazy)(e),sS.set(e,t)),t}var lS=class extends P.Component{state={failed:!1};static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(e){console.error(`[plugin-slot] contribution "${this.props.id}" failed —`,e)}render(){return this.state.failed?null:this.props.children}};function uS({name:e}){let t=_r(e);return t.length?(0,F.jsxDEV)(F.Fragment,{children:t.map(e=>{let t=cS(e.load);return(0,F.jsxDEV)(lS,{id:e.id,children:(0,F.jsxDEV)(P.Suspense,{fallback:null,children:(0,F.jsxDEV)(t,{},void 0,!1,{fileName:oS,lineNumber:54,columnNumber:15},this)},void 0,!1,{fileName:oS,lineNumber:53,columnNumber:13},this)},e.id,!1,{fileName:oS,lineNumber:52,columnNumber:11},this)})},void 0,!1,{fileName:oS,lineNumber:48,columnNumber:5},this):null}function dS({id:e,load:t}){let n=cS(t);return(0,F.jsxDEV)(lS,{id:e,children:(0,F.jsxDEV)(P.Suspense,{fallback:null,children:(0,F.jsxDEV)(n,{},void 0,!1,{fileName:oS,lineNumber:69,columnNumber:9},this)},void 0,!1,{fileName:oS,lineNumber:68,columnNumber:7},this)},void 0,!1,{fileName:oS,lineNumber:67,columnNumber:5},this)}var $=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/app/Shell.tsx`,fS=(0,P.lazy)(()=>m(()=>import(`./SettingsPage-CjsbuhdW.js`).then(e=>({default:e.SettingsPage})),__vite__mapDeps([58,1,2,3,51,52,17,4,14,6,7,5,30,18,53,9,59,60,61,62]))),pS=(0,P.lazy)(()=>m(()=>import(`./DiagnosticsPage-CAWQ6aOl.js`).then(e=>({default:e.DiagnosticsPage})),__vite__mapDeps([63,1,2,3,51,52,17,4,14,6,7,5,30,18,53,9,60,61,62]))),mS=(0,P.lazy)(()=>m(()=>import(`./PluginSettingsPage-CcTksC-8.js`).then(e=>({default:e.PluginSettingsPage})),__vite__mapDeps([64,1,2,3,51,52,17,4,14,6,7,5,30,18,53,9,65]))),hS=(0,P.lazy)(()=>m(()=>import(`./NewRecordView-Y6PoWPB9.js`).then(e=>({default:e.NewRecordView})),__vite__mapDeps([66,1,2,3,67,52,17,30,18,19,20,60]))),gS={"/":(0,F.jsxDEV)(ix,{},void 0,!1,{fileName:$,lineNumber:33,columnNumber:8},void 0),"/trash":(0,F.jsxDEV)(sx,{},void 0,!1,{fileName:$,lineNumber:34,columnNumber:13},void 0),"/settings":(0,F.jsxDEV)(fS,{},void 0,!1,{fileName:$,lineNumber:35,columnNumber:16},void 0),"/settings/diagnostics":(0,F.jsxDEV)(pS,{},void 0,!1,{fileName:$,lineNumber:36,columnNumber:28},void 0),"/settings/account":(0,F.jsxDEV)(ux,{},void 0,!1,{fileName:$,lineNumber:37,columnNumber:24},void 0),"/settings/users":(0,F.jsxDEV)(wx,{},void 0,!1,{fileName:$,lineNumber:38,columnNumber:22},void 0),"/settings/users/new":(0,F.jsxDEV)(Dx,{},void 0,!1,{fileName:$,lineNumber:39,columnNumber:26},void 0),"/settings/users/:id":(0,F.jsxDEV)(Ax,{},void 0,!1,{fileName:$,lineNumber:40,columnNumber:26},void 0),"/settings/:groupId":(0,F.jsxDEV)(mS,{},void 0,!1,{fileName:$,lineNumber:41,columnNumber:25},void 0),"/:library/:shelf":(0,F.jsxDEV)(Bx,{},void 0,!1,{fileName:$,lineNumber:42,columnNumber:23},void 0),"/:library/:shelf/new":(0,F.jsxDEV)(hS,{},void 0,!1,{fileName:$,lineNumber:43,columnNumber:27},void 0),"/:library/:shelf/:id":(0,F.jsxDEV)(aS,{},void 0,!1,{fileName:$,lineNumber:44,columnNumber:27},void 0)};function _S(){return(0,F.jsxDEV)(g,{children:[(0,F.jsxDEV)(p,{path:`/login`,element:(0,F.jsxDEV)(Ub,{},void 0,!1,{fileName:$,lineNumber:50,columnNumber:37},this)},void 0,!1,{fileName:$,lineNumber:50,columnNumber:7},this),(0,F.jsxDEV)(p,{path:`/setup`,element:(0,F.jsxDEV)(qb,{},void 0,!1,{fileName:$,lineNumber:51,columnNumber:37},this)},void 0,!1,{fileName:$,lineNumber:51,columnNumber:7},this),(0,F.jsxDEV)(p,{path:`/*`,element:(0,F.jsxDEV)(Ra,{children:(0,F.jsxDEV)(vS,{},void 0,!1,{fileName:$,lineNumber:56,columnNumber:13},this)},void 0,!1,{fileName:$,lineNumber:55,columnNumber:11},this)},void 0,!1,{fileName:$,lineNumber:52,columnNumber:7},this)]},void 0,!0,{fileName:$,lineNumber:49,columnNumber:5},this)}function vS(){let{t:e}=a(),[t,n]=(0,P.useState)(!1);return(0,P.useEffect)(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.key===`k`&&(e.preventDefault(),n(e=>!e))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),(0,F.jsxDEV)(F.Fragment,{children:[(0,F.jsxDEV)(w,{children:[(0,F.jsxDEV)($b,{onSearchOpen:()=>n(!0)},void 0,!1,{fileName:$,lineNumber:82,columnNumber:9},this),(0,F.jsxDEV)(re,{className:`[&:has(header)>[data-slot=sidebar-trigger]]:hidden`,children:[(0,F.jsxDEV)(Ge,{className:`absolute top-2 left-2 z-10`,"aria-label":e(`nav.toggleSidebar`)},void 0,!1,{fileName:$,lineNumber:98,columnNumber:11},this),(0,F.jsxDEV)(P.Suspense,{fallback:(0,F.jsxDEV)(`div`,{className:`flex justify-center py-16`,children:(0,F.jsxDEV)(Ee,{className:`animate-spin text-muted-foreground`,size:20},void 0,!1,{fileName:$,lineNumber:102,columnNumber:17},this)},void 0,!1,{fileName:$,lineNumber:101,columnNumber:15},this),children:(0,F.jsxDEV)(g,{children:[Bb.map(e=>(0,F.jsxDEV)(p,{path:e.pattern,element:gS[e.pattern]},e.pattern,!1,{fileName:$,lineNumber:108,columnNumber:17},this)),(0,F.jsxDEV)(p,{path:`/plugins`,element:(0,F.jsxDEV)(o,{to:`/settings`,replace:!0},void 0,!1,{fileName:$,lineNumber:111,columnNumber:47},this)},void 0,!1,{fileName:$,lineNumber:111,columnNumber:15},this),$n().map(e=>(0,F.jsxDEV)(p,{path:e.path,element:(0,F.jsxDEV)(dS,{id:e.path,load:e.load},void 0,!1,{fileName:$,lineNumber:113,columnNumber:60},this)},e.path,!1,{fileName:$,lineNumber:113,columnNumber:17},this))]},void 0,!0,{fileName:$,lineNumber:106,columnNumber:13},this)},void 0,!1,{fileName:$,lineNumber:99,columnNumber:11},this)]},void 0,!0,{fileName:$,lineNumber:97,columnNumber:9},this),(0,F.jsxDEV)(uS,{name:`overlay`},void 0,!1,{fileName:$,lineNumber:118,columnNumber:9},this)]},void 0,!0,{fileName:$,lineNumber:81,columnNumber:7},this),(0,F.jsxDEV)(tx,{open:t,onClose:()=>n(!1)},void 0,!1,{fileName:$,lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:$,lineNumber:80,columnNumber:5},this)}var yS=typeof window>`u`?``:window.location.origin;async function bS(){try{let e=await fetch(an.instance);if(!e.ok){e.status!==401&&console.warn(`[instance] GET ${an.instance} → ${e.status}`);return}let t=await e.json();typeof t.origin==`string`&&t.origin&&(yS=t.origin.replace(/\/+$/,``))}catch{}}function xS(){return yS}function SS(){Sn({origin:xS,mediaUrl:Ia,uploadFile:ga,resolveEmbed:da,listRecords:ba,listDir:Ca}),Gr({getShelf:Zi,getOptionList:oa})}var CS=`/home/grigorii/Projects/GitHub/grigorii-horos/coffer/packages/web/main.tsx`,wS=[];try{wS=await nS()}catch(e){console.warn(`[federation] failed to load plugins, continuing with none:`,e)}$i(wS),await bS(),SS(),xr(Bb),Jn(ta().map(e=>({library:e.library,shelf:e.shelf}))),(0,Ba.createRoot)(document.getElementById(`root`)).render((0,F.jsxDEV)(P.StrictMode,{children:(0,F.jsxDEV)(f,{children:[(0,F.jsxDEV)(_S,{},void 0,!1,{fileName:CS,lineNumber:64,columnNumber:7},void 0),(0,F.jsxDEV)(tr,{},void 0,!1,{fileName:CS,lineNumber:65,columnNumber:7},void 0),(0,F.jsxDEV)(se,{richColors:!0,position:`bottom-right`},void 0,!1,{fileName:CS,lineNumber:66,columnNumber:7},void 0)]},void 0,!0,{fileName:CS,lineNumber:63,columnNumber:5},void 0)},void 0,!1,{fileName:CS,lineNumber:62,columnNumber:3},void 0));
|