@polderlabs/bizar 10.4.3 → 10.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bizar-dash/dist/assets/{ActivityFeed-DC0JiK49.js → ActivityFeed-RQeyFifx.js} +1 -1
- package/bizar-dash/dist/assets/{ActivityFeed-DC0JiK49.js.map → ActivityFeed-RQeyFifx.js.map} +1 -1
- package/bizar-dash/dist/assets/{ActivityView-ubEDAWMY.js → ActivityView-CibyssPM.js} +1 -1
- package/bizar-dash/dist/assets/{ActivityView-ubEDAWMY.js.map → ActivityView-CibyssPM.js.map} +1 -1
- package/bizar-dash/dist/assets/AdminView-BjczABeB.js +11 -0
- package/bizar-dash/dist/assets/AdminView-BjczABeB.js.map +1 -0
- package/bizar-dash/dist/assets/{AgentActivity-BLcqqkt2.js → AgentActivity-Bywt1twv.js} +1 -1
- package/bizar-dash/dist/assets/{AgentActivity-BLcqqkt2.js.map → AgentActivity-Bywt1twv.js.map} +1 -1
- package/bizar-dash/dist/assets/{AgentsView-CIQkZH8_.js → AgentsView-BnOjjM74.js} +4 -4
- package/bizar-dash/dist/assets/AgentsView-BnOjjM74.js.map +1 -0
- package/bizar-dash/dist/assets/{Alert-MwVEymjy.js → Alert-BZGk39mB.js} +1 -1
- package/bizar-dash/dist/assets/{Alert-MwVEymjy.js.map → Alert-BZGk39mB.js.map} +1 -1
- package/bizar-dash/dist/assets/{ArtifactsView-B-YUwZyb.js → ArtifactsView-CfYB1le1.js} +3 -3
- package/bizar-dash/dist/assets/ArtifactsView-CfYB1le1.js.map +1 -0
- package/bizar-dash/dist/assets/{AuthView-LaQuGo4u.js → AuthView-D4frSShw.js} +1 -1
- package/bizar-dash/dist/assets/{AuthView-LaQuGo4u.js.map → AuthView-D4frSShw.js.map} +1 -1
- package/bizar-dash/dist/assets/Avatar-BYg0rkPA.js +6 -0
- package/bizar-dash/dist/assets/Avatar-BYg0rkPA.js.map +1 -0
- package/bizar-dash/dist/assets/{BackgroundJobsView-CO3DEG8R.js → BackgroundJobsView-DEStvILz.js} +1 -1
- package/bizar-dash/dist/assets/{BackgroundJobsView-CO3DEG8R.js.map → BackgroundJobsView-DEStvILz.js.map} +1 -1
- package/bizar-dash/dist/assets/{BackupView-Cjf23ZWc.js → BackupView-B875KQa4.js} +1 -1
- package/bizar-dash/dist/assets/{BackupView-Cjf23ZWc.js.map → BackupView-B875KQa4.js.map} +1 -1
- package/bizar-dash/dist/assets/Banner-C8HEcT5l.js +1 -0
- package/bizar-dash/dist/assets/Banner-C8HEcT5l.js.map +1 -0
- package/bizar-dash/dist/assets/{Card-BmXiT4c6.js → Card-BtsmkhJa.js} +1 -1
- package/bizar-dash/dist/assets/{Card-BmXiT4c6.js.map → Card-BtsmkhJa.js.map} +1 -1
- package/bizar-dash/dist/assets/{ChatView-DXKFwvgp.js → ChatView-CkNS0SD8.js} +3 -3
- package/bizar-dash/dist/assets/{ChatView-DXKFwvgp.js.map → ChatView-CkNS0SD8.js.map} +1 -1
- package/bizar-dash/dist/assets/{Chip-Dei66BLx.js → Chip-XPOk0d_E.js} +1 -1
- package/bizar-dash/dist/assets/{Chip-Dei66BLx.js.map → Chip-XPOk0d_E.js.map} +1 -1
- package/bizar-dash/dist/assets/{ClaudeSessionsView-D-YNmzKi.js → ClaudeSessionsView-BprGo67K.js} +1 -1
- package/bizar-dash/dist/assets/{ClaudeSessionsView-D-YNmzKi.js.map → ClaudeSessionsView-BprGo67K.js.map} +1 -1
- package/bizar-dash/dist/assets/ClipboardView-CPlTU5VG.js +1 -0
- package/bizar-dash/dist/assets/ClipboardView-CPlTU5VG.js.map +1 -0
- package/bizar-dash/dist/assets/{ConfigView-BMBgifw5.js → ConfigView-BntUrW7s.js} +1 -1
- package/bizar-dash/dist/assets/{ConfigView-BMBgifw5.js.map → ConfigView-BntUrW7s.js.map} +1 -1
- package/bizar-dash/dist/assets/{DiagnosticsView-C0sdqhEl.js → DiagnosticsView-4x0Zu3yP.js} +1 -1
- package/bizar-dash/dist/assets/{DiagnosticsView-C0sdqhEl.js.map → DiagnosticsView-4x0Zu3yP.js.map} +1 -1
- package/bizar-dash/dist/assets/DialogsView-Xd02dVAX.js +6 -0
- package/bizar-dash/dist/assets/DialogsView-Xd02dVAX.js.map +1 -0
- package/bizar-dash/dist/assets/{DoctorView-CiFwRMW0.js → DoctorView-DepBdQGR.js} +2 -2
- package/bizar-dash/dist/assets/{DoctorView-CiFwRMW0.js.map → DoctorView-DepBdQGR.js.map} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-CdDQmfEL.js → EmptyState-DjKtY1Qi.js} +1 -1
- package/bizar-dash/dist/assets/{EmptyState-CdDQmfEL.js.map → EmptyState-DjKtY1Qi.js.map} +1 -1
- package/bizar-dash/dist/assets/{EnvVarsView-CNO03NDJ.js → EnvVarsView-S4Pbm128.js} +3 -3
- package/bizar-dash/dist/assets/{EnvVarsView-CNO03NDJ.js.map → EnvVarsView-S4Pbm128.js.map} +1 -1
- package/bizar-dash/dist/assets/{ErrorState-BRvj8qZZ.js → ErrorState-CBJbEQ8B.js} +1 -1
- package/bizar-dash/dist/assets/{ErrorState-BRvj8qZZ.js.map → ErrorState-CBJbEQ8B.js.map} +1 -1
- package/bizar-dash/dist/assets/EvalView-BeAyMCD1.js +1 -0
- package/bizar-dash/dist/assets/{EvalView-lgUhlGJh.js.map → EvalView-BeAyMCD1.js.map} +1 -1
- package/bizar-dash/dist/assets/{GoalsView-DmkCCs9i.js → GoalsView-BZr8In4c.js} +1 -1
- package/bizar-dash/dist/assets/{GoalsView-DmkCCs9i.js.map → GoalsView-BZr8In4c.js.map} +1 -1
- package/bizar-dash/dist/assets/{Grid-BThCPJaV.js → Grid--WKvqu5h.js} +1 -1
- package/bizar-dash/dist/assets/{Grid-BThCPJaV.js.map → Grid--WKvqu5h.js.map} +1 -1
- package/bizar-dash/dist/assets/{HistoryView-Cn2cPiHZ.js → HistoryView-djEbzqtk.js} +1 -1
- package/bizar-dash/dist/assets/{HistoryView-Cn2cPiHZ.js.map → HistoryView-djEbzqtk.js.map} +1 -1
- package/bizar-dash/dist/assets/{Input-cAQOvR8U.js → Input-h_nSOtwm.js} +1 -1
- package/bizar-dash/dist/assets/{Input-cAQOvR8U.js.map → Input-h_nSOtwm.js.map} +1 -1
- package/bizar-dash/dist/assets/LibrariesView-Vez8CvNq.js +6 -0
- package/bizar-dash/dist/assets/{LibrariesView-Ca_PRjUm.js.map → LibrariesView-Vez8CvNq.js.map} +1 -1
- package/bizar-dash/dist/assets/{LightRAGView-CMk9wOae.js → LightRAGView-DvqzQoBp.js} +1 -1
- package/bizar-dash/dist/assets/{LightRAGView-CMk9wOae.js.map → LightRAGView-DvqzQoBp.js.map} +1 -1
- package/bizar-dash/dist/assets/{ListHeader-BLAeshe0.js → ListHeader-CM8QoIWG.js} +1 -1
- package/bizar-dash/dist/assets/{ListHeader-BLAeshe0.js.map → ListHeader-CM8QoIWG.js.map} +1 -1
- package/bizar-dash/dist/assets/{MemoryView-wo2Pu7xQ.js → MemoryView-DnL8E2vI.js} +1 -1
- package/bizar-dash/dist/assets/{MemoryView-wo2Pu7xQ.js.map → MemoryView-DnL8E2vI.js.map} +1 -1
- package/bizar-dash/dist/assets/MiscView-B2YQXhZ_.js +1 -0
- package/bizar-dash/dist/assets/MiscView-B2YQXhZ_.js.map +1 -0
- package/bizar-dash/dist/assets/{ModsView-CV_RxdzJ.js → ModsView-BVM3X5xc.js} +1 -1
- package/bizar-dash/dist/assets/{ModsView-CV_RxdzJ.js.map → ModsView-BVM3X5xc.js.map} +1 -1
- package/bizar-dash/dist/assets/NotificationsView-A-Xs8BL1.js +6 -0
- package/bizar-dash/dist/assets/NotificationsView-A-Xs8BL1.js.map +1 -0
- package/bizar-dash/dist/assets/ObsidianView-mI3qW9OP.js +1 -0
- package/bizar-dash/dist/assets/{ObsidianView-C-AvHfpT.js.map → ObsidianView-mI3qW9OP.js.map} +1 -1
- package/bizar-dash/dist/assets/OverviewView-By69Cr5H.js +1 -0
- package/bizar-dash/dist/assets/OverviewView-By69Cr5H.js.map +1 -0
- package/bizar-dash/dist/assets/{ProgressBar-ya2PCj8L.js → ProgressBar-BnaBqv-W.js} +1 -1
- package/bizar-dash/dist/assets/{ProgressBar-ya2PCj8L.js.map → ProgressBar-BnaBqv-W.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProjectsView-N9zqFZ_O.js → ProjectsView-C81WTFka.js} +1 -1
- package/bizar-dash/dist/assets/{ProjectsView-N9zqFZ_O.js.map → ProjectsView-C81WTFka.js.map} +1 -1
- package/bizar-dash/dist/assets/{ProvidersView-BcL8jjwK.js → ProvidersView-2cn-TALE.js} +2 -2
- package/bizar-dash/dist/assets/{ProvidersView-BcL8jjwK.js.map → ProvidersView-2cn-TALE.js.map} +1 -1
- package/bizar-dash/dist/assets/{SchedulesView-8qxH3bg7.js → SchedulesView-o9AtIsH9.js} +1 -1
- package/bizar-dash/dist/assets/{SchedulesView-8qxH3bg7.js.map → SchedulesView-o9AtIsH9.js.map} +1 -1
- package/bizar-dash/dist/assets/{Select-D5AuVxxV.js → Select-CiGWEN8I.js} +1 -1
- package/bizar-dash/dist/assets/{Select-D5AuVxxV.js.map → Select-CiGWEN8I.js.map} +1 -1
- package/bizar-dash/dist/assets/{SettingsRow-BBALf9dA.js → SettingsRow-CflGJymA.js} +1 -1
- package/bizar-dash/dist/assets/{SettingsRow-BBALf9dA.js.map → SettingsRow-CflGJymA.js.map} +1 -1
- package/bizar-dash/dist/assets/{SettingsView-UD403neY.js → SettingsView-2HSFJPPK.js} +1 -1
- package/bizar-dash/dist/assets/{SettingsView-UD403neY.js.map → SettingsView-2HSFJPPK.js.map} +1 -1
- package/bizar-dash/dist/assets/{Sheet-CxXf6gvC.js → Sheet-B-CMP9-_.js} +1 -1
- package/bizar-dash/dist/assets/{Sheet-CxXf6gvC.js.map → Sheet-B-CMP9-_.js.map} +1 -1
- package/bizar-dash/dist/assets/{Slider-hvaVD_SW.js → Slider-Z4TP_CXY.js} +1 -1
- package/bizar-dash/dist/assets/{Slider-hvaVD_SW.js.map → Slider-Z4TP_CXY.js.map} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-DqmQzdJH.js → Sparkline-cvkv2HbU.js} +1 -1
- package/bizar-dash/dist/assets/{Sparkline-DqmQzdJH.js.map → Sparkline-cvkv2HbU.js.map} +1 -1
- package/bizar-dash/dist/assets/{Switch-C-_zcNdl.js → Switch-jcYo4lmp.js} +1 -1
- package/bizar-dash/dist/assets/{Switch-C-_zcNdl.js.map → Switch-jcYo4lmp.js.map} +1 -1
- package/bizar-dash/dist/assets/{TasksView-DseftDlx.js → TasksView-CQaSFzWY.js} +2 -2
- package/bizar-dash/dist/assets/{TasksView-DseftDlx.js.map → TasksView-CQaSFzWY.js.map} +1 -1
- package/bizar-dash/dist/assets/{Textarea-CcQGSgSH.js → Textarea-xnAybFGd.js} +1 -1
- package/bizar-dash/dist/assets/{Textarea-CcQGSgSH.js.map → Textarea-xnAybFGd.js.map} +1 -1
- package/bizar-dash/dist/assets/UpdateView-BUAEcRCX.js +1 -0
- package/bizar-dash/dist/assets/UpdateView-BUAEcRCX.js.map +1 -0
- package/bizar-dash/dist/assets/{UsageView-P5_pQ68d.js → UsageView-DMFbBOfH.js} +1 -1
- package/bizar-dash/dist/assets/{UsageView-P5_pQ68d.js.map → UsageView-DMFbBOfH.js.map} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-BaCWNuVX.js → ViewHeader-C-t1U2cQ.js} +1 -1
- package/bizar-dash/dist/assets/{ViewHeader-BaCWNuVX.js.map → ViewHeader-C-t1U2cQ.js.map} +1 -1
- package/bizar-dash/dist/assets/VoiceView-aoPVT6LJ.js +1 -0
- package/bizar-dash/dist/assets/VoiceView-aoPVT6LJ.js.map +1 -0
- package/bizar-dash/dist/assets/{brain-D6tAeUDE.js → brain-DhAzcHUk.js} +1 -1
- package/bizar-dash/dist/assets/{brain-D6tAeUDE.js.map → brain-DhAzcHUk.js.map} +1 -1
- package/bizar-dash/dist/assets/{calendar-BrMJf3vl.js → calendar-B9Wbemh7.js} +1 -1
- package/bizar-dash/dist/assets/{calendar-BrMJf3vl.js.map → calendar-B9Wbemh7.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-fPTATiOs.js → circle-6NJF_Xl6.js} +1 -1
- package/bizar-dash/dist/assets/{circle-fPTATiOs.js.map → circle-6NJF_Xl6.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-alert-D7jn06kH.js → circle-alert-Dz8lGfCZ.js} +1 -1
- package/bizar-dash/dist/assets/{circle-alert-D7jn06kH.js.map → circle-alert-Dz8lGfCZ.js.map} +1 -1
- package/bizar-dash/dist/assets/{circle-check-DHs37Sot.js → circle-check-DFB50ojt.js} +1 -1
- package/bizar-dash/dist/assets/{circle-check-DHs37Sot.js.map → circle-check-DFB50ojt.js.map} +1 -1
- package/bizar-dash/dist/assets/{clock-E-G5aGua.js → clock-ClVA6-hQ.js} +1 -1
- package/bizar-dash/dist/assets/{clock-E-G5aGua.js.map → clock-ClVA6-hQ.js.map} +1 -1
- package/bizar-dash/dist/assets/{download-DBkNb6oI.js → download-BvJddD8D.js} +1 -1
- package/bizar-dash/dist/assets/{download-DBkNb6oI.js.map → download-BvJddD8D.js.map} +1 -1
- package/bizar-dash/dist/assets/{external-link-C4pHGbz2.js → external-link-DvL89gaZ.js} +1 -1
- package/bizar-dash/dist/assets/{external-link-C4pHGbz2.js.map → external-link-DvL89gaZ.js.map} +1 -1
- package/bizar-dash/dist/assets/{file-text-CEhDgLq2.js → file-text-BOroDtZE.js} +1 -1
- package/bizar-dash/dist/assets/{file-text-CEhDgLq2.js.map → file-text-BOroDtZE.js.map} +1 -1
- package/bizar-dash/dist/assets/{filter-CEYjeWFX.js → filter-DwPjMRQt.js} +1 -1
- package/bizar-dash/dist/assets/{filter-CEYjeWFX.js.map → filter-DwPjMRQt.js.map} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-Bo_wBZZw.js → git-pull-request-TDb1inux.js} +1 -1
- package/bizar-dash/dist/assets/{git-pull-request-Bo_wBZZw.js.map → git-pull-request-TDb1inux.js.map} +1 -1
- package/bizar-dash/dist/assets/{main-DDAMz_H5.css → main-B7D_IMTh.css} +1 -1
- package/bizar-dash/dist/assets/main-BURAlktW.js +277 -0
- package/bizar-dash/dist/assets/main-BURAlktW.js.map +1 -0
- package/bizar-dash/dist/assets/{network-BsfwrUA-.js → network-BcCoCzIY.js} +1 -1
- package/bizar-dash/dist/assets/{network-BsfwrUA-.js.map → network-BcCoCzIY.js.map} +1 -1
- package/bizar-dash/dist/assets/{pause-C8PN1_yO.js → pause-BllItT2_.js} +1 -1
- package/bizar-dash/dist/assets/{pause-C8PN1_yO.js.map → pause-BllItT2_.js.map} +1 -1
- package/bizar-dash/dist/assets/{pencil---XuvKlz.js → pencil-DAwM-CC3.js} +1 -1
- package/bizar-dash/dist/assets/{pencil---XuvKlz.js.map → pencil-DAwM-CC3.js.map} +1 -1
- package/bizar-dash/dist/assets/{play-fMLPTihK.js → play-mJh67AXo.js} +2 -2
- package/bizar-dash/dist/assets/{play-fMLPTihK.js.map → play-mJh67AXo.js.map} +1 -1
- package/bizar-dash/dist/assets/{plug-CG8al2Kq.js → plug-BjfntCMC.js} +1 -1
- package/bizar-dash/dist/assets/{plug-CG8al2Kq.js.map → plug-BjfntCMC.js.map} +1 -1
- package/bizar-dash/dist/assets/{plus-uA5Ecuch.js → plus-Cm6-fo14.js} +1 -1
- package/bizar-dash/dist/assets/{plus-uA5Ecuch.js.map → plus-Cm6-fo14.js.map} +1 -1
- package/bizar-dash/dist/assets/{power-DSUlNIuR.js → power-CXN9y2KV.js} +1 -1
- package/bizar-dash/dist/assets/{power-DSUlNIuR.js.map → power-CXN9y2KV.js.map} +1 -1
- package/bizar-dash/dist/assets/{power-off-1CAQsHHy.js → power-off-DUZqwMf9.js} +1 -1
- package/bizar-dash/dist/assets/{power-off-1CAQsHHy.js.map → power-off-DUZqwMf9.js.map} +1 -1
- package/bizar-dash/dist/assets/{refresh-ccw-BL7B0NO1.js → refresh-ccw-DA8_IB9l.js} +1 -1
- package/bizar-dash/dist/assets/{refresh-ccw-BL7B0NO1.js.map → refresh-ccw-DA8_IB9l.js.map} +1 -1
- package/bizar-dash/dist/assets/{refresh-cw-CR9BzJik.js → refresh-cw-DwlP59en.js} +1 -1
- package/bizar-dash/dist/assets/{refresh-cw-CR9BzJik.js.map → refresh-cw-DwlP59en.js.map} +1 -1
- package/bizar-dash/dist/assets/{rotate-ccw-BtnitLfb.js → rotate-ccw-DMTASfAn.js} +1 -1
- package/bizar-dash/dist/assets/{rotate-ccw-BtnitLfb.js.map → rotate-ccw-DMTASfAn.js.map} +1 -1
- package/bizar-dash/dist/assets/{rotate-cw-CHgXCO7O.js → rotate-cw-BDX5SE2s.js} +1 -1
- package/bizar-dash/dist/assets/{rotate-cw-CHgXCO7O.js.map → rotate-cw-BDX5SE2s.js.map} +1 -1
- package/bizar-dash/dist/assets/{save-RcZOXR0U.js → save-Y0jPK5D6.js} +1 -1
- package/bizar-dash/dist/assets/{save-RcZOXR0U.js.map → save-Y0jPK5D6.js.map} +1 -1
- package/bizar-dash/dist/assets/{send-Bg2X_ibk.js → send-C8wwPHhR.js} +2 -2
- package/bizar-dash/dist/assets/{send-Bg2X_ibk.js.map → send-C8wwPHhR.js.map} +1 -1
- package/bizar-dash/dist/assets/{shield-alert-Dm48D034.js → shield-alert-DEvq9UG0.js} +1 -1
- package/bizar-dash/dist/assets/{shield-alert-Dm48D034.js.map → shield-alert-DEvq9UG0.js.map} +1 -1
- package/bizar-dash/dist/assets/{trash-2-B885GY46.js → trash-2-D6qePV_q.js} +2 -2
- package/bizar-dash/dist/assets/{trash-2-B885GY46.js.map → trash-2-D6qePV_q.js.map} +1 -1
- package/bizar-dash/dist/assets/{trending-up-CqUBvVxw.js → trending-up-BZzo_1ic.js} +1 -1
- package/bizar-dash/dist/assets/{trending-up-CqUBvVxw.js.map → trending-up-BZzo_1ic.js.map} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-DLmUhymD.js → triangle-alert-B2oHbmoh.js} +1 -1
- package/bizar-dash/dist/assets/{triangle-alert-DLmUhymD.js.map → triangle-alert-B2oHbmoh.js.map} +1 -1
- package/bizar-dash/dist/assets/{upload-C-oafpyE.js → upload-Dy59aZn6.js} +1 -1
- package/bizar-dash/dist/assets/{upload-C-oafpyE.js.map → upload-Dy59aZn6.js.map} +1 -1
- package/bizar-dash/dist/assets/{zap-O_4Ys_hh.js → zap-DENVhJnO.js} +2 -2
- package/bizar-dash/dist/assets/{zap-O_4Ys_hh.js.map → zap-DENVhJnO.js.map} +1 -1
- package/bizar-dash/dist/index.html +2 -2
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/web/v8/App.tsx +25 -4
- package/bizar-dash/src/web/v8/shell/Sidebar.tsx +8 -5
- package/bizar-dash/src/web/v8/shell/Topbar.tsx +57 -1
- package/bizar-dash/src/web/v8/ui/styles/globals.css +14 -0
- package/bizar-dash/src/web/v8/ui/theme/ThemeToggle.tsx +11 -6
- package/bizar-dash/src/web/v8/views/Admin/AdminView.tsx +32 -5
- package/bizar-dash/src/web/v8/views/Agents/AgentsView.tsx +11 -4
- package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +1 -1
- package/bizar-dash/src/web/v8/views/Clipboard/ClipboardView.tsx +1 -1
- package/bizar-dash/src/web/v8/views/Dialogs/DialogsView.tsx +1 -1
- package/bizar-dash/src/web/v8/views/Misc/MiscView.tsx +1 -1
- package/bizar-dash/src/web/v8/views/Notifications/NotificationsView.tsx +82 -13
- package/bizar-dash/src/web/v8/views/Overview/OverviewView.tsx +19 -0
- package/bizar-dash/src/web/v8/views/Voice/VoiceView.tsx +1 -1
- package/bizar-dash/tests/admin-run-grouping.test.mjs +42 -0
- package/bizar-dash/tests/agents-preview-truncate.test.mjs +35 -0
- package/bizar-dash/tests/empty-state-docs.test.mjs +55 -0
- package/bizar-dash/tests/focus-visible.test.mjs +30 -0
- package/bizar-dash/tests/notifications-dismiss-restore.test.mjs +85 -0
- package/bizar-dash/tests/palette-shortcut-hint.test.mjs +58 -0
- package/bizar-dash/tests/sidebar-distinct-icons.test.mjs +28 -0
- package/bizar-dash/tests/theme-toggle-icon.test.mjs +28 -0
- package/bizar-dash/tests/topbar-design-system.test.mjs +56 -0
- package/bizar-dash/vite.config.ts +8 -0
- package/package.json +1 -1
- package/packages/sdk/package.json +1 -1
- package/bizar-dash/dist/assets/AdminView-CI4zM2Qg.js +0 -11
- package/bizar-dash/dist/assets/AdminView-CI4zM2Qg.js.map +0 -1
- package/bizar-dash/dist/assets/AgentsView-CIQkZH8_.js.map +0 -1
- package/bizar-dash/dist/assets/ArtifactsView-B-YUwZyb.js.map +0 -1
- package/bizar-dash/dist/assets/Avatar-Dg4OF4RD.js +0 -6
- package/bizar-dash/dist/assets/Avatar-Dg4OF4RD.js.map +0 -1
- package/bizar-dash/dist/assets/ClipboardView-BA323V2J.js +0 -1
- package/bizar-dash/dist/assets/ClipboardView-BA323V2J.js.map +0 -1
- package/bizar-dash/dist/assets/DialogsView-DzTnyX8K.js +0 -6
- package/bizar-dash/dist/assets/DialogsView-DzTnyX8K.js.map +0 -1
- package/bizar-dash/dist/assets/EvalView-lgUhlGJh.js +0 -1
- package/bizar-dash/dist/assets/LibrariesView-Ca_PRjUm.js +0 -6
- package/bizar-dash/dist/assets/MiscView-fBT1TOXC.js +0 -1
- package/bizar-dash/dist/assets/MiscView-fBT1TOXC.js.map +0 -1
- package/bizar-dash/dist/assets/NotificationsView-BKAZLxM2.js +0 -6
- package/bizar-dash/dist/assets/NotificationsView-BKAZLxM2.js.map +0 -1
- package/bizar-dash/dist/assets/ObsidianView-C-AvHfpT.js +0 -1
- package/bizar-dash/dist/assets/OverviewView-CKYzZJe3.js +0 -1
- package/bizar-dash/dist/assets/OverviewView-CKYzZJe3.js.map +0 -1
- package/bizar-dash/dist/assets/UpdateView-B9Lh4svM.js +0 -6
- package/bizar-dash/dist/assets/UpdateView-B9Lh4svM.js.map +0 -1
- package/bizar-dash/dist/assets/VoiceView-BwR9gm5e.js +0 -1
- package/bizar-dash/dist/assets/VoiceView-BwR9gm5e.js.map +0 -1
- package/bizar-dash/dist/assets/main-BZMmD6a8.js +0 -249
- package/bizar-dash/dist/assets/main-BZMmD6a8.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Slider-hvaVD_SW.js","sources":["../../../node_modules/@radix-ui/react-slider/dist/index.mjs","../../src/web/v8/ui/controls/Slider.tsx"],"sourcesContent":["\"use client\";\n\n// src/slider.tsx\nimport * as React from \"react\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PAGE_KEYS = [\"PageUp\", \"PageDown\"];\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar BACK_KEYS = {\n \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n};\nvar SLIDER_NAME = \"Slider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SLIDER_NAME);\nvar [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope\n]);\nvar [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\nvar Slider = React.forwardRef(\n (props, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {\n },\n onValueCommit = () => {\n },\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(/* @__PURE__ */ new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isKeyboardInteractionRef = React.useRef(false);\n const isHorizontal = orientation === \"horizontal\";\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n const [control, setControl] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value2) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus({\n preventScroll: true,\n focusVisible: isKeyboardInteractionRef.current\n });\n isKeyboardInteractionRef.current = false;\n onValueChange(value2);\n }\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n const initialValuesRef = React.useRef(values);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.closest(\"form\");\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValues(initialValuesRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setValues]);\n function handleSlideStart(value2) {\n const closestIndex = getClosestValueIndex(values, value2);\n updateValues(value2, closestIndex);\n }\n function handleSlideMove(value2) {\n updateValues(value2, valueIndexToChangeRef.current);\n }\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n function updateValues(value2, atIndex, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value2 - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n return /* @__PURE__ */ jsx(\n SliderProvider,\n {\n scope: props.__scopeSlider,\n name,\n disabled,\n min,\n max,\n valueIndexToChangeRef,\n thumbs: thumbRefs.current,\n values,\n orientation,\n form,\n children: /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(\n SliderOrientation,\n {\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...sliderProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(sliderProps.onPointerDown, () => {\n if (!disabled) {\n valuesBeforeSlideStartRef.current = values;\n isKeyboardInteractionRef.current = false;\n }\n }),\n min,\n max,\n inverted,\n onSlideStart: disabled ? void 0 : handleSlideStart,\n onSlideMove: disabled ? void 0 : handleSlideMove,\n onSlideEnd: disabled ? void 0 : handleSlideEnd,\n onHomeKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(min, 0, { commit: true });\n }\n },\n onEndKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(max, values.length - 1, { commit: true });\n }\n },\n onStepKeyDown: ({ event, direction: stepDirection }) => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.includes(event.key);\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value2 = values[atIndex];\n const nextValue = getNextStepValue(value2, {\n min,\n step,\n direction: stepDirection,\n multiplier\n });\n updateValues(nextValue, atIndex, { commit: true });\n }\n }\n }\n ) }) })\n }\n );\n }\n);\nSlider.displayName = SLIDER_NAME;\nvar [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext(SLIDER_NAME, {\n startEdge: \"left\",\n endEdge: \"right\",\n size: \"width\",\n direction: 1\n});\nvar SliderHorizontal = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setSlider);\n const rectRef = React.useRef(void 0);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const isSlidingFromLeft = isDirectionLTR && !inverted || !isDirectionLTR && inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || slider.getBoundingClientRect();\n const input = [0, rect.width];\n const output = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromLeft ? \"left\" : \"right\",\n endEdge: isSlidingFromLeft ? \"right\" : \"left\",\n direction: isSlidingFromLeft ? 1 : -1,\n size: \"width\",\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n dir: direction,\n \"data-orientation\": \"horizontal\",\n ...sliderProps,\n ref: composedRefs,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromLeft ? \"from-left\" : \"from-right\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderVertical = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef(void 0);\n const isSlidingFromBottom = !inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || sliderRef.current.getBoundingClientRect();\n const input = [0, rect.height];\n const output = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromBottom ? \"bottom\" : \"top\",\n endEdge: isSlidingFromBottom ? \"top\" : \"bottom\",\n size: \"height\",\n direction: isSlidingFromBottom ? 1 : -1,\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n \"data-orientation\": \"vertical\",\n ...sliderProps,\n ref,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromBottom ? \"from-bottom\" : \"from-top\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...sliderProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Home\") {\n onHomeKeyDown(event);\n event.preventDefault();\n } else if (event.key === \"End\") {\n onEndKeyDown(event);\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n event.preventDefault();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target;\n target.setPointerCapture(event.pointerId);\n event.preventDefault();\n if (context.thumbs.has(target)) {\n target.focus({ preventScroll: true, focusVisible: false });\n } else {\n onSlideStart(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })\n }\n );\n }\n);\nvar TRACK_NAME = \"SliderTrack\";\nvar SliderTrack = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-disabled\": context.disabled ? \"\" : void 0,\n \"data-orientation\": context.orientation,\n ...trackProps,\n ref: forwardedRef\n }\n );\n }\n);\nSliderTrack.displayName = TRACK_NAME;\nvar RANGE_NAME = \"SliderRange\";\nvar SliderRange = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map(\n (value) => convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...rangeProps,\n ref: composedRefs,\n style: {\n ...props.style,\n [orientation.startEdge]: offsetStart + \"%\",\n [orientation.endEdge]: offsetEnd + \"%\"\n }\n }\n );\n }\n);\nSliderRange.displayName = RANGE_NAME;\nvar THUMB_NAME = \"SliderThumb\";\nvar [SliderThumbContextProvider, useSliderThumbContext] = createSliderContext(THUMB_NAME);\nvar THUMB_PROVIDER_NAME = \"SliderThumbProvider\";\nfunction SliderThumbProvider(props) {\n const {\n __scopeSlider,\n name,\n children,\n // @ts-expect-error internal render prop\n internal_do_not_use_render\n } = props;\n const context = useSliderContext(THUMB_PROVIDER_NAME, __scopeSlider);\n const getItems = useCollection(__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const index = React.useMemo(\n () => thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1,\n [getItems, thumb]\n );\n const size = useSize(thumb);\n const isFormControl = thumb ? !!context.form || !!thumb.closest(\"form\") : true;\n const value = context.values[index];\n const resolvedName = name ?? (context.name ? context.name + (context.values.length > 1 ? \"[]\" : \"\") : void 0);\n const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max);\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n const thumbContext = {\n value,\n name: resolvedName,\n form: context.form,\n isFormControl,\n index,\n thumb,\n onThumbChange: setThumb,\n percent,\n size\n };\n return /* @__PURE__ */ jsx(SliderThumbContextProvider, { scope: __scopeSlider, ...thumbContext, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children });\n}\nSliderThumbProvider.displayName = THUMB_PROVIDER_NAME;\nvar THUMB_TRIGGER_NAME = \"SliderThumbTrigger\";\nvar SliderThumbTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...thumbProps } = props;\n const context = useSliderContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const { index, value, percent, size, onThumbChange } = useSliderThumbContext(\n THUMB_TRIGGER_NAME,\n __scopeSlider\n );\n const composedRefs = useComposedRefs(forwardedRef, onThumbChange);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction) : 0;\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n style: {\n transform: \"var(--radix-slider-thumb-transform)\",\n position: \"absolute\",\n [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`\n },\n children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeSlider, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n role: \"slider\",\n \"aria-label\": props[\"aria-label\"] || label,\n \"aria-valuemin\": context.min,\n \"aria-valuenow\": value,\n \"aria-valuemax\": context.max,\n \"aria-orientation\": context.orientation,\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n tabIndex: context.disabled ? void 0 : 0,\n ...thumbProps,\n ref: composedRefs,\n style: value === void 0 ? { display: \"none\" } : props.style,\n onFocus: composeEventHandlers(props.onFocus, () => {\n context.valueIndexToChangeRef.current = index;\n })\n }\n ) })\n }\n );\n }\n);\nSliderThumbTrigger.displayName = THUMB_TRIGGER_NAME;\nvar SliderThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, name, ...thumbProps } = props;\n return /* @__PURE__ */ jsx(\n SliderThumbProvider,\n {\n __scopeSlider,\n name,\n internal_do_not_use_render: ({ index, isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SliderThumbTrigger,\n {\n ...thumbProps,\n ref: forwardedRef,\n __scopeSlider\n }\n ),\n isFormControl ? /* @__PURE__ */ jsx(\n SliderBubbleInput,\n {\n __scopeSlider\n },\n index\n ) : null\n ] })\n }\n );\n }\n);\nSliderThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SliderBubbleInput\";\nvar SliderBubbleInput = React.forwardRef(\n ({ __scopeSlider, ...props }, forwardedRef) => {\n const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"value\");\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"input\", { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n style: { display: \"none\" },\n name,\n form,\n ...props,\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSliderBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getNextSortedValues(prevValues = [], nextValue, atIndex) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\nfunction convertValueToPercentage(value, min, max) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\nfunction getLabel(index, totalValues) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return [\"Minimum\", \"Maximum\"][index];\n } else {\n return void 0;\n }\n}\nfunction getClosestValueIndex(values, nextValue) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\nfunction getThumbInBoundsOffset(width, left, direction) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\nfunction getStepsBetweenValues(values) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\nfunction hasMinStepsBetweenValues(values, minStepsBetweenValues) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction getDecimalCount(value) {\n if (!Number.isFinite(value)) return 0;\n const str = value.toString();\n if (str.includes(\"e\")) {\n const [coefficient, exponent] = str.split(\"e\");\n const decimalPart2 = coefficient.split(\".\")[1] || \"\";\n const exponentNum = Number(exponent);\n return Math.max(0, decimalPart2.length - exponentNum);\n }\n const decimalPart = str.split(\".\")[1];\n return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValue(value, decimalCount) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\nfunction getNextStepValue(value, {\n min,\n step,\n direction,\n multiplier\n}) {\n const decimalCount = getDecimalCount(step);\n const stepsFromMin = (value - min) / step;\n const nearestSteps = Math.round(stepsFromMin);\n const isAligned = roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n let nextSteps;\n if (isAligned) {\n nextSteps = nearestSteps + multiplier * direction;\n } else if (direction > 0) {\n nextSteps = Math.ceil(stepsFromMin);\n } else {\n nextSteps = Math.floor(stepsFromMin);\n }\n return roundValue(nextSteps * step + min, decimalCount);\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nexport {\n SliderRange as Range,\n Slider as Root,\n Slider,\n SliderRange,\n SliderThumb,\n SliderTrack,\n SliderThumb as Thumb,\n SliderTrack as Track,\n createSliderScope,\n SliderBubbleInput as unstable_BubbleInput,\n SliderBubbleInput as unstable_SliderBubbleInput,\n SliderThumbProvider as unstable_SliderThumbProvider,\n SliderThumbTrigger as unstable_SliderThumbTrigger,\n SliderThumbProvider as unstable_ThumbProvider,\n SliderThumbTrigger as unstable_ThumbTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSlider from '@radix-ui/react-slider';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Slider — single or range numeric input.\n *\n * Built on Radix Slider for keyboard arrow + home/end handling.\n */\nexport type SliderProps = ComponentPropsWithoutRef<typeof RxSlider.Root>;\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(function Slider(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSlider.Root\n ref={ref}\n className={cx('v8-slider', className)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n width: '100%',\n height: 20,\n }}\n {...rest}\n >\n <RxSlider.Track\n style={{\n background: 'var(--surface-2)',\n position: 'relative',\n flexGrow: 1,\n borderRadius: 'var(--radius-pill)',\n height: 4,\n }}\n >\n <RxSlider.Range\n style={{\n position: 'absolute',\n background: 'var(--accent)',\n borderRadius: 'var(--radius-pill)',\n height: '100%',\n }}\n />\n </RxSlider.Track>\n {(Array.isArray(props.value ?? props.defaultValue)\n ? (props.value ?? props.defaultValue ?? [])\n : [props.value ?? props.defaultValue ?? 0]\n ).map((_, i) => (\n <RxSlider.Thumb\n key={i}\n aria-label={props['aria-label'] ?? `Thumb ${i + 1}`}\n style={{\n display: 'block',\n width: 14,\n height: 14,\n background: 'var(--fg)',\n border: '2px solid var(--accent)',\n borderRadius: 'var(--radius-pill)',\n cursor: 'grab',\n boxShadow: 'var(--shadow-1)',\n }}\n />\n ))}\n </RxSlider.Root>\n );\n});"],"names":["PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","useCollection","createCollectionScope","createCollection","createSliderContext","createContextScope","SliderProvider","useSliderContext","Slider","React.forwardRef","props","forwardedRef","name","min","max","step","orientation","disabled","minStepsBetweenThumbs","defaultValue","value","onValueChange","onValueCommit","inverted","form","sliderProps","thumbRefs","React.useRef","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","control","setControl","React.useState","composedRefs","useComposedRefs","values","setValues","useControllableState","value2","_a","valuesBeforeSlideStartRef","initialValuesRef","React.useEffect","associatedForm","reset","handleSlideStart","closestIndex","getClosestValueIndex","updateValues","handleSlideMove","handleSlideEnd","prevValue","atIndex","commit","decimalCount","getDecimalCount","snapToStep","roundValue","nextValue","clamp","prevValues","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","jsx","composeEventHandlers","event","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","dir","onSlideStart","onSlideMove","onSlideEnd","onStepKeyDown","slider","setSlider","rectRef","direction","useDirection","isDirectionLTR","isSlidingFromLeft","getValueFromPointer","pointerPosition","rect","input","linearScale","SliderImpl","isBackKey","sliderRef","ref","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","context","Primitive","target","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","THUMB_NAME","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","children","internal_do_not_use_render","getItems","thumb","setThumb","index","React.useMemo","item","size","useSize","isFormControl","resolvedName","percent","thumbContext","isFunction","THUMB_TRIGGER_NAME","SliderThumbTrigger","thumbProps","onThumbChange","label","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","jsxs","Fragment","SliderBubbleInput","BUBBLE_INPUT_NAME","usePrevious","inputProto","setValue","a","b","percentage","totalValues","distances","closestDistance","width","left","halfWidth","offset","getStepsBetweenValues","minStepsBetweenValues","stepsBetweenValues","output","ratio","str","coefficient","exponent","decimalPart2","exponentNum","decimalPart","rounder","stepsFromMin","nearestSteps","isAligned","nextSteps","forwardRef","className","rest","RxSlider.Root","cx","RxSlider.Track","RxSlider.Range","_","i","RxSlider.Thumb"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Slider-Z4TP_CXY.js","sources":["../../../node_modules/@radix-ui/react-slider/dist/index.mjs","../../src/web/v8/ui/controls/Slider.tsx"],"sourcesContent":["\"use client\";\n\n// src/slider.tsx\nimport * as React from \"react\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PAGE_KEYS = [\"PageUp\", \"PageDown\"];\nvar ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\nvar BACK_KEYS = {\n \"from-left\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-right\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowRight\"],\n \"from-bottom\": [\"Home\", \"PageDown\", \"ArrowDown\", \"ArrowLeft\"],\n \"from-top\": [\"Home\", \"PageDown\", \"ArrowUp\", \"ArrowLeft\"]\n};\nvar SLIDER_NAME = \"Slider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SLIDER_NAME);\nvar [createSliderContext, createSliderScope] = createContextScope(SLIDER_NAME, [\n createCollectionScope\n]);\nvar [SliderProvider, useSliderContext] = createSliderContext(SLIDER_NAME);\nvar Slider = React.forwardRef(\n (props, forwardedRef) => {\n const {\n name,\n min = 0,\n max = 100,\n step = 1,\n orientation = \"horizontal\",\n disabled = false,\n minStepsBetweenThumbs = 0,\n defaultValue = [min],\n value,\n onValueChange = () => {\n },\n onValueCommit = () => {\n },\n inverted = false,\n form,\n ...sliderProps\n } = props;\n const thumbRefs = React.useRef(/* @__PURE__ */ new Set());\n const valueIndexToChangeRef = React.useRef(0);\n const isKeyboardInteractionRef = React.useRef(false);\n const isHorizontal = orientation === \"horizontal\";\n const SliderOrientation = isHorizontal ? SliderHorizontal : SliderVertical;\n const [control, setControl] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const [values = [], setValues] = useControllableState({\n prop: value,\n defaultProp: defaultValue,\n onChange: (value2) => {\n const thumbs = [...thumbRefs.current];\n thumbs[valueIndexToChangeRef.current]?.focus({\n preventScroll: true,\n focusVisible: isKeyboardInteractionRef.current\n });\n isKeyboardInteractionRef.current = false;\n onValueChange(value2);\n }\n });\n const valuesBeforeSlideStartRef = React.useRef(values);\n const initialValuesRef = React.useRef(values);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.closest(\"form\");\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setValues(initialValuesRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setValues]);\n function handleSlideStart(value2) {\n const closestIndex = getClosestValueIndex(values, value2);\n updateValues(value2, closestIndex);\n }\n function handleSlideMove(value2) {\n updateValues(value2, valueIndexToChangeRef.current);\n }\n function handleSlideEnd() {\n const prevValue = valuesBeforeSlideStartRef.current[valueIndexToChangeRef.current];\n const nextValue = values[valueIndexToChangeRef.current];\n const hasChanged = nextValue !== prevValue;\n if (hasChanged) onValueCommit(values);\n }\n function updateValues(value2, atIndex, { commit } = { commit: false }) {\n const decimalCount = getDecimalCount(step);\n const snapToStep = roundValue(Math.round((value2 - min) / step) * step + min, decimalCount);\n const nextValue = clamp(snapToStep, [min, max]);\n setValues((prevValues = []) => {\n const nextValues = getNextSortedValues(prevValues, nextValue, atIndex);\n if (hasMinStepsBetweenValues(nextValues, minStepsBetweenThumbs * step)) {\n valueIndexToChangeRef.current = nextValues.indexOf(nextValue);\n const hasChanged = String(nextValues) !== String(prevValues);\n if (hasChanged && commit) onValueCommit(nextValues);\n return hasChanged ? nextValues : prevValues;\n } else {\n return prevValues;\n }\n });\n }\n return /* @__PURE__ */ jsx(\n SliderProvider,\n {\n scope: props.__scopeSlider,\n name,\n disabled,\n min,\n max,\n valueIndexToChangeRef,\n thumbs: thumbRefs.current,\n values,\n orientation,\n form,\n children: /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSlider, children: /* @__PURE__ */ jsx(\n SliderOrientation,\n {\n \"aria-disabled\": disabled,\n \"data-disabled\": disabled ? \"\" : void 0,\n ...sliderProps,\n ref: composedRefs,\n onPointerDown: composeEventHandlers(sliderProps.onPointerDown, () => {\n if (!disabled) {\n valuesBeforeSlideStartRef.current = values;\n isKeyboardInteractionRef.current = false;\n }\n }),\n min,\n max,\n inverted,\n onSlideStart: disabled ? void 0 : handleSlideStart,\n onSlideMove: disabled ? void 0 : handleSlideMove,\n onSlideEnd: disabled ? void 0 : handleSlideEnd,\n onHomeKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(min, 0, { commit: true });\n }\n },\n onEndKeyDown: () => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n updateValues(max, values.length - 1, { commit: true });\n }\n },\n onStepKeyDown: ({ event, direction: stepDirection }) => {\n if (!disabled) {\n isKeyboardInteractionRef.current = true;\n const isPageKey = PAGE_KEYS.includes(event.key);\n const isSkipKey = isPageKey || event.shiftKey && ARROW_KEYS.includes(event.key);\n const multiplier = isSkipKey ? 10 : 1;\n const atIndex = valueIndexToChangeRef.current;\n const value2 = values[atIndex];\n const nextValue = getNextStepValue(value2, {\n min,\n step,\n direction: stepDirection,\n multiplier\n });\n updateValues(nextValue, atIndex, { commit: true });\n }\n }\n }\n ) }) })\n }\n );\n }\n);\nSlider.displayName = SLIDER_NAME;\nvar [SliderOrientationProvider, useSliderOrientationContext] = createSliderContext(SLIDER_NAME, {\n startEdge: \"left\",\n endEdge: \"right\",\n size: \"width\",\n direction: 1\n});\nvar SliderHorizontal = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n dir,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const [slider, setSlider] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, setSlider);\n const rectRef = React.useRef(void 0);\n const direction = useDirection(dir);\n const isDirectionLTR = direction === \"ltr\";\n const isSlidingFromLeft = isDirectionLTR && !inverted || !isDirectionLTR && inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || slider.getBoundingClientRect();\n const input = [0, rect.width];\n const output = isSlidingFromLeft ? [min, max] : [max, min];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.left);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromLeft ? \"left\" : \"right\",\n endEdge: isSlidingFromLeft ? \"right\" : \"left\",\n direction: isSlidingFromLeft ? 1 : -1,\n size: \"width\",\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n dir: direction,\n \"data-orientation\": \"horizontal\",\n ...sliderProps,\n ref: composedRefs,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateX(-50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientX);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromLeft ? \"from-left\" : \"from-right\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderVertical = React.forwardRef(\n (props, forwardedRef) => {\n const {\n min,\n max,\n inverted,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const sliderRef = React.useRef(null);\n const ref = useComposedRefs(forwardedRef, sliderRef);\n const rectRef = React.useRef(void 0);\n const isSlidingFromBottom = !inverted;\n function getValueFromPointer(pointerPosition) {\n const rect = rectRef.current || sliderRef.current.getBoundingClientRect();\n const input = [0, rect.height];\n const output = isSlidingFromBottom ? [max, min] : [min, max];\n const value = linearScale(input, output);\n rectRef.current = rect;\n return value(pointerPosition - rect.top);\n }\n return /* @__PURE__ */ jsx(\n SliderOrientationProvider,\n {\n scope: props.__scopeSlider,\n startEdge: isSlidingFromBottom ? \"bottom\" : \"top\",\n endEdge: isSlidingFromBottom ? \"top\" : \"bottom\",\n size: \"height\",\n direction: isSlidingFromBottom ? 1 : -1,\n children: /* @__PURE__ */ jsx(\n SliderImpl,\n {\n \"data-orientation\": \"vertical\",\n ...sliderProps,\n ref,\n style: {\n ...sliderProps.style,\n \"--radix-slider-thumb-transform\": \"translateY(50%)\"\n },\n onSlideStart: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideStart?.(value);\n },\n onSlideMove: (event) => {\n const value = getValueFromPointer(event.clientY);\n onSlideMove?.(value);\n },\n onSlideEnd: () => {\n rectRef.current = void 0;\n onSlideEnd?.();\n },\n onStepKeyDown: (event) => {\n const slideDirection = isSlidingFromBottom ? \"from-bottom\" : \"from-top\";\n const isBackKey = BACK_KEYS[slideDirection].includes(event.key);\n onStepKeyDown?.({ event, direction: isBackKey ? -1 : 1 });\n }\n }\n )\n }\n );\n }\n);\nvar SliderImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSlider,\n onSlideStart,\n onSlideMove,\n onSlideEnd,\n onHomeKeyDown,\n onEndKeyDown,\n onStepKeyDown,\n ...sliderProps\n } = props;\n const context = useSliderContext(SLIDER_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...sliderProps,\n ref: forwardedRef,\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Home\") {\n onHomeKeyDown(event);\n event.preventDefault();\n } else if (event.key === \"End\") {\n onEndKeyDown(event);\n event.preventDefault();\n } else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {\n onStepKeyDown(event);\n event.preventDefault();\n }\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n const target = event.target;\n target.setPointerCapture(event.pointerId);\n event.preventDefault();\n if (context.thumbs.has(target)) {\n target.focus({ preventScroll: true, focusVisible: false });\n } else {\n onSlideStart(event);\n }\n }),\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) onSlideMove(event);\n }),\n onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n onSlideEnd(event);\n }\n })\n }\n );\n }\n);\nvar TRACK_NAME = \"SliderTrack\";\nvar SliderTrack = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...trackProps } = props;\n const context = useSliderContext(TRACK_NAME, __scopeSlider);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-disabled\": context.disabled ? \"\" : void 0,\n \"data-orientation\": context.orientation,\n ...trackProps,\n ref: forwardedRef\n }\n );\n }\n);\nSliderTrack.displayName = TRACK_NAME;\nvar RANGE_NAME = \"SliderRange\";\nvar SliderRange = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...rangeProps } = props;\n const context = useSliderContext(RANGE_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(RANGE_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const valuesCount = context.values.length;\n const percentages = context.values.map(\n (value) => convertValueToPercentage(value, context.min, context.max)\n );\n const offsetStart = valuesCount > 1 ? Math.min(...percentages) : 0;\n const offsetEnd = 100 - Math.max(...percentages);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...rangeProps,\n ref: composedRefs,\n style: {\n ...props.style,\n [orientation.startEdge]: offsetStart + \"%\",\n [orientation.endEdge]: offsetEnd + \"%\"\n }\n }\n );\n }\n);\nSliderRange.displayName = RANGE_NAME;\nvar THUMB_NAME = \"SliderThumb\";\nvar [SliderThumbContextProvider, useSliderThumbContext] = createSliderContext(THUMB_NAME);\nvar THUMB_PROVIDER_NAME = \"SliderThumbProvider\";\nfunction SliderThumbProvider(props) {\n const {\n __scopeSlider,\n name,\n children,\n // @ts-expect-error internal render prop\n internal_do_not_use_render\n } = props;\n const context = useSliderContext(THUMB_PROVIDER_NAME, __scopeSlider);\n const getItems = useCollection(__scopeSlider);\n const [thumb, setThumb] = React.useState(null);\n const index = React.useMemo(\n () => thumb ? getItems().findIndex((item) => item.ref.current === thumb) : -1,\n [getItems, thumb]\n );\n const size = useSize(thumb);\n const isFormControl = thumb ? !!context.form || !!thumb.closest(\"form\") : true;\n const value = context.values[index];\n const resolvedName = name ?? (context.name ? context.name + (context.values.length > 1 ? \"[]\" : \"\") : void 0);\n const percent = value === void 0 ? 0 : convertValueToPercentage(value, context.min, context.max);\n React.useEffect(() => {\n if (thumb) {\n context.thumbs.add(thumb);\n return () => {\n context.thumbs.delete(thumb);\n };\n }\n }, [thumb, context.thumbs]);\n const thumbContext = {\n value,\n name: resolvedName,\n form: context.form,\n isFormControl,\n index,\n thumb,\n onThumbChange: setThumb,\n percent,\n size\n };\n return /* @__PURE__ */ jsx(SliderThumbContextProvider, { scope: __scopeSlider, ...thumbContext, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(thumbContext) : children });\n}\nSliderThumbProvider.displayName = THUMB_PROVIDER_NAME;\nvar THUMB_TRIGGER_NAME = \"SliderThumbTrigger\";\nvar SliderThumbTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, ...thumbProps } = props;\n const context = useSliderContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const orientation = useSliderOrientationContext(THUMB_TRIGGER_NAME, __scopeSlider);\n const { index, value, percent, size, onThumbChange } = useSliderThumbContext(\n THUMB_TRIGGER_NAME,\n __scopeSlider\n );\n const composedRefs = useComposedRefs(forwardedRef, onThumbChange);\n const label = getLabel(index, context.values.length);\n const orientationSize = size?.[orientation.size];\n const thumbInBoundsOffset = orientationSize ? getThumbInBoundsOffset(orientationSize, percent, orientation.direction) : 0;\n return /* @__PURE__ */ jsx(\n \"span\",\n {\n style: {\n transform: \"var(--radix-slider-thumb-transform)\",\n position: \"absolute\",\n [orientation.startEdge]: `calc(${percent}% + ${thumbInBoundsOffset}px)`\n },\n children: /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeSlider, children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n role: \"slider\",\n \"aria-label\": props[\"aria-label\"] || label,\n \"aria-valuemin\": context.min,\n \"aria-valuenow\": value,\n \"aria-valuemax\": context.max,\n \"aria-orientation\": context.orientation,\n \"data-orientation\": context.orientation,\n \"data-disabled\": context.disabled ? \"\" : void 0,\n tabIndex: context.disabled ? void 0 : 0,\n ...thumbProps,\n ref: composedRefs,\n style: value === void 0 ? { display: \"none\" } : props.style,\n onFocus: composeEventHandlers(props.onFocus, () => {\n context.valueIndexToChangeRef.current = index;\n })\n }\n ) })\n }\n );\n }\n);\nSliderThumbTrigger.displayName = THUMB_TRIGGER_NAME;\nvar SliderThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSlider, name, ...thumbProps } = props;\n return /* @__PURE__ */ jsx(\n SliderThumbProvider,\n {\n __scopeSlider,\n name,\n internal_do_not_use_render: ({ index, isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SliderThumbTrigger,\n {\n ...thumbProps,\n ref: forwardedRef,\n __scopeSlider\n }\n ),\n isFormControl ? /* @__PURE__ */ jsx(\n SliderBubbleInput,\n {\n __scopeSlider\n },\n index\n ) : null\n ] })\n }\n );\n }\n);\nSliderThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SliderBubbleInput\";\nvar SliderBubbleInput = React.forwardRef(\n ({ __scopeSlider, ...props }, forwardedRef) => {\n const { value, name, form } = useSliderThumbContext(BUBBLE_INPUT_NAME, __scopeSlider);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(inputProto, \"value\");\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"input\", { bubbles: true });\n setValue.call(input, value);\n input.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n style: { display: \"none\" },\n name,\n form,\n ...props,\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSliderBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getNextSortedValues(prevValues = [], nextValue, atIndex) {\n const nextValues = [...prevValues];\n nextValues[atIndex] = nextValue;\n return nextValues.sort((a, b) => a - b);\n}\nfunction convertValueToPercentage(value, min, max) {\n const maxSteps = max - min;\n const percentPerStep = 100 / maxSteps;\n const percentage = percentPerStep * (value - min);\n return clamp(percentage, [0, 100]);\n}\nfunction getLabel(index, totalValues) {\n if (totalValues > 2) {\n return `Value ${index + 1} of ${totalValues}`;\n } else if (totalValues === 2) {\n return [\"Minimum\", \"Maximum\"][index];\n } else {\n return void 0;\n }\n}\nfunction getClosestValueIndex(values, nextValue) {\n if (values.length === 1) return 0;\n const distances = values.map((value) => Math.abs(value - nextValue));\n const closestDistance = Math.min(...distances);\n return distances.indexOf(closestDistance);\n}\nfunction getThumbInBoundsOffset(width, left, direction) {\n const halfWidth = width / 2;\n const halfPercent = 50;\n const offset = linearScale([0, halfPercent], [0, halfWidth]);\n return (halfWidth - offset(left) * direction) * direction;\n}\nfunction getStepsBetweenValues(values) {\n return values.slice(0, -1).map((value, index) => values[index + 1] - value);\n}\nfunction hasMinStepsBetweenValues(values, minStepsBetweenValues) {\n if (minStepsBetweenValues > 0) {\n const stepsBetweenValues = getStepsBetweenValues(values);\n const actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n return actualMinStepsBetweenValues >= minStepsBetweenValues;\n }\n return true;\n}\nfunction linearScale(input, output) {\n return (value) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0];\n const ratio = (output[1] - output[0]) / (input[1] - input[0]);\n return output[0] + ratio * (value - input[0]);\n };\n}\nfunction getDecimalCount(value) {\n if (!Number.isFinite(value)) return 0;\n const str = value.toString();\n if (str.includes(\"e\")) {\n const [coefficient, exponent] = str.split(\"e\");\n const decimalPart2 = coefficient.split(\".\")[1] || \"\";\n const exponentNum = Number(exponent);\n return Math.max(0, decimalPart2.length - exponentNum);\n }\n const decimalPart = str.split(\".\")[1];\n return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValue(value, decimalCount) {\n const rounder = Math.pow(10, decimalCount);\n return Math.round(value * rounder) / rounder;\n}\nfunction getNextStepValue(value, {\n min,\n step,\n direction,\n multiplier\n}) {\n const decimalCount = getDecimalCount(step);\n const stepsFromMin = (value - min) / step;\n const nearestSteps = Math.round(stepsFromMin);\n const isAligned = roundValue(nearestSteps * step + min, decimalCount) === roundValue(value, decimalCount);\n let nextSteps;\n if (isAligned) {\n nextSteps = nearestSteps + multiplier * direction;\n } else if (direction > 0) {\n nextSteps = Math.ceil(stepsFromMin);\n } else {\n nextSteps = Math.floor(stepsFromMin);\n }\n return roundValue(nextSteps * step + min, decimalCount);\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nexport {\n SliderRange as Range,\n Slider as Root,\n Slider,\n SliderRange,\n SliderThumb,\n SliderTrack,\n SliderThumb as Thumb,\n SliderTrack as Track,\n createSliderScope,\n SliderBubbleInput as unstable_BubbleInput,\n SliderBubbleInput as unstable_SliderBubbleInput,\n SliderThumbProvider as unstable_SliderThumbProvider,\n SliderThumbTrigger as unstable_SliderThumbTrigger,\n SliderThumbProvider as unstable_ThumbProvider,\n SliderThumbTrigger as unstable_ThumbTrigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSlider from '@radix-ui/react-slider';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Slider — single or range numeric input.\n *\n * Built on Radix Slider for keyboard arrow + home/end handling.\n */\nexport type SliderProps = ComponentPropsWithoutRef<typeof RxSlider.Root>;\n\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(function Slider(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSlider.Root\n ref={ref}\n className={cx('v8-slider', className)}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n userSelect: 'none',\n touchAction: 'none',\n width: '100%',\n height: 20,\n }}\n {...rest}\n >\n <RxSlider.Track\n style={{\n background: 'var(--surface-2)',\n position: 'relative',\n flexGrow: 1,\n borderRadius: 'var(--radius-pill)',\n height: 4,\n }}\n >\n <RxSlider.Range\n style={{\n position: 'absolute',\n background: 'var(--accent)',\n borderRadius: 'var(--radius-pill)',\n height: '100%',\n }}\n />\n </RxSlider.Track>\n {(Array.isArray(props.value ?? props.defaultValue)\n ? (props.value ?? props.defaultValue ?? [])\n : [props.value ?? props.defaultValue ?? 0]\n ).map((_, i) => (\n <RxSlider.Thumb\n key={i}\n aria-label={props['aria-label'] ?? `Thumb ${i + 1}`}\n style={{\n display: 'block',\n width: 14,\n height: 14,\n background: 'var(--fg)',\n border: '2px solid var(--accent)',\n borderRadius: 'var(--radius-pill)',\n cursor: 'grab',\n boxShadow: 'var(--shadow-1)',\n }}\n />\n ))}\n </RxSlider.Root>\n );\n});"],"names":["PAGE_KEYS","ARROW_KEYS","BACK_KEYS","SLIDER_NAME","Collection","useCollection","createCollectionScope","createCollection","createSliderContext","createContextScope","SliderProvider","useSliderContext","Slider","React.forwardRef","props","forwardedRef","name","min","max","step","orientation","disabled","minStepsBetweenThumbs","defaultValue","value","onValueChange","onValueCommit","inverted","form","sliderProps","thumbRefs","React.useRef","valueIndexToChangeRef","isKeyboardInteractionRef","SliderOrientation","SliderHorizontal","SliderVertical","control","setControl","React.useState","composedRefs","useComposedRefs","values","setValues","useControllableState","value2","_a","valuesBeforeSlideStartRef","initialValuesRef","React.useEffect","associatedForm","reset","handleSlideStart","closestIndex","getClosestValueIndex","updateValues","handleSlideMove","handleSlideEnd","prevValue","atIndex","commit","decimalCount","getDecimalCount","snapToStep","roundValue","nextValue","clamp","prevValues","nextValues","getNextSortedValues","hasMinStepsBetweenValues","hasChanged","jsx","composeEventHandlers","event","stepDirection","multiplier","getNextStepValue","SliderOrientationProvider","useSliderOrientationContext","dir","onSlideStart","onSlideMove","onSlideEnd","onStepKeyDown","slider","setSlider","rectRef","direction","useDirection","isDirectionLTR","isSlidingFromLeft","getValueFromPointer","pointerPosition","rect","input","linearScale","SliderImpl","isBackKey","sliderRef","ref","isSlidingFromBottom","__scopeSlider","onHomeKeyDown","onEndKeyDown","context","Primitive","target","TRACK_NAME","SliderTrack","trackProps","RANGE_NAME","SliderRange","rangeProps","valuesCount","percentages","convertValueToPercentage","offsetStart","offsetEnd","THUMB_NAME","SliderThumbContextProvider","useSliderThumbContext","THUMB_PROVIDER_NAME","SliderThumbProvider","children","internal_do_not_use_render","getItems","thumb","setThumb","index","React.useMemo","item","size","useSize","isFormControl","resolvedName","percent","thumbContext","isFunction","THUMB_TRIGGER_NAME","SliderThumbTrigger","thumbProps","onThumbChange","label","getLabel","orientationSize","thumbInBoundsOffset","getThumbInBoundsOffset","SliderThumb","jsxs","Fragment","SliderBubbleInput","BUBBLE_INPUT_NAME","usePrevious","inputProto","setValue","a","b","percentage","totalValues","distances","closestDistance","width","left","halfWidth","offset","getStepsBetweenValues","minStepsBetweenValues","stepsBetweenValues","output","ratio","str","coefficient","exponent","decimalPart2","exponentNum","decimalPart","rounder","stepsFromMin","nearestSteps","isAligned","nextSteps","forwardRef","className","rest","RxSlider.Root","cx","RxSlider.Track","RxSlider.Range","_","i","RxSlider.Thumb"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as S,j as a}from"./cmdk-C3F6LD6N.js";import{g as j}from"./main-
|
|
1
|
+
import{r as S,j as a}from"./cmdk-C3F6LD6N.js";import{g as j}from"./main-BURAlktW.js";const W=S.forwardRef(function(v,d){var f,g;const{data:s,width:o=120,height:e=32,stroke:h="var(--accent)",fill:y,area:p=!0,goal:x,className:m,style:k,...$}=v;if(s.length<2)return a.jsx("svg",{ref:d,width:o,height:e,viewBox:`0 0 ${o} ${e}`,className:j("v8-sparkline",m),style:k,"aria-hidden":"true",...$});const n=Math.min(...s),l=Math.max(...s)-n||1,t=2,F=(o-t*2)/(s.length-1),r=s.map((i,c)=>{const M=t+F*c,N=t+(e-t*2)*(1-(i-n)/l);return{x:M,y:N}}),u=r.map((i,c)=>`${c===0?"M":"L"}${i.x.toFixed(1)},${i.y.toFixed(1)}`).join(" "),L=p?`${u} L${((f=r[r.length-1])==null?void 0:f.x.toFixed(1))??"0"},${(e-t).toFixed(1)} L${((g=r[0])==null?void 0:g.x.toFixed(1))??"0"},${(e-t).toFixed(1)} Z`:"",w=y??`color-mix(in oklch, ${h} 14%, transparent)`;return a.jsxs("svg",{ref:d,width:o,height:e,viewBox:`0 0 ${o} ${e}`,className:j("v8-sparkline",m),style:k,"aria-hidden":"true",...$,children:[p===!0&&a.jsx("path",{d:L,fill:w,stroke:"none"}),a.jsx("path",{d:u,fill:"none",stroke:h,strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}),x!==void 0&&a.jsx("line",{x1:t,x2:o-t,y1:t+(e-t*2)*(1-(x-n)/l),y2:t+(e-t*2)*(1-(x-n)/l),stroke:"var(--fg-subtle)",strokeWidth:1,strokeDasharray:"2 2"})]})});export{W as S};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sparkline-
|
|
1
|
+
{"version":3,"file":"Sparkline-cvkv2HbU.js","sources":["../../src/web/v8/ui/data/Sparkline.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Sparkline — tiny inline line chart.\n *\n * Pure SVG so it composes inside StatTile, Table cells, Card headers\n * without bringing in a chart library dependency.\n */\nexport interface SparklineProps extends Omit<HTMLAttributes<SVGSVGElement>, 'children'> {\n data: readonly number[];\n width?: number;\n height?: number;\n /** Stroke color (defaults to --accent). */\n stroke?: string;\n /** Optional fill color (defaults to a 14% mix of stroke). */\n fill?: string;\n /** Show the area under the line. */\n area?: boolean;\n /** Goal/expected value rendered as a dashed horizontal line. */\n goal?: number;\n}\n\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(props, ref) {\n const {\n data,\n width = 120,\n height = 32,\n stroke = 'var(--accent)',\n fill,\n area = true,\n goal,\n className,\n style,\n ...rest\n } = props;\n\n if (data.length < 2) {\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cx('v8-sparkline', className)}\n style={style}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const pad = 2;\n const stepX = (width - pad * 2) / (data.length - 1);\n\n const points = data.map((v, i) => {\n const x = pad + stepX * i;\n const y = pad + (height - pad * 2) * (1 - (v - min) / range);\n return { x, y };\n });\n\n const linePath = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(' ');\n const areaPath = area\n ? `${linePath} L${points[points.length - 1]?.x.toFixed(1) ?? '0'},${(height - pad).toFixed(1)} L${points[0]?.x.toFixed(1) ?? '0'},${(height - pad).toFixed(1)} Z`\n : '';\n\n const fillColor = fill ?? `color-mix(in oklch, ${stroke} 14%, transparent)`;\n\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cx('v8-sparkline', className)}\n style={style}\n aria-hidden=\"true\"\n {...rest}\n >\n {area === true && <path d={areaPath} fill={fillColor} stroke=\"none\" />}\n <path d={linePath} fill=\"none\" stroke={stroke} strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n {goal !== undefined && (\n <line\n x1={pad}\n x2={width - pad}\n y1={pad + (height - pad * 2) * (1 - (goal - min) / range)}\n y2={pad + (height - pad * 2) * (1 - (goal - min) / range)}\n stroke=\"var(--fg-subtle)\"\n strokeWidth={1}\n strokeDasharray=\"2 2\"\n />\n )}\n </svg>\n );\n});"],"names":["Sparkline","forwardRef","props","ref","data","width","height","stroke","fill","area","goal","className","style","rest","jsx","cx","min","range","pad","stepX","points","v","i","x","y","linePath","p","areaPath","_a","_b","fillColor","jsxs"],"mappings":"qFAuBO,MAAMA,EAAYC,EAAAA,WAA0C,SAAmBC,EAAOC,EAAK,SAChG,KAAM,CACJ,KAAAC,EACA,MAAAC,EAAQ,IACR,OAAAC,EAAS,GACT,OAAAC,EAAS,gBACT,KAAAC,EACA,KAAAC,EAAO,GACP,KAAAC,EACA,UAAAC,EACA,MAAAC,EACA,GAAGC,CAAA,EACDX,EAEJ,GAAIE,EAAK,OAAS,EAChB,OACEU,EAAAA,IAAC,MAAA,CACC,IAAAX,EACA,MAAAE,EACA,OAAAC,EACA,QAAS,OAAOD,CAAK,IAAIC,CAAM,GAC/B,UAAWS,EAAG,eAAgBJ,CAAS,EACvC,MAAAC,EACA,cAAY,OACX,GAAGC,CAAA,CAAA,EAKV,MAAMG,EAAM,KAAK,IAAI,GAAGZ,CAAI,EAEtBa,EADM,KAAK,IAAI,GAAGb,CAAI,EACRY,GAAO,EACrBE,EAAM,EACNC,GAASd,EAAQa,EAAM,IAAMd,EAAK,OAAS,GAE3CgB,EAAShB,EAAK,IAAI,CAACiB,EAAGC,IAAM,CAChC,MAAMC,EAAIL,EAAMC,EAAQG,EAClBE,EAAIN,GAAOZ,EAASY,EAAM,IAAM,GAAKG,EAAIL,GAAOC,GACtD,MAAO,CAAE,EAAAM,EAAG,EAAAC,CAAA,CACd,CAAC,EAEKC,EAAWL,EAAO,IAAI,CAACM,EAAGJ,IAAM,GAAGA,IAAM,EAAI,IAAM,GAAG,GAAGI,EAAE,EAAE,QAAQ,CAAC,CAAC,IAAIA,EAAE,EAAE,QAAQ,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,EACrGC,EAAWlB,EACb,GAAGgB,CAAQ,OAAKG,EAAAR,EAAOA,EAAO,OAAS,CAAC,IAAxB,YAAAQ,EAA2B,EAAE,QAAQ,KAAM,GAAG,KAAKtB,EAASY,GAAK,QAAQ,CAAC,CAAC,OAAKW,EAAAT,EAAO,CAAC,IAAR,YAAAS,EAAW,EAAE,QAAQ,KAAM,GAAG,KAAKvB,EAASY,GAAK,QAAQ,CAAC,CAAC,KAC3J,GAEEY,EAAYtB,GAAQ,uBAAuBD,CAAM,qBAEvD,OACEwB,EAAAA,KAAC,MAAA,CACC,IAAA5B,EACA,MAAAE,EACA,OAAAC,EACA,QAAS,OAAOD,CAAK,IAAIC,CAAM,GAC/B,UAAWS,EAAG,eAAgBJ,CAAS,EACvC,MAAAC,EACA,cAAY,OACX,GAAGC,EAEH,SAAA,CAAAJ,IAAS,UAAS,OAAA,CAAK,EAAGkB,EAAU,KAAMG,EAAW,OAAO,MAAA,CAAO,EACpEhB,EAAAA,IAAC,OAAA,CAAK,EAAGW,EAAU,KAAK,OAAO,OAAAlB,EAAgB,YAAa,IAAK,cAAc,QAAQ,eAAe,OAAA,CAAQ,EAC7GG,IAAS,QACRI,EAAAA,IAAC,OAAA,CACC,GAAII,EACJ,GAAIb,EAAQa,EACZ,GAAIA,GAAOZ,EAASY,EAAM,IAAM,GAAKR,EAAOM,GAAOC,GACnD,GAAIC,GAAOZ,EAASY,EAAM,IAAM,GAAKR,EAAOM,GAAOC,GACnD,OAAO,mBACP,YAAa,EACb,gBAAgB,KAAA,CAAA,CAClB,CAAA,CAAA,CAIR,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as n,j as a,P as R,m as L,b as y,i as A,c as U}from"./cmdk-C3F6LD6N.js";import{u as X}from"./index-B1OIS316.js";import{m as z,g as D}from"./main-
|
|
1
|
+
import{r as n,j as a,P as R,m as L,b as y,i as A,c as U}from"./cmdk-C3F6LD6N.js";import{u as X}from"./index-B1OIS316.js";import{m as z,g as D}from"./main-BURAlktW.js";var C="Switch",[G]=U(C),[O,E]=G(C);function W(t){const{__scopeSwitch:s,checked:r,children:c,defaultChecked:e,disabled:o,form:h,name:f,onCheckedChange:l,required:m,value:b="on",internal_do_not_use_render:i}=t,[p,w]=L({prop:r,defaultProp:e??!1,onChange:l,caller:C}),[v,k]=n.useState(null),[S,d]=n.useState(null),u=n.useRef(!1),g=v?!!h||!!v.closest("form"):!0,x={checked:p,setChecked:w,disabled:o,control:v,setControl:k,name:f,form:h,value:b,hasConsumerStoppedPropagationRef:u,required:m,defaultChecked:e,isFormControl:g,bubbleInput:S,setBubbleInput:d};return a.jsx(O,{scope:s,...x,children:$(i)?i(x):c})}var P="SwitchTrigger",j=n.forwardRef(({__scopeSwitch:t,onClick:s,...r},c)=>{const{control:e,form:o,value:h,disabled:f,checked:l,required:m,setControl:b,setChecked:i,hasConsumerStoppedPropagationRef:p,isFormControl:w,bubbleInput:v}=E(P,t),k=y(c,b),S=n.useRef(l);return n.useEffect(()=>{const d=o?e==null?void 0:e.ownerDocument.getElementById(o):e==null?void 0:e.form;if(d instanceof HTMLFormElement){const u=()=>i(S.current);return d.addEventListener("reset",u),()=>d.removeEventListener("reset",u)}},[e,o,i]),a.jsx(R.button,{type:"button",role:"switch","aria-checked":l,"aria-required":m,"data-state":F(l),"data-disabled":f?"":void 0,disabled:f,value:h,...r,ref:k,onClick:A(s,d=>{i(u=>!u),v&&w&&(p.current=d.isPropagationStopped(),p.current||d.stopPropagation())})})});j.displayName=P;var I=n.forwardRef((t,s)=>{const{__scopeSwitch:r,name:c,checked:e,defaultChecked:o,required:h,disabled:f,value:l,onCheckedChange:m,form:b,...i}=t;return a.jsx(W,{__scopeSwitch:r,checked:e,defaultChecked:o,disabled:f,required:h,onCheckedChange:m,name:c,form:b,value:l,internal_do_not_use_render:({isFormControl:p})=>a.jsxs(a.Fragment,{children:[a.jsx(j,{...i,ref:s,__scopeSwitch:r}),p&&a.jsx(M,{__scopeSwitch:r})]})})});I.displayName=C;var N="SwitchThumb",T=n.forwardRef((t,s)=>{const{__scopeSwitch:r,...c}=t,e=E(N,r);return a.jsx(R.span,{"data-state":F(e.checked),"data-disabled":e.disabled?"":void 0,...c,ref:s})});T.displayName=N;var B="SwitchBubbleInput",M=n.forwardRef(({__scopeSwitch:t,...s},r)=>{const{control:c,hasConsumerStoppedPropagationRef:e,checked:o,defaultChecked:h,required:f,disabled:l,name:m,value:b,form:i,bubbleInput:p,setBubbleInput:w}=E(B,t),v=y(r,w),k=X(o),S=z(c);n.useEffect(()=>{const u=p;if(!u)return;const g=window.HTMLInputElement.prototype,_=Object.getOwnPropertyDescriptor(g,"checked").set,q=!e.current;if(k!==o&&_){const H=new Event("click",{bubbles:q});_.call(u,o),u.dispatchEvent(H)}},[p,k,o,e]);const d=n.useRef(o);return a.jsx(R.input,{type:"checkbox","aria-hidden":!0,defaultChecked:h??d.current,required:f,disabled:l,name:m,value:b,form:i,...s,tabIndex:-1,ref:v,style:{...s.style,...S,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});M.displayName=B;function $(t){return typeof t=="function"}function F(t){return t?"checked":"unchecked"}const V=n.forwardRef(function(s,r){const{className:c,...e}=s;return a.jsxs(I,{ref:r,className:D("v8-switch",c),style:{width:32,height:18,background:"var(--surface-2)",borderRadius:"var(--radius-pill)",position:"relative",border:"1px solid var(--border)",cursor:"pointer",transition:"background var(--motion-fast) var(--ease-out)"},...e,children:[a.jsx(T,{style:{display:"block",width:12,height:12,background:"var(--fg)",borderRadius:"var(--radius-pill)",transform:"translateX(2px)",transition:"transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)",willChange:"transform"}}),a.jsx("style",{children:`
|
|
2
2
|
.v8-switch[data-state='checked'] {
|
|
3
3
|
background: var(--accent);
|
|
4
4
|
border-color: var(--accent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch-C-_zcNdl.js","sources":["../../../node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/web/v8/ui/controls/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSwitch from '@radix-ui/react-switch';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Switch — boolean toggle (vs Checkbox which selects).\n *\n * Use for: enable/disable settings, on/off toggles.\n * Built on Radix Switch for a11y.\n */\n\nexport type SwitchProps = ComponentPropsWithoutRef<typeof RxSwitch.Root>;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSwitch.Root\n ref={ref}\n className={cx('v8-switch', className)}\n style={{\n width: 32,\n height: 18,\n background: 'var(--surface-2)',\n borderRadius: 'var(--radius-pill)',\n position: 'relative',\n border: '1px solid var(--border)',\n cursor: 'pointer',\n transition: 'background var(--motion-fast) var(--ease-out)',\n }}\n {...rest}\n >\n <RxSwitch.Thumb\n style={{\n display: 'block',\n width: 12,\n height: 12,\n background: 'var(--fg)',\n borderRadius: 'var(--radius-pill)',\n transform: 'translateX(2px)',\n transition: 'transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)',\n willChange: 'transform',\n }}\n />\n <style>{`\n .v8-switch[data-state='checked'] {\n background: var(--accent);\n border-color: var(--accent);\n }\n .v8-switch[data-state='checked'] > span {\n transform: translateX(16px);\n background: var(--fg-on-accent);\n }\n `}</style>\n </RxSwitch.Root>\n );\n});"],"names":["SWITCH_NAME","createSwitchContext","createContextScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","props","__scopeSwitch","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","value","internal_do_not_use_render","checked","setChecked","useControllableState","control","setControl","React.useState","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","React.useRef","isFormControl","context","jsx","isFunction","TRIGGER_NAME","SwitchTrigger","React.forwardRef","onClick","switchProps","forwardedRef","composedRefs","useComposedRefs","initialCheckedStateRef","React.useEffect","associatedForm","reset","Primitive","getState","composeEventHandlers","event","prevChecked","Switch","jsxs","Fragment","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","usePrevious","controlSize","useSize","input","inputProto","bubbles","defaultCheckedRef","forwardRef","ref","className","rest","RxSwitch.Root","cx","RxSwitch.Thumb"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Switch-jcYo4lmp.js","sources":["../../../node_modules/@radix-ui/react-switch/dist/index.mjs","../../src/web/v8/ui/controls/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProviderImpl, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nfunction SwitchProvider(props) {\n const {\n __scopeSwitch,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n setChecked,\n disabled,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(SwitchProviderImpl, { scope: __scopeSwitch, ...context, children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children });\n}\nvar TRIGGER_NAME = \"SwitchTrigger\";\nvar SwitchTrigger = React.forwardRef(\n ({ __scopeSwitch, onClick, ...switchProps }, forwardedRef) => {\n const {\n control,\n form,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useSwitchContext(TRIGGER_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const associatedForm = form ? control?.ownerDocument.getElementById(form) : control?.form;\n if (associatedForm instanceof HTMLFormElement) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n associatedForm.addEventListener(\"reset\", reset);\n return () => associatedForm.removeEventListener(\"reset\", reset);\n }\n }, [control, form, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nSwitchTrigger.displayName = TRIGGER_NAME;\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n return /* @__PURE__ */ jsx(\n SwitchProvider,\n {\n __scopeSwitch,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n SwitchTrigger,\n {\n ...switchProps,\n ref: forwardedRef,\n __scopeSwitch\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n __scopeSwitch\n }\n )\n ] })\n }\n );\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({ __scopeSwitch, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useSwitchContext(BUBBLE_INPUT_NAME, __scopeSwitch);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Switch as Root,\n Switch,\n SwitchThumb,\n SwitchThumb as Thumb,\n createSwitchScope,\n SwitchBubbleInput as unstable_BubbleInput,\n SwitchProvider as unstable_Provider,\n SwitchBubbleInput as unstable_SwitchBubbleInput,\n SwitchProvider as unstable_SwitchProvider,\n SwitchTrigger as unstable_SwitchTrigger,\n SwitchTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport * as RxSwitch from '@radix-ui/react-switch';\nimport { cx } from '../utils/cx.js';\n\n/**\n * Switch — boolean toggle (vs Checkbox which selects).\n *\n * Use for: enable/disable settings, on/off toggles.\n * Built on Radix Switch for a11y.\n */\n\nexport type SwitchProps = ComponentPropsWithoutRef<typeof RxSwitch.Root>;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(props, ref) {\n const { className, ...rest } = props;\n return (\n <RxSwitch.Root\n ref={ref}\n className={cx('v8-switch', className)}\n style={{\n width: 32,\n height: 18,\n background: 'var(--surface-2)',\n borderRadius: 'var(--radius-pill)',\n position: 'relative',\n border: '1px solid var(--border)',\n cursor: 'pointer',\n transition: 'background var(--motion-fast) var(--ease-out)',\n }}\n {...rest}\n >\n <RxSwitch.Thumb\n style={{\n display: 'block',\n width: 12,\n height: 12,\n background: 'var(--fg)',\n borderRadius: 'var(--radius-pill)',\n transform: 'translateX(2px)',\n transition: 'transform var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out)',\n willChange: 'transform',\n }}\n />\n <style>{`\n .v8-switch[data-state='checked'] {\n background: var(--accent);\n border-color: var(--accent);\n }\n .v8-switch[data-state='checked'] > span {\n transform: translateX(16px);\n background: var(--fg-on-accent);\n }\n `}</style>\n </RxSwitch.Root>\n );\n});"],"names":["SWITCH_NAME","createSwitchContext","createContextScope","SwitchProviderImpl","useSwitchContext","SwitchProvider","props","__scopeSwitch","checkedProp","children","defaultChecked","disabled","form","name","onCheckedChange","required","value","internal_do_not_use_render","checked","setChecked","useControllableState","control","setControl","React.useState","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","React.useRef","isFormControl","context","jsx","isFunction","TRIGGER_NAME","SwitchTrigger","React.forwardRef","onClick","switchProps","forwardedRef","composedRefs","useComposedRefs","initialCheckedStateRef","React.useEffect","associatedForm","reset","Primitive","getState","composeEventHandlers","event","prevChecked","Switch","jsxs","Fragment","SwitchBubbleInput","THUMB_NAME","SwitchThumb","thumbProps","BUBBLE_INPUT_NAME","usePrevious","controlSize","useSize","input","inputProto","bubbles","defaultCheckedRef","forwardRef","ref","className","rest","RxSwitch.Root","cx","RxSwitch.Thumb"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{r,j as e}from"./cmdk-C3F6LD6N.js";import{
|
|
1
|
+
import{r,j as e}from"./cmdk-C3F6LD6N.js";import{d as me,B as A,e as ge,X as re,f as pe,g as fe,S as f,I as U,b as J,h as ee,i as N,u as ve,a as G,F as ke}from"./main-BURAlktW.js";import{V as xe}from"./ViewHeader-C-t1U2cQ.js";import{I as ye,K as be,a as je,u as Se,b as Ce}from"./AgentActivity-Bywt1twv.js";import"./Grid--WKvqu5h.js";import{I as K}from"./Input-h_nSOtwm.js";import{T as te}from"./Textarea-xnAybFGd.js";import"./Switch-jcYo4lmp.js";import{S as ie,a as ne,b as oe,c as le}from"./Select-CiGWEN8I.js";import"./Slider-Z4TP_CXY.js";import"./Alert-BZGk39mB.js";import"./Banner-C8HEcT5l.js";import"./EmptyState-DjKtY1Qi.js";import{S as ce,a as ue}from"./Sheet-B-CMP9-_.js";import"./Card-BtsmkhJa.js";import"./Chip-XPOk0d_E.js";import"./Avatar-BYg0rkPA.js";import"./ActivityFeed-RQeyFifx.js";import"./Sparkline-cvkv2HbU.js";import{T as he}from"./trash-2-D6qePV_q.js";import{F as we}from"./filter-DwPjMRQt.js";import{P as ae}from"./plus-Cm6-fo14.js";import"./ProgressBar-BnaBqv-W.js";import"./SettingsRow-CflGJymA.js";import"./MessageBubble-CrCJ0SYG.js";import"./dnd-kit-BAOLODOI.js";import"./calendar-B9Wbemh7.js";import"./index-B1OIS316.js";import"./index-CR0TeJmc.js";import"./circle-alert-Dz8lGfCZ.js";import"./triangle-alert-B2oHbmoh.js";import"./circle-check-DFB50ojt.js";import"./trending-up-BZzo_1ic.js";/**
|
|
2
2
|
* @license lucide-react v0.460.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
5
5
|
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ie=ge("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);function Te(o){const{totalCount:t,visibleCount:g,selectedCount:w,query:x,onQueryChange:p,filters:m,onFilterToggle:u,onClearFilters:l,onNewTask:v,onBulkMove:d,onBulkArchive:y,onBulkDelete:h,onClearSelection:b,className:I}=o,[P,$]=r.useState(!1),R=w>0;return e.jsx("div",{className:fe("v8-kanban-toolbar",I),style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"var(--space-2)",padding:"var(--space-2) var(--space-3)",background:"var(--surface-0)",border:"1px solid var(--border)",borderRadius:"var(--radius)"},children:R?e.jsxs(e.Fragment,{children:[e.jsxs("span",{style:{fontSize:"var(--fs-13)",fontWeight:600,color:"var(--fg)"},children:[w," selected"]}),e.jsx("span",{style:{flex:1}}),d!==void 0&&e.jsx(A,{size:"sm",variant:"secondary",leftIcon:e.jsx(Ie,{size:14,"aria-hidden":"true"}),onClick:()=>d(new Set),children:"Move…"}),y!==void 0&&e.jsx(A,{size:"sm",variant:"secondary",leftIcon:e.jsx(me,{size:14,"aria-hidden":"true"}),onClick:()=>y(new Set),children:"Archive"}),h!==void 0&&e.jsx(A,{size:"sm",variant:"danger",leftIcon:e.jsx(he,{size:14,"aria-hidden":"true"}),onClick:()=>h(new Set),children:"Delete"}),b!==void 0&&e.jsx(ye,{"aria-label":"Clear selection",onClick:b,size:"sm",children:e.jsx(re,{size:14,"aria-hidden":"true"})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"0 var(--space-2)",height:32,background:"var(--input-bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",minWidth:220,flex:"1 1 220px",maxWidth:360},children:[e.jsx(pe,{size:14,"aria-hidden":"true",style:{color:"var(--fg-muted)",flexShrink:0}}),e.jsx("input",{type:"search",value:x,placeholder:"Filter tasks…",onChange:k=>p(k.target.value),onFocus:()=>$(!0),onBlur:()=>$(!1),"aria-label":"Filter tasks",style:{flex:1,minWidth:0,border:0,outline:0,background:"transparent",color:"var(--fg)",fontSize:"var(--fs-13)",fontFamily:"inherit"}}),x!==""&&e.jsx("button",{type:"button",onClick:()=>p(""),"aria-label":"Clear search",style:{background:"transparent",border:0,padding:2,color:"var(--fg-muted)",cursor:"pointer",display:"inline-flex"},children:e.jsx(re,{size:12,"aria-hidden":"true"})})]}),m.length>0&&e.jsxs("div",{role:"toolbar","aria-label":"Task filters",style:{display:"flex",alignItems:"center",gap:4,flexWrap:"wrap"},children:[e.jsx(we,{size:12,"aria-hidden":"true",style:{color:"var(--fg-muted)",marginRight:2}}),m.map(k=>{const F=k.tone??"neutral",B=k.id.startsWith("active:"),S=B?k.id.slice(7):k.id,C=B;return e.jsxs("button",{type:"button",onClick:()=>u(S),"aria-pressed":C,style:{display:"inline-flex",alignItems:"center",gap:4,height:26,padding:"0 var(--space-2)",borderRadius:"var(--radius-pill)",border:`1px solid var(--${C?"accent":"border"})`,background:C?"color-mix(in oklch, var(--accent) 14%, transparent)":"transparent",color:"var(--fg-muted)",fontSize:"var(--fs-12)",fontWeight:500,cursor:"pointer"},children:[e.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"var(--radius-pill)",background:F==="neutral"?"var(--fg-muted)":`var(--${F})`}}),k.label]},k.id)}),m.some(k=>k.id.startsWith("active:"))&&e.jsx("button",{type:"button",onClick:l,style:{background:"transparent",border:0,color:"var(--fg-muted)",fontSize:"var(--fs-12)",cursor:"pointer",padding:"0 var(--space-2)",height:26},children:"Clear"})]}),e.jsx("span",{style:{flex:1}}),e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",fontVariantNumeric:"tabular-nums"},children:g===t?`${t} task${t===1?"":"s"}`:`${g} of ${t}`}),v!==void 0&&e.jsx(A,{size:"sm",variant:"primary",leftIcon:e.jsx(ae,{size:14,"aria-hidden":"true"}),onClick:v,children:"New task"})]})})}function ze(){const[o,t]=r.useState(()=>new Set),g=r.useCallback(l=>{t(v=>{const d=new Set(v);return d.has(l)?d.delete(l):d.add(l),d})},[]),w=r.useCallback(l=>{l.length!==0&&t(v=>{const d=new Set(v);for(const y of l)d.add(y);return d})},[]),x=r.useCallback(l=>{l.length!==0&&t(v=>{const d=new Set(v);for(const y of l)d.delete(y);return d})},[]),p=r.useCallback(l=>{t(new Set(l))},[]),m=r.useCallback(()=>{t(l=>l.size===0?l:new Set)},[]);r.useEffect(()=>{const l=v=>{if(v.key!=="Escape")return;const d=v.target;if(d){const y=d.tagName;if(y==="INPUT"||y==="TEXTAREA"||d.isContentEditable)return}m()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[m]);const u=r.useCallback(l=>o.has(l),[o]);return r.useMemo(()=>({selected:o,has:u,toggle:g,add:w,remove:x,set:p,clear:m}),[o,u,g,w,x,p,m])}const Fe=[{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"urgent",label:"Urgent"}],De=[{value:"queued",label:"Backlog"},{value:"doing",label:"In progress"},{value:"blocked",label:"In review"},{value:"done",label:"Done"},{value:"archived",label:"Archived"}];function Ae(o){var T,O;const{task:t,open:g,onOpenChange:w,onDeleted:x}=o,[p,m]=r.useState(t.title),[u,l]=r.useState(t.description||""),[v,d]=r.useState(t.priority||"medium"),[y,h]=r.useState(t.status||"queued"),[b,I]=r.useState(t.assignee||""),[P,$]=r.useState(t.due||""),[R,k]=r.useState(t.branch||""),[F,B]=r.useState(""),[S,C]=r.useState(null),[W,M]=r.useState(null),[q,E]=r.useState(null),[H,V]=r.useState(!1);r.useEffect(()=>{g&&(m(t.title),l(t.description||""),d(t.priority||"medium"),h(t.status||"queued"),I(t.assignee||""),$(t.due||""),k(t.branch||""),B(""),M(null),E(null))},[g,t]);const D=async(a,z)=>{C(z),M(null),E(null);try{await N(`/api/tasks/${encodeURIComponent(t.id)}`,{method:"PATCH",body:a}),M(`${z} saved.`)}catch(Y){E(Y instanceof Error?Y.message:String(Y))}finally{C(null)}},X=()=>{p.trim()&&p!==t.title&&D({title:p.trim()},"Title")},Q=()=>{u!==(t.description||"")&&D({description:u},"Description")},_=a=>{d(a),a!==t.priority&&D({priority:a},"Priority")},s=a=>{h(a),a!==t.status&&D({status:a},"Status")},n=()=>{const a=b.trim();a!==(t.assignee||"")&&D({assignee:a},"Assignee")},i=()=>{const a=P.trim();a!==(t.due||"")&&D({due:a},"Due")},c=()=>{const a=R.trim();a!==(t.branch||"")&&D({branch:a},"Branch")},L=async()=>{const a=F.trim();if(a){C("comment"),E(null);try{await N(`/api/tasks/${encodeURIComponent(t.id)}/comments`,{method:"POST",body:{text:a}}),B(""),M("Comment added.")}catch(z){E(z instanceof Error?z.message:String(z))}finally{C(null)}}},j=async()=>{if(!(typeof window<"u"&&typeof window.confirm=="function")||window.confirm(`Delete task "${t.title}"? This is irreversible.`)){V(!0);try{await N(`/api/tasks/${encodeURIComponent(t.id)}`,{method:"DELETE"}),x==null||x(),w(!1)}catch(z){E(z instanceof Error?z.message:String(z)),V(!1)}}};return e.jsx(ce,{open:g,onOpenChange:w,children:e.jsx(ue,{side:"right",title:"Edit task",children:e.jsxs(f,{gap:4,style:{padding:"var(--space-4)"},children:[e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-title",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Title"}),e.jsx(K,{id:"task-title",value:p,onChange:a=>m(a.target.value),onBlur:X,disabled:S!==null})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-status",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Status"}),e.jsxs(ne,{value:y,onValueChange:s,children:[e.jsx(ie,{id:"task-status",size:"sm",placeholder:"Status"}),e.jsx(oe,{children:De.map(a=>e.jsx(le,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs(U,{gap:2,children:[e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-priority",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Priority"}),e.jsxs(ne,{value:v,onValueChange:_,children:[e.jsx(ie,{id:"task-priority",size:"sm",placeholder:"Priority"}),e.jsx(oe,{children:Fe.map(a=>e.jsx(le,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-due",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Due"}),e.jsx(K,{id:"task-due",type:"date",value:P?P.slice(0,10):"",onChange:a=>$(a.target.value),onBlur:i,disabled:S!==null})]})]}),e.jsxs(U,{gap:2,children:[e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-assignee",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Assignee"}),e.jsx(K,{id:"task-assignee",value:b,onChange:a=>I(a.target.value),onBlur:n,placeholder:"agent name (blank = unassigned)",disabled:S!==null})]}),e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-branch",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Branch"}),e.jsx(K,{id:"task-branch",value:R,onChange:a=>k(a.target.value),onBlur:c,placeholder:"feature/foo",disabled:S!==null})]})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-description",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Description"}),e.jsx(te,{id:"task-description",rows:5,value:u,onChange:a=>l(a.target.value),onBlur:Q,disabled:S!==null,placeholder:"What's the work, why, how to verify…"})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-comment",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Add comment"}),e.jsxs(U,{gap:2,align:"start",children:[e.jsx(te,{id:"task-comment",rows:2,value:F,onChange:a=>B(a.target.value),placeholder:"Leave a progress note…",disabled:S!==null,style:{flex:1}}),e.jsxs(A,{variant:"secondary",onClick:()=>{L()},disabled:!F.trim()||S!==null,children:[e.jsx(ae,{size:14,"aria-hidden":!0})," Comment"]})]})]}),e.jsxs(f,{gap:2,children:[e.jsx("div",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Metadata"}),e.jsxs(U,{gap:1,wrap:!0,children:[((T=t.metadata)==null?void 0:T.goalId)!==void 0&&typeof t.metadata.goalId=="string"&&e.jsxs(J,{tone:"info",title:`Linked to goal ${String(t.metadata.goalId)}`,children:["goal: ",String(t.metadata.goalId)]}),((O=t.metadata)==null?void 0:O.krId)!==void 0&&typeof t.metadata.krId=="string"&&e.jsxs(J,{tone:"info",title:`Linked to KR ${String(t.metadata.krId)}`,children:["kr: ",String(t.metadata.krId)]}),t.id&&e.jsxs(J,{tone:"neutral",title:t.id,children:["id: ",t.id]})]})]}),e.jsx("div",{style:{borderTop:"1px solid var(--border)",paddingTop:"var(--space-3)"},children:e.jsxs(A,{variant:"danger",onClick:()=>{j()},disabled:H||S!==null,children:[e.jsx(he,{size:14,"aria-hidden":!0})," ",H?"Deleting…":"Delete task"]})}),W!==null&&e.jsx("div",{role:"status",style:{fontSize:"var(--fs-12)",color:"var(--success)"},children:W}),q!==null&&e.jsx("div",{role:"alert",style:{fontSize:"var(--fs-12)",color:"var(--danger)"},children:q}),S!==null&&e.jsx(ee,{style:{height:12}})]})})})}const Z=[{id:"backlog",title:"Backlog",accentTone:"neutral"},{id:"queued",title:"Queued",accentTone:"info"},{id:"doing",title:"In progress",accentTone:"accent",wipLimit:5},{id:"blocked",title:"In review",accentTone:"warning"},{id:"done",title:"Done",accentTone:"success"},{id:"archived",title:"Archived",accentTone:"neutral"}],Be={low:"low",medium:"medium",high:"high",urgent:"urgent"};function de(o){return{id:o.id,taskId:o.id,columnId:se(o.status),title:o.title,priority:Be[o.priority||"medium"]||"medium",branch:o.branch,due:o.due,comments:o.comments,attachments:o.attachments}}function se(o){switch(o){case"backlog":case"queued":case"doing":case"blocked":case"done":case"archived":return o;default:return"backlog"}}function Ee({card:o}){const t=Se(o.id);return e.jsx(Ce,{card:o,isDragging:t.isDragging,dragHandleProps:{...t.attributes,...t.listeners,ref:t.setNodeRef,style:t.style}})}function ht(){var Q,_;const o=ve("/api/tasks"),[t,g]=r.useState([]),[w,x]=r.useState(null),[p,m]=r.useState(null),u=ze(),[l,v]=r.useState(""),[d,y]=r.useState(new Set),[h,b]=r.useState(null),[I,P]=r.useState(!1),$=async()=>{if(!(h===null||!h.title.trim())){P(!0);try{await N("/api/tasks",{method:"POST",body:{title:h.title.trim(),description:h.description,priority:h.priority,status:"queued"}}),b(null),o.refetch()}catch(s){x((s instanceof ke,s.message))}finally{P(!1)}}},R=r.useCallback(s=>{const n=s;n.type!=="tasks:removed"&&n.type!=="task:removed"||n.id&&(g(i=>i.filter(c=>c.taskId!==n.id)),u.remove([n.id]),p===n.id&&m(null))},[p,u]);G("tasks:removed",R),G("task:removed",R);const k=s=>{u.toggle(s)},F=async s=>{const n=Array.from(u.selected);if(n.length!==0){g(i=>i.map(c=>u.has(c.taskId)?{...c,columnId:s}:c));try{await N("/api/tasks/bulk-status",{method:"PATCH",body:{ids:n,status:s}}),u.clear()}catch(i){x(i instanceof Error?i.message:String(i))}}};r.useEffect(()=>{var s;(s=o.data)!=null&&s.tasks&&g(o.data.tasks.map(de))},[o.data]);const B=r.useCallback(s=>{if(s.type!=="tasks:change")return;const n=s.task;n&&g(i=>{const c=i.findIndex(T=>T.taskId===n.id),L=de({...n,status:se(n.status)});if(c===-1)return[...i,L];const j=i.slice();return j[c]={...j[c],...L},j})},[]);G("tasks:change",B);const S=r.useCallback(async(s,n,i)=>{const c=t.find(j=>j.taskId===s||j.id===s);if(!c)return;const L=se(i);g(j=>j.map(T=>T.taskId===s?{...T,columnId:L}:T));try{await N(`/api/tasks/${encodeURIComponent(c.taskId)}/status`,{method:"PATCH",body:{status:L}})}catch(j){x(j instanceof Error?j.message:String(j)),g(T=>T.map(O=>O.taskId===s?{...O,columnId:c.columnId}:O))}},[t]),C={};for(const s of t)C[s.columnId]=(C[s.columnId]||0)+1;const W=p?((_=(Q=o.data)==null?void 0:Q.tasks)==null?void 0:_.find(s=>s.id===p))??null:null,M=u.selected.size,q=r.useMemo(()=>{const s=l.trim().toLowerCase();return t.filter(n=>{if(d.size>0&&d.has(`status:${n.columnId}`)===!1){const i=n.priority!==void 0&&d.has(`priority:${n.priority}`),c=d.has(`status:${n.columnId}`);if(!i&&!c)return!1}return!(s!==""&&`${n.title} ${n.description??""}`.toLowerCase().includes(s)===!1)})},[t,l,d]),E=[{id:"priority:low",label:"Low",tone:"neutral"},{id:"priority:medium",label:"Medium",tone:"info"},{id:"priority:high",label:"High",tone:"warning"},{id:"priority:urgent",label:"Urgent",tone:"danger"}],H=Z.map(s=>({id:`status:${s.id}`,label:s.title})),V=[...E,...H],D=r.useCallback(s=>{y(n=>{const i=new Set(n);return i.has(s)?i.delete(s):i.add(s),i})},[]),X=r.useCallback(()=>y(new Set),[]);return e.jsxs(f,{gap:4,"data-testid":"tasks-view",children:[e.jsx(xe,{title:"Tasks",description:"Drag cards across columns. Click a card to edit. Use the checkbox to select multiple.",actions:e.jsxs(U,{gap:2,align:"center",children:[w!==null&&e.jsx("span",{role:"alert",style:{color:"var(--danger)",fontSize:"var(--fs-12)"},children:w}),e.jsxs(A,{variant:"primary",onClick:()=>b({title:"",description:"",priority:"medium"}),"data-testid":"task-create-open",children:[e.jsx(ae,{size:14,"aria-hidden":!0})," New task"]})]})}),M>0&&e.jsx(Te,{totalCount:t.length,visibleCount:q.length,selectedCount:M,query:l,onQueryChange:v,filters:V,onFilterToggle:D,onClearFilters:X,onNewTask:()=>b({title:"",description:"",priority:"medium"}),onBulkMove:()=>void F("doing"),onBulkArchive:()=>void F("archived"),onBulkDelete:async()=>{const s=Array.from(u.selected);if(s.length!==0&&window.confirm(`Delete ${s.length} task${s.length===1?"":"s"}? This cannot be undone.`))try{await N("/api/tasks/bulk-status",{method:"PATCH",body:{ids:s,status:"archived"}}),u.clear()}catch(n){x(n instanceof Error?n.message:String(n))}},onClearSelection:()=>u.clear()}),o.loading&&t.length===0?e.jsxs(f,{gap:3,children:[e.jsx(ee,{style:{height:120}}),e.jsx(ee,{style:{height:120}})]}):e.jsx(be,{columns:Z,onCardMove:S,children:Z.map(s=>{const n=q.filter(i=>i.columnId===s.id);return e.jsx(je,{column:{...s,count:C[s.id]||0},children:n.map(i=>e.jsxs("div",{style:{position:"relative"},children:[e.jsx("input",{type:"checkbox",checked:u.has(i.taskId),onChange:()=>k(i.taskId),onClick:c=>c.stopPropagation(),"aria-label":`Select ${i.title}`,style:{position:"absolute",top:8,left:8,zIndex:2}}),e.jsx("div",{onClick:()=>m(i.taskId),role:"button",tabIndex:0,onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),m(i.taskId))},style:{cursor:"pointer"},children:e.jsx(Ee,{card:i})})]},i.id))},s.id)})}),W&&e.jsx(Ae,{task:W,open:p!==null,onOpenChange:s=>{s||m(null)},onDeleted:()=>{g(s=>s.filter(n=>n.taskId!==W.id)),m(null)}}),e.jsx(ce,{open:h!==null,onOpenChange:s=>{s||b(null)},children:e.jsx(ue,{side:"right",title:"New task",children:h!==null&&e.jsxs(f,{gap:4,style:{padding:"var(--space-4)"},children:[e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-create-title",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Title"}),e.jsx(K,{id:"task-create-title",value:h.title,onChange:s=>b({...h,title:s.target.value}),placeholder:"What needs doing?",disabled:I,"data-testid":"task-create-title"})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-create-desc",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Description (optional)"}),e.jsx(te,{id:"task-create-desc",value:h.description,onChange:s=>b({...h,description:s.target.value}),rows:4,disabled:I,"data-testid":"task-create-desc"})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-create-priority",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Priority"}),e.jsxs("select",{id:"task-create-priority",value:h.priority,onChange:s=>b({...h,priority:s.target.value}),disabled:I,"data-testid":"task-create-priority",style:{height:32,padding:"0 var(--space-2)",borderRadius:"var(--radius-sm)",border:"1px solid var(--border)",background:"var(--surface-0)",color:"var(--fg)",fontSize:"var(--fs-13)"},children:[e.jsx("option",{value:"low",children:"Low"}),e.jsx("option",{value:"medium",children:"Medium"}),e.jsx("option",{value:"high",children:"High"}),e.jsx("option",{value:"urgent",children:"Urgent"})]})]}),e.jsxs(U,{gap:2,children:[e.jsx(A,{variant:"primary",onClick:()=>{$()},disabled:I||!h.title.trim(),"data-testid":"task-create-submit",children:"Create task"}),e.jsx(A,{variant:"ghost",onClick:()=>b(null),disabled:I,children:"Cancel"})]})]})})})]})}export{ht as TasksView};
|
|
6
|
+
*/const Ie=me("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);function Te(o){const{totalCount:t,visibleCount:m,selectedCount:w,query:x,onQueryChange:p,filters:g,onFilterToggle:u,onClearFilters:l,onNewTask:v,onBulkMove:d,onBulkArchive:y,onBulkDelete:h,onClearSelection:b,className:I}=o,[P,$]=r.useState(!1),R=w>0;return e.jsx("div",{className:fe("v8-kanban-toolbar",I),style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"var(--space-2)",padding:"var(--space-2) var(--space-3)",background:"var(--surface-0)",border:"1px solid var(--border)",borderRadius:"var(--radius)"},children:R?e.jsxs(e.Fragment,{children:[e.jsxs("span",{style:{fontSize:"var(--fs-13)",fontWeight:600,color:"var(--fg)"},children:[w," selected"]}),e.jsx("span",{style:{flex:1}}),d!==void 0&&e.jsx(A,{size:"sm",variant:"secondary",leftIcon:e.jsx(Ie,{size:14,"aria-hidden":"true"}),onClick:()=>d(new Set),children:"Move…"}),y!==void 0&&e.jsx(A,{size:"sm",variant:"secondary",leftIcon:e.jsx(ge,{size:14,"aria-hidden":"true"}),onClick:()=>y(new Set),children:"Archive"}),h!==void 0&&e.jsx(A,{size:"sm",variant:"danger",leftIcon:e.jsx(he,{size:14,"aria-hidden":"true"}),onClick:()=>h(new Set),children:"Delete"}),b!==void 0&&e.jsx(ye,{"aria-label":"Clear selection",onClick:b,size:"sm",children:e.jsx(re,{size:14,"aria-hidden":"true"})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"0 var(--space-2)",height:32,background:"var(--input-bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-sm)",minWidth:220,flex:"1 1 220px",maxWidth:360},children:[e.jsx(pe,{size:14,"aria-hidden":"true",style:{color:"var(--fg-muted)",flexShrink:0}}),e.jsx("input",{type:"search",value:x,placeholder:"Filter tasks…",onChange:k=>p(k.target.value),onFocus:()=>$(!0),onBlur:()=>$(!1),"aria-label":"Filter tasks",style:{flex:1,minWidth:0,border:0,outline:0,background:"transparent",color:"var(--fg)",fontSize:"var(--fs-13)",fontFamily:"inherit"}}),x!==""&&e.jsx("button",{type:"button",onClick:()=>p(""),"aria-label":"Clear search",style:{background:"transparent",border:0,padding:2,color:"var(--fg-muted)",cursor:"pointer",display:"inline-flex"},children:e.jsx(re,{size:12,"aria-hidden":"true"})})]}),g.length>0&&e.jsxs("div",{role:"toolbar","aria-label":"Task filters",style:{display:"flex",alignItems:"center",gap:4,flexWrap:"wrap"},children:[e.jsx(we,{size:12,"aria-hidden":"true",style:{color:"var(--fg-muted)",marginRight:2}}),g.map(k=>{const F=k.tone??"neutral",B=k.id.startsWith("active:"),S=B?k.id.slice(7):k.id,C=B;return e.jsxs("button",{type:"button",onClick:()=>u(S),"aria-pressed":C,style:{display:"inline-flex",alignItems:"center",gap:4,height:26,padding:"0 var(--space-2)",borderRadius:"var(--radius-pill)",border:`1px solid var(--${C?"accent":"border"})`,background:C?"color-mix(in oklch, var(--accent) 14%, transparent)":"transparent",color:"var(--fg-muted)",fontSize:"var(--fs-12)",fontWeight:500,cursor:"pointer"},children:[e.jsx("span",{"aria-hidden":"true",style:{width:6,height:6,borderRadius:"var(--radius-pill)",background:F==="neutral"?"var(--fg-muted)":`var(--${F})`}}),k.label]},k.id)}),g.some(k=>k.id.startsWith("active:"))&&e.jsx("button",{type:"button",onClick:l,style:{background:"transparent",border:0,color:"var(--fg-muted)",fontSize:"var(--fs-12)",cursor:"pointer",padding:"0 var(--space-2)",height:26},children:"Clear"})]}),e.jsx("span",{style:{flex:1}}),e.jsx("span",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)",fontVariantNumeric:"tabular-nums"},children:m===t?`${t} task${t===1?"":"s"}`:`${m} of ${t}`}),v!==void 0&&e.jsx(A,{size:"sm",variant:"primary",leftIcon:e.jsx(ae,{size:14,"aria-hidden":"true"}),onClick:v,children:"New task"})]})})}function ze(){const[o,t]=r.useState(()=>new Set),m=r.useCallback(l=>{t(v=>{const d=new Set(v);return d.has(l)?d.delete(l):d.add(l),d})},[]),w=r.useCallback(l=>{l.length!==0&&t(v=>{const d=new Set(v);for(const y of l)d.add(y);return d})},[]),x=r.useCallback(l=>{l.length!==0&&t(v=>{const d=new Set(v);for(const y of l)d.delete(y);return d})},[]),p=r.useCallback(l=>{t(new Set(l))},[]),g=r.useCallback(()=>{t(l=>l.size===0?l:new Set)},[]);r.useEffect(()=>{const l=v=>{if(v.key!=="Escape")return;const d=v.target;if(d){const y=d.tagName;if(y==="INPUT"||y==="TEXTAREA"||d.isContentEditable)return}g()};return window.addEventListener("keydown",l),()=>window.removeEventListener("keydown",l)},[g]);const u=r.useCallback(l=>o.has(l),[o]);return r.useMemo(()=>({selected:o,has:u,toggle:m,add:w,remove:x,set:p,clear:g}),[o,u,m,w,x,p,g])}const Fe=[{value:"low",label:"Low"},{value:"medium",label:"Medium"},{value:"high",label:"High"},{value:"urgent",label:"Urgent"}],De=[{value:"queued",label:"Backlog"},{value:"doing",label:"In progress"},{value:"blocked",label:"In review"},{value:"done",label:"Done"},{value:"archived",label:"Archived"}];function Ae(o){var T,O;const{task:t,open:m,onOpenChange:w,onDeleted:x}=o,[p,g]=r.useState(t.title),[u,l]=r.useState(t.description||""),[v,d]=r.useState(t.priority||"medium"),[y,h]=r.useState(t.status||"queued"),[b,I]=r.useState(t.assignee||""),[P,$]=r.useState(t.due||""),[R,k]=r.useState(t.branch||""),[F,B]=r.useState(""),[S,C]=r.useState(null),[W,M]=r.useState(null),[q,E]=r.useState(null),[H,V]=r.useState(!1);r.useEffect(()=>{m&&(g(t.title),l(t.description||""),d(t.priority||"medium"),h(t.status||"queued"),I(t.assignee||""),$(t.due||""),k(t.branch||""),B(""),M(null),E(null))},[m,t]);const D=async(a,z)=>{C(z),M(null),E(null);try{await N(`/api/tasks/${encodeURIComponent(t.id)}`,{method:"PATCH",body:a}),M(`${z} saved.`)}catch(Y){E(Y instanceof Error?Y.message:String(Y))}finally{C(null)}},X=()=>{p.trim()&&p!==t.title&&D({title:p.trim()},"Title")},Q=()=>{u!==(t.description||"")&&D({description:u},"Description")},_=a=>{d(a),a!==t.priority&&D({priority:a},"Priority")},s=a=>{h(a),a!==t.status&&D({status:a},"Status")},i=()=>{const a=b.trim();a!==(t.assignee||"")&&D({assignee:a},"Assignee")},n=()=>{const a=P.trim();a!==(t.due||"")&&D({due:a},"Due")},c=()=>{const a=R.trim();a!==(t.branch||"")&&D({branch:a},"Branch")},L=async()=>{const a=F.trim();if(a){C("comment"),E(null);try{await N(`/api/tasks/${encodeURIComponent(t.id)}/comments`,{method:"POST",body:{text:a}}),B(""),M("Comment added.")}catch(z){E(z instanceof Error?z.message:String(z))}finally{C(null)}}},j=async()=>{if(!(typeof window<"u"&&typeof window.confirm=="function")||window.confirm(`Delete task "${t.title}"? This is irreversible.`)){V(!0);try{await N(`/api/tasks/${encodeURIComponent(t.id)}`,{method:"DELETE"}),x==null||x(),w(!1)}catch(z){E(z instanceof Error?z.message:String(z)),V(!1)}}};return e.jsx(ce,{open:m,onOpenChange:w,children:e.jsx(ue,{side:"right",title:"Edit task",children:e.jsxs(f,{gap:4,style:{padding:"var(--space-4)"},children:[e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-title",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Title"}),e.jsx(K,{id:"task-title",value:p,onChange:a=>g(a.target.value),onBlur:X,disabled:S!==null})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-status",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Status"}),e.jsxs(ie,{value:y,onValueChange:s,children:[e.jsx(ne,{id:"task-status",size:"sm",placeholder:"Status"}),e.jsx(oe,{children:De.map(a=>e.jsx(le,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs(U,{gap:2,children:[e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-priority",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Priority"}),e.jsxs(ie,{value:v,onValueChange:_,children:[e.jsx(ne,{id:"task-priority",size:"sm",placeholder:"Priority"}),e.jsx(oe,{children:Fe.map(a=>e.jsx(le,{value:a.value,children:a.label},a.value))})]})]}),e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-due",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Due"}),e.jsx(K,{id:"task-due",type:"date",value:P?P.slice(0,10):"",onChange:a=>$(a.target.value),onBlur:n,disabled:S!==null})]})]}),e.jsxs(U,{gap:2,children:[e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-assignee",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Assignee"}),e.jsx(K,{id:"task-assignee",value:b,onChange:a=>I(a.target.value),onBlur:i,placeholder:"agent name (blank = unassigned)",disabled:S!==null})]}),e.jsxs(f,{gap:2,style:{flex:1},children:[e.jsx("label",{htmlFor:"task-branch",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Branch"}),e.jsx(K,{id:"task-branch",value:R,onChange:a=>k(a.target.value),onBlur:c,placeholder:"feature/foo",disabled:S!==null})]})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-description",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Description"}),e.jsx(te,{id:"task-description",rows:5,value:u,onChange:a=>l(a.target.value),onBlur:Q,disabled:S!==null,placeholder:"What's the work, why, how to verify…"})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-comment",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Add comment"}),e.jsxs(U,{gap:2,align:"start",children:[e.jsx(te,{id:"task-comment",rows:2,value:F,onChange:a=>B(a.target.value),placeholder:"Leave a progress note…",disabled:S!==null,style:{flex:1}}),e.jsxs(A,{variant:"secondary",onClick:()=>{L()},disabled:!F.trim()||S!==null,children:[e.jsx(ae,{size:14,"aria-hidden":!0})," Comment"]})]})]}),e.jsxs(f,{gap:2,children:[e.jsx("div",{style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Metadata"}),e.jsxs(U,{gap:1,wrap:!0,children:[((T=t.metadata)==null?void 0:T.goalId)!==void 0&&typeof t.metadata.goalId=="string"&&e.jsxs(J,{tone:"info",title:`Linked to goal ${String(t.metadata.goalId)}`,children:["goal: ",String(t.metadata.goalId)]}),((O=t.metadata)==null?void 0:O.krId)!==void 0&&typeof t.metadata.krId=="string"&&e.jsxs(J,{tone:"info",title:`Linked to KR ${String(t.metadata.krId)}`,children:["kr: ",String(t.metadata.krId)]}),t.id&&e.jsxs(J,{tone:"neutral",title:t.id,children:["id: ",t.id]})]})]}),e.jsx("div",{style:{borderTop:"1px solid var(--border)",paddingTop:"var(--space-3)"},children:e.jsxs(A,{variant:"danger",onClick:()=>{j()},disabled:H||S!==null,children:[e.jsx(he,{size:14,"aria-hidden":!0})," ",H?"Deleting…":"Delete task"]})}),W!==null&&e.jsx("div",{role:"status",style:{fontSize:"var(--fs-12)",color:"var(--success)"},children:W}),q!==null&&e.jsx("div",{role:"alert",style:{fontSize:"var(--fs-12)",color:"var(--danger)"},children:q}),S!==null&&e.jsx(ee,{style:{height:12}})]})})})}const Z=[{id:"backlog",title:"Backlog",accentTone:"neutral"},{id:"queued",title:"Queued",accentTone:"info"},{id:"doing",title:"In progress",accentTone:"accent",wipLimit:5},{id:"blocked",title:"In review",accentTone:"warning"},{id:"done",title:"Done",accentTone:"success"},{id:"archived",title:"Archived",accentTone:"neutral"}],Be={low:"low",medium:"medium",high:"high",urgent:"urgent"};function de(o){return{id:o.id,taskId:o.id,columnId:se(o.status),title:o.title,priority:Be[o.priority||"medium"]||"medium",branch:o.branch,due:o.due,comments:o.comments,attachments:o.attachments}}function se(o){switch(o){case"backlog":case"queued":case"doing":case"blocked":case"done":case"archived":return o;default:return"backlog"}}function Ee({card:o}){const t=Se(o.id);return e.jsx(Ce,{card:o,isDragging:t.isDragging,dragHandleProps:{...t.attributes,...t.listeners,ref:t.setNodeRef,style:t.style}})}function mt(){var Q,_;const o=ve("/api/tasks"),[t,m]=r.useState([]),[w,x]=r.useState(null),[p,g]=r.useState(null),u=ze(),[l,v]=r.useState(""),[d,y]=r.useState(new Set),[h,b]=r.useState(null),[I,P]=r.useState(!1),$=async()=>{if(!(h===null||!h.title.trim())){P(!0);try{await N("/api/tasks",{method:"POST",body:{title:h.title.trim(),description:h.description,priority:h.priority,status:"queued"}}),b(null),o.refetch()}catch(s){x((s instanceof ke,s.message))}finally{P(!1)}}},R=r.useCallback(s=>{const i=s;i.type!=="tasks:removed"&&i.type!=="task:removed"||i.id&&(m(n=>n.filter(c=>c.taskId!==i.id)),u.remove([i.id]),p===i.id&&g(null))},[p,u]);G("tasks:removed",R),G("task:removed",R);const k=s=>{u.toggle(s)},F=async s=>{const i=Array.from(u.selected);if(i.length!==0){m(n=>n.map(c=>u.has(c.taskId)?{...c,columnId:s}:c));try{await N("/api/tasks/bulk-status",{method:"PATCH",body:{ids:i,status:s}}),u.clear()}catch(n){x(n instanceof Error?n.message:String(n))}}};r.useEffect(()=>{var s;(s=o.data)!=null&&s.tasks&&m(o.data.tasks.map(de))},[o.data]);const B=r.useCallback(s=>{if(s.type!=="tasks:change")return;const i=s.task;i&&m(n=>{const c=n.findIndex(T=>T.taskId===i.id),L=de({...i,status:se(i.status)});if(c===-1)return[...n,L];const j=n.slice();return j[c]={...j[c],...L},j})},[]);G("tasks:change",B);const S=r.useCallback(async(s,i,n)=>{const c=t.find(j=>j.taskId===s||j.id===s);if(!c)return;const L=se(n);m(j=>j.map(T=>T.taskId===s?{...T,columnId:L}:T));try{await N(`/api/tasks/${encodeURIComponent(c.taskId)}/status`,{method:"PATCH",body:{status:L}})}catch(j){x(j instanceof Error?j.message:String(j)),m(T=>T.map(O=>O.taskId===s?{...O,columnId:c.columnId}:O))}},[t]),C={};for(const s of t)C[s.columnId]=(C[s.columnId]||0)+1;const W=p?((_=(Q=o.data)==null?void 0:Q.tasks)==null?void 0:_.find(s=>s.id===p))??null:null,M=u.selected.size,q=r.useMemo(()=>{const s=l.trim().toLowerCase();return t.filter(i=>{if(d.size>0&&d.has(`status:${i.columnId}`)===!1){const n=i.priority!==void 0&&d.has(`priority:${i.priority}`),c=d.has(`status:${i.columnId}`);if(!n&&!c)return!1}return!(s!==""&&`${i.title} ${i.description??""}`.toLowerCase().includes(s)===!1)})},[t,l,d]),E=[{id:"priority:low",label:"Low",tone:"neutral"},{id:"priority:medium",label:"Medium",tone:"info"},{id:"priority:high",label:"High",tone:"warning"},{id:"priority:urgent",label:"Urgent",tone:"danger"}],H=Z.map(s=>({id:`status:${s.id}`,label:s.title})),V=[...E,...H],D=r.useCallback(s=>{y(i=>{const n=new Set(i);return n.has(s)?n.delete(s):n.add(s),n})},[]),X=r.useCallback(()=>y(new Set),[]);return e.jsxs(f,{gap:4,"data-testid":"tasks-view",children:[e.jsx(xe,{title:"Tasks",description:"Drag cards across columns. Click a card to edit. Use the checkbox to select multiple.",actions:e.jsxs(U,{gap:2,align:"center",children:[w!==null&&e.jsx("span",{role:"alert",style:{color:"var(--danger)",fontSize:"var(--fs-12)"},children:w}),e.jsxs(A,{variant:"primary",onClick:()=>b({title:"",description:"",priority:"medium"}),"data-testid":"task-create-open",children:[e.jsx(ae,{size:14,"aria-hidden":!0})," New task"]})]})}),M>0&&e.jsx(Te,{totalCount:t.length,visibleCount:q.length,selectedCount:M,query:l,onQueryChange:v,filters:V,onFilterToggle:D,onClearFilters:X,onNewTask:()=>b({title:"",description:"",priority:"medium"}),onBulkMove:()=>void F("doing"),onBulkArchive:()=>void F("archived"),onBulkDelete:async()=>{const s=Array.from(u.selected);if(s.length!==0&&window.confirm(`Delete ${s.length} task${s.length===1?"":"s"}? This cannot be undone.`))try{await N("/api/tasks/bulk-status",{method:"PATCH",body:{ids:s,status:"archived"}}),u.clear()}catch(i){x(i instanceof Error?i.message:String(i))}},onClearSelection:()=>u.clear()}),o.loading&&t.length===0?e.jsxs(f,{gap:3,children:[e.jsx(ee,{style:{height:120}}),e.jsx(ee,{style:{height:120}})]}):e.jsx(be,{columns:Z,onCardMove:S,children:Z.map(s=>{const i=q.filter(n=>n.columnId===s.id);return e.jsx(je,{column:{...s,count:C[s.id]||0},children:i.map(n=>e.jsxs("div",{style:{position:"relative"},children:[e.jsx("input",{type:"checkbox",checked:u.has(n.taskId),onChange:()=>k(n.taskId),onClick:c=>c.stopPropagation(),"aria-label":`Select ${n.title}`,style:{position:"absolute",top:8,left:8,zIndex:2}}),e.jsx("div",{onClick:()=>g(n.taskId),role:"button",tabIndex:0,onKeyDown:c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),g(n.taskId))},style:{cursor:"pointer"},children:e.jsx(Ee,{card:n})})]},n.id))},s.id)})}),W&&e.jsx(Ae,{task:W,open:p!==null,onOpenChange:s=>{s||g(null)},onDeleted:()=>{m(s=>s.filter(i=>i.taskId!==W.id)),g(null)}}),e.jsx(ce,{open:h!==null,onOpenChange:s=>{s||b(null)},children:e.jsx(ue,{side:"right",title:"New task",children:h!==null&&e.jsxs(f,{gap:4,style:{padding:"var(--space-4)"},children:[e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-create-title",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Title"}),e.jsx(K,{id:"task-create-title",value:h.title,onChange:s=>b({...h,title:s.target.value}),placeholder:"What needs doing?",disabled:I,"data-testid":"task-create-title"})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-create-desc",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Description (optional)"}),e.jsx(te,{id:"task-create-desc",value:h.description,onChange:s=>b({...h,description:s.target.value}),rows:4,disabled:I,"data-testid":"task-create-desc"})]}),e.jsxs(f,{gap:2,children:[e.jsx("label",{htmlFor:"task-create-priority",style:{fontSize:"var(--fs-12)",color:"var(--fg-muted)"},children:"Priority"}),e.jsxs("select",{id:"task-create-priority",value:h.priority,onChange:s=>b({...h,priority:s.target.value}),disabled:I,"data-testid":"task-create-priority",style:{height:32,padding:"0 var(--space-2)",borderRadius:"var(--radius-sm)",border:"1px solid var(--border)",background:"var(--surface-0)",color:"var(--fg)",fontSize:"var(--fs-13)"},children:[e.jsx("option",{value:"low",children:"Low"}),e.jsx("option",{value:"medium",children:"Medium"}),e.jsx("option",{value:"high",children:"High"}),e.jsx("option",{value:"urgent",children:"Urgent"})]})]}),e.jsxs(U,{gap:2,children:[e.jsx(A,{variant:"primary",onClick:()=>{$()},disabled:I||!h.title.trim(),"data-testid":"task-create-submit",children:"Create task"}),e.jsx(A,{variant:"ghost",onClick:()=>b(null),disabled:I,children:"Cancel"})]})]})})})]})}export{mt as TasksView};
|