@forsion/unit 2.13.5 → 2.13.6
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/README.md +2 -2
- package/main.mjs +20 -4
- package/package.json +1 -1
- package/release.json +6 -5
- package/web/assets/{ArtificialView-BD1yHz1N.js → ArtificialView-DHqb9CTL.js} +1 -1
- package/web/assets/{AutomationBuilder-B09c-5Bi.js → AutomationBuilder-CzBKmOiw.js} +1 -1
- package/web/assets/{CalendarConfigView-Bd-ZDGPO.js → CalendarConfigView-Blw47NCs.js} +1 -1
- package/web/assets/CalendarSide-CFSzme3H.js +1 -0
- package/web/assets/CalendarView-B8sQfgZt.js +3 -0
- package/web/assets/{CapabilityMenu-DyHTEYLr.js → CapabilityMenu-Dzn6RbB1.js} +1 -1
- package/web/assets/{Chrome-C7F6fdDp.js → Chrome-owLewFu4.js} +1 -1
- package/web/assets/{CodeView-BGOnrGhB.js → CodeView-E18NDilX.js} +3 -3
- package/web/assets/{CtxMenuButtons-BYjrbUKS.js → CtxMenuButtons-CAiwQkOK.js} +1 -1
- package/web/assets/DashboardGridView-CBbYKcCo.js +25 -0
- package/web/assets/EventCard-D9uQe7g4.js +1 -0
- package/web/assets/{ExcalidrawCanvas-lwJCN6uB.js → ExcalidrawCanvas-BSOERegJ.js} +1 -1
- package/web/assets/{FloatingToc-DO7SH8Ku.js → FloatingToc-iK08Qpjc.js} +1 -1
- package/web/assets/GitCloneDialog-DfY0kqhP.js +1 -0
- package/web/assets/{HomepageView-CHJEhf9c.js → HomepageView-BCqFe1Ym.js} +3 -3
- package/web/assets/{ImageStudioPanels-CgVf0wiq.js → ImageStudioPanels-DdwihAkT.js} +2 -2
- package/web/assets/ImageStudioView-gJSYrmu1.js +1 -0
- package/web/assets/{InlineAiPanel-CdIPINsA.js → InlineAiPanel-CjYOW0_0.js} +1 -1
- package/web/assets/InlineFiles-3g2jMUeA.js +1 -0
- package/web/assets/{MarkdownBlock-DSItkLhu.js → MarkdownBlock-DjsGkPZ_.js} +24 -24
- package/web/assets/{ModelPill--CU3XTIQ.js → ModelPill-DgyXBsL9.js} +2 -2
- package/web/assets/MuseLibraryView-D_HBijmU.js +2 -0
- package/web/assets/{MuseView-CvsO62Fo.js → MuseView-BVDlmM6i.js} +3 -3
- package/web/assets/{PageHistoryPanel-CDh7nm78.js → PageHistoryPanel-B1EAPZeX.js} +2 -2
- package/web/assets/{PdfAnnotator-DafvjP3U.js → PdfAnnotator-bdB9evsY.js} +1 -1
- package/web/assets/{PenRow-CEy-s6SF.js → PenRow-DCOIGlfY.js} +1 -1
- package/web/assets/PluginToolCard-BXE5vA1h.js +2 -0
- package/web/assets/{ProductView-AUqnTwmQ.js → ProductView-l5Q7uBy6.js} +1 -1
- package/web/assets/{SettingsPage-B9mmkWaM.js → SettingsPage-fjxfS_Mt.js} +2 -2
- package/web/assets/{StudioGuestSurface-OOhRA8nt.js → StudioGuestSurface-360CWUwf.js} +1 -1
- package/web/assets/TodoListView-BsPt2GUU.js +1 -0
- package/web/assets/{Tooltip-DOYi44eY.js → Tooltip-CuXpWtdJ.js} +1 -1
- package/web/assets/UnifiedPage-6xbFLtXT.js +712 -0
- package/web/assets/{ViewSelectionBar-WmSWMFsR.js → ViewSelectionBar-C5FDh7fO.js} +2 -2
- package/web/assets/{appStore-DDOkzWDA.js → appStore-BskcSDl6.js} +114 -115
- package/web/assets/{arrow-up-right-BptN64d-.js → arrow-up-right-DEykpgsH.js} +1 -1
- package/web/assets/{astryxBridge-BL56QfEv.js → astryxBridge-B2IZdPvo.js} +1 -1
- package/web/assets/automationListSource-Cm09JKkK.js +1 -0
- package/web/assets/{boardSurface-CP4HNmcm.js → boardSurface-Dv-aVaUJ.js} +1 -1
- package/web/assets/{calendarNavStore-DCi7VBmM.js → calendarNavStore-FKStA7Hh.js} +1 -1
- package/web/assets/{canvasPrefs-ArsX3NFO.js → canvasPrefs-CMulOS0k.js} +1 -1
- package/web/assets/{chatBoxSurface-DRsDr-MT.js → chatBoxSurface-BR_G6cxG.js} +1 -1
- package/web/assets/{chevron-up-ChXNh14u.js → chevron-up-C_EDOZzI.js} +1 -1
- package/web/assets/{client-fKy9CWk0.js → client-DD5czSuF.js} +1 -1
- package/web/assets/{code-xml-DCCD9eCS.js → code-xml-vTB4LtTf.js} +1 -1
- package/web/assets/{codeStudioStore-BgLfCDK2.js → codeStudioStore-OswE1_s0.js} +1 -1
- package/web/assets/{contextMenuSurface-BF593l2M.js → contextMenuSurface-DqdYEGuH.js} +1 -1
- package/web/assets/{copy-plus-ClKrSgM7.js → copy-plus-CVHqDNny.js} +1 -1
- package/web/assets/create-DZWy4zBR.js +14 -0
- package/web/assets/{dashboardSurface-C6cbR3oG.js → dashboardSurface-Co4byEQm.js} +1 -1
- package/web/assets/dbStore-Bc2lC8ZI.js +2 -0
- package/web/assets/deskCapture-BfTzH2aO.js +1 -0
- package/web/assets/{diff2html-Di8qIz6O.js → diff2html-0MkNy2ws.js} +1 -1
- package/web/assets/{docx-preview-B-URZXdP.js → docx-preview-CwNWZegI.js} +1 -1
- package/web/assets/{draft-CBSW5tHx.js → draft-DTzuTatQ.js} +2 -2
- package/web/assets/{drawingStore-CGvTqqYW.js → drawingStore-BD5m2eqn.js} +1 -1
- package/web/assets/{file-down-Z913cCyQ.js → file-down-Cjo_T6By.js} +1 -1
- package/web/assets/{floatingTocSurface-DGwTiqvU.js → floatingTocSurface-D3IIVNnq.js} +1 -1
- package/web/assets/{foldActions-DGIPTmE1.js → foldActions-utwZpRrA.js} +1 -1
- package/web/assets/{folder-1OJQeDI1.js → folder-DiaFWdCg.js} +1 -1
- package/web/assets/{folder-minus-D_j1SwHu.js → folder-minus-DUEOcs12.js} +1 -1
- package/web/assets/{folder-plus-DP9sFr26.js → folder-plus-Cmhq0GcR.js} +1 -1
- package/web/assets/{gestures-ZhFAENNZ.js → gestures-Bx9M0le5.js} +1 -1
- package/web/assets/{git-branch-BMajF2cu.js → git-branch-DzGWffyD.js} +1 -1
- package/web/assets/{homeCardStatus-5R7XkxFL.js → homeCardStatus-NAk4A77P.js} +1 -1
- package/web/assets/{i18n.generated-DW_l6CkR.js → i18n.generated-D4-Wu9Wh.js} +1 -1
- package/web/assets/imageStudio-D67oElIb.js +4 -0
- package/web/assets/{index-COzdD7mZ.js → index-3VWZ1rsL.js} +1 -1
- package/web/assets/{index-bF04pF8q.js → index-58wBjkHy.js} +1 -1
- package/web/assets/{index-Cg1FWM_p.js → index-B9_zH7f5.js} +1 -1
- package/web/assets/index-BQrMYjou.js +1 -0
- package/web/assets/{index-D-ClOPbg.js → index-BWrWMYua.js} +1 -1
- package/web/assets/{index-C--E96Ul.js → index-BdLJBf4-.js} +1 -1
- package/web/assets/{index-CI2esW1X.js → index-Bf3W92Hb.js} +1 -1
- package/web/assets/{index-B8A3nKeL.js → index-BjmPaLFA.js} +1 -1
- package/web/assets/{index-BeW45J9J.js → index-Bv-vJTzF.js} +1 -1
- package/web/assets/{index-BnJguNqI.js → index-C7yb62gg.js} +1 -1
- package/web/assets/{index-CtRdzpNh.js → index-C9gBBMYv.js} +1 -1
- package/web/assets/index-CiQ59Kib.js +1 -0
- package/web/assets/{index-DfhEDV2T.js → index-CzTUjEMt.js} +1 -1
- package/web/assets/{index-BYKR7EVg.js → index-D4Qx6o3E.js} +1 -1
- package/web/assets/{index-jzlU5luC.js → index-DDBcn3UD.js} +1 -1
- package/web/assets/{index-CtCYv9bF.js → index-DEADY94l.js} +1 -1
- package/web/assets/{index-CWXpOSI2.js → index-DGTKsPAQ.js} +1 -1
- package/web/assets/{index-SpegRFQV.js → index-DRwDqvjf.js} +1 -1
- package/web/assets/{index-BDZIQnEx.js → index-DexVkoxH.js} +1 -1
- package/web/assets/{index-uhvJ8AiJ.js → index-IMOhRWY8.js} +1 -1
- package/web/assets/{index-Dr6YmrrT.js → index-XjvpYHIo.js} +1 -1
- package/web/assets/{index-fDB1l4d-.js → index-YuejkHoJ.js} +51 -37
- package/web/assets/{index-CVLDDD5Z.js → index-pH0266gX.js} +1 -1
- package/web/assets/{index-BniT-A2n.js → index-sQl_bGM_.js} +1 -1
- package/web/assets/{index-CPfmhZ3Z.js → index-vbNFy5lS.js} +1 -1
- package/web/assets/{invitePage-iOT1zBvp.js → invitePage-BT_rFfab.js} +1 -1
- package/web/assets/{ipc-SAPDwyQ4.js → ipc-8cxXGSZK.js} +1 -1
- package/web/assets/{jszip.min-B3n1FGCb.js → jszip.min-By4OI3XR.js} +1 -1
- package/web/assets/launchpad-BX4jQyF4.js +2 -0
- package/web/assets/{layout-grid-oIyIGbc5.js → layout-grid-CzxXbCDa.js} +1 -1
- package/web/assets/{linkFollow-uke1Xtit.js → linkFollow-J2c0wSgB.js} +4 -4
- package/web/assets/{listFold-BeNv2v6M.js → listFold-B_2Xqxn_.js} +1 -1
- package/web/assets/{lock-open-D2nMg0ga.js → lock-open-DVWCLSZm.js} +1 -1
- package/web/assets/{log-out-D70NCXC4.js → log-out-CdKTS7HC.js} +1 -1
- package/web/assets/{magnet-Cqmm97W8.js → magnet-BmVcZ9U4.js} +1 -1
- package/web/assets/main-CForzSFD.js +15 -0
- package/web/assets/{markdownEditorSurface-zUzFity2.js → markdownEditorSurface-Bs8FJNHu.js} +1 -1
- package/web/assets/{mediaPlayer-DB4KUvua.js → mediaPlayer-O9pVRl_k.js} +1 -1
- package/web/assets/{message-square-plus-BvUfAAZm.js → message-square-plus-CspBv9iG.js} +1 -1
- package/web/assets/{messages-GQUjmbwW.js → messages-CG7ywZ-K.js} +1 -1
- package/web/assets/{minimize-2-CMhzL6ZW.js → minimize-2-Bq4vUin-.js} +1 -1
- package/web/assets/mobileEntry-CptXQ4Ov.js +13 -0
- package/web/assets/modelPickerSurface-C0SkjaPL.js +1 -0
- package/web/assets/{nativeDownload-DsGyUSJ5.js → nativeDownload-DlnT8U-y.js} +1 -1
- package/web/assets/{nativeSheetMenu--iihXNVd.js → nativeSheetMenu-CVC51DzC.js} +1 -1
- package/web/assets/{pageStore-ys8L4rjF.css → pageStore-BC6Z18n7.css} +1 -1
- package/web/assets/{pageStore-CyvNZEYX.js → pageStore-D_fKLv-o.js} +7 -7
- package/web/assets/{pageTree-Ci2qzrs1.js → pageTree-DtDKozTg.js} +3 -3
- package/web/assets/{pen-line-DC3lbEY1.js → pen-line-ho1GgAe2.js} +1 -1
- package/web/assets/{pen-tool-DD5_N4lZ.js → pen-tool-CV-FKFEZ.js} +1 -1
- package/web/assets/{pencil--sWwxHdP.js → pencil-BgF4Kiqp.js} +1 -1
- package/web/assets/{phoneList-DKRMxQHf.js → phoneList-BLVdQcXY.js} +1 -1
- package/web/assets/pluginChat-C6t6DWhY.js +2 -0
- package/web/assets/{react-b7FrqRQR.js → react-DOzedx9n.js} +1 -1
- package/web/assets/recordSurface-C9SRNjy4.js +1 -0
- package/web/assets/{redo-2-CqlqhWrI.js → redo-2-DWZTaEz-.js} +1 -1
- package/web/assets/{rotate-ccw-D8kni6Ni.js → rotate-ccw-CyZpL7MX.js} +1 -1
- package/web/assets/{selectionActions-DIq0xDm8.js → selectionActions-C2a8ImJm.js} +1 -1
- package/web/assets/selectionBarSurface-DaXlyy1s.js +1 -0
- package/web/assets/{sessionTitle-Ctp4iNKu.js → sessionTitle-BtZ1BteL.js} +1 -1
- package/web/assets/settingsPageSurface-Cg8FNZq3.js +1 -0
- package/web/assets/{sharePage-CY04XCAf.js → sharePage-vnghra3Q.js} +2 -2
- package/web/assets/{shareViewer-DweNF8Ch.js → shareViewer-CWJQHiV-.js} +1 -1
- package/web/assets/{star-B0sZEmbj.js → star-ZEpUQwnX.js} +1 -1
- package/web/assets/tableSurface-DfEdzVDn.js +1 -0
- package/web/assets/{tanguProbe-B8Qv2vcm.js → tanguProbe-BboOas-a.js} +6 -6
- package/web/assets/{terminalView-BLGdmdl7.js → terminalView-xp8ARBLi.js} +1 -1
- package/web/assets/{type-Dt7RNB9g.js → type-CMyP4cKt.js} +1 -1
- package/web/assets/{undo-2-QimgpLBn.js → undo-2-C4ZCsMsx.js} +1 -1
- package/web/assets/{unitAccount-DL3jfd84.js → unitAccount-DNxfGo3c.js} +1 -1
- package/web/assets/{unitBridge-BSsCy1zP.js → unitBridge-Bq0n1ZM6.js} +1 -1
- package/web/assets/{unitCloudTransport-CI_6H0TU.js → unitCloudTransport-CErylgEO.js} +1 -1
- package/web/assets/{unitOwnerAccess-CiQ7nD7E.js → unitOwnerAccess-7s-3dfNM.js} +1 -1
- package/web/assets/{unitShim-Dl2ksNp-.js → unitShim-BfheyIG8.js} +3 -3
- package/web/assets/{upload-Dy7svciS.js → upload-VtCrluEO.js} +1 -1
- package/web/assets/userSpaces-BpeYjLni.js +1 -0
- package/web/assets/viewportLock-cVUalJAI.js +738 -0
- package/web/assets/{zoom-in-DDEtY_Go.js → zoom-in-C7R8s9x-.js} +1 -1
- package/web/index.html +2 -2
- package/web/assets/CalendarSide-B0RVbOsg.js +0 -1
- package/web/assets/CalendarView-BHio-n_r.js +0 -3
- package/web/assets/DashboardGridView-CR-R_qV8.js +0 -25
- package/web/assets/EventCard-QyYorE1_.js +0 -1
- package/web/assets/GitCloneDialog-CbW-RJak.js +0 -1
- package/web/assets/ImageStudioView-4WcX0_V4.js +0 -1
- package/web/assets/InlineFiles-CAIyTk1n.js +0 -1
- package/web/assets/MuseLibraryView-PlS7HAlV.js +0 -2
- package/web/assets/PluginToolCard-DCzLhsCA.js +0 -2
- package/web/assets/TodoListView-BkgMe44I.js +0 -1
- package/web/assets/UnifiedPage-s7-tDSwG.js +0 -712
- package/web/assets/automationListSource-B1jz6q0t.js +0 -1
- package/web/assets/create-DYmVT68X.js +0 -14
- package/web/assets/dbStore-BIG5Mfh2.js +0 -1
- package/web/assets/deskCapture-q-jRDIcc.js +0 -1
- package/web/assets/imageStudio-DC_syDtx.js +0 -4
- package/web/assets/index-CIKPZc3Q.js +0 -1
- package/web/assets/index-CmsN2Zm2.js +0 -1
- package/web/assets/launchpad-CcmSwlJl.js +0 -2
- package/web/assets/main-B9aT0WXG.js +0 -15
- package/web/assets/mobileEntry-BnHzrdoC.js +0 -13
- package/web/assets/modelPickerSurface-Dtz40Ae2.js +0 -1
- package/web/assets/pluginChat-82zZt47Y.js +0 -2
- package/web/assets/recordSurface-vUX25Z8R.js +0 -1
- package/web/assets/selectionBarSurface-B94e5JW_.js +0 -1
- package/web/assets/settingsPageSurface-C9TA3mJg.js +0 -1
- package/web/assets/tableSurface-CSBYBw5P.js +0 -1
- package/web/assets/userSpaces-oMHIWgYe.js +0 -1
- package/web/assets/viewportLock-BZq5PTeN.js +0 -738
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e}from"./pageStore-
|
|
1
|
+
import{p as e}from"./pageStore-D_fKLv-o.js";const o=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],n=e("zoom-out",o);const y=[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["line",{x1:"21",x2:"16.65",y1:"21",y2:"16.65",key:"13gj7c"}],["line",{x1:"11",x2:"11",y1:"8",y2:"14",key:"1vmskp"}],["line",{x1:"8",x2:"14",y1:"11",y2:"11",key:"durymu"}]],x=e("zoom-in",y);export{n as Z,x as a};
|
package/web/index.html
CHANGED
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
}
|
|
236
236
|
</style>
|
|
237
237
|
<link rel="stylesheet" href="./fonts/fonts.css">
|
|
238
|
-
<script type="module" crossorigin src="./assets/index-
|
|
238
|
+
<script type="module" crossorigin src="./assets/index-YuejkHoJ.js"></script>
|
|
239
239
|
</head>
|
|
240
240
|
<body>
|
|
241
241
|
<div id="tangu-splash" aria-hidden="true">
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
</svg>
|
|
252
252
|
</div>
|
|
253
253
|
<div id="root"></div>
|
|
254
|
-
<script>window.FORSION_APP_VERSION="2.13.
|
|
254
|
+
<script>window.FORSION_APP_VERSION="2.13.6";// Runs inline before app modules, from one source shared by Desktop, Web and Mobile.
|
|
255
255
|
(function () {
|
|
256
256
|
var splash = document.getElementById('tangu-splash');
|
|
257
257
|
if (!splash) return;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e,j as i}from"./index-fDB1l4d-.js";import{TodoListView as s}from"./TodoListView-BkgMe44I.js";import{u as o}from"./calendarNavStore-DCi7VBmM.js";import"./astryxBridge-BL56QfEv.js";import"./appStore-DDOkzWDA.js";import"./react-b7FrqRQR.js";import"./pageStore-CyvNZEYX.js";import"./client-fKy9CWk0.js";import"./ipc-SAPDwyQ4.js";import"./nativeDownload-DsGyUSJ5.js";import"./dbStore-BIG5Mfh2.js";import"./drawingStore-CGvTqqYW.js";import"./draft-CBSW5tHx.js";import"./EventCard-QyYorE1_.js";import"./chevron-up-ChXNh14u.js";import"./Tooltip-DOYi44eY.js";function g(){const r=o(m=>m.setSideEl),t=e.useRef(null);return e.useEffect(()=>(r(t.current),()=>{o.getState().sideEl===t.current&&r(null)}),[r]),i.jsx("div",{className:"amx-calside2",ref:t,children:i.jsx(s,{params:{side:!0}})})}export{g as CalendarSide};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{u as It,r as p,j as l,a as Gt,t as st}from"./index-fDB1l4d-.js";import{p as tn,am as en,F as nn,T as an,X as rn,av as sn,aE as ln,ad as qe,u as He,h as on,aj as Oe,R as ot,bt as cn,as as he,br as dn,aA as un,a7 as mn}from"./pageStore-CyvNZEYX.js";import"./client-fKy9CWk0.js";import{A as Ee}from"./astryxBridge-BL56QfEv.js";import{aW as fn,bb as pn,k$ as Ye,pQ as ve,qg as hn,pR as Be,pU as yn,pV as gn,oi as we,eT as K,qh as Jt,qi as Rt,qj as Mt,qk as Fe,ql as Xe,qm as le,pX as xn,p_ as vn,qn as B,qo as be,qp as wn,qq as Se,qr as bn,qs as kn,qt as Mn,qu as Dn,qv as Cn,qw as En,qx as $e,qy as Sn,qz as Ht,qA as G,qB as $t,qC as fe,qD as $n,qE as jn,qF as Ue,qG as Ot,qH as Tn,qI as zn,qJ as je,qK as Te,qL as ze,qM as We,qN as Rn,qO as ae}from"./appStore-DDOkzWDA.js";import{u as w,H as Nn}from"./calendarNavStore-DCi7VBmM.js";import{c as Pn,a as In,b as nt,d as Zt,s as Ve,r as ke,o as Ln,e as An,E as qn,f as Hn,u as On,g as Yn}from"./EventCard-QyYorE1_.js";import{R as Bn}from"./redo-2-CqlqhWrI.js";import{U as Fn}from"./undo-2-QimgpLBn.js";import{C as Xn,a as Un}from"./copy-plus-ClKrSgM7.js";import{n as ft}from"./nativeDownload-DsGyUSJ5.js";import{c as Wn}from"./react-b7FrqRQR.js";import{p as oe,d as ye,B as re,D as Vn,a as se,b as ce,T as pe}from"./draft-CBSW5tHx.js";import{Z as _n,a as Kn}from"./zoom-in-DDEtY_Go.js";import{R as Zn}from"./rotate-ccw-D8kni6Ni.js";import"./ipc-SAPDwyQ4.js";import"./dbStore-BIG5Mfh2.js";import"./drawingStore-CGvTqqYW.js";import"./chevron-up-ChXNh14u.js";const Jn=[["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M8.12 8.12 12 12",key:"1alkpv"}],["path",{d:"M20 4 8.12 15.88",key:"xgtan2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M14.8 14.8 20 20",key:"ptml3r"}]],Gn=tn("scissors",Jn);Gt({"calevmenu.copy":{zh:"复制",en:"Copy"},"calevmenu.cut":{zh:"剪切",en:"Cut"},"calevmenu.clone":{zh:"克隆",en:"Clone"},"calevmenu.paste":{zh:"粘贴",en:"Paste"},"calevmenu.delete":{zh:"删除",en:"Delete"},"calevmenu.undo":{zh:"撤销",en:"Undo"},"calevmenu.redo":{zh:"重做",en:"Redo"},"calevmenu.summary":{zh:"复制摘要",en:"Copy summary"},"calevmenu.back":{zh:"返回详情",en:"Back to details"},"calevmenu.readonly":{zh:"此来源只支持查看和复制摘要。",en:"This source supports viewing and copying a summary."},"calevmenu.fixedTime":{zh:"系统时间属性不可移动。",en:"System time properties cannot be moved."},"calevmenu.note":{zh:"此事件关联笔记文件,删除时需确认。",en:"This event is a note file. Deletion requires confirmation."}});const Qn={copy:pn,cut:Gn,clone:Un,paste:Xn,delete:fn,undo:Fn,redo:Bn,summary:nn},Re={copy:"C",cut:"X",clone:"D",paste:"V",undo:"Z",redo:"⇧Z",delete:"Del"};function Ne({at:r,mobile:c,writable:i,note:o,hasClip:f,onRun:x,onClose:$,hasEvent:I=!0,canCut:Y=!0}){const{t:N}=It(),L=p.useRef(null);p.useEffect(()=>{L.current?.querySelector("button:not([disabled])")?.focus();const v=j=>{L.current?.contains(j.target)||$()};return c||window.addEventListener("pointerdown",v),()=>window.removeEventListener("pointerdown",v)},[]);const C=I?i?["copy","cut","clone","paste","summary","delete","undo","redo"]:["summary"]:["paste","undo","redo"],V=l.jsxs("div",{ref:L,className:`amx-cal-eventmenu${c?" phone":""}`,role:"menu",onKeyDown:v=>{if(v.key==="Escape"||c&&v.key==="ArrowLeft"){v.preventDefault(),v.stopPropagation(),$();return}const j=Array.from(L.current?.querySelectorAll("button:not([disabled])")??[]);if(["ArrowDown","ArrowUp","Home","End"].includes(v.key)){v.preventDefault();const q=j.indexOf(document.activeElement),F=v.key==="Home"?0:v.key==="End"?j.length-1:(q+(v.key==="ArrowDown"?1:-1)+j.length)%j.length;j[F]?.focus()}},children:[c&&l.jsxs("button",{role:"menuitem",onClick:$,children:[l.jsx(en,{size:16}),N("calevmenu.back")]}),I&&(!i||o)&&l.jsx("p",{children:N(o?"calevmenu.note":"calevmenu.readonly")}),C.map(v=>{const j=Qn[v];return l.jsxs("button",{role:"menuitem","aria-label":N(`calevmenu.${v}`),className:v==="delete"?"danger":"",title:v==="cut"&&!Y?N("calevmenu.fixedTime"):void 0,disabled:v==="cut"&&!Y||v==="paste"&&!f||v==="undo"&&!Pn()||v==="redo"&&!In(),onClick:()=>x(v),children:[l.jsx(j,{size:16}),l.jsx("span",{children:N(`calevmenu.${v}`)}),!c&&Re[v]&&l.jsx("kbd",{"aria-hidden":"true",children:v==="delete"?"Del":`${navigator.platform.includes("Mac")?"⌘":"Ctrl+"}${Re[v]}`})]},v)})]});return c?V:an.createPortal(l.jsx(rn,{x:r.x,y:r.y,className:"ctx-menu amx-cal-menu-position",children:V}),document.body)}Gt({"calclip.copied":{zh:"已复制事件",en:"Event copied"},"calclip.cut":{zh:"已剪切,选择时间格后粘贴",en:"Event cut. Choose a time slot and paste"},"calclip.created":{zh:"已创建事件副本",en:"Event duplicated"},"calclip.failed":{zh:"操作未完成,原事件已保留。",en:"The action could not finish. The original event was kept."},"calclip.scope":{zh:"请在原智库的同一日历中粘贴。",en:"Paste into the same calendar in the original vault."},"calclip.noteCopy":{zh:"笔记事件请在来源中复制文件,以保留完整正文。",en:"Duplicate the note in its source to preserve the complete document."}});const Pt=Wn(()=>({clip:null}));let ie=0;function _t(){++ie,Pt.setState({clip:null})}function Pe(r,c=!1){const i=++ie;if(r.db.readonly||c&&ve(r.db.columns.find(f=>f.id===r.colId)?.type??""))return!1;const o=Zt(r.db,r.row.rowId);if(!o)return!1;if(r.db.isNoteView&&!c){const f=nt();return(async()=>{try{if(await sn(!0),nt()!==f||i!==ie)return!1;const x=await ln.readTextFile(o.rowId);return x==null||nt()!==f||i!==ie?!1:(Pt.setState({clip:{scope:f,event:{...r,row:structuredClone(o),noteText:x},cut:c}}),ft({level:"info",text:st("calclip.copied")}),!0)}catch{return ft({level:"warning",text:st("calclip.failed")}),!1}})()}return Pt.setState({clip:{scope:nt(),event:{...r,row:structuredClone(o)},cut:c}}),ft({level:"info",text:st(c?"calclip.cut":"calclip.copied")}),!0}function Ie(r,c){const i=we(r);if(!i||!c)return r;const o=K(i.start),f=new Date(c);i.allDay&&f.setHours(0,0,0,0);const x=i.end?i.allDay?Jt(K(i.end),Rt(f,o)):new Date(f.getTime()+K(i.end).getTime()-o.getTime()):null;return`${Mt(f,i.allDay)}${x?`/${Mt(x,i.allDay)}`:""}`}async function Me(r,c=r.raw){const i=nt();if(r.db.readonly)return null;if(c!==r.raw&&ve(r.db.columns.find(f=>f.id===r.colId)?.type??""))return ft({level:"warning",text:st("calclip.failed")}),null;const o=Ye(r.db.path);if(!o||JSON.stringify(o.columns)!==JSON.stringify(r.db.columns))return ft({level:"warning",text:st("calclip.failed")}),null;try{const f=await hn({...r.db,rows:[r.row]},r.row.rowId,()=>nt()===i,r.noteText);if(!f||i!==nt())return null;if(c!==r.raw&&Be(r.db,f,r.colId,c),r.db.isNoteView)return ft({level:"info",text:st("calclip.created")}),f;const x=structuredClone(Zt(r.db,f));let $=[];return Ln(st("calclip.created"),()=>Ve(r.db,Zt(r.db,f),x)?($=yn(r.db,f,x),!0):!1,()=>Zt(r.db,f)?!1:(gn(r.db,x,$),!0)),f}catch{return ft({level:"error",text:st("calclip.failed")}),null}}async function _e(r,c){const i=Pt.getState().clip;if(!i)return null;const o=i.event;if(i.scope!==nt()||r&&r.path!==o.db.path||r?.readonly)return ft({level:"warning",text:st("calclip.scope")}),null;const f=Ye(o.db.path);if(!f||JSON.stringify(f.columns)!==JSON.stringify(o.db.columns))return ft({level:"warning",text:st("calclip.failed")}),null;if(i.cut){const $=Zt(o.db,o.row.rowId);if(!$||!Ve(o.db,$,o.row))return ft({level:"warning",text:st("calclip.failed")}),null;const I=Ie(o.raw,c);return ke(o.db,$,o.colId,o.raw,I,o.title),_t(),{db:o.db,id:$.rowId}}const x=await Me(o,Ie(o.raw,c));return x?{db:o.db,id:x}:null}Gt({"calside.newEvent":{zh:"新事件",en:"New event"},"calside.calendar":{zh:"日历",en:"Calendar"},"calside.save":{zh:"保存",en:"Save"},"calside.cancel":{zh:"取消",en:"Cancel"},"calside.discard":{zh:"放弃未保存的事件?",en:"Discard this unsaved event?"},"calside.paste":{zh:"在此粘贴事件",en:"Paste event here"},"calside.hint":{zh:"标题在格子里直接打。Enter 保存,Esc 取消;没写标题不会新建。",en:"Type the title right in the grid. Enter saves, Esc cancels; nothing is created without a title."}});const ta=300,ea=300;function na({rootRef:r,onPasted:c}){const{t:i}=It(),o=w(m=>m.draft),f=Pt(m=>m.clip),x=qe==="mobile"||!!window.tangu?.mobile,$=w(m=>m.draftApi),I=Fe(),Y=He(m=>m.vaultRoot)??"",N=Xe(m=>m.byVault),[L,C]=p.useState(null),V=o?`${o.day}|${o.endDay}|${o.startMin}|${o.endMin}`:"",v=()=>{(!o?.title.trim()||window.confirm(i("calside.discard")))&&$?.cancel()};if(on(x&&o?{mode:"page",title:i("calside.newEvent"),back:i("calside.cancel"),onBack:v}:null),p.useLayoutEffect(()=>{if(!x||!o)return;const m=k=>{k.preventDefault(),k.detail?.probe||v()};return window.addEventListener("forsion:mobile-back",m),()=>window.removeEventListener("forsion:mobile-back",m)},[x,o]),p.useLayoutEffect(()=>{if(!V||x){C(null);return}const m=()=>{const k=document.querySelector(".amx-cal-draft-input")?.closest(".amx-cal-draft"),S=k?.closest(".amx-cal-tscroll, .amx-cal-mscroll")?.getBoundingClientRect(),_=k?.getBoundingClientRect();if(!_||!S||_.bottom<S.top||_.top>S.bottom||_.right<S.left||_.left>S.right){C(null);return}C(An({left:_.left,top:_.top,right:_.right,bottom:_.bottom,zoom:ot(k)||1},{w:ta,h:ea,maxRight:r.current?.getBoundingClientRect().right}))};return m(),window.addEventListener("scroll",m,!0),window.addEventListener("resize",m),()=>{window.removeEventListener("scroll",m,!0),window.removeEventListener("resize",m)}},[V,r]),!o||!L&&!x)return null;const j=I.filter(m=>!m.db.readonly),q=oe(I,o.dbPath,le(Y,N))?.db.path,F=xn(ye(o)),O=m=>{const k=w.getState().draft;k&&w.getState().setDraft({...k,dbPath:m})},H=m=>m.preventDefault();return l.jsxs("section",{className:`amx-cal-cardwrap amx-cal-draftcard${x?" amx-cal-drawer":""}`,"data-kb-rise":x?"bar":void 0,style:x?void 0:L,role:"dialog","aria-modal":"false","aria-label":i("calside.newEvent"),onMouseDown:x?void 0:H,onPointerDown:m=>m.stopPropagation(),children:[x?l.jsxs(l.Fragment,{children:[l.jsx("button",{className:"amx-cal-drawer-grab","aria-label":i("calside.cancel"),onClick:v,children:l.jsx("span",{})}),l.jsx("input",{className:"amx-cal-card-title",value:o.title,placeholder:i("calside.newEvent"),"aria-label":i("calside.newEvent"),onChange:m=>w.getState().setDraft({...o,title:m.target.value})}),l.jsx(vn,{value:ye(o),onChange:m=>{const k=we(m);if(!k)return;const S=K(k.start),_=k.end?K(k.end):B(S,30);w.getState().setDraft({...o,day:k.start.slice(0,10),endDay:(k.end??k.start).slice(0,10),startMin:k.allDay?null:S.getHours()*60+S.getMinutes(),endMin:k.allDay?0:(_.getTime()-K(k.start.slice(0,10)).getTime())/6e4})}})]}):l.jsx("div",{className:"amx-cal-draft-title",children:o.title||l.jsx("span",{className:"ph",children:i("calside.newEvent")})}),F&&l.jsxs("div",{className:"amx-cal-draft-time",children:[l.jsxs("span",{className:"amx-cal-card-timehead",children:[F.head,F.badge&&l.jsx("span",{className:"amx-cal-card-badge",children:F.badge})]}),F.date&&l.jsx("span",{className:"amx-cal-card-timesub",children:F.date})]}),l.jsx("div",{className:"amx-cal-draft-label",children:i("calside.calendar")}),l.jsx("div",{className:"amx-cal-draft-cals",children:j.map(m=>l.jsxs("button",{className:`amx-cal-draft-cal${m.db.path===q?" on":""}`,onMouseDown:H,onClick:()=>O(m.db.path),children:[l.jsx("i",{style:{background:be(Y,N,m.db.path,I.indexOf(m))}}),l.jsx("span",{children:m.db.name}),m.db.path===q&&l.jsx(Oe,{size:13})]},m.db.path))}),!x&&l.jsx("p",{className:"amx-cal-draft-hint",children:i("calside.hint")}),x&&f&&l.jsx("button",{onClick:()=>{if(o.title.trim()&&!window.confirm(i("calside.discard")))return;const m=nt();_e(q?I.find(k=>k.db.path===q)?.db:void 0,B(K(o.day),o.startMin??0)).then(k=>{k&&nt()===m&&w.getState().draft===o&&($?.cancel(),c?.(`${k.db.path}::${k.id}`))})},children:i("calside.paste")}),l.jsxs("div",{className:"amx-cal-draft-actions",children:[l.jsx("button",{className:"amx-cal-draft-cancel",onMouseDown:x?void 0:H,onClick:x?v:()=>$?.cancel(),children:i("calside.cancel")}),l.jsx("button",{className:"amx-cal-draft-save",disabled:!o.title.trim(),onMouseDown:H,onClick:()=>$?.commit(),children:i("calside.save")})]})]})}Gt({"calkeys.modeDay":{zh:"日",en:"Day"},"calkeys.modeWeek":{zh:"周",en:"Week"},"calkeys.mode3day":{zh:"3 日",en:"3 days"},"calkeys.modeMonth":{zh:"月",en:"Month"}});const Ke=[{id:"day",get label(){return st("calkeys.modeDay")},key:"d"},{id:"week",get label(){return st("calkeys.modeWeek")},key:"w"},{id:"3day",get label(){return st("calkeys.mode3day")},key:"3"},{id:"month",get label(){return st("calkeys.modeMonth")},key:"m"}];function aa(r){const c=(r.metaKey||r.ctrlKey)&&!r.altKey;if(c&&(r.shiftKey&&r.key.toLowerCase()==="z"||r.key.toLowerCase()==="y"))return{kind:"redo"};if(c&&!r.shiftKey&&(r.key==="z"||r.key==="Z"))return{kind:"undo"};if(c&&r.key.toLowerCase()==="x")return{kind:"cut"};if(c&&(r.key==="d"||r.key==="D"))return{kind:"duplicate"};if(c&&(r.key==="c"||r.key==="C"))return{kind:"copy"};if(c&&(r.key==="v"||r.key==="V"))return{kind:"paste"};if(r.metaKey||r.ctrlKey||r.altKey)return null;if(r.key==="ContextMenu"||r.shiftKey&&r.key==="F10")return{kind:"menu"};if(r.key==="Delete"||r.key==="Backspace")return{kind:"delete"};if(r.key==="ArrowLeft")return{kind:"prev"};if(r.key==="ArrowRight")return{kind:"next"};if(r.key==="Escape")return{kind:"escape"};if(r.key==="Enter")return{kind:"rename"};if(r.key==="c"||r.key==="C")return{kind:"new"};if(r.key==="t"||r.key==="T")return{kind:"today"};const i=Ke.find(o=>o.key===r.key.toLowerCase());return i?{kind:"mode",mode:i.id}:null}const Wt=r=>r.end?.getTime()??r.start.getTime()+3600*1e3;function ra(r){const c=[...r].sort((o,f)=>o.start.getTime()-f.start.getTime()||Wt(o)-Wt(f)),i=new Map;for(let o=0;o<c.length;){let f=o+1,x=Wt(c[o]);for(;f<c.length&&c[f].start.getTime()<x;)x=Math.max(x,Wt(c[f])),f+=1;const $=c.slice(o,f),I=[],Y=$.map(L=>{let C=I.findIndex(V=>V<=L.start.getTime());return C<0&&(C=I.length),I[C]=Wt(L),{ev:L,lane:C}}),N=Math.max(1,I.length);for(const{ev:L,lane:C}of Y)i.set(L.key,{lane:C,laneCount:N,leftPct:C/N*100,widthPct:100/N});o=f}return i}Gt({"calview.untitled":{zh:"未命名",en:"Untitled"},"calview.newEventTitle":{zh:"新事件",en:"New event"},"calview.newEvent":{zh:"新建事件",en:"New event"},"calview.today":{zh:"今天",en:"Today"},"calview.prevPage":{zh:"上一页",en:"Previous"},"calview.nextPage":{zh:"下一页",en:"Next"},"calview.weekNo":{zh:"第 {n} 周",en:"Week {n}"},"calview.zoomOut":{zh:"缩小时间轴",en:"Zoom out timeline"},"calview.zoomIn":{zh:"放大时间轴",en:"Zoom in timeline"},"calview.densityReset":{zh:"恢复默认密度",en:"Reset to default density"},"calview.weekStart":{zh:"一周开始于",en:"Week starts on"},"calview.weekStartAuto":{zh:"跟随语言({day})",en:"Match language ({day})"},"calview.sunday":{zh:"周日",en:"Sunday"},"calview.monday":{zh:"周一",en:"Monday"},"calview.empty":{zh:"还没有日历事件。单击时间格新建,按住拖出时长,或按 C。",en:"No calendar events yet. Click a time slot to add one, drag to set its length, or press C."},"calview.emptyNoDb":{zh:"还没有日历。在左栏「日历」右边点 +,选一个含日期属性的多维表。",en:'No calendars yet. Use + next to "Calendars" in the left panel to pick a database with a date property.'},"calview.allDay":{zh:"全天",en:"All-day"},"calview.a11yAllDayEvent":{zh:"{title},全天事件",en:"{title}, all-day event"},"calview.allDayDragHint":{zh:"{title}(可拖入时间格设为定时)",en:"{title} (drag into a time slot to schedule it)"},"calview.a11yEvent":{zh:"{title},{time}",en:"{title}, {time}"},"calview.a11yEventRange":{zh:"{title},{start} 至 {end}",en:"{title}, {start} to {end}"},"calview.a11yDone":{zh:"标记完成:{title}",en:"Mark done: {title}"},"calview.monthFirst":{zh:"{m}月1",en:"{m}/1"},"calview.moreItems":{zh:"还有 {n} 项",en:"{n} more"},"calview.viewOptions":{zh:"显示选项",en:"Display options"},"calview.a11yMoreEvents":{zh:"查看 {m} 月 {d} 日全部 {n} 个事件",en:"View all {n} events on {m}/{d}"},"calview.a11yDayEvents":{zh:"{m} 月 {d} 日事件",en:"Events on {m}/{d}"},"calview.dayHeading":{zh:"{m} 月 {d} 日",en:"{m}/{d}"},"calview.closeAgenda":{zh:"关闭日程列表",en:"Close agenda list"},"calview.resizeStart":{zh:"调整开始时间",en:"Adjust start time"},"calview.resizeEnd":{zh:"调整结束时间",en:"Adjust end time"}});const kt=26,Le=8.4,ge=34,Vt=150,Ae=40,P=!(qe==="mobile"||typeof window<"u"&&window.tangu?.mobile);function sa(r,c,i){const o=[];return r.forEach(({db:f,dateCol:x,checkboxCol:$},I)=>{if(Tn(c,i,f.path))return;const Y=be(c,i,f.path,I);for(const N of f.rows){const L=typeof N.cells[x]=="string"?N.cells[x]:"",C=we(L);C&&o.push({key:`${f.path}::${N.rowId}`,color:Y,db:f,row:N,colId:x,title:N.name,raw:L,start:K(C.start),end:C.end?K(C.end):null,allDay:C.allDay,readonly:!!f.readonly&&!f.writeCell||ve(f.columns.find(V=>V.id===x)?.type??""),check:$,done:$?N.cells[$]===!0:void 0})}}),o}const la=r=>P&&!!r.check&&r.allDay&&!r.end,et=r=>`${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`,xt=r=>`${String(Math.floor(r/60)).padStart(2,"0")}:${String(r%60).padStart(2,"0")}`,X=r=>Mt(r,!0),mt=r=>{const c=r.currentTarget,i=c.getBoundingClientRect();return{left:i.left,top:i.top,right:i.right,bottom:i.bottom,zoom:ot(c)||1}},Kt=(r,c,i)=>c?`${Mt(r,i)}/${Mt(c,i)}`:Mt(r,i),St=(r,c,i,o=r.allDay)=>ke(r.db,r.row,r.colId,r.raw,Kt(c,i,o),r.title),Nt=r=>({"--amx-event-color":r}),De=(r,c,i)=>{const o=G(i).getTime(),f=G(r).getTime()<o,x=G(c??r).getTime()>o;return`${f?" continues-left":""}${x?" continues-right":""}`};function xe(){const r=w.getState();r.draft&&(r.draft.title.trim()?r.draftApi?.commit():r.setDraft(null))}const Ze=r=>r.draft?`${r.draft.day}|${r.draft.endDay}|${r.draft.startMin}|${r.draft.endMin}`:"";function Ta({leafId:r}={}){const{t:c}=It(),i=wn(),o=Se(s=>s.pref),f=Fe(),x=bn(),$=kn(),I=Mn(),Y=Dn(),N=He(s=>s.vaultRoot)??"",L=Xe(s=>s.byVault),C=w(s=>s.mode),V=w(s=>s.setMode);cn(r,{modes:Ke.map(s=>({value:s.id,label:s.label,hotkey:s.key.toUpperCase()})),value:C,onChange:s=>V(s)});const v=w(s=>s.hourPx),j=w(s=>s.setHourPx),q=w(s=>s.jumpNonce),F=w(s=>s.selection),O=w(s=>!!s.draft),[H,m]=p.useState(null),[k,S]=p.useState(null),[_,T]=p.useState(!1),[vt,wt]=p.useState(null),[dt,ut]=p.useState(!1),[ct,A]=p.useState(!1),U=Pt(s=>s.clip),J=p.useRef(void 0),jt=p.useRef(null),at=p.useRef(null),Tt=p.useRef(null);p.useEffect(()=>{C!=="month"&&(Tt.current=null)},[C]);const pt=p.useRef(null),Q=p.useRef(null),tt=p.useRef(0);p.useEffect(()=>{if(!q)return;const s=w.getState().jumpDate;s&&at.current?.goto(K(s))},[q]),Cn();const ht=p.useMemo(()=>[...f.map(s=>({db:s.db,dateCol:s.dateCol,checkboxCol:s.checkboxCol})),...[...x,...$,...I,...Y].map(s=>({db:s,dateCol:En(s)?.id})).filter(s=>!!s.dateCol)],[f,x,$,I,Y]),W=p.useMemo(()=>sa(ht,N,L),[ht,N,L]),y=p.useRef(W);y.current=W;const d=p.useMemo(()=>W.map(s=>s.title?s:{...s,title:c("calview.untitled")}),[W,c]),M=H?.key??F?.key??null,z=M?W.find(s=>s.key===M)??null:null;pt.current=z;const rt=oe(f,null,le(N,L)),it=s=>{const u=oe(f,s,le(N,L));return u?be(N,L,u.db.path,f.indexOf(u)):"var(--accent)"},D=(s,u)=>{if(++tt.current,P)xe();else{if(w.getState().draft?.title.trim()&&!window.confirm(c("calside.discard")))return;w.getState().setDraft(null)}Q.current=null;const t=y.current.find(e=>e.key===s);t&&w.getState().setSelection({key:s,target:t}),S(null),T(!1),A(!1),J.current=void 0,m({key:s,at:u})},Z=s=>{const u=y.current.find(t=>t.key===s);if(!u){Q.current=s;return}if(w.getState().setSelection({key:s,target:u}),!P){const t=gt.current?.querySelector(`[data-key="${CSS.escape(s)}"]`);if(t){const e=t.getBoundingClientRect();T(!1),m({key:s,at:{left:e.left,top:e.top,right:e.right,bottom:e.bottom,zoom:ot(t)||1}})}}};p.useEffect(()=>{const s=w.getState();H&&!W.some(a=>a.key===H.key)&&(m(null),S(null));const u=Q.current;u&&W.some(a=>a.key===u)&&(Q.current=null,Z(u));const t=w.getState().selection;if(!t)return;const e=W.find(a=>a.key===t.key);e?e!==t.target&&s.setSelection({key:t.key,target:e}):s.setSelection(null)},[W]),p.useEffect(()=>(m(null),S(null),wt(null),_t(),w.getState().setSelection(null),()=>{_t()}),[N]);const yt=()=>{++tt.current;const s=w.getState(),u=!!s.draft||!!s.selection||!!H;if(P)xe();else if(s.draft){if(s.draft.title.trim()&&!window.confirm(c("calside.discard")))return!0;s.setDraft(null)}return s.selection&&s.setSelection(null),m(null),S(null),J.current=void 0,u},Dt=s=>{if(++tt.current,!rt)return;const u=w.getState();u.setSelection(null),m(null),J.current=B(K(s.day),s.startMin??0),u.setDraft({...s,title:"",dbPath:U&&f.some(t=>t.db.path===U.event.db.path)?U.event.db.path:null})},Lt=p.useRef(async()=>{});Lt.current=async()=>{const s=w.getState(),u=s.draft;if(!u)return;s.setDraft(null);const t=oe(f,u.dbPath,le(N,L));if(!t)return;const e=s.selection,a=tt.current,n=nt(),h=await $e(t.db,t.dateCol,ye(u),u.title.trim()||c("calview.newEventTitle"));he("calendar.event"),a===tt.current&&n===nt()&&!w.getState().draft&&w.getState().selection===e&&Z(`${t.db.path}::${h}`)},p.useEffect(()=>(w.getState().setDraftApi({commit:()=>{Lt.current()},cancel:()=>w.getState().setDraft(null)}),()=>{const u=w.getState();u.setDraftApi(null),u.setDraft(null),u.setSelection(null)}),[]);const Yt=async(s,u,t)=>{if(!rt)return;if(!P){const g=X(s);Dt({day:g,endDay:g,startMin:u,endMin:u===null?0:u+30});return}const{db:e,dateCol:a}=rt;let n;if(u===null)n=Mt(s,!0);else{const g=B(G(s),u);n=`${Mt(g,!1)}/${Mt(B(g,30),!1)}`}const h=await $e(e,a,n,c("calview.newEventTitle"));he("calendar.event"),m({key:`${e.path}::${h}`,at:t})},bt=()=>{const s=new Date,u=X(s);if(at.current?.today(),C==="month"){Dt({day:u,endDay:u,startMin:null,endMin:0});return}const[t,e]=ce(Math.ceil((s.getHours()*60+s.getMinutes())/15)*15,0,!0);Dt({day:u,endDay:u,startMin:t,endMin:e})},Bt=p.useRef(bt);Bt.current=bt;const Ct=p.useRef(yt);Ct.current=yt;const At=s=>{const u=pt.current;switch(S(null),gt.current?.focus({preventScroll:!0}),s){case"copy":u&&Pe(u);break;case"cut":u&&Pe(u,!0);break;case"clone":{const t=tt.current,e=nt();u&&Me(u).then(a=>{a&&t===tt.current&&e===nt()&&(m(null),Z(`${u.db.path}::${a}`))});break}case"paste":{const t=w.getState().draft;if(t?.title.trim()&&!window.confirm(c("calside.discard")))break;const e=tt.current,a=nt(),n=J.current??(t?B(K(t.day),t.startMin??0):void 0);_e(n?void 0:u?.db,n).then(h=>{!h||e!==tt.current||nt()!==a||w.getState().draft!==t||(w.getState().setDraft(null),m(null),Z(`${h.db.path}::${h.id}`))});break}case"delete":if(!u||u.db.readonly)break;Yn(u.db,u.row,u.title),w.getState().setSelection(null),m(null),U?.cut&&U.event.row.rowId===u.row.rowId&&U.event.db.path===u.db.path&&_t();break;case"undo":On();break;case"redo":Hn();break;case"summary":u&&navigator.clipboard?.writeText(`${u.title}
|
|
2
|
-
${u.raw}
|
|
3
|
-
${u.db.name}`).catch(()=>ft({level:"warning",text:c("calclip.failed")}));break}},Qt=p.useRef(At);Qt.current=At;const te=()=>{k?S(null):Ct.current()};p.useEffect(()=>{if(P||!H&&!k)return;const s=u=>{u.preventDefault(),u.detail?.probe||te()};return window.addEventListener("forsion:mobile-back",s),()=>window.removeEventListener("forsion:mobile-back",s)},[H,k]);const gt=p.useRef(null);p.useEffect(()=>{const s=u=>{const t=gt.current;if(!t||!t.getClientRects().length)return;const e=u.target;if(u.isComposing||e?.closest('[role="menu"]')||e&&e.closest("input, textarea, select, [contenteditable]"))return;const a=w.getState().sideEl,n=document.activeElement;if(n?.closest('[role="dialog"]')&&!n.closest(".amx-cal-cardcatch.calendar"))return;const h=!!n?.closest(".amx-calcfg");if(n&&n!==document.body&&!t.contains(n)&&!a?.contains(n)&&!h&&n.closest(".dv-react-part"))return;const g=aa(u);if(!g||h&&!["today","prev","next","mode"].includes(g.kind))return;const R=pt.current,E=w.getState();switch(g.kind){case"copy":case"cut":case"paste":case"duplicate":case"delete":case"undo":case"redo":Qt.current(g.kind==="duplicate"?"clone":g.kind);break;case"menu":{if(!R)return;const b=t.querySelector(`[data-key="${CSS.escape(R.key)}"]`)?.getBoundingClientRect();b&&S({x:b.left,y:b.bottom});break}case"new":if(!P)return;Bt.current();break;case"today":at.current?.today();break;case"rename":{if(e?.closest("button")&&!e.closest(".amx-cal-event, .amx-cal-chip-ev")||!R)return;if(A(!0),H)break;if(!E.selection)return;const b=t.querySelector(`[data-key="${CSS.escape(E.selection.key)}"]`)??t.querySelector(`.amx-cal-mcell[data-date="${X(R.start)}"], .amx-cal-daycol2[data-date="${X(R.start)}"]`);if(!b)return;const lt=b.getBoundingClientRect();m({key:E.selection.key,at:{left:lt.left,top:lt.top,right:lt.right,bottom:lt.bottom,zoom:ot(b)||1}}),E.setSelection(null);break}case"escape":if(Pt.getState().clip?.cut&&_t(),k){S(null);break}if(E.draft)E.setDraft(null);else if(E.selection||H)Ct.current();else return;break;case"prev":at.current?.prev();break;case"next":at.current?.next();break;case"mode":E.setMode(g.mode);break}u.preventDefault()};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[H,k]);const[de,ue]=p.useState(7);p.useLayoutEffect(()=>{const s=gt.current;if(!s)return;const u=()=>{if(!s.clientWidth)return;const e=s.clientWidth-52;ue(e>=588?7:e>=252?3:1)};u();const t=new ResizeObserver(u);return t.observe(s),()=>t.disconnect()},[]);const qt=Math.min(C==="week"?7:C==="3day"?3:1,de),Ft=s=>c(s===1?"calview.monday":"calview.sunday"),ee=[{value:"auto",label:c("calview.weekStartAuto",{day:Ft(zn())})},{value:0,label:Ft(0)},{value:1,label:Ft(1)}],Xt=(s,u)=>{const t=f.find(n=>n.db.path===s.dbPath),e=t?.db.rows.find(n=>n.rowId===s.rowId);if(!t||!e||t.db.readonly)return;const a=typeof e.cells[t.dateCol]=="string"?e.cells[t.dateCol]:"";ke(t.db,e,t.dateCol,a,u,e.name)},me=s=>s?l.jsx(Oe,{size:14}):l.jsx("span",{style:{display:"inline-block",width:14}}),ne={events:d,selectedKey:M,cutKey:U?.cut?`${U.event.db.path}::${U.event.row.rowId}`:null,onPick:D,canCreate:!!rt,onDismiss:yt,onDraft:Dt,colorOf:it,onTodoDrop:Xt,titleRef:jt,onGesture:s=>{ut(!!s),wt(u=>u?.key===s?.key&&u?.raw===s?.raw?u:s),s&&(w.getState().selection?.key!==s.key&&w.getState().setSelection({key:s.key,target:s}),T(!0))}};return l.jsxs("div",{className:`amx-cal${P?"":" mobile"}${!P&&(H||O)?` drawer-open${_&&H?" drawer-small":""}`:""}`,ref:gt,tabIndex:-1,"data-cut-key":U?.cut?`${U.event.db.path}::${U.event.row.rowId}`:void 0,onContextMenu:s=>{if(s.target.closest(".amx-cal-cardwrap, input, textarea"))return;const u=s.target.closest("[data-key]"),t=y.current.find(a=>a.key===u?.dataset.key);if(t){s.preventDefault(),s.stopPropagation();const a=u.getBoundingClientRect();P?(w.getState().setSelection({key:t.key,target:t}),m(null),J.current=void 0):D(t.key,{left:a.left,top:a.top,right:a.right,bottom:a.bottom,zoom:ot(u)||1}),S({x:s.clientX,y:s.clientY});return}const e=s.target.closest("[data-date]");if(e?.dataset.date){s.preventDefault(),s.stopPropagation(),yt();const a=e.classList.contains("amx-cal-daycol2")?Math.max(0,Math.min(1425,Ht((s.clientY-e.getBoundingClientRect().top)/(ot(e)||1)/v*60))):0;J.current=B(K(e.dataset.date),a),S({x:s.clientX,y:s.clientY})}},children:[l.jsx(Ee,{children:l.jsxs("header",{className:"amx-cal-bar",children:[l.jsxs("div",{className:"amx-cal-nav",children:[l.jsx(dn,{leafId:r}),l.jsx("span",{className:"amx-cal-title",ref:jt})]}),l.jsxs("div",{className:"amx-cal-modes",children:[l.jsx(re,{size:"sm",variant:"secondary",label:c("calview.today"),onClick:()=>at.current?.today()}),l.jsx(re,{size:"sm",variant:"ghost",isIconOnly:!0,icon:l.jsx(Sn,{size:14}),label:c("calview.prevPage"),onClick:()=>at.current?.prev()}),l.jsx(re,{size:"sm",variant:"ghost",isIconOnly:!0,icon:l.jsx(un,{size:14}),label:c("calview.nextPage"),onClick:()=>at.current?.next()}),l.jsxs(Vn,{button:{label:c("calview.viewOptions"),isIconOnly:!0,icon:l.jsx(mn,{size:14}),variant:"ghost",size:"sm"},menuWidth:208,children:[C!=="month"&&l.jsx(se,{icon:l.jsx(_n,{size:14}),label:c("calview.zoomOut"),onClick:()=>j(v-8)}),C!=="month"&&l.jsx(se,{icon:l.jsx(Kn,{size:14}),label:c("calview.zoomIn"),onClick:()=>j(v+8)}),C!=="month"&&l.jsx(se,{icon:l.jsx(Zn,{size:14}),label:c("calview.densityReset"),endContent:`${v}px`,onClick:()=>j(Nn)}),C!=="month"&&l.jsx("div",{className:"amx-cal-menusep",role:"separator"}),l.jsx("div",{className:"amx-cal-menulabel",children:c("calview.weekStart")}),ee.map(s=>l.jsx(se,{icon:me(o===s.value),label:s.label,onClick:()=>Se.getState().setPref(s.value)},String(s.value)))]})]})]})}),d.length===0&&l.jsxs("div",{className:"amx-cal-empty",children:[c(rt?"calview.empty":"calview.emptyNoDb"),rt&&P&&l.jsx(Ee,{children:l.jsx(re,{size:"sm",variant:"secondary",label:c("calview.newEvent"),onClick:bt})})]}),C==="month"?l.jsx(ia,{ref:at,anchorRef:Tt,...ne,onCreate:(s,u)=>{Yt(s,null,u)}},`dow${i}`):l.jsx(ca,{ref:at,n:qt,weekStartDow:C==="week"&&qt===7?i:null,...ne,onCreate:(s,u,t)=>{Yt(s,u,t)}}),z&&H&&(!P||!dt)&&l.jsx(qn,{calendar:!0,focusTitle:ct,ev:vt??z,at:H.at,collapsed:!P&&_,onExpand:()=>T(!1),maxRight:gt.current?.getBoundingClientRect().right,onClose:te,onActions:s=>{const u=s.currentTarget.getBoundingClientRect();S({x:u.left,y:u.bottom}),T(!1)},actions:!P&&k?l.jsx(Ne,{at:k,mobile:!0,canCut:!z.readonly,writable:!z.db.readonly,note:z.db.isNoteView,hasClip:!!U,onRun:At,onClose:()=>S(null)}):void 0},z.key),k&&(P||!H)&&l.jsx(Ne,{at:k,mobile:!1,hasEvent:!!z,canCut:!z?.readonly,writable:!z?.db.readonly,note:!!z?.db.isNoteView,hasClip:!!U,onRun:At,onClose:()=>S(null)}),l.jsx(na,{rootRef:gt,onPasted:Z})]})}function Je({first:r=!0}){const{t:c}=It(),i=w(o=>o.draft?.title??"");return!r||!P?l.jsx("span",{className:"amx-cal-event-title",children:i||c("calview.newEventTitle")}):l.jsx("input",{className:"amx-cal-draft-input",autoFocus:!0,value:i,placeholder:c("calview.newEventTitle"),"aria-label":c("calview.newEventTitle"),onChange:o=>{const f=w.getState();f.draft&&f.setDraft({...f.draft,title:o.target.value})},onKeyDown:o=>{if(!o.nativeEvent.isComposing)if(o.key==="Enter"){o.preventDefault();const f=w.getState();f.draft?.title.trim()?f.draftApi?.commit():f.setDraft(null)}else o.key==="Escape"&&(o.preventDefault(),w.getState().setDraft(null))},onBlur:o=>{o.relatedTarget instanceof Element&&o.relatedTarget.closest(".amx-cal-draftcard")||document.hasFocus()&&xe()}})}const Ge={onPointerDown:r=>r.stopPropagation(),onMouseDown:r=>{r.target instanceof HTMLInputElement||r.preventDefault()}};function Qe({day:r,colorOf:c}){const i=w(o=>o.draft);return i?l.jsxs("div",{className:`amx-cal-chip-ev amx-cal-draft selected${De(K(i.day),K(i.endDay),r)}`,style:Nt(c(i.dbPath)),...Ge,children:[i.startMin!==null&&l.jsx("span",{className:"amx-cal-chip-t",children:xt(i.startMin)}),l.jsx(Je,{first:X(r)===i.day})]}):null}function oa({hourPx:r,colorOf:c}){const i=w(f=>f.draft);if(!i||i.startMin===null)return null;const o=(i.endMin-i.startMin)/60*r;return l.jsxs("div",{className:`amx-cal-event amx-cal-draft selected${o<ge?" short":""}`,style:{...Nt(c(i.dbPath)),top:i.startMin/60*r,height:Math.max(14,o),left:2,width:"calc(100% - 4px)"},...Ge,children:[l.jsx(Je,{}),l.jsx("span",{className:"amx-cal-event-t",children:o<ge?xt(i.startMin):`${xt(i.startMin)}–${xt(i.endMin)}`})]})}const ca=p.forwardRef(function({n:c,weekStartDow:i,events:o,selectedKey:f,cutKey:x,onPick:$,canCreate:I,onDismiss:Y,onDraft:N,colorOf:L,onTodoDrop:C,onCreate:V,titleRef:v,onGesture:j},q){const{t:F}=It(),O=p.useRef(null),H=p.useRef(null),[m,k]=p.useState(0),[S,_]=p.useState(0),T=w(t=>t.hourPx),vt=w(t=>t.setVisibleRange),wt=w(Ze),dt=wt?wt.split("|"):null,ut=()=>{H.current&&O.current&&(H.current.style.transform=`translateY(${-O.current.scrollTop}px)`)},ct=p.useMemo(()=>G(new Date),[]),A=p.useMemo(()=>{const t=$t(ct,-Vt);return Array.from({length:Vt*2+1},(e,a)=>$t(t,a))},[ct]),U=t=>i==null?t:Math.max(0,t-(A[t].getDay()-i+7)%7),J=p.useRef(Vt),jt=p.useRef(void 0),at=p.useRef(!1),Tt=p.useRef(""),pt=p.useRef(-1),Q=p.useRef(null),tt=p.useRef(null),ht=()=>{tt.current&&(tt.current.style.display="none")},W=p.useRef(null),y=p.useRef(null),[d,M]=p.useState(()=>{const t=new Date;return t.getHours()*60+t.getMinutes()});p.useEffect(()=>{const t=setInterval(()=>{const e=new Date;M(e.getHours()*60+e.getMinutes())},3e4);return()=>clearInterval(t)},[]),p.useEffect(()=>()=>vt(null,null),[vt]);const z=B(ct,d).getTime(),rt=()=>{const t=O.current;if(!t||!m)return;const e=Math.max(0,Math.min(A.length-c,Math.round(t.scrollLeft/m)));J.current=e;const a=A[e+Math.floor((c-1)/2)],n=We(a),h=F("calview.weekNo",{n:Rn(a)});n+h!==Tt.current&&(Tt.current=n+h,v.current&&(v.current.textContent=n,v.current.dataset.week=h)),e*8+c!==pt.current&&(pt.current=e*8+c,vt(X(A[e]),X(A[Math.min(A.length-1,e+c-1)])),t.querySelector(".amx-cal-allday2.lead")?.classList.remove("lead"),t.querySelector(`.amx-cal-allday2[data-date="${X(A[e])}"]`)?.classList.add("lead"))},it=()=>{const t=O.current,e=t?.clientWidth?t.querySelector(".amx-cal-daycol2"):null;e&&_(Math.max(0,e.offsetTop-(kt+14)))};p.useLayoutEffect(()=>{const t=O.current;if(!t)return;const e=c>=3?84:180,a=()=>{t.clientWidth&&(k(Math.max(e,t.clientWidth/c)),it())};a();const n=new ResizeObserver(a);return n.observe(t),()=>n.disconnect()},[c]),p.useLayoutEffect(it,[o,m,c,wt]),p.useLayoutEffect(()=>{const t=O.current;if(!(!t||!m)){if(!at.current){J.current=Vt,at.current=!0;const e=t.querySelector(".amx-cal-daycol2"),a=e?e.offsetTop:kt+14;t.scrollTop=Math.max(0,a+d/60*T-t.clientHeight/2)}jt.current!==i&&(jt.current=i,J.current=U(J.current)),t.scrollLeft=J.current*m,rt(),ut()}},[m,i]);const D=p.useRef(T);p.useLayoutEffect(()=>{const t=O.current,e=D.current;if(D.current=T,!t||e===T)return;const a=t.querySelector(".amx-cal-daycol2"),n=a?a.offsetTop:kt+14,h=t.clientHeight/2,g=(t.scrollTop+h-n)/e;t.scrollTop=Math.max(0,n+g*T-h),ut()},[T]),p.useEffect(()=>{const t=O.current;if(!t)return;const e=a=>{if(!a.ctrlKey&&!a.metaKey)return;a.preventDefault();const n=w.getState();n.setHourPx(n.hourPx*(a.deltaY<0?1.12:1/1.12))};return t.addEventListener("wheel",e,{passive:!1}),()=>t.removeEventListener("wheel",e)},[]),p.useImperativeHandle(q,()=>({prev:()=>O.current?.scrollBy({left:-c*m,behavior:"smooth"}),next:()=>O.current?.scrollBy({left:c*m,behavior:"smooth"}),today:()=>O.current?.scrollTo({left:U(Vt)*m,behavior:"smooth"}),goto:t=>{if(!m)return;const e=Math.min(A.length-c,U(Math.max(0,Math.min(A.length-1,Rt(G(t),A[0])))));O.current?.scrollTo({left:e*m,behavior:"smooth"})}}),[c,m,A,i]);const Z=kt+14+S,yt=(t,e=0)=>{const a=O.current,n=a.getBoundingClientRect(),h=ot(a)||1,g=Math.max(0,Math.min(A.length-1,Math.floor(((t.clientX-n.left)/h+a.scrollLeft)/m))),R=((t.clientY-n.top)/h-e+a.scrollTop-Z)/T*60;return{col:g,raw:R,min:Math.max(0,Math.min(1425,Math.floor(R/15)*15))}},Dt=(t,e,a)=>{if(e.stopPropagation(),bt(),t.readonly||e.button!==0||!P&&f!==t.key)return;ht();const n=e.currentTarget.closest(".amx-cal-event"),h=n.getBoundingClientRect(),g=ot(n)||1,R=(e.clientY-h.top)/g,E=Math.min(Le,h.height/g/4),b=a??(P&&f===t.key?R<E?"start":h.height/g-R<E?"end":"move":"move"),lt=ze(t.start,t.end,T),zt=Math.max(14,lt.height),Et=n.querySelector(".amx-cal-event-t");n.setPointerCapture(e.pointerId),W.current={mode:b,ev:t,el:n,tEl:Et,t0:Et?.textContent??"",pid:e.pointerId,x0:e.clientX,y0:e.clientY,zoom:g,top0:lt.top,h0:zt,grabOffY:R,durMin:t.end?(t.end.getTime()-t.start.getTime())/6e4:60,msDur:t.end?t.end.getTime()-t.start.getTime():0,col0:Rt(G(t.start),A[0]),min0:t.start.getHours()*60+t.start.getMinutes(),dup:P&&b==="move"&&e.altKey&&!t.db.readonly,shadow:null,dyMin:0,moved:!1,target:null}},Lt=t=>{const e=W.current;if(!e||t.pointerId!==e.pid){if(P&&t.currentTarget.classList.contains("selected")){const E=t.currentTarget,b=E.getBoundingClientRect(),lt=(t.clientY-b.top)/(ot(E)||1),zt=Math.min(Le,b.height/(ot(E)||1)/4);E.style.cursor=lt<zt||b.height/(ot(E)||1)-lt<zt?"ns-resize":"grab"}return}if(e.last=t,t.pointerType==="mouse"&&t.buttons===0){Yt(e.ev,t);return}if(e.mode==="move"){if(!e.moved&&Math.hypot(t.clientX-e.x0,t.clientY-e.y0)<=3||!m||!O.current)return;if(!e.moved){e.moved=!0,e.el.classList.add("dragging"),j?.(e.ev);const Ut=e.el.cloneNode(!0);Ut.classList.remove("dragging","selected"),Ut.classList.add(e.dup?"dup-src":"drag-shadow"),Ut.removeAttribute("aria-label"),e.el.parentElement?.insertBefore(Ut,e.el),e.shadow=Ut}const E=yt(t,e.grabOffY),b=Math.max(0,Math.min(1440-Math.min(e.durMin,1440),Ht(E.raw))),lt=b===Ht(e.min0)&&E.col===e.col0,zt=lt?e.min0:b;e.target=lt?null:{iso:X(A[E.col]),topMin:b},e.el.style.transform=`translate(${(E.col-e.col0)*m}px, ${(zt-e.min0)/60*T}px)`;const Et=B(A[E.col],zt);j?.({...e.ev,raw:Kt(Et,e.ev.end?new Date(Et.getTime()+e.msDur):null,!1)});const Ce=e.msDur?`${et(Et)}–${et(new Date(Et.getTime()+e.msDur))}`:et(Et);e.tEl&&(e.tEl.textContent=lt?e.t0:E.col!==e.col0?`${Te(A[E.col].getDay())} ${Ce}`:Ce);return}const a=Ht((t.clientY-e.y0)/e.zoom/T*60),h=((e.ev.end??B(e.ev.start,60)).getTime()-e.ev.start.getTime())/6e4,g=e.mode==="start"?Math.max(-e.min0,Math.min(h-15,a)):Math.max(15-h,a);if(!e.moved&&Math.abs(t.clientY-e.y0)<5)return;e.moved||(e.moved=!0,e.el.classList.add("dragging")),e.dyMin=g;const R=g/60*T;if(e.mode==="end"?e.el.style.height=`${Math.max(14,e.h0+R)}px`:(e.el.style.top=`${e.top0+R}px`,e.el.style.height=`${Math.max(14,e.h0-R)}px`),g!==0&&e.tEl){const E=e.ev.end??B(e.ev.start,60);if(e.mode==="end"){let b=B(E,g);b.getTime()<=e.ev.start.getTime()&&(b=B(e.ev.start,15)),e.tEl.textContent=`${et(e.ev.start)}–${et(b)} · ${ae(Math.round((b.getTime()-e.ev.start.getTime())/6e4))}`,j?.({...e.ev,raw:Kt(e.ev.start,b,!1)})}else{let b=B(e.ev.start,g);b.getTime()>=E.getTime()&&(b=B(E,-15)),e.tEl.textContent=`${et(b)}–${et(E)} · ${ae(Math.round((E.getTime()-b.getTime())/6e4))}`,j?.({...e.ev,raw:Kt(b,E,!1)})}}},Yt=(t,e)=>{const a=W.current;if(a&&e.pointerId!==a.pid||(W.current=null,!a))return;if(j?.(null),a.el.classList.remove("dragging"),a.mode==="move"){if(a.el.style.transform="",a.shadow?.remove(),!a.target){a.tEl&&(a.tEl.textContent=a.t0),a.moved||$(t.key,mt(e));return}const h=B(G(K(a.target.iso)),a.target.topMin),g=t.end?new Date(h.getTime()+a.msDur):null;if(a.tEl&&(a.tEl.textContent=a.t0),a.dup){const R=Kt(h,g,t.allDay);Me(t,R);return}St(t,h,g);return}if(a.el.style.top=`${a.top0}px`,a.el.style.height=`${a.h0}px`,a.dyMin===0){a.tEl&&(a.tEl.textContent=a.t0),a.moved||$(t.key,mt(e));return}const n=t.end??B(t.start,60);if(a.mode==="end"){let h=B(n,a.dyMin);h.getTime()<=t.start.getTime()&&(h=B(t.start,15)),St(t,t.start,h)}else{let h=B(t.start,a.dyMin);h.getTime()>=n.getTime()&&(h=B(n,-15)),St(t,h,n)}},bt=()=>{const t=W.current;W.current=null,t&&(j?.(null),t.el.classList.remove("dragging"),t.el.style.transform="",t.el.style.top=`${t.top0}px`,t.el.style.height=`${t.h0}px`,t.shadow?.remove(),t.tEl&&(t.tEl.textContent=t.t0))},Bt=p.useRef(Lt);Bt.current=Lt,p.useEffect(()=>{const t=a=>{(a.type==="blur"||a.key==="Escape")&&bt()},e=window.setInterval(()=>{const a=W.current,n=O.current;if(!a?.moved||!a.last||!n)return;const h=n.getBoundingClientRect(),g=a.last.clientX,R=a.last.clientY,E=g<h.left+24?-12:g>h.right-24?12:0,b=R<h.top+Z+24?-12:R>h.bottom-24?12:0;(E||b)&&(n.scrollBy(E,b),Bt.current(a.last))},32);return window.addEventListener("blur",t),window.addEventListener("keydown",t),()=>{clearInterval(e),window.removeEventListener("blur",t),window.removeEventListener("keydown",t),bt()}},[]);const Ct=p.useRef(null),At=(t,e)=>{if(e.stopPropagation(),e.button!==0||t.readonly||!P&&f!==t.key)return;const a=e.currentTarget.getBoundingClientRect(),n=Math.min(8,a.width/4);Ct.current={x:e.clientX,y:e.clientY,mode:f===t.key&&P?e.clientX-a.left<n?"start":a.right-e.clientX<n?"end":"move":"move"},e.currentTarget.setPointerCapture(e.pointerId)},Qt=(t,e)=>{const a=Ct.current;if(Ct.current=null,!a)return;if(Math.hypot(e.clientX-a.x,e.clientY-a.y)<5){$(t.key,mt(e));return}const n=document.elementFromPoint(e.clientX,e.clientY)?.closest(".amx-cal-allday2");if(n?.dataset.date){const R=K(n.dataset.date);if(a.mode==="start")St(t,R>(t.end??t.start)?t.end??t.start:R,t.end,!0);else if(a.mode==="end")St(t,t.start,R<t.start?t.start:R,!0);else{const E=Rt(R,t.start);St(t,Jt(t.start,E),t.end?Jt(t.end,E):null,!0)}return}const h=document.elementFromPoint(e.clientX,e.clientY)?.closest(".amx-cal-daycol2"),g=h?.getAttribute("data-date");if(h&&g){const R=h.getBoundingClientRect(),E=Math.max(0,Math.min(1410,Ht((e.clientY-R.top)/(ot(h)||1)/T*60))),b=B(G(K(g)),E);St(t,b,B(b,30),!1);return}$(t.key,mt(e))},te=t=>{const e=tt.current;if(!e)return;const a=t.target,n=w.getState();if(!P||!I||t.pointerType==="touch"||W.current||n.draft||n.selection||!m||!a.closest(".amx-cal-daycol2")||a.closest(".amx-cal-event, .amx-cal-draft")){ht();return}const h=yt(t),[g,R]=ce(h.min,h.min,!0);e.style.display="block",e.style.left=`${h.col*m+2}px`,e.style.width=`${m-4}px`,e.style.top=`${Z+g/60*T}px`,e.style.height=`${(R-g)/60*T}px`},gt=t=>t.moved?ce(Math.min(t.min,t.cur.min),Math.max(t.min,t.cur.min)+15,!1):ce(t.min,t.min,!0),de=t=>{if(!P||t.button!==0||t.pointerType==="touch")return;const e=t.target;if(e.closest(".amx-cal-event, .amx-cal-chip-ev, .amx-cal-draft"))return;const a=e.closest(".amx-cal-allday2")?"all":e.closest(".amx-cal-daycol2")?"time":null;if(!a||!m)return;ht();const n=Y();if(O.current?.closest(".amx-cal")?.focus({preventScroll:!0}),n||!I)return;t.preventDefault();const h=yt(t);t.currentTarget.setPointerCapture(t.pointerId),y.current={pid:t.pointerId,zone:a,col:h.col,min:h.min,cur:h,x0:t.clientX,y0:t.clientY,moved:!1}},ue=t=>{const e=y.current;if(!e){te(t);return}if(t.pointerId!==e.pid)return;if(t.pointerType==="mouse"&&t.buttons===0){qt();return}if(!e.moved&&Math.hypot(t.clientX-e.x0,t.clientY-e.y0)<4)return;e.moved=!0,e.cur=yt(t);const a=Q.current;if(a)if(a.style.display="block",e.zone==="time"){const[n,h]=gt(e);a.style.left=`${e.col*m+2}px`,a.style.width=`${m-4}px`,a.style.top=`${Z+n/60*T}px`,a.style.height=`${(h-n)/60*T}px`,a.textContent=`${xt(n)}–${xt(h)} · ${ae(h-n)}`}else{const n=Math.min(e.col,e.cur.col),h=Math.max(e.col,e.cur.col);a.style.left=`${n*m+4}px`,a.style.width=`${(h-n+1)*m-8}px`,a.style.top=`${kt+14+3}px`,a.style.height="20px",a.textContent=h>n?ae((h-n+1)*1440):""}},qt=t=>{const e=y.current;if(!(e&&t&&t.pointerId!==e.pid)&&(y.current=null,Q.current&&(Q.current.style.display="none"),!!e))if(e.zone==="time"){const[a,n]=gt(e);N({day:X(A[e.col]),endDay:X(A[e.col]),startMin:a,endMin:n})}else{const[a,n]=e.moved?[Math.min(e.col,e.cur.col),Math.max(e.col,e.cur.col)]:[e.col,e.col];N({day:X(A[a]),endDay:X(A[n]),startMin:null,endMin:0})}},Ft=()=>{y.current=null,Q.current&&(Q.current.style.display="none")},ee=t=>{const e=t.target,a=e.closest(".amx-cal-allday2")?"all":e.closest(".amx-cal-daycol2")?"time":null;if(!a||!m)return null;const n=yt(t),h=X(A[n.col]),g=Math.min(n.min,1410);return{zone:a,col:n.col,s:g,value:a==="all"?h:`${h}T${xt(g)}/${h}T${xt(g+30)}`}},Xt=()=>{Q.current&&(Q.current.style.display="none")},me=t=>{if(!C||!t.dataTransfer.types.includes(pe))return;t.preventDefault(),t.dataTransfer.dropEffect="move";const e=ee(t),a=Q.current;if(a){if(!e){Xt();return}a.style.display="block",a.style.left=`${e.col*m+(e.zone==="all"?4:2)}px`,a.style.width=`${m-(e.zone==="all"?8:4)}px`,a.style.top=`${e.zone==="all"?kt+14+3:Z+e.s/60*T}px`,a.style.height=e.zone==="all"?"20px":`${30/60*T}px`,a.textContent=e.zone==="all"?"":`${xt(e.s)}–${xt(e.s+30)}`}},ne=t=>{if(!C||!t.dataTransfer.types.includes(pe))return;t.preventDefault(),Xt();const e=ee(t);if(e)try{C(JSON.parse(t.dataTransfer.getData(pe)),e.value)}catch{}},s=p.useMemo(()=>{const t=o.filter(n=>n.allDay&&!la(n)).sort((n,h)=>+G(n.start)-+G(h.start)||+G(h.end??h.start)-+G(n.end??n.start)),e=[],a=new Map;for(const n of t){const h=+G(n.start);let g=e.findIndex(R=>R<h);g<0&&(g=e.length),e[g]=+G(n.end??n.start),a.set(n.key,g)}return{list:t,lane:a}},[o]),u=t=>!!dt&&dt[2]==="null"&&X(t)>=dt[0]&&X(t)<=dt[1];return l.jsxs("div",{className:"amx-cal-timerow",style:{"--amx-hour-px":`${T}px`},children:[l.jsx("div",{className:"amx-cal-gutterfixed",children:l.jsxs("div",{className:"amx-cal-gutterinner",children:[l.jsx("div",{className:"amx-cal-gcorner",style:{height:kt+14}}),l.jsx("div",{className:"amx-cal-gallday",style:{height:S},children:F("calview.allDay")}),l.jsxs("div",{className:"amx-cal-ghours",ref:H,children:[je.map(t=>l.jsx("div",{className:"amx-cal-hour",style:{height:T},children:t===0?"":`${t}:00`},t)),l.jsxs("span",{className:"amx-cal-nowlabel",style:{top:d/60*T},children:[String(Math.floor(d/60)).padStart(2,"0"),":",String(d%60).padStart(2,"0")]})]})]})}),l.jsx("div",{className:"amx-cal-tscroll",ref:O,onScroll:()=>{rt(),ut()},onPointerLeave:ht,children:l.jsxs("div",{className:"amx-cal-tgrid2",style:{gridTemplateColumns:`repeat(${A.length}, ${m}px)`,gridTemplateRows:`${kt+14}px auto ${je.length*T}px`},onPointerDown:de,onPointerMove:ue,onPointerUp:qt,onPointerCancel:Ft,onLostPointerCapture:()=>{y.current&&qt()},onDragOver:me,onDragLeave:t=>{t.relatedTarget instanceof Node&&t.currentTarget.contains(t.relatedTarget)||Xt()},onDrop:ne,children:[A.map(t=>l.jsxs("div",{className:`amx-cal-thead2${Ot(t,ct)?" today":""}`,children:[l.jsx("span",{className:"amx-cal-tdow",children:Te(t.getDay())}),l.jsxs("span",{className:"amx-cal-tdate",children:[t.getMonth()+1,"/",t.getDate()]})]},+t)),A.map(t=>{const e=s.list.filter(n=>Ue(n.start,n.end,t)),a=[];for(const n of e)a[s.lane.get(n.key)??0]=n;return l.jsxs("div",{className:"amx-cal-allday2","data-date":X(t),onClick:P?void 0:n=>{n.target.closest(".amx-cal-chip-ev")||Y()||V(t,null,mt(n))},children:[Array.from(a,(n,h)=>n?l.jsx("button",{"data-key":n.key,className:`amx-cal-chip-ev amx-cal-alldrag${n.readonly?" readonly":""}${x===n.key?" cut":""}${f===n.key?" selected":""}${+G(n.end??n.start)<+ct?" past":""}${De(n.start,n.end,t)}`,style:Nt(n.color),"aria-label":F("calview.a11yAllDayEvent",{title:n.title}),title:n.readonly?n.title:F("calview.allDayDragHint",{title:n.title}),onPointerDown:g=>At(n,g),onPointerUp:g=>Qt(n,g),onPointerCancel:()=>{Ct.current=null},onClick:g=>{(n.readonly||!P&&f!==n.key||g.detail===0)&&$(n.key,mt(g))},children:n.title},n.key):l.jsx("span",{className:"amx-cal-chip-gap"},`gap${h}`)),u(t)&&l.jsx(Qe,{day:t,colorOf:L})]},+t)}),A.map(t=>l.jsxs("div",{className:"amx-cal-daycol2","data-date":X(t),onClick:P?void 0:e=>{if(e.target.closest(".amx-cal-event")||Y())return;const a=e.currentTarget.getBoundingClientRect(),n=ot(e.currentTarget)||1,h=Math.max(0,Math.min(1410,Ht((e.clientY-a.top)/n/T*60)));V(t,h,{left:e.clientX,top:e.clientY,right:e.clientX,bottom:e.clientY,zoom:n})},children:[(()=>{const e=o.filter(n=>!n.allDay&&Ot(n.start,t)),a=ra(e);return e.map(n=>{const h=ze(n.start,n.end,T),g=a.get(n.key)??{leftPct:0,widthPct:100},R=h.height<ge,E=(n.end??n.start).getTime()<z;return l.jsxs("button",{"data-key":n.key,className:`amx-cal-event${n.readonly?" readonly":""}${x===n.key?" cut":""}${f===n.key?" selected":""}${R?" short":""}${E?" past":""}${n.check?" todo":""}${n.done?" done":""}`,style:{...Nt(n.color),top:h.top,height:Math.max(14,h.height),left:`calc(${g.leftPct}% + 2px)`,width:`calc(${g.widthPct}% - 4px)`},"aria-label":n.end?F("calview.a11yEventRange",{title:n.title,start:et(n.start),end:et(n.end)}):F("calview.a11yEvent",{title:n.title,time:et(n.start)}),title:n.title,onPointerDown:b=>Dt(n,b),onPointerMove:Lt,onPointerUp:b=>Yt(n,b),onPointerCancel:bt,onLostPointerCapture:bt,onClick:b=>{(n.readonly||!P&&f!==n.key||b.detail===0)&&$(n.key,mt(b))},children:[n.check&&l.jsx("span",{className:"amx-cal-event-check",role:"checkbox","aria-checked":!!n.done,"aria-label":F("calview.a11yDone",{title:n.title}),onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),n.db.readonly||(Be(n.db,n.row.rowId,n.check,n.done?void 0:!0),n.done||he("todo.done"))}}),l.jsx("span",{className:"amx-cal-event-title",children:n.title}),l.jsx("span",{className:"amx-cal-event-t",children:R||!n.end?et(n.start):`${et(n.start)}–${et(n.end)}`}),!P&&f===n.key&&!n.readonly&&m*g.widthPct/100>=88&&l.jsxs(l.Fragment,{children:[l.jsx("span",{className:"amx-cal-handle start","aria-label":F("calview.resizeStart"),onPointerDown:b=>Dt(n,b,"start")}),l.jsx("span",{className:"amx-cal-handle end","aria-label":F("calview.resizeEnd"),onPointerDown:b=>Dt(n,b,"end")})]})]},n.key)})})(),dt&&dt[2]!=="null"&&dt[0]===X(t)&&l.jsx(oa,{hourPx:T,colorOf:L}),l.jsx("div",{className:`amx-cal-nowline${Ot(t,ct)?" today":""}`,style:{top:d/60*T}})]},+t)),l.jsx("div",{className:"amx-cal-hoverslot",ref:tt}),l.jsx("div",{className:"amx-cal-making",ref:Q,style:Nt(L(null))})]})})]})}),ia=p.forwardRef(function({anchorRef:c,events:i,selectedKey:o,cutKey:f,onPick:x,canCreate:$,onDismiss:I,onDraft:Y,colorOf:N,onCreate:L,titleRef:C},V){const{t:v}=It(),j=p.useRef(null),[q,F]=p.useState(0),O=w(y=>y.setVisibleRange),H=w(Ze),m=H?H.split("|"):null,k=p.useMemo(()=>G(new Date),[]),S=p.useMemo(()=>{const y=$t(fe(k),-Ae*7);return Array.from({length:Ae*2+1},(d,M)=>$t(y,M*7))},[k]),_=p.useRef(!1),[T,vt]=p.useState(null),wt=p.useRef(""),dt=p.useRef(-1),ut=p.useRef(null);p.useEffect(()=>()=>O(null,null),[O]);const ct=(y,d)=>Math.round(Rt(fe(new Date(y,d,1)),S[0])/7),A=()=>{const y=j.current;if(!y||!q)return;const d=Math.max(0,Math.min(S.length-1,Math.round(y.scrollTop/q))),M=$t(S[d],3),z=We(M);if(c&&(c.current={y:M.getFullYear(),m:M.getMonth()}),z!==wt.current&&(wt.current=z,C.current&&(C.current.textContent=z,delete C.current.dataset.week)),d!==dt.current){dt.current=d;const rt=Math.max(1,Math.round(y.clientHeight/q)),it=S[Math.min(S.length-1,d+rt-1)];O(X(S[d]),X($t(it,6)))}};p.useLayoutEffect(()=>{const y=j.current;if(!y)return;const d=()=>{y.clientHeight&&F(Math.max(64,(y.clientHeight-kt)/6))};d();const M=new ResizeObserver(d);return M.observe(y),()=>M.disconnect()},[]),p.useLayoutEffect(()=>{const y=j.current;if(!y||!q||_.current)return;_.current=!0;const d=c?.current;if(d){let M=Math.max(0,Math.min(S.length-1,ct(d.y,d.m)));$t(S[M],3).getMonth()!==d.m&&M+1<S.length&&(M+=1),y.scrollTop=M*q}else y.scrollTop=ct(k.getFullYear(),k.getMonth())*q;A()},[q]),p.useImperativeHandle(V,()=>({prev:()=>U(-1),next:()=>U(1),today:()=>j.current?.scrollTo({top:ct(k.getFullYear(),k.getMonth())*q,behavior:"smooth"}),goto:y=>{if(!q)return;const d=Math.max(0,Math.min(S.length-1,Math.round(Rt(fe(y),S[0])/7)));j.current?.scrollTo({top:d*q,behavior:"smooth"})}}),[q]);const U=y=>{const d=j.current;if(!d||!q)return;const M=Math.max(0,Math.min(S.length-1,Math.round(d.scrollTop/q))),z=$t(S[M],3);d.scrollTo({top:Math.max(0,ct(z.getFullYear(),z.getMonth()+y))*q,behavior:"smooth"})},J=p.useRef(null),jt=(y,d)=>{d.stopPropagation(),!(d.button!==0||y.readonly||!P&&o!==y.key)&&(J.current={x:d.clientX,y:d.clientY},d.currentTarget.setPointerCapture(d.pointerId))},at=(y,d)=>{const M=J.current;if(J.current=null,!M)return;const z=mt(d);if(Math.hypot(d.clientX-M.x,d.clientY-M.y)<5){x(y.key,z);return}if(y.readonly){x(y.key,z);return}const it=document.elementFromPoint(d.clientX,d.clientY)?.closest(".amx-cal-mcell")?.getAttribute("data-date");if(it){const D=Rt(K(it),y.start);if(D!==0){St(y,Jt(y.start,D),y.end?Jt(y.end,D):null);return}}x(y.key,z)},Tt=y=>document.elementFromPoint(y.clientX,y.clientY)?.closest(".amx-cal-mcell")?.getAttribute("data-date")??null,pt=(y,d)=>{j.current?.querySelectorAll(".amx-cal-mcell").forEach(M=>{const z=M.dataset.date??"";M.classList.toggle("making",!!y&&!!d&&z>=y&&z<=d)})},Q=y=>{if(!P||y.button!==0||y.pointerType==="touch")return;const d=y.target;if(d.closest(".amx-cal-chip-ev, .amx-cal-more, .amx-cal-draft"))return;const M=d.closest(".amx-cal-mcell")?.getAttribute("data-date");if(!M)return;const z=I();j.current?.closest(".amx-cal")?.focus({preventScroll:!0}),!(z||!$)&&(y.preventDefault(),y.currentTarget.setPointerCapture(y.pointerId),ut.current={pid:y.pointerId,a:M,b:M,moved:!1})},tt=y=>{const d=ut.current;if(!d||y.pointerId!==d.pid)return;if(y.pointerType==="mouse"&&y.buttons===0){ht();return}const M=Tt(y);!M||M===d.b||(d.b=M,d.moved=!0,pt(d.a<M?d.a:M,d.a<M?M:d.a))},ht=y=>{const d=ut.current;if(d&&y&&y.pointerId!==d.pid||(ut.current=null,!d))return;d.moved&&pt(null,null);const[M,z]=d.a<d.b?[d.a,d.b]:[d.b,d.a];Y({day:M,endDay:z,startMin:null,endMin:0})},W=()=>{ut.current?.moved&&pt(null,null),ut.current=null};return l.jsxs("div",{className:"amx-cal-mscroll",ref:j,onScroll:A,children:[l.jsx("div",{className:"amx-cal-weekhead2",children:$n().map(y=>l.jsx("div",{children:y},y))}),l.jsx("div",{className:"amx-cal-mweeks",onPointerDown:Q,onPointerMove:tt,onPointerUp:ht,onPointerCancel:W,children:S.map(y=>l.jsx("div",{className:"amx-cal-mweek",style:{height:q},children:jn(y,7).map(d=>{const M=X(d),z=i.filter(D=>Ue(D.start,D.end,d)),rt=!!m&&M>=m[0]&&M<=m[1],it=rt?2:3;return l.jsxs("div",{className:`amx-cal-mcell${Ot(d,k)?" today":""}`,"data-date":M,onClick:P?void 0:D=>{D.target.closest(".amx-cal-chip-ev")||I()||L(d,{left:D.clientX,top:D.clientY,right:D.clientX,bottom:D.clientY,zoom:ot(D.currentTarget)||1})},children:[l.jsx("div",{className:"amx-cal-mnum",children:d.getDate()===1?v("calview.monthFirst",{m:d.getMonth()+1}):d.getDate()}),rt&&l.jsx(Qe,{day:d,colorOf:N}),z.slice(0,it).map(D=>l.jsxs("button",{"data-key":D.key,className:`amx-cal-chip-ev${D.readonly?" readonly":""}${o===D.key?" selected":""}${De(D.start,D.end,d)}`,style:Nt(D.color),title:D.title,"aria-label":!D.allDay&&Ot(D.start,d)?v("calview.a11yEvent",{title:D.title,time:et(D.start)}):D.title,onPointerDown:Z=>jt(D,Z),onPointerUp:Z=>at(D,Z),onPointerCancel:()=>{J.current=null},onClick:Z=>{(D.readonly||!P&&o!==D.key||Z.detail===0)&&x(D.key,mt(Z))},children:[!D.allDay&&Ot(D.start,d)&&l.jsx("span",{className:"amx-cal-chip-t",children:et(D.start)})," ",D.title]},D.key)),z.length>it&&l.jsx("button",{className:"amx-cal-more","aria-label":v("calview.a11yMoreEvents",{m:d.getMonth()+1,d:d.getDate(),n:z.length}),onClick:D=>vt({day:d,events:z,at:mt(D)}),children:v("calview.moreItems",{n:z.length-it})})]},+d)})},+y))}),T&&l.jsx(da,{day:T.day,events:T.events,at:T.at,onPick:(y,d)=>{vt(null),x(y,d)},onClose:()=>vt(null)})]})});function da({day:r,events:c,at:i,onPick:o,onClose:f}){const{t:x}=It(),$=292,I=i.zoom||1,Y=12*I,N=Math.max(Y,Math.min(i.left,window.innerWidth-$*I-Y))/I,L=Math.max(Y,Math.min(i.bottom+6*I,window.innerHeight-356*I-Y))/I,C=p.useRef(null),V=p.useRef(f);return V.current=f,p.useEffect(()=>{const v=document.activeElement instanceof HTMLElement?document.activeElement:null;C.current?.querySelector(".amx-cal-agenda-list > button")?.focus();const j=q=>{q.key==="Escape"&&(q.preventDefault(),V.current())};return window.addEventListener("keydown",j),()=>{window.removeEventListener("keydown",j),v?.focus()}},[]),l.jsx("div",{className:"amx-cal-agenda-overlay",onMouseDown:f,children:l.jsxs("section",{className:"amx-cal-agenda",ref:C,role:"dialog","aria-modal":"true","aria-label":x("calview.a11yDayEvents",{m:r.getMonth()+1,d:r.getDate()}),style:{left:N,top:L,width:$},onMouseDown:v=>v.stopPropagation(),children:[l.jsxs("header",{children:[l.jsx("strong",{children:x("calview.dayHeading",{m:r.getMonth()+1,d:r.getDate()})}),l.jsx("button",{onClick:f,"aria-label":x("calview.closeAgenda"),children:"×"})]}),l.jsx("div",{className:"amx-cal-agenda-list",children:c.map(v=>l.jsxs("button",{style:Nt(v.color),onClick:j=>o(v.key,mt(j)),children:[l.jsx("span",{className:"amx-cal-agenda-time",children:v.allDay?x("calview.allDay"):et(v.start)}),l.jsx("span",{children:v.title})]},v.key))})]})})}export{Ta as CalendarView,ia as MonthScroll};
|