@polderlabs/bizar 10.0.7 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/README.md +0 -2
  2. package/bizar-dash/dist/assets/{ActivityFeed-Da-JCrE6.js → ActivityFeed-JjmOY2AQ.js} +1 -1
  3. package/bizar-dash/dist/assets/{ActivityFeed-Da-JCrE6.js.map → ActivityFeed-JjmOY2AQ.js.map} +1 -1
  4. package/bizar-dash/dist/assets/{ActivityView-nIRsSETb.js → ActivityView-BIIMvGWo.js} +1 -1
  5. package/bizar-dash/dist/assets/{ActivityView-nIRsSETb.js.map → ActivityView-BIIMvGWo.js.map} +1 -1
  6. package/bizar-dash/dist/assets/{AdminView-DP1NMxmG.js → AdminView-DRidJtkq.js} +1 -1
  7. package/bizar-dash/dist/assets/{AdminView-DP1NMxmG.js.map → AdminView-DRidJtkq.js.map} +1 -1
  8. package/bizar-dash/dist/assets/{AgentActivity-lSPkOr-O.js → AgentActivity-79l4SBMC.js} +1 -1
  9. package/bizar-dash/dist/assets/{AgentActivity-lSPkOr-O.js.map → AgentActivity-79l4SBMC.js.map} +1 -1
  10. package/bizar-dash/dist/assets/{AgentsView-BIWGkz7w.js → AgentsView-0vT4uPSc.js} +1 -1
  11. package/bizar-dash/dist/assets/{AgentsView-BIWGkz7w.js.map → AgentsView-0vT4uPSc.js.map} +1 -1
  12. package/bizar-dash/dist/assets/{Alert-DN0UysMg.js → Alert-CG5q_s75.js} +1 -1
  13. package/bizar-dash/dist/assets/{Alert-DN0UysMg.js.map → Alert-CG5q_s75.js.map} +1 -1
  14. package/bizar-dash/dist/assets/ArtifactsView-DM8ZmpR9.js +21 -0
  15. package/bizar-dash/dist/assets/ArtifactsView-DM8ZmpR9.js.map +1 -0
  16. package/bizar-dash/dist/assets/{AuthView-DW5cs7ma.js → AuthView-BveN94MC.js} +1 -1
  17. package/bizar-dash/dist/assets/{AuthView-DW5cs7ma.js.map → AuthView-BveN94MC.js.map} +1 -1
  18. package/bizar-dash/dist/assets/{Avatar-DZPv9pvd.js → Avatar-ulUPIYTd.js} +1 -1
  19. package/bizar-dash/dist/assets/{Avatar-DZPv9pvd.js.map → Avatar-ulUPIYTd.js.map} +1 -1
  20. package/bizar-dash/dist/assets/{BackgroundJobsView-D8O-EyMD.js → BackgroundJobsView-BWErhqFo.js} +1 -1
  21. package/bizar-dash/dist/assets/{BackgroundJobsView-D8O-EyMD.js.map → BackgroundJobsView-BWErhqFo.js.map} +1 -1
  22. package/bizar-dash/dist/assets/{BackupView-uwXkhxOV.js → BackupView-CnBjzG9N.js} +1 -1
  23. package/bizar-dash/dist/assets/{BackupView-uwXkhxOV.js.map → BackupView-CnBjzG9N.js.map} +1 -1
  24. package/bizar-dash/dist/assets/{Card-Tyboihu7.js → Card-B0imhxMk.js} +1 -1
  25. package/bizar-dash/dist/assets/{Card-Tyboihu7.js.map → Card-B0imhxMk.js.map} +1 -1
  26. package/bizar-dash/dist/assets/{ChatView-DRBHzgay.js → ChatView-D6zGytzx.js} +1 -1
  27. package/bizar-dash/dist/assets/{ChatView-DRBHzgay.js.map → ChatView-D6zGytzx.js.map} +1 -1
  28. package/bizar-dash/dist/assets/{Chip-BrXIlR9w.js → Chip-wwZSGwLE.js} +1 -1
  29. package/bizar-dash/dist/assets/{Chip-BrXIlR9w.js.map → Chip-wwZSGwLE.js.map} +1 -1
  30. package/bizar-dash/dist/assets/{ClaudeSessionsView-Ck62jaOr.js → ClaudeSessionsView-DK1sOLhi.js} +1 -1
  31. package/bizar-dash/dist/assets/{ClaudeSessionsView-Ck62jaOr.js.map → ClaudeSessionsView-DK1sOLhi.js.map} +1 -1
  32. package/bizar-dash/dist/assets/{ClipboardView-DfND6xL6.js → ClipboardView-CZ2lYPr0.js} +1 -1
  33. package/bizar-dash/dist/assets/{ClipboardView-DfND6xL6.js.map → ClipboardView-CZ2lYPr0.js.map} +1 -1
  34. package/bizar-dash/dist/assets/{ConfigView-DjJmSrOJ.js → ConfigView-D-zT9eNA.js} +1 -1
  35. package/bizar-dash/dist/assets/{ConfigView-DjJmSrOJ.js.map → ConfigView-D-zT9eNA.js.map} +1 -1
  36. package/bizar-dash/dist/assets/{DiagnosticsView-CKgItf0J.js → DiagnosticsView-BocV68Lb.js} +1 -1
  37. package/bizar-dash/dist/assets/{DiagnosticsView-CKgItf0J.js.map → DiagnosticsView-BocV68Lb.js.map} +1 -1
  38. package/bizar-dash/dist/assets/{DialogsView-DHYF8dE1.js → DialogsView-BVjPI5x7.js} +1 -1
  39. package/bizar-dash/dist/assets/{DialogsView-DHYF8dE1.js.map → DialogsView-BVjPI5x7.js.map} +1 -1
  40. package/bizar-dash/dist/assets/{DoctorView-DDLHrSKk.js → DoctorView-84gJcZwM.js} +1 -1
  41. package/bizar-dash/dist/assets/{DoctorView-DDLHrSKk.js.map → DoctorView-84gJcZwM.js.map} +1 -1
  42. package/bizar-dash/dist/assets/{EmptyState-DZ2ouKwd.js → EmptyState-BjgVOrcO.js} +1 -1
  43. package/bizar-dash/dist/assets/{EmptyState-DZ2ouKwd.js.map → EmptyState-BjgVOrcO.js.map} +1 -1
  44. package/bizar-dash/dist/assets/{EnvVarsView-D1cx83mB.js → EnvVarsView-BJ2TEzF7.js} +1 -1
  45. package/bizar-dash/dist/assets/{EnvVarsView-D1cx83mB.js.map → EnvVarsView-BJ2TEzF7.js.map} +1 -1
  46. package/bizar-dash/dist/assets/{ErrorState-DwwJ2-Jq.js → ErrorState-BE3WBFqF.js} +1 -1
  47. package/bizar-dash/dist/assets/{ErrorState-DwwJ2-Jq.js.map → ErrorState-BE3WBFqF.js.map} +1 -1
  48. package/bizar-dash/dist/assets/{EvalView-C9aYixXW.js → EvalView-BJJ2P-kK.js} +1 -1
  49. package/bizar-dash/dist/assets/{EvalView-C9aYixXW.js.map → EvalView-BJJ2P-kK.js.map} +1 -1
  50. package/bizar-dash/dist/assets/{GoalsView-DZa_mGmh.js → GoalsView-pwROHApi.js} +1 -1
  51. package/bizar-dash/dist/assets/{GoalsView-DZa_mGmh.js.map → GoalsView-pwROHApi.js.map} +1 -1
  52. package/bizar-dash/dist/assets/{Grid-CiRyhAgR.js → Grid-qcvbhx6e.js} +1 -1
  53. package/bizar-dash/dist/assets/{Grid-CiRyhAgR.js.map → Grid-qcvbhx6e.js.map} +1 -1
  54. package/bizar-dash/dist/assets/{HeadroomView-CNc-TI7u.js → HeadroomView-D1UiTYbt.js} +1 -1
  55. package/bizar-dash/dist/assets/{HeadroomView-CNc-TI7u.js.map → HeadroomView-D1UiTYbt.js.map} +1 -1
  56. package/bizar-dash/dist/assets/{HistoryView-Dv7aPxJE.js → HistoryView-C7SSOLJA.js} +1 -1
  57. package/bizar-dash/dist/assets/{HistoryView-Dv7aPxJE.js.map → HistoryView-C7SSOLJA.js.map} +1 -1
  58. package/bizar-dash/dist/assets/{Input-BbFUDQnS.js → Input-Bgzxf_Hu.js} +1 -1
  59. package/bizar-dash/dist/assets/{Input-BbFUDQnS.js.map → Input-Bgzxf_Hu.js.map} +1 -1
  60. package/bizar-dash/dist/assets/{LibrariesView-DBQ83TNa.js → LibrariesView-CbFFksox.js} +1 -1
  61. package/bizar-dash/dist/assets/{LibrariesView-DBQ83TNa.js.map → LibrariesView-CbFFksox.js.map} +1 -1
  62. package/bizar-dash/dist/assets/{LightRAGView-JYpE5u9p.js → LightRAGView-BqDrJbRq.js} +1 -1
  63. package/bizar-dash/dist/assets/{LightRAGView-JYpE5u9p.js.map → LightRAGView-BqDrJbRq.js.map} +1 -1
  64. package/bizar-dash/dist/assets/{ListHeader-BGjm11Z0.js → ListHeader-TjPJrUfY.js} +1 -1
  65. package/bizar-dash/dist/assets/{ListHeader-BGjm11Z0.js.map → ListHeader-TjPJrUfY.js.map} +1 -1
  66. package/bizar-dash/dist/assets/{MemoryView-CnOP2MvM.js → MemoryView-BlTeHLhX.js} +1 -1
  67. package/bizar-dash/dist/assets/{MemoryView-CnOP2MvM.js.map → MemoryView-BlTeHLhX.js.map} +1 -1
  68. package/bizar-dash/dist/assets/{MiscView-BBcpUbZZ.js → MiscView-B8QY82Pm.js} +1 -1
  69. package/bizar-dash/dist/assets/{MiscView-BBcpUbZZ.js.map → MiscView-B8QY82Pm.js.map} +1 -1
  70. package/bizar-dash/dist/assets/{ModsView-CU4cAmIz.js → ModsView-CvW1OWts.js} +1 -1
  71. package/bizar-dash/dist/assets/{ModsView-CU4cAmIz.js.map → ModsView-CvW1OWts.js.map} +1 -1
  72. package/bizar-dash/dist/assets/{NotificationsView-BYffvthq.js → NotificationsView-CsBt5U7x.js} +1 -1
  73. package/bizar-dash/dist/assets/{NotificationsView-BYffvthq.js.map → NotificationsView-CsBt5U7x.js.map} +1 -1
  74. package/bizar-dash/dist/assets/{ObsidianView-D3bI0row.js → ObsidianView-BCTejEj2.js} +1 -1
  75. package/bizar-dash/dist/assets/{ObsidianView-D3bI0row.js.map → ObsidianView-BCTejEj2.js.map} +1 -1
  76. package/bizar-dash/dist/assets/{OverviewView-0tq8f-Y0.js → OverviewView-BsuPxwnB.js} +1 -1
  77. package/bizar-dash/dist/assets/{OverviewView-0tq8f-Y0.js.map → OverviewView-BsuPxwnB.js.map} +1 -1
  78. package/bizar-dash/dist/assets/{ProgressBar-B-h60LKA.js → ProgressBar-DlZTETEn.js} +1 -1
  79. package/bizar-dash/dist/assets/{ProgressBar-B-h60LKA.js.map → ProgressBar-DlZTETEn.js.map} +1 -1
  80. package/bizar-dash/dist/assets/{ProjectsView-DhX5lzHS.js → ProjectsView-Soxtmpet.js} +1 -1
  81. package/bizar-dash/dist/assets/{ProjectsView-DhX5lzHS.js.map → ProjectsView-Soxtmpet.js.map} +1 -1
  82. package/bizar-dash/dist/assets/{ProvidersView-CJMX7jm9.js → ProvidersView-DaCEV9pM.js} +1 -1
  83. package/bizar-dash/dist/assets/{ProvidersView-CJMX7jm9.js.map → ProvidersView-DaCEV9pM.js.map} +1 -1
  84. package/bizar-dash/dist/assets/{SchedulesView-CcwDQ9Nm.js → SchedulesView-DY2ByBj_.js} +1 -1
  85. package/bizar-dash/dist/assets/{SchedulesView-CcwDQ9Nm.js.map → SchedulesView-DY2ByBj_.js.map} +1 -1
  86. package/bizar-dash/dist/assets/{Select-Cw7Qtz2M.js → Select-Dbd88_n8.js} +1 -1
  87. package/bizar-dash/dist/assets/{Select-Cw7Qtz2M.js.map → Select-Dbd88_n8.js.map} +1 -1
  88. package/bizar-dash/dist/assets/{SettingsRow-DgsgbPSI.js → SettingsRow-CLMNd434.js} +1 -1
  89. package/bizar-dash/dist/assets/{SettingsRow-DgsgbPSI.js.map → SettingsRow-CLMNd434.js.map} +1 -1
  90. package/bizar-dash/dist/assets/{SettingsView-DTAFdKyK.js → SettingsView-b24oFq9x.js} +1 -1
  91. package/bizar-dash/dist/assets/{SettingsView-DTAFdKyK.js.map → SettingsView-b24oFq9x.js.map} +1 -1
  92. package/bizar-dash/dist/assets/{Sheet-DH-WNJ3Y.js → Sheet-DnDid58j.js} +1 -1
  93. package/bizar-dash/dist/assets/{Sheet-DH-WNJ3Y.js.map → Sheet-DnDid58j.js.map} +1 -1
  94. package/bizar-dash/dist/assets/{Slider-DXbJuQ7y.js → Slider-BJCvKI1I.js} +1 -1
  95. package/bizar-dash/dist/assets/{Slider-DXbJuQ7y.js.map → Slider-BJCvKI1I.js.map} +1 -1
  96. package/bizar-dash/dist/assets/{Sparkline-CYtAn82j.js → Sparkline-ktqQLdyb.js} +1 -1
  97. package/bizar-dash/dist/assets/{Sparkline-CYtAn82j.js.map → Sparkline-ktqQLdyb.js.map} +1 -1
  98. package/bizar-dash/dist/assets/{Switch-BItGrPqr.js → Switch-CwXfsDii.js} +1 -1
  99. package/bizar-dash/dist/assets/{Switch-BItGrPqr.js.map → Switch-CwXfsDii.js.map} +1 -1
  100. package/bizar-dash/dist/assets/{TasksView-i5tm6CkX.js → TasksView-BHmpzFCf.js} +1 -1
  101. package/bizar-dash/dist/assets/{TasksView-i5tm6CkX.js.map → TasksView-BHmpzFCf.js.map} +1 -1
  102. package/bizar-dash/dist/assets/{Textarea-qYDf3yds.js → Textarea-BzIAwSlp.js} +1 -1
  103. package/bizar-dash/dist/assets/{Textarea-qYDf3yds.js.map → Textarea-BzIAwSlp.js.map} +1 -1
  104. package/bizar-dash/dist/assets/{UpdateView-Xln-ej26.js → UpdateView-CSmX9NN0.js} +1 -1
  105. package/bizar-dash/dist/assets/{UpdateView-Xln-ej26.js.map → UpdateView-CSmX9NN0.js.map} +1 -1
  106. package/bizar-dash/dist/assets/{UsageView-BGuZSUZ6.js → UsageView-COyr_Gfi.js} +1 -1
  107. package/bizar-dash/dist/assets/{UsageView-BGuZSUZ6.js.map → UsageView-COyr_Gfi.js.map} +1 -1
  108. package/bizar-dash/dist/assets/{ViewHeader-BqIPVKuG.js → ViewHeader-BzYZ3m-e.js} +1 -1
  109. package/bizar-dash/dist/assets/{ViewHeader-BqIPVKuG.js.map → ViewHeader-BzYZ3m-e.js.map} +1 -1
  110. package/bizar-dash/dist/assets/{VoiceView-CWUOCQs_.js → VoiceView-D33_xG5t.js} +1 -1
  111. package/bizar-dash/dist/assets/{VoiceView-CWUOCQs_.js.map → VoiceView-D33_xG5t.js.map} +1 -1
  112. package/bizar-dash/dist/assets/{brain-fsBSDl2g.js → brain-CM-Vls8r.js} +1 -1
  113. package/bizar-dash/dist/assets/{brain-fsBSDl2g.js.map → brain-CM-Vls8r.js.map} +1 -1
  114. package/bizar-dash/dist/assets/{calendar-DsHTZoCU.js → calendar-C0lgZk69.js} +1 -1
  115. package/bizar-dash/dist/assets/{calendar-DsHTZoCU.js.map → calendar-C0lgZk69.js.map} +1 -1
  116. package/bizar-dash/dist/assets/{circle-CqSxqqeJ.js → circle-Bx_hQEBC.js} +1 -1
  117. package/bizar-dash/dist/assets/{circle-CqSxqqeJ.js.map → circle-Bx_hQEBC.js.map} +1 -1
  118. package/bizar-dash/dist/assets/{circle-alert-BsLl001l.js → circle-alert-DHvsqpw5.js} +1 -1
  119. package/bizar-dash/dist/assets/{circle-alert-BsLl001l.js.map → circle-alert-DHvsqpw5.js.map} +1 -1
  120. package/bizar-dash/dist/assets/{circle-check-rVKMQmZp.js → circle-check-Bx8wmXR9.js} +1 -1
  121. package/bizar-dash/dist/assets/{circle-check-rVKMQmZp.js.map → circle-check-Bx8wmXR9.js.map} +1 -1
  122. package/bizar-dash/dist/assets/{clock-OuficfgH.js → clock-CejGoecX.js} +1 -1
  123. package/bizar-dash/dist/assets/{clock-OuficfgH.js.map → clock-CejGoecX.js.map} +1 -1
  124. package/bizar-dash/dist/assets/{download-BdHlstUY.js → download-4cEUWue1.js} +1 -1
  125. package/bizar-dash/dist/assets/{download-BdHlstUY.js.map → download-4cEUWue1.js.map} +1 -1
  126. package/bizar-dash/dist/assets/{external-link-DA3_VGm-.js → external-link-0NqUhI4i.js} +1 -1
  127. package/bizar-dash/dist/assets/{external-link-DA3_VGm-.js.map → external-link-0NqUhI4i.js.map} +1 -1
  128. package/bizar-dash/dist/assets/{file-text-B-g8H227.js → file-text-yEMkrSoZ.js} +1 -1
  129. package/bizar-dash/dist/assets/{file-text-B-g8H227.js.map → file-text-yEMkrSoZ.js.map} +1 -1
  130. package/bizar-dash/dist/assets/{filter-D9B8s5CG.js → filter-BXt60zAS.js} +1 -1
  131. package/bizar-dash/dist/assets/{filter-D9B8s5CG.js.map → filter-BXt60zAS.js.map} +1 -1
  132. package/bizar-dash/dist/assets/{git-pull-request-ByH0YuVz.js → git-pull-request-BjG5lNtR.js} +1 -1
  133. package/bizar-dash/dist/assets/{git-pull-request-ByH0YuVz.js.map → git-pull-request-BjG5lNtR.js.map} +1 -1
  134. package/bizar-dash/dist/assets/{main-CdOm1Pj9.js → main-CokHAXWM.js} +2 -2
  135. package/bizar-dash/dist/assets/{main-CdOm1Pj9.js.map → main-CokHAXWM.js.map} +1 -1
  136. package/bizar-dash/dist/assets/{pause-C9hgd8wX.js → pause-CAmulU0F.js} +1 -1
  137. package/bizar-dash/dist/assets/{pause-C9hgd8wX.js.map → pause-CAmulU0F.js.map} +1 -1
  138. package/bizar-dash/dist/assets/{pencil-BanqaMw7.js → pencil-eq5IqBmU.js} +1 -1
  139. package/bizar-dash/dist/assets/{pencil-BanqaMw7.js.map → pencil-eq5IqBmU.js.map} +1 -1
  140. package/bizar-dash/dist/assets/{play-CawUZ02_.js → play-BoLrrcBA.js} +1 -1
  141. package/bizar-dash/dist/assets/{play-CawUZ02_.js.map → play-BoLrrcBA.js.map} +1 -1
  142. package/bizar-dash/dist/assets/{plug-Cmv0-T_e.js → plug-DBrVM9lK.js} +1 -1
  143. package/bizar-dash/dist/assets/{plug-Cmv0-T_e.js.map → plug-DBrVM9lK.js.map} +1 -1
  144. package/bizar-dash/dist/assets/{plus-M6LYiKX8.js → plus-DENm0hqV.js} +1 -1
  145. package/bizar-dash/dist/assets/{plus-M6LYiKX8.js.map → plus-DENm0hqV.js.map} +1 -1
  146. package/bizar-dash/dist/assets/{power-DP5x_SRF.js → power-DLjXF7zE.js} +1 -1
  147. package/bizar-dash/dist/assets/{power-DP5x_SRF.js.map → power-DLjXF7zE.js.map} +1 -1
  148. package/bizar-dash/dist/assets/{power-off-NOJRLAIs.js → power-off-D47cOnG_.js} +1 -1
  149. package/bizar-dash/dist/assets/{power-off-NOJRLAIs.js.map → power-off-D47cOnG_.js.map} +1 -1
  150. package/bizar-dash/dist/assets/{refresh-ccw-CHMprsm5.js → refresh-ccw-DNrXX9gB.js} +1 -1
  151. package/bizar-dash/dist/assets/{refresh-ccw-CHMprsm5.js.map → refresh-ccw-DNrXX9gB.js.map} +1 -1
  152. package/bizar-dash/dist/assets/{refresh-cw-1RBqDKgJ.js → refresh-cw-CoAHDpeS.js} +1 -1
  153. package/bizar-dash/dist/assets/{refresh-cw-1RBqDKgJ.js.map → refresh-cw-CoAHDpeS.js.map} +1 -1
  154. package/bizar-dash/dist/assets/{rotate-ccw-DJRekBbi.js → rotate-ccw-ObX5awaG.js} +1 -1
  155. package/bizar-dash/dist/assets/{rotate-ccw-DJRekBbi.js.map → rotate-ccw-ObX5awaG.js.map} +1 -1
  156. package/bizar-dash/dist/assets/{rotate-cw-DHooc0Tx.js → rotate-cw-xpPJw9LP.js} +1 -1
  157. package/bizar-dash/dist/assets/{rotate-cw-DHooc0Tx.js.map → rotate-cw-xpPJw9LP.js.map} +1 -1
  158. package/bizar-dash/dist/assets/{save-DQKCKyZK.js → save-D1iKiJJl.js} +1 -1
  159. package/bizar-dash/dist/assets/{save-DQKCKyZK.js.map → save-D1iKiJJl.js.map} +1 -1
  160. package/bizar-dash/dist/assets/{send-xgy3RAi7.js → send-BRcAhZUm.js} +1 -1
  161. package/bizar-dash/dist/assets/{send-xgy3RAi7.js.map → send-BRcAhZUm.js.map} +1 -1
  162. package/bizar-dash/dist/assets/{shield-alert-CWV2F5ab.js → shield-alert-C6vEcK-g.js} +1 -1
  163. package/bizar-dash/dist/assets/{shield-alert-CWV2F5ab.js.map → shield-alert-C6vEcK-g.js.map} +1 -1
  164. package/bizar-dash/dist/assets/{trash-2-CL4khSRv.js → trash-2-DZDjEnNh.js} +1 -1
  165. package/bizar-dash/dist/assets/{trash-2-CL4khSRv.js.map → trash-2-DZDjEnNh.js.map} +1 -1
  166. package/bizar-dash/dist/assets/{trending-up-CSJJhWTS.js → trending-up-DMj-AJVf.js} +1 -1
  167. package/bizar-dash/dist/assets/{trending-up-CSJJhWTS.js.map → trending-up-DMj-AJVf.js.map} +1 -1
  168. package/bizar-dash/dist/assets/{triangle-alert-BPLb7uLt.js → triangle-alert-_2xe_tl4.js} +1 -1
  169. package/bizar-dash/dist/assets/{triangle-alert-BPLb7uLt.js.map → triangle-alert-_2xe_tl4.js.map} +1 -1
  170. package/bizar-dash/dist/assets/{upload-Cww6MvFq.js → upload-DdDljAeV.js} +1 -1
  171. package/bizar-dash/dist/assets/{upload-Cww6MvFq.js.map → upload-DdDljAeV.js.map} +1 -1
  172. package/bizar-dash/dist/assets/{zap-DmhVUzRA.js → zap-mHsgh0FP.js} +1 -1
  173. package/bizar-dash/dist/assets/{zap-DmhVUzRA.js.map → zap-mHsgh0FP.js.map} +1 -1
  174. package/bizar-dash/dist/index.html +1 -1
  175. package/bizar-dash/src/server/api.mjs +13 -6
  176. package/bizar-dash/src/server/artifacts-store.mjs +120 -14
  177. package/bizar-dash/src/server/claude-artifacts.mjs +281 -0
  178. package/bizar-dash/src/server/diagnostics-store.mjs +5 -35
  179. package/bizar-dash/src/server/mod-security.mjs +1 -2
  180. package/bizar-dash/src/server/providers-store.mjs +1 -1
  181. package/bizar-dash/src/server/routes/_shared.mjs +0 -17
  182. package/bizar-dash/src/server/routes/artifacts.mjs +42 -6
  183. package/bizar-dash/src/server/routes/audit.mjs +78 -0
  184. package/bizar-dash/src/server/routes/decisions.mjs +78 -0
  185. package/bizar-dash/src/server/routes/model-router.mjs +158 -0
  186. package/bizar-dash/src/server/routes/model-router.test.mjs +104 -0
  187. package/bizar-dash/src/server/routes/sessions.mjs +80 -0
  188. package/bizar-dash/src/server/server.mjs +1 -27
  189. package/bizar-dash/src/server/sprint.test.mjs +163 -0
  190. package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +232 -21
  191. package/bizar-dash/src/web/v8/views/Artifacts/ClaudeArtifactView.tsx +179 -0
  192. package/bizar-dash/tests/cli-bugfixes.test.mjs +1 -1
  193. package/bizar-dash/tests/cli-error-visibility.test.mjs +1 -1
  194. package/bizar-dash/tests/cli-refactor.test.mjs +0 -1
  195. package/bizar-dash/tests/diagnostics-store.test.mjs +0 -1
  196. package/cli/bin.mjs +1 -15
  197. package/cli/cli-commands-validation.test.mjs +1 -1
  198. package/cli/commands/lightrag.mjs +1 -1
  199. package/cli/commands/util.mjs +1 -1
  200. package/cli/copy.mjs +1 -47
  201. package/cli/doctor.mjs +3 -3
  202. package/cli/install.mjs +3 -37
  203. package/cli/service-controller.mjs +0 -192
  204. package/cli/service-env.mjs +2 -9
  205. package/cli/utils.mjs +0 -7
  206. package/package.json +1 -1
  207. package/packages/sdk/dist/agent/cron.d.ts +44 -0
  208. package/packages/sdk/dist/agent/cron.js +79 -0
  209. package/packages/sdk/dist/agent/heartbeat.d.ts +43 -0
  210. package/packages/sdk/dist/agent/heartbeat.js +116 -0
  211. package/packages/sdk/dist/index.d.ts +3 -0
  212. package/packages/sdk/dist/index.js +5 -0
  213. package/packages/sdk/dist/learning/decisions.d.ts +46 -0
  214. package/packages/sdk/dist/learning/decisions.js +132 -0
  215. package/packages/sdk/dist/learning/index.d.ts +8 -0
  216. package/packages/sdk/dist/learning/index.js +8 -0
  217. package/packages/sdk/dist/learning/instincts.d.ts +38 -0
  218. package/packages/sdk/dist/learning/instincts.js +139 -0
  219. package/packages/sdk/dist/mcp/server.js +119 -1
  220. package/packages/sdk/dist/router/agent-model-registry.d.ts +89 -0
  221. package/packages/sdk/dist/router/agent-model-registry.js +144 -0
  222. package/packages/sdk/dist/router/index.d.ts +1 -0
  223. package/packages/sdk/dist/router/index.js +1 -0
  224. package/packages/sdk/package.json +3 -2
  225. package/scripts/audit.mjs +388 -0
  226. package/scripts/audit.test.mjs +149 -0
  227. package/scripts/check-deps.mjs +0 -24
  228. package/scripts/eval-gate.mjs +134 -0
  229. package/scripts/eval-gate.test.mjs +138 -0
  230. package/scripts/feature-state-machine.mjs +178 -0
  231. package/scripts/feature-state-machine.test.mjs +135 -0
  232. package/scripts/spec-dedup.test.mjs +124 -0
  233. package/scripts/sprint.mjs +213 -0
  234. package/scripts/worktree-setup.sh +79 -0
  235. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js +0 -6
  236. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsView-DTAFdKyK.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/keyboard.js","../../../node_modules/lucide-react/dist/esm/icons/palette.js","../../../node_modules/lucide-react/dist/esm/icons/sliders-vertical.js","../../src/web/v8/ui/settings/SettingsNav.tsx","../../src/web/v8/views/Settings/SettingsView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.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 Keyboard = createLucideIcon(\"Keyboard\", [\n [\"path\", { d: \"M10 8h.01\", key: \"1r9ogq\" }],\n [\"path\", { d: \"M12 12h.01\", key: \"1mp3jc\" }],\n [\"path\", { d: \"M14 8h.01\", key: \"1primd\" }],\n [\"path\", { d: \"M16 12h.01\", key: \"1l6xoz\" }],\n [\"path\", { d: \"M18 8h.01\", key: \"emo2bl\" }],\n [\"path\", { d: \"M6 8h.01\", key: \"x9i8wu\" }],\n [\"path\", { d: \"M7 16h10\", key: \"wp8him\" }],\n [\"path\", { d: \"M8 12h.01\", key: \"czm47f\" }],\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }]\n]);\n\nexport { Keyboard as default };\n//# sourceMappingURL=keyboard.js.map\n","/**\n * @license lucide-react v0.460.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 Palette = createLucideIcon(\"Palette\", [\n [\"circle\", { cx: \"13.5\", cy: \"6.5\", r: \".5\", fill: \"currentColor\", key: \"1okk4w\" }],\n [\"circle\", { cx: \"17.5\", cy: \"10.5\", r: \".5\", fill: \"currentColor\", key: \"f64h9f\" }],\n [\"circle\", { cx: \"8.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"fotxhn\" }],\n [\"circle\", { cx: \"6.5\", cy: \"12.5\", r: \".5\", fill: \"currentColor\", key: \"qy21gx\" }],\n [\n \"path\",\n {\n d: \"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z\",\n key: \"12rzf8\"\n }\n ]\n]);\n\nexport { Palette as default };\n//# sourceMappingURL=palette.js.map\n","/**\n * @license lucide-react v0.460.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 SlidersVertical = createLucideIcon(\"SlidersVertical\", [\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"21\", y2: \"14\", key: \"1p332r\" }],\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"10\", y2: \"3\", key: \"gb41h5\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"21\", y2: \"12\", key: \"hf2csr\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"3\", key: \"1kfi7u\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"21\", y2: \"16\", key: \"1lhrwl\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"12\", y2: \"3\", key: \"16vvfq\" }],\n [\"line\", { x1: \"2\", x2: \"6\", y1: \"14\", y2: \"14\", key: \"1uebub\" }],\n [\"line\", { x1: \"10\", x2: \"14\", y1: \"8\", y2: \"8\", key: \"1yglbp\" }],\n [\"line\", { x1: \"18\", x2: \"22\", y1: \"16\", y2: \"16\", key: \"1jxqpz\" }]\n]);\n\nexport { SlidersVertical as default };\n//# sourceMappingURL=sliders-vertical.js.map\n","import { type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsNav — left rail inside the Settings page.\n *\n * Lists each section so the user can jump (or scroll) to it. The active\n * section is highlighted. The nav is a vertical list with section ids\n * as the anchor target; no JS router needed.\n */\n\nexport interface SettingsNavItem {\n id: string;\n title: string;\n icon?: ReactNode;\n}\n\nexport interface SettingsNavProps {\n items: readonly SettingsNavItem[];\n /** The id of the currently-visible section. */\n activeId?: string;\n /** Click handler — usually `() => document.getElementById(id)?.scrollIntoView()`. */\n onSelect?: (id: string) => void;\n className?: string;\n}\n\nexport function SettingsNav(props: SettingsNavProps) {\n const { items, activeId, onSelect, className } = props;\n return (\n <nav aria-label=\"Settings sections\" className={cx('v8-settings-nav', className)}>\n <ul\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n }}\n >\n {items.map((item) => {\n const isActive = activeId === item.id;\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect?.(item.id)}\n aria-current={isActive ? 'true' : undefined}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n width: '100%',\n padding: 'var(--space-2) var(--space-3)',\n background: isActive ? 'var(--surface-2)' : 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: isActive ? 'var(--fg)' : 'var(--fg-muted)',\n font: 'inherit',\n fontSize: 'var(--fs-13)',\n fontWeight: isActive ? 500 : 400,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n {item.icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n color: isActive ? 'var(--accent)' : 'var(--fg-subtle)',\n flexShrink: 0,\n }}\n >\n {item.icon}\n </span>\n )}\n <span style={{ minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {item.title}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <style>{`\n .v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }\n `}</style>\n </nav>\n );\n}","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport {\n Palette,\n Keyboard,\n Bell,\n Database,\n Plug,\n Library as LibraryIcon,\n Wrench,\n Activity,\n Brain,\n ShieldCheck,\n Sliders,\n Sparkles,\n Terminal,\n Settings as SettingsIcon,\n Cpu,\n Bot,\n CheckSquare,\n Plus,\n Trash2,\n RotateCw,\n type LucideIcon,\n} from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Slider } from '../../ui/controls/Slider.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { Textarea } from '../../ui/controls/Textarea.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { SettingsSection } from '../../ui/settings/SettingsSection.js';\nimport { SettingsRow } from '../../ui/settings/SettingsRow.js';\nimport { SettingsNav, type SettingsNavItem } from '../../ui/settings/SettingsNav.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { useTheme } from '../../ui/theme/useTheme.js';\nimport { useDensity } from '../../ui/theme/useDensity.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\n\n/**\n * SettingsView — Sprint S15 expansion. 19 sections (up from 16) with\n * real controls throughout. Every Switch / Select / Slider / Input is\n * either:\n * - live-bound to a Provider (Theme / Density),\n * - persisted via PATCH /api/settings (everything else), or\n * - backed by a small per-section sub-endpoint when present.\n *\n * Sections:\n * 1. General workspace identity + default view\n * 2. Theme color mode + accent + font + radius\n * 3. Density comfortable/compact + base font\n * 4. Density rules per-surface overrides\n * 5. Command palette behaviour + history + fuzzy match + nav\n * 6. Keyboard hotkeys (read-only display + rebinds via /kb)\n * 7. Notifications agent / task / CI / budget / daily digest\n * 8. Storage paths + cache sizes + GC button\n * 9. Plugins mods list with enable toggles\n * 10. MCP servers list + status + click for detail\n * 11. Skills list with enable toggles\n * 12. Hooks list with enable toggles\n * 13. Activity retention + hide list + export\n * 14. Memory scope + auto-commit + search defaults\n * 15. Task defaults default priority / column / assignee\n * 16. Agent defaults default model + spawn flags + max mistakes\n * 17. Privacy telemetry + PII + crash reports\n * 18. Advanced debug overlay + restart server + max mistakes\n */\n\ntype Section = { id: string; title: string; icon: LucideIcon };\n\nconst COMMON_TIMEZONES: readonly string[] = [\n 'UTC',\n 'America/Los_Angeles',\n 'America/Denver',\n 'America/Chicago',\n 'America/New_York',\n 'America/Sao_Paulo',\n 'Europe/London',\n 'Europe/Berlin',\n 'Europe/Amsterdam',\n 'Europe/Paris',\n 'Europe/Madrid',\n 'Europe/Stockholm',\n 'Europe/Istanbul',\n 'Asia/Dubai',\n 'Asia/Kolkata',\n 'Asia/Singapore',\n 'Asia/Tokyo',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Australia/Sydney',\n 'Pacific/Auckland',\n];\n\nconst SECTIONS: Section[] = [\n { id: 'general', title: 'General', icon: SettingsIcon },\n { id: 'theme', title: 'Theme', icon: Palette },\n { id: 'density', title: 'Density', icon: Sliders },\n { id: 'density-rules', title: 'Density rules', icon: Sparkles },\n { id: 'palette', title: 'Command palette', icon: Terminal },\n { id: 'keyboard', title: 'Keyboard', icon: Keyboard },\n { id: 'notifications', title: 'Notifications', icon: Bell },\n { id: 'storage', title: 'Storage', icon: Database },\n { id: 'plugins', title: 'Plugins', icon: Plug },\n { id: 'mcps', title: 'MCP servers', icon: Cpu },\n { id: 'skills', title: 'Skills', icon: LibraryIcon },\n { id: 'hooks', title: 'Hooks', icon: Wrench },\n { id: 'activity', title: 'Activity', icon: Activity },\n { id: 'memory', title: 'Memory', icon: Brain },\n { id: 'task-defaults', title: 'Task defaults', icon: CheckSquare },\n { id: 'agent-defaults', title: 'Agent defaults', icon: Bot },\n { id: 'privacy', title: 'Privacy', icon: ShieldCheck },\n { id: 'advanced', title: 'Advanced', icon: SettingsIcon },\n];\n\ninterface SettingsState {\n workspaceName: string;\n workspaceTimezone: string;\n defaultView: 'overview' | 'tasks' | 'goals' | 'agents' | 'activity' | 'settings';\n themeAccent: string;\n densityBaseFont: number;\n tasksCompact: boolean;\n memoryCompact: boolean;\n activityCompact: boolean;\n paletteHistory: boolean;\n paletteFuzzy: boolean;\n notifyAgentFinished: boolean;\n notifyCiFailed: boolean;\n notifyTokenBudget: boolean;\n notifyDailyDigest: boolean;\n notifyChannel: 'toast' | 'system' | 'both' | 'silent';\n storagePath: string;\n cachePath: string;\n sessionsPath: string;\n cacheSizeMb: number;\n hookPreToolUse: boolean;\n hookPostToolUse: boolean;\n hookTaskStart: boolean;\n hookTaskResume: boolean;\n hookUserPromptSubmit: boolean;\n activityRetentionDays: number;\n memoryAutoCommit: boolean;\n memoryScopeDefault: 'project' | 'global' | 'all';\n defaultTaskPriority: 'low' | 'medium' | 'high' | 'urgent';\n defaultTaskColumn: 'queued' | 'doing' | 'blocked' | 'done';\n defaultAgentModel: string;\n defaultAgentMaxMistakes: number;\n analytics: boolean;\n crashReports: boolean;\n piiMode: 'off' | 'redact' | 'pseudonymize' | 'block';\n reducedMotion: boolean;\n debugOverlay: boolean;\n}\n\nconst DEFAULTS: SettingsState = {\n workspaceName: 'Bizar Harness',\n workspaceTimezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : 'UTC',\n defaultView: 'overview',\n themeAccent: '#5b8def',\n densityBaseFont: 13,\n tasksCompact: false,\n memoryCompact: true,\n activityCompact: false,\n paletteHistory: true,\n paletteFuzzy: true,\n notifyAgentFinished: true,\n notifyCiFailed: true,\n notifyTokenBudget: true,\n notifyDailyDigest: false,\n notifyChannel: 'toast',\n storagePath: '~/.bizar/store.db',\n cachePath: '~/.cache/bizar',\n sessionsPath: '~/.claude/sessions',\n cacheSizeMb: 256,\n hookPreToolUse: true,\n hookPostToolUse: true,\n hookTaskStart: true,\n hookTaskResume: true,\n hookUserPromptSubmit: true,\n activityRetentionDays: 30,\n memoryAutoCommit: true,\n memoryScopeDefault: 'all',\n defaultTaskPriority: 'medium',\n defaultTaskColumn: 'queued',\n defaultAgentModel: 'claude-sonnet-4-5',\n defaultAgentMaxMistakes: 10,\n analytics: true,\n crashReports: true,\n piiMode: 'redact',\n reducedMotion: false,\n debugOverlay: false,\n};\n\nconst SELECT_STYLE: CSSProperties = {\n height: 28,\n padding: '0 var(--space-2)',\n borderRadius: 'var(--radius-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n color: 'var(--fg)',\n fontFamily: 'var(--font-sans)',\n fontSize: 'var(--fs-12)',\n cursor: 'pointer',\n outline: 'none',\n};\n\nfunction NativeSelect({\n value,\n defaultValue,\n onChange,\n children,\n id_attr,\n}: {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: ReactNode;\n id_attr?: string;\n}): JSX.Element {\n return (\n <select\n id={id_attr}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(e.target.value)}\n style={SELECT_STYLE}\n >\n {children}\n </select>\n );\n}\n\nfunction Count({ loading, value }: { loading: boolean; value: number | undefined }): JSX.Element {\n if (loading) return <Skeleton style={{ width: 32, height: 16 }} />;\n return <code style={{ fontFamily: 'var(--font-mono)' }}>{value ?? 0}</code>;\n}\n\nexport function SettingsView(): JSX.Element {\n const [activeId, setActiveId] = useState<string>('general');\n const theme = useTheme();\n const density = useDensity();\n const [settings, setSettings] = useState<SettingsState>(DEFAULTS);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [lastAction, setLastAction] = useState<string | null>(null);\n\n // Run an admin endpoint with confirm + busy state + error surface.\n const runAdmin = async (label: string, method: 'POST' | 'DELETE', path: string, confirmMsg: string): Promise<void> => {\n if (typeof window !== 'undefined' && typeof window.confirm === 'function' && !window.confirm(confirmMsg)) return;\n setBusy(label);\n setError(null);\n try {\n await fetchJson(path, { method });\n setLastAction(`${label} @ ${new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(null);\n }\n };\n\n // GET that triggers a browser download (NDJSON for the activity log).\n const downloadFile = (path: string, filename: string): void => {\n if (typeof window === 'undefined') return;\n const a = document.createElement('a');\n a.href = path;\n a.download = filename;\n a.rel = 'noopener';\n document.body.appendChild(a);\n a.click();\n a.remove();\n };\n\n const skillsRes = useFetch<{ skills?: { name: string; source: string }[] }>('/api/skills?kind=skills');\n const mcpsRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=mcps');\n const hooksRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=hooks');\n const agentsRes = useFetch<{ agents?: { name: string }[] }>('/api/agents');\n\n // Hydrate from the server. The server returns the merged\n // (defaults + persisted overrides) shape, so we can spread it\n // directly over our DEFAULTS to pick up any keys we don't model.\n const settingsRes = useFetch<Partial<SettingsState>>('/api/settings');\n useEffect(() => {\n if (settingsRes.data) {\n setSettings((prev) => ({ ...prev, ...settingsRes.data }));\n }\n }, [settingsRes.data]);\n\n const update = <K extends keyof SettingsState>(key: K, value: SettingsState[K]): void => {\n setSettings((s) => ({ ...s, [key]: value }));\n void patch(key, value);\n };\n\n const patch = async (key: string, value: unknown): Promise<void> => {\n try {\n // The settings endpoint accepts a partial body and merges with\n // existing values on the server side — so PUT /api/settings\n // with { [key]: value } is the canonical \"update one row\" path.\n // We re-PUT the full merged shape so the server has the latest\n // copy of every key we know about.\n const merged = { ...settings, [key]: value };\n await fetchJson('/api/settings', { method: 'PUT', body: merged });\n setSavedAt(Date.now());\n setError(null);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const navItems: SettingsNavItem[] = SECTIONS.map((s) => ({\n id: s.id,\n title: s.title,\n icon: <s.icon size={14} aria-hidden=\"true\" />,\n }));\n\n const handleSelect = (id: string): void => {\n setActiveId(id);\n requestAnimationFrame(() => {\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n });\n };\n\n const rootRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined') return;\n const targets = SECTIONS\n .map((s) => document.getElementById(s.id))\n .filter((el): el is HTMLElement => el !== null);\n if (targets.length === 0) return;\n const visible = new Map<string, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = entry.target.id;\n if (entry.isIntersecting) visible.set(id, entry.intersectionRatio);\n else visible.delete(id);\n }\n if (visible.size === 0) return;\n let bestId: string | undefined;\n let bestRatio = -1;\n for (const [id, ratio] of visible) {\n if (ratio > bestRatio) { bestRatio = ratio; bestId = id; }\n }\n if (bestId) setActiveId(bestId);\n },\n { rootMargin: '-30% 0px -50% 0px', threshold: [0, 0.25, 0.5, 0.75, 1] },\n );\n for (const t of targets) observer.observe(t);\n return () => observer.disconnect();\n }, []);\n\n return (\n <div ref={rootRef} data-testid=\"settings-view\">\n <Grid cols={3} gap={5}>\n <aside style={{ position: 'sticky', top: 0, alignSelf: 'start' }}>\n <SettingsNav items={navItems} activeId={activeId} onSelect={handleSelect} />\n </aside>\n <Stack gap={5} style={{ gridColumn: 'span 2' }}>\n {error !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-3)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-md)', fontSize: 'var(--fs-12)' }}>\n {error}\n </div>\n )}\n {savedAt !== null && (\n <Inline align=\"center\" justify=\"end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n <span>Settings saved</span>\n <span style={{ fontFamily: 'var(--font-mono)' }}>\n {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n </Inline>\n )}\n {lastAction !== null && (\n <Inline align=\"center\" justify=\"end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--success)' }}>\n <span>Last action:</span> <code style={{ fontFamily: 'var(--font-mono)' }}>{lastAction}</code>\n </Inline>\n )}\n\n {/* 1. General */}\n <SettingsSection id=\"general\" title=\"General\" description=\"Workspace identity + default landing page.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"workspace-name\"\n label=\"Workspace name\"\n description=\"Shown in the topbar and command palette.\"\n control={\n <Input\n value={settings.workspaceName}\n onChange={(e) => update('workspaceName', e.target.value)}\n style={{ width: 240 }}\n />\n }\n />\n <SettingsRow\n id=\"workspace-timezone\"\n label=\"Timezone\"\n description=\"Used for activity timestamps + digests.\"\n control={\n <NativeSelect value={settings.workspaceTimezone} onChange={(v) => update('workspaceTimezone', v)} id_attr=\"workspace-timezone-select\">\n {COMMON_TIMEZONES.map((tz) => (\n <option key={tz} value={tz}>{tz}</option>\n ))}\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"default-view\"\n label=\"Default view on launch\"\n control={\n <NativeSelect value={settings.defaultView} onChange={(v) => update('defaultView', v as SettingsState['defaultView'])}>\n <option value=\"overview\">Overview</option>\n <option value=\"tasks\">Tasks</option>\n <option value=\"goals\">Goals</option>\n <option value=\"agents\">Agents</option>\n <option value=\"activity\">Activity</option>\n <option value=\"settings\">Settings</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 2. Theme */}\n <SettingsSection id=\"theme\" title=\"Theme\" description=\"Color mode + accent + typography.\" icon={<Palette size={14} aria-hidden />}>\n <SettingsRow\n id=\"theme-mode\"\n label=\"Color mode\"\n control={\n <NativeSelect value={theme.mode} onChange={(v) => theme.setMode(v as 'light' | 'dark' | 'system')}>\n <option value=\"system\">System</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-accent\"\n label=\"Accent color\"\n description=\"Personalize the leading-edge accent stripe.\"\n control={\n <Inline align=\"center\" gap={2}>\n <input\n type=\"color\"\n value={settings.themeAccent}\n onChange={(e) => update('themeAccent', e.target.value)}\n style={{ width: 40, height: 28, border: '1px solid var(--border)', borderRadius: 'var(--radius-sm)', background: 'transparent', cursor: 'pointer' }}\n />\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{settings.themeAccent}</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"theme-font\"\n label=\"Font family\"\n description=\"Body type. System fonts reduce render time.\"\n control={\n <NativeSelect defaultValue=\"inter\" onChange={(v) => void patch('themeFont', v)}>\n <option value=\"inter\">Inter</option>\n <option value=\"system\">System UI</option>\n <option value=\"jetbrains\">JetBrains Mono</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-radius\"\n label=\"Border radius\"\n description=\"0 = sharp; 16 = rounded.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n defaultValue={[8]}\n min={0}\n max={16}\n step={1}\n onValueChange={(v) => void patch('themeRadius', v[0] ?? 8)}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{(settings as unknown as Record<string, unknown>).themeRadius as number ?? 8}px</code>\n </Inline>\n }\n />\n </SettingsSection>\n\n {/* 3. Density */}\n <SettingsSection id=\"density\" title=\"Density\" description=\"Comfortable by default. Compact fits more on screen.\" icon={<Sliders size={14} aria-hidden />}>\n <SettingsRow\n id=\"density-mode\"\n label=\"Density\"\n control={\n <NativeSelect value={density.density} onChange={(v) => density.setDensity(v as 'comfortable' | 'compact')}>\n <option value=\"comfortable\">Comfortable</option>\n <option value=\"compact\">Compact</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"density-base-font\"\n label=\"Base font size\"\n description=\"Adjusts the `--fs-13` token globally.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.densityBaseFont]}\n onValueChange={(v) => update('densityBaseFont', v[0] ?? 13)}\n min={11} max={16} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.densityBaseFont}px</code>\n </Inline>\n }\n />\n </SettingsSection>\n\n {/* 4. Density rules */}\n <SettingsSection id=\"density-rules\" title=\"Density rules\" description=\"Override density per surface.\" icon={<Sparkles size={14} aria-hidden />}>\n <SettingsRow id=\"tasks-compact\" label=\"Tasks page — compact by default\" control={<Switch checked={settings.tasksCompact} onCheckedChange={(v) => update('tasksCompact', v)} />} />\n <SettingsRow id=\"memory-compact\" label=\"Memory page — compact by default\" control={<Switch checked={settings.memoryCompact} onCheckedChange={(v) => update('memoryCompact', v)} />} />\n <SettingsRow id=\"activity-compact\" label=\"Activity page — compact by default\" control={<Switch checked={settings.activityCompact} onCheckedChange={(v) => update('activityCompact', v)} />} />\n </SettingsSection>\n\n {/* 5. Command palette */}\n <SettingsSection id=\"palette\" title=\"Command palette\" description=\"How the ⌘K palette behaves.\" icon={<Terminal size={14} aria-hidden />}>\n <SettingsRow id=\"palette-history\" label=\"Show recent commands\" control={<Switch checked={settings.paletteHistory} onCheckedChange={(v) => update('paletteHistory', v)} />} />\n <SettingsRow id=\"palette-fuzzy\" label=\"Fuzzy match\" control={<Switch checked={settings.paletteFuzzy} onCheckedChange={(v) => update('paletteFuzzy', v)} />} />\n <SettingsRow id=\"palette-navigate\" label=\"Show navigation group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteNavigate', v)} />} />\n <SettingsRow id=\"palette-spawn\" label=\"Show agent-spawn group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteSpawn', v)} />} />\n <SettingsRow\n id=\"palette-scope\"\n label=\"Default scope\"\n description=\"Where palette actions apply when no context.\"\n control={\n <NativeSelect defaultValue=\"project\" onChange={(v) => void patch('paletteScope', v)}>\n <option value=\"project\">Active project</option>\n <option value=\"global\">Global</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 6. Keyboard */}\n <SettingsSection id=\"keyboard\" title=\"Keyboard\" description=\"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).\" icon={<Keyboard size={14} aria-hidden />}>\n <SettingsRow id=\"kb-palette\" label=\"Open command palette\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘K</code>} />\n <SettingsRow id=\"kb-search\" label=\"Search tasks\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘/</code>} />\n <SettingsRow id=\"kb-newtask\" label=\"New task\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘N</code>} />\n <SettingsRow id=\"kb-toggle-theme\" label=\"Toggle theme\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧L</code>} />\n <SettingsRow id=\"kb-toggle-density\" label=\"Toggle density\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧D</code>} />\n <SettingsRow id=\"kb-reload\" label=\"Reload window\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘R</code>} />\n </SettingsSection>\n\n {/* 7. Notifications */}\n <SettingsSection id=\"notifications\" title=\"Notifications\" description=\"When the harness should ping you.\" icon={<Bell size={14} aria-hidden />}>\n <SettingsRow id=\"n-agent-finished\" label=\"Agent run finished\" control={<Switch checked={settings.notifyAgentFinished} onCheckedChange={(v) => update('notifyAgentFinished', v)} />} />\n <SettingsRow id=\"n-task-moved\" label=\"Task moved between columns\" control={<Switch defaultChecked onCheckedChange={(v) => void patch('notifyTaskMoved', v)} />} />\n <SettingsRow id=\"n-ci-failed\" label=\"CI failed\" control={<Switch checked={settings.notifyCiFailed} onCheckedChange={(v) => update('notifyCiFailed', v)} />} />\n <SettingsRow id=\"n-token-budget\" label=\"Token budget 80%\" control={<Switch checked={settings.notifyTokenBudget} onCheckedChange={(v) => update('notifyTokenBudget', v)} />} />\n <SettingsRow id=\"n-daily-digest\" label=\"Daily digest at 09:00\" control={<Switch checked={settings.notifyDailyDigest} onCheckedChange={(v) => update('notifyDailyDigest', v)} />} />\n <SettingsRow\n id=\"n-channel\"\n label=\"Channel\"\n description=\"Where notifications render.\"\n control={\n <NativeSelect value={settings.notifyChannel} onChange={(v) => update('notifyChannel', v as SettingsState['notifyChannel'])}>\n <option value=\"toast\">In-app toast</option>\n <option value=\"system\">OS notification</option>\n <option value=\"both\">Both</option>\n <option value=\"silent\">Silent</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 8. Storage */}\n <SettingsSection id=\"storage\" title=\"Storage\" description=\"Where local data lives.\" icon={<Database size={14} aria-hidden />}>\n <SettingsRow\n id=\"store-path\"\n label=\"Local store path\"\n control={\n <Input\n value={settings.storagePath}\n onChange={(e) => update('storagePath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"cache-path\"\n label=\"Cache directory\"\n control={\n <Input\n value={settings.cachePath}\n onChange={(e) => update('cachePath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"sessions-path\"\n label=\"Claude Code sessions\"\n control={\n <Input\n value={settings.sessionsPath}\n onChange={(e) => update('sessionsPath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"cache-size\"\n label=\"Cache budget\"\n description=\"Soft cap (MB) before LRU eviction.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.cacheSizeMb]}\n onValueChange={(v) => update('cacheSizeMb', v[0] ?? 256)}\n min={64}\n max={4096}\n step={32}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.cacheSizeMb} MB</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"store-gc\"\n label=\"Garbage collect\"\n description=\"Prune empty sessions and orphaned tasks.\"\n control={<Button variant=\"secondary\" disabled={busy === 'gc'} onClick={() => void runAdmin('gc', 'POST', '/api/admin/gc', 'Run garbage collect?')}>{busy === 'gc' ? 'Running…' : 'Run GC'}</Button>}\n />\n <SettingsRow\n id=\"store-clear\"\n label=\"Clear local cache\"\n description=\"Destructive. Wipes the activity log and snapshots.\"\n control={<Button variant=\"danger\" disabled={busy === 'clear'} onClick={() => void runAdmin('cache/clear', 'POST', '/api/admin/cache/clear', 'Clear dashboard cache? This is reversible but will log you out briefly.')}>{busy === 'clear' ? 'Clearing…' : 'Clear…'}</Button>}\n />\n </SettingsSection>\n\n {/* 9. Plugins */}\n <SettingsSection id=\"plugins\" title=\"Plugins\" description=\"Plugin registrations under `.claude/`.\" icon={<Plug size={14} aria-hidden />}>\n <SettingsRow\n id=\"plugins-count\"\n label=\"Loaded plugins\"\n control={<Count loading={agentsRes.loading} value={agentsRes.data?.agents?.length ?? 0} />}\n />\n <SettingsRow\n id=\"plugins-bizar\"\n label=\"Bizar\"\n description=\"Core plugin. Required — disable with care.\"\n control={<Switch defaultChecked disabled />}\n />\n {Array.isArray(agentsRes.data?.agents) && agentsRes.data.agents.length > 0 && (\n <SettingsRow\n id=\"plugins-list\"\n label=\"Active agents\"\n control={\n <Stack gap={1} style={{ maxHeight: 200, overflowY: 'auto', width: 360 }}>\n {agentsRes.data.agents.map((a) => (\n <Inline key={a.name} align=\"center\" justify=\"between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{a.name}</code>\n <Badge tone=\"success\">active</Badge>\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 10. MCPs */}\n <SettingsSection id=\"mcps\" title=\"MCP servers\" description=\"Model Context Protocol servers.\" icon={<Cpu size={14} aria-hidden />}>\n <SettingsRow id=\"mcps-count\" label=\"Registered MCPs\" control={<Count loading={mcpsRes.loading} value={mcpsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(mcpsRes.data?.skills) && mcpsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"mcps-list\"\n label=\"Servers\"\n control={\n <Stack gap={1} style={{ maxHeight: 220, overflowY: 'auto', width: 360 }}>\n {mcpsRes.data.skills.map((m) => (\n <Inline key={m.name} align=\"center\" justify=\"between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{m.name}</code>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`mcp:${m.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 11. Skills */}\n <SettingsSection id=\"skills\" title=\"Skills\" description=\"Bizar skill packs.\" icon={<LibraryIcon size={14} aria-hidden />}>\n <SettingsRow id=\"skills-count\" label=\"Loaded skills\" control={<Count loading={skillsRes.loading} value={skillsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(skillsRes.data?.skills) && skillsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"skills-list\"\n label=\"Skill packs\"\n control={\n <Stack gap={1} style={{ maxHeight: 260, overflowY: 'auto', width: 360 }}>\n {skillsRes.data.skills.map((s) => (\n <Inline key={s.name} align=\"center\" justify=\"between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <Inline align=\"center\" gap={2}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>\n <Badge tone=\"neutral\">{s.source}</Badge>\n </Inline>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`skill:${s.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 12. Hooks */}\n <SettingsSection id=\"hooks\" title=\"Hooks\" description=\"Executable hook scripts.\" icon={<Wrench size={14} aria-hidden />}>\n <SettingsRow id=\"hooks-count\" label=\"Registered hooks\" control={<Count loading={hooksRes.loading} value={hooksRes.data?.skills?.length ?? 0} />} />\n <SettingsRow id=\"hooks-pretool\" label=\"PreToolUse\" description=\"Block writes to .env / secrets / node_modules.\" control={<Switch checked={settings.hookPreToolUse} onCheckedChange={(v) => update('hookPreToolUse', v)} />} />\n <SettingsRow id=\"hooks-posttool\" label=\"PostToolUse\" description=\"Log tool latency to ~/.config/bizar/hook-logs/.\" control={<Switch checked={settings.hookPostToolUse} onCheckedChange={(v) => update('hookPostToolUse', v)} />} />\n <SettingsRow id=\"hooks-taskstart\" label=\"TaskStart\" description=\"Prime AI with project context.\" control={<Switch checked={settings.hookTaskStart} onCheckedChange={(v) => update('hookTaskStart', v)} />} />\n <SettingsRow id=\"hooks-taskresume\" label=\"TaskResume\" description=\"Re-read state + check git log.\" control={<Switch checked={settings.hookTaskResume} onCheckedChange={(v) => update('hookTaskResume', v)} />} />\n <SettingsRow id=\"hooks-prompt\" label=\"UserPromptSubmit\" description=\"Tag prompts for routing.\" control={<Switch checked={settings.hookUserPromptSubmit} onCheckedChange={(v) => update('hookUserPromptSubmit', v)} />} />\n </SettingsSection>\n\n {/* 13. Activity */}\n <SettingsSection id=\"activity\" title=\"Activity\" description=\"Stream retention + export.\" icon={<Activity size={14} aria-hidden />}>\n <SettingsRow\n id=\"activity-retention\"\n label=\"Retain last\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider value={[settings.activityRetentionDays]} onValueChange={(v) => update('activityRetentionDays', v[0] ?? 30)} min={7} max={365} step={1} />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.activityRetentionDays} days</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"activity-hide\"\n label=\"Hide noisy event types\"\n description=\"Comma-separated kinds. E.g. 'heartbeat,ping'.\"\n control={<Input\n placeholder=\"heartbeat, ping, system\"\n defaultValue={String((settings as unknown as Record<string, unknown>).activityHide ?? '')}\n onBlur={(e) => void patch('activityHide', e.target.value)}\n style={{ width: 280 }}\n />}\n />\n <SettingsRow\n id=\"activity-export\"\n label=\"Export\"\n description=\"Download the full activity log as NDJSON.\"\n control={<Button variant=\"secondary\" onClick={() => downloadFile('/api/admin/activity/export', 'activity.ndjson')}>Export…</Button>}\n />\n </SettingsSection>\n\n {/* 14. Memory */}\n <SettingsSection id=\"memory\" title=\"Memory\" description=\"Cross-session memo behavior.\" icon={<Brain size={14} aria-hidden />}>\n <SettingsRow id=\"memory-auto-commit\" label=\"Auto-commit project memos\" control={<Switch checked={settings.memoryAutoCommit} onCheckedChange={(v) => update('memoryAutoCommit', v)} />} />\n <SettingsRow\n id=\"memory-scope\"\n label=\"Default scope filter\"\n control={\n <NativeSelect value={settings.memoryScopeDefault} onChange={(v) => update('memoryScopeDefault', v as SettingsState['memoryScopeDefault'])}>\n <option value=\"project\">Project</option>\n <option value=\"global\">Global</option>\n <option value=\"all\">All</option>\n </NativeSelect>\n }\n />\n <SettingsRow id=\"memory-index\" label=\"Re-index vault\" description=\"Rebuild search index. May take a moment.\" control={<Button variant=\"secondary\" disabled={busy === 'reindex'} onClick={() => void runAdmin('memory/reindex', 'POST', '/api/admin/memory/reindex', 'Rebuild the memory vault search index?')}>{busy === 'reindex' ? 'Re-indexing…' : 'Re-index'}</Button>} />\n </SettingsSection>\n\n {/* 15. Task defaults */}\n <SettingsSection id=\"task-defaults\" title=\"Task defaults\" description=\"Defaults applied to new tasks.\" icon={<CheckSquare size={14} aria-hidden />}>\n <SettingsRow\n id=\"task-priority\"\n label=\"Default priority\"\n control={\n <NativeSelect value={settings.defaultTaskPriority} onChange={(v) => update('defaultTaskPriority', v as SettingsState['defaultTaskPriority'])}>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-column\"\n label=\"Default column\"\n control={\n <NativeSelect value={settings.defaultTaskColumn} onChange={(v) => update('defaultTaskColumn', v as SettingsState['defaultTaskColumn'])}>\n <option value=\"queued\">Backlog</option>\n <option value=\"doing\">In progress</option>\n <option value=\"blocked\">In review</option>\n <option value=\"done\">Done</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-assignee\"\n label=\"Default assignee\"\n description=\"Auto-assigns new tasks to this agent (empty = unassigned).\"\n control={<Input placeholder=\"odin\" defaultValue={String((settings as unknown as Record<string, unknown>).defaultTaskAssignee ?? '')} onBlur={(e) => void patch('defaultTaskAssignee', e.target.value)} style={{ width: 240 }} />}\n />\n </SettingsSection>\n\n {/* 16. Agent defaults */}\n <SettingsSection id=\"agent-defaults\" title=\"Agent defaults\" description=\"Defaults applied when spawning agents.\" icon={<Bot size={14} aria-hidden />}>\n <SettingsRow\n id=\"agent-model\"\n label=\"Default model\"\n control={\n <Input value={settings.defaultAgentModel} onChange={(e) => update('defaultAgentModel', e.target.value)} style={{ width: 240 }} />\n }\n />\n <SettingsRow\n id=\"agent-mistakes\"\n label=\"Max consecutive mistakes\"\n description=\"Higher = more forgiving. Default 10.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.defaultAgentMaxMistakes]}\n onValueChange={(v) => update('defaultAgentMaxMistakes', v[0] ?? 10)}\n min={3} max={20} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.defaultAgentMaxMistakes}</code>\n </Inline>\n }\n />\n <SettingsRow id=\"agent-bg\" label=\"Spawn as background by default\" control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).agentBackgroundDefault)} onCheckedChange={(v) => void patch('agentBackgroundDefault', v)} />} />\n <SettingsRow id=\"agent-worktree\" label=\"Always create a worktree\" control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).agentWorktree ?? true)} onCheckedChange={(v) => void patch('agentWorktree', v)} />} />\n <SettingsRow\n id=\"agent-system-prompt\"\n label=\"Extra system prompt\"\n description=\"Appended to every agent's system prompt.\"\n control={<Textarea\n rows={3}\n placeholder=\"You are a careful, methodical engineer…\"\n defaultValue={String((settings as unknown as Record<string, unknown>).agentSystemPrompt ?? '')}\n onBlur={(e) => void patch('agentSystemPrompt', e.target.value)}\n />}\n />\n </SettingsSection>\n\n {/* 17. Privacy */}\n <SettingsSection id=\"privacy\" title=\"Privacy\" description=\"What the harness sends and stores.\" icon={<ShieldCheck size={14} aria-hidden />}>\n <SettingsRow\n id=\"privacy-analytics\"\n label=\"Anonymous analytics\"\n control={<Switch checked={settings.analytics} onCheckedChange={(v) => update('analytics', v)} />}\n />\n <SettingsRow\n id=\"privacy-crash\"\n label=\"Crash reports\"\n control={<Switch checked={settings.crashReports} onCheckedChange={(v) => update('crashReports', v)} />}\n />\n <SettingsRow\n id=\"privacy-pii\"\n label=\"PII handling\"\n description=\"How personal data is treated before persistence.\"\n control={\n <NativeSelect value={settings.piiMode} onChange={(v) => update('piiMode', v as SettingsState['piiMode'])}>\n <option value=\"off\">Off</option>\n <option value=\"redact\">Redact</option>\n <option value=\"pseudonymize\">Pseudonymize</option>\n <option value=\"block\">Block</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"privacy-telemetry\"\n label=\"Send token usage telemetry\"\n control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).telemetryTokens)} onCheckedChange={(v) => void patch('telemetryTokens', v)} />}\n />\n </SettingsSection>\n\n {/* 18. Advanced */}\n <SettingsSection id=\"advanced\" title=\"Advanced\" description=\"Power-user toggles. Touch with care.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"advanced-reduced-motion\"\n label=\"Reduce motion\"\n control={<Switch checked={settings.reducedMotion} onCheckedChange={(v) => update('reducedMotion', v)} />}\n />\n <SettingsRow\n id=\"advanced-debug\"\n label=\"Debug overlay\"\n description=\"Show agent + tool call traces in the topbar.\"\n control={<Switch checked={settings.debugOverlay} onCheckedChange={(v) => update('debugOverlay', v)} />}\n />\n <SettingsRow\n id=\"advanced-restart\"\n label=\"Restart dashboard backend\"\n description=\"Stop and relaunch the local server. Unsaved tasks are safe on disk.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button variant=\"danger\" disabled={busy === 'restart'} onClick={() => void runAdmin('restart', 'POST', '/api/admin/restart', 'Restart the dashboard backend? You may need to relaunch the CLI if it does not come back.')}><RotateCw size={12} aria-hidden /> {busy === 'restart' ? 'Restarting…' : 'Restart…'}</Button>\n <Button variant=\"ghost\" disabled={busy === 'rebuild'} onClick={() => void runAdmin('rebuild', 'POST', '/api/admin/rebuild', 'Rebuild the dashboard package? This runs `npm run build`.')}><Plus size={12} aria-hidden /> {busy === 'rebuild' ? 'Rebuilding…' : 'Rebuild'}</Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"advanced-logs\"\n label=\"Open logs folder\"\n control={<Button variant=\"secondary\" disabled={busy === 'purge-logs'} onClick={() => void runAdmin('logs/purge', 'POST', '/api/admin/logs/purge', 'Delete log files older than 14 days?') }><Trash2 size={12} aria-hidden /> {busy === 'purge-logs' ? 'Purging…' : 'Purge logs'}</Button>}\n />\n </SettingsSection>\n\n {/* 19. Configuration — Reset + Plugin options (v10.0.4) */}\n <SettingsSection\n id=\"configuration\"\n title=\"Configuration\"\n description=\"Reset to defaults, and edit the plugin-options sidecar.\"\n icon={<SettingsIcon size={14} aria-hidden />}\n >\n <SettingsRow\n id=\"config-reset\"\n label=\"Reset settings to defaults\"\n description=\"Calls POST /api/settings/reset. Restores every key to its DEFAULT_SETTINGS value.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button\n variant=\"danger\"\n disabled={busy === 'settings-reset'}\n data-testid=\"settings-reset\"\n onClick={() => {\n if (typeof window !== 'undefined' && typeof window.confirm === 'function'\n && !window.confirm('Reset every settings key to its default?')) return;\n setBusy('settings-reset');\n setError(null);\n (async () => {\n try {\n const next = await fetchJson<{ data?: Partial<SettingsState> }>('/api/settings/reset', { method: 'POST' });\n if (next?.data) setSettings({ ...DEFAULTS, ...next.data });\n setLastAction(`reset @ ${new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(null);\n }\n })();\n }}\n >\n <RotateCw size={12} aria-hidden /> {busy === 'settings-reset' ? 'Resetting…' : 'Reset to defaults'}\n </Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"config-plugin-options\"\n label=\"Plugin options\"\n description=\"JSON sidecar at ~/.config/bizar/plugin-options.json. Persisted via PUT /api/settings/plugin-options.\"\n control={\n <PluginOptionsEditor />\n }\n />\n </SettingsSection>\n </Stack>\n </Grid>\n </div>\n );\n}\n\n/**\n * PluginOptionsEditor — small JSON textarea bound to the\n * `~/.config/bizar/plugin-options.json` sidecar. Separate component\n * because the rest of SettingsView is one-shot-on-mount and we want\n * the editor to survive parent re-renders without clobbering the\n * in-flight edit buffer. v10.0.4 — adds UI wiring for the previously\n * unwired PUT /api/settings/plugin-options endpoint.\n */\nfunction PluginOptionsEditor(): JSX.Element {\n const [text, setText] = useState<string>('{}');\n const [busy, setBusy] = useState<boolean>(false);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const opts = await fetchJson<Record<string, unknown>>('/api/settings/plugin-options');\n if (!cancelled) setText(JSON.stringify(opts ?? {}, null, 2));\n } catch (err) {\n if (!cancelled) setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n const save = async (): Promise<void> => {\n let parsed: unknown;\n try { parsed = JSON.parse(text); } catch (err) {\n setError(`Invalid JSON: ${(err as Error).message}`);\n return;\n }\n setBusy(true);\n setError(null);\n try {\n await fetchJson('/api/settings/plugin-options', { method: 'PUT', body: parsed as Record<string, unknown> });\n setSavedAt(Date.now());\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Stack gap={2} style={{ width: '100%' }}>\n <textarea\n data-testid=\"plugin-options-form\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n rows={6}\n spellCheck={false}\n style={{\n width: '100%',\n fontFamily: 'var(--font-mono)',\n fontSize: 12,\n padding: '8px',\n background: 'var(--surface-1)',\n color: 'var(--text-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-1)',\n }}\n />\n <Inline align=\"center\" gap={2}>\n <Button variant=\"primary\" disabled={busy} onClick={() => void save()}>\n {busy ? 'Saving…' : 'Save plugin options'}\n </Button>\n {savedAt !== null && (\n <span style={{ fontSize: 11, color: 'var(--text-2)' }}>\n saved {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n )}\n {error && <span style={{ fontSize: 11, color: 'var(--danger)' }}>{error}</span>}\n </Inline>\n </Stack>\n );\n}"],"names":["Keyboard","createLucideIcon","Palette","SlidersVertical","SettingsNav","props","items","activeId","onSelect","className","jsxs","cx","jsx","item","isActive","COMMON_TIMEZONES","SECTIONS","SettingsIcon","Sliders","Sparkles","Terminal","Bell","Database","Plug","Cpu","LibraryIcon","Wrench","Activity","Brain","CheckSquare","Bot","ShieldCheck","DEFAULTS","SELECT_STYLE","NativeSelect","value","defaultValue","onChange","children","id_attr","e","Count","loading","Skeleton","SettingsView","setActiveId","useState","theme","useTheme","density","useDensity","settings","setSettings","savedAt","setSavedAt","error","setError","busy","setBusy","lastAction","setLastAction","runAdmin","label","method","path","confirmMsg","fetchJson","err","FetchError","downloadFile","filename","a","skillsRes","useFetch","mcpsRes","hooksRes","agentsRes","settingsRes","useEffect","prev","update","key","s","patch","merged","navItems","handleSelect","id","_a","rootRef","useRef","targets","el","visible","observer","entries","entry","bestId","bestRatio","ratio","t","Grid","Stack","Inline","SettingsSection","SettingsRow","Input","v","tz","Slider","Switch","Button","_b","_c","Badge","_e","_d","_f","m","_h","_g","_i","_k","_j","Textarea","RotateCw","Plus","Trash2","next","PluginOptionsEditor","text","setText","cancelled","opts","save","parsed"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"SettingsView-b24oFq9x.js","sources":["../../../node_modules/lucide-react/dist/esm/icons/keyboard.js","../../../node_modules/lucide-react/dist/esm/icons/palette.js","../../../node_modules/lucide-react/dist/esm/icons/sliders-vertical.js","../../src/web/v8/ui/settings/SettingsNav.tsx","../../src/web/v8/views/Settings/SettingsView.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.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 Keyboard = createLucideIcon(\"Keyboard\", [\n [\"path\", { d: \"M10 8h.01\", key: \"1r9ogq\" }],\n [\"path\", { d: \"M12 12h.01\", key: \"1mp3jc\" }],\n [\"path\", { d: \"M14 8h.01\", key: \"1primd\" }],\n [\"path\", { d: \"M16 12h.01\", key: \"1l6xoz\" }],\n [\"path\", { d: \"M18 8h.01\", key: \"emo2bl\" }],\n [\"path\", { d: \"M6 8h.01\", key: \"x9i8wu\" }],\n [\"path\", { d: \"M7 16h10\", key: \"wp8him\" }],\n [\"path\", { d: \"M8 12h.01\", key: \"czm47f\" }],\n [\"rect\", { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }]\n]);\n\nexport { Keyboard as default };\n//# sourceMappingURL=keyboard.js.map\n","/**\n * @license lucide-react v0.460.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 Palette = createLucideIcon(\"Palette\", [\n [\"circle\", { cx: \"13.5\", cy: \"6.5\", r: \".5\", fill: \"currentColor\", key: \"1okk4w\" }],\n [\"circle\", { cx: \"17.5\", cy: \"10.5\", r: \".5\", fill: \"currentColor\", key: \"f64h9f\" }],\n [\"circle\", { cx: \"8.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"fotxhn\" }],\n [\"circle\", { cx: \"6.5\", cy: \"12.5\", r: \".5\", fill: \"currentColor\", key: \"qy21gx\" }],\n [\n \"path\",\n {\n d: \"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z\",\n key: \"12rzf8\"\n }\n ]\n]);\n\nexport { Palette as default };\n//# sourceMappingURL=palette.js.map\n","/**\n * @license lucide-react v0.460.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 SlidersVertical = createLucideIcon(\"SlidersVertical\", [\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"21\", y2: \"14\", key: \"1p332r\" }],\n [\"line\", { x1: \"4\", x2: \"4\", y1: \"10\", y2: \"3\", key: \"gb41h5\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"21\", y2: \"12\", key: \"hf2csr\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"3\", key: \"1kfi7u\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"21\", y2: \"16\", key: \"1lhrwl\" }],\n [\"line\", { x1: \"20\", x2: \"20\", y1: \"12\", y2: \"3\", key: \"16vvfq\" }],\n [\"line\", { x1: \"2\", x2: \"6\", y1: \"14\", y2: \"14\", key: \"1uebub\" }],\n [\"line\", { x1: \"10\", x2: \"14\", y1: \"8\", y2: \"8\", key: \"1yglbp\" }],\n [\"line\", { x1: \"18\", x2: \"22\", y1: \"16\", y2: \"16\", key: \"1jxqpz\" }]\n]);\n\nexport { SlidersVertical as default };\n//# sourceMappingURL=sliders-vertical.js.map\n","import { type ReactNode } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * SettingsNav — left rail inside the Settings page.\n *\n * Lists each section so the user can jump (or scroll) to it. The active\n * section is highlighted. The nav is a vertical list with section ids\n * as the anchor target; no JS router needed.\n */\n\nexport interface SettingsNavItem {\n id: string;\n title: string;\n icon?: ReactNode;\n}\n\nexport interface SettingsNavProps {\n items: readonly SettingsNavItem[];\n /** The id of the currently-visible section. */\n activeId?: string;\n /** Click handler — usually `() => document.getElementById(id)?.scrollIntoView()`. */\n onSelect?: (id: string) => void;\n className?: string;\n}\n\nexport function SettingsNav(props: SettingsNavProps) {\n const { items, activeId, onSelect, className } = props;\n return (\n <nav aria-label=\"Settings sections\" className={cx('v8-settings-nav', className)}>\n <ul\n style={{\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n }}\n >\n {items.map((item) => {\n const isActive = activeId === item.id;\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={() => onSelect?.(item.id)}\n aria-current={isActive ? 'true' : undefined}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--space-2)',\n width: '100%',\n padding: 'var(--space-2) var(--space-3)',\n background: isActive ? 'var(--surface-2)' : 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: isActive ? 'var(--fg)' : 'var(--fg-muted)',\n font: 'inherit',\n fontSize: 'var(--fs-13)',\n fontWeight: isActive ? 500 : 400,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n {item.icon !== undefined && (\n <span\n aria-hidden=\"true\"\n style={{\n display: 'inline-flex',\n color: isActive ? 'var(--accent)' : 'var(--fg-subtle)',\n flexShrink: 0,\n }}\n >\n {item.icon}\n </span>\n )}\n <span style={{ minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {item.title}\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n <style>{`\n .v8-settings-nav button:hover { background: var(--surface-2); color: var(--fg); }\n `}</style>\n </nav>\n );\n}","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';\nimport {\n Palette,\n Keyboard,\n Bell,\n Database,\n Plug,\n Library as LibraryIcon,\n Wrench,\n Activity,\n Brain,\n ShieldCheck,\n Sliders,\n Sparkles,\n Terminal,\n Settings as SettingsIcon,\n Cpu,\n Bot,\n CheckSquare,\n Plus,\n Trash2,\n RotateCw,\n type LucideIcon,\n} from 'lucide-react';\nimport { Stack } from '../../ui/primitives/Stack.js';\nimport { Inline } from '../../ui/primitives/Inline.js';\nimport { Grid } from '../../ui/primitives/Grid.js';\nimport { Switch } from '../../ui/controls/Switch.js';\nimport { Slider } from '../../ui/controls/Slider.js';\nimport { Button } from '../../ui/controls/Button.js';\nimport { Input } from '../../ui/controls/Input.js';\nimport { Textarea } from '../../ui/controls/Textarea.js';\nimport { Badge } from '../../ui/data/Badge.js';\nimport { SettingsSection } from '../../ui/settings/SettingsSection.js';\nimport { SettingsRow } from '../../ui/settings/SettingsRow.js';\nimport { SettingsNav, type SettingsNavItem } from '../../ui/settings/SettingsNav.js';\nimport { Skeleton } from '../../ui/feedback/Skeleton.js';\nimport { useTheme } from '../../ui/theme/useTheme.js';\nimport { useDensity } from '../../ui/theme/useDensity.js';\nimport { useFetch } from '../../data/useFetch.js';\nimport { fetchJson, FetchError } from '../../data/fetcher.js';\n\n/**\n * SettingsView — Sprint S15 expansion. 19 sections (up from 16) with\n * real controls throughout. Every Switch / Select / Slider / Input is\n * either:\n * - live-bound to a Provider (Theme / Density),\n * - persisted via PATCH /api/settings (everything else), or\n * - backed by a small per-section sub-endpoint when present.\n *\n * Sections:\n * 1. General workspace identity + default view\n * 2. Theme color mode + accent + font + radius\n * 3. Density comfortable/compact + base font\n * 4. Density rules per-surface overrides\n * 5. Command palette behaviour + history + fuzzy match + nav\n * 6. Keyboard hotkeys (read-only display + rebinds via /kb)\n * 7. Notifications agent / task / CI / budget / daily digest\n * 8. Storage paths + cache sizes + GC button\n * 9. Plugins mods list with enable toggles\n * 10. MCP servers list + status + click for detail\n * 11. Skills list with enable toggles\n * 12. Hooks list with enable toggles\n * 13. Activity retention + hide list + export\n * 14. Memory scope + auto-commit + search defaults\n * 15. Task defaults default priority / column / assignee\n * 16. Agent defaults default model + spawn flags + max mistakes\n * 17. Privacy telemetry + PII + crash reports\n * 18. Advanced debug overlay + restart server + max mistakes\n */\n\ntype Section = { id: string; title: string; icon: LucideIcon };\n\nconst COMMON_TIMEZONES: readonly string[] = [\n 'UTC',\n 'America/Los_Angeles',\n 'America/Denver',\n 'America/Chicago',\n 'America/New_York',\n 'America/Sao_Paulo',\n 'Europe/London',\n 'Europe/Berlin',\n 'Europe/Amsterdam',\n 'Europe/Paris',\n 'Europe/Madrid',\n 'Europe/Stockholm',\n 'Europe/Istanbul',\n 'Asia/Dubai',\n 'Asia/Kolkata',\n 'Asia/Singapore',\n 'Asia/Tokyo',\n 'Asia/Seoul',\n 'Asia/Shanghai',\n 'Australia/Sydney',\n 'Pacific/Auckland',\n];\n\nconst SECTIONS: Section[] = [\n { id: 'general', title: 'General', icon: SettingsIcon },\n { id: 'theme', title: 'Theme', icon: Palette },\n { id: 'density', title: 'Density', icon: Sliders },\n { id: 'density-rules', title: 'Density rules', icon: Sparkles },\n { id: 'palette', title: 'Command palette', icon: Terminal },\n { id: 'keyboard', title: 'Keyboard', icon: Keyboard },\n { id: 'notifications', title: 'Notifications', icon: Bell },\n { id: 'storage', title: 'Storage', icon: Database },\n { id: 'plugins', title: 'Plugins', icon: Plug },\n { id: 'mcps', title: 'MCP servers', icon: Cpu },\n { id: 'skills', title: 'Skills', icon: LibraryIcon },\n { id: 'hooks', title: 'Hooks', icon: Wrench },\n { id: 'activity', title: 'Activity', icon: Activity },\n { id: 'memory', title: 'Memory', icon: Brain },\n { id: 'task-defaults', title: 'Task defaults', icon: CheckSquare },\n { id: 'agent-defaults', title: 'Agent defaults', icon: Bot },\n { id: 'privacy', title: 'Privacy', icon: ShieldCheck },\n { id: 'advanced', title: 'Advanced', icon: SettingsIcon },\n];\n\ninterface SettingsState {\n workspaceName: string;\n workspaceTimezone: string;\n defaultView: 'overview' | 'tasks' | 'goals' | 'agents' | 'activity' | 'settings';\n themeAccent: string;\n densityBaseFont: number;\n tasksCompact: boolean;\n memoryCompact: boolean;\n activityCompact: boolean;\n paletteHistory: boolean;\n paletteFuzzy: boolean;\n notifyAgentFinished: boolean;\n notifyCiFailed: boolean;\n notifyTokenBudget: boolean;\n notifyDailyDigest: boolean;\n notifyChannel: 'toast' | 'system' | 'both' | 'silent';\n storagePath: string;\n cachePath: string;\n sessionsPath: string;\n cacheSizeMb: number;\n hookPreToolUse: boolean;\n hookPostToolUse: boolean;\n hookTaskStart: boolean;\n hookTaskResume: boolean;\n hookUserPromptSubmit: boolean;\n activityRetentionDays: number;\n memoryAutoCommit: boolean;\n memoryScopeDefault: 'project' | 'global' | 'all';\n defaultTaskPriority: 'low' | 'medium' | 'high' | 'urgent';\n defaultTaskColumn: 'queued' | 'doing' | 'blocked' | 'done';\n defaultAgentModel: string;\n defaultAgentMaxMistakes: number;\n analytics: boolean;\n crashReports: boolean;\n piiMode: 'off' | 'redact' | 'pseudonymize' | 'block';\n reducedMotion: boolean;\n debugOverlay: boolean;\n}\n\nconst DEFAULTS: SettingsState = {\n workspaceName: 'Bizar Harness',\n workspaceTimezone: typeof Intl !== 'undefined' ? Intl.DateTimeFormat().resolvedOptions().timeZone : 'UTC',\n defaultView: 'overview',\n themeAccent: '#5b8def',\n densityBaseFont: 13,\n tasksCompact: false,\n memoryCompact: true,\n activityCompact: false,\n paletteHistory: true,\n paletteFuzzy: true,\n notifyAgentFinished: true,\n notifyCiFailed: true,\n notifyTokenBudget: true,\n notifyDailyDigest: false,\n notifyChannel: 'toast',\n storagePath: '~/.bizar/store.db',\n cachePath: '~/.cache/bizar',\n sessionsPath: '~/.claude/sessions',\n cacheSizeMb: 256,\n hookPreToolUse: true,\n hookPostToolUse: true,\n hookTaskStart: true,\n hookTaskResume: true,\n hookUserPromptSubmit: true,\n activityRetentionDays: 30,\n memoryAutoCommit: true,\n memoryScopeDefault: 'all',\n defaultTaskPriority: 'medium',\n defaultTaskColumn: 'queued',\n defaultAgentModel: 'claude-sonnet-4-5',\n defaultAgentMaxMistakes: 10,\n analytics: true,\n crashReports: true,\n piiMode: 'redact',\n reducedMotion: false,\n debugOverlay: false,\n};\n\nconst SELECT_STYLE: CSSProperties = {\n height: 28,\n padding: '0 var(--space-2)',\n borderRadius: 'var(--radius-sm)',\n border: '1px solid var(--border)',\n background: 'var(--surface-0)',\n color: 'var(--fg)',\n fontFamily: 'var(--font-sans)',\n fontSize: 'var(--fs-12)',\n cursor: 'pointer',\n outline: 'none',\n};\n\nfunction NativeSelect({\n value,\n defaultValue,\n onChange,\n children,\n id_attr,\n}: {\n value?: string;\n defaultValue?: string;\n onChange?: (v: string) => void;\n children: ReactNode;\n id_attr?: string;\n}): JSX.Element {\n return (\n <select\n id={id_attr}\n value={value}\n defaultValue={defaultValue}\n onChange={(e) => onChange?.(e.target.value)}\n style={SELECT_STYLE}\n >\n {children}\n </select>\n );\n}\n\nfunction Count({ loading, value }: { loading: boolean; value: number | undefined }): JSX.Element {\n if (loading) return <Skeleton style={{ width: 32, height: 16 }} />;\n return <code style={{ fontFamily: 'var(--font-mono)' }}>{value ?? 0}</code>;\n}\n\nexport function SettingsView(): JSX.Element {\n const [activeId, setActiveId] = useState<string>('general');\n const theme = useTheme();\n const density = useDensity();\n const [settings, setSettings] = useState<SettingsState>(DEFAULTS);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [lastAction, setLastAction] = useState<string | null>(null);\n\n // Run an admin endpoint with confirm + busy state + error surface.\n const runAdmin = async (label: string, method: 'POST' | 'DELETE', path: string, confirmMsg: string): Promise<void> => {\n if (typeof window !== 'undefined' && typeof window.confirm === 'function' && !window.confirm(confirmMsg)) return;\n setBusy(label);\n setError(null);\n try {\n await fetchJson(path, { method });\n setLastAction(`${label} @ ${new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(null);\n }\n };\n\n // GET that triggers a browser download (NDJSON for the activity log).\n const downloadFile = (path: string, filename: string): void => {\n if (typeof window === 'undefined') return;\n const a = document.createElement('a');\n a.href = path;\n a.download = filename;\n a.rel = 'noopener';\n document.body.appendChild(a);\n a.click();\n a.remove();\n };\n\n const skillsRes = useFetch<{ skills?: { name: string; source: string }[] }>('/api/skills?kind=skills');\n const mcpsRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=mcps');\n const hooksRes = useFetch<{ skills?: { name: string }[] }>('/api/skills?kind=hooks');\n const agentsRes = useFetch<{ agents?: { name: string }[] }>('/api/agents');\n\n // Hydrate from the server. The server returns the merged\n // (defaults + persisted overrides) shape, so we can spread it\n // directly over our DEFAULTS to pick up any keys we don't model.\n const settingsRes = useFetch<Partial<SettingsState>>('/api/settings');\n useEffect(() => {\n if (settingsRes.data) {\n setSettings((prev) => ({ ...prev, ...settingsRes.data }));\n }\n }, [settingsRes.data]);\n\n const update = <K extends keyof SettingsState>(key: K, value: SettingsState[K]): void => {\n setSettings((s) => ({ ...s, [key]: value }));\n void patch(key, value);\n };\n\n const patch = async (key: string, value: unknown): Promise<void> => {\n try {\n // The settings endpoint accepts a partial body and merges with\n // existing values on the server side — so PUT /api/settings\n // with { [key]: value } is the canonical \"update one row\" path.\n // We re-PUT the full merged shape so the server has the latest\n // copy of every key we know about.\n const merged = { ...settings, [key]: value };\n await fetchJson('/api/settings', { method: 'PUT', body: merged });\n setSavedAt(Date.now());\n setError(null);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n };\n\n const navItems: SettingsNavItem[] = SECTIONS.map((s) => ({\n id: s.id,\n title: s.title,\n icon: <s.icon size={14} aria-hidden=\"true\" />,\n }));\n\n const handleSelect = (id: string): void => {\n setActiveId(id);\n requestAnimationFrame(() => {\n document.getElementById(id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n });\n };\n\n const rootRef = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (typeof IntersectionObserver === 'undefined') return;\n const targets = SECTIONS\n .map((s) => document.getElementById(s.id))\n .filter((el): el is HTMLElement => el !== null);\n if (targets.length === 0) return;\n const visible = new Map<string, number>();\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const id = entry.target.id;\n if (entry.isIntersecting) visible.set(id, entry.intersectionRatio);\n else visible.delete(id);\n }\n if (visible.size === 0) return;\n let bestId: string | undefined;\n let bestRatio = -1;\n for (const [id, ratio] of visible) {\n if (ratio > bestRatio) { bestRatio = ratio; bestId = id; }\n }\n if (bestId) setActiveId(bestId);\n },\n { rootMargin: '-30% 0px -50% 0px', threshold: [0, 0.25, 0.5, 0.75, 1] },\n );\n for (const t of targets) observer.observe(t);\n return () => observer.disconnect();\n }, []);\n\n return (\n <div ref={rootRef} data-testid=\"settings-view\">\n <Grid cols={3} gap={5}>\n <aside style={{ position: 'sticky', top: 0, alignSelf: 'start' }}>\n <SettingsNav items={navItems} activeId={activeId} onSelect={handleSelect} />\n </aside>\n <Stack gap={5} style={{ gridColumn: 'span 2' }}>\n {error !== null && (\n <div role=\"alert\" style={{ padding: 'var(--space-3)', background: 'color-mix(in oklch, var(--danger) 12%, var(--surface-0))', border: '1px solid var(--danger)', borderRadius: 'var(--radius-md)', fontSize: 'var(--fs-12)' }}>\n {error}\n </div>\n )}\n {savedAt !== null && (\n <Inline align=\"center\" justify=\"end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>\n <span>Settings saved</span>\n <span style={{ fontFamily: 'var(--font-mono)' }}>\n {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n </Inline>\n )}\n {lastAction !== null && (\n <Inline align=\"center\" justify=\"end\" gap={2} style={{ fontSize: 'var(--fs-12)', color: 'var(--success)' }}>\n <span>Last action:</span> <code style={{ fontFamily: 'var(--font-mono)' }}>{lastAction}</code>\n </Inline>\n )}\n\n {/* 1. General */}\n <SettingsSection id=\"general\" title=\"General\" description=\"Workspace identity + default landing page.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"workspace-name\"\n label=\"Workspace name\"\n description=\"Shown in the topbar and command palette.\"\n control={\n <Input\n value={settings.workspaceName}\n onChange={(e) => update('workspaceName', e.target.value)}\n style={{ width: 240 }}\n />\n }\n />\n <SettingsRow\n id=\"workspace-timezone\"\n label=\"Timezone\"\n description=\"Used for activity timestamps + digests.\"\n control={\n <NativeSelect value={settings.workspaceTimezone} onChange={(v) => update('workspaceTimezone', v)} id_attr=\"workspace-timezone-select\">\n {COMMON_TIMEZONES.map((tz) => (\n <option key={tz} value={tz}>{tz}</option>\n ))}\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"default-view\"\n label=\"Default view on launch\"\n control={\n <NativeSelect value={settings.defaultView} onChange={(v) => update('defaultView', v as SettingsState['defaultView'])}>\n <option value=\"overview\">Overview</option>\n <option value=\"tasks\">Tasks</option>\n <option value=\"goals\">Goals</option>\n <option value=\"agents\">Agents</option>\n <option value=\"activity\">Activity</option>\n <option value=\"settings\">Settings</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 2. Theme */}\n <SettingsSection id=\"theme\" title=\"Theme\" description=\"Color mode + accent + typography.\" icon={<Palette size={14} aria-hidden />}>\n <SettingsRow\n id=\"theme-mode\"\n label=\"Color mode\"\n control={\n <NativeSelect value={theme.mode} onChange={(v) => theme.setMode(v as 'light' | 'dark' | 'system')}>\n <option value=\"system\">System</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-accent\"\n label=\"Accent color\"\n description=\"Personalize the leading-edge accent stripe.\"\n control={\n <Inline align=\"center\" gap={2}>\n <input\n type=\"color\"\n value={settings.themeAccent}\n onChange={(e) => update('themeAccent', e.target.value)}\n style={{ width: 40, height: 28, border: '1px solid var(--border)', borderRadius: 'var(--radius-sm)', background: 'transparent', cursor: 'pointer' }}\n />\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{settings.themeAccent}</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"theme-font\"\n label=\"Font family\"\n description=\"Body type. System fonts reduce render time.\"\n control={\n <NativeSelect defaultValue=\"inter\" onChange={(v) => void patch('themeFont', v)}>\n <option value=\"inter\">Inter</option>\n <option value=\"system\">System UI</option>\n <option value=\"jetbrains\">JetBrains Mono</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"theme-radius\"\n label=\"Border radius\"\n description=\"0 = sharp; 16 = rounded.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n defaultValue={[8]}\n min={0}\n max={16}\n step={1}\n onValueChange={(v) => void patch('themeRadius', v[0] ?? 8)}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{(settings as unknown as Record<string, unknown>).themeRadius as number ?? 8}px</code>\n </Inline>\n }\n />\n </SettingsSection>\n\n {/* 3. Density */}\n <SettingsSection id=\"density\" title=\"Density\" description=\"Comfortable by default. Compact fits more on screen.\" icon={<Sliders size={14} aria-hidden />}>\n <SettingsRow\n id=\"density-mode\"\n label=\"Density\"\n control={\n <NativeSelect value={density.density} onChange={(v) => density.setDensity(v as 'comfortable' | 'compact')}>\n <option value=\"comfortable\">Comfortable</option>\n <option value=\"compact\">Compact</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"density-base-font\"\n label=\"Base font size\"\n description=\"Adjusts the `--fs-13` token globally.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.densityBaseFont]}\n onValueChange={(v) => update('densityBaseFont', v[0] ?? 13)}\n min={11} max={16} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.densityBaseFont}px</code>\n </Inline>\n }\n />\n </SettingsSection>\n\n {/* 4. Density rules */}\n <SettingsSection id=\"density-rules\" title=\"Density rules\" description=\"Override density per surface.\" icon={<Sparkles size={14} aria-hidden />}>\n <SettingsRow id=\"tasks-compact\" label=\"Tasks page — compact by default\" control={<Switch checked={settings.tasksCompact} onCheckedChange={(v) => update('tasksCompact', v)} />} />\n <SettingsRow id=\"memory-compact\" label=\"Memory page — compact by default\" control={<Switch checked={settings.memoryCompact} onCheckedChange={(v) => update('memoryCompact', v)} />} />\n <SettingsRow id=\"activity-compact\" label=\"Activity page — compact by default\" control={<Switch checked={settings.activityCompact} onCheckedChange={(v) => update('activityCompact', v)} />} />\n </SettingsSection>\n\n {/* 5. Command palette */}\n <SettingsSection id=\"palette\" title=\"Command palette\" description=\"How the ⌘K palette behaves.\" icon={<Terminal size={14} aria-hidden />}>\n <SettingsRow id=\"palette-history\" label=\"Show recent commands\" control={<Switch checked={settings.paletteHistory} onCheckedChange={(v) => update('paletteHistory', v)} />} />\n <SettingsRow id=\"palette-fuzzy\" label=\"Fuzzy match\" control={<Switch checked={settings.paletteFuzzy} onCheckedChange={(v) => update('paletteFuzzy', v)} />} />\n <SettingsRow id=\"palette-navigate\" label=\"Show navigation group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteNavigate', v)} />} />\n <SettingsRow id=\"palette-spawn\" label=\"Show agent-spawn group\" control={<Switch defaultChecked onCheckedChange={(v) => patch('paletteSpawn', v)} />} />\n <SettingsRow\n id=\"palette-scope\"\n label=\"Default scope\"\n description=\"Where palette actions apply when no context.\"\n control={\n <NativeSelect defaultValue=\"project\" onChange={(v) => void patch('paletteScope', v)}>\n <option value=\"project\">Active project</option>\n <option value=\"global\">Global</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 6. Keyboard */}\n <SettingsSection id=\"keyboard\" title=\"Keyboard\" description=\"Hotkey bindings (read-only here; rebind in ~/.claude/keybindings.json).\" icon={<Keyboard size={14} aria-hidden />}>\n <SettingsRow id=\"kb-palette\" label=\"Open command palette\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘K</code>} />\n <SettingsRow id=\"kb-search\" label=\"Search tasks\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘/</code>} />\n <SettingsRow id=\"kb-newtask\" label=\"New task\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘N</code>} />\n <SettingsRow id=\"kb-toggle-theme\" label=\"Toggle theme\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧L</code>} />\n <SettingsRow id=\"kb-toggle-density\" label=\"Toggle density\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘⇧D</code>} />\n <SettingsRow id=\"kb-reload\" label=\"Reload window\" control={<code style={{ fontFamily: 'var(--font-mono)' }}>⌘R</code>} />\n </SettingsSection>\n\n {/* 7. Notifications */}\n <SettingsSection id=\"notifications\" title=\"Notifications\" description=\"When the harness should ping you.\" icon={<Bell size={14} aria-hidden />}>\n <SettingsRow id=\"n-agent-finished\" label=\"Agent run finished\" control={<Switch checked={settings.notifyAgentFinished} onCheckedChange={(v) => update('notifyAgentFinished', v)} />} />\n <SettingsRow id=\"n-task-moved\" label=\"Task moved between columns\" control={<Switch defaultChecked onCheckedChange={(v) => void patch('notifyTaskMoved', v)} />} />\n <SettingsRow id=\"n-ci-failed\" label=\"CI failed\" control={<Switch checked={settings.notifyCiFailed} onCheckedChange={(v) => update('notifyCiFailed', v)} />} />\n <SettingsRow id=\"n-token-budget\" label=\"Token budget 80%\" control={<Switch checked={settings.notifyTokenBudget} onCheckedChange={(v) => update('notifyTokenBudget', v)} />} />\n <SettingsRow id=\"n-daily-digest\" label=\"Daily digest at 09:00\" control={<Switch checked={settings.notifyDailyDigest} onCheckedChange={(v) => update('notifyDailyDigest', v)} />} />\n <SettingsRow\n id=\"n-channel\"\n label=\"Channel\"\n description=\"Where notifications render.\"\n control={\n <NativeSelect value={settings.notifyChannel} onChange={(v) => update('notifyChannel', v as SettingsState['notifyChannel'])}>\n <option value=\"toast\">In-app toast</option>\n <option value=\"system\">OS notification</option>\n <option value=\"both\">Both</option>\n <option value=\"silent\">Silent</option>\n </NativeSelect>\n }\n />\n </SettingsSection>\n\n {/* 8. Storage */}\n <SettingsSection id=\"storage\" title=\"Storage\" description=\"Where local data lives.\" icon={<Database size={14} aria-hidden />}>\n <SettingsRow\n id=\"store-path\"\n label=\"Local store path\"\n control={\n <Input\n value={settings.storagePath}\n onChange={(e) => update('storagePath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"cache-path\"\n label=\"Cache directory\"\n control={\n <Input\n value={settings.cachePath}\n onChange={(e) => update('cachePath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"sessions-path\"\n label=\"Claude Code sessions\"\n control={\n <Input\n value={settings.sessionsPath}\n onChange={(e) => update('sessionsPath', e.target.value)}\n style={{ width: 280, fontFamily: 'var(--font-mono)' }}\n />\n }\n />\n <SettingsRow\n id=\"cache-size\"\n label=\"Cache budget\"\n description=\"Soft cap (MB) before LRU eviction.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.cacheSizeMb]}\n onValueChange={(v) => update('cacheSizeMb', v[0] ?? 256)}\n min={64}\n max={4096}\n step={32}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.cacheSizeMb} MB</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"store-gc\"\n label=\"Garbage collect\"\n description=\"Prune empty sessions and orphaned tasks.\"\n control={<Button variant=\"secondary\" disabled={busy === 'gc'} onClick={() => void runAdmin('gc', 'POST', '/api/admin/gc', 'Run garbage collect?')}>{busy === 'gc' ? 'Running…' : 'Run GC'}</Button>}\n />\n <SettingsRow\n id=\"store-clear\"\n label=\"Clear local cache\"\n description=\"Destructive. Wipes the activity log and snapshots.\"\n control={<Button variant=\"danger\" disabled={busy === 'clear'} onClick={() => void runAdmin('cache/clear', 'POST', '/api/admin/cache/clear', 'Clear dashboard cache? This is reversible but will log you out briefly.')}>{busy === 'clear' ? 'Clearing…' : 'Clear…'}</Button>}\n />\n </SettingsSection>\n\n {/* 9. Plugins */}\n <SettingsSection id=\"plugins\" title=\"Plugins\" description=\"Plugin registrations under `.claude/`.\" icon={<Plug size={14} aria-hidden />}>\n <SettingsRow\n id=\"plugins-count\"\n label=\"Loaded plugins\"\n control={<Count loading={agentsRes.loading} value={agentsRes.data?.agents?.length ?? 0} />}\n />\n <SettingsRow\n id=\"plugins-bizar\"\n label=\"Bizar\"\n description=\"Core plugin. Required — disable with care.\"\n control={<Switch defaultChecked disabled />}\n />\n {Array.isArray(agentsRes.data?.agents) && agentsRes.data.agents.length > 0 && (\n <SettingsRow\n id=\"plugins-list\"\n label=\"Active agents\"\n control={\n <Stack gap={1} style={{ maxHeight: 200, overflowY: 'auto', width: 360 }}>\n {agentsRes.data.agents.map((a) => (\n <Inline key={a.name} align=\"center\" justify=\"between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{a.name}</code>\n <Badge tone=\"success\">active</Badge>\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 10. MCPs */}\n <SettingsSection id=\"mcps\" title=\"MCP servers\" description=\"Model Context Protocol servers.\" icon={<Cpu size={14} aria-hidden />}>\n <SettingsRow id=\"mcps-count\" label=\"Registered MCPs\" control={<Count loading={mcpsRes.loading} value={mcpsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(mcpsRes.data?.skills) && mcpsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"mcps-list\"\n label=\"Servers\"\n control={\n <Stack gap={1} style={{ maxHeight: 220, overflowY: 'auto', width: 360 }}>\n {mcpsRes.data.skills.map((m) => (\n <Inline key={m.name} align=\"center\" justify=\"between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{m.name}</code>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`mcp:${m.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 11. Skills */}\n <SettingsSection id=\"skills\" title=\"Skills\" description=\"Bizar skill packs.\" icon={<LibraryIcon size={14} aria-hidden />}>\n <SettingsRow id=\"skills-count\" label=\"Loaded skills\" control={<Count loading={skillsRes.loading} value={skillsRes.data?.skills?.length ?? 0} />} />\n {Array.isArray(skillsRes.data?.skills) && skillsRes.data.skills.length > 0 && (\n <SettingsRow\n id=\"skills-list\"\n label=\"Skill packs\"\n control={\n <Stack gap={1} style={{ maxHeight: 260, overflowY: 'auto', width: 360 }}>\n {skillsRes.data.skills.map((s) => (\n <Inline key={s.name} align=\"center\" justify=\"between\" style={{ padding: '4px 8px', background: 'var(--surface-1)', borderRadius: 'var(--radius-sm)' }}>\n <Inline align=\"center\" gap={2}>\n <code style={{ fontFamily: 'var(--font-mono)', fontSize: 'var(--fs-12)' }}>{s.name}</code>\n <Badge tone=\"neutral\">{s.source}</Badge>\n </Inline>\n <Switch defaultChecked onCheckedChange={(v) => void patch(`skill:${s.name}`, v)} />\n </Inline>\n ))}\n </Stack>\n }\n />\n )}\n </SettingsSection>\n\n {/* 12. Hooks */}\n <SettingsSection id=\"hooks\" title=\"Hooks\" description=\"Executable hook scripts.\" icon={<Wrench size={14} aria-hidden />}>\n <SettingsRow id=\"hooks-count\" label=\"Registered hooks\" control={<Count loading={hooksRes.loading} value={hooksRes.data?.skills?.length ?? 0} />} />\n <SettingsRow id=\"hooks-pretool\" label=\"PreToolUse\" description=\"Block writes to .env / secrets / node_modules.\" control={<Switch checked={settings.hookPreToolUse} onCheckedChange={(v) => update('hookPreToolUse', v)} />} />\n <SettingsRow id=\"hooks-posttool\" label=\"PostToolUse\" description=\"Log tool latency to ~/.config/bizar/hook-logs/.\" control={<Switch checked={settings.hookPostToolUse} onCheckedChange={(v) => update('hookPostToolUse', v)} />} />\n <SettingsRow id=\"hooks-taskstart\" label=\"TaskStart\" description=\"Prime AI with project context.\" control={<Switch checked={settings.hookTaskStart} onCheckedChange={(v) => update('hookTaskStart', v)} />} />\n <SettingsRow id=\"hooks-taskresume\" label=\"TaskResume\" description=\"Re-read state + check git log.\" control={<Switch checked={settings.hookTaskResume} onCheckedChange={(v) => update('hookTaskResume', v)} />} />\n <SettingsRow id=\"hooks-prompt\" label=\"UserPromptSubmit\" description=\"Tag prompts for routing.\" control={<Switch checked={settings.hookUserPromptSubmit} onCheckedChange={(v) => update('hookUserPromptSubmit', v)} />} />\n </SettingsSection>\n\n {/* 13. Activity */}\n <SettingsSection id=\"activity\" title=\"Activity\" description=\"Stream retention + export.\" icon={<Activity size={14} aria-hidden />}>\n <SettingsRow\n id=\"activity-retention\"\n label=\"Retain last\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider value={[settings.activityRetentionDays]} onValueChange={(v) => update('activityRetentionDays', v[0] ?? 30)} min={7} max={365} step={1} />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.activityRetentionDays} days</code>\n </Inline>\n }\n />\n <SettingsRow\n id=\"activity-hide\"\n label=\"Hide noisy event types\"\n description=\"Comma-separated kinds. E.g. 'heartbeat,ping'.\"\n control={<Input\n placeholder=\"heartbeat, ping, system\"\n defaultValue={String((settings as unknown as Record<string, unknown>).activityHide ?? '')}\n onBlur={(e) => void patch('activityHide', e.target.value)}\n style={{ width: 280 }}\n />}\n />\n <SettingsRow\n id=\"activity-export\"\n label=\"Export\"\n description=\"Download the full activity log as NDJSON.\"\n control={<Button variant=\"secondary\" onClick={() => downloadFile('/api/admin/activity/export', 'activity.ndjson')}>Export…</Button>}\n />\n </SettingsSection>\n\n {/* 14. Memory */}\n <SettingsSection id=\"memory\" title=\"Memory\" description=\"Cross-session memo behavior.\" icon={<Brain size={14} aria-hidden />}>\n <SettingsRow id=\"memory-auto-commit\" label=\"Auto-commit project memos\" control={<Switch checked={settings.memoryAutoCommit} onCheckedChange={(v) => update('memoryAutoCommit', v)} />} />\n <SettingsRow\n id=\"memory-scope\"\n label=\"Default scope filter\"\n control={\n <NativeSelect value={settings.memoryScopeDefault} onChange={(v) => update('memoryScopeDefault', v as SettingsState['memoryScopeDefault'])}>\n <option value=\"project\">Project</option>\n <option value=\"global\">Global</option>\n <option value=\"all\">All</option>\n </NativeSelect>\n }\n />\n <SettingsRow id=\"memory-index\" label=\"Re-index vault\" description=\"Rebuild search index. May take a moment.\" control={<Button variant=\"secondary\" disabled={busy === 'reindex'} onClick={() => void runAdmin('memory/reindex', 'POST', '/api/admin/memory/reindex', 'Rebuild the memory vault search index?')}>{busy === 'reindex' ? 'Re-indexing…' : 'Re-index'}</Button>} />\n </SettingsSection>\n\n {/* 15. Task defaults */}\n <SettingsSection id=\"task-defaults\" title=\"Task defaults\" description=\"Defaults applied to new tasks.\" icon={<CheckSquare size={14} aria-hidden />}>\n <SettingsRow\n id=\"task-priority\"\n label=\"Default priority\"\n control={\n <NativeSelect value={settings.defaultTaskPriority} onChange={(v) => update('defaultTaskPriority', v as SettingsState['defaultTaskPriority'])}>\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-column\"\n label=\"Default column\"\n control={\n <NativeSelect value={settings.defaultTaskColumn} onChange={(v) => update('defaultTaskColumn', v as SettingsState['defaultTaskColumn'])}>\n <option value=\"queued\">Backlog</option>\n <option value=\"doing\">In progress</option>\n <option value=\"blocked\">In review</option>\n <option value=\"done\">Done</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"task-assignee\"\n label=\"Default assignee\"\n description=\"Auto-assigns new tasks to this agent (empty = unassigned).\"\n control={<Input placeholder=\"odin\" defaultValue={String((settings as unknown as Record<string, unknown>).defaultTaskAssignee ?? '')} onBlur={(e) => void patch('defaultTaskAssignee', e.target.value)} style={{ width: 240 }} />}\n />\n </SettingsSection>\n\n {/* 16. Agent defaults */}\n <SettingsSection id=\"agent-defaults\" title=\"Agent defaults\" description=\"Defaults applied when spawning agents.\" icon={<Bot size={14} aria-hidden />}>\n <SettingsRow\n id=\"agent-model\"\n label=\"Default model\"\n control={\n <Input value={settings.defaultAgentModel} onChange={(e) => update('defaultAgentModel', e.target.value)} style={{ width: 240 }} />\n }\n />\n <SettingsRow\n id=\"agent-mistakes\"\n label=\"Max consecutive mistakes\"\n description=\"Higher = more forgiving. Default 10.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Slider\n value={[settings.defaultAgentMaxMistakes]}\n onValueChange={(v) => update('defaultAgentMaxMistakes', v[0] ?? 10)}\n min={3} max={20} step={1}\n />\n <code style={{ fontFamily: 'var(--font-mono)' }}>{settings.defaultAgentMaxMistakes}</code>\n </Inline>\n }\n />\n <SettingsRow id=\"agent-bg\" label=\"Spawn as background by default\" control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).agentBackgroundDefault)} onCheckedChange={(v) => void patch('agentBackgroundDefault', v)} />} />\n <SettingsRow id=\"agent-worktree\" label=\"Always create a worktree\" control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).agentWorktree ?? true)} onCheckedChange={(v) => void patch('agentWorktree', v)} />} />\n <SettingsRow\n id=\"agent-system-prompt\"\n label=\"Extra system prompt\"\n description=\"Appended to every agent's system prompt.\"\n control={<Textarea\n rows={3}\n placeholder=\"You are a careful, methodical engineer…\"\n defaultValue={String((settings as unknown as Record<string, unknown>).agentSystemPrompt ?? '')}\n onBlur={(e) => void patch('agentSystemPrompt', e.target.value)}\n />}\n />\n </SettingsSection>\n\n {/* 17. Privacy */}\n <SettingsSection id=\"privacy\" title=\"Privacy\" description=\"What the harness sends and stores.\" icon={<ShieldCheck size={14} aria-hidden />}>\n <SettingsRow\n id=\"privacy-analytics\"\n label=\"Anonymous analytics\"\n control={<Switch checked={settings.analytics} onCheckedChange={(v) => update('analytics', v)} />}\n />\n <SettingsRow\n id=\"privacy-crash\"\n label=\"Crash reports\"\n control={<Switch checked={settings.crashReports} onCheckedChange={(v) => update('crashReports', v)} />}\n />\n <SettingsRow\n id=\"privacy-pii\"\n label=\"PII handling\"\n description=\"How personal data is treated before persistence.\"\n control={\n <NativeSelect value={settings.piiMode} onChange={(v) => update('piiMode', v as SettingsState['piiMode'])}>\n <option value=\"off\">Off</option>\n <option value=\"redact\">Redact</option>\n <option value=\"pseudonymize\">Pseudonymize</option>\n <option value=\"block\">Block</option>\n </NativeSelect>\n }\n />\n <SettingsRow\n id=\"privacy-telemetry\"\n label=\"Send token usage telemetry\"\n control={<Switch defaultChecked={Boolean((settings as unknown as Record<string, unknown>).telemetryTokens)} onCheckedChange={(v) => void patch('telemetryTokens', v)} />}\n />\n </SettingsSection>\n\n {/* 18. Advanced */}\n <SettingsSection id=\"advanced\" title=\"Advanced\" description=\"Power-user toggles. Touch with care.\" icon={<SettingsIcon size={14} aria-hidden />}>\n <SettingsRow\n id=\"advanced-reduced-motion\"\n label=\"Reduce motion\"\n control={<Switch checked={settings.reducedMotion} onCheckedChange={(v) => update('reducedMotion', v)} />}\n />\n <SettingsRow\n id=\"advanced-debug\"\n label=\"Debug overlay\"\n description=\"Show agent + tool call traces in the topbar.\"\n control={<Switch checked={settings.debugOverlay} onCheckedChange={(v) => update('debugOverlay', v)} />}\n />\n <SettingsRow\n id=\"advanced-restart\"\n label=\"Restart dashboard backend\"\n description=\"Stop and relaunch the local server. Unsaved tasks are safe on disk.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button variant=\"danger\" disabled={busy === 'restart'} onClick={() => void runAdmin('restart', 'POST', '/api/admin/restart', 'Restart the dashboard backend? You may need to relaunch the CLI if it does not come back.')}><RotateCw size={12} aria-hidden /> {busy === 'restart' ? 'Restarting…' : 'Restart…'}</Button>\n <Button variant=\"ghost\" disabled={busy === 'rebuild'} onClick={() => void runAdmin('rebuild', 'POST', '/api/admin/rebuild', 'Rebuild the dashboard package? This runs `npm run build`.')}><Plus size={12} aria-hidden /> {busy === 'rebuild' ? 'Rebuilding…' : 'Rebuild'}</Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"advanced-logs\"\n label=\"Open logs folder\"\n control={<Button variant=\"secondary\" disabled={busy === 'purge-logs'} onClick={() => void runAdmin('logs/purge', 'POST', '/api/admin/logs/purge', 'Delete log files older than 14 days?') }><Trash2 size={12} aria-hidden /> {busy === 'purge-logs' ? 'Purging…' : 'Purge logs'}</Button>}\n />\n </SettingsSection>\n\n {/* 19. Configuration — Reset + Plugin options (v10.0.4) */}\n <SettingsSection\n id=\"configuration\"\n title=\"Configuration\"\n description=\"Reset to defaults, and edit the plugin-options sidecar.\"\n icon={<SettingsIcon size={14} aria-hidden />}\n >\n <SettingsRow\n id=\"config-reset\"\n label=\"Reset settings to defaults\"\n description=\"Calls POST /api/settings/reset. Restores every key to its DEFAULT_SETTINGS value.\"\n control={\n <Inline align=\"center\" gap={2}>\n <Button\n variant=\"danger\"\n disabled={busy === 'settings-reset'}\n data-testid=\"settings-reset\"\n onClick={() => {\n if (typeof window !== 'undefined' && typeof window.confirm === 'function'\n && !window.confirm('Reset every settings key to its default?')) return;\n setBusy('settings-reset');\n setError(null);\n (async () => {\n try {\n const next = await fetchJson<{ data?: Partial<SettingsState> }>('/api/settings/reset', { method: 'POST' });\n if (next?.data) setSettings({ ...DEFAULTS, ...next.data });\n setLastAction(`reset @ ${new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}`);\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(null);\n }\n })();\n }}\n >\n <RotateCw size={12} aria-hidden /> {busy === 'settings-reset' ? 'Resetting…' : 'Reset to defaults'}\n </Button>\n </Inline>\n }\n />\n <SettingsRow\n id=\"config-plugin-options\"\n label=\"Plugin options\"\n description=\"JSON sidecar at ~/.config/bizar/plugin-options.json. Persisted via PUT /api/settings/plugin-options.\"\n control={\n <PluginOptionsEditor />\n }\n />\n </SettingsSection>\n </Stack>\n </Grid>\n </div>\n );\n}\n\n/**\n * PluginOptionsEditor — small JSON textarea bound to the\n * `~/.config/bizar/plugin-options.json` sidecar. Separate component\n * because the rest of SettingsView is one-shot-on-mount and we want\n * the editor to survive parent re-renders without clobbering the\n * in-flight edit buffer. v10.0.4 — adds UI wiring for the previously\n * unwired PUT /api/settings/plugin-options endpoint.\n */\nfunction PluginOptionsEditor(): JSX.Element {\n const [text, setText] = useState<string>('{}');\n const [busy, setBusy] = useState<boolean>(false);\n const [savedAt, setSavedAt] = useState<number | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const opts = await fetchJson<Record<string, unknown>>('/api/settings/plugin-options');\n if (!cancelled) setText(JSON.stringify(opts ?? {}, null, 2));\n } catch (err) {\n if (!cancelled) setError(err instanceof FetchError ? err.message : (err as Error).message);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n const save = async (): Promise<void> => {\n let parsed: unknown;\n try { parsed = JSON.parse(text); } catch (err) {\n setError(`Invalid JSON: ${(err as Error).message}`);\n return;\n }\n setBusy(true);\n setError(null);\n try {\n await fetchJson('/api/settings/plugin-options', { method: 'PUT', body: parsed as Record<string, unknown> });\n setSavedAt(Date.now());\n } catch (err) {\n setError(err instanceof FetchError ? err.message : (err as Error).message);\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Stack gap={2} style={{ width: '100%' }}>\n <textarea\n data-testid=\"plugin-options-form\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n rows={6}\n spellCheck={false}\n style={{\n width: '100%',\n fontFamily: 'var(--font-mono)',\n fontSize: 12,\n padding: '8px',\n background: 'var(--surface-1)',\n color: 'var(--text-1)',\n border: '1px solid var(--border)',\n borderRadius: 'var(--radius-1)',\n }}\n />\n <Inline align=\"center\" gap={2}>\n <Button variant=\"primary\" disabled={busy} onClick={() => void save()}>\n {busy ? 'Saving…' : 'Save plugin options'}\n </Button>\n {savedAt !== null && (\n <span style={{ fontSize: 11, color: 'var(--text-2)' }}>\n saved {new Date(savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' })}\n </span>\n )}\n {error && <span style={{ fontSize: 11, color: 'var(--danger)' }}>{error}</span>}\n </Inline>\n </Stack>\n );\n}"],"names":["Keyboard","createLucideIcon","Palette","SlidersVertical","SettingsNav","props","items","activeId","onSelect","className","jsxs","cx","jsx","item","isActive","COMMON_TIMEZONES","SECTIONS","SettingsIcon","Sliders","Sparkles","Terminal","Bell","Database","Plug","Cpu","LibraryIcon","Wrench","Activity","Brain","CheckSquare","Bot","ShieldCheck","DEFAULTS","SELECT_STYLE","NativeSelect","value","defaultValue","onChange","children","id_attr","e","Count","loading","Skeleton","SettingsView","setActiveId","useState","theme","useTheme","density","useDensity","settings","setSettings","savedAt","setSavedAt","error","setError","busy","setBusy","lastAction","setLastAction","runAdmin","label","method","path","confirmMsg","fetchJson","err","FetchError","downloadFile","filename","a","skillsRes","useFetch","mcpsRes","hooksRes","agentsRes","settingsRes","useEffect","prev","update","key","s","patch","merged","navItems","handleSelect","id","_a","rootRef","useRef","targets","el","visible","observer","entries","entry","bestId","bestRatio","ratio","t","Grid","Stack","Inline","SettingsSection","SettingsRow","Input","v","tz","Slider","Switch","Button","_b","_c","Badge","_e","_d","_f","m","_h","_g","_i","_k","_j","Textarea","RotateCw","Plus","Trash2","next","PluginOptionsEditor","text","setText","cancelled","opts","save","parsed"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -1 +1 @@
1
- import{v as a,j as e,w as h,r as p,o as g,p as v,q as x,s as f,t as m}from"./cmdk-DVxytz9i.js";import{X as b,g as u}from"./main-CdOm1Pj9.js";const S=({children:t,...r})=>e.jsx(h,{...r,children:t}),D=a,j={top:{top:0,left:0,right:0,height:"60vh",borderBottom:"1px solid var(--border)",borderRadius:"0 0 var(--radius-lg) var(--radius-lg)"},right:{top:0,right:0,bottom:0,width:"min(560px, 100vw)",borderLeft:"1px solid var(--border)"},bottom:{bottom:0,left:0,right:0,height:"60vh",borderTop:"1px solid var(--border)",borderRadius:"var(--radius-lg) var(--radius-lg) 0 0"},left:{top:0,left:0,bottom:0,width:"min(560px, 100vw)",borderRight:"1px solid var(--border)"}},C=p.forwardRef(function(r,i){const{className:d,side:o="right",title:l,description:s,children:n,...c}=r;return e.jsxs(g,{children:[e.jsx(v,{style:{position:"fixed",inset:0,background:"oklch(0 0 0 / 0.4)",zIndex:"var(--z-modal)"}}),e.jsxs(x,{ref:i,"data-side":o,className:u("v8-sheet",d),style:{position:"fixed",background:"var(--surface-popover)",padding:"var(--space-6)",overflow:"auto",boxShadow:"var(--shadow-4)",zIndex:"calc(var(--z-modal) + 1)",...j[o]},...c,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"var(--space-4)"},children:[e.jsxs("div",{children:[e.jsx(f,{style:{fontSize:"var(--fs-18)",fontWeight:600},children:l}),s!==void 0&&e.jsx(m,{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",marginTop:"var(--space-1)"},children:s})]}),e.jsx(a,{"aria-label":"Close",style:{width:28,height:28,display:"inline-flex",alignItems:"center",justifyContent:"center",background:"transparent",border:0,borderRadius:"var(--radius-sm)",color:"var(--fg-muted)",cursor:"pointer"},children:e.jsx(b,{size:16,"aria-hidden":"true"})})]}),n]})]})});export{S,C as a,D as b};
1
+ import{v as a,j as e,w as h,r as p,o as g,p as v,q as x,s as f,t as m}from"./cmdk-DVxytz9i.js";import{X as b,g as u}from"./main-CokHAXWM.js";const S=({children:t,...r})=>e.jsx(h,{...r,children:t}),D=a,j={top:{top:0,left:0,right:0,height:"60vh",borderBottom:"1px solid var(--border)",borderRadius:"0 0 var(--radius-lg) var(--radius-lg)"},right:{top:0,right:0,bottom:0,width:"min(560px, 100vw)",borderLeft:"1px solid var(--border)"},bottom:{bottom:0,left:0,right:0,height:"60vh",borderTop:"1px solid var(--border)",borderRadius:"var(--radius-lg) var(--radius-lg) 0 0"},left:{top:0,left:0,bottom:0,width:"min(560px, 100vw)",borderRight:"1px solid var(--border)"}},C=p.forwardRef(function(r,i){const{className:d,side:o="right",title:l,description:s,children:n,...c}=r;return e.jsxs(g,{children:[e.jsx(v,{style:{position:"fixed",inset:0,background:"oklch(0 0 0 / 0.4)",zIndex:"var(--z-modal)"}}),e.jsxs(x,{ref:i,"data-side":o,className:u("v8-sheet",d),style:{position:"fixed",background:"var(--surface-popover)",padding:"var(--space-6)",overflow:"auto",boxShadow:"var(--shadow-4)",zIndex:"calc(var(--z-modal) + 1)",...j[o]},...c,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"var(--space-4)"},children:[e.jsxs("div",{children:[e.jsx(f,{style:{fontSize:"var(--fs-18)",fontWeight:600},children:l}),s!==void 0&&e.jsx(m,{style:{fontSize:"var(--fs-13)",color:"var(--fg-muted)",marginTop:"var(--space-1)"},children:s})]}),e.jsx(a,{"aria-label":"Close",style:{width:28,height:28,display:"inline-flex",alignItems:"center",justifyContent:"center",background:"transparent",border:0,borderRadius:"var(--radius-sm)",color:"var(--fg-muted)",cursor:"pointer"},children:e.jsx(b,{size:16,"aria-hidden":"true"})})]}),n]})]})});export{S,C as a,D as b};
@@ -1 +1 @@
1
- {"version":3,"file":"Sheet-DH-WNJ3Y.js","sources":["../../src/web/v8/ui/feedback/Sheet.tsx"],"sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport * as RxDialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Sheet — a side-anchored panel.\n *\n * Use for: task detail, agent detail, settings panels (mobile), kanban card\n * expanded. Use a Dialog when the content is best presented centered.\n */\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface SheetProps extends Omit<ComponentPropsWithoutRef<typeof RxDialog.Root>, 'children'> {\n children: ReactNode;\n}\n\nexport const Sheet = ({ children, ...rest }: SheetProps) => (\n <RxDialog.Root {...rest}>{children}</RxDialog.Root>\n);\n\nexport const SheetTrigger = RxDialog.Trigger;\nexport const SheetClose = RxDialog.Close;\n\nexport interface SheetContentProps extends ComponentPropsWithoutRef<typeof RxDialog.Content> {\n side?: SheetSide;\n title: string;\n description?: string;\n children: ReactNode;\n}\n\nconst SIDE_STYLE: Record<SheetSide, React.CSSProperties> = {\n top: { top: 0, left: 0, right: 0, height: '60vh', borderBottom: '1px solid var(--border)', borderRadius: '0 0 var(--radius-lg) var(--radius-lg)' },\n right: { top: 0, right: 0, bottom: 0, width: 'min(560px, 100vw)', borderLeft: '1px solid var(--border)' },\n bottom: { bottom: 0, left: 0, right: 0, height: '60vh', borderTop: '1px solid var(--border)', borderRadius: 'var(--radius-lg) var(--radius-lg) 0 0' },\n left: { top: 0, left: 0, bottom: 0, width: 'min(560px, 100vw)', borderRight: '1px solid var(--border)' },\n};\n\nexport const SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(function SheetContent(\n props,\n ref,\n) {\n const { className, side = 'right', title, description, children, ...rest } = props;\n return (\n <RxDialog.Portal>\n <RxDialog.Overlay\n style={{\n position: 'fixed',\n inset: 0,\n background: 'oklch(0 0 0 / 0.4)',\n zIndex: 'var(--z-modal)',\n }}\n />\n <RxDialog.Content\n ref={ref}\n data-side={side}\n className={cx('v8-sheet', className)}\n style={{\n position: 'fixed',\n background: 'var(--surface-popover)',\n padding: 'var(--space-6)',\n overflow: 'auto',\n boxShadow: 'var(--shadow-4)',\n zIndex: 'calc(var(--z-modal) + 1)',\n ...SIDE_STYLE[side],\n }}\n {...rest}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 'var(--space-4)' }}>\n <div>\n <RxDialog.Title style={{ fontSize: 'var(--fs-18)', fontWeight: 600 }}>{title}</RxDialog.Title>\n {description !== undefined && (\n <RxDialog.Description\n style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', marginTop: 'var(--space-1)' }}\n >\n {description}\n </RxDialog.Description>\n )}\n </div>\n <RxDialog.Close\n aria-label=\"Close\"\n style={{\n width: 28,\n height: 28,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: 'var(--fg-muted)',\n cursor: 'pointer',\n }}\n >\n <X size={16} aria-hidden=\"true\" />\n </RxDialog.Close>\n </div>\n {children}\n </RxDialog.Content>\n </RxDialog.Portal>\n );\n});"],"names":["Sheet","children","rest","jsx","RxDialog.Root","SheetClose","RxDialog.Close","SIDE_STYLE","SheetContent","forwardRef","props","ref","className","side","title","description","jsxs","RxDialog.Portal","RxDialog.Overlay","RxDialog.Content","cx","RxDialog.Title","RxDialog.Description","X"],"mappings":"6IAkBO,MAAMA,EAAQ,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,IACnCC,EAAAA,IAACC,EAAA,CAAe,GAAGF,EAAO,SAAAD,CAAA,CAAS,EAIxBI,EAAaC,EASpBC,EAAqD,CACzD,IAAK,CAAE,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,aAAc,0BAA2B,aAAc,uCAAA,EACzG,MAAO,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,MAAO,oBAAqB,WAAY,yBAAA,EAC9E,OAAQ,CAAE,OAAQ,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,UAAW,0BAA2B,aAAc,uCAAA,EAC5G,KAAM,CAAE,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,oBAAqB,YAAa,yBAAA,CAC/E,EAEaC,EAAeC,EAAAA,WAA8C,SACxEC,EACAC,EACA,CACA,KAAM,CAAE,UAAAC,EAAW,KAAAC,EAAO,QAAS,MAAAC,EAAO,YAAAC,EAAa,SAAAd,EAAU,GAAGC,CAAA,EAASQ,EAC7E,OACEM,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAd,EAAAA,IAACe,EAAA,CACC,MAAO,CACL,SAAU,QACV,MAAO,EACP,WAAY,qBACZ,OAAQ,gBAAA,CACV,CAAA,EAEFF,EAAAA,KAACG,EAAA,CACC,IAAAR,EACA,YAAWE,EACX,UAAWO,EAAG,WAAYR,CAAS,EACnC,MAAO,CACL,SAAU,QACV,WAAY,yBACZ,QAAS,iBACT,SAAU,OACV,UAAW,kBACX,OAAQ,2BACR,GAAGL,EAAWM,CAAI,CAAA,EAEnB,GAAGX,EAEJ,SAAA,CAAAc,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,gBAAA,EAClG,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAb,EAAAA,IAACkB,EAAA,CAAe,MAAO,CAAE,SAAU,eAAgB,WAAY,GAAA,EAAQ,SAAAP,CAAA,CAAM,EAC5EC,IAAgB,QACfZ,EAAAA,IAACmB,EAAA,CACC,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,UAAW,gBAAA,EAEvE,SAAAP,CAAA,CAAA,CACH,EAEJ,EACAZ,EAAAA,IAACG,EAAA,CACC,aAAW,QACX,MAAO,CACL,MAAO,GACP,OAAQ,GACR,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,WAAY,cACZ,OAAQ,EACR,aAAc,mBACd,MAAO,kBACP,OAAQ,SAAA,EAGV,SAAAH,EAAAA,IAACoB,EAAA,CAAE,KAAM,GAAI,cAAY,MAAA,CAAO,CAAA,CAAA,CAClC,EACF,EACCtB,CAAA,CAAA,CAAA,CACH,EACF,CAEJ,CAAC"}
1
+ {"version":3,"file":"Sheet-DnDid58j.js","sources":["../../src/web/v8/ui/feedback/Sheet.tsx"],"sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport * as RxDialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Sheet — a side-anchored panel.\n *\n * Use for: task detail, agent detail, settings panels (mobile), kanban card\n * expanded. Use a Dialog when the content is best presented centered.\n */\n\nexport type SheetSide = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface SheetProps extends Omit<ComponentPropsWithoutRef<typeof RxDialog.Root>, 'children'> {\n children: ReactNode;\n}\n\nexport const Sheet = ({ children, ...rest }: SheetProps) => (\n <RxDialog.Root {...rest}>{children}</RxDialog.Root>\n);\n\nexport const SheetTrigger = RxDialog.Trigger;\nexport const SheetClose = RxDialog.Close;\n\nexport interface SheetContentProps extends ComponentPropsWithoutRef<typeof RxDialog.Content> {\n side?: SheetSide;\n title: string;\n description?: string;\n children: ReactNode;\n}\n\nconst SIDE_STYLE: Record<SheetSide, React.CSSProperties> = {\n top: { top: 0, left: 0, right: 0, height: '60vh', borderBottom: '1px solid var(--border)', borderRadius: '0 0 var(--radius-lg) var(--radius-lg)' },\n right: { top: 0, right: 0, bottom: 0, width: 'min(560px, 100vw)', borderLeft: '1px solid var(--border)' },\n bottom: { bottom: 0, left: 0, right: 0, height: '60vh', borderTop: '1px solid var(--border)', borderRadius: 'var(--radius-lg) var(--radius-lg) 0 0' },\n left: { top: 0, left: 0, bottom: 0, width: 'min(560px, 100vw)', borderRight: '1px solid var(--border)' },\n};\n\nexport const SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(function SheetContent(\n props,\n ref,\n) {\n const { className, side = 'right', title, description, children, ...rest } = props;\n return (\n <RxDialog.Portal>\n <RxDialog.Overlay\n style={{\n position: 'fixed',\n inset: 0,\n background: 'oklch(0 0 0 / 0.4)',\n zIndex: 'var(--z-modal)',\n }}\n />\n <RxDialog.Content\n ref={ref}\n data-side={side}\n className={cx('v8-sheet', className)}\n style={{\n position: 'fixed',\n background: 'var(--surface-popover)',\n padding: 'var(--space-6)',\n overflow: 'auto',\n boxShadow: 'var(--shadow-4)',\n zIndex: 'calc(var(--z-modal) + 1)',\n ...SIDE_STYLE[side],\n }}\n {...rest}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 'var(--space-4)' }}>\n <div>\n <RxDialog.Title style={{ fontSize: 'var(--fs-18)', fontWeight: 600 }}>{title}</RxDialog.Title>\n {description !== undefined && (\n <RxDialog.Description\n style={{ fontSize: 'var(--fs-13)', color: 'var(--fg-muted)', marginTop: 'var(--space-1)' }}\n >\n {description}\n </RxDialog.Description>\n )}\n </div>\n <RxDialog.Close\n aria-label=\"Close\"\n style={{\n width: 28,\n height: 28,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'transparent',\n border: 0,\n borderRadius: 'var(--radius-sm)',\n color: 'var(--fg-muted)',\n cursor: 'pointer',\n }}\n >\n <X size={16} aria-hidden=\"true\" />\n </RxDialog.Close>\n </div>\n {children}\n </RxDialog.Content>\n </RxDialog.Portal>\n );\n});"],"names":["Sheet","children","rest","jsx","RxDialog.Root","SheetClose","RxDialog.Close","SIDE_STYLE","SheetContent","forwardRef","props","ref","className","side","title","description","jsxs","RxDialog.Portal","RxDialog.Overlay","RxDialog.Content","cx","RxDialog.Title","RxDialog.Description","X"],"mappings":"6IAkBO,MAAMA,EAAQ,CAAC,CAAE,SAAAC,EAAU,GAAGC,CAAA,IACnCC,EAAAA,IAACC,EAAA,CAAe,GAAGF,EAAO,SAAAD,CAAA,CAAS,EAIxBI,EAAaC,EASpBC,EAAqD,CACzD,IAAK,CAAE,IAAK,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,aAAc,0BAA2B,aAAc,uCAAA,EACzG,MAAO,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,MAAO,oBAAqB,WAAY,yBAAA,EAC9E,OAAQ,CAAE,OAAQ,EAAG,KAAM,EAAG,MAAO,EAAG,OAAQ,OAAQ,UAAW,0BAA2B,aAAc,uCAAA,EAC5G,KAAM,CAAE,IAAK,EAAG,KAAM,EAAG,OAAQ,EAAG,MAAO,oBAAqB,YAAa,yBAAA,CAC/E,EAEaC,EAAeC,EAAAA,WAA8C,SACxEC,EACAC,EACA,CACA,KAAM,CAAE,UAAAC,EAAW,KAAAC,EAAO,QAAS,MAAAC,EAAO,YAAAC,EAAa,SAAAd,EAAU,GAAGC,CAAA,EAASQ,EAC7E,OACEM,EAAAA,KAACC,EAAA,CACC,SAAA,CAAAd,EAAAA,IAACe,EAAA,CACC,MAAO,CACL,SAAU,QACV,MAAO,EACP,WAAY,qBACZ,OAAQ,gBAAA,CACV,CAAA,EAEFF,EAAAA,KAACG,EAAA,CACC,IAAAR,EACA,YAAWE,EACX,UAAWO,EAAG,WAAYR,CAAS,EACnC,MAAO,CACL,SAAU,QACV,WAAY,yBACZ,QAAS,iBACT,SAAU,OACV,UAAW,kBACX,OAAQ,2BACR,GAAGL,EAAWM,CAAI,CAAA,EAEnB,GAAGX,EAEJ,SAAA,CAAAc,EAAAA,KAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,gBAAA,EAClG,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAb,EAAAA,IAACkB,EAAA,CAAe,MAAO,CAAE,SAAU,eAAgB,WAAY,GAAA,EAAQ,SAAAP,CAAA,CAAM,EAC5EC,IAAgB,QACfZ,EAAAA,IAACmB,EAAA,CACC,MAAO,CAAE,SAAU,eAAgB,MAAO,kBAAmB,UAAW,gBAAA,EAEvE,SAAAP,CAAA,CAAA,CACH,EAEJ,EACAZ,EAAAA,IAACG,EAAA,CACC,aAAW,QACX,MAAO,CACL,MAAO,GACP,OAAQ,GACR,QAAS,cACT,WAAY,SACZ,eAAgB,SAChB,WAAY,cACZ,OAAQ,EACR,aAAc,mBACd,MAAO,kBACP,OAAQ,SAAA,EAGV,SAAAH,EAAAA,IAACoB,EAAA,CAAE,KAAM,GAAI,cAAY,MAAA,CAAO,CAAA,CAAA,CAClC,EACF,EACCtB,CAAA,CAAA,CAAA,CACH,EACF,CAEJ,CAAC"}
@@ -1 +1 @@
1
- import{r as d,b as V,m as we,j as f,i as T,P as N,c as Re}from"./cmdk-DVxytz9i.js";import{c as ye,u as Pe,a as q}from"./index-C4Vq_2LM.js";import{u as Ee}from"./index-CASP1n-5.js";import{m as _e,g as Ce}from"./main-CdOm1Pj9.js";var J=["PageUp","PageDown"],Q=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Z={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},A="Slider",[z,De,Me]=ye(A),[U]=Re(A,[Me]),[Te,B]=U(A),ee=d.forwardRef((e,t)=>{const{name:n,min:r=0,max:s=100,step:o=1,orientation:c="horizontal",disabled:i=!1,minStepsBetweenThumbs:m=0,defaultValue:l=[r],value:p,onValueChange:a=()=>{},onValueCommit:u=()=>{},inverted:v=!1,form:b,...S}=e,x=d.useRef(new Set),g=d.useRef(0),y=d.useRef(!1),P=c==="horizontal"?Ve:Ae,[R,$]=d.useState(null),H=V(t,$),[_=[],F]=we({prop:p,defaultProp:l,onChange:h=>{var D;(D=[...x.current][g.current])==null||D.focus({preventScroll:!0,focusVisible:y.current}),y.current=!1,a(h)}}),G=d.useRef(_),ge=d.useRef(_);d.useEffect(()=>{const h=b?R==null?void 0:R.ownerDocument.getElementById(b):R==null?void 0:R.closest("form");if(h instanceof HTMLFormElement){const E=()=>F(ge.current);return h.addEventListener("reset",E),()=>h.removeEventListener("reset",E)}},[R,b,F]);function ve(h){const E=Be(_,h);j(h,E)}function xe(h){j(h,g.current)}function be(){const h=G.current[g.current];_[g.current]!==h&&u(_)}function j(h,E,{commit:D}={commit:!1}){const X=Se(o),L=k(Math.round((h-r)/o)*o+r,X),I=q(L,[r,s]);F((M=[])=>{const C=Ie(M,I,E);if(He(C,m*o)){g.current=C.indexOf(I);const W=String(C)!==String(M);return W&&D&&u(C),W?C:M}else return M})}return f.jsx(Te,{scope:e.__scopeSlider,name:n,disabled:i,min:r,max:s,valueIndexToChangeRef:g,thumbs:x.current,values:_,orientation:c,form:b,children:f.jsx(z.Provider,{scope:e.__scopeSlider,children:f.jsx(z.Slot,{scope:e.__scopeSlider,children:f.jsx(P,{"aria-disabled":i,"data-disabled":i?"":void 0,...S,ref:H,onPointerDown:T(S.onPointerDown,()=>{i||(G.current=_,y.current=!1)}),min:r,max:s,inverted:v,onSlideStart:i?void 0:ve,onSlideMove:i?void 0:xe,onSlideEnd:i?void 0:be,onHomeKeyDown:()=>{i||(y.current=!0,j(r,0,{commit:!0}))},onEndKeyDown:()=>{i||(y.current=!0,j(s,_.length-1,{commit:!0}))},onStepKeyDown:({event:h,direction:E})=>{if(!i){y.current=!0;const L=J.includes(h.key)||h.shiftKey&&Q.includes(h.key)?10:1,I=g.current,M=_[I],C=Fe(M,{min:r,step:o,direction:E,multiplier:L});j(C,I,{commit:!0})}}})})})})});ee.displayName=A;var[te,ne]=U(A,{startEdge:"left",endEdge:"right",size:"width",direction:1}),Ve=d.forwardRef((e,t)=>{const{min:n,max:r,dir:s,inverted:o,onSlideStart:c,onSlideMove:i,onSlideEnd:m,onStepKeyDown:l,...p}=e,[a,u]=d.useState(null),v=V(t,u),b=d.useRef(void 0),S=Pe(s),x=S==="ltr",g=x&&!o||!x&&o;function y(w){const P=b.current||a.getBoundingClientRect(),R=[0,P.width],H=Y(R,g?[n,r]:[r,n]);return b.current=P,H(w-P.left)}return f.jsx(te,{scope:e.__scopeSlider,startEdge:g?"left":"right",endEdge:g?"right":"left",direction:g?1:-1,size:"width",children:f.jsx(re,{dir:S,"data-orientation":"horizontal",...p,ref:v,style:{...p.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:w=>{const P=y(w.clientX);c==null||c(P)},onSlideMove:w=>{const P=y(w.clientX);i==null||i(P)},onSlideEnd:()=>{b.current=void 0,m==null||m()},onStepKeyDown:w=>{const R=Z[g?"from-left":"from-right"].includes(w.key);l==null||l({event:w,direction:R?-1:1})}})})}),Ae=d.forwardRef((e,t)=>{const{min:n,max:r,inverted:s,onSlideStart:o,onSlideMove:c,onSlideEnd:i,onStepKeyDown:m,...l}=e,p=d.useRef(null),a=V(t,p),u=d.useRef(void 0),v=!s;function b(S){const x=u.current||p.current.getBoundingClientRect(),g=[0,x.height],w=Y(g,v?[r,n]:[n,r]);return u.current=x,w(S-x.top)}return f.jsx(te,{scope:e.__scopeSlider,startEdge:v?"bottom":"top",endEdge:v?"top":"bottom",size:"height",direction:v?1:-1,children:f.jsx(re,{"data-orientation":"vertical",...l,ref:a,style:{...l.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:S=>{const x=b(S.clientY);o==null||o(x)},onSlideMove:S=>{const x=b(S.clientY);c==null||c(x)},onSlideEnd:()=>{u.current=void 0,i==null||i()},onStepKeyDown:S=>{const g=Z[v?"from-bottom":"from-top"].includes(S.key);m==null||m({event:S,direction:g?-1:1})}})})}),re=d.forwardRef((e,t)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:s,onSlideEnd:o,onHomeKeyDown:c,onEndKeyDown:i,onStepKeyDown:m,...l}=e,p=B(A,n);return f.jsx(N.span,{...l,ref:t,onKeyDown:T(e.onKeyDown,a=>{a.key==="Home"?(c(a),a.preventDefault()):a.key==="End"?(i(a),a.preventDefault()):J.concat(Q).includes(a.key)&&(m(a),a.preventDefault())}),onPointerDown:T(e.onPointerDown,a=>{const u=a.target;u.setPointerCapture(a.pointerId),a.preventDefault(),p.thumbs.has(u)?u.focus({preventScroll:!0,focusVisible:!1}):r(a)}),onPointerMove:T(e.onPointerMove,a=>{a.target.hasPointerCapture(a.pointerId)&&s(a)}),onPointerUp:T(e.onPointerUp,a=>{const u=a.target;u.hasPointerCapture(a.pointerId)&&(u.releasePointerCapture(a.pointerId),o(a))})})}),oe="SliderTrack",se=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(oe,n);return f.jsx(N.span,{"data-disabled":s.disabled?"":void 0,"data-orientation":s.orientation,...r,ref:t})});se.displayName=oe;var O="SliderRange",ie=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(O,n),o=ne(O,n),c=d.useRef(null),i=V(t,c),m=s.values.length,l=s.values.map(u=>pe(u,s.min,s.max)),p=m>1?Math.min(...l):0,a=100-Math.max(...l);return f.jsx(N.span,{"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,...r,ref:i,style:{...e.style,[o.startEdge]:p+"%",[o.endEdge]:a+"%"}})});ie.displayName=O;var ae="SliderThumb",[je,ce]=U(ae),le="SliderThumbProvider";function ue(e){const{__scopeSlider:t,name:n,children:r,internal_do_not_use_render:s}=e,o=B(le,t),c=De(t),[i,m]=d.useState(null),l=d.useMemo(()=>i?c().findIndex(x=>x.ref.current===i):-1,[c,i]),p=_e(i),a=i?!!o.form||!!i.closest("form"):!0,u=o.values[l],v=n??(o.name?o.name+(o.values.length>1?"[]":""):void 0),b=u===void 0?0:pe(u,o.min,o.max);d.useEffect(()=>{if(i)return o.thumbs.add(i),()=>{o.thumbs.delete(i)}},[i,o.thumbs]);const S={value:u,name:v,form:o.form,isFormControl:a,index:l,thumb:i,onThumbChange:m,percent:b,size:p};return f.jsx(je,{scope:t,...S,children:Le(s)?s(S):r})}ue.displayName=le;var K="SliderThumbTrigger",de=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(K,n),o=ne(K,n),{index:c,value:i,percent:m,size:l,onThumbChange:p}=ce(K,n),a=V(t,p),u=Ne(c,s.values.length),v=l==null?void 0:l[o.size],b=v?Ke(v,m,o.direction):0;return f.jsx("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[o.startEdge]:`calc(${m}% + ${b}px)`},children:f.jsx(z.ItemSlot,{scope:n,children:f.jsx(N.span,{role:"slider","aria-label":e["aria-label"]||u,"aria-valuemin":s.min,"aria-valuenow":i,"aria-valuemax":s.max,"aria-orientation":s.orientation,"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,tabIndex:s.disabled?void 0:0,...r,ref:a,style:i===void 0?{display:"none"}:e.style,onFocus:T(e.onFocus,()=>{s.valueIndexToChangeRef.current=c})})})})});de.displayName=K;var fe=d.forwardRef((e,t)=>{const{__scopeSlider:n,name:r,...s}=e;return f.jsx(ue,{__scopeSlider:n,name:r,internal_do_not_use_render:({index:o,isFormControl:c})=>f.jsxs(f.Fragment,{children:[f.jsx(de,{...s,ref:t,__scopeSlider:n}),c?f.jsx(he,{__scopeSlider:n},o):null]})})});fe.displayName=ae;var me="SliderBubbleInput",he=d.forwardRef(({__scopeSlider:e,...t},n)=>{const{value:r,name:s,form:o}=ce(me,e),c=d.useRef(null),i=V(c,n),m=Ee(r);return d.useEffect(()=>{const l=c.current;if(!l)return;const p=window.HTMLInputElement.prototype,u=Object.getOwnPropertyDescriptor(p,"value").set;if(m!==r&&u){const v=new Event("input",{bubbles:!0});u.call(l,r),l.dispatchEvent(v)}},[m,r]),f.jsx(N.input,{style:{display:"none"},name:s,form:o,...t,ref:i,defaultValue:r})});he.displayName=me;function Ie(e=[],t,n){const r=[...e];return r[n]=t,r.sort((s,o)=>s-o)}function pe(e,t,n){const o=100/(n-t)*(e-t);return q(o,[0,100])}function Ne(e,t){return t>2?`Value ${e+1} of ${t}`:t===2?["Minimum","Maximum"][e]:void 0}function Be(e,t){if(e.length===1)return 0;const n=e.map(s=>Math.abs(s-t)),r=Math.min(...n);return n.indexOf(r)}function Ke(e,t,n){const r=e/2,o=Y([0,50],[0,r]);return(r-o(t)*n)*n}function ke(e){return e.slice(0,-1).map((t,n)=>e[n+1]-t)}function He(e,t){if(t>0){const n=ke(e);return Math.min(...n)>=t}return!0}function Y(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Se(e){if(!Number.isFinite(e))return 0;const t=e.toString();if(t.includes("e")){const[r,s]=t.split("e"),o=r.split(".")[1]||"",c=Number(s);return Math.max(0,o.length-c)}const n=t.split(".")[1];return n?n.length:0}function k(e,t){const n=Math.pow(10,t);return Math.round(e*n)/n}function Fe(e,{min:t,step:n,direction:r,multiplier:s}){const o=Se(n),c=(e-t)/n,i=Math.round(c),m=k(i*n+t,o)===k(e,o);let l;return m?l=i+s*r:r>0?l=Math.ceil(c):l=Math.floor(c),k(l*n+t,o)}function Le(e){return typeof e=="function"}const $e=d.forwardRef(function(t,n){const{className:r,...s}=t;return f.jsxs(ee,{ref:n,className:Ce("v8-slider",r),style:{position:"relative",display:"flex",alignItems:"center",userSelect:"none",touchAction:"none",width:"100%",height:20},...s,children:[f.jsx(se,{style:{background:"var(--surface-2)",position:"relative",flexGrow:1,borderRadius:"var(--radius-pill)",height:4},children:f.jsx(ie,{style:{position:"absolute",background:"var(--accent)",borderRadius:"var(--radius-pill)",height:"100%"}})}),(Array.isArray(t.value??t.defaultValue)?t.value??t.defaultValue??[]:[t.value??t.defaultValue??0]).map((o,c)=>f.jsx(fe,{"aria-label":t["aria-label"]??`Thumb ${c+1}`,style:{display:"block",width:14,height:14,background:"var(--fg)",border:"2px solid var(--accent)",borderRadius:"var(--radius-pill)",cursor:"grab",boxShadow:"var(--shadow-1)"}},c))]})});export{$e as S};
1
+ import{r as d,b as V,m as we,j as f,i as T,P as N,c as Re}from"./cmdk-DVxytz9i.js";import{c as ye,u as Pe,a as q}from"./index-C4Vq_2LM.js";import{u as Ee}from"./index-CASP1n-5.js";import{m as _e,g as Ce}from"./main-CokHAXWM.js";var J=["PageUp","PageDown"],Q=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],Z={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},A="Slider",[z,De,Me]=ye(A),[U]=Re(A,[Me]),[Te,B]=U(A),ee=d.forwardRef((e,t)=>{const{name:n,min:r=0,max:s=100,step:o=1,orientation:c="horizontal",disabled:i=!1,minStepsBetweenThumbs:m=0,defaultValue:l=[r],value:p,onValueChange:a=()=>{},onValueCommit:u=()=>{},inverted:v=!1,form:b,...S}=e,x=d.useRef(new Set),g=d.useRef(0),y=d.useRef(!1),P=c==="horizontal"?Ve:Ae,[R,$]=d.useState(null),H=V(t,$),[_=[],F]=we({prop:p,defaultProp:l,onChange:h=>{var D;(D=[...x.current][g.current])==null||D.focus({preventScroll:!0,focusVisible:y.current}),y.current=!1,a(h)}}),G=d.useRef(_),ge=d.useRef(_);d.useEffect(()=>{const h=b?R==null?void 0:R.ownerDocument.getElementById(b):R==null?void 0:R.closest("form");if(h instanceof HTMLFormElement){const E=()=>F(ge.current);return h.addEventListener("reset",E),()=>h.removeEventListener("reset",E)}},[R,b,F]);function ve(h){const E=Be(_,h);j(h,E)}function xe(h){j(h,g.current)}function be(){const h=G.current[g.current];_[g.current]!==h&&u(_)}function j(h,E,{commit:D}={commit:!1}){const X=Se(o),L=k(Math.round((h-r)/o)*o+r,X),I=q(L,[r,s]);F((M=[])=>{const C=Ie(M,I,E);if(He(C,m*o)){g.current=C.indexOf(I);const W=String(C)!==String(M);return W&&D&&u(C),W?C:M}else return M})}return f.jsx(Te,{scope:e.__scopeSlider,name:n,disabled:i,min:r,max:s,valueIndexToChangeRef:g,thumbs:x.current,values:_,orientation:c,form:b,children:f.jsx(z.Provider,{scope:e.__scopeSlider,children:f.jsx(z.Slot,{scope:e.__scopeSlider,children:f.jsx(P,{"aria-disabled":i,"data-disabled":i?"":void 0,...S,ref:H,onPointerDown:T(S.onPointerDown,()=>{i||(G.current=_,y.current=!1)}),min:r,max:s,inverted:v,onSlideStart:i?void 0:ve,onSlideMove:i?void 0:xe,onSlideEnd:i?void 0:be,onHomeKeyDown:()=>{i||(y.current=!0,j(r,0,{commit:!0}))},onEndKeyDown:()=>{i||(y.current=!0,j(s,_.length-1,{commit:!0}))},onStepKeyDown:({event:h,direction:E})=>{if(!i){y.current=!0;const L=J.includes(h.key)||h.shiftKey&&Q.includes(h.key)?10:1,I=g.current,M=_[I],C=Fe(M,{min:r,step:o,direction:E,multiplier:L});j(C,I,{commit:!0})}}})})})})});ee.displayName=A;var[te,ne]=U(A,{startEdge:"left",endEdge:"right",size:"width",direction:1}),Ve=d.forwardRef((e,t)=>{const{min:n,max:r,dir:s,inverted:o,onSlideStart:c,onSlideMove:i,onSlideEnd:m,onStepKeyDown:l,...p}=e,[a,u]=d.useState(null),v=V(t,u),b=d.useRef(void 0),S=Pe(s),x=S==="ltr",g=x&&!o||!x&&o;function y(w){const P=b.current||a.getBoundingClientRect(),R=[0,P.width],H=Y(R,g?[n,r]:[r,n]);return b.current=P,H(w-P.left)}return f.jsx(te,{scope:e.__scopeSlider,startEdge:g?"left":"right",endEdge:g?"right":"left",direction:g?1:-1,size:"width",children:f.jsx(re,{dir:S,"data-orientation":"horizontal",...p,ref:v,style:{...p.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:w=>{const P=y(w.clientX);c==null||c(P)},onSlideMove:w=>{const P=y(w.clientX);i==null||i(P)},onSlideEnd:()=>{b.current=void 0,m==null||m()},onStepKeyDown:w=>{const R=Z[g?"from-left":"from-right"].includes(w.key);l==null||l({event:w,direction:R?-1:1})}})})}),Ae=d.forwardRef((e,t)=>{const{min:n,max:r,inverted:s,onSlideStart:o,onSlideMove:c,onSlideEnd:i,onStepKeyDown:m,...l}=e,p=d.useRef(null),a=V(t,p),u=d.useRef(void 0),v=!s;function b(S){const x=u.current||p.current.getBoundingClientRect(),g=[0,x.height],w=Y(g,v?[r,n]:[n,r]);return u.current=x,w(S-x.top)}return f.jsx(te,{scope:e.__scopeSlider,startEdge:v?"bottom":"top",endEdge:v?"top":"bottom",size:"height",direction:v?1:-1,children:f.jsx(re,{"data-orientation":"vertical",...l,ref:a,style:{...l.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:S=>{const x=b(S.clientY);o==null||o(x)},onSlideMove:S=>{const x=b(S.clientY);c==null||c(x)},onSlideEnd:()=>{u.current=void 0,i==null||i()},onStepKeyDown:S=>{const g=Z[v?"from-bottom":"from-top"].includes(S.key);m==null||m({event:S,direction:g?-1:1})}})})}),re=d.forwardRef((e,t)=>{const{__scopeSlider:n,onSlideStart:r,onSlideMove:s,onSlideEnd:o,onHomeKeyDown:c,onEndKeyDown:i,onStepKeyDown:m,...l}=e,p=B(A,n);return f.jsx(N.span,{...l,ref:t,onKeyDown:T(e.onKeyDown,a=>{a.key==="Home"?(c(a),a.preventDefault()):a.key==="End"?(i(a),a.preventDefault()):J.concat(Q).includes(a.key)&&(m(a),a.preventDefault())}),onPointerDown:T(e.onPointerDown,a=>{const u=a.target;u.setPointerCapture(a.pointerId),a.preventDefault(),p.thumbs.has(u)?u.focus({preventScroll:!0,focusVisible:!1}):r(a)}),onPointerMove:T(e.onPointerMove,a=>{a.target.hasPointerCapture(a.pointerId)&&s(a)}),onPointerUp:T(e.onPointerUp,a=>{const u=a.target;u.hasPointerCapture(a.pointerId)&&(u.releasePointerCapture(a.pointerId),o(a))})})}),oe="SliderTrack",se=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(oe,n);return f.jsx(N.span,{"data-disabled":s.disabled?"":void 0,"data-orientation":s.orientation,...r,ref:t})});se.displayName=oe;var O="SliderRange",ie=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(O,n),o=ne(O,n),c=d.useRef(null),i=V(t,c),m=s.values.length,l=s.values.map(u=>pe(u,s.min,s.max)),p=m>1?Math.min(...l):0,a=100-Math.max(...l);return f.jsx(N.span,{"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,...r,ref:i,style:{...e.style,[o.startEdge]:p+"%",[o.endEdge]:a+"%"}})});ie.displayName=O;var ae="SliderThumb",[je,ce]=U(ae),le="SliderThumbProvider";function ue(e){const{__scopeSlider:t,name:n,children:r,internal_do_not_use_render:s}=e,o=B(le,t),c=De(t),[i,m]=d.useState(null),l=d.useMemo(()=>i?c().findIndex(x=>x.ref.current===i):-1,[c,i]),p=_e(i),a=i?!!o.form||!!i.closest("form"):!0,u=o.values[l],v=n??(o.name?o.name+(o.values.length>1?"[]":""):void 0),b=u===void 0?0:pe(u,o.min,o.max);d.useEffect(()=>{if(i)return o.thumbs.add(i),()=>{o.thumbs.delete(i)}},[i,o.thumbs]);const S={value:u,name:v,form:o.form,isFormControl:a,index:l,thumb:i,onThumbChange:m,percent:b,size:p};return f.jsx(je,{scope:t,...S,children:Le(s)?s(S):r})}ue.displayName=le;var K="SliderThumbTrigger",de=d.forwardRef((e,t)=>{const{__scopeSlider:n,...r}=e,s=B(K,n),o=ne(K,n),{index:c,value:i,percent:m,size:l,onThumbChange:p}=ce(K,n),a=V(t,p),u=Ne(c,s.values.length),v=l==null?void 0:l[o.size],b=v?Ke(v,m,o.direction):0;return f.jsx("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[o.startEdge]:`calc(${m}% + ${b}px)`},children:f.jsx(z.ItemSlot,{scope:n,children:f.jsx(N.span,{role:"slider","aria-label":e["aria-label"]||u,"aria-valuemin":s.min,"aria-valuenow":i,"aria-valuemax":s.max,"aria-orientation":s.orientation,"data-orientation":s.orientation,"data-disabled":s.disabled?"":void 0,tabIndex:s.disabled?void 0:0,...r,ref:a,style:i===void 0?{display:"none"}:e.style,onFocus:T(e.onFocus,()=>{s.valueIndexToChangeRef.current=c})})})})});de.displayName=K;var fe=d.forwardRef((e,t)=>{const{__scopeSlider:n,name:r,...s}=e;return f.jsx(ue,{__scopeSlider:n,name:r,internal_do_not_use_render:({index:o,isFormControl:c})=>f.jsxs(f.Fragment,{children:[f.jsx(de,{...s,ref:t,__scopeSlider:n}),c?f.jsx(he,{__scopeSlider:n},o):null]})})});fe.displayName=ae;var me="SliderBubbleInput",he=d.forwardRef(({__scopeSlider:e,...t},n)=>{const{value:r,name:s,form:o}=ce(me,e),c=d.useRef(null),i=V(c,n),m=Ee(r);return d.useEffect(()=>{const l=c.current;if(!l)return;const p=window.HTMLInputElement.prototype,u=Object.getOwnPropertyDescriptor(p,"value").set;if(m!==r&&u){const v=new Event("input",{bubbles:!0});u.call(l,r),l.dispatchEvent(v)}},[m,r]),f.jsx(N.input,{style:{display:"none"},name:s,form:o,...t,ref:i,defaultValue:r})});he.displayName=me;function Ie(e=[],t,n){const r=[...e];return r[n]=t,r.sort((s,o)=>s-o)}function pe(e,t,n){const o=100/(n-t)*(e-t);return q(o,[0,100])}function Ne(e,t){return t>2?`Value ${e+1} of ${t}`:t===2?["Minimum","Maximum"][e]:void 0}function Be(e,t){if(e.length===1)return 0;const n=e.map(s=>Math.abs(s-t)),r=Math.min(...n);return n.indexOf(r)}function Ke(e,t,n){const r=e/2,o=Y([0,50],[0,r]);return(r-o(t)*n)*n}function ke(e){return e.slice(0,-1).map((t,n)=>e[n+1]-t)}function He(e,t){if(t>0){const n=ke(e);return Math.min(...n)>=t}return!0}function Y(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function Se(e){if(!Number.isFinite(e))return 0;const t=e.toString();if(t.includes("e")){const[r,s]=t.split("e"),o=r.split(".")[1]||"",c=Number(s);return Math.max(0,o.length-c)}const n=t.split(".")[1];return n?n.length:0}function k(e,t){const n=Math.pow(10,t);return Math.round(e*n)/n}function Fe(e,{min:t,step:n,direction:r,multiplier:s}){const o=Se(n),c=(e-t)/n,i=Math.round(c),m=k(i*n+t,o)===k(e,o);let l;return m?l=i+s*r:r>0?l=Math.ceil(c):l=Math.floor(c),k(l*n+t,o)}function Le(e){return typeof e=="function"}const $e=d.forwardRef(function(t,n){const{className:r,...s}=t;return f.jsxs(ee,{ref:n,className:Ce("v8-slider",r),style:{position:"relative",display:"flex",alignItems:"center",userSelect:"none",touchAction:"none",width:"100%",height:20},...s,children:[f.jsx(se,{style:{background:"var(--surface-2)",position:"relative",flexGrow:1,borderRadius:"var(--radius-pill)",height:4},children:f.jsx(ie,{style:{position:"absolute",background:"var(--accent)",borderRadius:"var(--radius-pill)",height:"100%"}})}),(Array.isArray(t.value??t.defaultValue)?t.value??t.defaultValue??[]:[t.value??t.defaultValue??0]).map((o,c)=>f.jsx(fe,{"aria-label":t["aria-label"]??`Thumb ${c+1}`,style:{display:"block",width:14,height:14,background:"var(--fg)",border:"2px solid var(--accent)",borderRadius:"var(--radius-pill)",cursor:"grab",boxShadow:"var(--shadow-1)"}},c))]})});export{$e as S};