@adecore/agents-react 0.31.12 → 0.32.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/dist/agents/AccountDot.js +57 -6
- package/dist/agents/AgentIcon.js +88 -12
- package/dist/agents/ModelOptionControl.js +153 -18
- package/dist/agents/ProviderLogo.js +49 -4
- package/dist/agents/account-limits.js +17 -14
- package/dist/agents/accounts.js +99 -67
- package/dist/agents/agent-marks.js +5 -3
- package/dist/agents/model-name.js +42 -31
- package/dist/agents/model-options.js +8 -8
- package/dist/agents/model-requirement.js +17 -14
- package/dist/agents/option-words.d.ts +7 -0
- package/dist/agents/option-words.js +35 -0
- package/dist/agents/provider-paths.js +6 -6
- package/dist/agents/status-look.js +32 -12
- package/dist/chat/account-choice.d.ts +13 -0
- package/dist/chat/account-choice.js +90 -20
- package/dist/chat/actions.js +126 -59
- package/dist/chat/activity.js +5 -5
- package/dist/chat/attachments.js +74 -53
- package/dist/chat/bookmarks.js +58 -48
- package/dist/chat/chat-client.js +344 -263
- package/dist/chat/chat-references.js +3 -3
- package/dist/chat/composer-effort.d.ts +5 -0
- package/dist/chat/composer-effort.js +26 -0
- package/dist/chat/composer-send.js +13 -13
- package/dist/chat/drafts.js +115 -79
- package/dist/chat/forks.js +81 -24
- package/dist/chat/guards.js +15 -43
- package/dist/chat/index.d.ts +3 -1
- package/dist/chat/index.js +3 -2
- package/dist/chat/logic/ansi.js +170 -167
- package/dist/chat/logic/answers.js +2 -2
- package/dist/chat/logic/bookmarks.js +19 -19
- package/dist/chat/logic/command-looks.js +138 -96
- package/dist/chat/logic/context-usage.js +13 -9
- package/dist/chat/logic/continue-after-stop.js +15 -19
- package/dist/chat/logic/effort.d.ts +14 -0
- package/dist/chat/logic/effort.js +34 -0
- package/dist/chat/logic/embedded-code.js +387 -326
- package/dist/chat/logic/fork.js +134 -110
- package/dist/chat/logic/generated-image.js +54 -23
- package/dist/chat/logic/goal.js +28 -20
- package/dist/chat/logic/handback.js +6 -6
- package/dist/chat/logic/json.js +2 -2
- package/dist/chat/logic/limit.js +46 -30
- package/dist/chat/logic/picker-entries.d.ts +5 -3
- package/dist/chat/logic/picker-entries.js +83 -43
- package/dist/chat/logic/resume-compaction.d.ts +14 -1
- package/dist/chat/logic/resume-compaction.js +93 -24
- package/dist/chat/logic/scrubber.js +188 -136
- package/dist/chat/logic/thought.js +13 -16
- package/dist/chat/logic/thread-cards.js +60 -48
- package/dist/chat/logic/timeline-copy.js +30 -38
- package/dist/chat/logic/timeline-target.js +92 -63
- package/dist/chat/logic/timeline.js +499 -355
- package/dist/chat/logic/tool-catalog.js +54 -34
- package/dist/chat/logic/tools.js +106 -82
- package/dist/chat/logic/visual-height.js +18 -18
- package/dist/chat/logic/visual-viewport.js +6 -3
- package/dist/chat/logic/welcome.js +9 -9
- package/dist/chat/logic/workflow.js +45 -34
- package/dist/chat/mentions.js +149 -109
- package/dist/chat/persisted-json.js +51 -54
- package/dist/chat/preferences.d.ts +4 -0
- package/dist/chat/preferences.js +162 -84
- package/dist/chat/prompt-hold.js +9 -9
- package/dist/chat/quote.js +21 -30
- package/dist/chat/reading-width.js +12 -10
- package/dist/chat/recent-messages.js +34 -21
- package/dist/chat/resume-compaction-dismissals.js +25 -5
- package/dist/chat/runtime-modes.js +3 -3
- package/dist/chat/send-key.js +11 -7
- package/dist/chat/stash.js +89 -69
- package/dist/chat/subagent-conversation.js +181 -139
- package/dist/chat/subagent-list.js +65 -67
- package/dist/chat/subagent-support.js +12 -7
- package/dist/chat/subagent-view.js +132 -44
- package/dist/chat/thumbnails.js +88 -60
- package/dist/chat/timeline-flash.js +24 -12
- package/dist/chat/timeline-scroll.js +116 -86
- package/dist/chat/ui/AccountPill.js +126 -15
- package/dist/chat/ui/AnsiOutput.js +62 -6
- package/dist/chat/ui/BookmarkMarker.js +231 -41
- package/dist/chat/ui/BookmarkSubmenu.js +165 -18
- package/dist/chat/ui/ChatActivity.js +649 -70
- package/dist/chat/ui/ChatReferenceChip.js +104 -9
- package/dist/chat/ui/CodeBlock.js +132 -58
- package/dist/chat/ui/Composer.js +866 -132
- package/dist/chat/ui/ComposerInput.js +309 -120
- package/dist/chat/ui/DiffPool.js +75 -14
- package/dist/chat/ui/EditDiff.js +160 -21
- package/dist/chat/ui/FadingWords.js +32 -3
- package/dist/chat/ui/GoalDock.js +235 -42
- package/dist/chat/ui/ImageView.js +617 -61
- package/dist/chat/ui/LimitState.js +446 -72
- package/dist/chat/ui/Markdown.js +991 -173
- package/dist/chat/ui/MermaidBlock.js +238 -68
- package/dist/chat/ui/MessageActions.js +251 -39
- package/dist/chat/ui/ModelMarks.js +55 -5
- package/dist/chat/ui/Pickers.js +664 -113
- package/dist/chat/ui/PromptComposer.js +281 -51
- package/dist/chat/ui/QuoteButton.js +151 -57
- package/dist/chat/ui/ResumeCompactionDock.d.ts +6 -2
- package/dist/chat/ui/ResumeCompactionDock.js +141 -6
- package/dist/chat/ui/RowTime.js +59 -5
- package/dist/chat/ui/RunSettings.js +1744 -154
- package/dist/chat/ui/Scrubber.js +517 -88
- package/dist/chat/ui/ShellCommand.js +183 -107
- package/dist/chat/ui/SubagentControls.js +212 -24
- package/dist/chat/ui/SubagentInfo.js +170 -13
- package/dist/chat/ui/SubagentStopButton.js +115 -24
- package/dist/chat/ui/SubagentTimeline.js +357 -91
- package/dist/chat/ui/Timeline.js +988 -476
- package/dist/chat/ui/TimelineMenu.js +552 -37
- package/dist/chat/ui/UnifiedDiff.js +234 -27
- package/dist/chat/ui/UploadThumb.js +37 -7
- package/dist/chat/ui/VisualDialogs.js +251 -20
- package/dist/chat/ui/VisualFrame.js +321 -95
- package/dist/chat/ui/Welcome.js +72 -7
- package/dist/chat/ui/chips.js +1 -1
- package/dist/chat/ui/code-lines.js +36 -36
- package/dist/chat/ui/code-streaming.js +1 -1
- package/dist/chat/ui/code-theme.js +7 -7
- package/dist/chat/ui/composer/ComposerControls.js +329 -21
- package/dist/chat/ui/composer/ComposerMenu.js +358 -30
- package/dist/chat/ui/composer/DraftParts.js +185 -11
- package/dist/chat/ui/composer/QueuedMessages.js +138 -13
- package/dist/chat/ui/composer/chips.js +29 -19
- package/dist/chat/ui/composer/editor.js +79 -63
- package/dist/chat/ui/composer/insert.js +26 -12
- package/dist/chat/ui/composer/key-handler.js +180 -127
- package/dist/chat/ui/composer/keys.js +90 -73
- package/dist/chat/ui/composer/menu-aria.js +18 -9
- package/dist/chat/ui/composer/placeholder.js +78 -31
- package/dist/chat/ui/composer/surface.js +13 -37
- package/dist/chat/ui/composer/use-chat-controls.js +230 -90
- package/dist/chat/ui/composer/use-compaction-offer.js +50 -18
- package/dist/chat/ui/composer/use-composer-draft.js +65 -34
- package/dist/chat/ui/composer/use-composer-menus.js +478 -193
- package/dist/chat/ui/composer/use-composer-submit.js +251 -109
- package/dist/chat/ui/composer/use-continuable-turn.js +33 -6
- package/dist/chat/ui/composer/use-draft-files.js +245 -93
- package/dist/chat/ui/composer/use-effort-stepper.d.ts +13 -0
- package/dist/chat/ui/composer/use-effort-stepper.js +88 -0
- package/dist/chat/ui/composer/use-notice.js +61 -16
- package/dist/chat/ui/composer/use-pending-requests.js +38 -17
- package/dist/chat/ui/composer/use-prompt-history.js +117 -45
- package/dist/chat/ui/composer/use-prompt-hold.js +119 -35
- package/dist/chat/ui/composer/use-take-back.js +94 -72
- package/dist/chat/ui/diff/ApprovalReview.js +101 -23
- package/dist/chat/ui/diff/DiffFallbackBoundary.js +21 -13
- package/dist/chat/ui/diff/DiffOmitted.js +56 -6
- package/dist/chat/ui/diff/DiffStack.js +92 -8
- package/dist/chat/ui/diff/DiffUnavailable.js +56 -6
- package/dist/chat/ui/diff/EditorEditDiff.js +263 -51
- package/dist/chat/ui/diff/EditorPatchDiff.js +39 -14
- package/dist/chat/ui/diff/LegacyDiffPool.js +27 -10
- package/dist/chat/ui/diff/LegacyEditDiff.js +97 -20
- package/dist/chat/ui/diff/LegacyUnifiedDiff.js +172 -42
- package/dist/chat/ui/diff/RawDiff.js +65 -5
- package/dist/chat/ui/diff/ReviewDiff.js +77 -5
- package/dist/chat/ui/diff/diff-props.js +1 -1
- package/dist/chat/ui/diff/diff-source-budget.js +46 -35
- package/dist/chat/ui/diff/editor-edit-model.js +18 -14
- package/dist/chat/ui/diff/review-plan.js +63 -40
- package/dist/chat/ui/diff/review-settle.js +24 -9
- package/dist/chat/ui/diff/syntax-runtime.js +236 -201
- package/dist/chat/ui/diff/use-review-stack.js +146 -25
- package/dist/chat/ui/diff-syntax.js +70 -58
- package/dist/chat/ui/diff-theme.js +31 -12
- package/dist/chat/ui/file-links.js +39 -10
- package/dist/chat/ui/find-reveal.js +29 -8
- package/dist/chat/ui/full-diff.js +17 -12
- package/dist/chat/ui/highlighter.js +143 -113
- package/dist/chat/ui/icons.js +16 -7
- package/dist/chat/ui/index.js +1 -1
- package/dist/chat/ui/intelligent-ui/UiBlockFrame.js +556 -82
- package/dist/chat/ui/intelligent-ui/UiFallbackPart.js +73 -5
- package/dist/chat/ui/intelligent-ui/UiReply.js +666 -262
- package/dist/chat/ui/intelligent-ui/block-local.js +59 -31
- package/dist/chat/ui/intelligent-ui/chart-data.js +77 -67
- package/dist/chat/ui/intelligent-ui/node-text.js +77 -91
- package/dist/chat/ui/intelligent-ui/registry.js +46 -46
- package/dist/chat/ui/intelligent-ui/render-context.js +1 -1
- package/dist/chat/ui/intelligent-ui/renderers/base-land.js +1 -1
- package/dist/chat/ui/intelligent-ui/renderers/binding.js +3 -3
- package/dist/chat/ui/intelligent-ui/renderers/chart.js +1223 -123
- package/dist/chat/ui/intelligent-ui/renderers/choices.js +312 -34
- package/dist/chat/ui/intelligent-ui/renderers/content.js +1241 -86
- package/dist/chat/ui/intelligent-ui/renderers/data.js +619 -54
- package/dist/chat/ui/intelligent-ui/renderers/inputs.js +868 -67
- package/dist/chat/ui/intelligent-ui/renderers/links.js +366 -62
- package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +118 -60
- package/dist/chat/ui/intelligent-ui/renderers/map-style.js +85 -78
- package/dist/chat/ui/intelligent-ui/renderers/map-view.js +282 -217
- package/dist/chat/ui/intelligent-ui/renderers/map.js +621 -69
- package/dist/chat/ui/intelligent-ui/renderers/place-point.js +15 -8
- package/dist/chat/ui/intelligent-ui/renderers/structure.js +262 -20
- package/dist/chat/ui/intelligent-ui/renderers/text.js +674 -49
- package/dist/chat/ui/intelligent-ui/reply-parts.js +24 -15
- package/dist/chat/ui/intelligent-ui/table-data.js +97 -57
- package/dist/chat/ui/intelligent-ui/tones.js +31 -31
- package/dist/chat/ui/intelligent-ui/use-in-view.js +30 -12
- package/dist/chat/ui/intelligent-ui/use-later.js +28 -13
- package/dist/chat/ui/intelligent-ui/use-truncated.js +45 -21
- package/dist/chat/ui/intelligent-ui/use-ui-links.js +296 -109
- package/dist/chat/ui/intelligent-ui/use-ui-queries.js +256 -246
- package/dist/chat/ui/markdown-blocks.js +296 -262
- package/dist/chat/ui/mermaid.js +60 -72
- package/dist/chat/ui/quote-selection.js +32 -29
- package/dist/chat/ui/rehype-chips.js +35 -23
- package/dist/chat/ui/rehype-fade.js +28 -17
- package/dist/chat/ui/remark-html-as-text.js +22 -15
- package/dist/chat/ui/reply-context.js +1 -1
- package/dist/chat/ui/reveal.js +161 -72
- package/dist/chat/ui/rows/ForksRow.js +226 -24
- package/dist/chat/ui/rows/GeneratedImageRow.js +541 -87
- package/dist/chat/ui/rows/MessageRows.js +1706 -159
- package/dist/chat/ui/rows/RowContainer.js +57 -7
- package/dist/chat/ui/rows/Rows.js +463 -54
- package/dist/chat/ui/rows/SubagentRow.js +577 -60
- package/dist/chat/ui/rows/TaskRow.js +359 -40
- package/dist/chat/ui/rows/VisualRow.js +233 -11
- package/dist/chat/ui/rows/WorkRows.js +1945 -164
- package/dist/chat/ui/rows/WorkflowRow.js +293 -34
- package/dist/chat/ui/rows/row-rhythm.js +27 -17
- package/dist/chat/ui/theme-watch.js +26 -23
- package/dist/chat/ui/timestamp-format.js +4 -1
- package/dist/chat/ui/use-diff-source-tokens.js +70 -34
- package/dist/chat/ui/useToggleSet.js +51 -19
- package/dist/chat/ui/visual-theme.js +153 -128
- package/dist/chat/visual-bridge.js +123 -123
- package/dist/chat/visual-viewport.js +94 -83
- package/dist/chat/visuals.js +13 -5
- package/dist/host-hooks.d.ts +29 -0
- package/dist/host-hooks.js +78 -0
- package/dist/host.js +120 -48
- package/dist/index.js +1 -1
- package/dist/lazy.js +38 -32
- package/dist/locales/en/agent-chat.d.ts +34 -0
- package/dist/locales/en/agent-chat.js +747 -713
- package/dist/locales/en/agent-prompts.js +42 -42
- package/dist/locales/en/agent-providers.d.ts +1 -0
- package/dist/locales/en/agent-providers.js +166 -165
- package/dist/locales/en/agent-usage.d.ts +6 -0
- package/dist/locales/en/agent-usage.js +129 -123
- package/dist/locales/nl/agent-chat.d.ts +34 -0
- package/dist/locales/nl/agent-chat.js +747 -713
- package/dist/locales/nl/agent-prompts.js +42 -42
- package/dist/locales/nl/agent-providers.d.ts +1 -0
- package/dist/locales/nl/agent-providers.js +166 -165
- package/dist/locales/nl/agent-usage.d.ts +6 -0
- package/dist/locales/nl/agent-usage.js +129 -123
- package/dist/locales.js +14 -14
- package/dist/mounted-registry.js +31 -30
- package/dist/port-transport.js +122 -111
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/logic/focus.js +15 -14
- package/dist/prompts/logic/keys.js +93 -59
- package/dist/prompts/logic/prompts.js +27 -14
- package/dist/prompts/logic/subjects.js +60 -46
- package/dist/prompts/logic/useFocusAfterAnswer.js +60 -20
- package/dist/prompts/logic/usePromptSession.js +88 -77
- package/dist/prompts/ui/ApprovalBody.js +246 -27
- package/dist/prompts/ui/PromptActions.js +215 -9
- package/dist/prompts/ui/PromptCard.js +215 -36
- package/dist/prompts/ui/PromptView.js +372 -34
- package/dist/prompts/ui/QuestionBody.js +269 -73
- package/dist/providers/AccountColors.js +36 -5
- package/dist/providers/AccountDetail.js +683 -50
- package/dist/providers/AccountVariables.js +139 -32
- package/dist/providers/AddAccountForm.js +125 -38
- package/dist/providers/CliDetail.js +343 -36
- package/dist/providers/InstallPage.js +644 -59
- package/dist/providers/ProviderList.d.ts +2 -1
- package/dist/providers/ProviderList.js +215 -23
- package/dist/providers/ProvidersPane.d.ts +4 -2
- package/dist/providers/ProvidersPane.js +244 -64
- package/dist/providers/account-actions.js +54 -30
- package/dist/providers/index.js +1 -1
- package/dist/providers/install-steps.js +12 -9
- package/dist/providers/pane-target.d.ts +3 -0
- package/dist/providers/pane-target.js +34 -13
- package/dist/providers/parts.js +62 -12
- package/dist/providers/provider-abilities.js +5 -5
- package/dist/providers/provider-groups.js +75 -40
- package/dist/providers/variables.js +73 -39
- package/dist/scope.js +6 -6
- package/dist/settings/sections.js +18 -18
- package/dist/state/chats.js +404 -192
- package/dist/state/index.js +1 -1
- package/dist/state/provider-accounts.js +70 -47
- package/dist/state/providers.js +45 -16
- package/dist/state/usage.js +154 -77
- package/dist/storage.js +69 -68
- package/dist/testing/index.js +1 -1
- package/dist/testing/prompts.js +105 -67
- package/dist/transport.js +10 -10
- package/dist/ui/PlainTextarea.js +27 -3
- package/dist/usage/LimitsList.js +646 -40
- package/dist/usage/UsageBreakdown.js +879 -38
- package/dist/usage/UsageChart.js +311 -32
- package/dist/usage/UsageDialog.js +46 -4
- package/dist/usage/UsageLimits.js +467 -34
- package/dist/usage/UsageLimitsCard.js +95 -11
- package/dist/usage/UsagePage.js +817 -96
- package/dist/usage/UsagePane.js +164 -10
- package/dist/usage/UsageSummary.js +151 -6
- package/dist/usage/UsageTiles.js +164 -14
- package/dist/usage/format.js +32 -32
- package/dist/usage/index.d.ts +1 -1
- package/dist/usage/index.js +2 -1
- package/dist/usage/limit-groups.d.ts +2 -0
- package/dist/usage/limit-groups.js +77 -59
- package/dist/usage/limits.js +78 -43
- package/dist/usage/money.js +20 -4
- package/dist/usage/summary.js +85 -64
- package/package.json +8 -8
- package/src/agents/ModelOptionControl.tsx +3 -1
- package/src/agents/option-words.ts +27 -0
- package/src/chat/account-choice.ts +41 -1
- package/src/chat/composer-effort.ts +32 -0
- package/src/chat/forks.ts +4 -5
- package/src/chat/index.ts +3 -1
- package/src/chat/logic/effort.ts +32 -0
- package/src/chat/logic/picker-entries.ts +45 -10
- package/src/chat/logic/resume-compaction.ts +95 -17
- package/src/chat/logic/timeline.ts +11 -3
- package/src/chat/preferences.ts +35 -0
- package/src/chat/subagent-view.ts +2 -3
- package/src/chat/ui/AnsiOutput.tsx +1 -2
- package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
- package/src/chat/ui/ChatActivity.tsx +14 -22
- package/src/chat/ui/ChatReferenceChip.tsx +2 -3
- package/src/chat/ui/Composer.tsx +15 -7
- package/src/chat/ui/EditDiff.tsx +2 -3
- package/src/chat/ui/LimitState.tsx +2 -2
- package/src/chat/ui/Markdown.tsx +10 -8
- package/src/chat/ui/MermaidBlock.tsx +2 -3
- package/src/chat/ui/Pickers.tsx +49 -29
- package/src/chat/ui/PromptComposer.tsx +7 -9
- package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
- package/src/chat/ui/RunSettings.tsx +67 -28
- package/src/chat/ui/Scrubber.tsx +3 -3
- package/src/chat/ui/ShellCommand.tsx +2 -0
- package/src/chat/ui/SubagentInfo.tsx +2 -3
- package/src/chat/ui/SubagentTimeline.tsx +12 -16
- package/src/chat/ui/Timeline.tsx +6 -6
- package/src/chat/ui/UnifiedDiff.tsx +3 -4
- package/src/chat/ui/VisualFrame.tsx +5 -8
- package/src/chat/ui/code-theme.ts +4 -4
- package/src/chat/ui/composer/placeholder.ts +2 -2
- package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
- package/src/chat/ui/composer/use-composer-menus.ts +4 -9
- package/src/chat/ui/composer/use-composer-submit.ts +2 -1
- package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
- package/src/chat/ui/composer/use-notice.ts +2 -2
- package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
- package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
- package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
- package/src/chat/ui/diff/use-review-stack.ts +4 -4
- package/src/chat/ui/diff-theme.ts +3 -3
- package/src/chat/ui/file-links.ts +2 -2
- package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
- package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
- package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
- package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
- package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
- package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
- package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
- package/src/chat/ui/rows/ForksRow.tsx +3 -5
- package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
- package/src/chat/ui/rows/MessageRows.tsx +12 -21
- package/src/chat/ui/rows/SubagentRow.tsx +3 -3
- package/src/chat/ui/rows/TaskRow.tsx +1 -1
- package/src/chat/ui/rows/WorkRows.tsx +10 -5
- package/src/chat/ui/useToggleSet.ts +15 -18
- package/src/chat/ui/visual-theme.ts +2 -3
- package/src/host-hooks.ts +113 -0
- package/src/lazy.tsx +2 -0
- package/src/locales/en/agent-chat.ts +134 -108
- package/src/locales/en/agent-prompts.ts +7 -7
- package/src/locales/en/agent-providers.ts +35 -34
- package/src/locales/en/agent-usage.ts +26 -20
- package/src/locales/nl/agent-chat.ts +126 -100
- package/src/locales/nl/agent-prompts.ts +5 -5
- package/src/locales/nl/agent-providers.ts +33 -32
- package/src/locales/nl/agent-usage.ts +25 -20
- package/src/providers/CliDetail.tsx +2 -1
- package/src/providers/InstallPage.tsx +2 -4
- package/src/providers/ProviderList.tsx +12 -2
- package/src/providers/ProvidersPane.tsx +45 -15
- package/src/providers/pane-target.ts +20 -4
- package/src/state/chats.ts +2 -2
- package/src/usage/LimitsList.tsx +12 -13
- package/src/usage/UsageBreakdown.tsx +17 -6
- package/src/usage/UsageLimits.tsx +2 -1
- package/src/usage/UsagePage.tsx +3 -3
- package/src/usage/index.ts +1 -1
- package/src/usage/limit-groups.ts +12 -0
- package/src/usage/limits.ts +2 -2
- package/src/usage/money.ts +1 -2
|
@@ -1,42 +1,70 @@
|
|
|
1
|
+
import { c as _c } from "react/compiler-runtime";
|
|
1
2
|
import { useState } from 'react';
|
|
2
3
|
/* Values that last as long as the page, past `limit` forgetting the one used longest ago. */
|
|
3
4
|
export class UiPageMemory {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
entries = new Map();
|
|
6
|
+
limit;
|
|
7
|
+
constructor(limit) {
|
|
8
|
+
this.limit = limit;
|
|
9
|
+
}
|
|
10
|
+
has(key) {
|
|
11
|
+
return this.entries.has(key);
|
|
12
|
+
}
|
|
13
|
+
/* Reading a value counts as using it. */
|
|
14
|
+
get(key) {
|
|
15
|
+
const value = this.entries.get(key);
|
|
16
|
+
if (value !== undefined) {
|
|
17
|
+
this.set(key, value);
|
|
8
18
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.set(key, value);
|
|
17
|
-
}
|
|
18
|
-
return value;
|
|
19
|
-
}
|
|
20
|
-
set(key, value) {
|
|
21
|
-
this.entries.delete(key);
|
|
22
|
-
this.entries.set(key, value);
|
|
23
|
-
if (this.entries.size > this.limit) {
|
|
24
|
-
this.entries.delete(this.entries.keys().next().value);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
get size() {
|
|
28
|
-
return this.entries.size;
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
set(key, value) {
|
|
22
|
+
this.entries.delete(key);
|
|
23
|
+
this.entries.set(key, value);
|
|
24
|
+
if (this.entries.size > this.limit) {
|
|
25
|
+
this.entries.delete(this.entries.keys().next().value);
|
|
29
26
|
}
|
|
27
|
+
}
|
|
28
|
+
get size() {
|
|
29
|
+
return this.entries.size;
|
|
30
|
+
}
|
|
30
31
|
}
|
|
31
32
|
// Which tab or section a person opened, so a block the thread unmounts while scrolling comes back as they left it.
|
|
32
33
|
const remembered = new UiPageMemory(512);
|
|
33
34
|
/* State of one node that lasts as long as the page, such as a fold; local input state belongs to the runtime instead. */
|
|
34
35
|
export function useBlockLocal(context, nodeId, initial) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
const $ = _c(8);
|
|
37
|
+
const key = `${context.scopeId}\n${context.chatId}\n${context.itemId}\n${context.blockId}\n${nodeId}`;
|
|
38
|
+
let t0;
|
|
39
|
+
if ($[0] !== initial || $[1] !== key) {
|
|
40
|
+
t0 = () => remembered.has(key) ? remembered.get(key) : initial();
|
|
41
|
+
$[0] = initial;
|
|
42
|
+
$[1] = key;
|
|
43
|
+
$[2] = t0;
|
|
44
|
+
} else {
|
|
45
|
+
t0 = $[2];
|
|
46
|
+
}
|
|
47
|
+
const [value, setValue] = useState(t0);
|
|
48
|
+
let t1;
|
|
49
|
+
if ($[3] !== key) {
|
|
50
|
+
t1 = next => {
|
|
51
|
+
remembered.set(key, next);
|
|
52
|
+
setValue(next);
|
|
40
53
|
};
|
|
41
|
-
|
|
42
|
-
|
|
54
|
+
$[3] = key;
|
|
55
|
+
$[4] = t1;
|
|
56
|
+
} else {
|
|
57
|
+
t1 = $[4];
|
|
58
|
+
}
|
|
59
|
+
const set = t1;
|
|
60
|
+
let t2;
|
|
61
|
+
if ($[5] !== set || $[6] !== value) {
|
|
62
|
+
t2 = [value, set];
|
|
63
|
+
$[5] = set;
|
|
64
|
+
$[6] = value;
|
|
65
|
+
$[7] = t2;
|
|
66
|
+
} else {
|
|
67
|
+
t2 = $[7];
|
|
68
|
+
}
|
|
69
|
+
return t2;
|
|
70
|
+
}
|
|
@@ -3,41 +3,44 @@ export const UI_CHART_SERIES = 6;
|
|
|
3
3
|
/* Categories a chart draws; more would not fit a column of a thread. */
|
|
4
4
|
export const UI_CHART_ROWS = 60;
|
|
5
5
|
function numericKeys(rows) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
6
|
+
const keys = [];
|
|
7
|
+
for (const row of rows) {
|
|
8
|
+
for (const [key, value] of Object.entries(row)) {
|
|
9
|
+
if (key !== 'label' && !keys.includes(key) && typeof value === 'number' && Number.isFinite(value)) {
|
|
10
|
+
keys.push(key);
|
|
11
|
+
}
|
|
13
12
|
}
|
|
14
|
-
|
|
13
|
+
}
|
|
14
|
+
return keys;
|
|
15
15
|
}
|
|
16
16
|
function valuesOf(rows, keys) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
return {
|
|
18
|
+
labels: rows.map(row => typeof row.label === 'string' || typeof row.label === 'number' ? String(row.label) : ''),
|
|
19
|
+
series: keys.map(key => ({
|
|
20
|
+
key,
|
|
21
|
+
values: rows.map(row => {
|
|
22
|
+
const value = row[key];
|
|
23
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : null;
|
|
24
|
+
})
|
|
25
|
+
}))
|
|
26
|
+
};
|
|
27
27
|
}
|
|
28
28
|
/* All of a chart's numbers, for the table a person can open beside a drawing that left some out. */
|
|
29
29
|
export function uiChartValues(data) {
|
|
30
|
-
|
|
30
|
+
return valuesOf(data, numericKeys(data));
|
|
31
31
|
}
|
|
32
32
|
/*
|
|
33
33
|
* The rounded ends of a value axis, or null when no drawing can scale to them: the span has to be
|
|
34
34
|
* finite and above zero, and so does one over it, which rules out a subnormal span as well.
|
|
35
35
|
*/
|
|
36
36
|
export function uiChartRange(min, max) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
const low = min < 0 ? -niceCeiling(-min) : 0;
|
|
38
|
+
const high = max > 0 ? niceCeiling(max) : low === 0 ? 1 : 0;
|
|
39
|
+
const span = high - low;
|
|
40
|
+
return span > 0 && Number.isFinite(span) && Number.isFinite(1 / span) ? {
|
|
41
|
+
low,
|
|
42
|
+
high
|
|
43
|
+
} : null;
|
|
41
44
|
}
|
|
42
45
|
/*
|
|
43
46
|
* The series a chart can draw: every key besides `label` with a finite number in some row, the
|
|
@@ -45,32 +48,39 @@ export function uiChartRange(min, max) {
|
|
|
45
48
|
* row or no series, or when the numbers are too large to scale, which draws the fallback.
|
|
46
49
|
*/
|
|
47
50
|
export function uiChartData(data, kind) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
51
|
+
const rows = data.slice(0, UI_CHART_ROWS);
|
|
52
|
+
const keys = numericKeys(rows);
|
|
53
|
+
if (rows.length === 0 || keys.length === 0) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const {
|
|
57
|
+
labels,
|
|
58
|
+
series
|
|
59
|
+
} = valuesOf(rows, keys.slice(0, UI_CHART_SERIES));
|
|
60
|
+
const negative = series.some(({
|
|
61
|
+
values
|
|
62
|
+
}) => values.some(value => value !== null && value < 0));
|
|
63
|
+
const drawn = kind === 'stacked' && negative ? 'bar' : kind;
|
|
64
|
+
const extents = drawn === 'stacked' ? labels.map((_, index) => series.reduce((sum, {
|
|
65
|
+
values
|
|
66
|
+
}) => sum + (values[index] ?? 0), 0)) : series.flatMap(({
|
|
67
|
+
values
|
|
68
|
+
}) => values.filter(value => value !== null));
|
|
69
|
+
const min = Math.min(0, ...extents);
|
|
70
|
+
const max = Math.max(0, ...extents);
|
|
71
|
+
if (uiChartRange(min, max) === null) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
labels,
|
|
76
|
+
series,
|
|
77
|
+
kind: drawn,
|
|
78
|
+
min,
|
|
79
|
+
max: max === min ? min + 1 : max,
|
|
80
|
+
truncated: data.length > rows.length,
|
|
81
|
+
total: data.length,
|
|
82
|
+
omitted: numericKeys(data).filter(key => !series.some(drawnSeries => drawnSeries.key === key))
|
|
83
|
+
};
|
|
74
84
|
}
|
|
75
85
|
/* The width of one character of a chart's type at a 16px root, an estimate since SVG text cannot wrap or be measured before it draws. */
|
|
76
86
|
export const UI_CHART_CHARACTER = 7.5;
|
|
@@ -79,32 +89,32 @@ const AXIS_WIDTH = 44;
|
|
|
79
89
|
const AXIS_GAP = 8;
|
|
80
90
|
/* The character width for a root font size, since chart type is set in rem and follows a person's larger text. */
|
|
81
91
|
export function uiChartCharacter(rootFontSize) {
|
|
82
|
-
|
|
92
|
+
return Number.isFinite(rootFontSize) && rootFontSize > 0 ? UI_CHART_CHARACTER * rootFontSize / 16 : UI_CHART_CHARACTER;
|
|
83
93
|
}
|
|
84
94
|
export function uiChartTextWidth(text, character = UI_CHART_CHARACTER) {
|
|
85
|
-
|
|
95
|
+
return Math.ceil(text.length * character);
|
|
86
96
|
}
|
|
87
97
|
/* Text cut to the room it has, so a label never reaches past its place; the whole of it is in the values. */
|
|
88
98
|
export function uiChartText(text, room, character = UI_CHART_CHARACTER) {
|
|
89
|
-
|
|
90
|
-
|
|
99
|
+
const fit = Math.floor(room / character);
|
|
100
|
+
return text.length <= fit ? text : `${text.slice(0, Math.max(1, fit - 1))}…`;
|
|
91
101
|
}
|
|
92
102
|
/* A value axis as wide as its longest tick label, at most two fifths of the chart; a label longer than that is cut. */
|
|
93
103
|
export function uiChartAxis(ticks, width, character = UI_CHART_CHARACTER) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
const scale = character / UI_CHART_CHARACTER;
|
|
105
|
+
const room = Math.max(AXIS_WIDTH * scale, Math.floor(width * 0.4));
|
|
106
|
+
const tickTexts = ticks.map(tick => uiChartText(tick, room - AXIS_GAP, character));
|
|
107
|
+
return {
|
|
108
|
+
axisWidth: Math.round(Math.min(room, Math.max(AXIS_WIDTH * scale, ...tickTexts.map(text => uiChartTextWidth(text, character) + AXIS_GAP)))),
|
|
109
|
+
tickTexts
|
|
110
|
+
};
|
|
101
111
|
}
|
|
102
112
|
/* A round number at or above `value`, for the top of an axis: 1, 2, 2.5 or 5 times a power of ten. */
|
|
103
113
|
export function niceCeiling(value) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
114
|
+
if (value <= 0) {
|
|
115
|
+
return 0;
|
|
116
|
+
}
|
|
117
|
+
const power = 10 ** Math.floor(Math.log10(value));
|
|
118
|
+
const step = [1, 2, 2.5, 5, 10].find(factor => factor * power >= value) ?? 10;
|
|
119
|
+
return step * power;
|
|
120
|
+
}
|
|
@@ -2,118 +2,101 @@ import { parseUiEventTime } from '@adecore/intelligent-ui';
|
|
|
2
2
|
import { formatClock, formatDateTime, formatDay, formatDayClock, formatDayClockWithYear, formatDayWithYear } from '@adecore/ui/format';
|
|
3
3
|
/* The text a node holds, every `$text` below it joined as written, such as the code of a CodeBlock. */
|
|
4
4
|
export function uiNodeText(node) {
|
|
5
|
-
|
|
5
|
+
return node.children.map(child => child.type === '$text' ? String(child.props.text ?? '') : uiNodeText(child)).join('');
|
|
6
6
|
}
|
|
7
7
|
/* The same text on one line, for a name a control or a screen reader needs as a string. */
|
|
8
8
|
export function uiNodeLabel(node) {
|
|
9
|
-
|
|
9
|
+
return uiNodeText(node).replace(/\s+/g, ' ').trim();
|
|
10
10
|
}
|
|
11
11
|
/* The text written directly in a node, beside its component children: the label of a Select, whose children are mostly its options. */
|
|
12
12
|
export function uiOwnLabel(node) {
|
|
13
|
-
|
|
14
|
-
.filter((child) => child.type === '$text')
|
|
15
|
-
.map((child) => String(child.props.text ?? ''))
|
|
16
|
-
.join('')
|
|
17
|
-
.replace(/\s+/g, ' ')
|
|
18
|
-
.trim();
|
|
13
|
+
return node.children.filter(child => child.type === '$text').map(child => String(child.props.text ?? '')).join('').replace(/\s+/g, ' ').trim();
|
|
19
14
|
}
|
|
20
15
|
/* The valid children of one kind, which a parent reads as metadata: the columns of a table, the tabs of a strip. */
|
|
21
16
|
export function uiChildrenOf(node, type) {
|
|
22
|
-
|
|
17
|
+
return node.children.filter(child => child.type === type && child.error === undefined);
|
|
23
18
|
}
|
|
24
19
|
/* A Summary draws its text as inline Markdown, so the name it gives its block leaves out the code ticks, the strong marks and the address of a link. */
|
|
25
20
|
function withoutMarks(text) {
|
|
26
|
-
|
|
27
|
-
.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1')
|
|
28
|
-
.replace(/\*\*|`/g, '')
|
|
29
|
-
.trim();
|
|
21
|
+
return text.replace(/\[([^\]]*)\]\([^)]*\)/g, '$1').replace(/\*\*|`/g, '').trim();
|
|
30
22
|
}
|
|
31
23
|
/* The Summary that heads a block, which is its first node; a Summary further down is a subheading. */
|
|
32
24
|
export function uiBlockHead(nodes) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
const first = nodes[0];
|
|
26
|
+
if (first === undefined || first.type !== 'Summary' || first.error !== undefined) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
id: first.id,
|
|
31
|
+
label: withoutMarks(uiNodeLabel(first))
|
|
32
|
+
};
|
|
38
33
|
}
|
|
39
34
|
/*
|
|
40
35
|
* Scrolls the Source row of `nodeId` under `root` into view and focuses it, which lights the row once.
|
|
41
36
|
* Opens enclosing tabs and sections first; false when the source is absent.
|
|
42
37
|
*/
|
|
43
38
|
export async function revealUiSource(root, nodeId, ancestors = []) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
const row = [...root.querySelectorAll('[data-ui-source]')].find((element) => element.dataset.uiSource === nodeId);
|
|
52
|
-
if (row === undefined) {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
// The light runs when focus arrives, so a row that already has it lets go first.
|
|
56
|
-
if (row.ownerDocument.activeElement === row) {
|
|
57
|
-
row.blur();
|
|
39
|
+
for (const id of ancestors) {
|
|
40
|
+
const control = [...root.querySelectorAll('[data-ui-reveal]')].find(element => element.dataset.uiReveal === id);
|
|
41
|
+
if (control && (control.getAttribute('aria-expanded') === 'false' || control.getAttribute('aria-selected') === 'false')) {
|
|
42
|
+
control.click();
|
|
43
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
58
44
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return
|
|
45
|
+
}
|
|
46
|
+
const row = [...root.querySelectorAll('[data-ui-source]')].find(element => element.dataset.uiSource === nodeId);
|
|
47
|
+
if (row === undefined) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
// The light runs when focus arrives, so a row that already has it lets go first.
|
|
51
|
+
if (row.ownerDocument.activeElement === row) {
|
|
52
|
+
row.blur();
|
|
53
|
+
}
|
|
54
|
+
row.focus({
|
|
55
|
+
preventScroll: true
|
|
56
|
+
});
|
|
57
|
+
const reduced = row.ownerDocument.defaultView?.matchMedia('(prefers-reduced-motion: reduce)').matches === true;
|
|
58
|
+
row.scrollIntoView({
|
|
59
|
+
block: 'nearest',
|
|
60
|
+
behavior: reduced ? 'auto' : 'smooth'
|
|
61
|
+
});
|
|
62
|
+
return true;
|
|
63
63
|
}
|
|
64
64
|
/* The reason codes this version says in its own words; any other code reads as the reason the machine gave. */
|
|
65
|
-
const UI_REASON_CODES = new Set([
|
|
66
|
-
'access-unavailable',
|
|
67
|
-
'block-stale',
|
|
68
|
-
'busy',
|
|
69
|
-
'link-unchecked',
|
|
70
|
-
'link-unsupported',
|
|
71
|
-
'links-unsupported',
|
|
72
|
-
'no-unique-match',
|
|
73
|
-
'outside-project',
|
|
74
|
-
'query-undeclared',
|
|
75
|
-
'refresh-limit',
|
|
76
|
-
'result-too-large',
|
|
77
|
-
'snapshot-too-large',
|
|
78
|
-
'source-unregistered',
|
|
79
|
-
'stale-read',
|
|
80
|
-
'target-unavailable',
|
|
81
|
-
'timed-out',
|
|
82
|
-
'unreadable'
|
|
83
|
-
]);
|
|
65
|
+
const UI_REASON_CODES = new Set(['access-unavailable', 'block-stale', 'busy', 'link-unchecked', 'link-unsupported', 'links-unsupported', 'no-unique-match', 'outside-project', 'query-undeclared', 'refresh-limit', 'result-too-large', 'snapshot-too-large', 'source-unregistered', 'stale-read', 'target-unavailable', 'timed-out', 'unreadable']);
|
|
84
66
|
/* Why a reading failed or a link stayed plain, in the person's language where the code is known. */
|
|
85
67
|
export function uiReasonText(t, code, reason) {
|
|
86
|
-
|
|
68
|
+
return code !== undefined && UI_REASON_CODES.has(code) ? t(`blocks.live.reasons.${code}`) : reason;
|
|
87
69
|
}
|
|
88
70
|
/*
|
|
89
71
|
* A number with its unit, where a percent sign hugs the number and every other unit stands apart
|
|
90
72
|
* from it, by a space that never lets the two wrap apart.
|
|
91
73
|
*/
|
|
92
74
|
export function uiWithUnit(text, unit) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
75
|
+
if (unit === undefined || unit === '') {
|
|
76
|
+
return text;
|
|
77
|
+
}
|
|
78
|
+
return unit === '%' ? `${text}${unit}` : `${text}\u00a0${unit}`;
|
|
97
79
|
}
|
|
98
80
|
/* Why the choices of a live block are closed: its data is still being read, or the reason a reading failed. Null while nothing live holds them. */
|
|
99
81
|
export function uiLiveChoiceReason(t, live) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
82
|
+
if (live === null || live === undefined || live.state === 'fresh') {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (live.state === 'reading') {
|
|
86
|
+
return t('blocks.choice.reading');
|
|
87
|
+
}
|
|
88
|
+
const source = live.source ?? live.sources[0] ?? '';
|
|
89
|
+
return uiReasonText(t, live.code, live.reason) ?? t(live.state === 'failed' ? 'blocks.live.failed' : 'blocks.live.refused', {
|
|
90
|
+
source
|
|
91
|
+
});
|
|
108
92
|
}
|
|
109
93
|
/* The host of an address without its `www.`, which is how a source or a link in prose says where it goes. */
|
|
110
94
|
export function uiUrlDomain(url) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
95
|
+
try {
|
|
96
|
+
return new URL(url).hostname.replace(/^www\./, '');
|
|
97
|
+
} catch {
|
|
98
|
+
return url;
|
|
99
|
+
}
|
|
117
100
|
}
|
|
118
101
|
/*
|
|
119
102
|
* An event's `at` the way the person's language and region write it. The year is written once it is not the
|
|
@@ -121,20 +104,23 @@ export function uiUrlDomain(url) {
|
|
|
121
104
|
* A text the catalog would not accept stays as written.
|
|
122
105
|
*/
|
|
123
106
|
export function uiEventTime(at, now = Date.now()) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
107
|
+
const moment = parseUiEventTime(at);
|
|
108
|
+
if (moment === null) {
|
|
109
|
+
return at;
|
|
110
|
+
}
|
|
111
|
+
const zone = moment.written ? 'UTC' : undefined;
|
|
112
|
+
const year = moment.written ? moment.date.getUTCFullYear() : moment.date.getFullYear();
|
|
113
|
+
const withYear = year !== new Date(now).getFullYear();
|
|
114
|
+
if (moment.kind === 'time') {
|
|
115
|
+
return moment.seconds ? formatDateTime(moment.date, {
|
|
116
|
+
hour: '2-digit',
|
|
117
|
+
minute: '2-digit',
|
|
118
|
+
second: '2-digit',
|
|
119
|
+
timeZone: 'UTC'
|
|
120
|
+
}) : formatClock(moment.date, zone);
|
|
121
|
+
}
|
|
122
|
+
if (moment.kind === 'date') {
|
|
123
|
+
return withYear ? formatDayWithYear(moment.date, zone) : formatDay(moment.date, zone);
|
|
124
|
+
}
|
|
125
|
+
return withYear ? formatDayClockWithYear(moment.date, zone) : formatDayClock(moment.date, zone);
|
|
126
|
+
}
|
|
@@ -14,49 +14,49 @@ import { CalloutRenderer, EventRenderer, ProgressRenderer, StepRenderer, StepsRe
|
|
|
14
14
|
* Select their options, a map its places).
|
|
15
15
|
*/
|
|
16
16
|
export const UI_RENDERERS = {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
};
|
|
17
|
+
Summary: SummaryRenderer,
|
|
18
|
+
Callout: CalloutRenderer,
|
|
19
|
+
Tag: TagRenderer,
|
|
20
|
+
Progress: ProgressRenderer,
|
|
21
|
+
Steps: StepsRenderer,
|
|
22
|
+
Step: StepRenderer,
|
|
23
|
+
Timeline: TimelineRenderer,
|
|
24
|
+
Event: EventRenderer,
|
|
25
|
+
Stats: StatsRenderer,
|
|
26
|
+
Stat: StatRenderer,
|
|
27
|
+
EntityList: EntityListRenderer,
|
|
28
|
+
Entry: EntryRenderer,
|
|
29
|
+
Table: TableRenderer,
|
|
30
|
+
Column: null,
|
|
31
|
+
Chart: ChartRenderer,
|
|
32
|
+
Tabs: TabsRenderer,
|
|
33
|
+
Tab: TabRenderer,
|
|
34
|
+
Sections: SectionsRenderer,
|
|
35
|
+
Section: SectionRenderer,
|
|
36
|
+
CodeBlock: CodeBlockRenderer,
|
|
37
|
+
Image: ImageRenderer,
|
|
38
|
+
Gallery: GalleryRenderer,
|
|
39
|
+
Compare: CompareRenderer,
|
|
40
|
+
Model: ModelRenderer,
|
|
41
|
+
Map: MapRenderer,
|
|
42
|
+
Place: null,
|
|
43
|
+
Sources: SourcesRenderer,
|
|
44
|
+
Source: SourceRenderer,
|
|
45
|
+
File: FileRenderer,
|
|
46
|
+
Diff: DiffRenderer,
|
|
47
|
+
Commit: CommitRenderer,
|
|
48
|
+
Node: NodeRenderer,
|
|
49
|
+
Checklist: ChecklistRenderer,
|
|
50
|
+
Item: ItemRenderer,
|
|
51
|
+
Switch: SwitchRenderer,
|
|
52
|
+
Slider: SliderRenderer,
|
|
53
|
+
Segmented: SegmentedRenderer,
|
|
54
|
+
Select: SelectRenderer,
|
|
55
|
+
Option: null,
|
|
56
|
+
TextField: TextFieldRenderer,
|
|
57
|
+
Button: ButtonRenderer,
|
|
58
|
+
Show: null,
|
|
59
|
+
Each: null,
|
|
60
|
+
Choices: ChoicesRenderer,
|
|
61
|
+
Choice: ChoiceRenderer
|
|
62
|
+
};
|