agim-cli 1.2.128 → 1.2.129

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 (215) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/web/public/assets/{a2a-CbxNgf9H.js → a2a-Bp_OpTfW.js} +2 -2
  3. package/dist/web/public/assets/{a2a-CbxNgf9H.js.map → a2a-Bp_OpTfW.js.map} +1 -1
  4. package/dist/web/public/assets/{activity-C6r508cN.js → activity-B5erGuWa.js} +2 -2
  5. package/dist/web/public/assets/{activity-C6r508cN.js.map → activity-B5erGuWa.js.map} +1 -1
  6. package/dist/web/public/assets/{admins-C0BJw6X9.js → admins-D3j7wkvL.js} +3 -3
  7. package/dist/web/public/assets/{admins-C0BJw6X9.js.map → admins-D3j7wkvL.js.map} +1 -1
  8. package/dist/web/public/assets/{agents-DOW1_NGT.js → agents-Cb3Vb2-8.js} +3 -3
  9. package/dist/web/public/assets/{agents-DOW1_NGT.js.map → agents-Cb3Vb2-8.js.map} +1 -1
  10. package/dist/web/public/assets/{approvals-CyPhYcGG.js → approvals-BZULwrl5.js} +3 -3
  11. package/dist/web/public/assets/{approvals-CyPhYcGG.js.map → approvals-BZULwrl5.js.map} +1 -1
  12. package/dist/web/public/assets/arrow-down-OdSfpgG4.js +7 -0
  13. package/dist/web/public/assets/arrow-down-OdSfpgG4.js.map +1 -0
  14. package/dist/web/public/assets/arrow-up-DtrvOH7Z.js +7 -0
  15. package/dist/web/public/assets/arrow-up-DtrvOH7Z.js.map +1 -0
  16. package/dist/web/public/assets/{asks-B6L3PSml.js → asks-BaVT-eFe.js} +3 -3
  17. package/dist/web/public/assets/{asks-B6L3PSml.js.map → asks-BaVT-eFe.js.map} +1 -1
  18. package/dist/web/public/assets/audit-CSk2rv6z.js +2 -0
  19. package/dist/web/public/assets/{audit-CCGCdw6P.js.map → audit-CSk2rv6z.js.map} +1 -1
  20. package/dist/web/public/assets/{bell-OiL3Thk2.js → bell-DifbuUaI.js} +2 -2
  21. package/dist/web/public/assets/{bell-OiL3Thk2.js.map → bell-DifbuUaI.js.map} +1 -1
  22. package/dist/web/public/assets/{bgjobs-vhVtnLSx.js → bgjobs-D3wsuZBR.js} +3 -3
  23. package/dist/web/public/assets/{bgjobs-vhVtnLSx.js.map → bgjobs-D3wsuZBR.js.map} +1 -1
  24. package/dist/web/public/assets/{brain-n56pZ1TQ.js → brain-BH9ObIfA.js} +2 -2
  25. package/dist/web/public/assets/{brain-n56pZ1TQ.js.map → brain-BH9ObIfA.js.map} +1 -1
  26. package/dist/web/public/assets/{briefcase-BscVfAjp.js → briefcase-CZqK5oy3.js} +2 -2
  27. package/dist/web/public/assets/{briefcase-BscVfAjp.js.map → briefcase-CZqK5oy3.js.map} +1 -1
  28. package/dist/web/public/assets/{browser-ponyfill-BOcGq8h9.js → browser-ponyfill-BUutOaRz.js} +2 -2
  29. package/dist/web/public/assets/{browser-ponyfill-BOcGq8h9.js.map → browser-ponyfill-BUutOaRz.js.map} +1 -1
  30. package/dist/web/public/assets/chat-gOU1pe0E.js +7 -0
  31. package/dist/web/public/assets/chat-gOU1pe0E.js.map +1 -0
  32. package/dist/web/public/assets/chevron-left-BtuaBNRZ.js +7 -0
  33. package/dist/web/public/assets/chevron-left-BtuaBNRZ.js.map +1 -0
  34. package/dist/web/public/assets/{chevron-right-trO6yoBr.js → chevron-right-uDVVnuGu.js} +2 -2
  35. package/dist/web/public/assets/{chevron-right-trO6yoBr.js.map → chevron-right-uDVVnuGu.js.map} +1 -1
  36. package/dist/web/public/assets/{circle-check-B_d7dBl5.js → circle-check-VgYKnBhy.js} +2 -2
  37. package/dist/web/public/assets/{circle-check-B_d7dBl5.js.map → circle-check-VgYKnBhy.js.map} +1 -1
  38. package/dist/web/public/assets/{circle-check-big-D6TvCoDM.js → circle-check-big-7idAFtyL.js} +2 -2
  39. package/dist/web/public/assets/{circle-check-big-D6TvCoDM.js.map → circle-check-big-7idAFtyL.js.map} +1 -1
  40. package/dist/web/public/assets/{circle-x-OcRzGLRb.js → circle-x-8dhkvHlT.js} +2 -2
  41. package/dist/web/public/assets/{circle-x-OcRzGLRb.js.map → circle-x-8dhkvHlT.js.map} +1 -1
  42. package/dist/web/public/assets/confirm-dialog-_BtUs6oW.js +2 -0
  43. package/dist/web/public/assets/{confirm-dialog-DD1ZW1XE.js.map → confirm-dialog-_BtUs6oW.js.map} +1 -1
  44. package/dist/web/public/assets/copy-Ba1min4z.js +7 -0
  45. package/dist/web/public/assets/copy-Ba1min4z.js.map +1 -0
  46. package/dist/web/public/assets/{data-table-bhqK389v.js → data-table-BVcXWtPw.js} +3 -3
  47. package/dist/web/public/assets/{data-table-bhqK389v.js.map → data-table-BVcXWtPw.js.map} +1 -1
  48. package/dist/web/public/assets/dialog-BVYFRXlI.js +6 -0
  49. package/dist/web/public/assets/{dialog-D5BsJN2q.js.map → dialog-BVYFRXlI.js.map} +1 -1
  50. package/dist/web/public/assets/{download-CcO4RAuC.js → download-DYc5g_1W.js} +3 -3
  51. package/dist/web/public/assets/{download-CcO4RAuC.js.map → download-DYc5g_1W.js.map} +1 -1
  52. package/dist/web/public/assets/{email-Dy3UoyzF.js → email-6vlGBJXY.js} +3 -3
  53. package/dist/web/public/assets/{email-Dy3UoyzF.js.map → email-6vlGBJXY.js.map} +1 -1
  54. package/dist/web/public/assets/{empty-state-CwUKG8xX.js → empty-state-WHzNYVaT.js} +2 -2
  55. package/dist/web/public/assets/{empty-state-CwUKG8xX.js.map → empty-state-WHzNYVaT.js.map} +1 -1
  56. package/dist/web/public/assets/{external-link-wf5VhNXd.js → external-link-CfQZDer8.js} +2 -2
  57. package/dist/web/public/assets/{external-link-wf5VhNXd.js.map → external-link-CfQZDer8.js.map} +1 -1
  58. package/dist/web/public/assets/{eye-8lKlwbZE.js → eye-PzqPB6N6.js} +3 -3
  59. package/dist/web/public/assets/{eye-8lKlwbZE.js.map → eye-PzqPB6N6.js.map} +1 -1
  60. package/dist/web/public/assets/facts-NmBeyMpC.js +2 -0
  61. package/dist/web/public/assets/{facts-Cfu6Lg3H.js.map → facts-NmBeyMpC.js.map} +1 -1
  62. package/dist/web/public/assets/{goals-BQkhal_h.js → goals-BfMwQtYm.js} +4 -4
  63. package/dist/web/public/assets/{goals-BQkhal_h.js.map → goals-BfMwQtYm.js.map} +1 -1
  64. package/dist/web/public/assets/health-D46iQ6Hj.js +2 -0
  65. package/dist/web/public/assets/{health-BObMAngj.js.map → health-D46iQ6Hj.js.map} +1 -1
  66. package/dist/web/public/assets/{heart-pulse-DI33Rxyr.js → heart-pulse-BHz53Ggd.js} +2 -2
  67. package/dist/web/public/assets/{heart-pulse-DI33Rxyr.js.map → heart-pulse-BHz53Ggd.js.map} +1 -1
  68. package/dist/web/public/assets/{heartbeat-Bc4SZawQ.js → heartbeat-DBpc9rKL.js} +3 -3
  69. package/dist/web/public/assets/{heartbeat-Bc4SZawQ.js.map → heartbeat-DBpc9rKL.js.map} +1 -1
  70. package/dist/web/public/assets/{hot-BXYotT26.js → hot-D_-tARKX.js} +4 -9
  71. package/dist/web/public/assets/hot-D_-tARKX.js.map +1 -0
  72. package/dist/web/public/assets/{index-CGaI-i4K.js → index-DXI13nSQ.js} +29 -29
  73. package/dist/web/public/assets/index-DXI13nSQ.js.map +1 -0
  74. package/dist/web/public/assets/index-f1K5Q2Yz.css +1 -0
  75. package/dist/web/public/assets/{installed-DswmDcea.js → installed-BtOgT0Ea.js} +2 -2
  76. package/dist/web/public/assets/{installed-DswmDcea.js.map → installed-BtOgT0Ea.js.map} +1 -1
  77. package/dist/web/public/assets/jobs-DUoPbupO.js +2 -0
  78. package/dist/web/public/assets/{jobs-DWBDqKx-.js.map → jobs-DUoPbupO.js.map} +1 -1
  79. package/dist/web/public/assets/layout-BpS7td-S.js +2 -0
  80. package/dist/web/public/assets/layout-BpS7td-S.js.map +1 -0
  81. package/dist/web/public/assets/layout-C1EVvCs8.js +2 -0
  82. package/dist/web/public/assets/{layout-D7gNMUDZ.js.map → layout-C1EVvCs8.js.map} +1 -1
  83. package/dist/web/public/assets/layout-C3e8vPrG.js +2 -0
  84. package/dist/web/public/assets/{layout-DJKxW33x.js.map → layout-C3e8vPrG.js.map} +1 -1
  85. package/dist/web/public/assets/layout-DkoRqhBs.js +2 -0
  86. package/dist/web/public/assets/{layout-B5rK_h6Q.js.map → layout-DkoRqhBs.js.map} +1 -1
  87. package/dist/web/public/assets/layout-wuoOyazR.js +2 -0
  88. package/dist/web/public/assets/{layout-ByUY6XZQ.js.map → layout-wuoOyazR.js.map} +1 -1
  89. package/dist/web/public/assets/{llm-CPOd98Hy.js → llm-iuvigJxr.js} +2 -2
  90. package/dist/web/public/assets/{llm-CPOd98Hy.js.map → llm-iuvigJxr.js.map} +1 -1
  91. package/dist/web/public/assets/{loader-circle-BBIfyATA.js → loader-circle-BS5FFFg-.js} +2 -2
  92. package/dist/web/public/assets/{loader-circle-BBIfyATA.js.map → loader-circle-BS5FFFg-.js.map} +1 -1
  93. package/dist/web/public/assets/{map-pin-Bg7JuU7F.js → map-pin-CRS6YW4i.js} +2 -2
  94. package/dist/web/public/assets/{map-pin-Bg7JuU7F.js.map → map-pin-CRS6YW4i.js.map} +1 -1
  95. package/dist/web/public/assets/{mcp-DGxGN2iX.js → mcp-PWEuZOJ_.js} +3 -3
  96. package/dist/web/public/assets/{mcp-DGxGN2iX.js.map → mcp-PWEuZOJ_.js.map} +1 -1
  97. package/dist/web/public/assets/{memos-LpUpTmYL.js → memos-C6i1hbv9.js} +3 -3
  98. package/dist/web/public/assets/{memos-LpUpTmYL.js.map → memos-C6i1hbv9.js.map} +1 -1
  99. package/dist/web/public/assets/messengers-CZ3eL15d.js +2 -0
  100. package/dist/web/public/assets/messengers-CZ3eL15d.js.map +1 -0
  101. package/dist/web/public/assets/mobile-_rEEG_kX.js +7 -0
  102. package/dist/web/public/assets/mobile-_rEEG_kX.js.map +1 -0
  103. package/dist/web/public/assets/{native-agent-CPkYGY3I.js → native-agent-B-Id8sOl.js} +4 -4
  104. package/dist/web/public/assets/{native-agent-CPkYGY3I.js.map → native-agent-B-Id8sOl.js.map} +1 -1
  105. package/dist/web/public/assets/{network-DHrX3RcZ.js → network-MVE8s4TA.js} +2 -2
  106. package/dist/web/public/assets/{network-DHrX3RcZ.js.map → network-MVE8s4TA.js.map} +1 -1
  107. package/dist/web/public/assets/{outbox-T3NnYmK0.js → outbox-BRpgAP1d.js} +3 -3
  108. package/dist/web/public/assets/{outbox-T3NnYmK0.js.map → outbox-BRpgAP1d.js.map} +1 -1
  109. package/dist/web/public/assets/pagination-dm3r6K_2.js +12 -0
  110. package/dist/web/public/assets/pagination-dm3r6K_2.js.map +1 -0
  111. package/dist/web/public/assets/persona-Oq3C-gEw.js +2 -0
  112. package/dist/web/public/assets/{persona-CHz80XDk.js.map → persona-Oq3C-gEw.js.map} +1 -1
  113. package/dist/web/public/assets/{play-BNtSkb5l.js → play-COQw7BqX.js} +2 -2
  114. package/dist/web/public/assets/{play-BNtSkb5l.js.map → play-COQw7BqX.js.map} +1 -1
  115. package/dist/web/public/assets/{plus-CYsjCf6w.js → plus-CdOyGoU1.js} +2 -2
  116. package/dist/web/public/assets/{plus-CYsjCf6w.js.map → plus-CdOyGoU1.js.map} +1 -1
  117. package/dist/web/public/assets/policy-docXezae.js +2 -0
  118. package/dist/web/public/assets/{policy-CtKRzual.js.map → policy-docXezae.js.map} +1 -1
  119. package/dist/web/public/assets/qr-code-8putJTrW.js +7 -0
  120. package/dist/web/public/assets/qr-code-8putJTrW.js.map +1 -0
  121. package/dist/web/public/assets/{react-C9F3QeMB.js → react-Cb2sDjhD.js} +2 -2
  122. package/dist/web/public/assets/{react-C9F3QeMB.js.map → react-Cb2sDjhD.js.map} +1 -1
  123. package/dist/web/public/assets/{refresh-ccw-DpPWcwTg.js → refresh-ccw-BPKXoMZa.js} +2 -2
  124. package/dist/web/public/assets/{refresh-ccw-DpPWcwTg.js.map → refresh-ccw-BPKXoMZa.js.map} +1 -1
  125. package/dist/web/public/assets/{reminders-R14lWHEJ.js → reminders-CP2qtNSr.js} +3 -3
  126. package/dist/web/public/assets/{reminders-R14lWHEJ.js.map → reminders-CP2qtNSr.js.map} +1 -1
  127. package/dist/web/public/assets/{save-beGooRNy.js → save-BXCmgeEj.js} +2 -2
  128. package/dist/web/public/assets/{save-beGooRNy.js.map → save-BXCmgeEj.js.map} +1 -1
  129. package/dist/web/public/assets/{schedules-fxKnDnxp.js → schedules-DVaY38v1.js} +3 -3
  130. package/dist/web/public/assets/{schedules-fxKnDnxp.js.map → schedules-DVaY38v1.js.map} +1 -1
  131. package/dist/web/public/assets/{search-DzgimpPy.js → search-B-wDhzjs.js} +3 -3
  132. package/dist/web/public/assets/{search-DzgimpPy.js.map → search-B-wDhzjs.js.map} +1 -1
  133. package/dist/web/public/assets/{search-BzOAg0Rb.js → search-DzexDAbr.js} +2 -2
  134. package/dist/web/public/assets/{search-BzOAg0Rb.js.map → search-DzexDAbr.js.map} +1 -1
  135. package/dist/web/public/assets/security-FHN-b43T.js +2 -0
  136. package/dist/web/public/assets/{security-Dw1mh68G.js.map → security-FHN-b43T.js.map} +1 -1
  137. package/dist/web/public/assets/{service-CB55xtmh.js → service-DXGUZTCp.js} +3 -3
  138. package/dist/web/public/assets/{service-CB55xtmh.js.map → service-DXGUZTCp.js.map} +1 -1
  139. package/dist/web/public/assets/{shield-alert-C2IO43co.js → shield-alert-BM0-khVy.js} +2 -2
  140. package/dist/web/public/assets/{shield-alert-C2IO43co.js.map → shield-alert-BM0-khVy.js.map} +1 -1
  141. package/dist/web/public/assets/{status-badge-wL5IXJx_.js → status-badge-DeESb2dc.js} +2 -2
  142. package/dist/web/public/assets/{status-badge-wL5IXJx_.js.map → status-badge-DeESb2dc.js.map} +1 -1
  143. package/dist/web/public/assets/{subtasks-CbLAkygG.js → subtasks-DOwo6FnZ.js} +3 -3
  144. package/dist/web/public/assets/{subtasks-CbLAkygG.js.map → subtasks-DOwo6FnZ.js.map} +1 -1
  145. package/dist/web/public/assets/table-oUi0mGOn.js +2 -0
  146. package/dist/web/public/assets/{table-9FRavyyI.js.map → table-oUi0mGOn.js.map} +1 -1
  147. package/dist/web/public/assets/{topn-BE7RU5cV.js → topn-D1LQXoLo.js} +3 -3
  148. package/dist/web/public/assets/{topn-BE7RU5cV.js.map → topn-D1LQXoLo.js.map} +1 -1
  149. package/dist/web/public/assets/{trash-2-DL2FAuYX.js → trash-2-CTkSvnZX.js} +2 -2
  150. package/dist/web/public/assets/{trash-2-DL2FAuYX.js.map → trash-2-CTkSvnZX.js.map} +1 -1
  151. package/dist/web/public/assets/use-background-tasks-BkUIDOxX.js +2 -0
  152. package/dist/web/public/assets/{use-background-tasks-XHuIYwrT.js.map → use-background-tasks-BkUIDOxX.js.map} +1 -1
  153. package/dist/web/public/assets/{use-event-stream-BGeFcayX.js → use-event-stream-DgGpGKop.js} +2 -2
  154. package/dist/web/public/assets/{use-event-stream-BGeFcayX.js.map → use-event-stream-DgGpGKop.js.map} +1 -1
  155. package/dist/web/public/assets/use-llm-admin-BrJMMEz5.js +2 -0
  156. package/dist/web/public/assets/{use-llm-admin-Dm8PcjN-.js.map → use-llm-admin-BrJMMEz5.js.map} +1 -1
  157. package/dist/web/public/assets/use-memory-CbTYEBTc.js +2 -0
  158. package/dist/web/public/assets/{use-memory-C3GgMqiJ.js.map → use-memory-CbTYEBTc.js.map} +1 -1
  159. package/dist/web/public/assets/{use-observability-BQa4b0Uk.js → use-observability-Bum0mmDO.js} +2 -2
  160. package/dist/web/public/assets/{use-observability-BQa4b0Uk.js.map → use-observability-Bum0mmDO.js.map} +1 -1
  161. package/dist/web/public/assets/use-settings-DJlVLnjo.js +2 -0
  162. package/dist/web/public/assets/{use-settings-CrkXdLrr.js.map → use-settings-DJlVLnjo.js.map} +1 -1
  163. package/dist/web/public/assets/use-workspace-BJZUfkqw.js +2 -0
  164. package/dist/web/public/assets/{use-workspace-Csq4sxlY.js.map → use-workspace-BJZUfkqw.js.map} +1 -1
  165. package/dist/web/public/assets/useQuery-CEwGD94N.js +2 -0
  166. package/dist/web/public/assets/{useQuery-ByZlZXlw.js.map → useQuery-CEwGD94N.js.map} +1 -1
  167. package/dist/web/public/assets/vector-BqffHZmp.js +2 -0
  168. package/dist/web/public/assets/{vector-BmpvJTWt.js.map → vector-BqffHZmp.js.map} +1 -1
  169. package/dist/web/public/assets/{viewer-BOSX-lUS.js → viewer-CKTTV-Wt.js} +4 -4
  170. package/dist/web/public/assets/{viewer-BOSX-lUS.js.map → viewer-CKTTV-Wt.js.map} +1 -1
  171. package/dist/web/public/assets/{workspace-DTbEdEyD.js → workspace-DQphgYwy.js} +3 -3
  172. package/dist/web/public/assets/{workspace-DTbEdEyD.js.map → workspace-DQphgYwy.js.map} +1 -1
  173. package/dist/web/public/assets/workspaces-BOA3TuDS.js +7 -0
  174. package/dist/web/public/assets/{workspaces-BIZGVK8F.js.map → workspaces-BOA3TuDS.js.map} +1 -1
  175. package/dist/web/public/assets/{x-BLllJ8d_.js → x-OHUicFfn.js} +2 -2
  176. package/dist/web/public/assets/{x-BLllJ8d_.js.map → x-OHUicFfn.js.map} +1 -1
  177. package/dist/web/public/index.html +3 -3
  178. package/dist/web/public/m/login.html +124 -0
  179. package/dist/web/server.d.ts.map +1 -1
  180. package/dist/web/server.js +103 -1
  181. package/dist/web/server.js.map +1 -1
  182. package/package.json +1 -1
  183. package/dist/web/public/assets/arrow-up-CZr2LH5e.js +0 -12
  184. package/dist/web/public/assets/arrow-up-CZr2LH5e.js.map +0 -1
  185. package/dist/web/public/assets/audit-CCGCdw6P.js +0 -2
  186. package/dist/web/public/assets/confirm-dialog-DD1ZW1XE.js +0 -2
  187. package/dist/web/public/assets/dialog-D5BsJN2q.js +0 -6
  188. package/dist/web/public/assets/facts-Cfu6Lg3H.js +0 -2
  189. package/dist/web/public/assets/health-BObMAngj.js +0 -2
  190. package/dist/web/public/assets/hot-BXYotT26.js.map +0 -1
  191. package/dist/web/public/assets/index-CGaI-i4K.js.map +0 -1
  192. package/dist/web/public/assets/index-De8LfCtL.css +0 -1
  193. package/dist/web/public/assets/jobs-DWBDqKx-.js +0 -2
  194. package/dist/web/public/assets/layout-B5rK_h6Q.js +0 -2
  195. package/dist/web/public/assets/layout-ByUY6XZQ.js +0 -2
  196. package/dist/web/public/assets/layout-CX3nXpWb.js +0 -2
  197. package/dist/web/public/assets/layout-CX3nXpWb.js.map +0 -1
  198. package/dist/web/public/assets/layout-D7gNMUDZ.js +0 -2
  199. package/dist/web/public/assets/layout-DJKxW33x.js +0 -2
  200. package/dist/web/public/assets/messengers-CWMsJz1e.js +0 -7
  201. package/dist/web/public/assets/messengers-CWMsJz1e.js.map +0 -1
  202. package/dist/web/public/assets/pagination-ANxQzaRV.js +0 -17
  203. package/dist/web/public/assets/pagination-ANxQzaRV.js.map +0 -1
  204. package/dist/web/public/assets/persona-CHz80XDk.js +0 -2
  205. package/dist/web/public/assets/policy-CtKRzual.js +0 -2
  206. package/dist/web/public/assets/security-Dw1mh68G.js +0 -2
  207. package/dist/web/public/assets/table-9FRavyyI.js +0 -2
  208. package/dist/web/public/assets/use-background-tasks-XHuIYwrT.js +0 -2
  209. package/dist/web/public/assets/use-llm-admin-Dm8PcjN-.js +0 -2
  210. package/dist/web/public/assets/use-memory-C3GgMqiJ.js +0 -2
  211. package/dist/web/public/assets/use-settings-CrkXdLrr.js +0 -2
  212. package/dist/web/public/assets/use-workspace-Csq4sxlY.js +0 -2
  213. package/dist/web/public/assets/useQuery-ByZlZXlw.js +0 -2
  214. package/dist/web/public/assets/vector-BmpvJTWt.js +0 -2
  215. package/dist/web/public/assets/workspaces-BIZGVK8F.js +0 -7
@@ -1,7 +1,7 @@
1
- import{z as t}from"./index-CGaI-i4K.js";/**
1
+ import{n as t}from"./index-DXI13nSQ.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const h=t("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);export{h as C};
7
- //# sourceMappingURL=chevron-right-trO6yoBr.js.map
7
+ //# sourceMappingURL=chevron-right-uDVVnuGu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chevron-right-trO6yoBr.js","sources":["../../node_modules/lucide-react/dist/esm/icons/chevron-right.js"],"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 ChevronRight = createLucideIcon(\"ChevronRight\", [\n [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n"],"names":["ChevronRight","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"chevron-right-uDVVnuGu.js","sources":["../../node_modules/lucide-react/dist/esm/icons/chevron-right.js"],"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 ChevronRight = createLucideIcon(\"ChevronRight\", [\n [\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]\n]);\n\nexport { ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n"],"names":["ChevronRight","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{z as c}from"./index-CGaI-i4K.js";/**
1
+ import{n as c}from"./index-DXI13nSQ.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const r=c("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);export{r as C};
7
- //# sourceMappingURL=circle-check-B_d7dBl5.js.map
7
+ //# sourceMappingURL=circle-check-VgYKnBhy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"circle-check-B_d7dBl5.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-check.js"],"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 CircleCheck = createLucideIcon(\"CircleCheck\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n"],"names":["CircleCheck","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAcC,EAAiB,cAAe,CAClD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"circle-check-VgYKnBhy.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-check.js"],"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 CircleCheck = createLucideIcon(\"CircleCheck\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n]);\n\nexport { CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n"],"names":["CircleCheck","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAcC,EAAiB,cAAe,CAClD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{z as e}from"./index-CGaI-i4K.js";/**
1
+ import{n as e}from"./index-DXI13nSQ.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const t=e("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);export{t as C};
7
- //# sourceMappingURL=circle-check-big-D6TvCoDM.js.map
7
+ //# sourceMappingURL=circle-check-big-7idAFtyL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"circle-check-big-D6TvCoDM.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-check-big.js"],"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 CircleCheckBig = createLucideIcon(\"CircleCheckBig\", [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n]);\n\nexport { CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n"],"names":["CircleCheckBig","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAiBC,EAAiB,iBAAkB,CACxD,CAAC,OAAQ,CAAE,EAAG,kCAAmC,IAAK,QAAQ,CAAE,EAChE,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"circle-check-big-7idAFtyL.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-check-big.js"],"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 CircleCheckBig = createLucideIcon(\"CircleCheckBig\", [\n [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n]);\n\nexport { CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n"],"names":["CircleCheckBig","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAiBC,EAAiB,iBAAkB,CACxD,CAAC,OAAQ,CAAE,EAAG,kCAAmC,IAAK,QAAQ,CAAE,EAChE,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{z as c}from"./index-CGaI-i4K.js";/**
1
+ import{n as c}from"./index-DXI13nSQ.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const r=c("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);export{r as C};
7
- //# sourceMappingURL=circle-x-OcRzGLRb.js.map
7
+ //# sourceMappingURL=circle-x-8dhkvHlT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"circle-x-OcRzGLRb.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-x.js"],"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 CircleX = createLucideIcon(\"CircleX\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n]);\n\nexport { CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n"],"names":["CircleX","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAUC,EAAiB,UAAW,CAC1C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"circle-x-8dhkvHlT.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-x.js"],"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 CircleX = createLucideIcon(\"CircleX\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n]);\n\nexport { CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n"],"names":["CircleX","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAUC,EAAiB,UAAW,CAC1C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,CAAC","x_google_ignoreList":[0]}
@@ -0,0 +1,2 @@
1
+ import{u as j,j as a,B as r}from"./index-DXI13nSQ.js";import{r as n}from"./react-Cb2sDjhD.js";import{D as y,a as D,b,c as g,d as h,e as p}from"./dialog-BVYFRXlI.js";function C({open:c,onOpenChange:t,title:d,description:e,confirmLabel:u,cancelLabel:f,intent:m="default",onConfirm:l}){const{t:i}=j("common"),[s,o]=n.useState(!1),x=n.useCallback(async()=>{o(!0);try{await l(),t(!1)}catch{}finally{o(!1)}},[l,t]);return a.jsx(y,{open:c,onOpenChange:s?()=>{}:t,children:a.jsxs(D,{children:[a.jsxs(b,{children:[a.jsx(g,{children:d}),e&&a.jsx(h,{children:e})]}),a.jsxs(p,{children:[a.jsx(r,{type:"button",variant:"secondary",onClick:()=>t(!1),disabled:s,children:f??i("actions.cancel")}),a.jsx(r,{type:"button",variant:m==="danger"?"destructive":"default",onClick:x,disabled:s,"aria-busy":s,children:s?i("states.saving"):u??i("actions.confirm")})]})]})})}C.displayName="ConfirmDialog";export{C};
2
+ //# sourceMappingURL=confirm-dialog-_BtUs6oW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-dialog-DD1ZW1XE.js","sources":["../../src/components/common/confirm-dialog.tsx"],"sourcesContent":["/**\n * ConfirmDialog — unified secondary-confirmation for destructive /\n * irreversible actions: delete fact, cancel job, revoke approval,\n * drop reminder, prune memos, etc.\n *\n * Why a wrapper: the v1 web admin had 3+ near-duplicate confirm\n * patterns (alert(), inline ▼ \"Are you sure?\" links, raw Dialog\n * uses). They each phrased the title / button differently and the\n * destructive variant was inconsistent. This component is the single\n * legal way to ask \"are you sure\" in v2.\n *\n * Controlled-only: caller owns the `open` state. That makes it\n * trivial to compose into a row action menu (open the dialog when\n * user clicks \"Delete\" in a DropdownMenu) without needing a\n * uncontrolled / `asChild` Trigger.\n *\n * `intent=\"danger\"` swaps the confirm button to the destructive\n * variant. `intent=\"default\"` (the implicit fallback) keeps the\n * primary blue — for non-destructive confirms like \"Submit anyway?\"\n *\n * Async confirm: the `onConfirm` callback may return a Promise; the\n * confirm button shows a busy state and stays disabled until the\n * promise settles. On error the dialog stays open so the caller can\n * surface the error via toast.\n */\n\nimport * as React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { Button } from '@/components/ui/button'\n\nexport type ConfirmDialogIntent = 'default' | 'danger'\n\nexport interface ConfirmDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n description?: React.ReactNode\n /** Label for the confirm button. Defaults to t('common.actions.confirm'). */\n confirmLabel?: React.ReactNode\n /** Label for the cancel button. Defaults to t('common.actions.cancel'). */\n cancelLabel?: React.ReactNode\n /** Default: \"default\". `danger` styles the confirm button as destructive. */\n intent?: ConfirmDialogIntent\n /** Called when the user clicks confirm. May return a Promise; the\n * button shows busy state until the promise settles. The dialog\n * closes on success; on rejection it stays open. */\n onConfirm: () => void | Promise<void>\n}\n\nfunction ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n intent = 'default',\n onConfirm,\n}: ConfirmDialogProps): JSX.Element {\n const { t } = useTranslation('common')\n const [busy, setBusy] = React.useState(false)\n\n const handleConfirm = React.useCallback(async () => {\n setBusy(true)\n try {\n await onConfirm()\n onOpenChange(false)\n } catch {\n // Keep dialog open; caller surfaces the failure via toast.\n } finally {\n setBusy(false)\n }\n }, [onConfirm, onOpenChange])\n\n return (\n <Dialog open={open} onOpenChange={busy ? () => {} : onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => onOpenChange(false)}\n disabled={busy}\n >\n {cancelLabel ?? t('actions.cancel')}\n </Button>\n <Button\n type=\"button\"\n variant={intent === 'danger' ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={busy}\n aria-busy={busy}\n >\n {busy ? t('states.saving') : (confirmLabel ?? t('actions.confirm'))}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\nConfirmDialog.displayName = 'ConfirmDialog'\n\nexport { ConfirmDialog }\n"],"names":["ConfirmDialog","open","onOpenChange","title","description","confirmLabel","cancelLabel","intent","onConfirm","t","useTranslation","busy","setBusy","React.useState","handleConfirm","React.useCallback","jsx","Dialog","jsxs","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Button"],"mappings":"sKAyDA,SAASA,EAAc,CACrB,KAAAC,EACA,aAAAC,EACA,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,YAAAC,EACA,OAAAC,EAAS,UACT,UAAAC,CACF,EAAoC,CAClC,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,QAAQ,EAC/B,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAe,EAAK,EAEtCC,EAAgBC,EAAAA,YAAkB,SAAY,CAClDH,EAAQ,EAAI,EACZ,GAAI,CACF,MAAMJ,EAAA,EACNN,EAAa,EAAK,CACpB,MAAQ,CAER,QAAA,CACEU,EAAQ,EAAK,CACf,CACF,EAAG,CAACJ,EAAWN,CAAY,CAAC,EAE5B,OACEc,EAAAA,IAACC,EAAA,CAAO,KAAAhB,EAAY,aAAcU,EAAO,IAAM,CAAC,EAAIT,EAClD,SAAAgB,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAD,OAACE,EAAA,CACC,SAAA,CAAAJ,EAAAA,IAACK,GAAa,SAAAlB,CAAA,CAAM,EACnBC,GAAeY,EAAAA,IAACM,EAAA,CAAmB,SAAAlB,CAAA,CAAY,CAAA,EAClD,SACCmB,EAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAA,CACC,KAAK,SACL,QAAQ,YACR,QAAS,IAAMtB,EAAa,EAAK,EACjC,SAAUS,EAET,SAAAL,GAAeG,EAAE,gBAAgB,CAAA,CAAA,EAEpCO,EAAAA,IAACQ,EAAA,CACC,KAAK,SACL,QAASjB,IAAW,SAAW,cAAgB,UAC/C,QAASO,EACT,SAAUH,EACV,YAAWA,EAEV,WAAOF,EAAE,eAAe,EAAKJ,GAAgBI,EAAE,iBAAiB,CAAA,CAAA,CACnE,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CACAT,EAAc,YAAc"}
1
+ {"version":3,"file":"confirm-dialog-_BtUs6oW.js","sources":["../../src/components/common/confirm-dialog.tsx"],"sourcesContent":["/**\n * ConfirmDialog — unified secondary-confirmation for destructive /\n * irreversible actions: delete fact, cancel job, revoke approval,\n * drop reminder, prune memos, etc.\n *\n * Why a wrapper: the v1 web admin had 3+ near-duplicate confirm\n * patterns (alert(), inline ▼ \"Are you sure?\" links, raw Dialog\n * uses). They each phrased the title / button differently and the\n * destructive variant was inconsistent. This component is the single\n * legal way to ask \"are you sure\" in v2.\n *\n * Controlled-only: caller owns the `open` state. That makes it\n * trivial to compose into a row action menu (open the dialog when\n * user clicks \"Delete\" in a DropdownMenu) without needing a\n * uncontrolled / `asChild` Trigger.\n *\n * `intent=\"danger\"` swaps the confirm button to the destructive\n * variant. `intent=\"default\"` (the implicit fallback) keeps the\n * primary blue — for non-destructive confirms like \"Submit anyway?\"\n *\n * Async confirm: the `onConfirm` callback may return a Promise; the\n * confirm button shows a busy state and stays disabled until the\n * promise settles. On error the dialog stays open so the caller can\n * surface the error via toast.\n */\n\nimport * as React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog'\nimport { Button } from '@/components/ui/button'\n\nexport type ConfirmDialogIntent = 'default' | 'danger'\n\nexport interface ConfirmDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: React.ReactNode\n description?: React.ReactNode\n /** Label for the confirm button. Defaults to t('common.actions.confirm'). */\n confirmLabel?: React.ReactNode\n /** Label for the cancel button. Defaults to t('common.actions.cancel'). */\n cancelLabel?: React.ReactNode\n /** Default: \"default\". `danger` styles the confirm button as destructive. */\n intent?: ConfirmDialogIntent\n /** Called when the user clicks confirm. May return a Promise; the\n * button shows busy state until the promise settles. The dialog\n * closes on success; on rejection it stays open. */\n onConfirm: () => void | Promise<void>\n}\n\nfunction ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n intent = 'default',\n onConfirm,\n}: ConfirmDialogProps): JSX.Element {\n const { t } = useTranslation('common')\n const [busy, setBusy] = React.useState(false)\n\n const handleConfirm = React.useCallback(async () => {\n setBusy(true)\n try {\n await onConfirm()\n onOpenChange(false)\n } catch {\n // Keep dialog open; caller surfaces the failure via toast.\n } finally {\n setBusy(false)\n }\n }, [onConfirm, onOpenChange])\n\n return (\n <Dialog open={open} onOpenChange={busy ? () => {} : onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </DialogHeader>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => onOpenChange(false)}\n disabled={busy}\n >\n {cancelLabel ?? t('actions.cancel')}\n </Button>\n <Button\n type=\"button\"\n variant={intent === 'danger' ? 'destructive' : 'default'}\n onClick={handleConfirm}\n disabled={busy}\n aria-busy={busy}\n >\n {busy ? t('states.saving') : (confirmLabel ?? t('actions.confirm'))}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\nConfirmDialog.displayName = 'ConfirmDialog'\n\nexport { ConfirmDialog }\n"],"names":["ConfirmDialog","open","onOpenChange","title","description","confirmLabel","cancelLabel","intent","onConfirm","t","useTranslation","busy","setBusy","React.useState","handleConfirm","React.useCallback","jsx","Dialog","jsxs","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Button"],"mappings":"qKAyDA,SAASA,EAAc,CACrB,KAAAC,EACA,aAAAC,EACA,MAAAC,EACA,YAAAC,EACA,aAAAC,EACA,YAAAC,EACA,OAAAC,EAAS,UACT,UAAAC,CACF,EAAoC,CAClC,KAAM,CAAE,EAAAC,CAAA,EAAMC,EAAe,QAAQ,EAC/B,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAe,EAAK,EAEtCC,EAAgBC,EAAAA,YAAkB,SAAY,CAClDH,EAAQ,EAAI,EACZ,GAAI,CACF,MAAMJ,EAAA,EACNN,EAAa,EAAK,CACpB,MAAQ,CAER,QAAA,CACEU,EAAQ,EAAK,CACf,CACF,EAAG,CAACJ,EAAWN,CAAY,CAAC,EAE5B,OACEc,EAAAA,IAACC,EAAA,CAAO,KAAAhB,EAAY,aAAcU,EAAO,IAAM,CAAC,EAAIT,EAClD,SAAAgB,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAD,OAACE,EAAA,CACC,SAAA,CAAAJ,EAAAA,IAACK,GAAa,SAAAlB,CAAA,CAAM,EACnBC,GAAeY,EAAAA,IAACM,EAAA,CAAmB,SAAAlB,CAAA,CAAY,CAAA,EAClD,SACCmB,EAAA,CACC,SAAA,CAAAP,EAAAA,IAACQ,EAAA,CACC,KAAK,SACL,QAAQ,YACR,QAAS,IAAMtB,EAAa,EAAK,EACjC,SAAUS,EAET,SAAAL,GAAeG,EAAE,gBAAgB,CAAA,CAAA,EAEpCO,EAAAA,IAACQ,EAAA,CACC,KAAK,SACL,QAASjB,IAAW,SAAW,cAAgB,UAC/C,QAASO,EACT,SAAUH,EACV,YAAWA,EAEV,WAAOF,EAAE,eAAe,EAAKJ,GAAgBI,EAAE,iBAAiB,CAAA,CAAA,CACnE,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CACAT,EAAc,YAAc"}
@@ -0,0 +1,7 @@
1
+ import{n as e}from"./index-DXI13nSQ.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 t=e("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);export{t as C};
7
+ //# sourceMappingURL=copy-Ba1min4z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-Ba1min4z.js","sources":["../../node_modules/lucide-react/dist/esm/icons/copy.js"],"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 Copy = createLucideIcon(\"Copy\", [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n]);\n\nexport { Copy as default };\n//# sourceMappingURL=copy.js.map\n"],"names":["Copy","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAOC,EAAiB,OAAQ,CACpC,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACvF,CAAC,OAAQ,CAAE,EAAG,0DAA2D,IAAK,QAAQ,CAAE,CAC1F,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{z as _,ae as H,V as e,t as g}from"./index-CGaI-i4K.js";import{e as P}from"./react-C9F3QeMB.js";import{T as V,d as $,e as u,c as D,a as q,b}from"./table-9FRavyyI.js";import{E}from"./empty-state-CwUKG8xX.js";import{a as z,A as B}from"./arrow-up-CZr2LH5e.js";/**
1
+ import{n as _,u as H,j as e,c as g}from"./index-DXI13nSQ.js";import{r as P}from"./react-Cb2sDjhD.js";import{T as $,a as q,b as u,c as D,d as B,e as b}from"./table-oUi0mGOn.js";import{E}from"./empty-state-WHzNYVaT.js";import{A as F}from"./arrow-up-DtrvOH7Z.js";import{A as L}from"./arrow-down-OdSfpgG4.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const F=_("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);function L({columns:i,rows:r,getRowId:m,loading:N=!1,loadingRows:k=5,emptyState:y,onRowClick:h,selection:n,onSelectionChange:v,sort:x,onSortChange:p,className:M}){const{t:f}=H("common"),t=n!==void 0&&v!==void 0,j=t&&r.length>0&&r.every(a=>n.has(m(a))),T=t&&r.some(a=>n.has(m(a)))&&!j;function w(){if(!t)return;const a=new Set(n);if(j)for(const s of r)a.delete(m(s));else for(const s of r)a.add(m(s));v(a)}function A(a){if(!t)return;const s=new Set(n);s.has(a)?s.delete(a):s.add(a),v(s)}function U(a){p&&(!x||x.id!==a?p({id:a,dir:"asc"}):x.dir==="asc"?p({id:a,dir:"desc"}):p(null))}return e.jsxs("div",{className:g("w-full",M),children:[e.jsx("div",{className:"hidden md:block",children:e.jsxs(V,{children:[e.jsx($,{children:e.jsxs(u,{children:[t&&e.jsx(D,{className:"w-10",children:e.jsx("input",{type:"checkbox",role:"checkbox","aria-label":f("table.selectAll"),"aria-checked":T?"mixed":j,checked:j,ref:a=>{a&&(a.indeterminate=T)},onChange:w,disabled:N||r.length===0,className:"h-4 w-4 accent-accent cursor-pointer"})}),i.map(a=>e.jsx(D,{className:a.headClassName,children:a.sortable&&p?e.jsxs("button",{type:"button",onClick:()=>U(a.id),className:g("inline-flex items-center gap-1","uppercase tracking-wide","hover:text-text transition-colors"),children:[a.header,x?.id===a.id?x.dir==="asc"?e.jsx(z,{className:"h-3 w-3"}):e.jsx(B,{className:"h-3 w-3"}):e.jsx(F,{className:"h-3 w-3 opacity-50"})]}):a.header},a.id))]})}),e.jsx(q,{children:N?Array.from({length:k}).map((a,s)=>e.jsxs(u,{children:[t&&e.jsx(b,{}),i.map(c=>e.jsx(b,{className:c.cellClassName,children:e.jsx("div",{className:"h-4 w-3/4 rounded bg-surface-2 animate-pulse"})},c.id))]},`skeleton-${s}`)):r.length===0?e.jsx(u,{children:e.jsx(b,{colSpan:i.length+(t?1:0),className:"p-0",children:y??e.jsx(E,{title:f("states.empty")})})}):r.map((a,s)=>{const c=m(a),o=t&&n.has(c);return e.jsxs(u,{"data-state":o?"selected":void 0,onClick:h?()=>h(a):void 0,className:h?"cursor-pointer":void 0,children:[t&&e.jsx(b,{onClick:d=>d.stopPropagation(),children:e.jsx("input",{type:"checkbox",role:"checkbox","aria-label":f("table.selectRow"),checked:o,onChange:()=>A(c),className:"h-4 w-4 accent-accent cursor-pointer"})}),i.map(d=>e.jsx(b,{className:d.cellClassName,children:d.cell(a,s)},d.id))]},c)})})]})}),e.jsx("div",{className:"md:hidden flex flex-col gap-2",children:N?Array.from({length:Math.min(3,k)}).map((a,s)=>e.jsxs("div",{className:"rounded-md border border-border bg-surface p-3 space-y-2",children:[e.jsx("div",{className:"h-4 w-1/2 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-3 w-3/4 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-3 w-2/3 rounded bg-surface-2 animate-pulse"})]},`mskel-${s}`)):r.length===0?y??e.jsx(E,{title:f("states.empty")}):r.map((a,s)=>{const c=m(a),o=t&&n.has(c),d=i.find(l=>l.asCardTitle)??i[0],C=i.filter(l=>!l.asCardTitle&&!l.hideOnMobile&&l.id!==d?.id);return e.jsxs("div",{"data-state":o?"selected":void 0,onClick:h?()=>h(a):void 0,className:g("rounded-md border bg-surface p-3",o?"border-accent":"border-border",h&&"cursor-pointer active:bg-surface-hover"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[d&&e.jsx("div",{className:"font-medium text-text",children:d.cell(a,s)}),t&&e.jsx("input",{type:"checkbox",role:"checkbox","aria-label":f("table.selectRow"),checked:!!o,onChange:()=>A(c),onClick:l=>l.stopPropagation(),className:"h-4 w-4 accent-accent cursor-pointer mt-0.5"})]}),C.length>0&&e.jsx("dl",{className:"mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-sm",children:C.map(l=>e.jsxs(P.Fragment,{children:[e.jsx("dt",{className:"text-text-dim",children:l.header}),e.jsx("dd",{className:"text-text",children:l.cell(a,s)})]},l.id))})]},c)})})]})}L.displayName="DataTable";export{L as D};
7
- //# sourceMappingURL=data-table-bhqK389v.js.map
6
+ */const O=_("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);function V({columns:i,rows:r,getRowId:m,loading:N=!1,loadingRows:k=5,emptyState:y,onRowClick:h,selection:n,onSelectionChange:v,sort:x,onSortChange:p,className:M}){const{t:f}=H("common"),t=n!==void 0&&v!==void 0,j=t&&r.length>0&&r.every(a=>n.has(m(a))),T=t&&r.some(a=>n.has(m(a)))&&!j;function w(){if(!t)return;const a=new Set(n);if(j)for(const s of r)a.delete(m(s));else for(const s of r)a.add(m(s));v(a)}function A(a){if(!t)return;const s=new Set(n);s.has(a)?s.delete(a):s.add(a),v(s)}function U(a){p&&(!x||x.id!==a?p({id:a,dir:"asc"}):x.dir==="asc"?p({id:a,dir:"desc"}):p(null))}return e.jsxs("div",{className:g("w-full",M),children:[e.jsx("div",{className:"hidden md:block",children:e.jsxs($,{children:[e.jsx(q,{children:e.jsxs(u,{children:[t&&e.jsx(D,{className:"w-10",children:e.jsx("input",{type:"checkbox",role:"checkbox","aria-label":f("table.selectAll"),"aria-checked":T?"mixed":j,checked:j,ref:a=>{a&&(a.indeterminate=T)},onChange:w,disabled:N||r.length===0,className:"h-4 w-4 accent-accent cursor-pointer"})}),i.map(a=>e.jsx(D,{className:a.headClassName,children:a.sortable&&p?e.jsxs("button",{type:"button",onClick:()=>U(a.id),className:g("inline-flex items-center gap-1","uppercase tracking-wide","hover:text-text transition-colors"),children:[a.header,x?.id===a.id?x.dir==="asc"?e.jsx(F,{className:"h-3 w-3"}):e.jsx(L,{className:"h-3 w-3"}):e.jsx(O,{className:"h-3 w-3 opacity-50"})]}):a.header},a.id))]})}),e.jsx(B,{children:N?Array.from({length:k}).map((a,s)=>e.jsxs(u,{children:[t&&e.jsx(b,{}),i.map(c=>e.jsx(b,{className:c.cellClassName,children:e.jsx("div",{className:"h-4 w-3/4 rounded bg-surface-2 animate-pulse"})},c.id))]},`skeleton-${s}`)):r.length===0?e.jsx(u,{children:e.jsx(b,{colSpan:i.length+(t?1:0),className:"p-0",children:y??e.jsx(E,{title:f("states.empty")})})}):r.map((a,s)=>{const c=m(a),o=t&&n.has(c);return e.jsxs(u,{"data-state":o?"selected":void 0,onClick:h?()=>h(a):void 0,className:h?"cursor-pointer":void 0,children:[t&&e.jsx(b,{onClick:d=>d.stopPropagation(),children:e.jsx("input",{type:"checkbox",role:"checkbox","aria-label":f("table.selectRow"),checked:o,onChange:()=>A(c),className:"h-4 w-4 accent-accent cursor-pointer"})}),i.map(d=>e.jsx(b,{className:d.cellClassName,children:d.cell(a,s)},d.id))]},c)})})]})}),e.jsx("div",{className:"md:hidden flex flex-col gap-2",children:N?Array.from({length:Math.min(3,k)}).map((a,s)=>e.jsxs("div",{className:"rounded-md border border-border bg-surface p-3 space-y-2",children:[e.jsx("div",{className:"h-4 w-1/2 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-3 w-3/4 rounded bg-surface-2 animate-pulse"}),e.jsx("div",{className:"h-3 w-2/3 rounded bg-surface-2 animate-pulse"})]},`mskel-${s}`)):r.length===0?y??e.jsx(E,{title:f("states.empty")}):r.map((a,s)=>{const c=m(a),o=t&&n.has(c),d=i.find(l=>l.asCardTitle)??i[0],C=i.filter(l=>!l.asCardTitle&&!l.hideOnMobile&&l.id!==d?.id);return e.jsxs("div",{"data-state":o?"selected":void 0,onClick:h?()=>h(a):void 0,className:g("rounded-md border bg-surface p-3",o?"border-accent":"border-border",h&&"cursor-pointer active:bg-surface-hover"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[d&&e.jsx("div",{className:"font-medium text-text",children:d.cell(a,s)}),t&&e.jsx("input",{type:"checkbox",role:"checkbox","aria-label":f("table.selectRow"),checked:!!o,onChange:()=>A(c),onClick:l=>l.stopPropagation(),className:"h-4 w-4 accent-accent cursor-pointer mt-0.5"})]}),C.length>0&&e.jsx("dl",{className:"mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-sm",children:C.map(l=>e.jsxs(P.Fragment,{children:[e.jsx("dt",{className:"text-text-dim",children:l.header}),e.jsx("dd",{className:"text-text",children:l.cell(a,s)})]},l.id))})]},c)})})]})}V.displayName="DataTable";export{V as D};
7
+ //# sourceMappingURL=data-table-BVcXWtPw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table-bhqK389v.js","sources":["../../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../../src/components/common/data-table.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 ArrowUpDown = createLucideIcon(\"ArrowUpDown\", [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n]);\n\nexport { ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * DataTable<T> — generic table for the M2 list pages (jobs /\n * approvals / reminders / memos). Wraps the primitive Table with:\n *\n * * Type-safe `columns` definition — header label, cell renderer,\n * optional sortable flag, optional className for both header / cell.\n * * Loading state — N skeleton rows so layout doesn't jump.\n * * Empty state — drops in <EmptyState> below the header.\n * * Row selection (optional) — `selection` + `onSelectionChange`;\n * caller manages the Set so it can be URL-state or zustand.\n * * Sort — controlled `sort: { id, dir }` + `onSortChange`. Same\n * rationale as Pagination: the URL is the source of truth.\n * * Mobile fallback — below `md` the table swaps to a vertical card\n * list. Card view uses the same column definitions but stacks\n * label / value pairs instead of a row.\n *\n * What this deliberately does NOT do:\n * * No virtualization. Expected row counts at M2 are ≤ 200; if a\n * page outgrows that, swap the render to react-window from inside\n * here without changing callers.\n * * No column resizing / hiding UX. shadcn columns are static.\n * * No filters. Filters live above the table in a dedicated\n * FilterBar (next-PR concern).\n *\n * Why hand-rolled instead of @tanstack/table-core:\n * For the M2 surface area (4 flat-data pages, ≤ 200 rows each),\n * pulling in a 13 KB head-table dep would add abstraction we don't\n * use. If virtualisation or column-pinning becomes a need, the\n * columns prop here maps 1:1 to tanstack's ColumnDef and we can\n * migrate without changing call sites.\n */\n\nimport * as React from 'react'\nimport { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react'\nimport { useTranslation } from 'react-i18next'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { cn } from '@/lib/utils'\n\nexport type SortDir = 'asc' | 'desc'\n\nexport interface SortState {\n id: string\n dir: SortDir\n}\n\nexport interface DataTableColumn<T> {\n /** Stable id for sort + selection. Usually matches the row key. */\n id: string\n /** Header label. ReactNode so callers can pass <Tooltip> etc. */\n header: React.ReactNode\n /** Cell renderer. Receives the row and its index. */\n cell: (row: T, index: number) => React.ReactNode\n /** When true, the header becomes a sort button. */\n sortable?: boolean\n /** Optional className applied to the <th>. */\n headClassName?: string\n /** Optional className applied to every <td> in this column. */\n cellClassName?: string\n /** Mobile-card variant: when set, this column's value renders\n * prominently as the card's title row. Only one column should\n * use this; the rest become label/value pairs. */\n asCardTitle?: boolean\n /** Hide this column on the mobile card view. */\n hideOnMobile?: boolean\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[]\n rows: T[]\n /** Stable per-row id. Used for selection + React keys. */\n getRowId: (row: T) => string\n loading?: boolean\n /** Number of skeleton rows to show during loading. Default 5. */\n loadingRows?: number\n /** Empty-state slot. When omitted a default EmptyState renders. */\n emptyState?: React.ReactNode\n /** Click handler for the whole row — opens detail drawer, navigates, etc. */\n onRowClick?: (row: T) => void\n /** Controlled selection. When defined, a checkbox column auto-renders. */\n selection?: Set<string>\n onSelectionChange?: (next: Set<string>) => void\n /** Controlled sort. When omitted, sortable headers stay inert. */\n sort?: SortState | null\n onSortChange?: (next: SortState | null) => void\n className?: string\n}\n\nfunction DataTable<T>({\n columns,\n rows,\n getRowId,\n loading = false,\n loadingRows = 5,\n emptyState,\n onRowClick,\n selection,\n onSelectionChange,\n sort,\n onSortChange,\n className,\n}: DataTableProps<T>): JSX.Element {\n const { t } = useTranslation('common')\n const selectable = selection !== undefined && onSelectionChange !== undefined\n\n const allChecked = selectable && rows.length > 0 && rows.every((r) => selection.has(getRowId(r)))\n const someChecked = selectable && rows.some((r) => selection.has(getRowId(r))) && !allChecked\n\n function toggleAll(): void {\n if (!selectable) return\n const next = new Set(selection)\n if (allChecked) {\n for (const r of rows) next.delete(getRowId(r))\n } else {\n for (const r of rows) next.add(getRowId(r))\n }\n onSelectionChange(next)\n }\n\n function toggleRow(id: string): void {\n if (!selectable) return\n const next = new Set(selection)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n onSelectionChange(next)\n }\n\n function toggleSort(colId: string): void {\n if (!onSortChange) return\n if (!sort || sort.id !== colId) {\n onSortChange({ id: colId, dir: 'asc' })\n } else if (sort.dir === 'asc') {\n onSortChange({ id: colId, dir: 'desc' })\n } else {\n onSortChange(null)\n }\n }\n\n return (\n <div className={cn('w-full', className)}>\n {/* Desktop / tablet — table view */}\n <div className=\"hidden md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n {selectable && (\n <TableHead className=\"w-10\">\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n aria-label={t('table.selectAll')}\n aria-checked={someChecked ? 'mixed' : allChecked}\n checked={allChecked}\n ref={(el) => {\n if (el) el.indeterminate = someChecked\n }}\n onChange={toggleAll}\n disabled={loading || rows.length === 0}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </TableHead>\n )}\n {columns.map((c) => (\n <TableHead key={c.id} className={c.headClassName}>\n {c.sortable && onSortChange ? (\n <button\n type=\"button\"\n onClick={() => toggleSort(c.id)}\n className={cn(\n 'inline-flex items-center gap-1',\n 'uppercase tracking-wide',\n 'hover:text-text transition-colors',\n )}\n >\n {c.header}\n {sort?.id === c.id ? (\n sort.dir === 'asc' ? <ArrowUp className=\"h-3 w-3\" /> : <ArrowDown className=\"h-3 w-3\" />\n ) : (\n <ArrowUpDown className=\"h-3 w-3 opacity-50\" />\n )}\n </button>\n ) : (\n c.header\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading\n ? Array.from({ length: loadingRows }).map((_, i) => (\n <TableRow key={`skeleton-${i}`}>\n {selectable && <TableCell />}\n {columns.map((c) => (\n <TableCell key={c.id} className={c.cellClassName}>\n <div className=\"h-4 w-3/4 rounded bg-surface-2 animate-pulse\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n : rows.length === 0\n ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"p-0\"\n >\n {emptyState ?? <EmptyState title={t('states.empty')} />}\n </TableCell>\n </TableRow>\n )\n : rows.map((row, i) => {\n const id = getRowId(row)\n const isSelected = selectable && selection.has(id)\n return (\n <TableRow\n key={id}\n data-state={isSelected ? 'selected' : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? 'cursor-pointer' : undefined}\n >\n {selectable && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n aria-label={t('table.selectRow')}\n checked={isSelected}\n onChange={() => toggleRow(id)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </TableCell>\n )}\n {columns.map((c) => (\n <TableCell key={c.id} className={c.cellClassName}>\n {c.cell(row, i)}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </div>\n\n {/* Mobile — card view */}\n <div className=\"md:hidden flex flex-col gap-2\">\n {loading\n ? Array.from({ length: Math.min(3, loadingRows) }).map((_, i) => (\n <div\n key={`mskel-${i}`}\n className=\"rounded-md border border-border bg-surface p-3 space-y-2\"\n >\n <div className=\"h-4 w-1/2 rounded bg-surface-2 animate-pulse\" />\n <div className=\"h-3 w-3/4 rounded bg-surface-2 animate-pulse\" />\n <div className=\"h-3 w-2/3 rounded bg-surface-2 animate-pulse\" />\n </div>\n ))\n : rows.length === 0\n ? (emptyState ?? <EmptyState title={t('states.empty')} />)\n : rows.map((row, i) => {\n const id = getRowId(row)\n const isSelected = selectable && selection.has(id)\n const titleCol = columns.find((c) => c.asCardTitle) ?? columns[0]\n const fieldCols = columns.filter((c) => !c.asCardTitle && !c.hideOnMobile && c.id !== titleCol?.id)\n return (\n <div\n key={id}\n data-state={isSelected ? 'selected' : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={cn(\n 'rounded-md border bg-surface p-3',\n isSelected ? 'border-accent' : 'border-border',\n onRowClick && 'cursor-pointer active:bg-surface-hover',\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n {titleCol && (\n <div className=\"font-medium text-text\">{titleCol.cell(row, i)}</div>\n )}\n {selectable && (\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n aria-label={t('table.selectRow')}\n checked={!!isSelected}\n onChange={() => toggleRow(id)}\n onClick={(e) => e.stopPropagation()}\n className=\"h-4 w-4 accent-accent cursor-pointer mt-0.5\"\n />\n )}\n </div>\n {fieldCols.length > 0 && (\n <dl className=\"mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-sm\">\n {fieldCols.map((c) => (\n <React.Fragment key={c.id}>\n <dt className=\"text-text-dim\">{c.header}</dt>\n <dd className=\"text-text\">{c.cell(row, i)}</dd>\n </React.Fragment>\n ))}\n </dl>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\nDataTable.displayName = 'DataTable'\n\nexport { DataTable }\n"],"names":["ArrowUpDown","createLucideIcon","DataTable","columns","rows","getRowId","loading","loadingRows","emptyState","onRowClick","selection","onSelectionChange","sort","onSortChange","className","t","useTranslation","selectable","allChecked","r","someChecked","toggleAll","next","toggleRow","id","toggleSort","colId","cn","jsx","jsxs","Table","TableHeader","TableRow","TableHead","el","c","ArrowUp","ArrowDown","TableBody","_","i","TableCell","EmptyState","row","isSelected","e","titleCol","fieldCols","React.Fragment"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"data-table-BVcXWtPw.js","sources":["../../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../../src/components/common/data-table.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 ArrowUpDown = createLucideIcon(\"ArrowUpDown\", [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n]);\n\nexport { ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * DataTable<T> — generic table for the M2 list pages (jobs /\n * approvals / reminders / memos). Wraps the primitive Table with:\n *\n * * Type-safe `columns` definition — header label, cell renderer,\n * optional sortable flag, optional className for both header / cell.\n * * Loading state — N skeleton rows so layout doesn't jump.\n * * Empty state — drops in <EmptyState> below the header.\n * * Row selection (optional) — `selection` + `onSelectionChange`;\n * caller manages the Set so it can be URL-state or zustand.\n * * Sort — controlled `sort: { id, dir }` + `onSortChange`. Same\n * rationale as Pagination: the URL is the source of truth.\n * * Mobile fallback — below `md` the table swaps to a vertical card\n * list. Card view uses the same column definitions but stacks\n * label / value pairs instead of a row.\n *\n * What this deliberately does NOT do:\n * * No virtualization. Expected row counts at M2 are ≤ 200; if a\n * page outgrows that, swap the render to react-window from inside\n * here without changing callers.\n * * No column resizing / hiding UX. shadcn columns are static.\n * * No filters. Filters live above the table in a dedicated\n * FilterBar (next-PR concern).\n *\n * Why hand-rolled instead of @tanstack/table-core:\n * For the M2 surface area (4 flat-data pages, ≤ 200 rows each),\n * pulling in a 13 KB head-table dep would add abstraction we don't\n * use. If virtualisation or column-pinning becomes a need, the\n * columns prop here maps 1:1 to tanstack's ColumnDef and we can\n * migrate without changing call sites.\n */\n\nimport * as React from 'react'\nimport { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react'\nimport { useTranslation } from 'react-i18next'\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table'\nimport { EmptyState } from '@/components/common/empty-state'\nimport { cn } from '@/lib/utils'\n\nexport type SortDir = 'asc' | 'desc'\n\nexport interface SortState {\n id: string\n dir: SortDir\n}\n\nexport interface DataTableColumn<T> {\n /** Stable id for sort + selection. Usually matches the row key. */\n id: string\n /** Header label. ReactNode so callers can pass <Tooltip> etc. */\n header: React.ReactNode\n /** Cell renderer. Receives the row and its index. */\n cell: (row: T, index: number) => React.ReactNode\n /** When true, the header becomes a sort button. */\n sortable?: boolean\n /** Optional className applied to the <th>. */\n headClassName?: string\n /** Optional className applied to every <td> in this column. */\n cellClassName?: string\n /** Mobile-card variant: when set, this column's value renders\n * prominently as the card's title row. Only one column should\n * use this; the rest become label/value pairs. */\n asCardTitle?: boolean\n /** Hide this column on the mobile card view. */\n hideOnMobile?: boolean\n}\n\nexport interface DataTableProps<T> {\n columns: DataTableColumn<T>[]\n rows: T[]\n /** Stable per-row id. Used for selection + React keys. */\n getRowId: (row: T) => string\n loading?: boolean\n /** Number of skeleton rows to show during loading. Default 5. */\n loadingRows?: number\n /** Empty-state slot. When omitted a default EmptyState renders. */\n emptyState?: React.ReactNode\n /** Click handler for the whole row — opens detail drawer, navigates, etc. */\n onRowClick?: (row: T) => void\n /** Controlled selection. When defined, a checkbox column auto-renders. */\n selection?: Set<string>\n onSelectionChange?: (next: Set<string>) => void\n /** Controlled sort. When omitted, sortable headers stay inert. */\n sort?: SortState | null\n onSortChange?: (next: SortState | null) => void\n className?: string\n}\n\nfunction DataTable<T>({\n columns,\n rows,\n getRowId,\n loading = false,\n loadingRows = 5,\n emptyState,\n onRowClick,\n selection,\n onSelectionChange,\n sort,\n onSortChange,\n className,\n}: DataTableProps<T>): JSX.Element {\n const { t } = useTranslation('common')\n const selectable = selection !== undefined && onSelectionChange !== undefined\n\n const allChecked = selectable && rows.length > 0 && rows.every((r) => selection.has(getRowId(r)))\n const someChecked = selectable && rows.some((r) => selection.has(getRowId(r))) && !allChecked\n\n function toggleAll(): void {\n if (!selectable) return\n const next = new Set(selection)\n if (allChecked) {\n for (const r of rows) next.delete(getRowId(r))\n } else {\n for (const r of rows) next.add(getRowId(r))\n }\n onSelectionChange(next)\n }\n\n function toggleRow(id: string): void {\n if (!selectable) return\n const next = new Set(selection)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n onSelectionChange(next)\n }\n\n function toggleSort(colId: string): void {\n if (!onSortChange) return\n if (!sort || sort.id !== colId) {\n onSortChange({ id: colId, dir: 'asc' })\n } else if (sort.dir === 'asc') {\n onSortChange({ id: colId, dir: 'desc' })\n } else {\n onSortChange(null)\n }\n }\n\n return (\n <div className={cn('w-full', className)}>\n {/* Desktop / tablet — table view */}\n <div className=\"hidden md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n {selectable && (\n <TableHead className=\"w-10\">\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n aria-label={t('table.selectAll')}\n aria-checked={someChecked ? 'mixed' : allChecked}\n checked={allChecked}\n ref={(el) => {\n if (el) el.indeterminate = someChecked\n }}\n onChange={toggleAll}\n disabled={loading || rows.length === 0}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </TableHead>\n )}\n {columns.map((c) => (\n <TableHead key={c.id} className={c.headClassName}>\n {c.sortable && onSortChange ? (\n <button\n type=\"button\"\n onClick={() => toggleSort(c.id)}\n className={cn(\n 'inline-flex items-center gap-1',\n 'uppercase tracking-wide',\n 'hover:text-text transition-colors',\n )}\n >\n {c.header}\n {sort?.id === c.id ? (\n sort.dir === 'asc' ? <ArrowUp className=\"h-3 w-3\" /> : <ArrowDown className=\"h-3 w-3\" />\n ) : (\n <ArrowUpDown className=\"h-3 w-3 opacity-50\" />\n )}\n </button>\n ) : (\n c.header\n )}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {loading\n ? Array.from({ length: loadingRows }).map((_, i) => (\n <TableRow key={`skeleton-${i}`}>\n {selectable && <TableCell />}\n {columns.map((c) => (\n <TableCell key={c.id} className={c.cellClassName}>\n <div className=\"h-4 w-3/4 rounded bg-surface-2 animate-pulse\" />\n </TableCell>\n ))}\n </TableRow>\n ))\n : rows.length === 0\n ? (\n <TableRow>\n <TableCell\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"p-0\"\n >\n {emptyState ?? <EmptyState title={t('states.empty')} />}\n </TableCell>\n </TableRow>\n )\n : rows.map((row, i) => {\n const id = getRowId(row)\n const isSelected = selectable && selection.has(id)\n return (\n <TableRow\n key={id}\n data-state={isSelected ? 'selected' : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? 'cursor-pointer' : undefined}\n >\n {selectable && (\n <TableCell onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n aria-label={t('table.selectRow')}\n checked={isSelected}\n onChange={() => toggleRow(id)}\n className=\"h-4 w-4 accent-accent cursor-pointer\"\n />\n </TableCell>\n )}\n {columns.map((c) => (\n <TableCell key={c.id} className={c.cellClassName}>\n {c.cell(row, i)}\n </TableCell>\n ))}\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </div>\n\n {/* Mobile — card view */}\n <div className=\"md:hidden flex flex-col gap-2\">\n {loading\n ? Array.from({ length: Math.min(3, loadingRows) }).map((_, i) => (\n <div\n key={`mskel-${i}`}\n className=\"rounded-md border border-border bg-surface p-3 space-y-2\"\n >\n <div className=\"h-4 w-1/2 rounded bg-surface-2 animate-pulse\" />\n <div className=\"h-3 w-3/4 rounded bg-surface-2 animate-pulse\" />\n <div className=\"h-3 w-2/3 rounded bg-surface-2 animate-pulse\" />\n </div>\n ))\n : rows.length === 0\n ? (emptyState ?? <EmptyState title={t('states.empty')} />)\n : rows.map((row, i) => {\n const id = getRowId(row)\n const isSelected = selectable && selection.has(id)\n const titleCol = columns.find((c) => c.asCardTitle) ?? columns[0]\n const fieldCols = columns.filter((c) => !c.asCardTitle && !c.hideOnMobile && c.id !== titleCol?.id)\n return (\n <div\n key={id}\n data-state={isSelected ? 'selected' : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={cn(\n 'rounded-md border bg-surface p-3',\n isSelected ? 'border-accent' : 'border-border',\n onRowClick && 'cursor-pointer active:bg-surface-hover',\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n {titleCol && (\n <div className=\"font-medium text-text\">{titleCol.cell(row, i)}</div>\n )}\n {selectable && (\n <input\n type=\"checkbox\"\n role=\"checkbox\"\n aria-label={t('table.selectRow')}\n checked={!!isSelected}\n onChange={() => toggleRow(id)}\n onClick={(e) => e.stopPropagation()}\n className=\"h-4 w-4 accent-accent cursor-pointer mt-0.5\"\n />\n )}\n </div>\n {fieldCols.length > 0 && (\n <dl className=\"mt-2 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-sm\">\n {fieldCols.map((c) => (\n <React.Fragment key={c.id}>\n <dt className=\"text-text-dim\">{c.header}</dt>\n <dd className=\"text-text\">{c.cell(row, i)}</dd>\n </React.Fragment>\n ))}\n </dl>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\nDataTable.displayName = 'DataTable'\n\nexport { DataTable }\n"],"names":["ArrowUpDown","createLucideIcon","DataTable","columns","rows","getRowId","loading","loadingRows","emptyState","onRowClick","selection","onSelectionChange","sort","onSortChange","className","t","useTranslation","selectable","allChecked","r","someChecked","toggleAll","next","toggleRow","id","toggleSort","colId","cn","jsx","jsxs","Table","TableHeader","TableRow","TableHead","el","c","ArrowUp","ArrowDown","TableBody","_","i","TableCell","EmptyState","row","isSelected","e","titleCol","fieldCols","React.Fragment"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,6 @@
1
+ import{j as i,A as Z,y as q,t as h,G as R,H as J,P as D,v as x,r as K,w as N,J as Q,Q as X,M as Y,U as ee,V as te,$ as oe,c as p}from"./index-DXI13nSQ.js";import{r as s}from"./react-Cb2sDjhD.js";import{X as ne}from"./x-OHUicFfn.js";function re(e){const t=ae(e),o=s.forwardRef((r,n)=>{const{children:a,...c}=r,l=s.Children.toArray(a),d=l.find(ie);if(d){const f=d.props.children,m=l.map(v=>v===d?s.Children.count(f)>1?s.Children.only(null):s.isValidElement(f)?f.props.children:null:v);return i.jsx(t,{...c,ref:n,children:s.isValidElement(f)?s.cloneElement(f,void 0,m):null})}return i.jsx(t,{...c,ref:n,children:a})});return o.displayName=`${e}.Slot`,o}function ae(e){const t=s.forwardRef((o,r)=>{const{children:n,...a}=o;if(s.isValidElement(n)){const c=ce(n),l=le(a,n.props);return n.type!==s.Fragment&&(l.ref=r?Z(r,c):c),s.cloneElement(n,l)}return s.Children.count(n)>1?s.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var se=Symbol("radix.slottable");function ie(e){return s.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===se}function le(e,t){const o={...t};for(const r in t){const n=e[r],a=t[r];/^on[A-Z]/.test(r)?n&&a?o[r]=(...l)=>{const d=a(...l);return n(...l),d}:n&&(o[r]=n):r==="style"?o[r]={...n,...a}:r==="className"&&(o[r]=[n,a].filter(Boolean).join(" "))}return{...e,...o}}function ce(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,o=t&&"isReactWarning"in t&&t.isReactWarning;return o?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,o=t&&"isReactWarning"in t&&t.isReactWarning,o?e.props.ref:e.props.ref||e.ref)}var C="Dialog",[j]=K(C),[de,u]=j(C),P=e=>{const{__scopeDialog:t,children:o,open:r,defaultOpen:n,onOpenChange:a,modal:c=!0}=e,l=s.useRef(null),d=s.useRef(null),[f,m]=q({prop:r,defaultProp:n??!1,onChange:a,caller:C});return i.jsx(de,{scope:t,triggerRef:l,contentRef:d,contentId:h(),titleId:h(),descriptionId:h(),open:f,onOpenChange:m,onOpenToggle:s.useCallback(()=>m(v=>!v),[m]),modal:c,children:o})};P.displayName=C;var O="DialogTrigger",ue=s.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,n=u(O,o),a=N(t,n.triggerRef);return i.jsx(D.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":_(n.open),...r,ref:a,onClick:x(e.onClick,n.onOpenToggle)})});ue.displayName=O;var E="DialogPortal",[fe,I]=j(E,{forceMount:void 0}),w=e=>{const{__scopeDialog:t,forceMount:o,children:r,container:n}=e,a=u(E,t);return i.jsx(fe,{scope:t,forceMount:o,children:s.Children.map(r,c=>i.jsx(R,{present:o||a.open,children:i.jsx(J,{asChild:!0,container:n,children:c})}))})};w.displayName=E;var y="DialogOverlay",A=s.forwardRef((e,t)=>{const o=I(y,e.__scopeDialog),{forceMount:r=o.forceMount,...n}=e,a=u(y,e.__scopeDialog);return a.modal?i.jsx(R,{present:r||a.open,children:i.jsx(ge,{...n,ref:t})}):null});A.displayName=y;var pe=re("DialogOverlay.RemoveScroll"),ge=s.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,n=u(y,o);return i.jsx(X,{as:pe,allowPinchZoom:!0,shards:[n.contentRef],children:i.jsx(D.div,{"data-state":_(n.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),g="DialogContent",T=s.forwardRef((e,t)=>{const o=I(g,e.__scopeDialog),{forceMount:r=o.forceMount,...n}=e,a=u(g,e.__scopeDialog);return i.jsx(R,{present:r||a.open,children:a.modal?i.jsx(me,{...n,ref:t}):i.jsx(xe,{...n,ref:t})})});T.displayName=g;var me=s.forwardRef((e,t)=>{const o=u(g,e.__scopeDialog),r=s.useRef(null),n=N(t,o.contentRef,r);return s.useEffect(()=>{const a=r.current;if(a)return Q(a)},[]),i.jsx(S,{...e,ref:n,trapFocus:o.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:x(e.onCloseAutoFocus,a=>{a.preventDefault(),o.triggerRef.current?.focus()}),onPointerDownOutside:x(e.onPointerDownOutside,a=>{const c=a.detail.originalEvent,l=c.button===0&&c.ctrlKey===!0;(c.button===2||l)&&a.preventDefault()}),onFocusOutside:x(e.onFocusOutside,a=>a.preventDefault())})}),xe=s.forwardRef((e,t)=>{const o=u(g,e.__scopeDialog),r=s.useRef(!1),n=s.useRef(!1);return i.jsx(S,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{e.onCloseAutoFocus?.(a),a.defaultPrevented||(r.current||o.triggerRef.current?.focus(),a.preventDefault()),r.current=!1,n.current=!1},onInteractOutside:a=>{e.onInteractOutside?.(a),a.defaultPrevented||(r.current=!0,a.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const c=a.target;o.triggerRef.current?.contains(c)&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&n.current&&a.preventDefault()}})}),S=s.forwardRef((e,t)=>{const{__scopeDialog:o,trapFocus:r,onOpenAutoFocus:n,onCloseAutoFocus:a,...c}=e,l=u(g,o),d=s.useRef(null),f=N(t,d);return Y(),i.jsxs(i.Fragment,{children:[i.jsx(ee,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:n,onUnmountAutoFocus:a,children:i.jsx(te,{role:"dialog",id:l.contentId,"aria-describedby":l.descriptionId,"aria-labelledby":l.titleId,"data-state":_(l.open),...c,ref:f,onDismiss:()=>l.onOpenChange(!1)})}),i.jsxs(i.Fragment,{children:[i.jsx(De,{titleId:l.titleId}),i.jsx(ye,{contentRef:d,descriptionId:l.descriptionId})]})]})}),b="DialogTitle",M=s.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,n=u(b,o);return i.jsx(D.h2,{id:n.titleId,...r,ref:t})});M.displayName=b;var F="DialogDescription",W=s.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,n=u(F,o);return i.jsx(D.p,{id:n.descriptionId,...r,ref:t})});W.displayName=F;var $="DialogClose",k=s.forwardRef((e,t)=>{const{__scopeDialog:o,...r}=e,n=u($,o);return i.jsx(D.button,{type:"button",...r,ref:t,onClick:x(e.onClick,()=>n.onOpenChange(!1))})});k.displayName=$;function _(e){return e?"open":"closed"}var L="DialogTitleWarning",[Ae,G]=oe(L,{contentName:g,titleName:b,docsSlug:"dialog"}),De=({titleId:e})=>{const t=G(L),o=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
2
+
3
+ If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
4
+
5
+ For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return s.useEffect(()=>{e&&(document.getElementById(e)||console.error(o))},[o,e]),null},ve="DialogDescriptionWarning",ye=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${G(ve).contentName}}.`;return s.useEffect(()=>{const n=e.current?.getAttribute("aria-describedby");t&&n&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},Ce=P,he=w,V=A,H=T,B=M,z=W,Re=k;const Te=Ce,Ne=he,U=s.forwardRef(({className:e,...t},o)=>i.jsx(V,{ref:o,className:p("fixed inset-0 z-50 bg-black/50 backdrop-blur-sm","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",e),...t}));U.displayName=V.displayName;const Ee=s.forwardRef(({className:e,children:t,...o},r)=>i.jsxs(Ne,{children:[i.jsx(U,{}),i.jsxs(H,{ref:r,className:p("fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100vw-2rem)] sm:max-w-lg","translate-x-[-50%] translate-y-[-50%] gap-4","border border-border bg-surface p-4 shadow-lg","rounded-lg","max-h-[85dvh] overflow-y-auto pb-[calc(env(safe-area-inset-bottom)+1.5rem)]","duration-200","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95","data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]","data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",e),...o,children:[t,i.jsx(Re,{className:p("absolute right-4 top-4 rounded-md p-1","text-text-dim hover:bg-surface-hover hover:text-text","focus:outline-none focus:ring-2 focus:ring-accent","tap-target","disabled:pointer-events-none"),"aria-label":"Close",children:i.jsx(ne,{className:"h-4 w-4"})})]})]}));Ee.displayName=H.displayName;const be=({className:e,...t})=>i.jsx("div",{className:p("flex flex-col gap-1.5 text-left",e),...t});be.displayName="DialogHeader";const _e=({className:e,...t})=>i.jsx("div",{className:p("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",e),...t});_e.displayName="DialogFooter";const je=s.forwardRef(({className:e,...t},o)=>i.jsx(B,{ref:o,className:p("text-lg font-semibold leading-snug",e),...t}));je.displayName=B.displayName;const Pe=s.forwardRef(({className:e,...t},o)=>i.jsx(z,{ref:o,className:p("text-sm text-text-dim",e),...t}));Pe.displayName=z.displayName;export{Te as D,Ee as a,be as b,je as c,Pe as d,_e as e};
6
+ //# sourceMappingURL=dialog-BVYFRXlI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog-D5BsJN2q.js","sources":["../../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../src/components/ui/dialog.tsx"],"sourcesContent":["// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Dialog — modal overlay backed by Radix Dialog primitive.\n * Use this for: tool approval, confirm-delete, job detail drawer's\n * mobile fallback, form modals.\n *\n * Mobile-aware: padding-bottom honors safe-area, content is scrollable\n * within 90dvh max-height so the soft keyboard doesn't clip Confirm\n * buttons on phones.\n */\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\nconst DialogTrigger = DialogPrimitive.Trigger\nconst DialogPortal = DialogPrimitive.Portal\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100vw-2rem)] sm:max-w-lg',\n 'translate-x-[-50%] translate-y-[-50%] gap-4',\n 'border border-border bg-surface p-4 shadow-lg',\n 'rounded-lg',\n // pb-safe alone gives ~34px for the home-indicator, but iOS Safari\n // can slide the URL bar back in on tap and eat another ~50px of\n // viewport. Reserve a generous floor so the last action button\n // never lands under the toolbar.\n 'max-h-[85dvh] overflow-y-auto pb-[calc(env(safe-area-inset-bottom)+1.5rem)]',\n 'duration-200',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={cn(\n 'absolute right-4 top-4 rounded-md p-1',\n 'text-text-dim hover:bg-surface-hover hover:text-text',\n 'focus:outline-none focus:ring-2 focus:ring-accent',\n 'tap-target',\n 'disabled:pointer-events-none',\n )}\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>): JSX.Element => (\n <div\n className={cn('flex flex-col gap-1.5 text-left', className)}\n {...props}\n />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>): JSX.Element => (\n <div\n className={cn(\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-snug', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-text-dim', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n"],"names":["createSlot","ownerName","SlotClone","createSlotClone","Slot2","React.forwardRef","props","forwardedRef","children","slotProps","childrenArray","React.Children","slottable","isSlottable","newElement","newChildren","child","React.isValidElement","jsx","React.cloneElement","childrenRef","getElementRef","props2","mergeProps","React.Fragment","composeRefs","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","element","getter","mayWarn","DIALOG_NAME","createDialogContext","createContextScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","React.useRef","contentRef","open","setOpen","useControllableState","useId","React.useCallback","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","context","composedTriggerRef","useComposedRefs","Primitive","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","forceMount","container","Presence","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","Slot","RemoveScroll","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","composedRefs","React.useEffect","content","hideOthers","DialogContentImpl","event","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","useFocusGuards","jsxs","Fragment","FocusScope","DismissableLayer","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","createContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Portal","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Portal","className","ref","DialogPrimitive.Overlay","cn","DialogPrimitive.Content","DialogPrimitive.Close","X","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description"],"mappings":"4OAKA,SAASA,GAAWC,EAAW,CAC7B,MAAMC,EAA4BC,GAAgBF,CAAS,EACrDG,EAAQC,EAAAA,WAAiB,CAACC,EAAOC,IAAiB,CACtD,KAAM,CAAE,SAAAC,EAAU,GAAGC,CAAS,EAAKH,EAC7BI,EAAgBC,EAAAA,SAAe,QAAQH,CAAQ,EAC/CI,EAAYF,EAAc,KAAKG,EAAW,EAChD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAC7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,EAAAA,SAAe,MAAMG,CAAU,EAAI,EAAUH,EAAAA,SAAe,KAAK,IAAI,EAClEM,EAAAA,eAAqBH,CAAU,EAAIA,EAAW,MAAM,SAAW,KAE/DE,CAEV,EACD,OAAuBE,EAAAA,IAAIhB,EAAW,CAAE,GAAGO,EAAW,IAAKF,EAAc,SAAUU,EAAAA,eAAqBH,CAAU,EAAIK,EAAAA,aAAmBL,EAAY,OAAQC,CAAW,EAAI,KAAM,CACpL,CACA,OAAuBG,EAAAA,IAAIhB,EAAW,CAAE,GAAGO,EAAW,IAAKF,EAAc,SAAAC,EAAU,CACrF,CAAC,EACD,OAAAJ,EAAM,YAAc,GAAGH,CAAS,QACzBG,CACT,CAGA,SAASD,GAAgBF,EAAW,CAClC,MAAMC,EAAYG,EAAAA,WAAiB,CAACC,EAAOC,IAAiB,CAC1D,KAAM,CAAE,SAAAC,EAAU,GAAGC,CAAS,EAAKH,EACnC,GAAIW,EAAAA,eAAqBT,CAAQ,EAAG,CAClC,MAAMY,EAAcC,GAAcb,CAAQ,EACpCc,EAASC,GAAWd,EAAWD,EAAS,KAAK,EACnD,OAAIA,EAAS,OAASgB,aACpBF,EAAO,IAAMf,EAAekB,EAAYlB,EAAca,CAAW,EAAIA,GAEhED,EAAAA,aAAmBX,EAAUc,CAAM,CAC5C,CACA,OAAOX,EAAAA,SAAe,MAAMH,CAAQ,EAAI,EAAIG,WAAe,KAAK,IAAI,EAAI,IAC1E,CAAC,EACD,OAAAT,EAAU,YAAc,GAAGD,CAAS,aAC7BC,CACT,CACA,IAAIwB,GAAuB,OAAO,iBAAiB,EAWnD,SAASb,GAAYG,EAAO,CAC1B,OAAOC,EAAAA,eAAqBD,CAAK,GAAK,OAAOA,EAAM,MAAS,YAAc,cAAeA,EAAM,MAAQA,EAAM,KAAK,YAAcU,EAClI,CACA,SAASH,GAAWd,EAAWkB,EAAY,CACzC,MAAMC,EAAgB,CAAE,GAAGD,CAAU,EACrC,UAAWE,KAAYF,EAAY,CACjC,MAAMG,EAAgBrB,EAAUoB,CAAQ,EAClCE,EAAiBJ,EAAWE,CAAQ,EACxB,WAAW,KAAKA,CAAQ,EAEpCC,GAAiBC,EACnBH,EAAcC,CAAQ,EAAI,IAAIG,IAAS,CACrC,MAAMC,EAASF,EAAe,GAAGC,CAAI,EACrC,OAAAF,EAAc,GAAGE,CAAI,EACdC,CACT,EACSH,IACTF,EAAcC,CAAQ,EAAIC,GAEnBD,IAAa,QACtBD,EAAcC,CAAQ,EAAI,CAAE,GAAGC,EAAe,GAAGC,CAAc,EACtDF,IAAa,cACtBD,EAAcC,CAAQ,EAAI,CAACC,EAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtF,CACA,MAAO,CAAE,GAAGtB,EAAW,GAAGmB,CAAa,CACzC,CACA,SAASP,GAAca,EAAS,CAC9B,IAAIC,EAAS,OAAO,yBAAyBD,EAAQ,MAAO,KAAK,GAAG,IAChEE,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eAC7D,OAAIC,EACKF,EAAQ,KAEjBC,EAAS,OAAO,yBAAyBD,EAAS,KAAK,GAAG,IAC1DE,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eACrDC,EACKF,EAAQ,MAAM,IAEhBA,EAAQ,MAAM,KAAOA,EAAQ,IACtC,CC7EA,IAAIG,EAAc,SACd,CAACC,CAAsC,EAAIC,EAAmBF,CAAW,EACzE,CAACG,GAAgBC,CAAgB,EAAIH,EAAoBD,CAAW,EACpEK,EAAUpC,GAAU,CACtB,KAAM,CACJ,cAAAqC,EACA,SAAAnC,EACA,KAAMoC,EACN,YAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,EACZ,EAAMzC,EACE0C,EAAaC,EAAAA,OAAa,IAAI,EAC9BC,EAAaD,EAAAA,OAAa,IAAI,EAC9B,CAACE,EAAMC,CAAO,EAAIC,EAAqB,CAC3C,KAAMT,EACN,YAAaC,GAAe,GAC5B,SAAUC,EACV,OAAQT,CACZ,CAAG,EACD,OAAuBnB,EAAAA,IACrBsB,GACA,CACE,MAAOG,EACP,WAAAK,EACA,WAAAE,EACA,UAAWI,EAAK,EAChB,QAASA,EAAK,EACd,cAAeA,EAAK,EACpB,KAAAH,EACA,aAAcC,EACd,aAAcG,EAAAA,YAAkB,IAAMH,EAASI,GAAa,CAACA,CAAQ,EAAG,CAACJ,CAAO,CAAC,EACjF,MAAAL,EACA,SAAAvC,CACN,CACA,CACA,EACAkC,EAAO,YAAcL,EACrB,IAAIoB,EAAe,gBACfC,GAAgBrD,EAAAA,WAClB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAoC,EAAe,GAAGgB,CAAY,EAAKrD,EACrCsD,EAAUnB,EAAiBgB,EAAcd,CAAa,EACtDkB,EAAqBC,EAAgBvD,EAAcqD,EAAQ,UAAU,EAC3E,OAAuB1C,EAAAA,IACrB6C,EAAU,OACV,CACE,KAAM,SACN,gBAAiB,SACjB,gBAAiBH,EAAQ,KACzB,gBAAiBA,EAAQ,UACzB,aAAcI,EAASJ,EAAQ,IAAI,EACnC,GAAGD,EACH,IAAKE,EACL,QAASI,EAAqB3D,EAAM,QAASsD,EAAQ,YAAY,CACzE,CACA,CACE,CACF,EACAF,GAAc,YAAcD,EAC5B,IAAIS,EAAc,eACd,CAACC,GAAgBC,CAAgB,EAAI9B,EAAoB4B,EAAa,CACxE,WAAY,MACd,CAAC,EACGG,EAAgB/D,GAAU,CAC5B,KAAM,CAAE,cAAAqC,EAAe,WAAA2B,EAAY,SAAA9D,EAAU,UAAA+D,CAAS,EAAKjE,EACrDsD,EAAUnB,EAAiByB,EAAavB,CAAa,EAC3D,OAAuBzB,EAAAA,IAAIiD,GAAgB,CAAE,MAAOxB,EAAe,WAAA2B,EAAY,SAAU3D,EAAAA,SAAe,IAAIH,EAAWQ,GAA0BE,EAAAA,IAAIsD,EAAU,CAAE,QAASF,GAAcV,EAAQ,KAAM,SAA0B1C,EAAAA,IAAIuD,EAAiB,CAAE,QAAS,GAAM,UAAAF,EAAW,SAAUvD,CAAK,CAAE,CAAC,CAAE,CAAC,CAAC,CAAE,CAC3S,EACAqD,EAAa,YAAcH,EAC3B,IAAIQ,EAAe,gBACfC,EAAgBtE,EAAAA,WAClB,CAACC,EAAOC,IAAiB,CACvB,MAAMqE,EAAgBR,EAAiBM,EAAcpE,EAAM,aAAa,EAClE,CAAE,WAAAgE,EAAaM,EAAc,WAAY,GAAGC,CAAY,EAAKvE,EAC7DsD,EAAUnB,EAAiBiC,EAAcpE,EAAM,aAAa,EAClE,OAAOsD,EAAQ,MAAwB1C,MAAIsD,EAAU,CAAE,QAASF,GAAcV,EAAQ,KAAM,SAA0B1C,MAAI4D,GAAmB,CAAE,GAAGD,EAAc,IAAKtE,CAAY,CAAE,CAAC,CAAE,EAAI,IAC5L,CACF,EACAoE,EAAc,YAAcD,EAC5B,IAAIK,GAAO/E,GAAW,4BAA4B,EAC9C8E,GAAoBzE,EAAAA,WACtB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAoC,EAAe,GAAGkC,CAAY,EAAKvE,EACrCsD,EAAUnB,EAAiBiC,EAAc/B,CAAa,EAC5D,OAGkBzB,EAAAA,IAAI8D,EAAc,CAAE,GAAID,GAAM,eAAgB,GAAM,OAAQ,CAACnB,EAAQ,UAAU,EAAG,SAA0B1C,EAAAA,IAC1H6C,EAAU,IACV,CACE,aAAcC,EAASJ,EAAQ,IAAI,EACnC,GAAGiB,EACH,IAAKtE,EACL,MAAO,CAAE,cAAe,OAAQ,GAAGsE,EAAa,KAAK,CAC/D,CACA,CAAO,CAAE,CAEP,CACF,EACII,EAAe,gBACfC,EAAgB7E,EAAAA,WAClB,CAACC,EAAOC,IAAiB,CACvB,MAAMqE,EAAgBR,EAAiBa,EAAc3E,EAAM,aAAa,EAClE,CAAE,WAAAgE,EAAaM,EAAc,WAAY,GAAGO,CAAY,EAAK7E,EAC7DsD,EAAUnB,EAAiBwC,EAAc3E,EAAM,aAAa,EAClE,OAAuBY,MAAIsD,EAAU,CAAE,QAASF,GAAcV,EAAQ,KAAM,SAAUA,EAAQ,MAAwB1C,EAAAA,IAAIkE,GAAoB,CAAE,GAAGD,EAAc,IAAK5E,CAAY,CAAE,EAAoBW,EAAAA,IAAImE,GAAuB,CAAE,GAAGF,EAAc,IAAK5E,CAAY,CAAE,CAAC,CAAE,CAC9Q,CACF,EACA2E,EAAc,YAAcD,EAC5B,IAAIG,GAAqB/E,EAAAA,WACvB,CAACC,EAAOC,IAAiB,CACvB,MAAMqD,EAAUnB,EAAiBwC,EAAc3E,EAAM,aAAa,EAC5D4C,EAAaD,EAAAA,OAAa,IAAI,EAC9BqC,EAAexB,EAAgBvD,EAAcqD,EAAQ,WAAYV,CAAU,EACjFqC,OAAAA,EAAAA,UAAgB,IAAM,CACpB,MAAMC,EAAUtC,EAAW,QAC3B,GAAIsC,EAAS,OAAOC,EAAWD,CAAO,CACxC,EAAG,CAAA,CAAE,EACkBtE,EAAAA,IACrBwE,EACA,CACE,GAAGpF,EACH,IAAKgF,EACL,UAAW1B,EAAQ,KACnB,4BAA6B,GAC7B,iBAAkBK,EAAqB3D,EAAM,iBAAmBqF,GAAU,CACxEA,EAAM,eAAc,EACpB/B,EAAQ,WAAW,SAAS,MAAK,CACnC,CAAC,EACD,qBAAsBK,EAAqB3D,EAAM,qBAAuBqF,GAAU,CAChF,MAAMC,EAAgBD,EAAM,OAAO,cAC7BE,EAAgBD,EAAc,SAAW,GAAKA,EAAc,UAAY,IACzDA,EAAc,SAAW,GAAKC,IACjCF,EAAM,eAAc,CACxC,CAAC,EACD,eAAgB1B,EACd3D,EAAM,eACLqF,GAAUA,EAAM,eAAc,CACzC,CACA,CACA,CACE,CACF,EACIN,GAAwBhF,EAAAA,WAC1B,CAACC,EAAOC,IAAiB,CACvB,MAAMqD,EAAUnB,EAAiBwC,EAAc3E,EAAM,aAAa,EAC5DwF,EAA0B7C,EAAAA,OAAa,EAAK,EAC5C8C,EAA2B9C,EAAAA,OAAa,EAAK,EACnD,OAAuB/B,EAAAA,IACrBwE,EACA,CACE,GAAGpF,EACH,IAAKC,EACL,UAAW,GACX,4BAA6B,GAC7B,iBAAmBoF,GAAU,CAC3BrF,EAAM,mBAAmBqF,CAAK,EACzBA,EAAM,mBACJG,EAAwB,SAASlC,EAAQ,WAAW,SAAS,MAAK,EACvE+B,EAAM,eAAc,GAEtBG,EAAwB,QAAU,GAClCC,EAAyB,QAAU,EACrC,EACA,kBAAoBJ,GAAU,CAC5BrF,EAAM,oBAAoBqF,CAAK,EAC1BA,EAAM,mBACTG,EAAwB,QAAU,GAC9BH,EAAM,OAAO,cAAc,OAAS,gBACtCI,EAAyB,QAAU,KAGvC,MAAMC,EAASL,EAAM,OACG/B,EAAQ,WAAW,SAAS,SAASoC,CAAM,GAC9CL,EAAM,eAAc,EACrCA,EAAM,OAAO,cAAc,OAAS,WAAaI,EAAyB,SAC5EJ,EAAM,eAAc,CAExB,CACR,CACA,CACE,CACF,EACID,EAAoBrF,EAAAA,WACtB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAoC,EAAe,UAAAsD,EAAW,gBAAAC,EAAiB,iBAAAC,EAAkB,GAAGhB,CAAY,EAAK7E,EACnFsD,EAAUnB,EAAiBwC,EAActC,CAAa,EACtDO,EAAaD,EAAAA,OAAa,IAAI,EAC9BqC,EAAexB,EAAgBvD,EAAc2C,CAAU,EAC7D,OAAAkD,EAAc,EACSC,EAAAA,KAAKC,WAAU,CAAE,SAAU,CAChCpF,EAAAA,IACdqF,GACA,CACE,QAAS,GACT,KAAM,GACN,QAASN,EACT,iBAAkBC,EAClB,mBAAoBC,EACpB,SAA0BjF,EAAAA,IACxBsF,GACA,CACE,KAAM,SACN,GAAI5C,EAAQ,UACZ,mBAAoBA,EAAQ,cAC5B,kBAAmBA,EAAQ,QAC3B,aAAcI,EAASJ,EAAQ,IAAI,EACnC,GAAGuB,EACH,IAAKG,EACL,UAAW,IAAM1B,EAAQ,aAAa,EAAK,CACzD,CACA,CACA,CACA,EACsByC,OAAKC,EAAAA,SAAU,CAAE,SAAU,CACzBpF,EAAAA,IAAIuF,GAAc,CAAE,QAAS7C,EAAQ,OAAO,CAAE,EAC9C1C,EAAAA,IAAIwF,GAAoB,CAAE,WAAAxD,EAAY,cAAeU,EAAQ,aAAa,CAAE,CACpG,CAAO,CAAE,CACT,EAAO,CACL,CACF,EACI+C,EAAa,cACbC,EAAcvG,EAAAA,WAChB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAoC,EAAe,GAAGkE,CAAU,EAAKvG,EACnCsD,EAAUnB,EAAiBkE,EAAYhE,CAAa,EAC1D,OAAuBzB,MAAI6C,EAAU,GAAI,CAAE,GAAIH,EAAQ,QAAS,GAAGiD,EAAY,IAAKtG,CAAY,CAAE,CACpG,CACF,EACAqG,EAAY,YAAcD,EAC1B,IAAIG,EAAmB,oBACnBC,EAAoB1G,EAAAA,WACtB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAoC,EAAe,GAAGqE,CAAgB,EAAK1G,EACzCsD,EAAUnB,EAAiBqE,EAAkBnE,CAAa,EAChE,OAAuBzB,MAAI6C,EAAU,EAAG,CAAE,GAAIH,EAAQ,cAAe,GAAGoD,EAAkB,IAAKzG,CAAY,CAAE,CAC/G,CACF,EACAwG,EAAkB,YAAcD,EAChC,IAAIG,EAAa,cACbC,EAAc7G,EAAAA,WAChB,CAACC,EAAOC,IAAiB,CACvB,KAAM,CAAE,cAAAoC,EAAe,GAAGwE,CAAU,EAAK7G,EACnCsD,EAAUnB,EAAiBwE,EAAYtE,CAAa,EAC1D,OAAuBzB,EAAAA,IACrB6C,EAAU,OACV,CACE,KAAM,SACN,GAAGoD,EACH,IAAK5G,EACL,QAAS0D,EAAqB3D,EAAM,QAAS,IAAMsD,EAAQ,aAAa,EAAK,CAAC,CACtF,CACA,CACE,CACF,EACAsD,EAAY,YAAcD,EAC1B,SAASjD,EAASb,EAAM,CACtB,OAAOA,EAAO,OAAS,QACzB,CACA,IAAIiE,EAAqB,qBACrB,CAACC,GAAiBC,CAAiB,EAAIC,GAAcH,EAAoB,CAC3E,YAAanC,EACb,UAAW0B,EACX,SAAU,QACZ,CAAC,EACGF,GAAe,CAAC,CAAE,QAAAe,KAAc,CAClC,MAAMC,EAAsBH,EAAkBF,CAAkB,EAC1DM,EAAU,KAAKD,EAAoB,WAAW,mBAAmBA,EAAoB,SAAS;AAAA;AAAA,4BAE1EA,EAAoB,SAAS;AAAA;AAAA,4EAEmBA,EAAoB,QAAQ,GACtGlC,OAAAA,EAAAA,UAAgB,IAAM,CAChBiC,IACe,SAAS,eAAeA,CAAO,GACjC,QAAQ,MAAME,CAAO,EAExC,EAAG,CAACA,EAASF,CAAO,CAAC,EACd,IACT,EACIG,GAA2B,2BAC3BjB,GAAqB,CAAC,CAAE,WAAAxD,EAAY,cAAA0E,KAAoB,CAE1D,MAAMF,EAAU,6EADkBJ,EAAkBK,EAAwB,EAC2C,WAAW,KAClIpC,OAAAA,EAAAA,UAAgB,IAAM,CACpB,MAAMsC,EAAgB3E,EAAW,SAAS,aAAa,kBAAkB,EACrE0E,GAAiBC,IACI,SAAS,eAAeD,CAAa,GACvC,QAAQ,KAAKF,CAAO,EAE7C,EAAG,CAACA,EAASxE,EAAY0E,CAAa,CAAC,EAChC,IACT,EACIE,GAAOpF,EAEPqF,GAAS1D,EACT2D,EAAUrD,EACVsD,EAAU/C,EACVgD,EAAQtB,EACRuB,EAAcpB,EACdqB,GAAQlB,ECjTZ,MAAMxE,GAAS2F,GAEThE,GAAeiE,GAGf3D,EAAgBtE,EAAAA,WAGpB,CAAC,CAAE,UAAAkI,EAAW,GAAGjI,CAAA,EAASkI,IAC1BtH,EAAAA,IAACuH,EAAA,CACC,IAAAD,EACA,UAAWE,EACT,kDACA,+DACA,6DACAH,CAAA,EAED,GAAGjI,CAAA,CACN,CACD,EACDqE,EAAc,YAAc8D,EAAwB,YAEpD,MAAMvD,GAAgB7E,EAAAA,WAGpB,CAAC,CAAE,UAAAkI,EAAW,SAAA/H,EAAU,GAAGF,CAAA,EAASkI,IACpCnC,EAAAA,KAAChC,GAAA,CACC,SAAA,CAAAnD,EAAAA,IAACyD,EAAA,EAAc,EACf0B,EAAAA,KAACsC,EAAA,CACC,IAAAH,EACA,UAAWE,EACT,mFACA,8CACA,gDACA,aAKA,8EACA,eACA,+DACA,6DACA,+DACA,uFACA,qFACAH,CAAA,EAED,GAAGjI,EAEH,SAAA,CAAAE,EACDU,EAAAA,IAAC0H,GAAA,CACC,UAAWF,EACT,wCACA,uDACA,oDACA,aACA,8BAAA,EAEF,aAAW,QAEX,SAAAxH,EAAAA,IAAC2H,GAAA,CAAE,UAAU,SAAA,CAAU,CAAA,CAAA,CACzB,CAAA,CAAA,CACF,EACF,CACD,EACD3D,GAAc,YAAcyD,EAAwB,YAEpD,MAAMG,GAAe,CAAC,CACpB,UAAAP,EACA,GAAGjI,CACL,IACEY,EAAAA,IAAC,MAAA,CACC,UAAWwH,EAAG,kCAAmCH,CAAS,EACzD,GAAGjI,CAAA,CACN,EAEFwI,GAAa,YAAc,eAE3B,MAAMC,GAAe,CAAC,CACpB,UAAAR,EACA,GAAGjI,CACL,IACEY,EAAAA,IAAC,MAAA,CACC,UAAWwH,EACT,yDACAH,CAAA,EAED,GAAGjI,CAAA,CACN,EAEFyI,GAAa,YAAc,eAE3B,MAAMnC,GAAcvG,EAAAA,WAGlB,CAAC,CAAE,UAAAkI,EAAW,GAAGjI,CAAA,EAASkI,IAC1BtH,EAAAA,IAAC8H,EAAA,CACC,IAAAR,EACA,UAAWE,EAAG,qCAAsCH,CAAS,EAC5D,GAAGjI,CAAA,CACN,CACD,EACDsG,GAAY,YAAcoC,EAAsB,YAEhD,MAAMjC,GAAoB1G,EAAAA,WAGxB,CAAC,CAAE,UAAAkI,EAAW,GAAGjI,CAAA,EAASkI,IAC1BtH,EAAAA,IAAC+H,EAAA,CACC,IAAAT,EACA,UAAWE,EAAG,wBAAyBH,CAAS,EAC/C,GAAGjI,CAAA,CACN,CACD,EACDyG,GAAkB,YAAckC,EAA4B","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"dialog-BVYFRXlI.js","sources":["../../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../src/components/ui/dialog.tsx"],"sourcesContent":["// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Dialog — modal overlay backed by Radix Dialog primitive.\n * Use this for: tool approval, confirm-delete, job detail drawer's\n * mobile fallback, form modals.\n *\n * Mobile-aware: padding-bottom honors safe-area, content is scrollable\n * within 90dvh max-height so the soft keyboard doesn't clip Confirm\n * buttons on phones.\n */\n\nimport * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\nimport { cn } from '@/lib/utils'\n\nconst Dialog = DialogPrimitive.Root\nconst DialogTrigger = DialogPrimitive.Trigger\nconst DialogPortal = DialogPrimitive.Portal\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 backdrop-blur-sm',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100vw-2rem)] sm:max-w-lg',\n 'translate-x-[-50%] translate-y-[-50%] gap-4',\n 'border border-border bg-surface p-4 shadow-lg',\n 'rounded-lg',\n // pb-safe alone gives ~34px for the home-indicator, but iOS Safari\n // can slide the URL bar back in on tap and eat another ~50px of\n // viewport. Reserve a generous floor so the last action button\n // never lands under the toolbar.\n 'max-h-[85dvh] overflow-y-auto pb-[calc(env(safe-area-inset-bottom)+1.5rem)]',\n 'duration-200',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n 'data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]',\n 'data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n className={cn(\n 'absolute right-4 top-4 rounded-md p-1',\n 'text-text-dim hover:bg-surface-hover hover:text-text',\n 'focus:outline-none focus:ring-2 focus:ring-accent',\n 'tap-target',\n 'disabled:pointer-events-none',\n )}\n aria-label=\"Close\"\n >\n <X className=\"h-4 w-4\" />\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>): JSX.Element => (\n <div\n className={cn('flex flex-col gap-1.5 text-left', className)}\n {...props}\n />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>): JSX.Element => (\n <div\n className={cn(\n 'flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-snug', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-text-dim', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n"],"names":["createSlot","ownerName","SlotClone","createSlotClone","Slot2","React.forwardRef","props","forwardedRef","children","slotProps","childrenArray","React.Children","slottable","isSlottable","newElement","newChildren","child","React.isValidElement","jsx","React.cloneElement","childrenRef","getElementRef","props2","mergeProps","React.Fragment","composeRefs","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","args","result","element","getter","mayWarn","DIALOG_NAME","createDialogContext","createContextScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","React.useRef","contentRef","open","setOpen","useControllableState","useId","React.useCallback","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","context","composedTriggerRef","useComposedRefs","Primitive","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","DialogPortal","forceMount","container","Presence","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","Slot","RemoveScroll","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","composedRefs","React.useEffect","content","hideOthers","DialogContentImpl","event","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","useFocusGuards","jsxs","Fragment","FocusScope","DismissableLayer","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","createContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Portal","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Portal","className","ref","DialogPrimitive.Overlay","cn","DialogPrimitive.Content","DialogPrimitive.Close","X","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1,7 +1,7 @@
1
- import{z as o}from"./index-CGaI-i4K.js";/**
1
+ import{n as o}from"./index-DXI13nSQ.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const a=o("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);export{a as D};
7
- //# sourceMappingURL=download-CcO4RAuC.js.map
6
+ */const n=o("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);export{n as D};
7
+ //# sourceMappingURL=download-DYc5g_1W.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"download-CcO4RAuC.js","sources":["../../node_modules/lucide-react/dist/esm/icons/download.js"],"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 Download = createLucideIcon(\"Download\", [\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"polyline\", { points: \"7 10 12 15 17 10\", key: \"2ggqvy\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"15\", y2: \"3\", key: \"1vk2je\" }]\n]);\n\nexport { Download as default };\n//# sourceMappingURL=download.js.map\n"],"names":["Download","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAWC,EAAiB,WAAY,CAC5C,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAQ,CAAE,EAC1E,CAAC,WAAY,CAAE,OAAQ,mBAAoB,IAAK,QAAQ,CAAE,EAC1D,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,IAAK,QAAQ,CAAE,CACnE,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"download-DYc5g_1W.js","sources":["../../node_modules/lucide-react/dist/esm/icons/download.js"],"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 Download = createLucideIcon(\"Download\", [\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"polyline\", { points: \"7 10 12 15 17 10\", key: \"2ggqvy\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"15\", y2: \"3\", key: \"1vk2je\" }]\n]);\n\nexport { Download as default };\n//# sourceMappingURL=download.js.map\n"],"names":["Download","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAWC,EAAiB,WAAY,CAC5C,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAQ,CAAE,EAC1E,CAAC,WAAY,CAAE,OAAQ,mBAAoB,IAAK,QAAQ,CAAE,EAC1D,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,IAAK,IAAK,QAAQ,CAAE,CACnE,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{z as A,ae as F,V as e,n as z,B as I,c as u,I as h,t as L,S as D,l as V,m as X,j as G,k as g,a4 as m,G as j,L as J}from"./index-CGaI-i4K.js";import{e as M}from"./react-C9F3QeMB.js";import{d as K,p as Q,m as Y}from"./use-settings-CrkXdLrr.js";import{L as H}from"./loader-circle-BBIfyATA.js";import{C as q}from"./circle-x-OcRzGLRb.js";import{C as W}from"./circle-check-B_d7dBl5.js";import{R as Z}from"./refresh-ccw-DpPWcwTg.js";import{a as $,E as ee}from"./eye-8lKlwbZE.js";import{X as se}from"./x-BLllJ8d_.js";import{S as ae}from"./save-beGooRNy.js";import"./useQuery-ByZlZXlw.js";/**
1
+ import{n as A,u as F,j as e,_ as L,k as I,B as u,I as S,c as z,S as D,f as V,g as X,h as J,i as g,l as m,m as j,L as K}from"./index-DXI13nSQ.js";import{r as M}from"./react-Cb2sDjhD.js";import{u as Q,a as Y,f as q}from"./use-settings-DJlVLnjo.js";import{L as H}from"./loader-circle-BS5FFFg-.js";import{C as G}from"./circle-x-8dhkvHlT.js";import{C as W}from"./circle-check-VgYKnBhy.js";import{R as Z}from"./refresh-ccw-BPKXoMZa.js";import{E as $,a as ee}from"./eye-PzqPB6N6.js";import{X as se}from"./x-OHUicFfn.js";import{S as ae}from"./save-BXCmgeEj.js";import"./useQuery-CEwGD94N.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const te=A("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]),U=["IMHUB_SMTP_HOST","IMHUB_SMTP_PORT","IMHUB_SMTP_USER","IMHUB_SMTP_PASS","IMHUB_SMTP_FROM","IMHUB_SMTP_SECURE"];function v(){return{IMHUB_SMTP_HOST:"",IMHUB_SMTP_PORT:"",IMHUB_SMTP_USER:"",IMHUB_SMTP_PASS:"",IMHUB_SMTP_FROM:"",IMHUB_SMTP_SECURE:"auto"}}function ie(s){const i=(s??"").trim().toLowerCase();return i==="1"||i==="true"||i==="yes"?"true":i==="0"||i==="false"||i==="no"?"false":"auto"}function P(s){return{IMHUB_SMTP_HOST:s.IMHUB_SMTP_HOST??"",IMHUB_SMTP_PORT:s.IMHUB_SMTP_PORT??"",IMHUB_SMTP_USER:s.IMHUB_SMTP_USER??"",IMHUB_SMTP_PASS:s.IMHUB_SMTP_PASS??"",IMHUB_SMTP_FROM:s.IMHUB_SMTP_FROM??"",IMHUB_SMTP_SECURE:ie(s.IMHUB_SMTP_SECURE)}}function B(s){return/\*{3,}/.test(s)}function Me(){const{t:s}=F(["settings","common"]),[i,T]=M.useState(!1),n=K({reveal:i}),o=Q(),S=Y(),l=n.data?.env??{},[r,f]=M.useState(v),[b,C]=M.useState("");M.useEffect(()=>{if(!n.data)return;const a=P(l),t=JSON.stringify(a);t!==b&&(f(a),C(t))},[n.dataUpdatedAt]);const _=!!(l.IMHUB_SMTP_HOST&&l.IMHUB_SMTP_USER&&l.IMHUB_SMTP_PASS),N=M.useMemo(()=>{if(!n.data)return!1;const a=P(l);for(const t of U)if(!(t==="IMHUB_SMTP_PASS"&&r[t]&&B(r[t])&&r[t]===a[t])&&r[t]!==a[t])return!0;return!1},[r,l,n.data]);function d(a,t){f(c=>({...c,[a]:t}))}function E(){n.data&&f(P(l))}async function R(){if(!n.data)return;const a=P(l),t={};for(const c of U){const p=r[c],k=a[c];p!==k&&(c==="IMHUB_SMTP_PASS"&&B(p)||(t[c]=p===""?null:p))}if(Object.keys(t).length===0){m.info(s("email.toast.noChanges"));return}try{await o.mutateAsync({updates:t}),m.success(s("email.toast.saved"))}catch(c){m.error(j(c,s).message)}}async function y(){if(!n.data)return;const a={};for(const t of U)a[t]=null;try{await o.mutateAsync({updates:a}),f(v()),m.success(s("email.toast.disabled"))}catch(t){m.error(j(t,s).message)}}async function w(){try{const a=await S.mutateAsync();m.success(a.message)}catch(a){m.error(j(a,s).message)}}const O=S.isPending?e.jsx(H,{className:"h-4 w-4 animate-spin"}):S.isError?e.jsx(q,{className:"h-4 w-4 text-danger"}):S.isSuccess?e.jsx(W,{className:"h-4 w-4 text-success"}):e.jsx(z,{className:"h-4 w-4"});return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",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("email.title")}),_?e.jsx(I,{variant:"success",children:s("email.statusOn")}):e.jsx(I,{variant:"outline",children:s("email.statusOff")}),e.jsxs(u,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void n.refetch(),disabled:n.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[n.isFetching?e.jsx(H,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{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("email.subtitle")})]}),n.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(te,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("email.cardTitle")}),e.jsxs(u,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>T(a=>!a),disabled:n.isFetching,"aria-label":s(i?"email.hide":"email.reveal"),children:[i?e.jsx($,{className:"h-4 w-4"}):e.jsx(ee,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s(i?"email.hide":"email.reveal")})]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 px-4 py-4 sm:grid-cols-2",children:[e.jsx(x,{label:s("email.host"),hint:s("email.hostHint"),children:e.jsx(h,{value:r.IMHUB_SMTP_HOST,onChange:a=>d("IMHUB_SMTP_HOST",a.target.value),placeholder:"smtp.gmail.com",autoComplete:"off"})}),e.jsx(x,{label:s("email.port"),hint:s("email.portHint"),children:e.jsx(h,{type:"number",inputMode:"numeric",min:1,max:65535,value:r.IMHUB_SMTP_PORT,onChange:a=>d("IMHUB_SMTP_PORT",a.target.value),placeholder:"465",autoComplete:"off"})}),e.jsx(x,{label:s("email.user"),hint:s("email.userHint"),children:e.jsx(h,{value:r.IMHUB_SMTP_USER,onChange:a=>d("IMHUB_SMTP_USER",a.target.value),placeholder:"you@example.com",autoComplete:"off"})}),e.jsx(x,{label:s("email.pass"),hint:s("email.passHint"),children:e.jsx(h,{type:i?"text":"password",value:r.IMHUB_SMTP_PASS,onChange:a=>d("IMHUB_SMTP_PASS",a.target.value),placeholder:"••••••••",autoComplete:"new-password",className:L(B(r.IMHUB_SMTP_PASS)&&"font-mono text-text-muted")})}),e.jsx(x,{label:s("email.from"),hint:s("email.fromHint"),children:e.jsx(h,{value:r.IMHUB_SMTP_FROM,onChange:a=>d("IMHUB_SMTP_FROM",a.target.value),placeholder:"",autoComplete:"off"})}),e.jsx(x,{label:s("email.secure"),hint:s("email.secureHint"),children:e.jsxs(D,{value:r.IMHUB_SMTP_SECURE,onValueChange:a=>d("IMHUB_SMTP_SECURE",a),children:[e.jsx(V,{children:e.jsx(X,{})}),e.jsxs(G,{children:[e.jsx(g,{value:"auto",children:s("email.secureAuto")}),e.jsx(g,{value:"true",children:s("email.secureTrue")}),e.jsx(g,{value:"false",children:s("email.secureFalse")})]})]})})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 border-t border-border px-4 py-3",children:[e.jsxs(u,{variant:"secondary",size:"sm",onClick:()=>void w(),disabled:!_||S.isPending,title:_?void 0:s("email.testNeedsConfigured"),children:[O,s("email.testBtn")]}),e.jsxs(u,{variant:"ghost",size:"sm",onClick:()=>void y(),disabled:!_||o.isPending,className:"text-danger hover:text-danger",children:[e.jsx(se,{className:"h-4 w-4"}),s("email.disableBtn")]}),e.jsx("span",{className:"ml-auto"}),N&&e.jsxs(e.Fragment,{children:[e.jsx(u,{variant:"ghost",size:"sm",onClick:E,disabled:o.isPending,children:s("email.discard")}),e.jsxs(u,{size:"sm",onClick:()=>void R(),disabled:o.isPending,children:[o.isPending?e.jsx(H,{className:"h-4 w-4 animate-spin"}):e.jsx(ae,{className:"h-4 w-4"}),o.isPending?s("email.saving"):s("email.saveBtn")]})]})]})]})]})}function x({label:s,hint:i,children:T}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(J,{className:"text-xs font-medium",children:s}),T,i&&e.jsx("p",{className:"text-[11px] text-text-dim",children:i})]})}export{Me as default,ie as normalizeSecure};
7
- //# sourceMappingURL=email-Dy3UoyzF.js.map
6
+ */const te=A("Mail",[["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}],["path",{d:"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7",key:"1ocrg3"}]]),U=["IMHUB_SMTP_HOST","IMHUB_SMTP_PORT","IMHUB_SMTP_USER","IMHUB_SMTP_PASS","IMHUB_SMTP_FROM","IMHUB_SMTP_SECURE"];function v(){return{IMHUB_SMTP_HOST:"",IMHUB_SMTP_PORT:"",IMHUB_SMTP_USER:"",IMHUB_SMTP_PASS:"",IMHUB_SMTP_FROM:"",IMHUB_SMTP_SECURE:"auto"}}function ie(s){const i=(s??"").trim().toLowerCase();return i==="1"||i==="true"||i==="yes"?"true":i==="0"||i==="false"||i==="no"?"false":"auto"}function P(s){return{IMHUB_SMTP_HOST:s.IMHUB_SMTP_HOST??"",IMHUB_SMTP_PORT:s.IMHUB_SMTP_PORT??"",IMHUB_SMTP_USER:s.IMHUB_SMTP_USER??"",IMHUB_SMTP_PASS:s.IMHUB_SMTP_PASS??"",IMHUB_SMTP_FROM:s.IMHUB_SMTP_FROM??"",IMHUB_SMTP_SECURE:ie(s.IMHUB_SMTP_SECURE)}}function B(s){return/\*{3,}/.test(s)}function Me(){const{t:s}=F(["settings","common"]),[i,T]=M.useState(!1),n=Q({reveal:i}),o=Y(),h=q(),l=n.data?.env??{},[r,f]=M.useState(v),[b,C]=M.useState("");M.useEffect(()=>{if(!n.data)return;const a=P(l),t=JSON.stringify(a);t!==b&&(f(a),C(t))},[n.dataUpdatedAt]);const _=!!(l.IMHUB_SMTP_HOST&&l.IMHUB_SMTP_USER&&l.IMHUB_SMTP_PASS),N=M.useMemo(()=>{if(!n.data)return!1;const a=P(l);for(const t of U)if(!(t==="IMHUB_SMTP_PASS"&&r[t]&&B(r[t])&&r[t]===a[t])&&r[t]!==a[t])return!0;return!1},[r,l,n.data]);function d(a,t){f(c=>({...c,[a]:t}))}function E(){n.data&&f(P(l))}async function R(){if(!n.data)return;const a=P(l),t={};for(const c of U){const p=r[c],k=a[c];p!==k&&(c==="IMHUB_SMTP_PASS"&&B(p)||(t[c]=p===""?null:p))}if(Object.keys(t).length===0){m.info(s("email.toast.noChanges"));return}try{await o.mutateAsync({updates:t}),m.success(s("email.toast.saved"))}catch(c){m.error(j(c,s).message)}}async function y(){if(!n.data)return;const a={};for(const t of U)a[t]=null;try{await o.mutateAsync({updates:a}),f(v()),m.success(s("email.toast.disabled"))}catch(t){m.error(j(t,s).message)}}async function w(){try{const a=await h.mutateAsync();m.success(a.message)}catch(a){m.error(j(a,s).message)}}const O=h.isPending?e.jsx(H,{className:"h-4 w-4 animate-spin"}):h.isError?e.jsx(G,{className:"h-4 w-4 text-danger"}):h.isSuccess?e.jsx(W,{className:"h-4 w-4 text-success"}):e.jsx(L,{className:"h-4 w-4"});return e.jsxs("div",{className:"mx-auto flex max-w-4xl flex-col gap-4",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("email.title")}),_?e.jsx(I,{variant:"success",children:s("email.statusOn")}):e.jsx(I,{variant:"outline",children:s("email.statusOff")}),e.jsxs(u,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void n.refetch(),disabled:n.isFetching,"aria-label":s("actions.refresh",{ns:"common"}),children:[n.isFetching?e.jsx(H,{className:"h-4 w-4 animate-spin"}):e.jsx(Z,{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("email.subtitle")})]}),n.isLoading?e.jsx("div",{className:"h-64 rounded-md bg-surface-2 animate-pulse"}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx(te,{className:"h-4 w-4 text-text-dim"}),e.jsx("h2",{className:"text-sm font-semibold",children:s("email.cardTitle")}),e.jsxs(u,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>T(a=>!a),disabled:n.isFetching,"aria-label":s(i?"email.hide":"email.reveal"),children:[i?e.jsx($,{className:"h-4 w-4"}):e.jsx(ee,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s(i?"email.hide":"email.reveal")})]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-3 px-4 py-4 sm:grid-cols-2",children:[e.jsx(x,{label:s("email.host"),hint:s("email.hostHint"),children:e.jsx(S,{value:r.IMHUB_SMTP_HOST,onChange:a=>d("IMHUB_SMTP_HOST",a.target.value),placeholder:"smtp.gmail.com",autoComplete:"off"})}),e.jsx(x,{label:s("email.port"),hint:s("email.portHint"),children:e.jsx(S,{type:"number",inputMode:"numeric",min:1,max:65535,value:r.IMHUB_SMTP_PORT,onChange:a=>d("IMHUB_SMTP_PORT",a.target.value),placeholder:"465",autoComplete:"off"})}),e.jsx(x,{label:s("email.user"),hint:s("email.userHint"),children:e.jsx(S,{value:r.IMHUB_SMTP_USER,onChange:a=>d("IMHUB_SMTP_USER",a.target.value),placeholder:"you@example.com",autoComplete:"off"})}),e.jsx(x,{label:s("email.pass"),hint:s("email.passHint"),children:e.jsx(S,{type:i?"text":"password",value:r.IMHUB_SMTP_PASS,onChange:a=>d("IMHUB_SMTP_PASS",a.target.value),placeholder:"••••••••",autoComplete:"new-password",className:z(B(r.IMHUB_SMTP_PASS)&&"font-mono text-text-muted")})}),e.jsx(x,{label:s("email.from"),hint:s("email.fromHint"),children:e.jsx(S,{value:r.IMHUB_SMTP_FROM,onChange:a=>d("IMHUB_SMTP_FROM",a.target.value),placeholder:"",autoComplete:"off"})}),e.jsx(x,{label:s("email.secure"),hint:s("email.secureHint"),children:e.jsxs(D,{value:r.IMHUB_SMTP_SECURE,onValueChange:a=>d("IMHUB_SMTP_SECURE",a),children:[e.jsx(V,{children:e.jsx(X,{})}),e.jsxs(J,{children:[e.jsx(g,{value:"auto",children:s("email.secureAuto")}),e.jsx(g,{value:"true",children:s("email.secureTrue")}),e.jsx(g,{value:"false",children:s("email.secureFalse")})]})]})})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 border-t border-border px-4 py-3",children:[e.jsxs(u,{variant:"secondary",size:"sm",onClick:()=>void w(),disabled:!_||h.isPending,title:_?void 0:s("email.testNeedsConfigured"),children:[O,s("email.testBtn")]}),e.jsxs(u,{variant:"ghost",size:"sm",onClick:()=>void y(),disabled:!_||o.isPending,className:"text-danger hover:text-danger",children:[e.jsx(se,{className:"h-4 w-4"}),s("email.disableBtn")]}),e.jsx("span",{className:"ml-auto"}),N&&e.jsxs(e.Fragment,{children:[e.jsx(u,{variant:"ghost",size:"sm",onClick:E,disabled:o.isPending,children:s("email.discard")}),e.jsxs(u,{size:"sm",onClick:()=>void R(),disabled:o.isPending,children:[o.isPending?e.jsx(H,{className:"h-4 w-4 animate-spin"}):e.jsx(ae,{className:"h-4 w-4"}),o.isPending?s("email.saving"):s("email.saveBtn")]})]})]})]})]})}function x({label:s,hint:i,children:T}){return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(K,{className:"text-xs font-medium",children:s}),T,i&&e.jsx("p",{className:"text-[11px] text-text-dim",children:i})]})}export{Me as default,ie as normalizeSecure};
7
+ //# sourceMappingURL=email-6vlGBJXY.js.map