@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
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Effect } from "effect";
|
|
2
|
-
import { HttpIncomingMessage, HttpServerResponse } from "effect/unstable/http";
|
|
3
|
-
import { RpcSerialization, RpcServer } from "effect/unstable/rpc";
|
|
4
|
-
import { localRpcGuard } from "@shivaedev/platform/rpc-server/local.ts";
|
|
5
|
-
import { workRpcs } from "#rpc/contract.ts";
|
|
6
|
-
import { MAX_BYTES } from "#server/history/limits.ts";
|
|
7
|
-
import { HEADERS } from "#server/http/respond.ts";
|
|
8
|
-
import { handlers } from "./handlers.js";
|
|
9
|
-
export const server = Effect.fn("WorkBoard.server")(function* (options) {
|
|
10
|
-
const rpcHandlers = yield* handlers(options);
|
|
11
|
-
const wire = RpcSerialization.ndjson;
|
|
12
|
-
const handler = yield* RpcServer.toHttpEffect(workRpcs).pipe(Effect.provide(rpcHandlers), Effect.provideService(RpcSerialization.RpcSerialization, wire));
|
|
13
|
-
return handler.pipe(localRpcGuard, Effect.provideService(RpcSerialization.RpcSerialization, wire), Effect.provideService(HttpIncomingMessage.MaxBodySize, BigInt(4 * MAX_BYTES + 4096)), Effect.map((response) => HttpServerResponse.setHeaders(response, HEADERS)));
|
|
14
|
-
});
|
|
15
|
-
//# sourceMappingURL=transport.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/server/rpc/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAUzC,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAsB;IACpF,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAC9D,CAAC;IACF,OAAO,OAAO,CAAC,IAAI,CAClB,aAAa,EACb,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAC9D,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,EACpF,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAC1E,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { routeQueryOptions } from "#client/page/routeQuery.ts";
|
|
2
|
-
import { resetLabel } from "#diagnostics/resetLabel.ts";
|
|
3
|
-
|
|
4
|
-
export function diagnosticsScript(): string {
|
|
5
|
-
return `
|
|
6
|
-
import { session } from "/_board/native.js";
|
|
7
|
-
const resetLabel = ${resetLabel.toString()};
|
|
8
|
-
const localizeResets = () => {
|
|
9
|
-
for (const time of document.querySelectorAll("time[data-reset]")) {
|
|
10
|
-
time.textContent = resetLabel(Date.parse(time.dateTime), Date.now());
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
localizeResets();
|
|
14
|
-
document.addEventListener("board-page", localizeResets);
|
|
15
|
-
const refresh = () => {
|
|
16
|
-
if (location.pathname !== "/_board/diagnostics" || document.visibilityState === "hidden") return;
|
|
17
|
-
const native = session(window);
|
|
18
|
-
const page = native.api.page.query({ url: location.pathname + location.search }, ${JSON.stringify(routeQueryOptions)});
|
|
19
|
-
if (!native.registry.get(native.updates.paused) && !native.registry.get(page).waiting) native.registry.refresh(page);
|
|
20
|
-
};
|
|
21
|
-
let timer = setInterval(refresh, 15000);
|
|
22
|
-
document.addEventListener("visibilitychange", refresh);
|
|
23
|
-
document.addEventListener("board-updates-resumed", refresh);
|
|
24
|
-
window.addEventListener("pagehide", () => clearInterval(timer));
|
|
25
|
-
window.addEventListener("pageshow", (event) => {
|
|
26
|
-
if (!event.persisted) return;
|
|
27
|
-
clearInterval(timer);
|
|
28
|
-
timer = setInterval(refresh, 15000);
|
|
29
|
-
});
|
|
30
|
-
`;
|
|
31
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import * as AtomRegistry from "effect/unstable/reactivity/AtomRegistry";
|
|
2
|
-
import type { Fields, Form, Name } from "@shivaedev/effect-form/shape.ts";
|
|
3
|
-
|
|
4
|
-
type Control = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;
|
|
5
|
-
|
|
6
|
-
export function fieldFeedback<TFields extends Fields, A, E, TRuntimeError>(
|
|
7
|
-
form: Form<TFields, A, E, TRuntimeError>,
|
|
8
|
-
owner: ReturnType<typeof formOwner>,
|
|
9
|
-
fields: ReadonlyArray<{ readonly name: Name<TFields>; readonly control?: Control | undefined }>,
|
|
10
|
-
paths: ReadonlyArray<{ readonly path: readonly [Name<TFields>, ...PropertyKey[]]; readonly control: Control }> = [],
|
|
11
|
-
) {
|
|
12
|
-
const releases = fields.map(({ name, control }) =>
|
|
13
|
-
owner.registry.subscribe(form.error(name), (message) => control?.setCustomValidity(message ?? ""), { immediate: true }),
|
|
14
|
-
);
|
|
15
|
-
for (const { path, control } of paths) {
|
|
16
|
-
releases.push(owner.registry.subscribe(form.errorAt(path), (message) => control.setCustomValidity(message ?? ""), { immediate: true }));
|
|
17
|
-
}
|
|
18
|
-
owner.signal.addEventListener(
|
|
19
|
-
"abort",
|
|
20
|
-
() => {
|
|
21
|
-
for (const release of releases) {
|
|
22
|
-
release();
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
{ once: true },
|
|
26
|
-
);
|
|
27
|
-
return () => {
|
|
28
|
-
for (const { name } of fields) {
|
|
29
|
-
form.blur(name);
|
|
30
|
-
}
|
|
31
|
-
return fields.every(({ name }) => owner.registry.get(form.error(name)) === undefined);
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function formOwner(dom: HTMLFormElement) {
|
|
36
|
-
const controller = new AbortController();
|
|
37
|
-
const registry = AtomRegistry.make();
|
|
38
|
-
function release() {
|
|
39
|
-
controller.abort();
|
|
40
|
-
registry.dispose();
|
|
41
|
-
delete dom.dataset.bound;
|
|
42
|
-
document.removeEventListener("board-page", unmounted);
|
|
43
|
-
window.removeEventListener("pagehide", release);
|
|
44
|
-
}
|
|
45
|
-
function unmounted() {
|
|
46
|
-
if (!dom.isConnected) {
|
|
47
|
-
release();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
document.addEventListener("board-page", unmounted);
|
|
51
|
-
window.addEventListener("pagehide", release);
|
|
52
|
-
return { registry, release, signal: controller.signal };
|
|
53
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
const bound = new WeakSet<HTMLButtonElement>();
|
|
2
|
-
export function copyPrompts(root: ParentNode) {
|
|
3
|
-
for (const button of root.querySelectorAll<HTMLButtonElement>("[data-handoff-copy]")) {
|
|
4
|
-
if (bound.has(button)) {
|
|
5
|
-
continue;
|
|
6
|
-
}
|
|
7
|
-
bound.add(button);
|
|
8
|
-
button.addEventListener("click", async () => {
|
|
9
|
-
const field = document.getElementById(button.dataset.handoffCopy ?? "");
|
|
10
|
-
const status = button.parentElement?.querySelector("[data-copy-status]");
|
|
11
|
-
if (!(field instanceof HTMLTextAreaElement && status)) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
try {
|
|
15
|
-
await navigator.clipboard.writeText(field.value);
|
|
16
|
-
status.textContent = "Prompt copied. Paste it into your existing agent session.";
|
|
17
|
-
} catch {
|
|
18
|
-
field.focus();
|
|
19
|
-
field.select();
|
|
20
|
-
status.textContent = "Clipboard unavailable. The prompt is selected; copy it manually.";
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export function preparedPrompt(container: HTMLElement, id: string, prompt: string) {
|
|
26
|
-
const label = document.createElement("label");
|
|
27
|
-
label.textContent = "Prompt for your existing agent session";
|
|
28
|
-
const field = document.createElement("textarea");
|
|
29
|
-
field.id = `handoff-prompt-${id}`;
|
|
30
|
-
field.readOnly = true;
|
|
31
|
-
field.rows = 3;
|
|
32
|
-
field.value = prompt;
|
|
33
|
-
label.append(field);
|
|
34
|
-
const button = document.createElement("button");
|
|
35
|
-
button.type = "button";
|
|
36
|
-
button.dataset.handoffCopy = field.id;
|
|
37
|
-
button.textContent = "Copy tiny prompt";
|
|
38
|
-
const status = document.createElement("p");
|
|
39
|
-
status.dataset.copyStatus = "";
|
|
40
|
-
status.setAttribute("role", "status");
|
|
41
|
-
status.textContent = "Prepared; receipt not confirmed. Copy the prompt to your agent.";
|
|
42
|
-
container.replaceChildren(label, button, status);
|
|
43
|
-
container.hidden = false;
|
|
44
|
-
copyPrompts(container);
|
|
45
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Option, Schema } from "effect";
|
|
2
|
-
import type { Draft } from "#client/responses/drafts.ts";
|
|
3
|
-
|
|
4
|
-
const TextFields = Schema.Struct({ constraints: Schema.String, goal: Schema.String, nextAction: Schema.String });
|
|
5
|
-
export function handoffFields(form: HTMLFormElement) {
|
|
6
|
-
const recipient = form.elements.namedItem("recipient");
|
|
7
|
-
const goal = form.elements.namedItem("goal");
|
|
8
|
-
const constraints = form.elements.namedItem("constraints");
|
|
9
|
-
const nextAction = form.elements.namedItem("nextAction");
|
|
10
|
-
if (
|
|
11
|
-
!(
|
|
12
|
-
recipient instanceof HTMLInputElement
|
|
13
|
-
&& goal instanceof HTMLTextAreaElement
|
|
14
|
-
&& constraints instanceof HTMLTextAreaElement
|
|
15
|
-
&& nextAction instanceof HTMLTextAreaElement
|
|
16
|
-
)
|
|
17
|
-
) {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
return { constraints, goal, nextAction, recipient };
|
|
21
|
-
}
|
|
22
|
-
export function restoreFields(fields: NonNullable<ReturnType<typeof handoffFields>>, draft: Draft) {
|
|
23
|
-
if (!draft.body) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
try {
|
|
27
|
-
const saved = Schema.decodeUnknownOption(TextFields)(JSON.parse(draft.body));
|
|
28
|
-
if (Option.isSome(saved)) {
|
|
29
|
-
fields.constraints.value = saved.value.constraints;
|
|
30
|
-
fields.goal.value = saved.value.goal;
|
|
31
|
-
fields.nextAction.value = saved.value.nextAction;
|
|
32
|
-
fields.recipient.value = draft.author;
|
|
33
|
-
}
|
|
34
|
-
} catch {
|
|
35
|
-
fields.goal.value = draft.body;
|
|
36
|
-
fields.recipient.value = draft.author;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Effect, Layer } from "effect";
|
|
2
|
-
import * as Atom from "effect/unstable/reactivity/Atom";
|
|
3
|
-
import { make } from "@shivaedev/effect-form/form.ts";
|
|
4
|
-
import { type Handoff, HandoffInput } from "#browser/handoffs/schema.ts";
|
|
5
|
-
import { fieldFeedback, type formOwner } from "#client/fieldFeedback.ts";
|
|
6
|
-
import type { Draft } from "#client/responses/drafts.ts";
|
|
7
|
-
import type { handoffFields } from "./fields.ts";
|
|
8
|
-
|
|
9
|
-
export function handoffForm(
|
|
10
|
-
dom: HTMLFormElement,
|
|
11
|
-
fields: NonNullable<ReturnType<typeof handoffFields>>,
|
|
12
|
-
draft: Draft,
|
|
13
|
-
owner: ReturnType<typeof formOwner>,
|
|
14
|
-
onSubmit: (input: HandoffInput) => Promise<Handoff>,
|
|
15
|
-
) {
|
|
16
|
-
const model = make(HandoffInput, {
|
|
17
|
-
initialValues: {
|
|
18
|
-
constraints: fields.constraints.value,
|
|
19
|
-
goal: fields.goal.value,
|
|
20
|
-
id: draft.id,
|
|
21
|
-
item: dom.dataset.item ?? "",
|
|
22
|
-
nextAction: fields.nextAction.value,
|
|
23
|
-
recipient: fields.recipient.value,
|
|
24
|
-
revision: draft.revision,
|
|
25
|
-
source: dom.dataset.source ?? "",
|
|
26
|
-
},
|
|
27
|
-
onSubmit: (input) => Effect.tryPromise({ catch: (error) => error, try: () => onSubmit(input) }),
|
|
28
|
-
runtime: Atom.runtime(Layer.empty),
|
|
29
|
-
});
|
|
30
|
-
const valid = fieldFeedback(model, owner, [
|
|
31
|
-
{ control: fields.constraints, name: "constraints" },
|
|
32
|
-
{ control: fields.goal, name: "goal" },
|
|
33
|
-
{ control: fields.nextAction, name: "nextAction" },
|
|
34
|
-
{ control: fields.recipient, name: "recipient" },
|
|
35
|
-
{ name: "id" },
|
|
36
|
-
{ name: "item" },
|
|
37
|
-
{ name: "revision" },
|
|
38
|
-
{ name: "source" },
|
|
39
|
-
]);
|
|
40
|
-
return { model, valid };
|
|
41
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { Effect, Schema } from "effect";
|
|
2
|
-
import * as AtomRegistry from "effect/unstable/reactivity/AtomRegistry";
|
|
3
|
-
import { InternalServerError } from "@shivaedev/platform/errors/taxonomy.ts";
|
|
4
|
-
import { formOwner } from "#client/fieldFeedback.ts";
|
|
5
|
-
import { copyPrompts, preparedPrompt } from "#client/handoffs/copy.ts";
|
|
6
|
-
import { handoffFields, restoreFields } from "#client/handoffs/fields.ts";
|
|
7
|
-
import { draftSession } from "#client/responses/draftSession.ts";
|
|
8
|
-
import { session } from "#client/session.ts";
|
|
9
|
-
import { PublicationUncertain, ResponseRejection } from "#rpc/rejections.ts";
|
|
10
|
-
import { handoffForm } from "./form.ts";
|
|
11
|
-
|
|
12
|
-
function attach() {
|
|
13
|
-
const doc = document.getElementById("doc");
|
|
14
|
-
if (doc?.dataset.view !== "handoff") {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
copyPrompts(doc);
|
|
18
|
-
const form = doc.querySelector<HTMLFormElement>("#handoff-form");
|
|
19
|
-
if (!form || form.dataset.bound === "true") {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
const found = handoffFields(form);
|
|
23
|
-
const status = form.querySelector<HTMLParagraphElement>("#handoff-status");
|
|
24
|
-
const preview = form.querySelector<HTMLPreElement>("#handoff-preview-content");
|
|
25
|
-
const previewButton = form.querySelector<HTMLButtonElement>("#handoff-preview");
|
|
26
|
-
const submit = form.querySelector<HTMLButtonElement>("#handoff-submit");
|
|
27
|
-
const clear = form.querySelector<HTMLButtonElement>("#handoff-clear");
|
|
28
|
-
const prepared = form.querySelector<HTMLElement>("#handoff-prepared");
|
|
29
|
-
if (!(found && status && preview && previewButton && submit && clear && prepared)) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
const fields = found;
|
|
33
|
-
form.dataset.bound = "true";
|
|
34
|
-
const revision = form.dataset.revision ?? "";
|
|
35
|
-
const question = form.dataset.question ?? "";
|
|
36
|
-
let storage: Storage | undefined;
|
|
37
|
-
try {
|
|
38
|
-
storage = window.localStorage;
|
|
39
|
-
} catch {
|
|
40
|
-
storage = undefined;
|
|
41
|
-
}
|
|
42
|
-
if (status.textContent?.includes("JavaScript is required")) {
|
|
43
|
-
status.textContent = "Draft ready. Review and preview before preparing the file.";
|
|
44
|
-
}
|
|
45
|
-
const drafts = draftSession(
|
|
46
|
-
`handoff:${form.dataset.item}`,
|
|
47
|
-
revision,
|
|
48
|
-
storage,
|
|
49
|
-
`work-board:drafts:${document.documentElement.dataset.workspace}`,
|
|
50
|
-
(message) => {
|
|
51
|
-
status.textContent = message;
|
|
52
|
-
},
|
|
53
|
-
"handoff",
|
|
54
|
-
);
|
|
55
|
-
let draft = drafts.current();
|
|
56
|
-
restoreFields(fields, draft);
|
|
57
|
-
const owner = formOwner(form);
|
|
58
|
-
let pending = draft;
|
|
59
|
-
const { model, valid } = handoffForm(form, fields, draft, owner, async (input) => {
|
|
60
|
-
const native = session(window);
|
|
61
|
-
const saved = await native.mutate(native.handoffs.prepareHandoff.run(input));
|
|
62
|
-
const cleared = drafts.saved(pending);
|
|
63
|
-
draft = drafts.current();
|
|
64
|
-
if (form.isConnected) {
|
|
65
|
-
status.textContent = `Prepared: ${saved.file}. Receipt: ${saved.handoff.state}; execution and acceptance remain separate.${cleared ? "" : " Your newer draft remains unsaved."}`;
|
|
66
|
-
preparedPrompt(prepared, saved.id, saved.prompt);
|
|
67
|
-
}
|
|
68
|
-
return saved;
|
|
69
|
-
});
|
|
70
|
-
function save() {
|
|
71
|
-
model.change("recipient", fields.recipient.value);
|
|
72
|
-
model.change("constraints", fields.constraints.value);
|
|
73
|
-
model.change("goal", fields.goal.value);
|
|
74
|
-
model.change("nextAction", fields.nextAction.value);
|
|
75
|
-
const values = model.values.value;
|
|
76
|
-
draft = drafts.update({
|
|
77
|
-
author: values.recipient,
|
|
78
|
-
body: JSON.stringify({ constraints: values.constraints, goal: values.goal, nextAction: values.nextAction }),
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
form.addEventListener(
|
|
82
|
-
"input",
|
|
83
|
-
() => {
|
|
84
|
-
save();
|
|
85
|
-
preview.hidden = true;
|
|
86
|
-
submit.disabled = true;
|
|
87
|
-
},
|
|
88
|
-
{ signal: owner.signal },
|
|
89
|
-
);
|
|
90
|
-
previewButton.disabled = false;
|
|
91
|
-
clear.disabled = false;
|
|
92
|
-
clear.addEventListener("click", drafts.clear, { signal: owner.signal });
|
|
93
|
-
previewButton.addEventListener(
|
|
94
|
-
"click",
|
|
95
|
-
() => {
|
|
96
|
-
save();
|
|
97
|
-
draft = drafts.update({
|
|
98
|
-
id: draft.revision === revision && (!draft.question || draft.question === question) ? draft.id : `handoff.${crypto.randomUUID()}`,
|
|
99
|
-
question,
|
|
100
|
-
revision,
|
|
101
|
-
});
|
|
102
|
-
model.change("id", draft.id);
|
|
103
|
-
model.change("revision", revision);
|
|
104
|
-
const input = model.values.value;
|
|
105
|
-
preview.textContent = `New file: handoffs/${input.id}.md\nPrepared time and reviewed snapshot are assigned by the server.\n\n---\n${JSON.stringify({ handoff: { constraints: input.constraints, goal: input.goal, item: input.item, "next_action": input.nextAction, recipient: input.recipient, "reviewed_revision": input.revision, source: input.source, state: "requested" }, id: input.id, kind: "handoff" }, null, 2)}\n---\nThe complete reviewed source is preserved below the frontmatter.`;
|
|
106
|
-
preview.hidden = false;
|
|
107
|
-
submit.disabled = form.dataset.writable !== "true" || !valid();
|
|
108
|
-
},
|
|
109
|
-
{ signal: owner.signal },
|
|
110
|
-
);
|
|
111
|
-
form.addEventListener(
|
|
112
|
-
"submit",
|
|
113
|
-
async (event) => {
|
|
114
|
-
event.preventDefault();
|
|
115
|
-
if (submit.disabled || !valid() || !form.reportValidity()) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
pending = draft;
|
|
119
|
-
submit.disabled = true;
|
|
120
|
-
previewButton.disabled = true;
|
|
121
|
-
status.textContent = "Pending: preparing the local handoff file…";
|
|
122
|
-
owner.registry.set(model.submit, undefined);
|
|
123
|
-
try {
|
|
124
|
-
await Effect.runPromise(AtomRegistry.getResult(owner.registry, model.submit, { suspendOnWaiting: true }));
|
|
125
|
-
} catch (error) {
|
|
126
|
-
if (form.isConnected) {
|
|
127
|
-
status.textContent = failureStatus(error);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
previewButton.disabled = false;
|
|
131
|
-
},
|
|
132
|
-
{ signal: owner.signal },
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
function failureStatus(error: unknown) {
|
|
136
|
-
return `${Schema.is(ResponseRejection)(error) && !(error instanceof PublicationUncertain) && !(error instanceof InternalServerError) ? "Rejected" : "Uncertain"}: ${String(error)}. Draft retained; preview and retry.`;
|
|
137
|
-
}
|
|
138
|
-
export function setupHandoffs() {
|
|
139
|
-
document.addEventListener("board-page", attach);
|
|
140
|
-
window.addEventListener("pageshow", attach);
|
|
141
|
-
attach();
|
|
142
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
export function historyScript(): string {
|
|
2
|
-
return `
|
|
3
|
-
import { swap, remember } from "/_board/swap.js";
|
|
4
|
-
import { captureReading, restoreReading } from "/_board/reading-state.js";
|
|
5
|
-
import { session } from "/_board/native.js";
|
|
6
|
-
const key = "work-board:changes:" + document.documentElement.dataset.workspace;
|
|
7
|
-
let memory;
|
|
8
|
-
let storageNotice = "";
|
|
9
|
-
let unavailableHtml = "";
|
|
10
|
-
let generation = 0;
|
|
11
|
-
let controller;
|
|
12
|
-
let observing = null;
|
|
13
|
-
const baseline = () => {
|
|
14
|
-
if (memory !== undefined) return memory;
|
|
15
|
-
try { return localStorage.getItem(key); }
|
|
16
|
-
catch { memory = null; storageNotice = "Browser storage unavailable; history applies to this page only."; return memory; }
|
|
17
|
-
};
|
|
18
|
-
const forget = () => {
|
|
19
|
-
memory = null;
|
|
20
|
-
try { localStorage.removeItem(key); memory = undefined; }
|
|
21
|
-
catch { storageNotice = "Cleared for this page, but browser storage could not be cleared. Reload may restore older data."; }
|
|
22
|
-
};
|
|
23
|
-
const keep = (raw) => {
|
|
24
|
-
memory = raw;
|
|
25
|
-
try { localStorage.setItem(key, raw); memory = undefined; storageNotice = ""; }
|
|
26
|
-
catch {
|
|
27
|
-
storageNotice = "Snapshot remembered for this page only; browser storage is unavailable.";
|
|
28
|
-
try { localStorage.removeItem(key); }
|
|
29
|
-
catch { storageNotice += " Reload may restore older data."; }
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const controls = (available, busy = false) => {
|
|
33
|
-
const mark = document.getElementById("history-mark");
|
|
34
|
-
const clear = document.getElementById("history-clear");
|
|
35
|
-
if (!mark || !clear) return;
|
|
36
|
-
const exists = baseline() !== null;
|
|
37
|
-
mark.textContent = exists ? "Mark current workspace seen" : "Start remembering changes";
|
|
38
|
-
mark.disabled = busy || !available;
|
|
39
|
-
clear.disabled = busy || !exists;
|
|
40
|
-
document.getElementById("history-storage").textContent = storageNotice;
|
|
41
|
-
};
|
|
42
|
-
const render = (html) => {
|
|
43
|
-
const content = document.getElementById("changes-content");
|
|
44
|
-
if (!content) return;
|
|
45
|
-
const reading = captureReading();
|
|
46
|
-
const next = content.cloneNode(false);
|
|
47
|
-
next.innerHTML = html;
|
|
48
|
-
swap(content, next);
|
|
49
|
-
remember(content);
|
|
50
|
-
restoreReading({ ...reading, selection: null }, false);
|
|
51
|
-
};
|
|
52
|
-
const query = async (action) => {
|
|
53
|
-
const mine = ++generation;
|
|
54
|
-
controller?.abort();
|
|
55
|
-
controller = new AbortController();
|
|
56
|
-
const raw = baseline();
|
|
57
|
-
const native = session(window);
|
|
58
|
-
const payload = { action, baseline: raw };
|
|
59
|
-
const atom = native.api.history.query(payload);
|
|
60
|
-
if (action !== "observe") native.registry.refresh(atom);
|
|
61
|
-
const result = action === "observe" ? await native.run(native.api.history.run(payload), controller.signal) : await native.read(atom, controller.signal);
|
|
62
|
-
if (mine !== generation) return null;
|
|
63
|
-
if (result.discardBaseline && baseline() === raw) { forget(); unavailableHtml = result.html; }
|
|
64
|
-
return result;
|
|
65
|
-
};
|
|
66
|
-
const refresh = async (manual = false) => {
|
|
67
|
-
if (observing !== null) return;
|
|
68
|
-
const paused = session(window).registry.get(session(window).updates.paused) && manual !== true;
|
|
69
|
-
const visible = document.getElementById("doc")?.dataset.view === "changes" && !paused;
|
|
70
|
-
try {
|
|
71
|
-
const result = await query(visible ? "compare" : "check");
|
|
72
|
-
if (!result) return;
|
|
73
|
-
if ((visible || result.discardBaseline) && document.getElementById("doc")?.dataset.view === "changes") {
|
|
74
|
-
render(baseline() === null && unavailableHtml ? unavailableHtml : result.html);
|
|
75
|
-
controls(result.snapshot !== null);
|
|
76
|
-
}
|
|
77
|
-
} catch (error) {
|
|
78
|
-
if (error.name === "AbortError") return;
|
|
79
|
-
if (visible) {
|
|
80
|
-
render("<p>History is unavailable: the current observation could not be loaded. No comparison or removals are inferred.</p>");
|
|
81
|
-
controls(false);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
document.addEventListener("click", async (event) => {
|
|
86
|
-
if (event.target.closest?.("#history-clear")) {
|
|
87
|
-
observing = null;
|
|
88
|
-
++generation;
|
|
89
|
-
controller?.abort();
|
|
90
|
-
forget();
|
|
91
|
-
unavailableHtml = "";
|
|
92
|
-
await refresh(true);
|
|
93
|
-
}
|
|
94
|
-
if (event.target.closest?.("#history-mark")) {
|
|
95
|
-
if (observing !== null) return;
|
|
96
|
-
const mine = generation + 1;
|
|
97
|
-
observing = mine;
|
|
98
|
-
controls(false, true);
|
|
99
|
-
try {
|
|
100
|
-
const result = await query("observe");
|
|
101
|
-
if (!result) return;
|
|
102
|
-
if (result.snapshot === null) { render(result.html); controls(false); return; }
|
|
103
|
-
keep(result.snapshot);
|
|
104
|
-
unavailableHtml = "";
|
|
105
|
-
} catch (error) {
|
|
106
|
-
if (error.name !== "AbortError") { render("<p>Could not remember the current observation. Your previous baseline is preserved.</p>"); controls(false); }
|
|
107
|
-
return;
|
|
108
|
-
} finally { if (observing === mine) observing = null; }
|
|
109
|
-
await refresh(true);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
window.addEventListener("pagehide", () => { ++generation; observing = null; controller?.abort(); });
|
|
113
|
-
document.addEventListener("board-page", refresh);
|
|
114
|
-
document.addEventListener("board-updates-resumed", refresh);
|
|
115
|
-
document.addEventListener("visibilitychange", () => { if (!document.hidden) refresh(); });
|
|
116
|
-
window.addEventListener("storage", (event) => {
|
|
117
|
-
if (event.key === key || event.key === null) {
|
|
118
|
-
observing = null;
|
|
119
|
-
++generation;
|
|
120
|
-
controller?.abort();
|
|
121
|
-
memory = undefined; storageNotice = ""; unavailableHtml = ""; refresh(true);
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
setInterval(() => { if (baseline() !== null) refresh(); }, 60000);
|
|
125
|
-
refresh();
|
|
126
|
-
`;
|
|
127
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface RouterBridge {
|
|
2
|
-
readonly before: (listener: () => void) => void;
|
|
3
|
-
readonly navigate: (url: string) => Promise<void>;
|
|
4
|
-
readonly subscribe: (listener: () => void) => void;
|
|
5
|
-
}
|
|
6
|
-
export async function legacyRuntime(): Promise<{ readonly connectRouter: (router: RouterBridge) => void }> {
|
|
7
|
-
const client = "/_board/client.js";
|
|
8
|
-
const navigation = "/_board/navigation.js";
|
|
9
|
-
await import(client);
|
|
10
|
-
return import(navigation);
|
|
11
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export function ageScript() {
|
|
2
|
-
return `
|
|
3
|
-
const since = (modified) => {
|
|
4
|
-
const seconds = Math.max(0, Math.round((Date.now() - modified) / 1000));
|
|
5
|
-
if (seconds < 60) return seconds + "s";
|
|
6
|
-
if (seconds < 3600) return Math.round(seconds / 60) + "m";
|
|
7
|
-
if (seconds < 172800) return Math.round(seconds / 3600) + "h";
|
|
8
|
-
return Math.round(seconds / 86400) + "d";
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const tick = () => {
|
|
12
|
-
for (const age of document.querySelectorAll("[data-modified]")) {
|
|
13
|
-
const ago = since(Number(age.dataset.modified));
|
|
14
|
-
age.textContent = age.classList.contains("short") ? ago : "updated " + ago + " ago";
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
document.addEventListener("board-page", tick);
|
|
19
|
-
tick();
|
|
20
|
-
setInterval(tick, 5000);
|
|
21
|
-
`;
|
|
22
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export function formReadingScript(): string {
|
|
2
|
-
return `
|
|
3
|
-
const captureResponseFocus = () => {
|
|
4
|
-
const control = document.activeElement;
|
|
5
|
-
if (!(control instanceof HTMLTextAreaElement || control instanceof HTMLInputElement && control.type === "text") || !control.closest("#response-form")) return null;
|
|
6
|
-
return {
|
|
7
|
-
name: control.name,
|
|
8
|
-
prompt: control.closest("[data-prompt]")?.dataset.prompt,
|
|
9
|
-
start: control.selectionStart,
|
|
10
|
-
end: control.selectionEnd,
|
|
11
|
-
direction: control.selectionDirection,
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
const restoreResponseFocus = (state) => {
|
|
15
|
-
if (!state) return;
|
|
16
|
-
const form = document.getElementById("response-form");
|
|
17
|
-
const control = state.prompt
|
|
18
|
-
? [...(form?.querySelectorAll("[data-prompt]") ?? [])].find((field) => field.dataset.prompt === state.prompt)?.querySelector("textarea")
|
|
19
|
-
: form?.elements.namedItem(state.name);
|
|
20
|
-
if (!control) return;
|
|
21
|
-
control.focus({ preventScroll: true });
|
|
22
|
-
if (state.start !== null && state.end !== null && control.setSelectionRange) control.setSelectionRange(state.start, state.end, state.direction);
|
|
23
|
-
};
|
|
24
|
-
`;
|
|
25
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export function itemContextScript(): string {
|
|
2
|
-
return `
|
|
3
|
-
const contextIsWide = () => matchMedia("(min-width: 1100px)").matches;
|
|
4
|
-
let contextWide = contextIsWide();
|
|
5
|
-
let contextFile;
|
|
6
|
-
const syncContexts = (reset = false) => {
|
|
7
|
-
const file = document.getElementById("doc").dataset.file;
|
|
8
|
-
for (const context of document.querySelectorAll(".item-context")) {
|
|
9
|
-
if (reset || file !== contextFile) context.open = contextWide;
|
|
10
|
-
}
|
|
11
|
-
contextFile = file;
|
|
12
|
-
};
|
|
13
|
-
syncContexts();
|
|
14
|
-
window.addEventListener("resize", () => {
|
|
15
|
-
const wide = contextIsWide();
|
|
16
|
-
if (wide !== contextWide) { contextWide = wide; syncContexts(true); }
|
|
17
|
-
});
|
|
18
|
-
document.addEventListener("board-page", () => syncContexts());
|
|
19
|
-
`;
|
|
20
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
export function libraryScript(): string {
|
|
2
|
-
return `
|
|
3
|
-
const root = document.documentElement;
|
|
4
|
-
const key = "work-board:library:" + root.dataset.workspace;
|
|
5
|
-
const library = document.getElementById("reading-library");
|
|
6
|
-
const dialog = document.getElementById("library-dialog");
|
|
7
|
-
const opener = document.getElementById("library-open");
|
|
8
|
-
opener.disabled = false;
|
|
9
|
-
opener.addEventListener("click", () => dialog.showModal());
|
|
10
|
-
document.getElementById("library-close").addEventListener("click", () => dialog.close());
|
|
11
|
-
dialog.addEventListener("close", () => opener.focus({ preventScroll: true }));
|
|
12
|
-
dialog.addEventListener("click", (event) => {
|
|
13
|
-
if (event.target.closest?.("a[href]")) dialog.close();
|
|
14
|
-
if (event.target !== dialog) return;
|
|
15
|
-
const bounds = dialog.getBoundingClientRect();
|
|
16
|
-
if (event.clientX < bounds.left || event.clientX > bounds.right || event.clientY < bounds.top || event.clientY > bounds.bottom) dialog.close();
|
|
17
|
-
});
|
|
18
|
-
let favorites = [];
|
|
19
|
-
let recents = [];
|
|
20
|
-
let notice = "";
|
|
21
|
-
const valid = (items) => Array.isArray(items) ? items.filter((item) => item && typeof item.file === "string" && item.file !== "" && typeof item.title === "string") : [];
|
|
22
|
-
try {
|
|
23
|
-
const saved = JSON.parse(localStorage.getItem(key) ?? "{}");
|
|
24
|
-
favorites = valid(saved?.favorites);
|
|
25
|
-
recents = valid(saved?.recents);
|
|
26
|
-
} catch { notice = "Reading history applies to this page only."; }
|
|
27
|
-
const save = () => {
|
|
28
|
-
try { localStorage.setItem(key, JSON.stringify({ favorites, recents })); notice = ""; }
|
|
29
|
-
catch { notice = "Reading history applies to this page only."; }
|
|
30
|
-
};
|
|
31
|
-
const hrefOf = (file) => "/" + file.split("/").map(encodeURIComponent).join("/");
|
|
32
|
-
const list = (title, items) => {
|
|
33
|
-
const heading = document.createElement("h2");
|
|
34
|
-
heading.className = "nav-heading";
|
|
35
|
-
heading.textContent = title;
|
|
36
|
-
const ul = document.createElement("ul");
|
|
37
|
-
const available = new Set([...document.querySelectorAll("#files a")].map((a) => new URL(a.href).pathname));
|
|
38
|
-
for (const item of items) {
|
|
39
|
-
const li = document.createElement("li");
|
|
40
|
-
const a = document.createElement("a");
|
|
41
|
-
a.href = hrefOf(item.file);
|
|
42
|
-
a.textContent = item.title;
|
|
43
|
-
if (item.file === document.getElementById("doc").dataset.file) a.setAttribute("aria-current", "page");
|
|
44
|
-
if (!available.has(a.pathname)) {
|
|
45
|
-
a.textContent += " (missing)";
|
|
46
|
-
a.className = "missing";
|
|
47
|
-
}
|
|
48
|
-
li.append(a); ul.append(li);
|
|
49
|
-
}
|
|
50
|
-
return [heading, ul];
|
|
51
|
-
};
|
|
52
|
-
export const refreshLibrary = (visit = false) => {
|
|
53
|
-
const doc = document.getElementById("doc");
|
|
54
|
-
const title = doc.querySelector("h1")?.textContent.trim() || doc.dataset.file;
|
|
55
|
-
document.title = title ? title + " · Work Board" : "Work Board";
|
|
56
|
-
const active = document.querySelector('#files a[aria-current="page"]');
|
|
57
|
-
if (active) active.title = title;
|
|
58
|
-
const toggle = document.getElementById("favorite-toggle");
|
|
59
|
-
if (toggle) {
|
|
60
|
-
const saved = favorites.some((item) => item.file === doc.dataset.file);
|
|
61
|
-
toggle.disabled = false;
|
|
62
|
-
toggle.setAttribute("aria-pressed", String(saved));
|
|
63
|
-
toggle.textContent = saved ? "Remove favorite" : "Save favorite";
|
|
64
|
-
if (visit) {
|
|
65
|
-
recents = [{ file: doc.dataset.file, title }, ...recents.filter((item) => item.file !== doc.dataset.file)].slice(0, 10);
|
|
66
|
-
save();
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const status = document.createElement("p");
|
|
70
|
-
status.className = "library-status";
|
|
71
|
-
status.setAttribute("role", "status");
|
|
72
|
-
status.textContent = notice;
|
|
73
|
-
library.replaceChildren(...(favorites.length ? list("Favorites", favorites) : []), ...(recents.length ? list("Recent documents", recents) : []), ...(notice ? [status] : []));
|
|
74
|
-
if (favorites.length === 0 && recents.length === 0 && notice === "") library.textContent = "No recent documents yet.";
|
|
75
|
-
};
|
|
76
|
-
document.addEventListener("click", (event) => {
|
|
77
|
-
if (!event.target.closest?.("#favorite-toggle")) return;
|
|
78
|
-
const doc = document.getElementById("doc");
|
|
79
|
-
const file = doc.dataset.file;
|
|
80
|
-
favorites = favorites.some((item) => item.file === file) ? favorites.filter((item) => item.file !== file) : [...favorites, { file, title: doc.querySelector("h1")?.textContent.trim() || file }];
|
|
81
|
-
save(); refreshLibrary();
|
|
82
|
-
});
|
|
83
|
-
`;
|
|
84
|
-
}
|