@buoy-gg/ask-buoy 7.0.34 → 7.0.36
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/README.md +35 -8
- package/lib/commonjs/blocks/AskBlocks.js +338 -1
- package/lib/commonjs/blocks/AskBlocks.js.map +1 -0
- package/lib/commonjs/blocks/BlockRenderer.js +262 -1
- package/lib/commonjs/blocks/BlockRenderer.js.map +1 -0
- package/lib/commonjs/blocks/ChromePrototypes.js +514 -1
- package/lib/commonjs/blocks/ChromePrototypes.js.map +1 -0
- package/lib/commonjs/blocks/DataBlocks.js +781 -1
- package/lib/commonjs/blocks/DataBlocks.js.map +1 -0
- package/lib/commonjs/blocks/ExtraBlocks.js +1860 -1
- package/lib/commonjs/blocks/ExtraBlocks.js.map +1 -0
- package/lib/commonjs/blocks/MediaBlocks.js +156 -1
- package/lib/commonjs/blocks/MediaBlocks.js.map +1 -0
- package/lib/commonjs/blocks/ReceiptBlocks.js +586 -1
- package/lib/commonjs/blocks/ReceiptBlocks.js.map +1 -0
- package/lib/commonjs/blocks/blockText.js +60 -0
- package/lib/commonjs/blocks/blockText.js.map +1 -0
- package/lib/commonjs/blocks/blockText.test.js +53 -0
- package/lib/commonjs/blocks/blockText.test.js.map +1 -0
- package/lib/commonjs/blocks/context.js +42 -1
- package/lib/commonjs/blocks/context.js.map +1 -0
- package/lib/commonjs/blocks/icons.js +96 -1
- package/lib/commonjs/blocks/icons.js.map +1 -0
- package/lib/commonjs/blocks/index.js +95 -1
- package/lib/commonjs/blocks/index.js.map +1 -0
- package/lib/commonjs/blocks/listRow.test.js +55 -0
- package/lib/commonjs/blocks/listRow.test.js.map +1 -0
- package/lib/commonjs/blocks/pageState.js +34 -0
- package/lib/commonjs/blocks/pageState.js.map +1 -0
- package/lib/commonjs/blocks/pageState.test.js +57 -0
- package/lib/commonjs/blocks/pageState.test.js.map +1 -0
- package/lib/commonjs/blocks/primitives.js +457 -1
- package/lib/commonjs/blocks/primitives.js.map +1 -0
- package/lib/commonjs/blocks/primitivesIndex.js +62 -1
- package/lib/commonjs/blocks/primitivesIndex.js.map +1 -0
- package/lib/commonjs/components/ApprovalCard.js +244 -1
- package/lib/commonjs/components/ApprovalCard.js.map +1 -0
- package/lib/commonjs/components/AskBuoyHeader.js +196 -1
- package/lib/commonjs/components/AskBuoyHeader.js.map +1 -0
- package/lib/commonjs/components/AskBuoyIcon.js +19 -1
- package/lib/commonjs/components/AskBuoyIcon.js.map +1 -0
- package/lib/commonjs/components/AskBuoyModal.js +479 -1
- package/lib/commonjs/components/AskBuoyModal.js.map +1 -0
- package/lib/commonjs/components/AskBuoySettings.js +119 -0
- package/lib/commonjs/components/AskBuoySettings.js.map +1 -0
- package/lib/commonjs/components/ChangesBar.js +211 -1
- package/lib/commonjs/components/ChangesBar.js.map +1 -0
- package/lib/commonjs/components/Composer.js +255 -1
- package/lib/commonjs/components/Composer.js.map +1 -0
- package/lib/commonjs/components/EmptyState.js +161 -1
- package/lib/commonjs/components/EmptyState.js.map +1 -0
- package/lib/commonjs/components/KeyboardPad.js +80 -0
- package/lib/commonjs/components/KeyboardPad.js.map +1 -0
- package/lib/commonjs/components/Markdown.js +310 -1
- package/lib/commonjs/components/Markdown.js.map +1 -0
- package/lib/commonjs/components/MessageList.js +930 -1
- package/lib/commonjs/components/MessageList.js.map +1 -0
- package/lib/commonjs/components/QueuedMessages.js +145 -0
- package/lib/commonjs/components/QueuedMessages.js.map +1 -0
- package/lib/commonjs/components/ThinkingStrip.js +223 -0
- package/lib/commonjs/components/ThinkingStrip.js.map +1 -0
- package/lib/commonjs/components/TypingDots.js +63 -1
- package/lib/commonjs/components/TypingDots.js.map +1 -0
- package/lib/commonjs/components/markdownParse.js +131 -0
- package/lib/commonjs/components/markdownParse.js.map +1 -0
- package/lib/commonjs/components/markdownParse.test.js +99 -0
- package/lib/commonjs/components/markdownParse.test.js.map +1 -0
- package/lib/commonjs/components/useCopyAction.js +50 -0
- package/lib/commonjs/components/useCopyAction.js.map +1 -0
- package/lib/commonjs/index.js +252 -1
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/preset.js +90 -1
- package/lib/commonjs/preset.js.map +1 -0
- package/lib/commonjs/store/activityGroups.js +110 -0
- package/lib/commonjs/store/activityGroups.js.map +1 -0
- package/lib/commonjs/store/activityGroups.test.js +78 -0
- package/lib/commonjs/store/activityGroups.test.js.map +1 -0
- package/lib/commonjs/store/askBuoySettings.js +72 -0
- package/lib/commonjs/store/askBuoySettings.js.map +1 -0
- package/lib/commonjs/store/askBuoyStore.js +547 -1
- package/lib/commonjs/store/askBuoyStore.js.map +1 -0
- package/lib/commonjs/store/blockPlacement.js +64 -0
- package/lib/commonjs/store/blockPlacement.js.map +1 -0
- package/lib/commonjs/store/blockPlacement.test.js +123 -0
- package/lib/commonjs/store/blockPlacement.test.js.map +1 -0
- package/lib/commonjs/store/queue.test.js +150 -0
- package/lib/commonjs/store/queue.test.js.map +1 -0
- package/lib/commonjs/store/resetConversation.js +77 -0
- package/lib/commonjs/store/resetConversation.js.map +1 -0
- package/lib/commonjs/store/restorePending.test.js +63 -0
- package/lib/commonjs/store/restorePending.test.js.map +1 -0
- package/lib/commonjs/store/restoredIds.test.js +47 -0
- package/lib/commonjs/store/restoredIds.test.js.map +1 -0
- package/lib/commonjs/store/suggestions.js +54 -0
- package/lib/commonjs/store/suggestions.js.map +1 -0
- package/lib/commonjs/store/suggestions.test.js +58 -0
- package/lib/commonjs/store/suggestions.test.js.map +1 -0
- package/lib/commonjs/store/systemLine.test.js +77 -0
- package/lib/commonjs/store/systemLine.test.js.map +1 -0
- package/lib/commonjs/store/ticketPrompt.js +17 -0
- package/lib/commonjs/store/ticketPrompt.js.map +1 -0
- package/lib/commonjs/store/traceText.js +81 -0
- package/lib/commonjs/store/traceText.js.map +1 -0
- package/lib/commonjs/store/traceText.test.js +112 -0
- package/lib/commonjs/store/traceText.test.js.map +1 -0
- package/lib/commonjs/store/transcriptPersistence.js +297 -0
- package/lib/commonjs/store/transcriptPersistence.js.map +1 -0
- package/lib/commonjs/store/transcriptPersistence.test.js +333 -0
- package/lib/commonjs/store/transcriptPersistence.test.js.map +1 -0
- package/lib/commonjs/store/turnRendering.test.js +151 -0
- package/lib/commonjs/store/turnRendering.test.js.map +1 -0
- package/lib/commonjs/store/useAskBuoy.js +622 -1
- package/lib/commonjs/store/useAskBuoy.js.map +1 -0
- package/lib/commonjs/store/useAskBuoySettings.js +14 -0
- package/lib/commonjs/store/useAskBuoySettings.js.map +1 -0
- package/lib/commonjs/sync/askBuoySyncAdapter.js +140 -1
- package/lib/commonjs/sync/askBuoySyncAdapter.js.map +1 -0
- package/lib/commonjs/sync/askBuoySyncAdapter.test.js +141 -1
- package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +1 -0
- package/lib/commonjs/sync/wire.js +58 -1
- package/lib/commonjs/sync/wire.js.map +1 -0
- package/lib/commonjs/types.js +6 -1
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/blocks/AskBlocks.js +331 -1
- package/lib/module/blocks/AskBlocks.js.map +1 -0
- package/lib/module/blocks/BlockRenderer.js +257 -1
- package/lib/module/blocks/BlockRenderer.js.map +1 -0
- package/lib/module/blocks/ChromePrototypes.js +503 -1
- package/lib/module/blocks/ChromePrototypes.js.map +1 -0
- package/lib/module/blocks/DataBlocks.js +767 -1
- package/lib/module/blocks/DataBlocks.js.map +1 -0
- package/lib/module/blocks/ExtraBlocks.js +1833 -1
- package/lib/module/blocks/ExtraBlocks.js.map +1 -0
- package/lib/module/blocks/MediaBlocks.js +151 -1
- package/lib/module/blocks/MediaBlocks.js.map +1 -0
- package/lib/module/blocks/ReceiptBlocks.js +574 -1
- package/lib/module/blocks/ReceiptBlocks.js.map +1 -0
- package/lib/module/blocks/blockText.js +55 -0
- package/lib/module/blocks/blockText.js.map +1 -0
- package/lib/module/blocks/blockText.test.js +53 -0
- package/lib/module/blocks/blockText.test.js.map +1 -0
- package/lib/module/blocks/context.js +35 -1
- package/lib/module/blocks/context.js.map +1 -0
- package/lib/module/blocks/icons.js +91 -1
- package/lib/module/blocks/icons.js.map +1 -0
- package/lib/module/blocks/index.js +8 -1
- package/lib/module/blocks/index.js.map +1 -0
- package/lib/module/blocks/listRow.test.js +56 -0
- package/lib/module/blocks/listRow.test.js.map +1 -0
- package/lib/module/blocks/pageState.js +30 -0
- package/lib/module/blocks/pageState.js.map +1 -0
- package/lib/module/blocks/pageState.test.js +56 -0
- package/lib/module/blocks/pageState.test.js.map +1 -0
- package/lib/module/blocks/primitives.js +445 -1
- package/lib/module/blocks/primitives.js.map +1 -0
- package/lib/module/blocks/primitivesIndex.js +5 -1
- package/lib/module/blocks/primitivesIndex.js.map +1 -0
- package/lib/module/components/ApprovalCard.js +239 -1
- package/lib/module/components/ApprovalCard.js.map +1 -0
- package/lib/module/components/AskBuoyHeader.js +193 -1
- package/lib/module/components/AskBuoyHeader.js.map +1 -0
- package/lib/module/components/AskBuoyIcon.js +8 -1
- package/lib/module/components/AskBuoyIcon.js.map +1 -0
- package/lib/module/components/AskBuoyModal.js +474 -1
- package/lib/module/components/AskBuoyModal.js.map +1 -0
- package/lib/module/components/AskBuoySettings.js +114 -0
- package/lib/module/components/AskBuoySettings.js.map +1 -0
- package/lib/module/components/ChangesBar.js +206 -1
- package/lib/module/components/ChangesBar.js.map +1 -0
- package/lib/module/components/Composer.js +250 -1
- package/lib/module/components/Composer.js.map +1 -0
- package/lib/module/components/EmptyState.js +156 -1
- package/lib/module/components/EmptyState.js.map +1 -0
- package/lib/module/components/KeyboardPad.js +75 -0
- package/lib/module/components/KeyboardPad.js.map +1 -0
- package/lib/module/components/Markdown.js +305 -1
- package/lib/module/components/Markdown.js.map +1 -0
- package/lib/module/components/MessageList.js +924 -1
- package/lib/module/components/MessageList.js.map +1 -0
- package/lib/module/components/QueuedMessages.js +140 -0
- package/lib/module/components/QueuedMessages.js.map +1 -0
- package/lib/module/components/ThinkingStrip.js +218 -0
- package/lib/module/components/ThinkingStrip.js.map +1 -0
- package/lib/module/components/TypingDots.js +58 -1
- package/lib/module/components/TypingDots.js.map +1 -0
- package/lib/module/components/markdownParse.js +125 -0
- package/lib/module/components/markdownParse.js.map +1 -0
- package/lib/module/components/markdownParse.test.js +98 -0
- package/lib/module/components/markdownParse.test.js.map +1 -0
- package/lib/module/components/useCopyAction.js +46 -0
- package/lib/module/components/useCopyAction.js.map +1 -0
- package/lib/module/index.js +34 -1
- package/lib/module/index.js.map +1 -0
- package/lib/module/preset.js +73 -1
- package/lib/module/preset.js.map +1 -0
- package/lib/module/store/activityGroups.js +103 -0
- package/lib/module/store/activityGroups.js.map +1 -0
- package/lib/module/store/activityGroups.test.js +77 -0
- package/lib/module/store/activityGroups.test.js.map +1 -0
- package/lib/module/store/askBuoySettings.js +67 -0
- package/lib/module/store/askBuoySettings.js.map +1 -0
- package/lib/module/store/askBuoyStore.js +541 -1
- package/lib/module/store/askBuoyStore.js.map +1 -0
- package/lib/module/store/blockPlacement.js +59 -0
- package/lib/module/store/blockPlacement.js.map +1 -0
- package/lib/module/store/blockPlacement.test.js +122 -0
- package/lib/module/store/blockPlacement.test.js.map +1 -0
- package/lib/module/store/queue.test.js +149 -0
- package/lib/module/store/queue.test.js.map +1 -0
- package/lib/module/store/resetConversation.js +72 -0
- package/lib/module/store/resetConversation.js.map +1 -0
- package/lib/module/store/restorePending.test.js +62 -0
- package/lib/module/store/restorePending.test.js.map +1 -0
- package/lib/module/store/restoredIds.test.js +46 -0
- package/lib/module/store/restoredIds.test.js.map +1 -0
- package/lib/module/store/suggestions.js +49 -0
- package/lib/module/store/suggestions.js.map +1 -0
- package/lib/module/store/suggestions.test.js +57 -0
- package/lib/module/store/suggestions.test.js.map +1 -0
- package/lib/module/store/systemLine.test.js +76 -0
- package/lib/module/store/systemLine.test.js.map +1 -0
- package/lib/module/store/ticketPrompt.js +13 -0
- package/lib/module/store/ticketPrompt.js.map +1 -0
- package/lib/module/store/traceText.js +75 -0
- package/lib/module/store/traceText.js.map +1 -0
- package/lib/module/store/traceText.test.js +111 -0
- package/lib/module/store/traceText.test.js.map +1 -0
- package/lib/module/store/transcriptPersistence.js +287 -0
- package/lib/module/store/transcriptPersistence.js.map +1 -0
- package/lib/module/store/transcriptPersistence.test.js +332 -0
- package/lib/module/store/transcriptPersistence.test.js.map +1 -0
- package/lib/module/store/turnRendering.test.js +150 -0
- package/lib/module/store/turnRendering.test.js.map +1 -0
- package/lib/module/store/useAskBuoy.js +616 -1
- package/lib/module/store/useAskBuoy.js.map +1 -0
- package/lib/module/store/useAskBuoySettings.js +9 -0
- package/lib/module/store/useAskBuoySettings.js.map +1 -0
- package/lib/module/sync/askBuoySyncAdapter.js +135 -1
- package/lib/module/sync/askBuoySyncAdapter.js.map +1 -0
- package/lib/module/sync/askBuoySyncAdapter.test.js +140 -1
- package/lib/module/sync/askBuoySyncAdapter.test.js.map +1 -0
- package/lib/module/sync/wire.js +47 -1
- package/lib/module/sync/wire.js.map +1 -0
- package/lib/module/types.js +4 -1
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/blocks/AskBlocks.d.ts.map +1 -0
- package/lib/typescript/blocks/BlockRenderer.d.ts.map +1 -0
- package/lib/typescript/blocks/ChromePrototypes.d.ts.map +1 -0
- package/lib/typescript/blocks/DataBlocks.d.ts +42 -0
- package/lib/typescript/blocks/DataBlocks.d.ts.map +1 -0
- package/lib/typescript/blocks/ExtraBlocks.d.ts +29 -2
- package/lib/typescript/blocks/ExtraBlocks.d.ts.map +1 -0
- package/lib/typescript/blocks/MediaBlocks.d.ts.map +1 -0
- package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +1 -0
- package/lib/typescript/blocks/blockText.d.ts +14 -0
- package/lib/typescript/blocks/blockText.d.ts.map +1 -0
- package/lib/typescript/blocks/blockText.test.d.ts +2 -0
- package/lib/typescript/blocks/blockText.test.d.ts.map +1 -0
- package/lib/typescript/blocks/context.d.ts.map +1 -0
- package/lib/typescript/blocks/icons.d.ts.map +1 -0
- package/lib/typescript/blocks/index.d.ts.map +1 -0
- package/lib/typescript/blocks/listRow.test.d.ts +2 -0
- package/lib/typescript/blocks/listRow.test.d.ts.map +1 -0
- package/lib/typescript/blocks/pageState.d.ts +23 -0
- package/lib/typescript/blocks/pageState.d.ts.map +1 -0
- package/lib/typescript/blocks/pageState.test.d.ts +2 -0
- package/lib/typescript/blocks/pageState.test.d.ts.map +1 -0
- package/lib/typescript/blocks/primitives.d.ts +55 -10
- package/lib/typescript/blocks/primitives.d.ts.map +1 -0
- package/lib/typescript/blocks/primitivesIndex.d.ts +2 -1
- package/lib/typescript/blocks/primitivesIndex.d.ts.map +1 -0
- package/lib/typescript/components/ApprovalCard.d.ts.map +1 -0
- package/lib/typescript/components/AskBuoyHeader.d.ts +41 -1
- package/lib/typescript/components/AskBuoyHeader.d.ts.map +1 -0
- package/lib/typescript/components/AskBuoyIcon.d.ts.map +1 -0
- package/lib/typescript/components/AskBuoyModal.d.ts.map +1 -0
- package/lib/typescript/components/AskBuoySettings.d.ts +2 -0
- package/lib/typescript/components/AskBuoySettings.d.ts.map +1 -0
- package/lib/typescript/components/ChangesBar.d.ts.map +1 -0
- package/lib/typescript/components/Composer.d.ts +16 -1
- package/lib/typescript/components/Composer.d.ts.map +1 -0
- package/lib/typescript/components/EmptyState.d.ts +5 -1
- package/lib/typescript/components/EmptyState.d.ts.map +1 -0
- package/lib/typescript/components/KeyboardPad.d.ts +33 -0
- package/lib/typescript/components/KeyboardPad.d.ts.map +1 -0
- package/lib/typescript/components/Markdown.d.ts +0 -10
- package/lib/typescript/components/Markdown.d.ts.map +1 -0
- package/lib/typescript/components/MessageList.d.ts +19 -7
- package/lib/typescript/components/MessageList.d.ts.map +1 -0
- package/lib/typescript/components/QueuedMessages.d.ts +10 -0
- package/lib/typescript/components/QueuedMessages.d.ts.map +1 -0
- package/lib/typescript/components/ThinkingStrip.d.ts +5 -0
- package/lib/typescript/components/ThinkingStrip.d.ts.map +1 -0
- package/lib/typescript/components/TypingDots.d.ts.map +1 -0
- package/lib/typescript/components/markdownParse.d.ts +49 -0
- package/lib/typescript/components/markdownParse.d.ts.map +1 -0
- package/lib/typescript/components/markdownParse.test.d.ts +2 -0
- package/lib/typescript/components/markdownParse.test.d.ts.map +1 -0
- package/lib/typescript/components/useCopyAction.d.ts +5 -0
- package/lib/typescript/components/useCopyAction.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +5 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/preset.d.ts.map +1 -0
- package/lib/typescript/store/activityGroups.d.ts +29 -0
- package/lib/typescript/store/activityGroups.d.ts.map +1 -0
- package/lib/typescript/store/activityGroups.test.d.ts +2 -0
- package/lib/typescript/store/activityGroups.test.d.ts.map +1 -0
- package/lib/typescript/store/askBuoySettings.d.ts +44 -0
- package/lib/typescript/store/askBuoySettings.d.ts.map +1 -0
- package/lib/typescript/store/askBuoyStore.d.ts +216 -18
- package/lib/typescript/store/askBuoyStore.d.ts.map +1 -0
- package/lib/typescript/store/blockPlacement.d.ts +30 -0
- package/lib/typescript/store/blockPlacement.d.ts.map +1 -0
- package/lib/typescript/store/blockPlacement.test.d.ts +2 -0
- package/lib/typescript/store/blockPlacement.test.d.ts.map +1 -0
- package/lib/typescript/store/queue.test.d.ts +2 -0
- package/lib/typescript/store/queue.test.d.ts.map +1 -0
- package/lib/typescript/store/resetConversation.d.ts +38 -0
- package/lib/typescript/store/resetConversation.d.ts.map +1 -0
- package/lib/typescript/store/restorePending.test.d.ts +2 -0
- package/lib/typescript/store/restorePending.test.d.ts.map +1 -0
- package/lib/typescript/store/restoredIds.test.d.ts +2 -0
- package/lib/typescript/store/restoredIds.test.d.ts.map +1 -0
- package/lib/typescript/store/suggestions.d.ts +32 -0
- package/lib/typescript/store/suggestions.d.ts.map +1 -0
- package/lib/typescript/store/suggestions.test.d.ts +2 -0
- package/lib/typescript/store/suggestions.test.d.ts.map +1 -0
- package/lib/typescript/store/systemLine.test.d.ts +2 -0
- package/lib/typescript/store/systemLine.test.d.ts.map +1 -0
- package/lib/typescript/store/ticketPrompt.d.ts +11 -0
- package/lib/typescript/store/ticketPrompt.d.ts.map +1 -0
- package/lib/typescript/store/traceText.d.ts +33 -0
- package/lib/typescript/store/traceText.d.ts.map +1 -0
- package/lib/typescript/store/traceText.test.d.ts +2 -0
- package/lib/typescript/store/traceText.test.d.ts.map +1 -0
- package/lib/typescript/store/transcriptPersistence.d.ts +79 -0
- package/lib/typescript/store/transcriptPersistence.d.ts.map +1 -0
- package/lib/typescript/store/transcriptPersistence.test.d.ts +2 -0
- package/lib/typescript/store/transcriptPersistence.test.d.ts.map +1 -0
- package/lib/typescript/store/turnRendering.test.d.ts +2 -0
- package/lib/typescript/store/turnRendering.test.d.ts.map +1 -0
- package/lib/typescript/store/useAskBuoy.d.ts +23 -1
- package/lib/typescript/store/useAskBuoy.d.ts.map +1 -0
- package/lib/typescript/store/useAskBuoySettings.d.ts +3 -0
- package/lib/typescript/store/useAskBuoySettings.d.ts.map +1 -0
- package/lib/typescript/sync/askBuoySyncAdapter.d.ts +26 -6
- package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +1 -0
- package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +1 -0
- package/lib/typescript/sync/wire.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +24 -1
- package/lib/typescript/types.d.ts.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Blocks as plain text — for Copy, and for the ticket draft's own Copy.
|
|
5
|
+
*
|
|
6
|
+
* `transcriptToText` used to serialise prose and tool rows only, so a
|
|
7
|
+
* conversation whose whole point was the finding card at the end pasted into
|
|
8
|
+
* Jira WITHOUT the finding. Covers the kinds that carry facts a person would
|
|
9
|
+
* paste; everything else becomes one line naming what was on screen, so the
|
|
10
|
+
* paste says a card existed rather than silently skipping it.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const cellText = c => typeof c === "string" ? c : c.text;
|
|
14
|
+
export function blockToText(block) {
|
|
15
|
+
switch (block.kind) {
|
|
16
|
+
case "finding":
|
|
17
|
+
return [block.title, ...block.evidence.map(e => `${e.label}: ${e.value}`)].join("\n");
|
|
18
|
+
case "keyValue":
|
|
19
|
+
return [block.title, ...block.pairs.map(p => `${p.key}: ${typeof p.value === "string" ? p.value : JSON.stringify(p.value)}`)].filter(Boolean).join("\n");
|
|
20
|
+
case "table":
|
|
21
|
+
{
|
|
22
|
+
const head = block.columns.join(" | ");
|
|
23
|
+
const rows = block.rows.map(r => r.map(cellText).join(" | "));
|
|
24
|
+
const more = block.total && block.total > block.rows.length ? `… ${block.total - block.rows.length} more rows` : null;
|
|
25
|
+
return [block.title, head, ...rows, more].filter(Boolean).join("\n");
|
|
26
|
+
}
|
|
27
|
+
case "list":
|
|
28
|
+
{
|
|
29
|
+
const rows = block.items.map(i => `- ${i.title}${i.subtitle ? ` — ${i.subtitle}` : ""}${i.trailing ? ` (${i.trailing})` : ""}`);
|
|
30
|
+
const more = block.total && block.total > block.items.length ? `… ${block.total - block.items.length} more` : null;
|
|
31
|
+
return [block.title, ...rows, more].filter(Boolean).join("\n");
|
|
32
|
+
}
|
|
33
|
+
case "notice":
|
|
34
|
+
return block.text;
|
|
35
|
+
case "claim":
|
|
36
|
+
return block.text;
|
|
37
|
+
case "diff":
|
|
38
|
+
case "chart":
|
|
39
|
+
case "imageGrid":
|
|
40
|
+
case "requestList":
|
|
41
|
+
case "requestCard":
|
|
42
|
+
case "logList":
|
|
43
|
+
case "crash":
|
|
44
|
+
case "screenElements":
|
|
45
|
+
return `[${block.kind} card${"title" in block && typeof block.title === "string" ? `: ${block.title}` : ""}]`;
|
|
46
|
+
default:
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Several blocks, blank-line separated, skipping the ones with nothing to say. */
|
|
52
|
+
export function blocksToText(blocks) {
|
|
53
|
+
return blocks.map(blockToText).filter(t => !!t);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=blockText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["cellText","c","text","blockToText","block","kind","title","evidence","map","e","label","value","join","pairs","p","key","JSON","stringify","filter","Boolean","head","columns","rows","r","more","total","length","items","i","subtitle","trailing","blocksToText","blocks","t"],"sourceRoot":"../../../src","sources":["blocks/blockText.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { blockToText, blocksToText } from "./blockText";
|
|
5
|
+
describe("blockToText", () => {
|
|
6
|
+
it("writes a finding as title and evidence rows", () => {
|
|
7
|
+
expect(blockToText({
|
|
8
|
+
id: "f1",
|
|
9
|
+
kind: "finding",
|
|
10
|
+
title: "Bag screen empty after /api/bag 500",
|
|
11
|
+
evidence: [{
|
|
12
|
+
label: "Steps",
|
|
13
|
+
value: "Open Bag as user 4412"
|
|
14
|
+
}, {
|
|
15
|
+
label: "Observed",
|
|
16
|
+
value: "empty state, no error shown",
|
|
17
|
+
tone: "danger"
|
|
18
|
+
}]
|
|
19
|
+
})).toBe("Bag screen empty after /api/bag 500\nSteps: Open Bag as user 4412\nObserved: empty state, no error shown");
|
|
20
|
+
});
|
|
21
|
+
it("writes a table with its cut noted", () => {
|
|
22
|
+
expect(blockToText({
|
|
23
|
+
id: "t1",
|
|
24
|
+
kind: "table",
|
|
25
|
+
columns: ["Item", "Qty"],
|
|
26
|
+
rows: [["Charizard", {
|
|
27
|
+
text: "14"
|
|
28
|
+
}]],
|
|
29
|
+
total: 30
|
|
30
|
+
})).toBe("Item | Qty\nCharizard | 14\n… 29 more rows");
|
|
31
|
+
});
|
|
32
|
+
it("names a card it cannot flatten instead of skipping it", () => {
|
|
33
|
+
expect(blockToText({
|
|
34
|
+
id: "d1",
|
|
35
|
+
kind: "diff",
|
|
36
|
+
title: "Bag store",
|
|
37
|
+
before: {},
|
|
38
|
+
after: {}
|
|
39
|
+
})).toBe("[diff card: Bag store]");
|
|
40
|
+
});
|
|
41
|
+
it("drops blocks with nothing to say", () => {
|
|
42
|
+
expect(blocksToText([{
|
|
43
|
+
id: "p",
|
|
44
|
+
kind: "peek"
|
|
45
|
+
}, {
|
|
46
|
+
id: "n",
|
|
47
|
+
kind: "notice",
|
|
48
|
+
tone: "info",
|
|
49
|
+
text: "hi"
|
|
50
|
+
}])).toEqual(["hi"]);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=blockText.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","blockToText","blocksToText","id","kind","title","evidence","label","value","tone","toBe","columns","rows","text","total","before","after","toEqual"],"sourceRoot":"../../../src","sources":["blocks/blockText.test.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,WAAW,EAAEC,YAAY,QAAQ,aAAa;AAEvDJ,QAAQ,CAAC,aAAa,EAAE,MAAM;EAC5BE,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACtDD,MAAM,CACJE,WAAW,CAAC;MACVE,EAAE,EAAE,IAAI;MACRC,IAAI,EAAE,SAAS;MACfC,KAAK,EAAE,qCAAqC;MAC5CC,QAAQ,EAAE,CACR;QAAEC,KAAK,EAAE,OAAO;QAAEC,KAAK,EAAE;MAAwB,CAAC,EAClD;QAAED,KAAK,EAAE,UAAU;QAAEC,KAAK,EAAE,6BAA6B;QAAEC,IAAI,EAAE;MAAS,CAAC;IAE/E,CAAC,CACH,CAAC,CAACC,IAAI,CAAC,0GAA0G,CAAC;EACpH,CAAC,CAAC;EAEFV,EAAE,CAAC,mCAAmC,EAAE,MAAM;IAC5CD,MAAM,CACJE,WAAW,CAAC;MACVE,EAAE,EAAE,IAAI;MACRC,IAAI,EAAE,OAAO;MACbO,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;MACxBC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QAAEC,IAAI,EAAE;MAAK,CAAC,CAAC,CAAC;MACrCC,KAAK,EAAE;IACT,CAAC,CACH,CAAC,CAACJ,IAAI,CAAC,4CAA4C,CAAC;EACtD,CAAC,CAAC;EAEFV,EAAE,CAAC,uDAAuD,EAAE,MAAM;IAChED,MAAM,CAACE,WAAW,CAAC;MAAEE,EAAE,EAAE,IAAI;MAAEC,IAAI,EAAE,MAAM;MAAEC,KAAK,EAAE,WAAW;MAAEU,MAAM,EAAE,CAAC,CAAC;MAAEC,KAAK,EAAE,CAAC;IAAE,CAAU,CAAC,CAAC,CAACN,IAAI,CACtG,wBACF,CAAC;EACH,CAAC,CAAC;EAEFV,EAAE,CAAC,kCAAkC,EAAE,MAAM;IAC3CD,MAAM,CAACG,YAAY,CAAC,CAAC;MAAEC,EAAE,EAAE,GAAG;MAAEC,IAAI,EAAE;IAAO,CAAC,EAAW;MAAED,EAAE,EAAE,GAAG;MAAEC,IAAI,EAAE,QAAQ;MAAEK,IAAI,EAAE,MAAM;MAAEI,IAAI,EAAE;IAAK,CAAC,CAAC,CAAC,CAAC,CAACI,OAAO,CAAC,CACxH,IAAI,CACL,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1,35 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How a block talks back to the sheet.
|
|
5
|
+
*
|
|
6
|
+
* Blocks are pure data; everything that happens when one is tapped goes
|
|
7
|
+
* through this context so the same renderers work inside the real transcript,
|
|
8
|
+
* on the example app's review page, and (later) on the desktop with a
|
|
9
|
+
* different set of handlers behind them.
|
|
10
|
+
*/
|
|
11
|
+
import { createContext, useContext } from "react";
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
const noop = {
|
|
14
|
+
answer: () => {},
|
|
15
|
+
runAction: () => {},
|
|
16
|
+
answered: {},
|
|
17
|
+
supports: {}
|
|
18
|
+
};
|
|
19
|
+
const Ctx = /*#__PURE__*/createContext(noop);
|
|
20
|
+
export function BlockHandlersProvider({
|
|
21
|
+
value,
|
|
22
|
+
children
|
|
23
|
+
}) {
|
|
24
|
+
return /*#__PURE__*/_jsx(Ctx.Provider, {
|
|
25
|
+
value: value,
|
|
26
|
+
children: children
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export function useBlockHandlers() {
|
|
30
|
+
return useContext(Ctx);
|
|
31
|
+
}
|
|
32
|
+
export function actionKey(blockId, action) {
|
|
33
|
+
return `${blockId}:${action.label}`;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","useContext","jsx","_jsx","noop","answer","runAction","answered","supports","Ctx","BlockHandlersProvider","value","children","Provider","useBlockHandlers","actionKey","blockId","action","label"],"sourceRoot":"../../../src","sources":["blocks/context.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,aAAa,EAAEC,UAAU,QAAwB,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAkBlE,MAAMC,IAAmB,GAAG;EAC1BC,MAAM,EAAEA,CAAA,KAAM,CAAC,CAAC;EAChBC,SAAS,EAAEA,CAAA,KAAM,CAAC,CAAC;EACnBC,QAAQ,EAAE,CAAC,CAAC;EACZC,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,MAAMC,GAAG,gBAAGT,aAAa,CAAgBI,IAAI,CAAC;AAE9C,OAAO,SAASM,qBAAqBA,CAAC;EACpCC,KAAK;EACLC;AAIF,CAAC,EAAE;EACD,oBAAOT,IAAA,CAACM,GAAG,CAACI,QAAQ;IAACF,KAAK,EAAEA,KAAM;IAAAC,QAAA,EAAEA;EAAQ,CAAe,CAAC;AAC9D;AAEA,OAAO,SAASE,gBAAgBA,CAAA,EAAkB;EAChD,OAAOb,UAAU,CAACQ,GAAG,CAAC;AACxB;AAEA,OAAO,SAASM,SAASA,CAACC,OAAe,EAAEC,MAAmB,EAAU;EACtE,OAAO,GAAGD,OAAO,IAAIC,MAAM,CAACC,KAAK,EAAE;AACrC","ignoreList":[]}
|
|
@@ -1 +1,91 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/** The small named icons a block may ask for. One place, one size. */
|
|
4
|
+
import { View, StyleSheet } from "react-native";
|
|
5
|
+
import { AlertTriangle, Check, Clock, Database, Eye, Globe, Image as ImageIcon, Info, Layers, Navigation, night, User } from "@buoy-gg/shared-ui";
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export function BlockIcon({
|
|
8
|
+
name,
|
|
9
|
+
size = 14
|
|
10
|
+
}) {
|
|
11
|
+
const c = night.color.textSecondary;
|
|
12
|
+
const icon = (() => {
|
|
13
|
+
switch (name) {
|
|
14
|
+
case "network":
|
|
15
|
+
return /*#__PURE__*/_jsx(Globe, {
|
|
16
|
+
size: size,
|
|
17
|
+
color: c
|
|
18
|
+
});
|
|
19
|
+
case "storage":
|
|
20
|
+
return /*#__PURE__*/_jsx(Database, {
|
|
21
|
+
size: size,
|
|
22
|
+
color: c
|
|
23
|
+
});
|
|
24
|
+
case "route":
|
|
25
|
+
return /*#__PURE__*/_jsx(Navigation, {
|
|
26
|
+
size: size,
|
|
27
|
+
color: c
|
|
28
|
+
});
|
|
29
|
+
case "screen":
|
|
30
|
+
return /*#__PURE__*/_jsx(Eye, {
|
|
31
|
+
size: size,
|
|
32
|
+
color: c
|
|
33
|
+
});
|
|
34
|
+
case "user":
|
|
35
|
+
return /*#__PURE__*/_jsx(User, {
|
|
36
|
+
size: size,
|
|
37
|
+
color: c
|
|
38
|
+
});
|
|
39
|
+
case "image":
|
|
40
|
+
return /*#__PURE__*/_jsx(ImageIcon, {
|
|
41
|
+
size: size,
|
|
42
|
+
color: c
|
|
43
|
+
});
|
|
44
|
+
case "check":
|
|
45
|
+
return /*#__PURE__*/_jsx(Check, {
|
|
46
|
+
size: size,
|
|
47
|
+
color: night.color.accent
|
|
48
|
+
});
|
|
49
|
+
case "warn":
|
|
50
|
+
return /*#__PURE__*/_jsx(AlertTriangle, {
|
|
51
|
+
size: size,
|
|
52
|
+
color: night.color.warning
|
|
53
|
+
});
|
|
54
|
+
case "info":
|
|
55
|
+
return /*#__PURE__*/_jsx(Info, {
|
|
56
|
+
size: size,
|
|
57
|
+
color: night.color.info
|
|
58
|
+
});
|
|
59
|
+
case "store":
|
|
60
|
+
return /*#__PURE__*/_jsx(Layers, {
|
|
61
|
+
size: size,
|
|
62
|
+
color: c
|
|
63
|
+
});
|
|
64
|
+
case "query":
|
|
65
|
+
return /*#__PURE__*/_jsx(Layers, {
|
|
66
|
+
size: size,
|
|
67
|
+
color: c
|
|
68
|
+
});
|
|
69
|
+
case "clock":
|
|
70
|
+
return /*#__PURE__*/_jsx(Clock, {
|
|
71
|
+
size: size,
|
|
72
|
+
color: c
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
})();
|
|
76
|
+
return /*#__PURE__*/_jsx(View, {
|
|
77
|
+
style: styles.wrap,
|
|
78
|
+
children: icon
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const styles = StyleSheet.create({
|
|
82
|
+
wrap: {
|
|
83
|
+
width: 24,
|
|
84
|
+
height: 24,
|
|
85
|
+
borderRadius: 6,
|
|
86
|
+
backgroundColor: night.color.fill,
|
|
87
|
+
alignItems: "center",
|
|
88
|
+
justifyContent: "center"
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["View","StyleSheet","AlertTriangle","Check","Clock","Database","Eye","Globe","Image","ImageIcon","Info","Layers","Navigation","night","User","jsx","_jsx","BlockIcon","name","size","c","color","textSecondary","icon","accent","warning","info","style","styles","wrap","children","create","width","height","borderRadius","backgroundColor","fill","alignItems","justifyContent"],"sourceRoot":"../../../src","sources":["blocks/icons.tsx"],"mappings":";;AAAA;AACA,SAASA,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAC/C,SAASC,aAAa,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,KAAK,EAAEC,KAAK,IAAIC,SAAS,EAAEC,IAAI,EAAEC,MAAM,EAAEC,UAAU,EAAEC,KAAK,EAAEC,IAAI,QAAQ,oBAAoB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGlJ,OAAO,SAASC,SAASA,CAAC;EAAEC,IAAI;EAAEC,IAAI,GAAG;AAAsC,CAAC,EAAE;EAChF,MAAMC,CAAC,GAAGP,KAAK,CAACQ,KAAK,CAACC,aAAa;EACnC,MAAMC,IAAI,GAAG,CAAC,MAAM;IAClB,QAAQL,IAAI;MACV,KAAK,SAAS;QAAE,oBAAOF,IAAA,CAACT,KAAK;UAACY,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACtD,KAAK,SAAS;QAAE,oBAAOJ,IAAA,CAACX,QAAQ;UAACc,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACzD,KAAK,OAAO;QAAE,oBAAOJ,IAAA,CAACJ,UAAU;UAACO,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACzD,KAAK,QAAQ;QAAE,oBAAOJ,IAAA,CAACV,GAAG;UAACa,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACnD,KAAK,MAAM;QAAE,oBAAOJ,IAAA,CAACF,IAAI;UAACK,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MAClD,KAAK,OAAO;QAAE,oBAAOJ,IAAA,CAACP,SAAS;UAACU,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACxD,KAAK,OAAO;QAAE,oBAAOJ,IAAA,CAACb,KAAK;UAACgB,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAER,KAAK,CAACQ,KAAK,CAACG;QAAO,CAAE,CAAC;MACrE,KAAK,MAAM;QAAE,oBAAOR,IAAA,CAACd,aAAa;UAACiB,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAER,KAAK,CAACQ,KAAK,CAACI;QAAQ,CAAE,CAAC;MAC7E,KAAK,MAAM;QAAE,oBAAOT,IAAA,CAACN,IAAI;UAACS,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAER,KAAK,CAACQ,KAAK,CAACK;QAAK,CAAE,CAAC;MACjE,KAAK,OAAO;QAAE,oBAAOV,IAAA,CAACL,MAAM;UAACQ,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACrD,KAAK,OAAO;QAAE,oBAAOJ,IAAA,CAACL,MAAM;UAACQ,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;MACrD,KAAK,OAAO;QAAE,oBAAOJ,IAAA,CAACZ,KAAK;UAACe,IAAI,EAAEA,IAAK;UAACE,KAAK,EAAED;QAAE,CAAE,CAAC;IACtD;EACF,CAAC,EAAE,CAAC;EACJ,oBAAOJ,IAAA,CAAChB,IAAI;IAAC2B,KAAK,EAAEC,MAAM,CAACC,IAAK;IAAAC,QAAA,EAAEP;EAAI,CAAO,CAAC;AAChD;AAEA,MAAMK,MAAM,GAAG3B,UAAU,CAAC8B,MAAM,CAAC;EAC/BF,IAAI,EAAE;IAAEG,KAAK,EAAE,EAAE;IAAEC,MAAM,EAAE,EAAE;IAAEC,YAAY,EAAE,CAAC;IAAEC,eAAe,EAAEtB,KAAK,CAACQ,KAAK,CAACe,IAAI;IAAEC,UAAU,EAAE,QAAQ;IAAEC,cAAc,EAAE;EAAS;AACpI,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { BlockRenderer } from "./BlockRenderer";
|
|
4
|
+
export { BlockHandlersProvider, useBlockHandlers } from "./context";
|
|
5
|
+
export { Card, ActionRow, ProvenanceBadge } from "./primitives";
|
|
6
|
+
export { MessageActions, ReasoningStrip, ElapsedRow, QueuedComposer, ReloadDivider, Timestamp, EditableUserBubble } from "./ChromePrototypes";
|
|
7
|
+
export { LivePill } from "./ExtraBlocks";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BlockRenderer","BlockHandlersProvider","useBlockHandlers","Card","ActionRow","ProvenanceBadge","MessageActions","ReasoningStrip","ElapsedRow","QueuedComposer","ReloadDivider","Timestamp","EditableUserBubble","LivePill"],"sourceRoot":"../../../src","sources":["blocks/index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,qBAAqB,EAAEC,gBAAgB,QAA4B,WAAW;AACvF,SAASC,IAAI,EAAEC,SAAS,EAAEC,eAAe,QAAQ,cAAc;AAC/D,SAASC,cAAc,EAAEC,cAAc,EAAEC,UAAU,EAAEC,cAAc,EAAEC,aAAa,EAAEC,SAAS,EAAEC,kBAAkB,QAAQ,oBAAoB;AAC7I,SAASC,QAAQ,QAAQ,eAAe","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { listRowBehaviour } from "./DataBlocks";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A list row can carry a picture AND an action, and both want the tap. These
|
|
8
|
+
* are the rules that keep them apart — see `listRowBehaviour`.
|
|
9
|
+
*/
|
|
10
|
+
describe("listRowBehaviour", () => {
|
|
11
|
+
it("a plain row does nothing on tap", () => {
|
|
12
|
+
expect(listRowBehaviour({})).toEqual({
|
|
13
|
+
canExpand: false,
|
|
14
|
+
rowRunsAction: false,
|
|
15
|
+
actionIsOwnControl: false
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it("a row with a picture opens it", () => {
|
|
19
|
+
expect(listRowBehaviour({
|
|
20
|
+
image: "https://x/1.png"
|
|
21
|
+
})).toEqual({
|
|
22
|
+
canExpand: true,
|
|
23
|
+
rowRunsAction: false,
|
|
24
|
+
actionIsOwnControl: false
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
it("a row with only an action keeps running it from the whole row", () => {
|
|
28
|
+
expect(listRowBehaviour({
|
|
29
|
+
action: {
|
|
30
|
+
label: "Retry",
|
|
31
|
+
send: "retry"
|
|
32
|
+
}
|
|
33
|
+
})).toEqual({
|
|
34
|
+
canExpand: false,
|
|
35
|
+
rowRunsAction: true,
|
|
36
|
+
actionIsOwnControl: false
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
it("with BOTH, the body opens the picture and the action gets its own control", () => {
|
|
40
|
+
const b = listRowBehaviour({
|
|
41
|
+
image: "https://x/1.png",
|
|
42
|
+
action: {
|
|
43
|
+
label: "Retry",
|
|
44
|
+
send: "retry"
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
expect(b).toEqual({
|
|
48
|
+
canExpand: true,
|
|
49
|
+
rowRunsAction: false,
|
|
50
|
+
actionIsOwnControl: true
|
|
51
|
+
});
|
|
52
|
+
// The row body must never be the action's target — that is the whole point.
|
|
53
|
+
expect(b.rowRunsAction).toBe(false);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=listRow.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","listRowBehaviour","toEqual","canExpand","rowRunsAction","actionIsOwnControl","image","action","label","send","b","toBe"],"sourceRoot":"../../../src","sources":["blocks/listRow.test.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,gBAAgB,QAAQ,cAAc;;AAE/C;AACA;AACA;AACA;AACAH,QAAQ,CAAC,kBAAkB,EAAE,MAAM;EACjCE,EAAE,CAAC,iCAAiC,EAAE,MAAM;IAC1CD,MAAM,CAACE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAACC,OAAO,CAAC;MACnCC,SAAS,EAAE,KAAK;MAChBC,aAAa,EAAE,KAAK;MACpBC,kBAAkB,EAAE;IACtB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFL,EAAE,CAAC,+BAA+B,EAAE,MAAM;IACxCD,MAAM,CAACE,gBAAgB,CAAC;MAAEK,KAAK,EAAE;IAAkB,CAAC,CAAC,CAAC,CAACJ,OAAO,CAAC;MAC7DC,SAAS,EAAE,IAAI;MACfC,aAAa,EAAE,KAAK;MACpBC,kBAAkB,EAAE;IACtB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFL,EAAE,CAAC,+DAA+D,EAAE,MAAM;IACxED,MAAM,CAACE,gBAAgB,CAAC;MAAEM,MAAM,EAAE;QAAEC,KAAK,EAAE,OAAO;QAAEC,IAAI,EAAE;MAAQ;IAAE,CAAC,CAAC,CAAC,CAACP,OAAO,CAAC;MAC9EC,SAAS,EAAE,KAAK;MAChBC,aAAa,EAAE,IAAI;MACnBC,kBAAkB,EAAE;IACtB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFL,EAAE,CAAC,2EAA2E,EAAE,MAAM;IACpF,MAAMU,CAAC,GAAGT,gBAAgB,CAAC;MAAEK,KAAK,EAAE,iBAAiB;MAAEC,MAAM,EAAE;QAAEC,KAAK,EAAE,OAAO;QAAEC,IAAI,EAAE;MAAQ;IAAE,CAAC,CAAC;IACnGV,MAAM,CAACW,CAAC,CAAC,CAACR,OAAO,CAAC;MAAEC,SAAS,EAAE,IAAI;MAAEC,aAAa,EAAE,KAAK;MAAEC,kBAAkB,EAAE;IAAK,CAAC,CAAC;IACtF;IACAN,MAAM,CAACW,CAAC,CAACN,aAAa,CAAC,CAACO,IAAI,CAAC,KAAK,CAAC;EACrC,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The arithmetic behind a block's "+N more" footer, separated from the hook so
|
|
5
|
+
* it can be tested without a renderer.
|
|
6
|
+
*
|
|
7
|
+
* The rule that matters: a control is offered ONLY when it changes what is on
|
|
8
|
+
* screen. The previous version derived "+N more" from a `total` the source
|
|
9
|
+
* reported while deriving the tap target from the array actually in hand, so a
|
|
10
|
+
* block holding five items and claiming six rendered a "+1 more" with nothing
|
|
11
|
+
* to reveal — a button that did nothing when tapped. This takes a count and a
|
|
12
|
+
* limit and nothing else, so `canExpand` is the same fact as `hidden > 0`.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export function pageState(count, cap, limit, step) {
|
|
16
|
+
const shown = Math.min(limit, count);
|
|
17
|
+
const hidden = Math.max(0, count - shown);
|
|
18
|
+
// A block can be re-rendered in place with a shorter list than the one the
|
|
19
|
+
// limit was raised for; collapsing back to a cap nothing exceeds would move
|
|
20
|
+
// nothing, so it is not offered.
|
|
21
|
+
const expanded = limit > cap && count > cap;
|
|
22
|
+
return {
|
|
23
|
+
hidden,
|
|
24
|
+
next: Math.min(hidden, step),
|
|
25
|
+
expanded,
|
|
26
|
+
canExpand: hidden > 0,
|
|
27
|
+
canCollapse: expanded
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=pageState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["pageState","count","cap","limit","step","shown","Math","min","hidden","max","expanded","next","canExpand","canCollapse"],"sourceRoot":"../../../src","sources":["blocks/pageState.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA,OAAO,SAASA,SAASA,CAACC,KAAa,EAAEC,GAAW,EAAEC,KAAa,EAAEC,IAAY,EAAa;EAC5F,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACJ,KAAK,EAAEF,KAAK,CAAC;EACpC,MAAMO,MAAM,GAAGF,IAAI,CAACG,GAAG,CAAC,CAAC,EAAER,KAAK,GAAGI,KAAK,CAAC;EACzC;EACA;EACA;EACA,MAAMK,QAAQ,GAAGP,KAAK,GAAGD,GAAG,IAAID,KAAK,GAAGC,GAAG;EAC3C,OAAO;IACLM,MAAM;IACNG,IAAI,EAAEL,IAAI,CAACC,GAAG,CAACC,MAAM,EAAEJ,IAAI,CAAC;IAC5BM,QAAQ;IACRE,SAAS,EAAEJ,MAAM,GAAG,CAAC;IACrBK,WAAW,EAAEH;EACf,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The "+N more" footer's arithmetic.
|
|
5
|
+
*
|
|
6
|
+
* The bug this covers: a list block showed "+1 more" that did nothing when
|
|
7
|
+
* tapped. The count came from the `total` the model reported, the tap target
|
|
8
|
+
* came from the array actually in hand, and the two disagreed — so the footer
|
|
9
|
+
* advertised a row that was never sent. Every case below is about a control
|
|
10
|
+
* being offered if and only if it changes the screen.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, expect, it } from "vitest";
|
|
13
|
+
import { pageState } from "./pageState";
|
|
14
|
+
const CAP = 10;
|
|
15
|
+
const STEP = 5;
|
|
16
|
+
const at = (count, limit) => pageState(count, CAP, limit, STEP);
|
|
17
|
+
describe("what the footer offers", () => {
|
|
18
|
+
it("offers nothing when everything already fits", () => {
|
|
19
|
+
const s = at(4, CAP);
|
|
20
|
+
expect(s.hidden).toBe(0);
|
|
21
|
+
expect(s.canExpand).toBe(false);
|
|
22
|
+
expect(s.canCollapse).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it("never offers an expand that reveals nothing", () => {
|
|
25
|
+
// The dead "+1 more" this replaced: the label was drawn from a `total` the
|
|
26
|
+
// source reported, the tap target from the array in hand. `pageState` is
|
|
27
|
+
// given only the array, so a control it offers always moves something.
|
|
28
|
+
expect(at(5, CAP).canExpand).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it("reveals a page at a time rather than the whole list", () => {
|
|
31
|
+
// 100 items, cap 10: 10 → 15 → 20 → 25, exactly one step per tap.
|
|
32
|
+
expect(at(100, 10).next).toBe(5);
|
|
33
|
+
expect(at(100, 15).next).toBe(5);
|
|
34
|
+
expect(at(100, 20).hidden).toBe(80);
|
|
35
|
+
});
|
|
36
|
+
it("offers only the remainder on the last page", () => {
|
|
37
|
+
// 12 items shown to 10: two left, so the label promises two, not five.
|
|
38
|
+
expect(at(12, 10).next).toBe(2);
|
|
39
|
+
expect(at(12, 12).canExpand).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
it("offers the way back only once something is expanded", () => {
|
|
42
|
+
expect(at(100, 10).canCollapse).toBe(false);
|
|
43
|
+
expect(at(100, 15).canCollapse).toBe(true);
|
|
44
|
+
expect(at(100, 15).expanded).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it("does not offer a collapse that moves nothing", () => {
|
|
47
|
+
// A block re-rendered in place with a shorter list than the limit was
|
|
48
|
+
// raised for: 3 items under a limit of 20. Folding back to 10 would look
|
|
49
|
+
// identical, so it is not offered.
|
|
50
|
+
const s = at(3, 20);
|
|
51
|
+
expect(s.canCollapse).toBe(false);
|
|
52
|
+
expect(s.expanded).toBe(false);
|
|
53
|
+
expect(s.hidden).toBe(0);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=pageState.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","pageState","CAP","STEP","at","count","limit","s","hidden","toBe","canExpand","canCollapse","next","expanded"],"sourceRoot":"../../../src","sources":["blocks/pageState.test.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAE7C,SAASC,SAAS,QAAQ,aAAa;AAEvC,MAAMC,GAAG,GAAG,EAAE;AACd,MAAMC,IAAI,GAAG,CAAC;AACd,MAAMC,EAAE,GAAGA,CAACC,KAAa,EAAEC,KAAa,KAAKL,SAAS,CAACI,KAAK,EAAEH,GAAG,EAAEI,KAAK,EAAEH,IAAI,CAAC;AAE/EL,QAAQ,CAAC,wBAAwB,EAAE,MAAM;EACvCE,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACtD,MAAMO,CAAC,GAAGH,EAAE,CAAC,CAAC,EAAEF,GAAG,CAAC;IACpBH,MAAM,CAACQ,CAAC,CAACC,MAAM,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;IACxBV,MAAM,CAACQ,CAAC,CAACG,SAAS,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;IAC/BV,MAAM,CAACQ,CAAC,CAACI,WAAW,CAAC,CAACF,IAAI,CAAC,KAAK,CAAC;EACnC,CAAC,CAAC;EAEFT,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACtD;IACA;IACA;IACAD,MAAM,CAACK,EAAE,CAAC,CAAC,EAAEF,GAAG,CAAC,CAACQ,SAAS,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;EAC1C,CAAC,CAAC;EAEFT,EAAE,CAAC,qDAAqD,EAAE,MAAM;IAC9D;IACAD,MAAM,CAACK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAACQ,IAAI,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC;IAChCV,MAAM,CAACK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAACQ,IAAI,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC;IAChCV,MAAM,CAACK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAACI,MAAM,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC;EACrC,CAAC,CAAC;EAEFT,EAAE,CAAC,4CAA4C,EAAE,MAAM;IACrD;IACAD,MAAM,CAACK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAACQ,IAAI,CAAC,CAACH,IAAI,CAAC,CAAC,CAAC;IAC/BV,MAAM,CAACK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAACM,SAAS,CAAC,CAACD,IAAI,CAAC,KAAK,CAAC;EAC1C,CAAC,CAAC;EAEFT,EAAE,CAAC,qDAAqD,EAAE,MAAM;IAC9DD,MAAM,CAACK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAACO,WAAW,CAAC,CAACF,IAAI,CAAC,KAAK,CAAC;IAC3CV,MAAM,CAACK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAACO,WAAW,CAAC,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1CV,MAAM,CAACK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAACS,QAAQ,CAAC,CAACJ,IAAI,CAAC,IAAI,CAAC;EACzC,CAAC,CAAC;EAEFT,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACvD;IACA;IACA;IACA,MAAMO,CAAC,GAAGH,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACnBL,MAAM,CAACQ,CAAC,CAACI,WAAW,CAAC,CAACF,IAAI,CAAC,KAAK,CAAC;IACjCV,MAAM,CAACQ,CAAC,CAACM,QAAQ,CAAC,CAACJ,IAAI,CAAC,KAAK,CAAC;IAC9BV,MAAM,CAACQ,CAAC,CAACC,MAAM,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;EAC1B,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|