agim-cli 1.2.131 → 1.2.133
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/CHANGELOG.md +107 -0
- package/dist/core/llm/agent-loop.d.ts.map +1 -1
- package/dist/core/llm/agent-loop.js +16 -5
- package/dist/core/llm/agent-loop.js.map +1 -1
- package/dist/web/public/assets/{a2a-Rq5d7Xk5.js → a2a-TmaKRhXV.js} +2 -2
- package/dist/web/public/assets/{a2a-Rq5d7Xk5.js.map → a2a-TmaKRhXV.js.map} +1 -1
- package/dist/web/public/assets/{activity-FCJjBNRM.js → activity-Cckc7fGG.js} +2 -2
- package/dist/web/public/assets/{activity-FCJjBNRM.js.map → activity-Cckc7fGG.js.map} +1 -1
- package/dist/web/public/assets/{admins-9fFdLRCv.js → admins-1hMCDolP.js} +2 -2
- package/dist/web/public/assets/{admins-9fFdLRCv.js.map → admins-1hMCDolP.js.map} +1 -1
- package/dist/web/public/assets/{agents-CiWiDAvY.js → agents-3sUHlKzx.js} +2 -2
- package/dist/web/public/assets/{agents-CiWiDAvY.js.map → agents-3sUHlKzx.js.map} +1 -1
- package/dist/web/public/assets/{approvals-4gNB4E5r.js → approvals-CY-_Lg4Y.js} +2 -2
- package/dist/web/public/assets/{approvals-4gNB4E5r.js.map → approvals-CY-_Lg4Y.js.map} +1 -1
- package/dist/web/public/assets/{arrow-down-CL6JRd2c.js → arrow-down-BkZ50IzL.js} +2 -2
- package/dist/web/public/assets/{arrow-down-CL6JRd2c.js.map → arrow-down-BkZ50IzL.js.map} +1 -1
- package/dist/web/public/assets/{arrow-up-B47-Pj-X.js → arrow-up-NWC5K6Jw.js} +2 -2
- package/dist/web/public/assets/{arrow-up-B47-Pj-X.js.map → arrow-up-NWC5K6Jw.js.map} +1 -1
- package/dist/web/public/assets/{asks-DPTxh_Os.js → asks-VzAmpsEh.js} +2 -2
- package/dist/web/public/assets/{asks-DPTxh_Os.js.map → asks-VzAmpsEh.js.map} +1 -1
- package/dist/web/public/assets/{audit-Dw3mL-g7.js → audit-fOn2LH4D.js} +2 -2
- package/dist/web/public/assets/{audit-Dw3mL-g7.js.map → audit-fOn2LH4D.js.map} +1 -1
- package/dist/web/public/assets/{bell-ojwGPpS7.js → bell-FF7PJo1N.js} +2 -2
- package/dist/web/public/assets/{bell-ojwGPpS7.js.map → bell-FF7PJo1N.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-DDTjejCS.js → bgjobs-L0v-UwPW.js} +2 -2
- package/dist/web/public/assets/{bgjobs-DDTjejCS.js.map → bgjobs-L0v-UwPW.js.map} +1 -1
- package/dist/web/public/assets/{brain-wzaKeCbt.js → brain-CdkDpFr1.js} +2 -2
- package/dist/web/public/assets/{brain-wzaKeCbt.js.map → brain-CdkDpFr1.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-CCAq-ik6.js → briefcase-BXbOdl7E.js} +2 -2
- package/dist/web/public/assets/{briefcase-CCAq-ik6.js.map → briefcase-BXbOdl7E.js.map} +1 -1
- package/dist/web/public/assets/{chat-CbSvPFpG.js → chat-BazMi-ik.js} +3 -3
- package/dist/web/public/assets/{chat-CbSvPFpG.js.map → chat-BazMi-ik.js.map} +1 -1
- package/dist/web/public/assets/{chevron-left-bpKHh9Bu.js → chevron-left-Di1Tz64J.js} +2 -2
- package/dist/web/public/assets/{chevron-left-bpKHh9Bu.js.map → chevron-left-Di1Tz64J.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-CUlLpETY.js → chevron-right-BLjhBkqs.js} +2 -2
- package/dist/web/public/assets/{chevron-right-CUlLpETY.js.map → chevron-right-BLjhBkqs.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-D98QQwz0.js → circle-check-BaxzYLlE.js} +2 -2
- package/dist/web/public/assets/{circle-check-D98QQwz0.js.map → circle-check-BaxzYLlE.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-BP-0K1le.js → circle-check-big-C4BGLUvw.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-BP-0K1le.js.map → circle-check-big-C4BGLUvw.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-Et3rwVPd.js → circle-x-THl-PO3_.js} +2 -2
- package/dist/web/public/assets/{circle-x-Et3rwVPd.js.map → circle-x-THl-PO3_.js.map} +1 -1
- package/dist/web/public/assets/clock-iitpdQjZ.js +7 -0
- package/dist/web/public/assets/clock-iitpdQjZ.js.map +1 -0
- package/dist/web/public/assets/{confirm-dialog-6dKowsEt.js → confirm-dialog-r9HgkIYf.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-6dKowsEt.js.map → confirm-dialog-r9HgkIYf.js.map} +1 -1
- package/dist/web/public/assets/{copy-kCWCP9Wu.js → copy-DwyF4MOL.js} +2 -2
- package/dist/web/public/assets/{copy-kCWCP9Wu.js.map → copy-DwyF4MOL.js.map} +1 -1
- package/dist/web/public/assets/{data-table-BbNkr6tW.js → data-table-B80M8zdu.js} +2 -2
- package/dist/web/public/assets/{data-table-BbNkr6tW.js.map → data-table-B80M8zdu.js.map} +1 -1
- package/dist/web/public/assets/dialog-fGS0IXOo.js +6 -0
- package/dist/web/public/assets/{dialog-Cv87qelJ.js.map → dialog-fGS0IXOo.js.map} +1 -1
- package/dist/web/public/assets/{download-Cv8u9PxC.js → download-5ihiF2Gj.js} +2 -2
- package/dist/web/public/assets/{download-Cv8u9PxC.js.map → download-5ihiF2Gj.js.map} +1 -1
- package/dist/web/public/assets/{email-BS3f2y7i.js → email-LmRMqLRU.js} +3 -3
- package/dist/web/public/assets/{email-BS3f2y7i.js.map → email-LmRMqLRU.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-CRnid5FY.js → empty-state-CrPnUC6d.js} +2 -2
- package/dist/web/public/assets/{empty-state-CRnid5FY.js.map → empty-state-CrPnUC6d.js.map} +1 -1
- package/dist/web/public/assets/{external-link-CzQc-c_P.js → external-link-DIJK1MAH.js} +2 -2
- package/dist/web/public/assets/{external-link-CzQc-c_P.js.map → external-link-DIJK1MAH.js.map} +1 -1
- package/dist/web/public/assets/{eye-DEBkfJiC.js → eye-DJJw0Ald.js} +2 -2
- package/dist/web/public/assets/{eye-DEBkfJiC.js.map → eye-DJJw0Ald.js.map} +1 -1
- package/dist/web/public/assets/{facts-O3FFqdD1.js → facts-BzImxpJD.js} +2 -2
- package/dist/web/public/assets/{facts-O3FFqdD1.js.map → facts-BzImxpJD.js.map} +1 -1
- package/dist/web/public/assets/{goals-pr5ky9rG.js → goals-C6p21B9N.js} +2 -2
- package/dist/web/public/assets/{goals-pr5ky9rG.js.map → goals-C6p21B9N.js.map} +1 -1
- package/dist/web/public/assets/{health-D_rfBsgq.js → health-D-ugz2Gp.js} +2 -2
- package/dist/web/public/assets/{health-D_rfBsgq.js.map → health-D-ugz2Gp.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-203oH09r.js → heart-pulse-DlZXcdL0.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-203oH09r.js.map → heart-pulse-DlZXcdL0.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-B5yJoH-X.js → heartbeat-DSasg-3y.js} +2 -2
- package/dist/web/public/assets/{heartbeat-B5yJoH-X.js.map → heartbeat-DSasg-3y.js.map} +1 -1
- package/dist/web/public/assets/{hot-CXGeh4Oo.js → hot-D67pYtaV.js} +2 -2
- package/dist/web/public/assets/{hot-CXGeh4Oo.js.map → hot-D67pYtaV.js.map} +1 -1
- package/dist/web/public/assets/{index-CuNnG-5O.js → index-CqwhfPlr.js} +9 -9
- package/dist/web/public/assets/index-CqwhfPlr.js.map +1 -0
- package/dist/web/public/assets/{installed-CQKXZNEU.js → installed-CrIsSoQE.js} +2 -2
- package/dist/web/public/assets/{installed-CQKXZNEU.js.map → installed-CrIsSoQE.js.map} +1 -1
- package/dist/web/public/assets/{jobs-DPxN8Ko0.js → jobs-yAwphb1W.js} +2 -2
- package/dist/web/public/assets/{jobs-DPxN8Ko0.js.map → jobs-yAwphb1W.js.map} +1 -1
- package/dist/web/public/assets/{layout-CxQy-DtV.js → layout-BXZKGQAk.js} +2 -2
- package/dist/web/public/assets/{layout-CxQy-DtV.js.map → layout-BXZKGQAk.js.map} +1 -1
- package/dist/web/public/assets/layout-CL5HFvHN.js +2 -0
- package/dist/web/public/assets/layout-CL5HFvHN.js.map +1 -0
- package/dist/web/public/assets/{layout-CQXWA5Ak.js → layout-CrtmlC8G.js} +2 -2
- package/dist/web/public/assets/{layout-CQXWA5Ak.js.map → layout-CrtmlC8G.js.map} +1 -1
- package/dist/web/public/assets/{layout-4C_GhacH.js → layout-awbFImGg.js} +2 -2
- package/dist/web/public/assets/{layout-4C_GhacH.js.map → layout-awbFImGg.js.map} +1 -1
- package/dist/web/public/assets/{layout-VOwsqNph.js → layout-cacmfseo.js} +2 -2
- package/dist/web/public/assets/{layout-VOwsqNph.js.map → layout-cacmfseo.js.map} +1 -1
- package/dist/web/public/assets/{llm-i15cVS6k.js → llm-C19AX6q2.js} +2 -2
- package/dist/web/public/assets/{llm-i15cVS6k.js.map → llm-C19AX6q2.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-CVEo3Hwx.js → loader-circle-U-jPjmeD.js} +2 -2
- package/dist/web/public/assets/{loader-circle-CVEo3Hwx.js.map → loader-circle-U-jPjmeD.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-BlmDrPGJ.js → map-pin-4rE1NK87.js} +2 -2
- package/dist/web/public/assets/{map-pin-BlmDrPGJ.js.map → map-pin-4rE1NK87.js.map} +1 -1
- package/dist/web/public/assets/{mcp-9MlUdHAS.js → mcp-B94wc6Vi.js} +2 -2
- package/dist/web/public/assets/{mcp-9MlUdHAS.js.map → mcp-B94wc6Vi.js.map} +1 -1
- package/dist/web/public/assets/{memos-MDYe436b.js → memos-CrG4zgfI.js} +3 -3
- package/dist/web/public/assets/{memos-MDYe436b.js.map → memos-CrG4zgfI.js.map} +1 -1
- package/dist/web/public/assets/{messengers-D0F-cgJ0.js → messengers-UWarJd_C.js} +2 -2
- package/dist/web/public/assets/{messengers-D0F-cgJ0.js.map → messengers-UWarJd_C.js.map} +1 -1
- package/dist/web/public/assets/{mobile-Bezz5MnW.js → mobile-QhAUKqcJ.js} +2 -2
- package/dist/web/public/assets/{mobile-Bezz5MnW.js.map → mobile-QhAUKqcJ.js.map} +1 -1
- package/dist/web/public/assets/{native-agent-bRS7DRfj.js → native-agent-DMf0u4dm.js} +2 -2
- package/dist/web/public/assets/{native-agent-bRS7DRfj.js.map → native-agent-DMf0u4dm.js.map} +1 -1
- package/dist/web/public/assets/{network-3O1O1jsk.js → network-l6l5gLHO.js} +2 -2
- package/dist/web/public/assets/{network-3O1O1jsk.js.map → network-l6l5gLHO.js.map} +1 -1
- package/dist/web/public/assets/{outbox-D2iX9mcs.js → outbox-BenX_yUQ.js} +2 -2
- package/dist/web/public/assets/{outbox-D2iX9mcs.js.map → outbox-BenX_yUQ.js.map} +1 -1
- package/dist/web/public/assets/{pagination-79ms7QFI.js → pagination-B4g1CBsi.js} +2 -2
- package/dist/web/public/assets/{pagination-79ms7QFI.js.map → pagination-B4g1CBsi.js.map} +1 -1
- package/dist/web/public/assets/{persona-D37NzRbz.js → persona--3cjtl9q.js} +2 -2
- package/dist/web/public/assets/{persona-D37NzRbz.js.map → persona--3cjtl9q.js.map} +1 -1
- package/dist/web/public/assets/plans-DsHtDRlS.js +12 -0
- package/dist/web/public/assets/plans-DsHtDRlS.js.map +1 -0
- package/dist/web/public/assets/{play-BedplEoY.js → play-BG0hyTnO.js} +2 -2
- package/dist/web/public/assets/{play-BedplEoY.js.map → play-BG0hyTnO.js.map} +1 -1
- package/dist/web/public/assets/{plus-4GdEpvTV.js → plus-Dof9AQvU.js} +2 -2
- package/dist/web/public/assets/{plus-4GdEpvTV.js.map → plus-Dof9AQvU.js.map} +1 -1
- package/dist/web/public/assets/{policy-Gmd4rmzp.js → policy-BzHy4WbV.js} +2 -2
- package/dist/web/public/assets/{policy-Gmd4rmzp.js.map → policy-BzHy4WbV.js.map} +1 -1
- package/dist/web/public/assets/{qr-code-DVgHWDky.js → qr-code-yD_ztCf6.js} +2 -2
- package/dist/web/public/assets/{qr-code-DVgHWDky.js.map → qr-code-yD_ztCf6.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-DZHRYuFA.js → refresh-ccw-CBiHL1tY.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-DZHRYuFA.js.map → refresh-ccw-CBiHL1tY.js.map} +1 -1
- package/dist/web/public/assets/reminders-CDJlFR2Y.js +7 -0
- package/dist/web/public/assets/reminders-CDJlFR2Y.js.map +1 -0
- package/dist/web/public/assets/{save-DQlBAXAl.js → save-DVHI3V6o.js} +2 -2
- package/dist/web/public/assets/{save-DQlBAXAl.js.map → save-DVHI3V6o.js.map} +1 -1
- package/dist/web/public/assets/{schedules-BtuWAAd7.js → schedules-DYf64Fpr.js} +2 -2
- package/dist/web/public/assets/{schedules-BtuWAAd7.js.map → schedules-DYf64Fpr.js.map} +1 -1
- package/dist/web/public/assets/{search-dBGBHpnH.js → search-BYPDbBkC.js} +2 -2
- package/dist/web/public/assets/{search-dBGBHpnH.js.map → search-BYPDbBkC.js.map} +1 -1
- package/dist/web/public/assets/{search-DJXxphzz.js → search-aw0y39Qs.js} +2 -2
- package/dist/web/public/assets/{search-DJXxphzz.js.map → search-aw0y39Qs.js.map} +1 -1
- package/dist/web/public/assets/{security-CP0MP_Gx.js → security-DhN1kRac.js} +2 -2
- package/dist/web/public/assets/{security-CP0MP_Gx.js.map → security-DhN1kRac.js.map} +1 -1
- package/dist/web/public/assets/{service-BJFnNe7Y.js → service-BhvI7Mb5.js} +2 -2
- package/dist/web/public/assets/{service-BJFnNe7Y.js.map → service-BhvI7Mb5.js.map} +1 -1
- package/dist/web/public/assets/{shield-alert-DRh8fC8Z.js → shield-alert-DjqqnTMk.js} +2 -2
- package/dist/web/public/assets/{shield-alert-DRh8fC8Z.js.map → shield-alert-DjqqnTMk.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-CTRG6Pb2.js → status-badge-nSFUUEfy.js} +2 -2
- package/dist/web/public/assets/{status-badge-CTRG6Pb2.js.map → status-badge-nSFUUEfy.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-BiZ2mCPs.js → subtasks-C_x1RLJA.js} +2 -2
- package/dist/web/public/assets/{subtasks-BiZ2mCPs.js.map → subtasks-C_x1RLJA.js.map} +1 -1
- package/dist/web/public/assets/{table-Dbriy3Jz.js → table-BNqo2xb8.js} +2 -2
- package/dist/web/public/assets/{table-Dbriy3Jz.js.map → table-BNqo2xb8.js.map} +1 -1
- package/dist/web/public/assets/{topn-BEi7Uvlg.js → topn-NGtwNz38.js} +2 -2
- package/dist/web/public/assets/{topn-BEi7Uvlg.js.map → topn-NGtwNz38.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-BgltvQpz.js → trash-2-BoFq2ZOF.js} +2 -2
- package/dist/web/public/assets/{trash-2-BgltvQpz.js.map → trash-2-BoFq2ZOF.js.map} +1 -1
- package/dist/web/public/assets/use-background-tasks-CY2gWPBZ.js +2 -0
- package/dist/web/public/assets/{use-background-tasks-DHo3Hnu9.js.map → use-background-tasks-CY2gWPBZ.js.map} +1 -1
- package/dist/web/public/assets/{use-llm-admin-EU1V1WQ5.js → use-llm-admin-CA5tUbEU.js} +2 -2
- package/dist/web/public/assets/{use-llm-admin-EU1V1WQ5.js.map → use-llm-admin-CA5tUbEU.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-D0FD5n0A.js → use-memory-CxasvYqR.js} +2 -2
- package/dist/web/public/assets/{use-memory-D0FD5n0A.js.map → use-memory-CxasvYqR.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-CZg_sS2t.js → use-observability-BOepIjX5.js} +2 -2
- package/dist/web/public/assets/{use-observability-CZg_sS2t.js.map → use-observability-BOepIjX5.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-D3vI1Dwg.js → use-settings-DBXvAYm9.js} +2 -2
- package/dist/web/public/assets/{use-settings-D3vI1Dwg.js.map → use-settings-DBXvAYm9.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-DWm4dRVD.js → use-workspace-dw_69jpb.js} +2 -2
- package/dist/web/public/assets/{use-workspace-DWm4dRVD.js.map → use-workspace-dw_69jpb.js.map} +1 -1
- package/dist/web/public/assets/{useQuery-DIlm0vJ-.js → useQuery-Ds6-WURB.js} +2 -2
- package/dist/web/public/assets/{useQuery-DIlm0vJ-.js.map → useQuery-Ds6-WURB.js.map} +1 -1
- package/dist/web/public/assets/{vector-CaijGbpn.js → vector-C5WBAtlL.js} +2 -2
- package/dist/web/public/assets/{vector-CaijGbpn.js.map → vector-C5WBAtlL.js.map} +1 -1
- package/dist/web/public/assets/{viewer-nU6uZJWq.js → viewer-DQG9P7-t.js} +2 -2
- package/dist/web/public/assets/{viewer-nU6uZJWq.js.map → viewer-DQG9P7-t.js.map} +1 -1
- package/dist/web/public/assets/{workspace-BluXJmIg.js → workspace-Dku83Qqr.js} +3 -3
- package/dist/web/public/assets/{workspace-BluXJmIg.js.map → workspace-Dku83Qqr.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-B2nSpx9t.js → workspaces-ClLQ253x.js} +2 -2
- package/dist/web/public/assets/{workspaces-B2nSpx9t.js.map → workspaces-ClLQ253x.js.map} +1 -1
- package/dist/web/public/assets/{x-D_eFtxsK.js → x-ClXUlQDe.js} +2 -2
- package/dist/web/public/assets/{x-D_eFtxsK.js.map → x-ClXUlQDe.js.map} +1 -1
- package/dist/web/public/index.html +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +28 -0
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/assets/dialog-Cv87qelJ.js +0 -6
- package/dist/web/public/assets/index-CuNnG-5O.js.map +0 -1
- package/dist/web/public/assets/layout-tAyuz3-F.js +0 -2
- package/dist/web/public/assets/layout-tAyuz3-F.js.map +0 -1
- package/dist/web/public/assets/reminders-C00V-Fs9.js +0 -12
- package/dist/web/public/assets/reminders-C00V-Fs9.js.map +0 -1
- package/dist/web/public/assets/use-background-tasks-DHo3Hnu9.js +0 -2
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as n,j as e,T as u,N as r,c as a,O as i}from"./index-CuNnG-5O.js";import"./react-Cb2sDjhD.js";const b=[{to:"jobs",i18nKey:"subnav.jobs",mounted:!0},{to:"subtasks",i18nKey:"subnav.subtasks",mounted:!0},{to:"bgjobs",i18nKey:"subnav.bgjobs",mounted:!0},{to:"schedules",i18nKey:"subnav.schedules",mounted:!0},{to:"outbox",i18nKey:"subnav.outbox",mounted:!0},{to:"a2a",i18nKey:"subnav.a2a",mounted:!0},{to:"heartbeat",i18nKey:"subnav.heartbeat",mounted:!0},{to:"goals",i18nKey:"subnav.goals",mounted:!0},{to:"asks",i18nKey:"subnav.asks",mounted:!0}];function l(){const{t:s}=n("tasks");return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(u,{}),e.jsx("nav",{className:a("sticky top-[var(--topbar-h,0)] z-10","flex items-center gap-1","border-b border-border bg-surface","px-3 sm:px-4 py-1","overflow-x-auto"),"aria-label":s("pageTitle"),children:b.filter(t=>t.mounted).map(t=>e.jsx(r,{to:t.to,className:({isActive:o})=>a("shrink-0 rounded-md px-3 py-1.5 text-sm no-underline","transition-colors tap-target",o?"bg-accent-bg text-accent font-medium":"text-text-dim hover:bg-surface-hover hover:text-text"),children:s(t.i18nKey)},t.to))}),e.jsx("main",{className:"flex-1 px-3 sm:px-4 py-4 pb-safe",children:e.jsx(i,{})})]})}export{l as default};
|
|
2
|
-
//# sourceMappingURL=layout-tAyuz3-F.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layout-tAyuz3-F.js","sources":["../../src/routes/tasks/layout.tsx"],"sourcesContent":["/**\n * /tasks — layout shell shared by every sub-tab.\n *\n * Renders the application Topbar plus a sub-tab strip below it. The\n * actual sub-tab body comes from <Outlet /> — one file per tab under\n * routes/tasks/.\n *\n * Sub-tab order matches plan: jobs / subtasks / bgjobs / schedules /\n * outbox / a2a. Each sub-tab is gated on its route being mounted; in\n * PR-10a only `/tasks/jobs` is wired up so the others stay out of the\n * nav until their PRs land.\n */\n\nimport { NavLink, Outlet } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { Topbar } from '@/components/shell/topbar'\nimport { cn } from '@/lib/utils'\n\ninterface SubTab {\n to: string\n i18nKey: string\n mounted: boolean\n}\n\nconst SUB_TABS: SubTab[] = [\n { to: 'jobs', i18nKey: 'subnav.jobs', mounted: true },\n { to: 'subtasks', i18nKey: 'subnav.subtasks', mounted: true },\n { to: 'bgjobs', i18nKey: 'subnav.bgjobs', mounted: true },\n { to: 'schedules', i18nKey: 'subnav.schedules', mounted: true },\n { to: 'outbox', i18nKey: 'subnav.outbox', mounted: true },\n { to: 'a2a', i18nKey: 'subnav.a2a', mounted: true },\n // P1 follow-up — per-thread background primitives.\n { to: 'heartbeat', i18nKey: 'subnav.heartbeat', mounted: true },\n { to: 'goals', i18nKey: 'subnav.goals', mounted: true },\n { to: 'asks', i18nKey: 'subnav.asks', mounted: true },\n]\n\nexport default function TasksLayout(): JSX.Element {\n const { t } = useTranslation('tasks')\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n <nav\n className={cn(\n 'sticky top-[var(--topbar-h,0)] z-10',\n 'flex items-center gap-1',\n 'border-b border-border bg-surface',\n 'px-3 sm:px-4 py-1',\n 'overflow-x-auto',\n )}\n aria-label={t('pageTitle')}\n >\n {SUB_TABS.filter((tab) => tab.mounted).map((tab) => (\n <NavLink\n key={tab.to}\n to={tab.to}\n className={({ isActive }) =>\n cn(\n 'shrink-0 rounded-md px-3 py-1.5 text-sm no-underline',\n 'transition-colors tap-target',\n isActive\n ? 'bg-accent-bg text-accent font-medium'\n : 'text-text-dim hover:bg-surface-hover hover:text-text',\n )\n }\n >\n {t(tab.i18nKey)}\n </NavLink>\n ))}\n </nav>\n\n <main className=\"flex-1 px-3 sm:px-4 py-4 pb-safe\">\n <Outlet />\n </main>\n </div>\n )\n}\n"],"names":["SUB_TABS","TasksLayout","t","useTranslation","jsxs","jsx","Topbar","cn","tab","NavLink","isActive","Outlet"],"mappings":"uGAwBA,MAAMA,EAAqB,CACzB,CAAE,GAAI,OAAa,QAAS,cAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,WAAa,QAAS,kBAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,SAAa,QAAS,gBAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,YAAa,QAAS,mBAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,SAAa,QAAS,gBAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,MAAa,QAAS,aAAoB,QAAS,EAAA,EAEzD,CAAE,GAAI,YAAa,QAAS,mBAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,QAAa,QAAS,eAAoB,QAAS,EAAA,EACzD,CAAE,GAAI,OAAa,QAAS,cAAoB,QAAS,EAAA,CAC3D,EAEA,SAAwBC,GAA2B,CACjD,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,OAAO,EACpC,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,gCACb,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAO,EAERD,EAAAA,IAAC,MAAA,CACC,UAAWE,EACT,sCACA,0BACA,oCACA,oBACA,iBAAA,EAEF,aAAYL,EAAE,WAAW,EAExB,SAAAF,EAAS,OAAQQ,GAAQA,EAAI,OAAO,EAAE,IAAKA,GAC1CH,EAAAA,IAACI,EAAA,CAEC,GAAID,EAAI,GACR,UAAW,CAAC,CAAE,SAAAE,CAAA,IACZH,EACE,uDACA,+BACAG,EACI,uCACA,sDAAA,EAIP,SAAAR,EAAEM,EAAI,OAAO,CAAA,EAZTA,EAAI,EAAA,CAcZ,CAAA,CAAA,QAGF,OAAA,CAAK,UAAU,mCACd,SAAAH,EAAAA,IAACM,IAAO,CAAA,CACV,CAAA,EACF,CAEJ"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{n as w,a as v,b as D,d as y,u as k,e as K,j as e,k as M,B as d,T as E,S as L,f as q,g as A,h as F,i as V,l as h,m as b}from"./index-CuNnG-5O.js";import{r as x}from"./react-Cb2sDjhD.js";import{D as _}from"./data-table-BbNkr6tW.js";import{E as Q}from"./empty-state-CRnid5FY.js";import{S as $}from"./status-badge-CTRG6Pb2.js";import{C as H}from"./confirm-dialog-6dKowsEt.js";import{D as U,a as Z,b as G,c as J,d as W,e as X}from"./dialog-Cv87qelJ.js";import{u as Y}from"./useQuery-DIlm0vJ-.js";import{L as ee}from"./loader-circle-CVEo3Hwx.js";import{R as se}from"./refresh-ccw-DZHRYuFA.js";import{B as te}from"./bell-ojwGPpS7.js";import"./table-Dbriy3Jz.js";import"./arrow-up-B47-Pj-X.js";import"./arrow-down-CL6JRd2c.js";import"./x-D_eFtxsK.js";/**
|
|
2
|
-
* @license lucide-react v0.469.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const ae=w("BellOff",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742",key:"178tsu"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05",key:"1hqiys"}]]);/**
|
|
7
|
-
* @license lucide-react v0.469.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const ne=w("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]),C={all:["reminders"],list:s=>["reminders","list",s]};function ie(s){return Y({queryKey:C.list(s),queryFn:()=>y.listReminders(s),refetchInterval:5e3,refetchIntervalInBackground:!1})}function re(){const s=v();return D({mutationFn:a=>y.cancelReminder(a),onSuccess:()=>s.invalidateQueries({queryKey:C.all})})}function le(){const s=v();return D({mutationFn:({id:a,body:i})=>y.snoozeReminder(a,i),onSuccess:()=>s.invalidateQueries({queryKey:C.all})})}const oe=["pending","firing","fired","cancelled","failed"],ce=[{duration:"5m",i18nKey:"snooze.preset5m"},{duration:"30m",i18nKey:"snooze.preset30m"},{duration:"1h",i18nKey:"snooze.preset1h"},{duration:"1d",i18nKey:"snooze.preset1d"}];function ke(){const{t:s}=k(["reminders","common"]),[a,i]=K(),r=a.get("status")??"pending",l=x.useMemo(()=>({status:r,limit:200}),[r]),{data:o,isLoading:z,isFetching:N,refetch:T}=ie(l),P=o?.reminders??[],m=re(),c=le(),[f,S]=x.useState(null),[p,g]=x.useState(null);function R(t){const n=new URLSearchParams(a);for(const[u,j]of Object.entries(t))j==null||j===""?n.delete(u):n.set(u,j);i(n,{replace:!0})}async function O(){if(f!=null)try{await m.mutateAsync(f),h.success(s("toast.cancelled"))}catch(t){const{message:n}=b(t,s);throw h.error(n),t}}async function I(t){if(p!=null)try{await c.mutateAsync({id:p,body:{duration:t}}),h.success(s("snooze.toastOk",{duration:t})),g(null)}catch(n){const{message:u}=b(n,s);h.error(u)}}const B=x.useMemo(()=>[{id:"id",header:s("col.id"),cell:t=>e.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",t.id]}),headClassName:"w-16"},{id:"fireAt",header:s("col.fireAt"),cell:t=>e.jsx("span",{className:"font-medium tabular-nums",children:me(t.fire_at)}),headClassName:"w-40"},{id:"text",header:s("col.text"),cell:t=>e.jsx("span",{className:"line-clamp-2 text-text-dim",children:t.text}),asCardTitle:!0},{id:"status",header:s("col.status"),cell:t=>e.jsx($,{status:t.status,children:s(`status.${t.status}`,{defaultValue:t.status})}),headClassName:"w-28"},{id:"platform",header:s("col.platform"),cell:t=>e.jsx("span",{className:"text-text-dim",children:t.platform}),headClassName:"w-24",hideOnMobile:!0},{id:"recurrence",header:s("col.recurrence"),cell:t=>t.recurrence_label?e.jsx(M,{variant:"info",children:t.recurrence_label}):e.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-36",hideOnMobile:!0},{id:"source",header:s("col.source"),cell:t=>e.jsx("span",{className:"text-text-dim",children:s(`source.${t.source}`,{defaultValue:t.source})}),headClassName:"w-24",hideOnMobile:!0},{id:"actions",header:"",cell:t=>t.status==="pending"?e.jsxs("div",{className:"flex justify-end gap-1",children:[e.jsxs(d,{variant:"ghost",size:"sm",onClick:n=>{n.stopPropagation(),g(t.id)},disabled:c.isPending||m.isPending,children:[e.jsx(ne,{className:"h-3 w-3"}),s("action.snooze")]}),e.jsxs(d,{variant:"outline",size:"sm",onClick:n=>{n.stopPropagation(),S(t.id)},disabled:m.isPending||c.isPending,children:[e.jsx(ae,{className:"h-3 w-3"}),s("action.cancel")]})]}):null,headClassName:"w-48"}],[s,m.isPending,c.isPending]);return e.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[e.jsx(E,{}),e.jsxs("main",{className:"mx-auto flex w-full max-w-7xl flex-1 flex-col gap-4 px-3 py-4 sm:px-4 pb-safe",children:[e.jsxs("header",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("h1",{className:"text-xl font-semibold",children:s("pageTitle")}),e.jsxs(d,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>T(),disabled:N,"aria-label":s("actions.refresh",{ns:"common"}),children:[N?e.jsx(ee,{className:"h-4 w-4 animate-spin"}):e.jsx(se,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("actions.refresh",{ns:"common"})})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:s("subtitle")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("label",{className:"text-sm text-text-dim",htmlFor:"status-filter",children:s("filter.status")}),e.jsxs(L,{value:r,onValueChange:t=>R({status:t}),children:[e.jsx(q,{id:"status-filter",className:"w-[160px]",children:e.jsx(A,{})}),e.jsx(F,{children:oe.map(t=>e.jsx(V,{value:t,children:s(`status.${t}`,{defaultValue:t})},t))})]})]}),e.jsx(_,{columns:B,rows:P,getRowId:t=>String(t.id),loading:z,emptyState:e.jsx(Q,{icon:e.jsx(te,{}),title:s("empty.title"),description:s("empty.description")})}),e.jsx(H,{open:f!=null,onOpenChange:t=>{t||S(null)},title:s("action.confirmCancel"),description:s("action.confirmCancelDesc"),intent:"danger",confirmLabel:s("action.cancel"),onConfirm:O}),e.jsx(de,{open:p!=null,busy:c.isPending,onOpenChange:t=>{t||g(null)},onPick:I})]})]})}function de({open:s,busy:a,onOpenChange:i,onPick:r}){const{t:l}=k(["reminders","common"]);return e.jsx(U,{open:s,onOpenChange:a?()=>{}:i,children:e.jsxs(Z,{children:[e.jsxs(G,{children:[e.jsx(J,{children:l("snooze.title")}),e.jsx(W,{children:l("snooze.description")})]}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:ce.map(o=>e.jsx(d,{type:"button",variant:"outline",disabled:a,onClick:()=>void r(o.duration),children:l(o.i18nKey)},o.duration))}),e.jsx(X,{children:e.jsx(d,{type:"button",variant:"secondary",disabled:a,onClick:()=>i(!1),children:l("actions.cancel",{ns:"common"})})})]})})}function me(s){try{const a=new Date(s);if(Number.isNaN(a.getTime()))return s;const i=new Date;return a.toDateString()===i.toDateString()?a.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit"}):a.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}export{ke as default};
|
|
12
|
-
//# sourceMappingURL=reminders-C00V-Fs9.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reminders-C00V-Fs9.js","sources":["../../node_modules/lucide-react/dist/esm/icons/bell-off.js","../../node_modules/lucide-react/dist/esm/icons/clock.js","../../src/hooks/use-reminders.ts","../../src/routes/reminders.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BellOff = createLucideIcon(\"BellOff\", [\n [\"path\", { d: \"M10.268 21a2 2 0 0 0 3.464 0\", key: \"vwvbt9\" }],\n [\n \"path\",\n {\n d: \"M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742\",\n key: \"178tsu\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }],\n [\"path\", { d: \"M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05\", key: \"1hqiys\" }]\n]);\n\nexport { BellOff as default };\n//# sourceMappingURL=bell-off.js.map\n","/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"Clock\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * useReminders — react-query wrappers for the reminders domain.\n *\n * useReminders(query) — list pending (default) or by status\n * useCancelReminder() — POST /api/reminders/:id/cancel\n * useSnoozeReminder() — POST /api/reminders/:id/snooze\n *\n * Reminders aren't on the SSE event-bus today; the page combines a\n * 5s react-query poll with a manual Refresh button. When a snooze\n * mutation lands, both the original AND the new reminder change\n * (one cancelled, one pending) — invalidating the full 'reminders'\n * key catches both.\n */\n\nimport { useQueryClient, useQuery, useMutation } from '@tanstack/react-query'\nimport { api } from '@/lib/api/endpoints'\nimport type {\n CancelReminderResponse,\n ListRemindersQuery,\n ListRemindersResponse,\n SnoozeReminderBody,\n SnoozeReminderResponse,\n} from '@/types/api'\n\nexport const remindersKeys = {\n all: ['reminders'] as const,\n list: (q: ListRemindersQuery) => ['reminders', 'list', q] as const,\n}\n\nexport function useReminders(query: ListRemindersQuery) {\n return useQuery<ListRemindersResponse>({\n queryKey: remindersKeys.list(query),\n queryFn: () => api.listReminders(query),\n refetchInterval: 5000,\n refetchIntervalInBackground: false,\n })\n}\n\nexport function useInvalidateReminders() {\n const qc = useQueryClient()\n return () => qc.invalidateQueries({ queryKey: remindersKeys.all })\n}\n\nexport function useCancelReminder() {\n const qc = useQueryClient()\n return useMutation<CancelReminderResponse, Error, number>({\n mutationFn: (id) => api.cancelReminder(id),\n onSuccess: () => qc.invalidateQueries({ queryKey: remindersKeys.all }),\n })\n}\n\nexport function useSnoozeReminder() {\n const qc = useQueryClient()\n return useMutation<\n SnoozeReminderResponse,\n Error,\n { id: number; body: SnoozeReminderBody }\n >({\n mutationFn: ({ id, body }) => api.snoozeReminder(id, body),\n onSuccess: () => qc.invalidateQueries({ queryKey: remindersKeys.all }),\n })\n}\n","/**\n * /reminders — queued-reminder list with cancel + snooze.\n *\n * Composition: Topbar + filter row + DataTable + ConfirmDialog\n * (cancel) + a custom <SnoozeDialog> with duration presets that\n * map to the backend's parseDuration vocabulary.\n *\n * Mutations only enabled on `pending` rows; firing/fired/cancelled/\n * failed stay read-only. The DataTable's last column is per-row\n * action buttons.\n *\n * No SSE channel for reminders — 5s react-query poll covers the\n * common case (reminders fire on minute boundaries; latency to\n * surface a firing transition is rarely UX-critical).\n */\n\nimport { useMemo, useState } from 'react'\nimport { useSearchParams } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Bell, BellOff, Clock, Loader2, RefreshCcw } from 'lucide-react'\n\nimport { Topbar } from '@/components/shell/topbar'\nimport { DataTable, type DataTableColumn } from '@/components/common/data-table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { StatusBadge } from '@/components/common/status-badge'\nimport { ConfirmDialog } from '@/components/common/confirm-dialog'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select'\nimport {\n useReminders,\n useCancelReminder,\n useSnoozeReminder,\n} from '@/hooks/use-reminders'\nimport { describeError } from '@/lib/api/errors'\nimport type { Reminder, ReminderStatus } from '@/types/api'\n\nconst STATUS_OPTIONS: ReminderStatus[] = ['pending', 'firing', 'fired', 'cancelled', 'failed']\n\ninterface SnoozePreset {\n /** Backend parseDuration string. */\n duration: string\n /** i18n key (inside the `snooze` section). */\n i18nKey: string\n}\n\nconst SNOOZE_PRESETS: SnoozePreset[] = [\n { duration: '5m', i18nKey: 'snooze.preset5m' },\n { duration: '30m', i18nKey: 'snooze.preset30m' },\n { duration: '1h', i18nKey: 'snooze.preset1h' },\n { duration: '1d', i18nKey: 'snooze.preset1d' },\n]\n\nexport default function RemindersRoute(): JSX.Element {\n const { t } = useTranslation(['reminders', 'common'])\n const [params, setParams] = useSearchParams()\n const status = (params.get('status') as ReminderStatus | null) ?? 'pending'\n\n const query = useMemo(\n () => ({ status, limit: 200 }),\n [status],\n )\n const { data, isLoading, isFetching, refetch } = useReminders(query)\n const reminders = data?.reminders ?? []\n\n const cancel = useCancelReminder()\n const snooze = useSnoozeReminder()\n\n const [confirmCancelId, setConfirmCancelId] = useState<number | null>(null)\n const [snoozeTargetId, setSnoozeTargetId] = useState<number | null>(null)\n\n function patchParams(patch: Record<string, string | null>): void {\n const next = new URLSearchParams(params)\n for (const [k, v] of Object.entries(patch)) {\n if (v == null || v === '') next.delete(k)\n else next.set(k, v)\n }\n setParams(next, { replace: true })\n }\n\n async function onConfirmCancel(): Promise<void> {\n if (confirmCancelId == null) return\n try {\n await cancel.mutateAsync(confirmCancelId)\n toast.success(t('toast.cancelled'))\n } catch (err) {\n const { message } = describeError(err, t)\n toast.error(message)\n throw err\n }\n }\n\n async function onConfirmSnooze(duration: string): Promise<void> {\n if (snoozeTargetId == null) return\n try {\n await snooze.mutateAsync({ id: snoozeTargetId, body: { duration } })\n toast.success(t('snooze.toastOk', { duration }))\n setSnoozeTargetId(null)\n } catch (err) {\n const { message } = describeError(err, t)\n toast.error(message)\n }\n }\n\n const columns: DataTableColumn<Reminder>[] = useMemo(\n () => [\n {\n id: 'id',\n header: t('col.id'),\n cell: (r) => <span className=\"tabular-nums text-text-dim\">#{r.id}</span>,\n headClassName: 'w-16',\n },\n {\n id: 'fireAt',\n header: t('col.fireAt'),\n cell: (r) => <span className=\"font-medium tabular-nums\">{formatTime(r.fire_at)}</span>,\n headClassName: 'w-40',\n },\n {\n id: 'text',\n header: t('col.text'),\n cell: (r) => <span className=\"line-clamp-2 text-text-dim\">{r.text}</span>,\n asCardTitle: true,\n },\n {\n id: 'status',\n header: t('col.status'),\n cell: (r) => (\n <StatusBadge status={r.status}>\n {t(`status.${r.status}`, { defaultValue: r.status })}\n </StatusBadge>\n ),\n headClassName: 'w-28',\n },\n {\n id: 'platform',\n header: t('col.platform'),\n cell: (r) => <span className=\"text-text-dim\">{r.platform}</span>,\n headClassName: 'w-24',\n hideOnMobile: true,\n },\n {\n id: 'recurrence',\n header: t('col.recurrence'),\n cell: (r) =>\n r.recurrence_label ? (\n <Badge variant=\"info\">{r.recurrence_label}</Badge>\n ) : (\n <span className=\"text-text-muted\">—</span>\n ),\n headClassName: 'w-36',\n hideOnMobile: true,\n },\n {\n id: 'source',\n header: t('col.source'),\n cell: (r) => (\n <span className=\"text-text-dim\">{t(`source.${r.source}`, { defaultValue: r.source })}</span>\n ),\n headClassName: 'w-24',\n hideOnMobile: true,\n },\n {\n id: 'actions',\n header: '',\n cell: (r) =>\n r.status === 'pending' ? (\n <div className=\"flex justify-end gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n setSnoozeTargetId(r.id)\n }}\n disabled={snooze.isPending || cancel.isPending}\n >\n <Clock className=\"h-3 w-3\" />\n {t('action.snooze')}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation()\n setConfirmCancelId(r.id)\n }}\n disabled={cancel.isPending || snooze.isPending}\n >\n <BellOff className=\"h-3 w-3\" />\n {t('action.cancel')}\n </Button>\n </div>\n ) : null,\n headClassName: 'w-48',\n },\n ],\n [t, cancel.isPending, snooze.isPending],\n )\n\n return (\n <div className=\"flex min-h-dvh flex-col bg-bg\">\n <Topbar />\n\n <main className=\"mx-auto flex w-full max-w-7xl flex-1 flex-col gap-4 px-3 py-4 sm:px-4 pb-safe\">\n <header className=\"flex flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <h1 className=\"text-xl font-semibold\">{t('pageTitle')}</h1>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"ml-auto\"\n onClick={() => refetch()}\n disabled={isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {isFetching ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('actions.refresh', { ns: 'common' })}</span>\n </Button>\n </div>\n <p className=\"text-sm text-text-dim\">{t('subtitle')}</p>\n </header>\n\n {/* Filter row */}\n <div className=\"flex flex-wrap items-center gap-2\">\n <label className=\"text-sm text-text-dim\" htmlFor=\"status-filter\">\n {t('filter.status')}\n </label>\n <Select\n value={status}\n onValueChange={(v) => patchParams({ status: v })}\n >\n <SelectTrigger id=\"status-filter\" className=\"w-[160px]\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STATUS_OPTIONS.map((s) => (\n <SelectItem key={s} value={s}>\n {t(`status.${s}`, { defaultValue: s })}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <DataTable\n columns={columns}\n rows={reminders}\n getRowId={(r) => String(r.id)}\n loading={isLoading}\n emptyState={\n <EmptyState\n icon={<Bell />}\n title={t('empty.title')}\n description={t('empty.description')}\n />\n }\n />\n\n <ConfirmDialog\n open={confirmCancelId != null}\n onOpenChange={(open) => {\n if (!open) setConfirmCancelId(null)\n }}\n title={t('action.confirmCancel')}\n description={t('action.confirmCancelDesc')}\n intent=\"danger\"\n confirmLabel={t('action.cancel')}\n onConfirm={onConfirmCancel}\n />\n\n <SnoozeDialog\n open={snoozeTargetId != null}\n busy={snooze.isPending}\n onOpenChange={(open) => {\n if (!open) setSnoozeTargetId(null)\n }}\n onPick={onConfirmSnooze}\n />\n </main>\n </div>\n )\n}\n\ninterface SnoozeDialogProps {\n open: boolean\n busy: boolean\n onOpenChange: (open: boolean) => void\n onPick: (duration: string) => void | Promise<void>\n}\n\nfunction SnoozeDialog({ open, busy, onOpenChange, onPick }: SnoozeDialogProps): JSX.Element {\n const { t } = useTranslation(['reminders', 'common'])\n return (\n <Dialog open={open} onOpenChange={busy ? () => {} : onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{t('snooze.title')}</DialogTitle>\n <DialogDescription>{t('snooze.description')}</DialogDescription>\n </DialogHeader>\n <div className=\"grid grid-cols-2 gap-2\">\n {SNOOZE_PRESETS.map((p) => (\n <Button\n key={p.duration}\n type=\"button\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => void onPick(p.duration)}\n >\n {t(p.i18nKey)}\n </Button>\n ))}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={busy}\n onClick={() => onOpenChange(false)}\n >\n {t('actions.cancel', { ns: 'common' })}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction formatTime(iso: string): string {\n try {\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return iso\n const now = new Date()\n const sameDay = d.toDateString() === now.toDateString()\n if (sameDay) {\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })\n }\n return d.toLocaleString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' })\n } catch {\n return iso\n }\n}\n"],"names":["BellOff","createLucideIcon","Clock","remindersKeys","q","useReminders","query","useQuery","api","useCancelReminder","qc","useQueryClient","useMutation","id","useSnoozeReminder","body","STATUS_OPTIONS","SNOOZE_PRESETS","RemindersRoute","t","useTranslation","params","setParams","useSearchParams","status","useMemo","data","isLoading","isFetching","refetch","reminders","cancel","snooze","confirmCancelId","setConfirmCancelId","useState","snoozeTargetId","setSnoozeTargetId","patchParams","patch","next","k","v","onConfirmCancel","toast","err","message","describeError","onConfirmSnooze","duration","columns","r","jsxs","jsx","formatTime","StatusBadge","Badge","Button","e","Topbar","Loader2","RefreshCcw","Select","SelectTrigger","SelectValue","SelectContent","s","SelectItem","DataTable","EmptyState","Bell","ConfirmDialog","open","SnoozeDialog","busy","onOpenChange","onPick","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","p","DialogFooter","iso","d","now"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as n}from"./useQuery-DIlm0vJ-.js";import{a as i,b as u,o as t}from"./index-CuNnG-5O.js";const r={all:["heartbeat"],list:["heartbeat","list"]};function c(e){return`${e.platform}:${e.channelId}:${e.threadId}`}function d(){return n({queryKey:r.list,queryFn:()=>t.get("/api/heartbeat/bindings"),refetchInterval:1e4,refetchIntervalInBackground:!1})}function g(){const e=i();return u({mutationFn:({row:s,op:a})=>t.post(`/api/heartbeat/bindings/${encodeURIComponent(c(s))}/${a}`),onSuccess:()=>e.invalidateQueries({queryKey:r.all})})}const o={all:["goals"],list:["goals","list"]};function f(){return n({queryKey:o.list,queryFn:()=>t.get("/api/goals"),refetchInterval:3e4})}function b(){const e=i();return u({mutationFn:({id:s,status:a})=>t.put(`/api/goals/${s}/status`,{body:{status:a}}),onSuccess:()=>e.invalidateQueries({queryKey:o.all})})}const l={all:["asks"],list:["asks","list"]};function q(){return n({queryKey:l.list,queryFn:()=>t.get("/api/asks/pending"),refetchInterval:5e3})}function h(){const e=i();return u({mutationFn:s=>t.post(`/api/asks/pending/${encodeURIComponent(s)}/cancel`),onSuccess:()=>e.invalidateQueries({queryKey:l.all})})}export{g as a,f as b,b as c,q as d,h as e,d as u};
|
|
2
|
-
//# sourceMappingURL=use-background-tasks-DHo3Hnu9.js.map
|