@shivaedev/work-board 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +11 -11
- package/assets/agent.js +27 -31
- package/assets/native.js +34 -69
- package/assets/react.css +1 -1
- package/assets/react.js +39 -34
- package/dist/browser/diagnostics/schema.d.ts +49 -0
- package/dist/browser/diagnostics/schema.d.ts.map +1 -0
- package/dist/browser/diagnostics/schema.js +11 -0
- package/dist/browser/diagnostics/schema.js.map +1 -0
- package/dist/browser/views/ResultProjection.d.ts +245 -0
- package/dist/browser/views/ResultProjection.d.ts.map +1 -0
- package/dist/browser/views/ResultProjection.js +32 -0
- package/dist/browser/views/ResultProjection.js.map +1 -0
- package/dist/browser/views/remaining.d.ts +345 -0
- package/dist/browser/views/remaining.d.ts.map +1 -0
- package/dist/browser/views/remaining.js +21 -0
- package/dist/browser/views/remaining.js.map +1 -0
- package/dist/browser/views/schema.d.ts +715 -0
- package/dist/browser/views/schema.d.ts.map +1 -0
- package/dist/browser/views/schema.js +60 -0
- package/dist/browser/views/schema.js.map +1 -0
- package/dist/browser/views/state.d.ts +15 -0
- package/dist/browser/views/state.d.ts.map +1 -0
- package/dist/browser/views/state.js +45 -0
- package/dist/browser/views/state.js.map +1 -0
- package/dist/client/client.d.ts +5 -5
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +4 -4
- package/dist/client/client.js.map +1 -1
- package/dist/client/document/Mermaid.d.ts.map +1 -1
- package/dist/client/document/Mermaid.js +39 -10
- package/dist/client/document/Mermaid.js.map +1 -1
- package/dist/client/document/View.d.ts +5 -1
- package/dist/client/document/View.d.ts.map +1 -1
- package/dist/client/document/View.js +13 -1
- package/dist/client/document/View.js.map +1 -1
- package/dist/client/document/boardLayout.d.ts +6 -0
- package/dist/client/document/boardLayout.d.ts.map +1 -0
- package/dist/client/document/boardLayout.js +69 -0
- package/dist/client/document/boardLayout.js.map +1 -0
- package/dist/client/entry.d.ts +0 -12
- package/dist/client/entry.d.ts.map +1 -1
- package/dist/client/entry.js +0 -18
- package/dist/client/entry.js.map +1 -1
- package/dist/client/formDraft.d.ts +3 -0
- package/dist/client/formDraft.d.ts.map +1 -0
- package/dist/client/formDraft.js +8 -0
- package/dist/client/formDraft.js.map +1 -0
- package/dist/client/formFocus.d.ts.map +1 -1
- package/dist/client/formFocus.js +5 -0
- package/dist/client/formFocus.js.map +1 -1
- package/dist/client/handoffs/failureStatus.d.ts +2 -0
- package/dist/client/handoffs/failureStatus.d.ts.map +1 -0
- package/dist/client/handoffs/failureStatus.js +7 -0
- package/dist/client/handoffs/failureStatus.js.map +1 -0
- package/dist/client/page/routeQuery.d.ts +2 -7
- package/dist/client/page/routeQuery.d.ts.map +1 -1
- package/dist/client/page/routeQuery.js +0 -3
- package/dist/client/page/routeQuery.js.map +1 -1
- package/dist/client/react/Age.d.ts +9 -0
- package/dist/client/react/Age.d.ts.map +1 -0
- package/dist/client/react/Age.js +32 -0
- package/dist/client/react/Age.js.map +1 -0
- package/dist/client/react/AnswerForm.d.ts +5 -3
- package/dist/client/react/AnswerForm.d.ts.map +1 -1
- package/dist/client/react/AnswerForm.js +21 -11
- package/dist/client/react/AnswerForm.js.map +1 -1
- package/dist/client/react/AnswerPrompts.d.ts +10 -2
- package/dist/client/react/AnswerPrompts.d.ts.map +1 -1
- package/dist/client/react/AnswerPrompts.js +28 -12
- package/dist/client/react/AnswerPrompts.js.map +1 -1
- package/dist/client/react/BoardMain.d.ts +10 -0
- package/dist/client/react/BoardMain.d.ts.map +1 -0
- package/dist/client/react/BoardMain.js +19 -0
- package/dist/client/react/BoardMain.js.map +1 -0
- package/dist/client/react/BoardShell.d.ts +6 -1
- package/dist/client/react/BoardShell.d.ts.map +1 -1
- package/dist/client/react/BoardShell.js +34 -12
- package/dist/client/react/BoardShell.js.map +1 -1
- package/dist/client/react/ChangesMain.d.ts +8 -0
- package/dist/client/react/ChangesMain.d.ts.map +1 -0
- package/dist/client/react/ChangesMain.js +24 -0
- package/dist/client/react/ChangesMain.js.map +1 -0
- package/dist/client/react/DiagnosticsFleet.d.ts +6 -0
- package/dist/client/react/DiagnosticsFleet.d.ts.map +1 -0
- package/dist/client/react/DiagnosticsFleet.js +16 -0
- package/dist/client/react/DiagnosticsFleet.js.map +1 -0
- package/dist/client/react/DiagnosticsMain.d.ts +8 -0
- package/dist/client/react/DiagnosticsMain.d.ts.map +1 -0
- package/dist/client/react/DiagnosticsMain.js +11 -0
- package/dist/client/react/DiagnosticsMain.js.map +1 -0
- package/dist/client/react/DiagnosticsPage.d.ts +5 -0
- package/dist/client/react/DiagnosticsPage.d.ts.map +1 -0
- package/dist/client/react/DiagnosticsPage.js +23 -0
- package/dist/client/react/DiagnosticsPage.js.map +1 -0
- package/dist/client/react/DocumentContext.d.ts.map +1 -1
- package/dist/client/react/DocumentContext.js +23 -3
- package/dist/client/react/DocumentContext.js.map +1 -1
- package/dist/client/react/DocumentMain.d.ts +2 -3
- package/dist/client/react/DocumentMain.d.ts.map +1 -1
- package/dist/client/react/DocumentMain.js +8 -4
- package/dist/client/react/DocumentMain.js.map +1 -1
- package/dist/client/react/Favorite.d.ts +5 -0
- package/dist/client/react/Favorite.d.ts.map +1 -0
- package/dist/client/react/Favorite.js +10 -0
- package/dist/client/react/Favorite.js.map +1 -0
- package/dist/client/react/FormField.d.ts +13 -0
- package/dist/client/react/FormField.d.ts.map +1 -0
- package/dist/client/react/FormField.js +39 -0
- package/dist/client/react/FormField.js.map +1 -0
- package/dist/client/react/HandoffForm.d.ts +5 -0
- package/dist/client/react/HandoffForm.d.ts.map +1 -0
- package/dist/client/react/HandoffForm.js +27 -0
- package/dist/client/react/HandoffForm.js.map +1 -0
- package/dist/client/react/HandoffPage.d.ts +5 -0
- package/dist/client/react/HandoffPage.d.ts.map +1 -0
- package/dist/client/react/HandoffPage.js +15 -0
- package/dist/client/react/HandoffPage.js.map +1 -0
- package/dist/client/react/HandoffPrompt.d.ts +6 -0
- package/dist/client/react/HandoffPrompt.d.ts.map +1 -0
- package/dist/client/react/HandoffPrompt.js +21 -0
- package/dist/client/react/HandoffPrompt.js.map +1 -0
- package/dist/client/react/Header.d.ts +11 -2
- package/dist/client/react/Header.d.ts.map +1 -1
- package/dist/client/react/Header.js +2 -2
- package/dist/client/react/Header.js.map +1 -1
- package/dist/client/react/HistoryComparison.d.ts +5 -0
- package/dist/client/react/HistoryComparison.d.ts.map +1 -0
- package/dist/client/react/HistoryComparison.js +14 -0
- package/dist/client/react/HistoryComparison.js.map +1 -0
- package/dist/client/react/HistoryRetention.d.ts +5 -0
- package/dist/client/react/HistoryRetention.d.ts.map +1 -0
- package/dist/client/react/HistoryRetention.js +28 -0
- package/dist/client/react/HistoryRetention.js.map +1 -0
- package/dist/client/react/HomeBoard.d.ts +5 -0
- package/dist/client/react/HomeBoard.d.ts.map +1 -0
- package/dist/client/react/HomeBoard.js +8 -0
- package/dist/client/react/HomeBoard.js.map +1 -0
- package/dist/client/react/InboxPage.d.ts +5 -0
- package/dist/client/react/InboxPage.d.ts.map +1 -0
- package/dist/client/react/InboxPage.js +18 -0
- package/dist/client/react/InboxPage.js.map +1 -0
- package/dist/client/react/LiveControls.d.ts +8 -0
- package/dist/client/react/LiveControls.d.ts.map +1 -0
- package/dist/client/react/LiveControls.js +51 -0
- package/dist/client/react/LiveControls.js.map +1 -0
- package/dist/client/react/Modal.d.ts +12 -0
- package/dist/client/react/Modal.d.ts.map +1 -0
- package/dist/client/react/Modal.js +62 -0
- package/dist/client/react/Modal.js.map +1 -0
- package/dist/client/react/NavigationTree.d.ts.map +1 -1
- package/dist/client/react/NavigationTree.js +2 -1
- package/dist/client/react/NavigationTree.js.map +1 -1
- package/dist/client/react/OverviewGroups.d.ts +5 -0
- package/dist/client/react/OverviewGroups.d.ts.map +1 -0
- package/dist/client/react/OverviewGroups.js +18 -0
- package/dist/client/react/OverviewGroups.js.map +1 -0
- package/dist/client/react/OverviewPage.d.ts +5 -0
- package/dist/client/react/OverviewPage.d.ts.map +1 -0
- package/dist/client/react/OverviewPage.js +16 -0
- package/dist/client/react/OverviewPage.js.map +1 -0
- package/dist/client/react/ProjectionFrame.d.ts +19 -0
- package/dist/client/react/ProjectionFrame.d.ts.map +1 -0
- package/dist/client/react/ProjectionFrame.js +85 -0
- package/dist/client/react/ProjectionFrame.js.map +1 -0
- package/dist/client/react/ProjectionMain.d.ts +10 -0
- package/dist/client/react/ProjectionMain.d.ts.map +1 -0
- package/dist/client/react/ProjectionMain.js +22 -0
- package/dist/client/react/ProjectionMain.js.map +1 -0
- package/dist/client/react/PromptOption.d.ts +12 -0
- package/dist/client/react/PromptOption.d.ts.map +1 -0
- package/dist/client/react/PromptOption.js +9 -0
- package/dist/client/react/PromptOption.js.map +1 -0
- package/dist/client/react/ReadingLibrary.d.ts +9 -0
- package/dist/client/react/ReadingLibrary.d.ts.map +1 -0
- package/dist/client/react/ReadingLibrary.js +78 -0
- package/dist/client/react/ReadingLibrary.js.map +1 -0
- package/dist/client/react/RemainingMain.d.ts +10 -0
- package/dist/client/react/RemainingMain.d.ts.map +1 -0
- package/dist/client/react/RemainingMain.js +27 -0
- package/dist/client/react/RemainingMain.js.map +1 -0
- package/dist/client/react/RespondPage.d.ts +5 -0
- package/dist/client/react/RespondPage.d.ts.map +1 -0
- package/dist/client/react/RespondPage.js +16 -0
- package/dist/client/react/RespondPage.js.map +1 -0
- package/dist/client/react/ResponseMarkdown.d.ts.map +1 -1
- package/dist/client/react/ResponseMarkdown.js +16 -2
- package/dist/client/react/ResponseMarkdown.js.map +1 -1
- package/dist/client/react/ResultCriteria.d.ts +5 -0
- package/dist/client/react/ResultCriteria.d.ts.map +1 -0
- package/dist/client/react/ResultCriteria.js +33 -0
- package/dist/client/react/ResultCriteria.js.map +1 -0
- package/dist/client/react/ResultFeedback.d.ts +5 -0
- package/dist/client/react/ResultFeedback.d.ts.map +1 -0
- package/dist/client/react/ResultFeedback.js +12 -0
- package/dist/client/react/ResultFeedback.js.map +1 -0
- package/dist/client/react/ResultPage.d.ts +5 -0
- package/dist/client/react/ResultPage.d.ts.map +1 -0
- package/dist/client/react/ResultPage.js +15 -0
- package/dist/client/react/ResultPage.js.map +1 -0
- package/dist/client/react/SavedViews.d.ts +4 -0
- package/dist/client/react/SavedViews.d.ts.map +1 -0
- package/dist/client/react/SavedViews.js +16 -0
- package/dist/client/react/SavedViews.js.map +1 -0
- package/dist/client/react/SearchDialog.d.ts +11 -0
- package/dist/client/react/SearchDialog.d.ts.map +1 -0
- package/dist/client/react/SearchDialog.js +67 -0
- package/dist/client/react/SearchDialog.js.map +1 -0
- package/dist/client/react/SearchResults.d.ts +7 -0
- package/dist/client/react/SearchResults.d.ts.map +1 -0
- package/dist/client/react/SearchResults.js +19 -0
- package/dist/client/react/SearchResults.js.map +1 -0
- package/dist/client/react/ShellApi.d.ts +11 -1
- package/dist/client/react/ShellApi.d.ts.map +1 -1
- package/dist/client/react/Sidebar.d.ts +5 -2
- package/dist/client/react/Sidebar.d.ts.map +1 -1
- package/dist/client/react/Sidebar.js +37 -2
- package/dist/client/react/Sidebar.js.map +1 -1
- package/dist/client/react/StartPage.d.ts +5 -0
- package/dist/client/react/StartPage.d.ts.map +1 -0
- package/dist/client/react/StartPage.js +5 -0
- package/dist/client/react/StartPage.js.map +1 -0
- package/dist/client/react/UpdatesToggle.d.ts +5 -0
- package/dist/client/react/UpdatesToggle.d.ts.map +1 -0
- package/dist/client/react/UpdatesToggle.js +9 -0
- package/dist/client/react/UpdatesToggle.js.map +1 -0
- package/dist/client/react/VisualControls.d.ts +17 -0
- package/dist/client/react/VisualControls.d.ts.map +1 -0
- package/dist/client/react/VisualControls.js +6 -0
- package/dist/client/react/VisualControls.js.map +1 -0
- package/dist/client/react/VisualInspection.d.ts +2 -0
- package/dist/client/react/VisualInspection.d.ts.map +1 -0
- package/dist/client/react/VisualInspection.js +26 -0
- package/dist/client/react/VisualInspection.js.map +1 -0
- package/dist/client/react/VisualViewer.d.ts +6 -0
- package/dist/client/react/VisualViewer.d.ts.map +1 -0
- package/dist/client/react/VisualViewer.js +106 -0
- package/dist/client/react/VisualViewer.js.map +1 -0
- package/dist/client/react/WorkCards.d.ts +5 -0
- package/dist/client/react/WorkCards.d.ts.map +1 -0
- package/dist/client/react/WorkCards.js +13 -0
- package/dist/client/react/WorkCards.js.map +1 -0
- package/dist/client/react/WorkControls.d.ts +5 -0
- package/dist/client/react/WorkControls.d.ts.map +1 -0
- package/dist/client/react/WorkControls.js +18 -0
- package/dist/client/react/WorkControls.js.map +1 -0
- package/dist/client/react/WorkDetail.d.ts +5 -0
- package/dist/client/react/WorkDetail.d.ts.map +1 -0
- package/dist/client/react/WorkDetail.js +12 -0
- package/dist/client/react/WorkDetail.js.map +1 -0
- package/dist/client/react/WorkItemTitle.d.ts +7 -0
- package/dist/client/react/WorkItemTitle.d.ts.map +1 -0
- package/dist/client/react/WorkItemTitle.js +6 -0
- package/dist/client/react/WorkItemTitle.js.map +1 -0
- package/dist/client/react/WorkPage.d.ts +5 -0
- package/dist/client/react/WorkPage.d.ts.map +1 -0
- package/dist/client/react/WorkPage.js +17 -0
- package/dist/client/react/WorkPage.js.map +1 -0
- package/dist/client/react/WorkResults.d.ts +5 -0
- package/dist/client/react/WorkResults.d.ts.map +1 -0
- package/dist/client/react/WorkResults.js +10 -0
- package/dist/client/react/WorkResults.js.map +1 -0
- package/dist/client/react/WorkTable.d.ts +5 -0
- package/dist/client/react/WorkTable.d.ts.map +1 -0
- package/dist/client/react/WorkTable.js +10 -0
- package/dist/client/react/WorkTable.js.map +1 -0
- package/dist/client/react/WorkTools.d.ts +5 -0
- package/dist/client/react/WorkTools.d.ts.map +1 -0
- package/dist/client/react/WorkTools.js +7 -0
- package/dist/client/react/WorkTools.js.map +1 -0
- package/dist/client/react/activeRead.d.ts +7 -0
- package/dist/client/react/activeRead.d.ts.map +1 -0
- package/dist/client/react/activeRead.js +13 -0
- package/dist/client/react/activeRead.js.map +1 -0
- package/dist/client/react/createResponse.d.ts +26 -0
- package/dist/client/react/createResponse.d.ts.map +1 -0
- package/dist/client/react/createResponse.js +29 -0
- package/dist/client/react/createResponse.js.map +1 -0
- package/dist/client/react/diagnosticsValues.d.ts +13 -0
- package/dist/client/react/diagnosticsValues.d.ts.map +1 -0
- package/dist/client/react/diagnosticsValues.js +49 -0
- package/dist/client/react/diagnosticsValues.js.map +1 -0
- package/dist/client/react/entry.js +6 -18
- package/dist/client/react/entry.js.map +1 -1
- package/dist/client/react/historyStore.d.ts +7 -0
- package/dist/client/react/historyStore.d.ts.map +1 -0
- package/dist/client/react/historyStore.js +61 -0
- package/dist/client/react/historyStore.js.map +1 -0
- package/dist/client/react/liveStatus.d.ts +16 -0
- package/dist/client/react/liveStatus.d.ts.map +1 -0
- package/dist/client/react/liveStatus.js +43 -0
- package/dist/client/react/liveStatus.js.map +1 -0
- package/dist/client/react/loadBoardPage.d.ts +1 -1
- package/dist/client/react/loadBoardPage.d.ts.map +1 -1
- package/dist/client/react/loadBoardPage.js +14 -4
- package/dist/client/react/loadBoardPage.js.map +1 -1
- package/dist/client/react/loadProjection.d.ts +674 -0
- package/dist/client/react/loadProjection.d.ts.map +1 -0
- package/dist/client/react/loadProjection.js +15 -0
- package/dist/client/react/loadProjection.js.map +1 -0
- package/dist/client/react/loadRemaining.d.ts +577 -0
- package/dist/client/react/loadRemaining.d.ts.map +1 -0
- package/dist/client/react/loadRemaining.js +19 -0
- package/dist/client/react/loadRemaining.js.map +1 -0
- package/dist/client/react/mainLocation.d.ts +6 -0
- package/dist/client/react/mainLocation.d.ts.map +1 -0
- package/dist/client/react/mainLocation.js +9 -0
- package/dist/client/react/mainLocation.js.map +1 -0
- package/dist/client/react/navigationLocation.d.ts +33 -0
- package/dist/client/react/navigationLocation.d.ts.map +1 -0
- package/dist/client/react/navigationLocation.js +22 -0
- package/dist/client/react/navigationLocation.js.map +1 -0
- package/dist/client/react/pageQuery.d.ts +5 -0
- package/dist/client/react/pageQuery.d.ts.map +1 -0
- package/dist/client/react/pageQuery.js +35 -0
- package/dist/client/react/pageQuery.js.map +1 -0
- package/dist/client/react/projectionChanges.d.ts +6 -0
- package/dist/client/react/projectionChanges.d.ts.map +1 -0
- package/dist/client/react/projectionChanges.js +16 -0
- package/dist/client/react/projectionChanges.js.map +1 -0
- package/dist/client/react/projectionRoute.d.ts +4 -0
- package/dist/client/react/projectionRoute.d.ts.map +1 -0
- package/dist/client/react/projectionRoute.js +18 -0
- package/dist/client/react/projectionRoute.js.map +1 -0
- package/dist/client/react/readerLink.d.ts +2 -0
- package/dist/client/react/readerLink.d.ts.map +1 -0
- package/dist/client/react/readerLink.js +8 -0
- package/dist/client/react/readerLink.js.map +1 -0
- package/dist/client/react/readingHistory.d.ts +38 -0
- package/dist/client/react/readingHistory.d.ts.map +1 -0
- package/dist/client/react/readingHistory.js +33 -0
- package/dist/client/react/readingHistory.js.map +1 -0
- package/dist/client/react/readingLibrary.d.ts +24 -0
- package/dist/client/react/readingLibrary.d.ts.map +1 -0
- package/dist/client/react/readingLibrary.js +18 -0
- package/dist/client/react/readingLibrary.js.map +1 -0
- package/dist/client/react/readingState.d.ts +20 -0
- package/dist/client/react/readingState.d.ts.map +1 -0
- package/dist/client/react/readingState.js +133 -0
- package/dist/client/react/readingState.js.map +1 -0
- package/dist/client/react/remainingRoute.d.ts +3 -0
- package/dist/client/react/remainingRoute.d.ts.map +1 -0
- package/dist/client/react/remainingRoute.js +19 -0
- package/dist/client/react/remainingRoute.js.map +1 -0
- package/dist/client/react/savedViews.d.ts +14 -0
- package/dist/client/react/savedViews.d.ts.map +1 -0
- package/dist/client/react/savedViews.js +87 -0
- package/dist/client/react/savedViews.js.map +1 -0
- package/dist/client/react/scheduleReading.d.ts +3 -0
- package/dist/client/react/scheduleReading.d.ts.map +1 -0
- package/dist/client/react/scheduleReading.js +36 -0
- package/dist/client/react/scheduleReading.js.map +1 -0
- package/dist/client/react/searchCommands.d.ts +11 -0
- package/dist/client/react/searchCommands.d.ts.map +1 -0
- package/dist/client/react/searchCommands.js +7 -0
- package/dist/client/react/searchCommands.js.map +1 -0
- package/dist/client/react/searchStatus.d.ts +6 -0
- package/dist/client/react/searchStatus.d.ts.map +1 -0
- package/dist/client/react/searchStatus.js +20 -0
- package/dist/client/react/searchStatus.js.map +1 -0
- package/dist/client/react/shellIds.d.ts +59 -0
- package/dist/client/react/shellIds.d.ts.map +1 -1
- package/dist/client/react/shellIds.js +59 -0
- package/dist/client/react/shellIds.js.map +1 -1
- package/dist/client/react/useAppearance.d.ts +14 -0
- package/dist/client/react/useAppearance.d.ts.map +1 -0
- package/dist/client/react/useAppearance.js +55 -0
- package/dist/client/react/useAppearance.js.map +1 -0
- package/dist/client/react/useBoardNavigation.d.ts +3 -0
- package/dist/client/react/useBoardNavigation.d.ts.map +1 -0
- package/dist/client/react/useBoardNavigation.js +129 -0
- package/dist/client/react/useBoardNavigation.js.map +1 -0
- package/dist/client/react/useDiagnosticsPolling.d.ts +3 -0
- package/dist/client/react/useDiagnosticsPolling.d.ts.map +1 -0
- package/dist/client/react/useDiagnosticsPolling.js +23 -0
- package/dist/client/react/useDiagnosticsPolling.js.map +1 -0
- package/dist/client/react/useDocumentPage.d.ts +1 -1
- package/dist/client/react/useDocumentPage.d.ts.map +1 -1
- package/dist/client/react/useFormFocus.d.ts +5 -0
- package/dist/client/react/useFormFocus.d.ts.map +1 -0
- package/dist/client/react/useFormFocus.js +46 -0
- package/dist/client/react/useFormFocus.js.map +1 -0
- package/dist/client/react/useHandoffForm.d.ts +69 -0
- package/dist/client/react/useHandoffForm.d.ts.map +1 -0
- package/dist/client/react/useHandoffForm.js +102 -0
- package/dist/client/react/useHandoffForm.js.map +1 -0
- package/dist/client/react/useHistoryComparison.d.ts +33 -0
- package/dist/client/react/useHistoryComparison.d.ts.map +1 -0
- package/dist/client/react/useHistoryComparison.js +146 -0
- package/dist/client/react/useHistoryComparison.js.map +1 -0
- package/dist/client/react/useMedia.d.ts +2 -0
- package/dist/client/react/useMedia.d.ts.map +1 -0
- package/dist/client/react/useMedia.js +19 -0
- package/dist/client/react/useMedia.js.map +1 -0
- package/dist/client/react/useResponseForm.d.ts +107 -0
- package/dist/client/react/useResponseForm.d.ts.map +1 -0
- package/dist/client/react/useResponseForm.js +138 -0
- package/dist/client/react/useResponseForm.js.map +1 -0
- package/dist/client/react/useSearchDialog.d.ts +7 -0
- package/dist/client/react/useSearchDialog.d.ts.map +1 -0
- package/dist/client/react/useSearchDialog.js +26 -0
- package/dist/client/react/useSearchDialog.js.map +1 -0
- package/dist/client/react/useSidebar.d.ts +9 -0
- package/dist/client/react/useSidebar.d.ts.map +1 -0
- package/dist/client/react/useSidebar.js +77 -0
- package/dist/client/react/useSidebar.js.map +1 -0
- package/dist/client/react/visualDimensions.d.ts +3 -0
- package/dist/client/react/visualDimensions.d.ts.map +1 -0
- package/dist/client/react/visualDimensions.js +21 -0
- package/dist/client/react/visualDimensions.js.map +1 -0
- package/dist/client/react/visualSources.d.ts +13 -0
- package/dist/client/react/visualSources.d.ts.map +1 -0
- package/dist/client/react/visualSources.js +92 -0
- package/dist/client/react/visualSources.js.map +1 -0
- package/dist/client/reconcile/normalized.d.ts +3 -0
- package/dist/client/reconcile/normalized.d.ts.map +1 -0
- package/dist/client/reconcile/{signature.js → normalized.js} +1 -37
- package/dist/client/reconcile/normalized.js.map +1 -0
- package/dist/client/responses/answerRecovery.d.ts +14 -0
- package/dist/client/responses/answerRecovery.d.ts.map +1 -0
- package/dist/client/responses/answerRecovery.js +33 -0
- package/dist/client/responses/answerRecovery.js.map +1 -0
- package/dist/client/responses/authorLabel.d.ts +1 -1
- package/dist/client/responses/authorLabel.d.ts.map +1 -1
- package/dist/client/responses/authorLabel.js +2 -2
- package/dist/client/responses/authorLabel.js.map +1 -1
- package/dist/client/responses/failure.d.ts +5 -0
- package/dist/client/responses/failure.d.ts.map +1 -0
- package/dist/client/responses/failure.js +13 -0
- package/dist/client/responses/failure.js.map +1 -0
- package/dist/client/responses/formSchema.d.ts +9 -0
- package/dist/client/responses/formSchema.d.ts.map +1 -1
- package/dist/client/responses/formSchema.js +3 -0
- package/dist/client/responses/formSchema.js.map +1 -1
- package/dist/client/responses/preview.d.ts +2 -2
- package/dist/client/responses/preview.d.ts.map +1 -1
- package/dist/client/responses/preview.js.map +1 -1
- package/dist/client/responses/retainContext.d.ts +6 -0
- package/dist/client/responses/retainContext.d.ts.map +1 -0
- package/dist/client/responses/retainContext.js +12 -0
- package/dist/client/responses/retainContext.js.map +1 -0
- package/dist/client/responses/summary.d.ts +6 -0
- package/dist/client/responses/summary.d.ts.map +1 -0
- package/dist/client/responses/summary.js +21 -0
- package/dist/client/responses/summary.js.map +1 -0
- package/dist/client/sourceChanged.d.ts +2 -0
- package/dist/client/sourceChanged.d.ts.map +1 -0
- package/dist/client/sourceChanged.js +4 -0
- package/dist/client/sourceChanged.js.map +1 -0
- package/dist/diagnostics/daemonContract.d.ts +1 -1
- package/dist/diagnostics/daemonContract.js +1 -1
- package/dist/diagnostics/daemonContract.js.map +1 -1
- package/dist/diagnostics/source.d.ts +14 -24
- package/dist/diagnostics/source.d.ts.map +1 -1
- package/dist/diagnostics/source.js +2 -9
- package/dist/diagnostics/source.js.map +1 -1
- package/dist/history/schema.d.ts +33 -0
- package/dist/history/schema.d.ts.map +1 -1
- package/dist/history/schema.js +12 -0
- package/dist/history/schema.js.map +1 -1
- package/dist/rpc/contract.d.ts +4235 -298
- package/dist/rpc/contract.d.ts.map +1 -1
- package/dist/rpc/contract.js +57 -3
- package/dist/rpc/contract.js.map +1 -1
- package/dist/rpc/handoffContract.d.ts +3 -3
- package/dist/rpc/responseContract.d.ts +5 -5
- package/dist/server/board.d.ts +4 -4
- package/dist/server/board.d.ts.map +1 -1
- package/dist/server/board.js +18 -95
- package/dist/server/board.js.map +1 -1
- package/dist/server/boardRuntime.d.ts +12 -0
- package/dist/server/boardRuntime.d.ts.map +1 -0
- package/dist/server/boardRuntime.js +37 -0
- package/dist/server/boardRuntime.js.map +1 -0
- package/dist/server/diagnostics/daemon.js +3 -3
- package/dist/server/diagnostics/daemon.js.map +1 -1
- package/dist/server/history/html.d.ts +0 -1
- package/dist/server/history/html.d.ts.map +1 -1
- package/dist/server/history/html.js +0 -3
- package/dist/server/history/html.js.map +1 -1
- package/dist/server/history/response.d.ts.map +1 -1
- package/dist/server/history/response.js +14 -1
- package/dist/server/history/response.js.map +1 -1
- package/dist/server/http/assets.d.ts +4 -4
- package/dist/server/http/assets.d.ts.map +1 -1
- package/dist/server/http/assets.js +1 -35
- package/dist/server/http/assets.js.map +1 -1
- package/dist/server/http/attachment.d.ts +2 -2
- package/dist/server/http/attachment.d.ts.map +1 -1
- package/dist/server/http/boardRoutes.d.ts +6 -0
- package/dist/server/http/boardRoutes.d.ts.map +1 -0
- package/dist/server/http/boardRoutes.js +45 -0
- package/dist/server/http/boardRoutes.js.map +1 -0
- package/dist/server/http/identity.d.ts +2 -2
- package/dist/server/http/identity.d.ts.map +1 -1
- package/dist/server/http/inbox.d.ts +1 -1
- package/dist/server/http/inbox.d.ts.map +1 -1
- package/dist/server/http/overview.d.ts +1 -1
- package/dist/server/http/overview.d.ts.map +1 -1
- package/dist/server/http/page.d.ts +2 -2
- package/dist/server/http/page.d.ts.map +1 -1
- package/dist/server/http/page.js +1 -2
- package/dist/server/http/page.js.map +1 -1
- package/dist/server/http/respond.d.ts +1 -1
- package/dist/server/http/respond.d.ts.map +1 -1
- package/dist/server/http/respond.js +1 -1
- package/dist/server/http/respond.js.map +1 -1
- package/dist/server/http/rpcPolicy.d.ts +4 -0
- package/dist/server/http/rpcPolicy.d.ts.map +1 -0
- package/dist/server/http/rpcPolicy.js +11 -0
- package/dist/server/http/rpcPolicy.js.map +1 -0
- package/dist/server/http/work.d.ts +2 -2
- package/dist/server/http/work.d.ts.map +1 -1
- package/dist/server/integration/diagnostics.d.ts +1 -1
- package/dist/server/responses/agent.d.ts +1 -1
- package/dist/server/responses/agent.d.ts.map +1 -1
- package/dist/server/responses/agent.js +2 -2
- package/dist/server/responses/agent.js.map +1 -1
- package/dist/server/responses/composerHtml.js +1 -1
- package/dist/server/responses/composerHtml.js.map +1 -1
- package/dist/server/responses/waitFor.d.ts +1 -1
- package/dist/server/responses/waitFor.d.ts.map +1 -1
- package/dist/server/rpc/HandlerOptions.d.ts +12 -0
- package/dist/server/rpc/HandlerOptions.d.ts.map +1 -0
- package/dist/server/rpc/HandlerOptions.js +2 -0
- package/dist/server/rpc/HandlerOptions.js.map +1 -0
- package/dist/server/rpc/handlers.d.ts +2 -2
- package/dist/server/rpc/handlers.d.ts.map +1 -1
- package/dist/server/rpc/handlers.js +17 -10
- package/dist/server/rpc/handlers.js.map +1 -1
- package/dist/server/serve-cli.js +8 -8
- package/dist/server/serve-cli.js.map +1 -1
- package/dist/server/serve.d.ts +2 -3
- package/dist/server/serve.d.ts.map +1 -1
- package/dist/server/serve.js +20 -9
- package/dist/server/serve.js.map +1 -1
- package/dist/server/views/projectionQueries.d.ts +681 -0
- package/dist/server/views/projectionQueries.d.ts.map +1 -0
- package/dist/server/views/projectionQueries.js +70 -0
- package/dist/server/views/projectionQueries.js.map +1 -0
- package/dist/server/views/remainingQueries.d.ts +679 -0
- package/dist/server/views/remainingQueries.d.ts.map +1 -0
- package/dist/server/views/remainingQueries.js +58 -0
- package/dist/server/views/remainingQueries.js.map +1 -0
- package/dist/server/views/resultProjection.d.ts +420 -0
- package/dist/server/views/resultProjection.d.ts.map +1 -0
- package/dist/server/views/resultProjection.js +35 -0
- package/dist/server/views/resultProjection.js.map +1 -0
- package/dist/server/views/resultTargets.d.ts +6 -0
- package/dist/server/views/resultTargets.d.ts.map +1 -0
- package/dist/server/views/resultTargets.js +31 -0
- package/dist/server/views/resultTargets.js.map +1 -0
- package/dist/server/views/state.d.ts +8 -9
- package/dist/server/views/state.d.ts.map +1 -1
- package/dist/server/views/state.js +5 -38
- package/dist/server/views/state.js.map +1 -1
- package/dist/server/views/workStyle.d.ts.map +1 -1
- package/dist/server/views/workStyle.js +1 -0
- package/dist/server/views/workStyle.js.map +1 -1
- package/docs/delivery/decision-write-examples.md +1 -1
- package/docs/delivery/handoff-examples.md +1 -1
- package/docs/delivery/response-write-examples.md +1 -1
- package/docs/delivery/result-review-examples.md +1 -1
- package/docs/roadmap.md +7 -7
- package/package.json +52 -139
- package/src/browser/diagnostics/schema.ts +18 -0
- package/src/browser/views/ResultProjection.ts +37 -0
- package/src/browser/views/remaining.ts +26 -0
- package/src/browser/views/schema.ts +68 -0
- package/src/browser/views/state.ts +47 -0
- package/src/client/client.ts +8 -8
- package/src/client/document/Mermaid.ts +49 -9
- package/src/client/document/View.ts +14 -1
- package/src/client/document/boardLayout.ts +80 -0
- package/src/client/entry.ts +0 -24
- package/src/client/formDraft.ts +9 -0
- package/src/client/formFocus.ts +5 -0
- package/src/client/handoffs/failureStatus.ts +6 -0
- package/src/client/page/routeQuery.ts +0 -5
- package/src/client/react/Age.tsx +35 -0
- package/src/client/react/AnswerForm.tsx +88 -82
- package/src/client/react/AnswerPrompts.tsx +67 -54
- package/src/client/react/BoardMain.tsx +30 -0
- package/src/client/react/BoardShell.tsx +89 -27
- package/src/client/react/ChangesMain.tsx +68 -0
- package/src/client/react/DiagnosticsFleet.tsx +64 -0
- package/src/client/react/DiagnosticsMain.tsx +29 -0
- package/src/client/react/DiagnosticsPage.tsx +77 -0
- package/src/client/react/DocumentContext.tsx +25 -9
- package/src/client/react/DocumentMain.tsx +8 -6
- package/src/client/react/Favorite.tsx +17 -0
- package/src/client/react/FormField.tsx +68 -0
- package/src/client/react/HandoffForm.tsx +78 -0
- package/src/client/react/HandoffPage.tsx +78 -0
- package/src/client/react/HandoffPrompt.tsx +33 -0
- package/src/client/react/Header.tsx +34 -13
- package/src/client/react/HistoryComparison.tsx +60 -0
- package/src/client/react/HistoryRetention.tsx +29 -0
- package/src/client/react/HomeBoard.tsx +15 -0
- package/src/client/react/InboxPage.tsx +51 -0
- package/src/client/react/LiveControls.tsx +78 -0
- package/src/client/react/Modal.tsx +92 -0
- package/src/client/react/NavigationTree.tsx +2 -1
- package/src/client/react/OverviewGroups.tsx +61 -0
- package/src/client/react/OverviewPage.tsx +68 -0
- package/src/client/react/ProjectionFrame.tsx +140 -0
- package/src/client/react/ProjectionMain.tsx +63 -0
- package/src/client/react/PromptOption.tsx +56 -0
- package/src/client/react/ReadingLibrary.tsx +147 -0
- package/src/client/react/RemainingMain.tsx +66 -0
- package/src/client/react/RespondPage.tsx +41 -0
- package/src/client/react/ResponseMarkdown.tsx +32 -2
- package/src/client/react/ResultCriteria.tsx +78 -0
- package/src/client/react/ResultFeedback.tsx +67 -0
- package/src/client/react/ResultPage.tsx +50 -0
- package/src/client/react/SavedViews.tsx +61 -0
- package/src/client/react/SearchDialog.tsx +136 -0
- package/src/client/react/SearchResults.tsx +48 -0
- package/src/client/react/ShellApi.ts +11 -1
- package/src/client/react/Sidebar.tsx +57 -4
- package/src/client/react/StartPage.tsx +41 -0
- package/src/client/react/UpdatesToggle.tsx +13 -0
- package/src/client/react/VisualControls.tsx +59 -0
- package/src/client/react/VisualInspection.tsx +35 -0
- package/src/client/react/VisualViewer.tsx +147 -0
- package/src/client/react/WorkCards.tsx +39 -0
- package/src/client/react/WorkControls.tsx +73 -0
- package/src/client/react/WorkDetail.tsx +35 -0
- package/src/client/react/WorkItemTitle.tsx +9 -0
- package/src/client/react/WorkPage.tsx +59 -0
- package/src/client/react/WorkResults.tsx +9 -0
- package/src/client/react/WorkTable.tsx +39 -0
- package/src/client/react/WorkTools.tsx +17 -0
- package/src/client/react/activeRead.ts +15 -0
- package/src/client/react/createResponse.ts +40 -0
- package/src/client/react/diagnosticsValues.tsx +103 -0
- package/src/client/react/entry.css +20 -0
- package/src/client/react/entry.tsx +6 -19
- package/src/client/react/historyStore.ts +56 -0
- package/src/client/react/liveStatus.ts +52 -0
- package/src/client/react/loadBoardPage.ts +15 -5
- package/src/client/react/loadProjection.ts +23 -0
- package/src/client/react/loadRemaining.ts +27 -0
- package/src/client/react/mainLocation.ts +12 -0
- package/src/client/react/navigationLocation.ts +27 -0
- package/src/client/react/pageQuery.ts +38 -0
- package/src/client/react/projectionChanges.ts +21 -0
- package/src/client/react/projectionRoute.ts +21 -0
- package/src/client/react/readerLink.ts +9 -0
- package/src/client/react/readingHistory.ts +31 -0
- package/src/client/react/readingLibrary.ts +22 -0
- package/src/client/react/readingState.ts +133 -0
- package/src/client/react/remainingRoute.ts +19 -0
- package/src/client/react/savedViews.ts +84 -0
- package/src/client/react/scheduleReading.ts +41 -0
- package/src/client/react/searchCommands.ts +15 -0
- package/src/client/react/searchStatus.ts +30 -0
- package/src/client/react/shellIds.ts +59 -0
- package/src/client/react/useAppearance.ts +54 -0
- package/src/client/react/useBoardNavigation.ts +139 -0
- package/src/client/react/useDiagnosticsPolling.ts +24 -0
- package/src/client/react/useDocumentPage.ts +1 -1
- package/src/client/react/useFormFocus.ts +46 -0
- package/src/client/react/useHandoffForm.ts +105 -0
- package/src/client/react/useHistoryComparison.ts +142 -0
- package/src/client/react/useMedia.ts +19 -0
- package/src/client/react/useResponseForm.ts +147 -0
- package/src/client/react/useSearchDialog.ts +25 -0
- package/src/client/react/useSidebar.ts +81 -0
- package/src/client/react/visualDimensions.ts +20 -0
- package/src/client/react/visualSources.ts +105 -0
- package/src/client/reconcile/{signature.ts → normalized.ts} +0 -37
- package/src/client/responses/answerRecovery.ts +37 -0
- package/src/client/responses/authorLabel.ts +3 -3
- package/src/client/responses/failure.ts +13 -0
- package/src/client/responses/formSchema.ts +4 -0
- package/src/client/responses/preview.ts +2 -2
- package/src/client/responses/retainContext.ts +15 -0
- package/src/client/responses/summary.ts +25 -0
- package/src/client/sourceChanged.ts +3 -0
- package/src/diagnostics/daemonContract.ts +1 -1
- package/src/diagnostics/source.ts +5 -14
- package/src/history/schema.ts +15 -0
- package/src/rpc/contract.ts +57 -3
- package/src/server/board.ts +24 -126
- package/src/server/boardRuntime.ts +54 -0
- package/src/server/diagnostics/daemon.ts +3 -3
- package/src/server/history/html.ts +0 -3
- package/src/server/history/response.ts +15 -1
- package/src/server/http/assets.ts +2 -36
- package/src/server/http/attachment.ts +1 -1
- package/src/server/http/boardRoutes.ts +62 -0
- package/src/server/http/identity.ts +1 -1
- package/src/server/http/page.ts +2 -3
- package/src/server/http/respond.ts +1 -1
- package/src/server/http/rpcPolicy.ts +16 -0
- package/src/server/http/work.ts +1 -1
- package/src/server/responses/agent.ts +2 -2
- package/src/server/responses/composerHtml.ts +1 -1
- package/src/server/responses/waitFor.ts +1 -1
- package/src/server/rpc/HandlerOptions.ts +12 -0
- package/src/server/rpc/handlers.ts +18 -15
- package/src/server/serve-cli.ts +8 -8
- package/src/server/serve.ts +23 -10
- package/src/server/views/projectionQueries.ts +78 -0
- package/src/server/views/remainingQueries.ts +74 -0
- package/src/server/views/resultProjection.ts +45 -0
- package/src/server/views/resultTargets.ts +34 -0
- package/src/server/views/state.ts +5 -40
- package/src/server/views/workStyle.ts +1 -0
- package/dist/client/diagnostics/script.d.ts +0 -2
- package/dist/client/diagnostics/script.d.ts.map +0 -1
- package/dist/client/diagnostics/script.js +0 -31
- package/dist/client/diagnostics/script.js.map +0 -1
- package/dist/client/fieldFeedback.d.ts +0 -17
- package/dist/client/fieldFeedback.d.ts.map +0 -1
- package/dist/client/fieldFeedback.js +0 -38
- package/dist/client/fieldFeedback.js.map +0 -1
- package/dist/client/handoffs/copy.d.ts +0 -3
- package/dist/client/handoffs/copy.d.ts.map +0 -1
- package/dist/client/handoffs/copy.js +0 -47
- package/dist/client/handoffs/copy.js.map +0 -1
- package/dist/client/handoffs/fields.d.ts +0 -9
- package/dist/client/handoffs/fields.d.ts.map +0 -1
- package/dist/client/handoffs/fields.js +0 -34
- package/dist/client/handoffs/fields.js.map +0 -1
- package/dist/client/handoffs/form.d.ts +0 -36
- package/dist/client/handoffs/form.d.ts.map +0 -1
- package/dist/client/handoffs/form.js +0 -33
- package/dist/client/handoffs/form.js.map +0 -1
- package/dist/client/handoffs/setup.d.ts +0 -2
- package/dist/client/handoffs/setup.d.ts.map +0 -1
- package/dist/client/handoffs/setup.js +0 -125
- package/dist/client/handoffs/setup.js.map +0 -1
- package/dist/client/history/script.d.ts +0 -2
- package/dist/client/history/script.d.ts.map +0 -1
- package/dist/client/history/script.js +0 -128
- package/dist/client/history/script.js.map +0 -1
- package/dist/client/legacyRuntime.d.ts +0 -9
- package/dist/client/legacyRuntime.d.ts.map +0 -1
- package/dist/client/legacyRuntime.js +0 -15
- package/dist/client/legacyRuntime.js.map +0 -1
- package/dist/client/page/ageScript.d.ts +0 -2
- package/dist/client/page/ageScript.d.ts.map +0 -1
- package/dist/client/page/ageScript.js +0 -23
- package/dist/client/page/ageScript.js.map +0 -1
- package/dist/client/page/formReadingScript.d.ts +0 -2
- package/dist/client/page/formReadingScript.d.ts.map +0 -1
- package/dist/client/page/formReadingScript.js +0 -26
- package/dist/client/page/formReadingScript.js.map +0 -1
- package/dist/client/page/itemContextScript.d.ts +0 -2
- package/dist/client/page/itemContextScript.d.ts.map +0 -1
- package/dist/client/page/itemContextScript.js +0 -21
- package/dist/client/page/itemContextScript.js.map +0 -1
- package/dist/client/page/libraryScript.d.ts +0 -2
- package/dist/client/page/libraryScript.d.ts.map +0 -1
- package/dist/client/page/libraryScript.js +0 -85
- package/dist/client/page/libraryScript.js.map +0 -1
- package/dist/client/page/navigationHistoryScript.d.ts +0 -2
- package/dist/client/page/navigationHistoryScript.d.ts.map +0 -1
- package/dist/client/page/navigationHistoryScript.js +0 -47
- package/dist/client/page/navigationHistoryScript.js.map +0 -1
- package/dist/client/page/navigationScript.d.ts +0 -2
- package/dist/client/page/navigationScript.d.ts.map +0 -1
- package/dist/client/page/navigationScript.js +0 -113
- package/dist/client/page/navigationScript.js.map +0 -1
- package/dist/client/page/preferencesScript.d.ts +0 -2
- package/dist/client/page/preferencesScript.d.ts.map +0 -1
- package/dist/client/page/preferencesScript.js +0 -46
- package/dist/client/page/preferencesScript.js.map +0 -1
- package/dist/client/page/reactNavigationScript.d.ts +0 -2
- package/dist/client/page/reactNavigationScript.d.ts.map +0 -1
- package/dist/client/page/reactNavigationScript.js +0 -31
- package/dist/client/page/reactNavigationScript.js.map +0 -1
- package/dist/client/page/readingStateScript.d.ts +0 -2
- package/dist/client/page/readingStateScript.d.ts.map +0 -1
- package/dist/client/page/readingStateScript.js +0 -65
- package/dist/client/page/readingStateScript.js.map +0 -1
- package/dist/client/page/runtime.d.ts +0 -3
- package/dist/client/page/runtime.d.ts.map +0 -1
- package/dist/client/page/runtime.js +0 -111
- package/dist/client/page/runtime.js.map +0 -1
- package/dist/client/page/scripts.d.ts +0 -3
- package/dist/client/page/scripts.d.ts.map +0 -1
- package/dist/client/page/scripts.js +0 -91
- package/dist/client/page/scripts.js.map +0 -1
- package/dist/client/page/searchResultsScript.d.ts +0 -2
- package/dist/client/page/searchResultsScript.d.ts.map +0 -1
- package/dist/client/page/searchResultsScript.js +0 -64
- package/dist/client/page/searchResultsScript.js.map +0 -1
- package/dist/client/page/searchScript.d.ts +0 -2
- package/dist/client/page/searchScript.d.ts.map +0 -1
- package/dist/client/page/searchScript.js +0 -75
- package/dist/client/page/searchScript.js.map +0 -1
- package/dist/client/page/sidebarScript.d.ts +0 -2
- package/dist/client/page/sidebarScript.d.ts.map +0 -1
- package/dist/client/page/sidebarScript.js +0 -87
- package/dist/client/page/sidebarScript.js.map +0 -1
- package/dist/client/page/stateScript.d.ts +0 -2
- package/dist/client/page/stateScript.d.ts.map +0 -1
- package/dist/client/page/stateScript.js +0 -95
- package/dist/client/page/stateScript.js.map +0 -1
- package/dist/client/page/visualScript.d.ts +0 -2
- package/dist/client/page/visualScript.d.ts.map +0 -1
- package/dist/client/page/visualScript.js +0 -42
- package/dist/client/page/visualScript.js.map +0 -1
- package/dist/client/page/visualViewport.d.ts +0 -2
- package/dist/client/page/visualViewport.d.ts.map +0 -1
- package/dist/client/page/visualViewport.js +0 -87
- package/dist/client/page/visualViewport.js.map +0 -1
- package/dist/client/react/AnswerFocus.d.ts +0 -6
- package/dist/client/react/AnswerFocus.d.ts.map +0 -1
- package/dist/client/react/AnswerFocus.js +0 -12
- package/dist/client/react/AnswerFocus.js.map +0 -1
- package/dist/client/react/LegacyMain.d.ts +0 -9
- package/dist/client/react/LegacyMain.d.ts.map +0 -1
- package/dist/client/react/LegacyMain.js +0 -32
- package/dist/client/react/LegacyMain.js.map +0 -1
- package/dist/client/react/legacyPage.d.ts +0 -7
- package/dist/client/react/legacyPage.d.ts.map +0 -1
- package/dist/client/react/legacyPage.js +0 -63
- package/dist/client/react/legacyPage.js.map +0 -1
- package/dist/client/reconcile/patch.d.ts +0 -2
- package/dist/client/reconcile/patch.d.ts.map +0 -1
- package/dist/client/reconcile/patch.js +0 -64
- package/dist/client/reconcile/patch.js.map +0 -1
- package/dist/client/reconcile/signature.d.ts +0 -8
- package/dist/client/reconcile/signature.d.ts.map +0 -1
- package/dist/client/reconcile/signature.js.map +0 -1
- package/dist/client/reconcile/swap.d.ts +0 -2
- package/dist/client/reconcile/swap.d.ts.map +0 -1
- package/dist/client/reconcile/swap.js +0 -36
- package/dist/client/reconcile/swap.js.map +0 -1
- package/dist/client/responses/attach.d.ts +0 -2
- package/dist/client/responses/attach.d.ts.map +0 -1
- package/dist/client/responses/attach.js +0 -133
- package/dist/client/responses/attach.js.map +0 -1
- package/dist/client/responses/binding.d.ts +0 -3
- package/dist/client/responses/binding.d.ts.map +0 -1
- package/dist/client/responses/binding.js +0 -16
- package/dist/client/responses/binding.js.map +0 -1
- package/dist/client/responses/draft.d.ts +0 -13
- package/dist/client/responses/draft.d.ts.map +0 -1
- package/dist/client/responses/draft.js +0 -15
- package/dist/client/responses/draft.js.map +0 -1
- package/dist/client/responses/draftSession.d.ts +0 -8
- package/dist/client/responses/draftSession.d.ts.map +0 -1
- package/dist/client/responses/draftSession.js +0 -105
- package/dist/client/responses/draftSession.js.map +0 -1
- package/dist/client/responses/drafts.d.ts +0 -21
- package/dist/client/responses/drafts.d.ts.map +0 -1
- package/dist/client/responses/drafts.js +0 -68
- package/dist/client/responses/drafts.js.map +0 -1
- package/dist/client/responses/feedback.d.ts +0 -6
- package/dist/client/responses/feedback.d.ts.map +0 -1
- package/dist/client/responses/feedback.js +0 -77
- package/dist/client/responses/feedback.js.map +0 -1
- package/dist/client/responses/fields.d.ts +0 -12
- package/dist/client/responses/fields.d.ts.map +0 -1
- package/dist/client/responses/fields.js +0 -23
- package/dist/client/responses/fields.js.map +0 -1
- package/dist/client/responses/form.d.ts +0 -37
- package/dist/client/responses/form.d.ts.map +0 -1
- package/dist/client/responses/form.js +0 -43
- package/dist/client/responses/form.js.map +0 -1
- package/dist/client/responses/questionnaireControls.d.ts +0 -9
- package/dist/client/responses/questionnaireControls.d.ts.map +0 -1
- package/dist/client/responses/questionnaireControls.js +0 -82
- package/dist/client/responses/questionnaireControls.js.map +0 -1
- package/dist/client/responses/setup.d.ts +0 -2
- package/dist/client/responses/setup.d.ts.map +0 -1
- package/dist/client/responses/setup.js +0 -7
- package/dist/client/responses/setup.js.map +0 -1
- package/dist/client/responses/submit.d.ts +0 -5
- package/dist/client/responses/submit.d.ts.map +0 -1
- package/dist/client/responses/submit.js +0 -33
- package/dist/client/responses/submit.js.map +0 -1
- package/dist/client/views/savedScript.d.ts +0 -2
- package/dist/client/views/savedScript.d.ts.map +0 -1
- package/dist/client/views/savedScript.js +0 -89
- package/dist/client/views/savedScript.js.map +0 -1
- package/dist/server/diagnostics/html.d.ts +0 -8
- package/dist/server/diagnostics/html.d.ts.map +0 -1
- package/dist/server/diagnostics/html.js +0 -79
- package/dist/server/diagnostics/html.js.map +0 -1
- package/dist/server/diagnostics/page.d.ts +0 -55
- package/dist/server/diagnostics/page.d.ts.map +0 -1
- package/dist/server/diagnostics/page.js +0 -11
- package/dist/server/diagnostics/page.js.map +0 -1
- package/dist/server/handoffs/html.d.ts +0 -36
- package/dist/server/handoffs/html.d.ts.map +0 -1
- package/dist/server/handoffs/html.js +0 -31
- package/dist/server/handoffs/html.js.map +0 -1
- package/dist/server/handoffs/page.d.ts +0 -6
- package/dist/server/handoffs/page.d.ts.map +0 -1
- package/dist/server/handoffs/page.js +0 -34
- package/dist/server/handoffs/page.js.map +0 -1
- package/dist/server/http/changesPage.d.ts +0 -5
- package/dist/server/http/changesPage.d.ts.map +0 -1
- package/dist/server/http/changesPage.js +0 -13
- package/dist/server/http/changesPage.js.map +0 -1
- package/dist/server/http/readPage.d.ts +0 -4
- package/dist/server/http/readPage.d.ts.map +0 -1
- package/dist/server/http/readPage.js +0 -9
- package/dist/server/http/readPage.js.map +0 -1
- package/dist/server/http/start.d.ts +0 -5
- package/dist/server/http/start.d.ts.map +0 -1
- package/dist/server/http/start.js +0 -13
- package/dist/server/http/start.js.map +0 -1
- package/dist/server/page/startHtml.d.ts +0 -2
- package/dist/server/page/startHtml.d.ts.map +0 -1
- package/dist/server/page/startHtml.js +0 -10
- package/dist/server/page/startHtml.js.map +0 -1
- package/dist/server/responses/page.d.ts +0 -6
- package/dist/server/responses/page.d.ts.map +0 -1
- package/dist/server/responses/page.js +0 -25
- package/dist/server/responses/page.js.map +0 -1
- package/dist/server/results/criteria.d.ts +0 -3
- package/dist/server/results/criteria.d.ts.map +0 -1
- package/dist/server/results/criteria.js +0 -34
- package/dist/server/results/criteria.js.map +0 -1
- package/dist/server/results/feedback.d.ts +0 -6
- package/dist/server/results/feedback.d.ts.map +0 -1
- package/dist/server/results/feedback.js +0 -32
- package/dist/server/results/feedback.js.map +0 -1
- package/dist/server/results/page.d.ts +0 -6
- package/dist/server/results/page.d.ts.map +0 -1
- package/dist/server/results/page.js +0 -41
- package/dist/server/results/page.js.map +0 -1
- package/dist/server/rpc/transport.d.ts +0 -14
- package/dist/server/rpc/transport.d.ts.map +0 -1
- package/dist/server/rpc/transport.js +0 -15
- package/dist/server/rpc/transport.js.map +0 -1
- package/src/client/diagnostics/script.ts +0 -31
- package/src/client/fieldFeedback.ts +0 -53
- package/src/client/handoffs/copy.ts +0 -45
- package/src/client/handoffs/fields.ts +0 -38
- package/src/client/handoffs/form.ts +0 -41
- package/src/client/handoffs/setup.ts +0 -142
- package/src/client/history/script.ts +0 -127
- package/src/client/legacyRuntime.ts +0 -11
- package/src/client/page/ageScript.ts +0 -22
- package/src/client/page/formReadingScript.ts +0 -25
- package/src/client/page/itemContextScript.ts +0 -20
- package/src/client/page/libraryScript.ts +0 -84
- package/src/client/page/navigationHistoryScript.ts +0 -46
- package/src/client/page/navigationScript.ts +0 -113
- package/src/client/page/preferencesScript.ts +0 -45
- package/src/client/page/reactNavigationScript.ts +0 -30
- package/src/client/page/readingStateScript.ts +0 -64
- package/src/client/page/runtime.ts +0 -111
- package/src/client/page/scripts.ts +0 -91
- package/src/client/page/searchResultsScript.ts +0 -63
- package/src/client/page/searchScript.ts +0 -74
- package/src/client/page/sidebarScript.ts +0 -86
- package/src/client/page/stateScript.ts +0 -95
- package/src/client/page/visualScript.ts +0 -41
- package/src/client/page/visualViewport.ts +0 -86
- package/src/client/react/AnswerFocus.tsx +0 -10
- package/src/client/react/LegacyMain.tsx +0 -46
- package/src/client/react/legacyPage.ts +0 -69
- package/src/client/reconcile/patch.ts +0 -71
- package/src/client/reconcile/swap.ts +0 -37
- package/src/client/responses/attach.ts +0 -150
- package/src/client/responses/binding.ts +0 -16
- package/src/client/responses/draft.ts +0 -20
- package/src/client/responses/draftSession.ts +0 -108
- package/src/client/responses/drafts.ts +0 -82
- package/src/client/responses/feedback.ts +0 -81
- package/src/client/responses/fields.ts +0 -26
- package/src/client/responses/form.ts +0 -58
- package/src/client/responses/questionnaireControls.ts +0 -94
- package/src/client/responses/setup.ts +0 -6
- package/src/client/responses/submit.ts +0 -44
- package/src/client/views/savedScript.ts +0 -88
- package/src/server/diagnostics/html.ts +0 -93
- package/src/server/diagnostics/page.ts +0 -31
- package/src/server/handoffs/html.ts +0 -42
- package/src/server/handoffs/page.ts +0 -51
- package/src/server/http/changesPage.ts +0 -15
- package/src/server/http/readPage.ts +0 -13
- package/src/server/http/start.ts +0 -27
- package/src/server/page/startHtml.ts +0 -10
- package/src/server/responses/page.ts +0 -37
- package/src/server/results/criteria.ts +0 -37
- package/src/server/results/feedback.ts +0 -44
- package/src/server/results/page.ts +0 -63
- package/src/server/rpc/transport.ts +0 -34
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Context, Effect, FileSystem, Layer, Path, type PlatformError } from "effect";
|
|
2
|
+
import { DiagnosticsSources } from "#diagnostics/source.ts";
|
|
3
|
+
import type { BoardOptions } from "#server/board.ts";
|
|
4
|
+
import { boardServices } from "#server/boardServices.ts";
|
|
5
|
+
import { daemonDiagnostics } from "#server/diagnostics/daemon.ts";
|
|
6
|
+
import { readDocument } from "#server/document/read.ts";
|
|
7
|
+
import { watchChanges } from "#server/files/changes.ts";
|
|
8
|
+
import { homeIn } from "#server/files/home.ts";
|
|
9
|
+
import { checkBrowserAssets, mermaidRoot } from "#server/http/assets.ts";
|
|
10
|
+
import { Highlighter } from "#server/render/Highlighter.ts";
|
|
11
|
+
import { handlers } from "#server/rpc/handlers.ts";
|
|
12
|
+
import { type Snapshot, searchSnapshot } from "#server/search/snapshot.ts";
|
|
13
|
+
|
|
14
|
+
export const boardRuntime = Effect.fn("WorkBoard.boardRuntime")(function* (options: BoardOptions) {
|
|
15
|
+
const home = yield* homeIn(options.root, options.home);
|
|
16
|
+
const mermaid = yield* mermaidRoot();
|
|
17
|
+
yield* checkBrowserAssets();
|
|
18
|
+
const changes = yield* watchChanges(options.root);
|
|
19
|
+
const platform = (yield* Effect.context<Highlighter | FileSystem.FileSystem | Path.Path>()).pipe(
|
|
20
|
+
Context.pick(Highlighter, FileSystem.FileSystem, Path.Path),
|
|
21
|
+
);
|
|
22
|
+
const index: Effect.Effect<Snapshot, PlatformError.PlatformError, FileSystem.FileSystem | Path.Path> = yield* searchSnapshot(
|
|
23
|
+
options.root,
|
|
24
|
+
home,
|
|
25
|
+
changes,
|
|
26
|
+
options.maintainer,
|
|
27
|
+
);
|
|
28
|
+
const provided = yield* Effect.serviceOption(DiagnosticsSources);
|
|
29
|
+
const services = yield* Layer.build(
|
|
30
|
+
boardServices(
|
|
31
|
+
{ changes, enabled: options.responses === true, index: Effect.provideContext(index, platform), root: options.root },
|
|
32
|
+
provided._tag === "Some" ? { _tag: "Sources", sources: provided.value } : { _tag: "Read", read: daemonDiagnostics(options.fleetPort) },
|
|
33
|
+
),
|
|
34
|
+
);
|
|
35
|
+
const context = Context.merge(platform, services);
|
|
36
|
+
const rpcHandlers = yield* handlers({
|
|
37
|
+
changes,
|
|
38
|
+
document: (url) =>
|
|
39
|
+
Effect.provideContext(
|
|
40
|
+
readDocument({
|
|
41
|
+
changes,
|
|
42
|
+
home,
|
|
43
|
+
index: Effect.provideContext(index, context),
|
|
44
|
+
root: options.root,
|
|
45
|
+
writable: options.responses === true,
|
|
46
|
+
})(url),
|
|
47
|
+
context,
|
|
48
|
+
),
|
|
49
|
+
home,
|
|
50
|
+
index: Effect.provideContext(index, context),
|
|
51
|
+
writable: options.responses === true,
|
|
52
|
+
}).pipe(Effect.provideContext(context));
|
|
53
|
+
return { changes, context, home, index, mermaid, rpcHandlers };
|
|
54
|
+
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Clock, Effect, Layer } from "effect";
|
|
2
|
-
import { FetchHttpClient } from "effect/
|
|
3
|
-
import { RpcClient, RpcSerialization } from "effect/
|
|
4
|
-
import { RpcClientError } from "effect/
|
|
2
|
+
import { FetchHttpClient } from "effect/http";
|
|
3
|
+
import { RpcClient, RpcSerialization } from "effect/rpc";
|
|
4
|
+
import { RpcClientError } from "effect/rpc/RpcClientError";
|
|
5
5
|
import { DAEMON_PORT, DAEMON_RPC_PATH, DiagnosticsContract, type DiagnosticsSnapshot } from "#diagnostics/daemonContract.ts";
|
|
6
6
|
|
|
7
7
|
const daemonUnavailable = Effect.fn("WorkBoard.daemonUnavailable")(function* (error: unknown, port: number) {
|
|
@@ -18,6 +18,3 @@ export function historyHtml(before: Baseline, current: Baseline): string {
|
|
|
18
18
|
.join(" · ");
|
|
19
19
|
return `<p>Compared with your observation at <time>${escapeHtml(before.recordedAt)}</time>.</p><p role="status">${counts}</p>${result.changes.length === 0 ? "<p>No source changes since that observation.</p>" : ""}${result.issues.length > 0 ? `<aside aria-label="Identity limitations"><ul>${result.issues.map((issue) => `<li>${escapeHtml(issue)}</li>`).join("")}</ul><p>Ambiguous identities are compared by source path only.</p></aside>` : ""}${result.changes.map(changeHtml).join("")}`;
|
|
20
20
|
}
|
|
21
|
-
export function changesHtml(): string {
|
|
22
|
-
return `<section class="history"><h1>Changes since seen</h1><p>Compare current Markdown with one observation you explicitly remember in this browser. This is an observed source comparison, not an event journal, Git history, authorship, or verified acceptance.</p><p>Remembered source can include old or deleted content. One snapshot per workspace, up to 2 MiB, expires after 30 days and is removed on your next workspace visit. Mark seen replaces it; Clear forgets it. No source writes or cloud storage.</p><div class="history-controls"><button id="history-mark" type="button" disabled>Start remembering changes</button><button id="history-clear" type="button" disabled>Clear remembered history</button><span id="history-storage" role="status"></span></div><noscript><p>Remembering and comparing changes requires JavaScript and browser storage. Markdown, Overview and Work remain readable.</p></noscript><div id="changes-content" aria-live="polite"><p>No comparison has been loaded.</p></div></section><style>.history-controls{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}.history-change{border-top:1px solid var(--border);padding:1rem 0}.history-source{white-space:pre-wrap;overflow-wrap:anywhere;max-height:32rem;overflow:auto}.history h2{overflow-wrap:anywhere}</style>`;
|
|
23
|
-
}
|
|
@@ -2,6 +2,7 @@ import { escapeHtml } from "#browser/escapeHtml.ts";
|
|
|
2
2
|
import type { HistoryOutput } from "#history/schema.ts";
|
|
3
3
|
import type { Snapshot } from "#server/search/snapshot.ts";
|
|
4
4
|
import { observeBaseline, readBaseline } from "./baseline.ts";
|
|
5
|
+
import { compareHistory } from "./compare.ts";
|
|
5
6
|
import { historyHtml } from "./html.ts";
|
|
6
7
|
|
|
7
8
|
export function historyResponse(raw: string | null, now: number, snapshot?: Snapshot): HistoryOutput {
|
|
@@ -19,5 +20,18 @@ export function historyResponse(raw: string | null, now: number, snapshot?: Snap
|
|
|
19
20
|
return { ...output, html: `<p role="status">${escapeHtml(reason)}</p>`, reason };
|
|
20
21
|
}
|
|
21
22
|
const current = readBaseline(currentRaw, now).baseline;
|
|
22
|
-
|
|
23
|
+
const compared = prior.baseline && current ? compareHistory(prior.baseline, current) : undefined;
|
|
24
|
+
const comparison =
|
|
25
|
+
compared && prior.baseline
|
|
26
|
+
? {
|
|
27
|
+
changes: compared.changes.map(({ before, after, ...change }) => ({
|
|
28
|
+
...change,
|
|
29
|
+
after: after ? { file: after.file, source: after.source } : undefined,
|
|
30
|
+
before: before ? { file: before.file, source: before.source } : undefined,
|
|
31
|
+
})),
|
|
32
|
+
issues: compared.issues,
|
|
33
|
+
recordedAt: prior.baseline.recordedAt,
|
|
34
|
+
}
|
|
35
|
+
: undefined;
|
|
36
|
+
return { ...output, comparison, html: prior.baseline && current ? historyHtml(prior.baseline, current) : output.html, snapshot: currentRaw };
|
|
23
37
|
}
|
|
@@ -1,45 +1,11 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
2
|
import { Effect, FileSystem, Path, Schema } from "effect";
|
|
3
|
-
import type { HttpRouter, HttpServerRequest } from "effect/
|
|
3
|
+
import type { HttpRouter, HttpServerRequest } from "effect/http";
|
|
4
4
|
import { InternalServerError } from "@shivaedev/platform/errors/taxonomy.ts";
|
|
5
|
-
import { diagnosticsScript } from "#client/diagnostics/script.ts";
|
|
6
|
-
import { historyScript } from "#client/history/script.ts";
|
|
7
|
-
import { ageScript } from "#client/page/ageScript.ts";
|
|
8
|
-
import { libraryScript } from "#client/page/libraryScript.ts";
|
|
9
|
-
import { navigationScript } from "#client/page/navigationScript.ts";
|
|
10
|
-
import { readingStateScript } from "#client/page/readingStateScript.ts";
|
|
11
|
-
import { client, preferences } from "#client/page/runtime.ts";
|
|
12
|
-
import { diagrams, swap } from "#client/page/scripts.ts";
|
|
13
|
-
import { searchResultsScript } from "#client/page/searchResultsScript.ts";
|
|
14
|
-
import { searchScript } from "#client/page/searchScript.ts";
|
|
15
|
-
import { sidebarScript } from "#client/page/sidebarScript.ts";
|
|
16
|
-
import { pageStateScript } from "#client/page/stateScript.ts";
|
|
17
|
-
import { visualScript } from "#client/page/visualScript.ts";
|
|
18
|
-
import { visualViewport } from "#client/page/visualViewport.ts";
|
|
19
|
-
import { savedScript } from "#client/views/savedScript.ts";
|
|
20
5
|
import { style } from "#server/page/style.ts";
|
|
21
6
|
import { respond } from "./respond.ts";
|
|
22
7
|
|
|
23
|
-
export const ASSETS: ReadonlyArray<readonly [HttpRouter.PathInput, string, string]> = [
|
|
24
|
-
["/_board/style.css", style, "text/css"],
|
|
25
|
-
["/_board/diagnostics.js", diagnosticsScript(), "text/javascript"],
|
|
26
|
-
["/_board/visuals.js", visualScript(), "text/javascript"],
|
|
27
|
-
["/_board/visual-viewport.js", visualViewport(), "text/javascript"],
|
|
28
|
-
["/_board/saved-views.js", savedScript(), "text/javascript"],
|
|
29
|
-
["/_board/client.js", client, "text/javascript"],
|
|
30
|
-
["/_board/ages.js", ageScript(), "text/javascript"],
|
|
31
|
-
["/_board/history.js", historyScript(), "text/javascript"],
|
|
32
|
-
["/_board/preferences.js", preferences, "text/javascript"],
|
|
33
|
-
["/_board/search.js", searchScript(), "text/javascript"],
|
|
34
|
-
["/_board/search-results.js", searchResultsScript(), "text/javascript"],
|
|
35
|
-
["/_board/sidebar.js", sidebarScript(), "text/javascript"],
|
|
36
|
-
["/_board/library.js", libraryScript(), "text/javascript"],
|
|
37
|
-
["/_board/navigation.js", navigationScript(), "text/javascript"],
|
|
38
|
-
["/_board/page-state.js", pageStateScript(), "text/javascript"],
|
|
39
|
-
["/_board/reading-state.js", readingStateScript(), "text/javascript"],
|
|
40
|
-
["/_board/diagrams.js", diagrams, "text/javascript"],
|
|
41
|
-
["/_board/swap.js", swap, "text/javascript"],
|
|
42
|
-
];
|
|
8
|
+
export const ASSETS: ReadonlyArray<readonly [HttpRouter.PathInput, string, string]> = [["/_board/style.css", style, "text/css"]];
|
|
43
9
|
|
|
44
10
|
const MERMAID = "/_board/mermaid/";
|
|
45
11
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, FileSystem, Path } from "effect";
|
|
2
|
-
import type { HttpServerRequest } from "effect/
|
|
2
|
+
import type { HttpServerRequest } from "effect/http";
|
|
3
3
|
import { attachmentType } from "#path/attachment.ts";
|
|
4
4
|
import { within } from "#server/files/list.ts";
|
|
5
5
|
import { respond } from "./respond.ts";
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Effect, type FileSystem, type Path, type Scope } from "effect";
|
|
2
|
+
import { HttpRouter, type HttpServerRequest, type HttpServerResponse } from "effect/http";
|
|
3
|
+
import { loopbackOnly } from "@shivaedev/platform/rpc-server/local.ts";
|
|
4
|
+
import type { Diagnostics } from "#diagnostics/source.ts";
|
|
5
|
+
import type { BoardOptions } from "#server/board.ts";
|
|
6
|
+
import type { boardRuntime } from "#server/boardRuntime.ts";
|
|
7
|
+
import type { HandoffsService } from "#server/handoffs/Service.ts";
|
|
8
|
+
import { navHtml } from "#server/page/nav.ts";
|
|
9
|
+
import { shell } from "#server/page/shell.ts";
|
|
10
|
+
import type { Highlighter } from "#server/render/Highlighter.ts";
|
|
11
|
+
import type { Responses } from "#server/responses/service.ts";
|
|
12
|
+
import { ASSET_HANDLERS, MERMAID_ROUTE, mermaidFile } from "./assets.ts";
|
|
13
|
+
import { attachment } from "./attachment.ts";
|
|
14
|
+
import { identity } from "./identity.ts";
|
|
15
|
+
import { inbox } from "./inbox.ts";
|
|
16
|
+
import { overview } from "./overview.ts";
|
|
17
|
+
import { page } from "./page.ts";
|
|
18
|
+
import { respond } from "./respond.ts";
|
|
19
|
+
import { work } from "./work.ts";
|
|
20
|
+
|
|
21
|
+
type Services = Highlighter | Responses | HandoffsService | Diagnostics | FileSystem.FileSystem | Path.Path;
|
|
22
|
+
type Handler<E> = (request: HttpServerRequest.HttpServerRequest) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, Services | Scope.Scope>;
|
|
23
|
+
|
|
24
|
+
export function boardRoutes(options: BoardOptions, runtime: Effect.Success<ReturnType<typeof boardRuntime>>) {
|
|
25
|
+
return HttpRouter.use((router) =>
|
|
26
|
+
Effect.gen(function* () {
|
|
27
|
+
const { changes, context, home, index, mermaid } = runtime;
|
|
28
|
+
function serve<E>(route: HttpRouter.PathInput, handler: Handler<E>) {
|
|
29
|
+
return router.add(
|
|
30
|
+
"GET",
|
|
31
|
+
route,
|
|
32
|
+
loopbackOnly((request) => Effect.provideContext(handler(request), context)),
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
yield* serve("/_board/attachment/*", attachment(options.root, changes.realRoot));
|
|
36
|
+
const inboxPage = inbox(index, changes, home);
|
|
37
|
+
yield* serve("/_board/inbox", inboxPage);
|
|
38
|
+
const workPage = work(index, changes, home);
|
|
39
|
+
const overviewPage = overview(index, changes, home);
|
|
40
|
+
yield* serve("/_board/work", workPage);
|
|
41
|
+
yield* serve("/_board/overview", overviewPage);
|
|
42
|
+
for (const [route, asset] of ASSET_HANDLERS) {
|
|
43
|
+
yield* serve(route, asset);
|
|
44
|
+
}
|
|
45
|
+
yield* serve(MERMAID_ROUTE, mermaidFile(mermaid));
|
|
46
|
+
for (const view of ["changes", "diagnostics", "start", "respond", "handoff", "result"] as const) {
|
|
47
|
+
yield* serve(`/_board/${view}`, () =>
|
|
48
|
+
Effect.gen(function* () {
|
|
49
|
+
const snapshot = yield* index;
|
|
50
|
+
const nav = navHtml(yield* changes.files, "", home, snapshot);
|
|
51
|
+
return respond(shell(view, nav, "", changes.realRoot, false, undefined, view === "respond" ? "response" : view, snapshot), "text/html");
|
|
52
|
+
}),
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
const pages = page({ home, root: options.root, writable: options.responses === true }, changes, index);
|
|
56
|
+
const items = identity(index, pages, changes, home);
|
|
57
|
+
yield* serve("/_board/item/*", items);
|
|
58
|
+
yield* serve("/", pages);
|
|
59
|
+
yield* serve("/*", pages);
|
|
60
|
+
}),
|
|
61
|
+
);
|
|
62
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import type { HttpServerRequest } from "effect/
|
|
2
|
+
import type { HttpServerRequest } from "effect/http";
|
|
3
3
|
import { escapeHtml } from "#browser/escapeHtml.ts";
|
|
4
4
|
import { fileUrl } from "#files/url.ts";
|
|
5
5
|
import type { Changes } from "#server/files/changes.ts";
|
package/src/server/http/page.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, FileSystem, Option } from "effect";
|
|
2
|
-
import type { HttpServerRequest } from "effect/
|
|
2
|
+
import type { HttpServerRequest } from "effect/http";
|
|
3
3
|
import { escapeHtml } from "#browser/escapeHtml.ts";
|
|
4
4
|
import { authoredQuestion } from "#server/attention/inbox.ts";
|
|
5
5
|
import { documentBody } from "#server/document/body.ts";
|
|
@@ -14,7 +14,6 @@ import { itemIntroduction } from "#server/page/itemIntroduction.ts";
|
|
|
14
14
|
import { metadataHtml } from "#server/page/metadata.ts";
|
|
15
15
|
import { navHtml } from "#server/page/nav.ts";
|
|
16
16
|
import { shell } from "#server/page/shell.ts";
|
|
17
|
-
import { startHtml } from "#server/page/startHtml.ts";
|
|
18
17
|
import { boardOf } from "#server/render/board.ts";
|
|
19
18
|
import { authoredQuestionHtml } from "#server/responses/authoredQuestionHtml.ts";
|
|
20
19
|
import { readingActions } from "#server/responses/readingActions.ts";
|
|
@@ -96,7 +95,7 @@ export function page(options: PageOptions, changes: Changes, index: Effect.Succe
|
|
|
96
95
|
);
|
|
97
96
|
}
|
|
98
97
|
if (files.length === 0 && requestedPath(request.url) === "" && resolved === undefined && expectedIdentity === undefined) {
|
|
99
|
-
return respond(layout(
|
|
98
|
+
return respond(layout('<p class="empty">Start your local workspace. Enable JavaScript to read project and report templates.</p>'), "text/html");
|
|
100
99
|
}
|
|
101
100
|
if (file === undefined) {
|
|
102
101
|
return missing();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { HttpRouter, HttpServerRequest, HttpServerResponse } from "effect/http";
|
|
3
|
+
import { HEADERS } from "./respond.ts";
|
|
4
|
+
|
|
5
|
+
export const RPC_PATH = "/_board/rpc";
|
|
6
|
+
|
|
7
|
+
export const rpcPolicy = HttpRouter.middleware(
|
|
8
|
+
(http) =>
|
|
9
|
+
Effect.gen(function* () {
|
|
10
|
+
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
11
|
+
return yield* request.url.split("?")[0] === RPC_PATH
|
|
12
|
+
? http.pipe(Effect.map((response) => HttpServerResponse.setHeaders(response, HEADERS)))
|
|
13
|
+
: http;
|
|
14
|
+
}),
|
|
15
|
+
{ global: true },
|
|
16
|
+
);
|
package/src/server/http/work.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
import type { HttpServerRequest } from "effect/
|
|
2
|
+
import type { HttpServerRequest } from "effect/http";
|
|
3
3
|
import { escapeHtml } from "#browser/escapeHtml.ts";
|
|
4
4
|
import type { Changes } from "#server/files/changes.ts";
|
|
5
5
|
import { navHtml } from "#server/page/nav.ts";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
|
-
import * as RpcClient from "effect/
|
|
5
|
-
import * as RpcSerialization from "effect/
|
|
4
|
+
import * as RpcClient from "effect/rpc/RpcClient";
|
|
5
|
+
import * as RpcSerialization from "effect/rpc/RpcSerialization";
|
|
6
6
|
import { BadRequest } from "@shivaedev/platform/errors/taxonomy.ts";
|
|
7
7
|
import { responseContract } from "#rpc/responseContract.ts";
|
|
8
8
|
import { waitForResponse } from "./waitFor.ts";
|
|
@@ -21,5 +21,5 @@ export const composerHtml = Effect.fn("WorkBoard.composerHtml")(function* (
|
|
|
21
21
|
.join("");
|
|
22
22
|
const body = `<label>${template.hasPrompts ? "Overall response / next action (optional)" : "Your response"}<textarea name="body" rows="4" maxlength="32768" ${template.hasPrompts ? "" : "required"}></textarea></label>`;
|
|
23
23
|
const details = `<details data-key="response-details"><summary>Response details</summary><label>Response kind <select name="type"><option value="answer">Answer (including no)</option><option value="clarify">Ask back / clarify</option><option value="not_now">Not now</option></select></label>${standalone && template.hasPrompts ? body : ""}<label>Supersedes an earlier response (optional)<select name="supersedes"><option value="">Adds feedback; does not supersede</option>${prior}</select></label></details>`;
|
|
24
|
-
return `<section class="response-panel"><h${standalone ? "2" : "1"}>${standalone ? "Answer this question" : `Respond to ${escapeHtml(q.item)} / ${escapeHtml(q.request)}`}</h${standalone ? "2" : "1"}><p>${escapeHtml(q.reason)}</p><p><a href="${fileUrl(q.source)}">Source: ${escapeHtml(q.source)}</a> · Reviewed SHA-256: <code>${q.reviewedRevision}</code></p><p>${standalone ? "An answer removes this question from the Inbox for this source revision." : "Saved replies are authored feedback. They do not close the request or establish acceptance."}</p>${standalone ? "" : `<section class="response-context">${template.background}</section>`}<details><summary>Exact source being reviewed</summary><pre>${escapeHtml(q.context)}</pre></details><form novalidate id="response-form" data-question="${q.id}" data-writable="${enabled}" data-item="${escapeHtml(q.item)}" data-request="${escapeHtml(q.request)}" data-revision="${q.reviewedRevision}"><label>Local author label <input name="author" maxlength="200" required autocomplete="nickname"></label>${template.controls}${standalone && template.hasPrompts ? "" : body}${details}<pre id="response-draft-recovery" hidden></pre><p>Submit the whole packet together. Drafts stay in this browser for
|
|
24
|
+
return `<section class="response-panel"><h${standalone ? "2" : "1"}>${standalone ? "Answer this question" : `Respond to ${escapeHtml(q.item)} / ${escapeHtml(q.request)}`}</h${standalone ? "2" : "1"}><p>${escapeHtml(q.reason)}</p><p><a href="${fileUrl(q.source)}">Source: ${escapeHtml(q.source)}</a> · Reviewed SHA-256: <code>${q.reviewedRevision}</code></p><p>${standalone ? "An answer removes this question from the Inbox for this source revision." : "Saved replies are authored feedback. They do not close the request or establish acceptance."}</p>${standalone ? "" : `<section class="response-context">${template.background}</section>`}<details><summary>Exact source being reviewed</summary><pre>${escapeHtml(q.context)}</pre></details><form novalidate id="response-form" data-question="${q.id}" data-writable="${enabled}" data-item="${escapeHtml(q.item)}" data-request="${escapeHtml(q.request)}" data-revision="${q.reviewedRevision}"><label>Local author label <input name="author" maxlength="200" required autocomplete="nickname"></label>${template.controls}${standalone && template.hasPrompts ? "" : body}${details}<pre id="response-draft-recovery" hidden></pre><p>Submit the whole packet together. Drafts stay in this browser for seven days after the last edit, with a 256 KiB limit per draft. Saved responses are Markdown files in responses/.</p><button id="response-preview" type="button" disabled>Preview Markdown</button><pre id="response-preview-content" hidden></pre><button id="response-submit" type="submit" disabled>Record response</button><button id="response-clear" type="button" disabled>Clear draft</button><p id="response-status" role="status">${enabled ? "JavaScript is required to record a response." : "Read-only mode. Restart with --responses to explicitly enable local writes."}</p></form>${yield* historyHtml(q, records)}</section>`;
|
|
25
25
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Schema } from "effect";
|
|
2
2
|
import * as Clock from "effect/Clock";
|
|
3
3
|
import * as Effect from "effect/Effect";
|
|
4
|
-
import type { RpcClientError } from "effect/
|
|
4
|
+
import type { RpcClientError } from "effect/rpc/RpcClientError";
|
|
5
5
|
import { ServiceUnavailable } from "@shivaedev/platform/errors/taxonomy.ts";
|
|
6
6
|
import type { WaitReading } from "#browser/responses/schema.ts";
|
|
7
7
|
import { ResponseRejection, Unanswered } from "#rpc/rejections.ts";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Effect } from "effect";
|
|
2
|
+
import type { Document } from "#browser/document/schema.ts";
|
|
3
|
+
import type { Changes } from "#server/files/changes.ts";
|
|
4
|
+
import type { Snapshot } from "#server/search/snapshot.ts";
|
|
5
|
+
|
|
6
|
+
export interface HandlerOptions {
|
|
7
|
+
readonly changes: Changes;
|
|
8
|
+
readonly document?: (url: string) => Effect.Effect<Document, unknown>;
|
|
9
|
+
readonly home: string | undefined;
|
|
10
|
+
readonly index: Effect.Effect<Snapshot, unknown>;
|
|
11
|
+
readonly writable?: boolean;
|
|
12
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Clock, Effect, Layer, Ref, Stream } from "effect";
|
|
2
|
-
import type { HttpServerResponse } from "effect/unstable/http";
|
|
3
2
|
import { InternalServerError, NotFound } from "@shivaedev/platform/errors/taxonomy.ts";
|
|
4
3
|
import { rpcBoundary } from "@shivaedev/platform/rpc-server/boundary.ts";
|
|
5
4
|
import { requestTracingLayer } from "@shivaedev/platform/rpc-server/tracing.ts";
|
|
5
|
+
import { Diagnostics } from "#diagnostics/source.ts";
|
|
6
6
|
import { workRpcs } from "#rpc/contract.ts";
|
|
7
7
|
import { DocumentRejection, ResponseRejection } from "#rpc/rejections.ts";
|
|
8
8
|
import { HandoffsService } from "#server/handoffs/Service.ts";
|
|
@@ -10,32 +10,30 @@ import { historyResponse } from "#server/history/response.ts";
|
|
|
10
10
|
import { navigationData } from "#server/navigation/model.ts";
|
|
11
11
|
import { Responses } from "#server/responses/service.ts";
|
|
12
12
|
import { searchMatch } from "#server/search/match.ts";
|
|
13
|
+
import { projectionQueries } from "#server/views/projectionQueries.ts";
|
|
14
|
+
import { remainingQueries } from "#server/views/remainingQueries.ts";
|
|
15
|
+
import type { HandlerOptions } from "./HandlerOptions.ts";
|
|
13
16
|
import { hints } from "./hints.ts";
|
|
14
|
-
import type { ServerOptions } from "./transport.ts";
|
|
15
17
|
|
|
16
18
|
const readBoundary = rpcBoundary(InternalServerError, { unexpected: (message) => new InternalServerError({ message }) });
|
|
17
19
|
const documentBoundary = rpcBoundary(DocumentRejection, { unexpected: (message) => new InternalServerError({ message }) });
|
|
18
20
|
const responseBoundary = rpcBoundary(ResponseRejection, { unexpected: (message) => new InternalServerError({ message }) });
|
|
19
21
|
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
new InternalServerError({
|
|
24
|
-
message: `Page response is unreadable (status ${response.status}, body ${response.body._tag}). Retry the page; if it still fails, restart Work Board.`,
|
|
25
|
-
}),
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
return Effect.succeed({ html: new TextDecoder().decode(response.body.body), status: response.status });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const handlers = Effect.fn("WorkBoard.handlers")(function* ({ changes, document, home, index, page }: ServerOptions) {
|
|
22
|
+
export const handlers = Effect.fn("WorkBoard.handlers")(function* (options: HandlerOptions) {
|
|
23
|
+
const { changes, document, home, index } = options;
|
|
24
|
+
const projections = projectionQueries({ document, index });
|
|
32
25
|
const handoffs = yield* HandoffsService;
|
|
33
26
|
const responses = yield* Responses;
|
|
27
|
+
const diagnostics = yield* Diagnostics;
|
|
28
|
+
const remaining = remainingQueries(options, { diagnostics, handoffs, responses });
|
|
34
29
|
return workRpcs
|
|
35
30
|
.toLayer({
|
|
36
31
|
"work-board.awaitResponse": (input) => Effect.suspend(() => responses.awaitResponse(input)).pipe(responseBoundary),
|
|
32
|
+
"work-board.board": ({ url }) => Effect.suspend(() => projections.board(url)).pipe(documentBoundary),
|
|
33
|
+
"work-board.diagnostics": () => remaining.diagnostics().pipe(readBoundary),
|
|
37
34
|
"work-board.document": ({ url }) =>
|
|
38
35
|
Effect.suspend(() => (document ? document(url) : Effect.fail(new NotFound({ message: "The document is missing." })))).pipe(documentBoundary),
|
|
36
|
+
"work-board.handoff": ({ url }) => remaining.handoff(url).pipe(documentBoundary),
|
|
39
37
|
"work-board.handoffSource": ({ item }) => Effect.suspend(() => handoffs.locate(item)).pipe(responseBoundary),
|
|
40
38
|
"work-board.handoffs": ({ item }) => Effect.suspend(() => handoffs.read(item)).pipe(responseBoundary),
|
|
41
39
|
"work-board.history": ({ action, baseline }) =>
|
|
@@ -44,21 +42,26 @@ export const handlers = Effect.fn("WorkBoard.handlers")(function* ({ changes, do
|
|
|
44
42
|
const snapshot = action === "check" ? undefined : yield* index;
|
|
45
43
|
return historyResponse(baseline, now, snapshot);
|
|
46
44
|
}).pipe(readBoundary),
|
|
45
|
+
"work-board.inbox": () => Effect.suspend(() => projections.inbox()).pipe(readBoundary),
|
|
47
46
|
"work-board.navigation": ({ current }) =>
|
|
48
47
|
Effect.gen(function* () {
|
|
49
48
|
return navigationData(yield* changes.files, current, home, yield* index);
|
|
50
49
|
}).pipe(readBoundary),
|
|
51
|
-
"work-board.
|
|
50
|
+
"work-board.overview": () => Effect.suspend(() => projections.overview()).pipe(readBoundary),
|
|
52
51
|
"work-board.prepareHandoff": (input) => Effect.suspend(() => handoffs.prepare(input)).pipe(responseBoundary),
|
|
53
52
|
"work-board.question": ({ item, request }) => Effect.suspend(() => responses.locate(item, request)).pipe(responseBoundary),
|
|
54
53
|
"work-board.recordResponse": (input) => Effect.suspend(() => responses.record(input)).pipe(responseBoundary),
|
|
55
54
|
"work-board.registerQuestion": (input) => Effect.suspend(() => responses.register(input)).pipe(responseBoundary),
|
|
55
|
+
"work-board.respond": ({ url }) => remaining.respond(url).pipe(documentBoundary),
|
|
56
56
|
"work-board.responses": ({ question }) => Effect.suspend(() => responses.read(question)).pipe(responseBoundary),
|
|
57
|
+
"work-board.result": ({ url }) => remaining.result(url).pipe(documentBoundary),
|
|
57
58
|
"work-board.search": ({ query }) =>
|
|
58
59
|
Effect.map(index, (snapshot) => ({ ...searchMatch(snapshot.entries, query), unavailable: snapshot.unavailable })).pipe(readBoundary),
|
|
60
|
+
"work-board.start": () => remaining.start().pipe(readBoundary),
|
|
59
61
|
"work-board.subscribe": () =>
|
|
60
62
|
hints(changes, index).pipe(Stream.catchCause((cause) => Stream.fromEffect(Effect.failCause(cause).pipe(readBoundary)))),
|
|
61
63
|
"work-board.watcher": () => Effect.map(Ref.get(changes.watching), (watching) => ({ watching })).pipe(readBoundary),
|
|
64
|
+
"work-board.work": ({ url }) => Effect.suspend(() => projections.work(url)).pipe(documentBoundary),
|
|
62
65
|
})
|
|
63
66
|
.pipe(Layer.provideMerge(requestTracingLayer()));
|
|
64
67
|
});
|
package/src/server/serve-cli.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { NodeRuntime, NodeServices } from "@effect/platform-node";
|
|
3
3
|
import { Effect, Layer, Option, Path } from "effect";
|
|
4
|
-
import { Argument, Command, Flag } from "effect/
|
|
4
|
+
import { Argument, Command, Flag } from "effect/cli";
|
|
5
5
|
import { DAEMON_PORT } from "#diagnostics/daemonContract.ts";
|
|
6
6
|
import { HOST, serveBoard } from "./serve.ts";
|
|
7
7
|
|
|
8
|
-
const VERSION = "0.
|
|
8
|
+
const VERSION = "0.13.0";
|
|
9
9
|
|
|
10
10
|
const serve = Effect.fn("WorkBoard.serve")(function* (input: {
|
|
11
11
|
readonly dir: string;
|
|
@@ -31,15 +31,15 @@ const serve = Effect.fn("WorkBoard.serve")(function* (input: {
|
|
|
31
31
|
const workBoard = Command.make(
|
|
32
32
|
"work-board",
|
|
33
33
|
{
|
|
34
|
-
dir: Argument.
|
|
35
|
-
fleetPort: Flag.
|
|
36
|
-
home: Flag.
|
|
37
|
-
maintainer: Flag.
|
|
34
|
+
dir: Argument.Directory("dir", { mustExist: true }).pipe(Argument.withDescription("The folder of markdown files to serve")),
|
|
35
|
+
fleetPort: Flag.Int("fleet-port").pipe(Flag.withDefault(DAEMON_PORT), Flag.withDescription("Fleet daemon port for Diagnostics at 127.0.0.1")),
|
|
36
|
+
home: Flag.String("home").pipe(Flag.optional, Flag.withDescription("The file shown as a board at /, relative to the folder")),
|
|
37
|
+
maintainer: Flag.String("maintainer").pipe(
|
|
38
38
|
Flag.withDefault("maintainer"),
|
|
39
39
|
Flag.withDescription("The response_from label whose questions appear in the Inbox"),
|
|
40
40
|
),
|
|
41
|
-
port: Flag.
|
|
42
|
-
responses: Flag.
|
|
41
|
+
port: Flag.Int("port").pipe(Flag.withDefault(4747), Flag.withDescription(`The port to listen on at ${HOST}`)),
|
|
42
|
+
responses: Flag.Boolean("responses").pipe(
|
|
43
43
|
Flag.withDefault(false),
|
|
44
44
|
Flag.withDescription("Explicitly enable local durable question, response and handoff writes (Linux)"),
|
|
45
45
|
),
|
package/src/server/serve.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { Effect, Layer } from "effect";
|
|
2
|
+
import { appHost } from "@shivaedev/platform/appHost.ts";
|
|
3
|
+
import { workRpcs } from "#rpc/contract.ts";
|
|
4
|
+
import { boardRuntime } from "#server/boardRuntime.ts";
|
|
5
|
+
import { MAX_BYTES } from "#server/history/limits.ts";
|
|
6
|
+
import { boardRoutes } from "#server/http/boardRoutes.ts";
|
|
7
|
+
import { RPC_PATH, rpcPolicy } from "#server/http/rpcPolicy.ts";
|
|
8
|
+
import { Highlighter } from "#server/render/Highlighter.ts";
|
|
9
|
+
import type { BoardOptions } from "./board.ts";
|
|
6
10
|
|
|
7
11
|
export const HOST = "127.0.0.1";
|
|
8
12
|
|
|
@@ -10,10 +14,19 @@ export interface ServeOptions extends BoardOptions {
|
|
|
10
14
|
readonly port: number;
|
|
11
15
|
}
|
|
12
16
|
|
|
13
|
-
export function listenOn(port: number) {
|
|
14
|
-
return NodeHttpServer.layer(createServer, { disablePreemptiveShutdown: true, host: HOST, port });
|
|
15
|
-
}
|
|
16
|
-
|
|
17
17
|
export function serveBoard(options: ServeOptions) {
|
|
18
|
-
return
|
|
18
|
+
return Layer.unwrap(
|
|
19
|
+
Effect.gen(function* () {
|
|
20
|
+
const runtime = yield* boardRuntime(options);
|
|
21
|
+
return appHost({
|
|
22
|
+
config: { disablePreemptiveShutdown: true, host: HOST, maxBodySize: 4 * MAX_BYTES + 4096, port: options.port },
|
|
23
|
+
group: workRpcs,
|
|
24
|
+
handlers: runtime.rpcHandlers,
|
|
25
|
+
policy: "loopback",
|
|
26
|
+
routes: Layer.merge(boardRoutes(options, runtime), rpcPolicy),
|
|
27
|
+
rpcPath: RPC_PATH,
|
|
28
|
+
services: Layer.empty,
|
|
29
|
+
});
|
|
30
|
+
}),
|
|
31
|
+
).pipe(Layer.provide(Highlighter.layer));
|
|
19
32
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { NotFound } from "@shivaedev/platform/errors/taxonomy.ts";
|
|
3
|
+
import type { BoardProjection, InboxProjection, OverviewProjection, WorkProjection } from "#browser/views/schema.ts";
|
|
4
|
+
import { stateOf } from "#browser/views/state.ts";
|
|
5
|
+
import { inboxItems } from "#server/attention/inbox.ts";
|
|
6
|
+
import { attentionRequests } from "#server/attention/requests.ts";
|
|
7
|
+
import { identityUrl, referenceTarget } from "#server/metadata/links.ts";
|
|
8
|
+
import { boardOf, countsOf } from "#server/render/board.ts";
|
|
9
|
+
import type { HandlerOptions } from "#server/rpc/HandlerOptions.ts";
|
|
10
|
+
import type { Snapshot } from "#server/search/snapshot.ts";
|
|
11
|
+
import type { Item } from "./items.ts";
|
|
12
|
+
import { projectItems } from "./projection.ts";
|
|
13
|
+
|
|
14
|
+
export function projectionQueries({ index, document }: { readonly index: HandlerOptions["index"]; readonly document: HandlerOptions["document"] }) {
|
|
15
|
+
function read(url: string) {
|
|
16
|
+
return document ? document(url) : Effect.fail(new NotFound({ message: "The document is missing." }));
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
board: (url: string) => Effect.map(read(url), (data): BoardProjection => ({ counts: countsOf(boardOf(data.source)), document: data })),
|
|
20
|
+
inbox: () => Effect.map(index, inboxProjection),
|
|
21
|
+
overview: () => Effect.map(index, overviewProjection),
|
|
22
|
+
work: (url: string) =>
|
|
23
|
+
Effect.gen(function* () {
|
|
24
|
+
const snapshot = yield* index;
|
|
25
|
+
const state = stateOf(url);
|
|
26
|
+
const projection = projectItems(snapshot, state);
|
|
27
|
+
const waiting = new Map(
|
|
28
|
+
inboxItems(snapshot)
|
|
29
|
+
.filter((entry) => !entry.problem)
|
|
30
|
+
.map((entry) => [entry.id, entry.reason]),
|
|
31
|
+
);
|
|
32
|
+
function toItem({ document: source, id, title }: Item) {
|
|
33
|
+
return { file: source.file, id, metadata: source.parsed.fields, title, waiting: waiting.get(id) };
|
|
34
|
+
}
|
|
35
|
+
const selected = projection.selected ? yield* read(identityUrl(projection.selected.id)) : undefined;
|
|
36
|
+
return {
|
|
37
|
+
boards: projection.boards.map(toItem),
|
|
38
|
+
issues: projection.issues,
|
|
39
|
+
items: projection.items.map(toItem),
|
|
40
|
+
rows: projection.rows.map(toItem),
|
|
41
|
+
selected,
|
|
42
|
+
selectedOutside: projection.selectedOutside,
|
|
43
|
+
selectionProblem: !state.item || selected ? undefined : selectionProblem(snapshot, state.item),
|
|
44
|
+
state,
|
|
45
|
+
title: projection.title,
|
|
46
|
+
validBoard: projection.validBoard,
|
|
47
|
+
} satisfies WorkProjection;
|
|
48
|
+
}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function inboxProjection(snapshot: Snapshot): InboxProjection {
|
|
52
|
+
return {
|
|
53
|
+
complete: snapshot.unavailable.length === 0,
|
|
54
|
+
items: inboxItems(snapshot).map(({ document, ...item }) => ({ ...item, file: document.file })),
|
|
55
|
+
sourceIssues: snapshot.model.documents.some((document) => (snapshot.model.diagnostics.get(document.file)?.length ?? 0) > 0),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function overviewProjection(snapshot: Snapshot): OverviewProjection {
|
|
59
|
+
const projection = attentionRequests(snapshot);
|
|
60
|
+
return {
|
|
61
|
+
...projection,
|
|
62
|
+
entries: projection.entries.map(({ document, request, ...entry }) => ({
|
|
63
|
+
...entry,
|
|
64
|
+
file: document.file,
|
|
65
|
+
id: request.id,
|
|
66
|
+
kind: request.kind,
|
|
67
|
+
reason: request.reason,
|
|
68
|
+
responseFrom: request.responseFrom,
|
|
69
|
+
unblocks: request.unblocks.map((target) => ({ href: referenceTarget(target, snapshot.model), label: target })),
|
|
70
|
+
})),
|
|
71
|
+
inboxCount: inboxItems(snapshot).length,
|
|
72
|
+
unavailable: snapshot.unavailable,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function selectionProblem(snapshot: Snapshot, item: string) {
|
|
77
|
+
return (snapshot.model.ids.get(item)?.length ?? 0) > 1 ? "has a duplicate ID" : "is missing or its identity changed";
|
|
78
|
+
}
|