@rubytech/create-sitedesk-code 0.1.517 → 0.1.519

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.
Files changed (243) hide show
  1. package/dist/__tests__/edge-bind-template-wiring.test.js +37 -0
  2. package/dist/__tests__/samba-provision.test.js +103 -1
  3. package/dist/__tests__/tier-flag.test.js +10 -6
  4. package/dist/index.js +20 -5
  5. package/dist/samba-provision.js +72 -0
  6. package/dist/tier-flag.js +10 -5
  7. package/package.json +1 -1
  8. package/payload/platform/lib/entitlement/dist/index.d.ts +24 -0
  9. package/payload/platform/lib/entitlement/dist/index.d.ts.map +1 -1
  10. package/payload/platform/lib/entitlement/dist/index.js +40 -2
  11. package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
  12. package/payload/platform/plugins/admin/mcp/dist/index.js +5 -9
  13. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  14. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +1 -1
  15. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +261 -8
  16. package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +12 -0
  17. package/payload/platform/plugins/docs/references/admin-ui.md +44 -6
  18. package/payload/platform/plugins/docs/references/samba.md +2 -0
  19. package/payload/platform/plugins/whatsapp/references/channels-whatsapp.md +7 -3
  20. package/payload/platform/scripts/check-no-esm-require.mjs +5 -3
  21. package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
  22. package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
  23. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +16 -1
  24. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  25. package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.d.ts.map +1 -1
  26. package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js +15 -0
  27. package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js.map +1 -1
  28. package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.d.ts.map +1 -1
  29. package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.js +5 -3
  30. package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.js.map +1 -1
  31. package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
  32. package/payload/platform/services/telegram-channel/dist/instructions.js +13 -10
  33. package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
  34. package/payload/platform/services/webchat-channel/dist/instructions.d.ts +6 -2
  35. package/payload/platform/services/webchat-channel/dist/instructions.d.ts.map +1 -1
  36. package/payload/platform/services/webchat-channel/dist/instructions.js +66 -32
  37. package/payload/platform/services/webchat-channel/dist/instructions.js.map +1 -1
  38. package/payload/platform/services/webchat-channel/dist/notification.d.ts +2 -1
  39. package/payload/platform/services/webchat-channel/dist/notification.d.ts.map +1 -1
  40. package/payload/platform/services/webchat-channel/dist/notification.js +11 -4
  41. package/payload/platform/services/webchat-channel/dist/notification.js.map +1 -1
  42. package/payload/platform/services/webchat-channel/dist/server.d.ts.map +1 -1
  43. package/payload/platform/services/webchat-channel/dist/server.js +30 -14
  44. package/payload/platform/services/webchat-channel/dist/server.js.map +1 -1
  45. package/payload/platform/services/webchat-channel/dist/turn-follow.d.ts.map +1 -1
  46. package/payload/platform/services/webchat-channel/dist/turn-follow.js +11 -5
  47. package/payload/platform/services/webchat-channel/dist/turn-follow.js.map +1 -1
  48. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts +18 -4
  49. package/payload/platform/services/whatsapp-channel/dist/notification.d.ts.map +1 -1
  50. package/payload/platform/services/whatsapp-channel/dist/notification.js +19 -7
  51. package/payload/platform/services/whatsapp-channel/dist/notification.js.map +1 -1
  52. package/payload/platform/services/whatsapp-channel/dist/server.d.ts.map +1 -1
  53. package/payload/platform/services/whatsapp-channel/dist/server.js +23 -3
  54. package/payload/platform/services/whatsapp-channel/dist/server.js.map +1 -1
  55. package/payload/platform/services/whatsapp-channel/dist/targets.d.ts.map +1 -1
  56. package/payload/platform/services/whatsapp-channel/dist/targets.js +8 -2
  57. package/payload/platform/services/whatsapp-channel/dist/targets.js.map +1 -1
  58. package/payload/platform/templates/systemd/edge.service.template +1 -1
  59. package/payload/server/chunk-PXNY2TAP.js +1980 -0
  60. package/payload/server/chunk-TIIWMF5G.js +4837 -0
  61. package/payload/server/{chunk-S6HYTIU3.js → chunk-UX2FRNO7.js} +72 -2031
  62. package/payload/server/manager-B6OFOXSW.js +61 -0
  63. package/payload/server/maxy-edge.js +5 -3
  64. package/payload/server/package.json +2 -1
  65. package/payload/server/public/activity.html +5 -5
  66. package/payload/server/public/agents.html +4 -4
  67. package/payload/server/public/assets/{AdminLoginScreens-B5qKb3YK.js → AdminLoginScreens-BZPbCk8g.js} +1 -1
  68. package/payload/server/public/assets/AdminLoginScreens-BZPbCk8g.js.br +0 -0
  69. package/payload/server/public/assets/AdminLoginScreens-BZPbCk8g.js.gz +0 -0
  70. package/payload/server/public/assets/AdminShell-Bpo_wgxm.js +2 -0
  71. package/payload/server/public/assets/AdminShell-Bpo_wgxm.js.br +0 -0
  72. package/payload/server/public/assets/AdminShell-Bpo_wgxm.js.gz +0 -0
  73. package/payload/server/public/assets/{activity-DmnVUDYO.js → activity-DOsfKzT3.js} +1 -1
  74. package/payload/server/public/assets/activity-DOsfKzT3.js.br +0 -0
  75. package/payload/server/public/assets/activity-DOsfKzT3.js.gz +0 -0
  76. package/payload/server/public/assets/admin-COgD1z5a.js +1 -0
  77. package/payload/server/public/assets/admin-COgD1z5a.js.br +0 -0
  78. package/payload/server/public/assets/admin-COgD1z5a.js.gz +0 -0
  79. package/payload/server/public/assets/{agents-Bmq9X7P3.js → agents-DqDnZTH_.js} +1 -1
  80. package/payload/server/public/assets/agents-DqDnZTH_.js.br +0 -0
  81. package/payload/server/public/assets/agents-DqDnZTH_.js.gz +0 -0
  82. package/payload/server/public/assets/{browser-B1G-W80B.js → browser-FL17Dfp0.js} +1 -1
  83. package/payload/server/public/assets/browser-FL17Dfp0.js.br +0 -0
  84. package/payload/server/public/assets/browser-FL17Dfp0.js.gz +0 -0
  85. package/payload/server/public/assets/calendar-CLfLvsnV.js +1 -0
  86. package/payload/server/public/assets/calendar-CLfLvsnV.js.br +0 -0
  87. package/payload/server/public/assets/calendar-CLfLvsnV.js.gz +0 -0
  88. package/payload/server/public/assets/chat-DYq4FxMG.js +1 -0
  89. package/payload/server/public/assets/chat-DYq4FxMG.js.br +0 -0
  90. package/payload/server/public/assets/chat-DYq4FxMG.js.gz +0 -0
  91. package/payload/server/public/assets/chevron-left-DWt5cdUo.js +1 -0
  92. package/payload/server/public/assets/chevron-right-B9suVrYy.js +1 -0
  93. package/payload/server/public/assets/chevron-right-B9suVrYy.js.br +0 -0
  94. package/payload/server/public/assets/clock-DW6qVXtv.js +1 -0
  95. package/payload/server/public/assets/clock-DW6qVXtv.js.br +0 -0
  96. package/payload/server/public/assets/clock-DW6qVXtv.js.gz +0 -0
  97. package/payload/server/public/assets/data-C8rbOgds.js +1 -0
  98. package/payload/server/public/assets/data-C8rbOgds.js.br +0 -0
  99. package/payload/server/public/assets/data-C8rbOgds.js.gz +0 -0
  100. package/payload/server/public/assets/{file-text-BVqqaDun.js → file-text-DNm0AzUz.js} +1 -1
  101. package/payload/server/public/assets/file-text-DNm0AzUz.js.br +0 -0
  102. package/payload/server/public/assets/file-text-DNm0AzUz.js.gz +0 -0
  103. package/payload/server/public/assets/{graph-CEcME0lp.js → graph-fAvmlVzh.js} +3 -3
  104. package/payload/server/public/assets/graph-fAvmlVzh.js.br +0 -0
  105. package/payload/server/public/assets/graph-fAvmlVzh.js.gz +0 -0
  106. package/payload/server/public/assets/{graph-labels-Zl32_AOH.js → graph-labels-CwdkCxfs.js} +1 -1
  107. package/payload/server/public/assets/graph-labels-CwdkCxfs.js.br +0 -0
  108. package/payload/server/public/assets/graph-labels-CwdkCxfs.js.gz +0 -0
  109. package/payload/server/public/assets/{maximize-2-rkkMyAhf.js → maximize-2-B6tAPhC2.js} +1 -1
  110. package/payload/server/public/assets/maximize-2-B6tAPhC2.js.br +0 -0
  111. package/payload/server/public/assets/maximize-2-B6tAPhC2.js.gz +0 -0
  112. package/payload/server/public/assets/operator-CTKvBVjk.js +1 -0
  113. package/payload/server/public/assets/operator-CTKvBVjk.js.br +0 -0
  114. package/payload/server/public/assets/operator-CTKvBVjk.js.gz +0 -0
  115. package/payload/server/public/assets/page-BWoNW3sa.js +32 -0
  116. package/payload/server/public/assets/page-BWoNW3sa.js.br +0 -0
  117. package/payload/server/public/assets/page-BWoNW3sa.js.gz +0 -0
  118. package/payload/server/public/assets/page-O5HkHQw4.js +1 -0
  119. package/payload/server/public/assets/page-O5HkHQw4.js.br +0 -0
  120. package/payload/server/public/assets/page-O5HkHQw4.js.gz +0 -0
  121. package/payload/server/public/assets/{public-Cqgfmo1D.js → public-BF1rnVPa.js} +1 -1
  122. package/payload/server/public/assets/public-BF1rnVPa.js.br +0 -0
  123. package/payload/server/public/assets/public-BF1rnVPa.js.gz +0 -0
  124. package/payload/server/public/assets/{rotate-ccw-O3RmqoTy.js → rotate-ccw-B8TqfCy4.js} +1 -1
  125. package/payload/server/public/assets/rotate-ccw-B8TqfCy4.js.br +0 -0
  126. package/payload/server/public/assets/rotate-ccw-B8TqfCy4.js.gz +0 -0
  127. package/payload/server/public/assets/{routines-DMYObMUy.js → routines-4R7BLZyH.js} +1 -1
  128. package/payload/server/public/assets/routines-4R7BLZyH.js.br +0 -0
  129. package/payload/server/public/assets/routines-4R7BLZyH.js.gz +0 -0
  130. package/payload/server/public/assets/{skills-DON1BKu5.js → skills-CQ9Qs2tg.js} +1 -1
  131. package/payload/server/public/assets/skills-CQ9Qs2tg.js.br +0 -0
  132. package/payload/server/public/assets/skills-CQ9Qs2tg.js.gz +0 -0
  133. package/payload/server/public/assets/tasks-DePyOrRk.js +1 -0
  134. package/payload/server/public/assets/tasks-DePyOrRk.js.br +0 -0
  135. package/payload/server/public/assets/tasks-DePyOrRk.js.gz +0 -0
  136. package/payload/server/public/assets/{time-entry-format-4zgmuQI0.js → time-entry-format-D9gtnG01.js} +1 -1
  137. package/payload/server/public/assets/time-entry-format-D9gtnG01.js.br +0 -0
  138. package/payload/server/public/assets/time-entry-format-D9gtnG01.js.gz +0 -0
  139. package/payload/server/public/assets/{triangle-alert-By5D7wuI.js → triangle-alert-DAtm2mLL.js} +1 -1
  140. package/payload/server/public/assets/triangle-alert-DAtm2mLL.js.br +0 -0
  141. package/payload/server/public/assets/triangle-alert-DAtm2mLL.js.gz +0 -0
  142. package/payload/server/public/assets/{useCopyFeedback-Dx0vtm9s.js → useCopyFeedback-uMJT-p6i.js} +1 -1
  143. package/payload/server/public/assets/useCopyFeedback-uMJT-p6i.js.br +0 -0
  144. package/payload/server/public/assets/useCopyFeedback-uMJT-p6i.js.gz +0 -0
  145. package/payload/server/public/assets/useSubAccountSwitcher-BufCPDDH.js +14 -0
  146. package/payload/server/public/assets/useSubAccountSwitcher-BufCPDDH.js.br +0 -0
  147. package/payload/server/public/assets/useSubAccountSwitcher-BufCPDDH.js.gz +0 -0
  148. package/payload/server/public/assets/useSubAccountSwitcher-iCzsV96x.css +1 -0
  149. package/payload/server/public/assets/useSubAccountSwitcher-iCzsV96x.css.br +0 -0
  150. package/payload/server/public/assets/useSubAccountSwitcher-iCzsV96x.css.gz +0 -0
  151. package/payload/server/public/assets/useVoiceRecorder-BFrPC-s7.js +2 -0
  152. package/payload/server/public/assets/useVoiceRecorder-BFrPC-s7.js.br +0 -0
  153. package/payload/server/public/assets/useVoiceRecorder-BFrPC-s7.js.gz +0 -0
  154. package/payload/server/public/assets/{wrench-CHfMwLza.js → wrench-CYgaN7K9.js} +1 -1
  155. package/payload/server/public/assets/wrench-CYgaN7K9.js.br +1 -0
  156. package/payload/server/public/assets/wrench-CYgaN7K9.js.gz +0 -0
  157. package/payload/server/public/browser.html +4 -4
  158. package/payload/server/public/calendar.html +7 -7
  159. package/payload/server/public/chat.html +13 -13
  160. package/payload/server/public/data.html +11 -11
  161. package/payload/server/public/graph.html +9 -9
  162. package/payload/server/public/index.html +14 -14
  163. package/payload/server/public/operator.html +14 -14
  164. package/payload/server/public/public.html +13 -13
  165. package/payload/server/public/routines.html +6 -6
  166. package/payload/server/public/skills.html +5 -5
  167. package/payload/server/public/tasks.html +6 -6
  168. package/payload/server/server.js +8156 -11969
  169. package/payload/server/public/assets/AdminLoginScreens-B5qKb3YK.js.br +0 -0
  170. package/payload/server/public/assets/AdminLoginScreens-B5qKb3YK.js.gz +0 -0
  171. package/payload/server/public/assets/AdminShell-BgJEq2zJ.js +0 -2
  172. package/payload/server/public/assets/AdminShell-BgJEq2zJ.js.br +0 -0
  173. package/payload/server/public/assets/AdminShell-BgJEq2zJ.js.gz +0 -0
  174. package/payload/server/public/assets/activity-DmnVUDYO.js.br +0 -0
  175. package/payload/server/public/assets/activity-DmnVUDYO.js.gz +0 -0
  176. package/payload/server/public/assets/admin-Dpge4OG9.js +0 -1
  177. package/payload/server/public/assets/admin-Dpge4OG9.js.br +0 -0
  178. package/payload/server/public/assets/admin-Dpge4OG9.js.gz +0 -0
  179. package/payload/server/public/assets/agents-Bmq9X7P3.js.br +0 -0
  180. package/payload/server/public/assets/agents-Bmq9X7P3.js.gz +0 -0
  181. package/payload/server/public/assets/browser-B1G-W80B.js.br +0 -0
  182. package/payload/server/public/assets/browser-B1G-W80B.js.gz +0 -0
  183. package/payload/server/public/assets/calendar-CHgrOFIN.js +0 -1
  184. package/payload/server/public/assets/calendar-CHgrOFIN.js.br +0 -0
  185. package/payload/server/public/assets/calendar-CHgrOFIN.js.gz +0 -0
  186. package/payload/server/public/assets/chat-CIwmmtwP.js +0 -1
  187. package/payload/server/public/assets/chat-CIwmmtwP.js.br +0 -0
  188. package/payload/server/public/assets/chat-CIwmmtwP.js.gz +0 -0
  189. package/payload/server/public/assets/chevron-left-EQjfaQ-n.js +0 -1
  190. package/payload/server/public/assets/chevron-left-EQjfaQ-n.js.br +0 -0
  191. package/payload/server/public/assets/chevron-right-Ct8jZUGP.js +0 -1
  192. package/payload/server/public/assets/chevron-right-Ct8jZUGP.js.br +0 -0
  193. package/payload/server/public/assets/clock-Cxz5ybck.js +0 -1
  194. package/payload/server/public/assets/clock-Cxz5ybck.js.br +0 -0
  195. package/payload/server/public/assets/clock-Cxz5ybck.js.gz +0 -0
  196. package/payload/server/public/assets/data-BQVXKVsJ.js +0 -1
  197. package/payload/server/public/assets/data-BQVXKVsJ.js.br +0 -1
  198. package/payload/server/public/assets/data-BQVXKVsJ.js.gz +0 -0
  199. package/payload/server/public/assets/file-text-BVqqaDun.js.br +0 -0
  200. package/payload/server/public/assets/file-text-BVqqaDun.js.gz +0 -0
  201. package/payload/server/public/assets/graph-CEcME0lp.js.br +0 -0
  202. package/payload/server/public/assets/graph-CEcME0lp.js.gz +0 -0
  203. package/payload/server/public/assets/graph-labels-Zl32_AOH.js.br +0 -0
  204. package/payload/server/public/assets/graph-labels-Zl32_AOH.js.gz +0 -0
  205. package/payload/server/public/assets/maximize-2-rkkMyAhf.js.br +0 -0
  206. package/payload/server/public/assets/maximize-2-rkkMyAhf.js.gz +0 -0
  207. package/payload/server/public/assets/operator-DlL023ch.js +0 -1
  208. package/payload/server/public/assets/operator-DlL023ch.js.br +0 -0
  209. package/payload/server/public/assets/operator-DlL023ch.js.gz +0 -0
  210. package/payload/server/public/assets/page-BAmYYqxp.js +0 -1
  211. package/payload/server/public/assets/page-BAmYYqxp.js.br +0 -0
  212. package/payload/server/public/assets/page-BAmYYqxp.js.gz +0 -0
  213. package/payload/server/public/assets/page-k0BhBkA2.js +0 -32
  214. package/payload/server/public/assets/page-k0BhBkA2.js.br +0 -0
  215. package/payload/server/public/assets/page-k0BhBkA2.js.gz +0 -0
  216. package/payload/server/public/assets/public-Cqgfmo1D.js.br +0 -0
  217. package/payload/server/public/assets/public-Cqgfmo1D.js.gz +0 -0
  218. package/payload/server/public/assets/rotate-ccw-O3RmqoTy.js.br +0 -0
  219. package/payload/server/public/assets/rotate-ccw-O3RmqoTy.js.gz +0 -0
  220. package/payload/server/public/assets/routines-DMYObMUy.js.br +0 -0
  221. package/payload/server/public/assets/routines-DMYObMUy.js.gz +0 -0
  222. package/payload/server/public/assets/skills-DON1BKu5.js.br +0 -0
  223. package/payload/server/public/assets/skills-DON1BKu5.js.gz +0 -0
  224. package/payload/server/public/assets/tasks-C2PhUSrf.js +0 -1
  225. package/payload/server/public/assets/tasks-C2PhUSrf.js.br +0 -0
  226. package/payload/server/public/assets/tasks-C2PhUSrf.js.gz +0 -0
  227. package/payload/server/public/assets/time-entry-format-4zgmuQI0.js.br +0 -0
  228. package/payload/server/public/assets/time-entry-format-4zgmuQI0.js.gz +0 -0
  229. package/payload/server/public/assets/triangle-alert-By5D7wuI.js.br +0 -0
  230. package/payload/server/public/assets/triangle-alert-By5D7wuI.js.gz +0 -0
  231. package/payload/server/public/assets/useCopyFeedback-Dx0vtm9s.js.br +0 -0
  232. package/payload/server/public/assets/useCopyFeedback-Dx0vtm9s.js.gz +0 -0
  233. package/payload/server/public/assets/useSubAccountSwitcher-CRWoQXuU.js +0 -9
  234. package/payload/server/public/assets/useSubAccountSwitcher-CRWoQXuU.js.br +0 -0
  235. package/payload/server/public/assets/useSubAccountSwitcher-CRWoQXuU.js.gz +0 -0
  236. package/payload/server/public/assets/useSubAccountSwitcher-UQQDcj0B.css +0 -1
  237. package/payload/server/public/assets/useSubAccountSwitcher-UQQDcj0B.css.br +0 -0
  238. package/payload/server/public/assets/useSubAccountSwitcher-UQQDcj0B.css.gz +0 -0
  239. package/payload/server/public/assets/useVoiceRecorder-BgwOCCwj.js +0 -2
  240. package/payload/server/public/assets/useVoiceRecorder-BgwOCCwj.js.br +0 -0
  241. package/payload/server/public/assets/useVoiceRecorder-BgwOCCwj.js.gz +0 -0
  242. package/payload/server/public/assets/wrench-CHfMwLza.js.br +0 -0
  243. package/payload/server/public/assets/wrench-CHfMwLza.js.gz +0 -0
@@ -1 +0,0 @@
1
- import{o as e}from"./chunk-CltuBf4Z.js";import{B as t,F as n,K as r,S as i,U as a,W as o,g as s,j as c,p as l,v as u}from"./useSubAccountSwitcher-CRWoQXuU.js";import{T as d,t as f}from"./AdminShell-BgJEq2zJ.js";import{n as p,t as m}from"./time-entry-format-4zgmuQI0.js";import{t as h}from"./rotate-ccw-O3RmqoTy.js";var g=o(),_=e(r(),1);function v(e=3e4){let[t,n]=(0,_.useState)(()=>Date.now());return(0,_.useEffect)(()=>{let t=setInterval(()=>n(Date.now()),e);return()=>clearInterval(t)},[e]),t}function y(e,t){let n=new Map,r=(e,t,r)=>{let i=n.get(e)??{openCount:0,totalSeconds:0};i.totalSeconds+=t,r&&(i.openCount+=1),n.set(e,i)};for(let t of e)t.clientName&&r(t.clientName,t.secondsLogged,!0);for(let e of t)e.clientName&&r(e.clientName,e.secondsLogged,!1);let i=[...n.entries()].map(([e,t])=>({name:e,openCount:t.openCount,totalSeconds:t.totalSeconds}));return i.sort((e,t)=>t.openCount-e.openCount||e.name.localeCompare(t.name)),b(e,i),i}function b(e,t){let n=t.reduce((e,t)=>e+t.openCount,0),r=e.filter(e=>!e.clientName).length,i=n+r===e.length;return i||console.warn(`[tasks-clients] reconcile-mismatch assigned=${n} unassigned=${r} openTotal=${e.length}`),i}var x=`__unassigned__`;function S(e,t){return e===`__unassigned__`?`Unassigned`:t||e.slice(0,8)}function C(e){return e===null||e===``?x:e}function w(e,t){let n=new Map,r=(e,t)=>{let r=C(e.assigneeUserId),i=n.get(r)??{name:null,openCount:0,totalCount:0};i.name===null&&e.assigneeName&&(i.name=e.assigneeName),i.totalCount+=1,t&&(i.openCount+=1),n.set(r,i)};for(let t of e)r(t,!0);for(let e of t)r(e,!1);let i=[...n.entries()].map(([e,t])=>({userId:e,label:S(e,t.name),openCount:t.openCount,totalCount:t.totalCount}));return i.sort((e,t)=>t.openCount-e.openCount||e.label.localeCompare(t.label)),i}function T(e,t){return t===null?!0:C(e.assigneeUserId)===t}var E=t();function D(e){let t=e.name??e.userId.slice(0,8);return e.kind===`owner`?`${t} (owner)`:t}var O=`maxy-admin-session-key`;function k(e){let t=[];return e.clientName&&t.push(e.clientName),e.propertyAddress&&t.push(e.propertyAddress),e.fee!=null&&t.push(`£${e.fee}`),t.join(` · `)}function A(e){if(!e)return``;let t=Date.parse(e);if(!Number.isFinite(t))return``;let n=new Date(t);return`${n.getUTCDate()} ${[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][n.getUTCMonth()]} ${n.getUTCFullYear()}`}function j(e){return e.assigneeName?e.assigneeName:e.assigneeUserId?e.assigneeUserId.slice(0,8):`Unassigned`}function M(e,t){return[t,A(e.createdAt),j(e)].filter(Boolean).join(` · `)}function N(e,t){if(e.running&&e.runningStartedAt){let n=Date.parse(e.runningStartedAt);if(Number.isFinite(n))return e.secondsLogged+Math.max(0,(t-n)/1e3)}return e.secondsLogged}function P({clients:e,onSelect:t}){return(0,E.jsxs)(`section`,{className:`admin-card tasks-card`,children:[(0,E.jsxs)(`div`,{className:`tasks-card-head`,children:[(0,E.jsx)(`span`,{className:`tasks-card-title`,children:`Clients`}),(0,E.jsxs)(`span`,{className:`tasks-card-count`,children:[e.length,` total`]})]}),e.length===0&&(0,E.jsx)(`div`,{className:`tasks-empty`,children:`No clients yet.`}),e.map(e=>(0,E.jsx)(`button`,{className:`tasks-row tasks-client-row`,onClick:()=>t(e.name),children:(0,E.jsxs)(`div`,{className:`tasks-row-main`,children:[(0,E.jsx)(`div`,{className:`tasks-row-name`,children:e.name}),(0,E.jsxs)(`div`,{className:`tasks-row-sub`,children:[e.openCount,` open · `,m(e.totalSeconds),` logged`]})]})},e.name))]})}function ee({task:e,roster:t,busy:n,onAssign:r,onClose:i}){return(0,_.useEffect)(()=>{let e=e=>{e.key===`Escape`&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]),(0,E.jsx)(`div`,{className:`tasks-detail-backdrop`,onClick:i,children:(0,E.jsxs)(`div`,{className:`tasks-detail`,role:`dialog`,"aria-modal":`true`,"aria-label":`Task detail`,onClick:e=>e.stopPropagation(),children:[(0,E.jsxs)(`div`,{className:`tasks-detail-head`,children:[(0,E.jsx)(`h2`,{className:`tasks-detail-title`,children:e?e.name:`Task no longer available`}),(0,E.jsx)(`button`,{className:`tasks-detail-close`,"aria-label":`Close`,onClick:i,children:(0,E.jsx)(s,{size:16})})]}),e===null?(0,E.jsx)(`p`,{className:`tasks-detail-gone`,children:`This task is no longer in the list. It may have been completed, cancelled or removed. Close this and reload to see the current list.`}):(0,E.jsxs)(`dl`,{className:`tasks-detail-fields`,children:[(0,E.jsx)(`dt`,{children:`Status`}),(0,E.jsx)(`dd`,{children:e.status}),(0,E.jsx)(`dt`,{children:`Logged`}),(0,E.jsx)(`dd`,{children:m(e.secondsLogged)}),(0,E.jsx)(`dt`,{children:`Created`}),(0,E.jsx)(`dd`,{children:A(e.createdAt)||`Not recorded`}),(0,E.jsx)(`dt`,{children:`Assignee`}),(0,E.jsx)(`dd`,{children:e.taskId===null?j(e):(0,E.jsxs)(`select`,{className:`tasks-assign-select`,"aria-label":`Assignee`,disabled:n,value:e.assigneeUserId??``,onChange:t=>r(e.taskId,t.target.value===``?null:t.target.value),children:[(0,E.jsx)(`option`,{value:``,children:`Unassigned`}),e.assigneeUserId&&!t.some(t=>t.userId===e.assigneeUserId)&&(0,E.jsxs)(`option`,{value:e.assigneeUserId,children:[j(e),` (not in roster)`]}),t.map(e=>(0,E.jsx)(`option`,{value:e.userId,children:D(e)},e.userId))]})}),e.clientName&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`dt`,{children:`Client`}),(0,E.jsx)(`dd`,{children:e.clientName})]}),e.propertyAddress&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`dt`,{children:`Property`}),(0,E.jsx)(`dd`,{children:e.propertyAddress})]}),e.fee!=null&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`dt`,{children:`Fee`}),(0,E.jsxs)(`dd`,{children:[`£`,e.fee]})]})]})]})})}function F({adminFetch:e}){let[t,r]=(0,_.useState)({open:[],completed:[]}),[a,o]=(0,_.useState)(!1),[l,d]=(0,_.useState)(!1),f=(0,_.useRef)(!1),g=(0,_.useRef)(``),b=v(1e3),[x,S]=(0,_.useState)(`open`),[C,D]=(0,_.useState)(null),[O,A]=(0,_.useState)(null),[j,F]=(0,_.useState)(null),[I,L]=(0,_.useState)(``),[R,z]=(0,_.useState)(null),[B,V]=(0,_.useState)(null),H=(0,_.useMemo)(()=>{if(R!==null)return[...t.open,...t.completed].find(e=>e.rowKey===R)??null},[t,R]);(0,_.useEffect)(()=>{R!==null&&H===null&&console.error(`[tasks-ui] op=detail-failed rowKey=${R} reason=not-in-list`)},[R,H]);let U=(0,_.useMemo)(()=>y(t.open,t.completed),[t]),W=(0,_.useMemo)(()=>C===null?{open:t.open,completed:t.completed}:{open:t.open.filter(e=>e.clientName===C),completed:t.completed.filter(e=>e.clientName===C)},[t,C]),G=(0,_.useMemo)(()=>w(W.open,W.completed),[W]),K=(0,_.useCallback)(e=>{D(e),S(`open`)},[]);(0,_.useEffect)(()=>{C&&!U.some(e=>e.name===C)&&D(null)},[U,C]),(0,_.useEffect)(()=>{O&&!G.some(e=>e.userId===O)&&A(null)},[G,O]),(0,_.useEffect)(()=>{V(null)},[x,C,O]);let q=t.open.filter(e=>e.running||(C===null||e.clientName===C)&&T(e,O)),J=(C?t.completed.filter(e=>e.clientName===C):t.completed).filter(e=>T(e,O)),[te,ne]=(0,_.useState)([]),Y=(0,_.useCallback)(async()=>{let t=await e(`/api/admin/tasks-list`);t.ok&&r(await t.json()),o(!0)},[e]);(0,_.useEffect)(()=>{Y()},[Y]),(0,_.useEffect)(()=>{(async()=>{let t=await e(`/api/admin/admin-users-list`);if(t.ok){let e=await t.json();e.ok&&Array.isArray(e.users)&&ne(e.users)}})()},[e]);let X=(0,_.useCallback)(async(t,n,r)=>{if(f.current)return!1;f.current=!0,d(!0);try{return await e(t,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({taskId:n,...r})}),await Y(),!0}finally{f.current=!1,d(!1)}},[e,Y]),re=(0,_.useCallback)(async e=>{await X(`/api/admin/task-complete`,e)&&console.log(`[tasks-ui] op=complete taskId=${e.slice(0,8)} confirmed=true`)},[X]),ie=(0,_.useCallback)((e,t)=>{let n=String(Math.round(e.secondsLogged/60));g.current=n,F(t),L(n)},[]),Z=(0,_.useCallback)(()=>{F(null),L(``)},[]),ae=(0,_.useCallback)(async e=>{let t=I.trim(),n=Number(t);if(!(t===``||!Number.isInteger(n)||n<0)){if(t===g.current){Z();return}F(null),L(``),await X(`/api/admin/task-time-adjust`,e,{newSeconds:n*60})}},[I,X,Z]),oe=(0,_.useCallback)(e=>{X(`/api/admin/task-time-adjust`,e,{newSeconds:0})},[X]),se=(0,_.useCallback)((e,t)=>{X(`/api/admin/task-assign`,e,{assigneeUserId:t})},[X]);if(!a)return(0,E.jsx)(n,{surface:`gate`});let Q=e=>e.taskId!==null&&j===e.taskId,$=(e,t)=>Q(e)?(0,E.jsxs)(`div`,{className:`tasks-edit`,children:[(0,E.jsx)(`input`,{className:`tasks-edit-input`,type:`number`,min:0,step:1,"aria-label":`Logged minutes`,value:I,onChange:e=>L(e.target.value)}),(0,E.jsx)(`span`,{className:`tasks-edit-unit`,children:`min`}),(0,E.jsxs)(`button`,{className:`admin-btn-cta tasks-btn-action`,disabled:l,onClick:()=>void ae(t),children:[(0,E.jsx)(c,{size:14}),` Save`]}),(0,E.jsxs)(`button`,{className:`tasks-btn-secondary tasks-btn-action`,onClick:Z,children:[(0,E.jsx)(s,{size:14}),` Cancel`]})]}):(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`button`,{className:`tasks-time-btn`,"aria-label":`Edit time`,disabled:l||e.running,title:e.running?`Stop the timer before editing time`:void 0,onClick:()=>ie(e,t),children:(0,E.jsx)(i,{size:14})}),(0,E.jsx)(`button`,{className:`tasks-time-btn`,"aria-label":`Reset time`,disabled:l||e.running,title:e.running?`Stop the timer before resetting time`:void 0,onClick:()=>oe(t),children:(0,E.jsx)(h,{size:14})})]});return(0,E.jsxs)(`div`,{className:`tasks-body`,children:[R!==null&&(0,E.jsx)(ee,{task:H??null,roster:te,busy:l,onAssign:se,onClose:()=>z(null)}),(0,E.jsxs)(`div`,{className:`tasks-tabs`,children:[(0,E.jsxs)(`button`,{className:`admin-chip ${x===`open`?`is-active`:``}`,onClick:()=>S(`open`),children:[`Open `,(0,E.jsx)(`span`,{className:`tasks-tab-badge`,children:t.open.length})]}),(0,E.jsxs)(`button`,{className:`admin-chip ${x===`completed`?`is-active`:``}`,onClick:()=>S(`completed`),children:[`Completed `,(0,E.jsx)(`span`,{className:`tasks-tab-badge`,children:t.completed.length})]}),(0,E.jsxs)(`button`,{className:`admin-chip ${x===`clients`?`is-active`:``}`,onClick:()=>S(`clients`),children:[`Clients `,(0,E.jsx)(`span`,{className:`tasks-tab-badge`,children:U.length})]})]}),x===`clients`?(0,E.jsx)(P,{clients:U,onSelect:K}):(0,E.jsxs)(E.Fragment,{children:[C&&(0,E.jsxs)(`div`,{className:`tasks-filter-banner`,children:[(0,E.jsxs)(`span`,{children:[`Showing `,C]}),(0,E.jsx)(`button`,{className:`tasks-filter-clear`,onClick:()=>D(null),children:`Clear`})]}),G.length>0&&(0,E.jsxs)(`div`,{className:`tasks-assignee-bar`,children:[(0,E.jsxs)(`button`,{className:`admin-chip ${O===null?`is-active`:``}`,"aria-pressed":O===null,onClick:()=>A(null),children:[`All `,(0,E.jsx)(`span`,{className:`tasks-assignee-count`,children:W.open.length})]}),G.map(e=>(0,E.jsxs)(`button`,{className:`admin-chip ${O===e.userId?`is-active`:``}`,"aria-pressed":O===e.userId,"aria-label":`Assignee ${e.label}`,title:e.userId===`__unassigned__`?`Tasks with no assigned admin`:`AdminUser ${e.userId}`,onClick:()=>A(O===e.userId?null:e.userId),children:[e.label,` `,(0,E.jsx)(`span`,{className:`tasks-assignee-count`,children:e.openCount})]},e.userId))]}),x===`open`?(0,E.jsxs)(`section`,{className:`admin-card tasks-card`,children:[(0,E.jsxs)(`div`,{className:`tasks-card-head`,children:[(0,E.jsx)(`span`,{className:`tasks-card-title`,children:`Open tasks`}),(0,E.jsxs)(`span`,{className:`tasks-card-count`,children:[q.length,` to do`]})]}),q.length===0&&(0,E.jsx)(`div`,{className:`tasks-empty`,children:`No open tasks.`}),q.map(e=>(0,E.jsxs)(`div`,{className:`tasks-row`,children:[(0,E.jsx)(`button`,{className:`tasks-row-open`,"aria-label":`Open task detail: ${e.name}`,onClick:()=>z(e.rowKey),children:(0,E.jsxs)(`div`,{className:`tasks-row-main`,children:[(0,E.jsx)(`div`,{className:`tasks-row-name`,children:e.name}),(0,E.jsx)(`div`,{className:`tasks-row-sub`,children:M(e,k(e))})]})}),(0,E.jsx)(`div`,{className:`tasks-row-elapsed ${e.running?`tasks-row-elapsed-running`:``}`,children:m(N(e,b))}),(0,E.jsx)(`div`,{className:`tasks-row-controls ${e.taskId!==null&&B===e.taskId?`is-confirming`:``}`,children:e.taskId!==null&&B===e.taskId?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`span`,{className:`tasks-confirm-label`,children:`Complete?`}),(0,E.jsxs)(`button`,{className:`admin-btn-cta tasks-btn-action`,disabled:l,onClick:()=>{V(null),re(e.taskId)},children:[(0,E.jsx)(c,{size:14}),` Confirm complete`]}),(0,E.jsxs)(`button`,{className:`tasks-btn-secondary tasks-btn-action`,onClick:()=>V(null),children:[(0,E.jsx)(s,{size:14}),` Keep open`]})]}):e.taskId===null?(0,E.jsx)(`span`,{className:`tasks-row-broken`,title:`This task has no id, so it cannot be started, edited or completed. Repair it by running platform/scripts/backfill-task-ids.sh on this install.`,children:`Needs repair`}):(0,E.jsxs)(E.Fragment,{children:[$(e,e.taskId),Q(e)?null:(0,E.jsxs)(`button`,{className:`tasks-btn-secondary tasks-btn-action`,"aria-label":`Complete task: ${e.name}`,disabled:l||e.running,title:e.running?`Stop the timer before completing`:void 0,onClick:()=>V(e.taskId),children:[(0,E.jsx)(c,{size:14}),` Complete`]}),Q(e)?null:e.running?(0,E.jsxs)(`button`,{className:`admin-btn-danger tasks-btn-action`,disabled:l,onClick:()=>void X(`/api/admin/task-timer-stop`,e.taskId),children:[(0,E.jsx)(u,{size:14}),` Stop`]}):(0,E.jsxs)(`button`,{className:`admin-btn-cta tasks-btn-action`,disabled:l,onClick:()=>void X(`/api/admin/task-timer-start`,e.taskId),children:[(0,E.jsx)(p,{size:14}),` Start`]})]})})]},e.rowKey))]}):(0,E.jsxs)(`section`,{className:`admin-card tasks-card`,children:[(0,E.jsxs)(`div`,{className:`tasks-card-head`,children:[(0,E.jsx)(`span`,{className:`tasks-card-title`,children:`Completed`}),(0,E.jsxs)(`span`,{className:`tasks-card-count`,children:[J.length,` done`]})]}),J.length===0&&(0,E.jsx)(`div`,{className:`tasks-empty`,children:`Nothing completed yet.`}),J.map(e=>(0,E.jsxs)(`div`,{className:`tasks-row tasks-row-done`,children:[(0,E.jsx)(`button`,{className:`tasks-row-open`,"aria-label":`Open task detail: ${e.name}`,onClick:()=>z(e.rowKey),children:(0,E.jsxs)(`div`,{className:`tasks-row-main`,children:[(0,E.jsx)(`div`,{className:`tasks-row-name`,children:e.name}),(0,E.jsx)(`div`,{className:`tasks-row-sub`,children:M(e,k(e))})]})}),(0,E.jsx)(`div`,{className:`tasks-row-elapsed`,children:m(e.secondsLogged)}),(0,E.jsx)(`div`,{className:`tasks-row-controls`,children:e.taskId===null?(0,E.jsx)(`span`,{className:`tasks-row-broken`,title:`This task has no id, so its logged time cannot be edited. Repair it by running platform/scripts/backfill-task-ids.sh on this install.`,children:`Needs repair`}):$(e,e.taskId)})]},e.rowKey))]})]})]})}function I({cacheKey:e}){let{adminFetch:t}=a({initialCacheKey:e,surface:`tasks`});return(0,E.jsx)(F,{adminFetch:t})}function L(){let[e,t]=(0,_.useState)(null),[r,i]=(0,_.useState)(!1),[a,o]=(0,_.useState)(void 0),[s,c]=(0,_.useState)(null),[u,p]=(0,_.useState)(null),[m,h]=(0,_.useState)(null),[g,v]=(0,_.useState)(null);(0,_.useEffect)(()=>{let e=!1,n=null;try{n=sessionStorage.getItem(O)}catch{}if(!n){t(null),i(!0);return}return fetch(`/api/admin/session?session_key=${encodeURIComponent(n)}`).then(async r=>{if(!e){if(r.status===401){try{sessionStorage.removeItem(O)}catch{}window.location.href=`/`;return}if(r.ok)try{let e=await r.json();typeof e.businessName==`string`&&o(e.businessName),e.sessionId!==void 0&&c(e.sessionId??null),p(e.role??null),h(e.userName===void 0?null:e.userName),v(e.avatar??null)}catch{}t(n),i(!0)}}).catch(()=>{e||(t(n),i(!0))}),()=>{e=!0}},[]);let y=(0,_.useCallback)(()=>{try{sessionStorage.removeItem(O)}catch{}window.location.href=`/`},[]),[b,x]=(0,_.useState)(!1),S=(0,_.useCallback)(async()=>{x(!0);try{let e=await d();if(e){try{sessionStorage.removeItem(O)}catch{}window.location.href=`/`}return e}finally{x(!1)}},[]);return r?e?(0,E.jsx)(l,{cacheKey:e,surface:`tasks`,onSessionExpired:({code:e,path:t})=>{console.warn(`[admin-auth] outcome=session-expired-redirect code=${e} path=${t} surface=tasks`);try{sessionStorage.removeItem(O)}catch{}window.location.href=`/`},children:(0,E.jsx)(f,{cacheKey:e,businessName:a,sessionId:s,onLogout:y,onDisconnect:S,disconnecting:b,userName:m,userAvatar:g,role:u,children:(0,E.jsx)(I,{cacheKey:e})})}):(0,E.jsx)(`div`,{className:`tasks-page`,children:(0,E.jsxs)(`div`,{className:`tasks-empty`,children:[(0,E.jsx)(`p`,{children:`You are not signed in.`}),(0,E.jsxs)(`p`,{children:[`Open the `,(0,E.jsx)(`a`,{href:`/`,className:`tasks-link`,children:`main admin page`}),` and log in, then return here.`]})]})}):(0,E.jsx)(n,{surface:`gate`})}(0,g.createRoot)(document.getElementById(`root`)).render((0,E.jsx)(L,{}));