dsh-plugin-core 0.2.13 → 0.3.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/README.md +52 -83
- package/dist/design/tokens-css.d.ts +1 -1
- package/dist/design/tokens-css.d.ts.map +1 -1
- package/dist/design/tokens-css.generated.d.ts +2 -0
- package/dist/design/tokens-css.generated.d.ts.map +1 -0
- package/dist/design/tokens-css.generated.js +4 -0
- package/dist/design/tokens-css.generated.js.map +1 -0
- package/dist/design/tokens-css.js +1 -252
- package/dist/design/tokens-css.js.map +1 -1
- package/dist/explorer/FileBrowser.d.ts +41 -0
- package/dist/explorer/FileBrowser.d.ts.map +1 -0
- package/dist/explorer/FileBrowser.js +659 -0
- package/dist/explorer/FileBrowser.js.map +1 -0
- package/dist/explorer/explorer-css.d.ts +1 -1
- package/dist/explorer/explorer-css.d.ts.map +1 -1
- package/dist/explorer/explorer-css.generated.d.ts +2 -0
- package/dist/explorer/explorer-css.generated.d.ts.map +1 -0
- package/dist/explorer/explorer-css.generated.js +4 -0
- package/dist/explorer/explorer-css.generated.js.map +1 -0
- package/dist/explorer/explorer-css.js +1 -31
- package/dist/explorer/explorer-css.js.map +1 -1
- package/dist/explorer/index.d.ts +4 -2
- package/dist/explorer/index.d.ts.map +1 -1
- package/dist/explorer/index.js +4 -2
- package/dist/explorer/index.js.map +1 -1
- package/dist/explorer/open.d.ts +103 -0
- package/dist/explorer/open.d.ts.map +1 -0
- package/dist/explorer/open.js +282 -0
- package/dist/explorer/open.js.map +1 -0
- package/dist/explorer/preview/BytesPreview.d.ts +13 -0
- package/dist/explorer/preview/BytesPreview.d.ts.map +1 -0
- package/dist/explorer/preview/BytesPreview.js +56 -0
- package/dist/explorer/preview/BytesPreview.js.map +1 -0
- package/dist/explorer/preview/HtmlPreview.d.ts +18 -0
- package/dist/explorer/preview/HtmlPreview.d.ts.map +1 -0
- package/dist/explorer/preview/HtmlPreview.js +112 -0
- package/dist/explorer/preview/HtmlPreview.js.map +1 -0
- package/dist/explorer/preview/OfficePreview.d.ts +11 -0
- package/dist/explorer/preview/OfficePreview.d.ts.map +1 -0
- package/dist/explorer/preview/OfficePreview.js +53 -0
- package/dist/explorer/preview/OfficePreview.js.map +1 -0
- package/dist/explorer/preview/TextPreview.d.ts +17 -0
- package/dist/explorer/preview/TextPreview.d.ts.map +1 -0
- package/dist/explorer/preview/TextPreview.js +95 -0
- package/dist/explorer/preview/TextPreview.js.map +1 -0
- package/dist/explorer/preview/index.d.ts +10 -3
- package/dist/explorer/preview/index.d.ts.map +1 -1
- package/dist/explorer/preview/index.js +52 -55
- package/dist/explorer/preview/index.js.map +1 -1
- package/dist/explorer/preview/md-labels.d.ts +3 -0
- package/dist/explorer/preview/md-labels.d.ts.map +1 -0
- package/dist/explorer/preview/md-labels.js +12 -0
- package/dist/explorer/preview/md-labels.js.map +1 -0
- package/dist/explorer/types.d.ts +186 -4
- package/dist/explorer/types.d.ts.map +1 -1
- package/dist/explorer/types.js +401 -14
- package/dist/explorer/types.js.map +1 -1
- package/dist/host/index.d.ts +66 -0
- package/dist/host/index.d.ts.map +1 -0
- package/dist/host/index.js +60 -0
- package/dist/host/index.js.map +1 -0
- package/dist/session/SessionViewModal.d.ts +42 -0
- package/dist/session/SessionViewModal.d.ts.map +1 -0
- package/dist/session/SessionViewModal.js +997 -0
- package/dist/session/SessionViewModal.js.map +1 -0
- package/dist/session/changes.d.ts +73 -0
- package/dist/session/changes.d.ts.map +1 -0
- package/dist/session/changes.js +134 -0
- package/dist/session/changes.js.map +1 -0
- package/dist/session/faces.d.ts +198 -0
- package/dist/session/faces.d.ts.map +1 -0
- package/dist/session/faces.js +17 -0
- package/dist/session/faces.js.map +1 -0
- package/dist/session/index.d.ts +5 -23
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +25 -70
- package/dist/session/index.js.map +1 -1
- package/dist/session/mirror/ChangedFileDiff.d.ts +22 -0
- package/dist/session/mirror/ChangedFileDiff.d.ts.map +1 -0
- package/dist/session/mirror/ChangedFileDiff.js +157 -0
- package/dist/session/mirror/ChangedFileDiff.js.map +1 -0
- package/dist/session/mirror/ChangedFilesCard.d.ts +18 -0
- package/dist/session/mirror/ChangedFilesCard.d.ts.map +1 -0
- package/dist/session/mirror/ChangedFilesCard.js +158 -0
- package/dist/session/mirror/ChangedFilesCard.js.map +1 -0
- package/dist/session/mirror/ChatGroupSeat.d.ts +24 -0
- package/dist/session/mirror/ChatGroupSeat.d.ts.map +1 -0
- package/dist/session/mirror/ChatGroupSeat.js +134 -0
- package/dist/session/mirror/ChatGroupSeat.js.map +1 -0
- package/dist/session/mirror/ChatNodeSeat.d.ts +43 -0
- package/dist/session/mirror/ChatNodeSeat.d.ts.map +1 -0
- package/dist/session/mirror/ChatNodeSeat.js +133 -0
- package/dist/session/mirror/ChatNodeSeat.js.map +1 -0
- package/dist/session/mirror/ChatView.d.ts +47 -0
- package/dist/session/mirror/ChatView.d.ts.map +1 -0
- package/dist/session/mirror/ChatView.js +127 -0
- package/dist/session/mirror/ChatView.js.map +1 -0
- package/dist/session/mirror/CommandCard.d.ts +20 -0
- package/dist/session/mirror/CommandCard.d.ts.map +1 -0
- package/dist/session/mirror/CommandCard.js +69 -0
- package/dist/session/mirror/CommandCard.js.map +1 -0
- package/dist/session/mirror/Deliverables.d.ts +24 -0
- package/dist/session/mirror/Deliverables.d.ts.map +1 -0
- package/dist/session/mirror/Deliverables.js +134 -0
- package/dist/session/mirror/Deliverables.js.map +1 -0
- package/dist/session/mirror/GenericCommandCard.d.ts +25 -0
- package/dist/session/mirror/GenericCommandCard.d.ts.map +1 -0
- package/dist/session/mirror/GenericCommandCard.js +567 -0
- package/dist/session/mirror/GenericCommandCard.js.map +1 -0
- package/dist/session/mirror/MessageIconActions.d.ts +16 -0
- package/dist/session/mirror/MessageIconActions.d.ts.map +1 -0
- package/dist/session/mirror/MessageIconActions.js +71 -0
- package/dist/session/mirror/MessageIconActions.js.map +1 -0
- package/dist/session/mirror/MessageItem.d.ts +66 -0
- package/dist/session/mirror/MessageItem.d.ts.map +1 -0
- package/dist/session/mirror/MessageItem.js +135 -0
- package/dist/session/mirror/MessageItem.js.map +1 -0
- package/dist/session/mirror/ReasoningRow.d.ts +11 -0
- package/dist/session/mirror/ReasoningRow.d.ts.map +1 -0
- package/dist/session/mirror/ReasoningRow.js +49 -0
- package/dist/session/mirror/ReasoningRow.js.map +1 -0
- package/dist/session/mirror/StatDialog.d.ts +20 -0
- package/dist/session/mirror/StatDialog.d.ts.map +1 -0
- package/dist/session/mirror/StatDialog.js +36 -0
- package/dist/session/mirror/StatDialog.js.map +1 -0
- package/dist/session/mirror/TurnProcessNodeView.d.ts +10 -0
- package/dist/session/mirror/TurnProcessNodeView.d.ts.map +1 -0
- package/dist/session/mirror/TurnProcessNodeView.js +68 -0
- package/dist/session/mirror/TurnProcessNodeView.js.map +1 -0
- package/dist/session/mirror/TurnTailNodeView.d.ts +32 -0
- package/dist/session/mirror/TurnTailNodeView.d.ts.map +1 -0
- package/dist/session/mirror/TurnTailNodeView.js +48 -0
- package/dist/session/mirror/TurnTailNodeView.js.map +1 -0
- package/dist/session/mirror/TurnTriggerNodeView.d.ts +14 -0
- package/dist/session/mirror/TurnTriggerNodeView.d.ts.map +1 -0
- package/dist/session/mirror/TurnTriggerNodeView.js +87 -0
- package/dist/session/mirror/TurnTriggerNodeView.js.map +1 -0
- package/dist/session/mirror/TurnUsagePanel.d.ts +21 -0
- package/dist/session/mirror/TurnUsagePanel.d.ts.map +1 -0
- package/dist/session/mirror/TurnUsagePanel.js +41 -0
- package/dist/session/mirror/TurnUsagePanel.js.map +1 -0
- package/dist/session/mirror/message-chrome.d.ts +33 -0
- package/dist/session/mirror/message-chrome.d.ts.map +1 -0
- package/dist/session/mirror/message-chrome.js +158 -0
- package/dist/session/mirror/message-chrome.js.map +1 -0
- package/dist/session/mirror/process-groups.d.ts +56 -0
- package/dist/session/mirror/process-groups.d.ts.map +1 -0
- package/dist/session/mirror/process-groups.js +202 -0
- package/dist/session/mirror/process-groups.js.map +1 -0
- package/dist/session/official-classes.d.ts +28 -0
- package/dist/session/official-classes.d.ts.map +1 -0
- package/dist/session/official-classes.js +146 -0
- package/dist/session/official-classes.js.map +1 -0
- package/dist/session/open-session-view.d.ts +17 -0
- package/dist/session/open-session-view.d.ts.map +1 -0
- package/dist/session/open-session-view.js +136 -0
- package/dist/session/open-session-view.js.map +1 -0
- package/dist/session/session-css.d.ts +1 -1
- package/dist/session/session-css.d.ts.map +1 -1
- package/dist/session/session-css.generated.d.ts +2 -0
- package/dist/session/session-css.generated.d.ts.map +1 -0
- package/dist/session/session-css.generated.js +4 -0
- package/dist/session/session-css.generated.js.map +1 -0
- package/dist/session/session-css.js +1 -17
- package/dist/session/session-css.js.map +1 -1
- package/dist/ui/AlertModal.d.ts +28 -0
- package/dist/ui/AlertModal.d.ts.map +1 -0
- package/dist/ui/AlertModal.js +29 -0
- package/dist/ui/AlertModal.js.map +1 -0
- package/dist/ui/Button.d.ts.map +1 -1
- package/dist/ui/Button.js +14 -1
- package/dist/ui/Button.js.map +1 -1
- package/dist/ui/Card.d.ts +4 -2
- package/dist/ui/Card.d.ts.map +1 -1
- package/dist/ui/Card.js +12 -6
- package/dist/ui/Card.js.map +1 -1
- package/dist/ui/Chip.d.ts +9 -1
- package/dist/ui/Chip.d.ts.map +1 -1
- package/dist/ui/Chip.js +8 -2
- package/dist/ui/Chip.js.map +1 -1
- package/dist/ui/CodeViewer.d.ts +36 -0
- package/dist/ui/CodeViewer.d.ts.map +1 -0
- package/dist/ui/CodeViewer.js +90 -0
- package/dist/ui/CodeViewer.js.map +1 -0
- package/dist/ui/ConfirmModal.d.ts +30 -0
- package/dist/ui/ConfirmModal.d.ts.map +1 -0
- package/dist/ui/ConfirmModal.js +23 -0
- package/dist/ui/ConfirmModal.js.map +1 -0
- package/dist/ui/DateTimePicker.d.ts +45 -0
- package/dist/ui/DateTimePicker.d.ts.map +1 -0
- package/dist/ui/DateTimePicker.js +447 -0
- package/dist/ui/DateTimePicker.js.map +1 -0
- package/dist/ui/Field.d.ts +11 -2
- package/dist/ui/Field.d.ts.map +1 -1
- package/dist/ui/Field.js +15 -5
- package/dist/ui/Field.js.map +1 -1
- package/dist/ui/MarqueeText.d.ts.map +1 -1
- package/dist/ui/MarqueeText.js +3 -1
- package/dist/ui/MarqueeText.js.map +1 -1
- package/dist/ui/Modal.d.ts +25 -3
- package/dist/ui/Modal.d.ts.map +1 -1
- package/dist/ui/Modal.js +41 -7
- package/dist/ui/Modal.js.map +1 -1
- package/dist/ui/ModelPicker.d.ts +25 -12
- package/dist/ui/ModelPicker.d.ts.map +1 -1
- package/dist/ui/ModelPicker.js +67 -19
- package/dist/ui/ModelPicker.js.map +1 -1
- package/dist/ui/PanelDock.d.ts +127 -0
- package/dist/ui/PanelDock.d.ts.map +1 -0
- package/dist/ui/PanelDock.js +297 -0
- package/dist/ui/PanelDock.js.map +1 -0
- package/dist/ui/Picker.d.ts +8 -2
- package/dist/ui/Picker.d.ts.map +1 -1
- package/dist/ui/Picker.js +86 -18
- package/dist/ui/Picker.js.map +1 -1
- package/dist/ui/SectionHead.d.ts +3 -3
- package/dist/ui/SectionHead.d.ts.map +1 -1
- package/dist/ui/SectionHead.js +4 -4
- package/dist/ui/SectionHead.js.map +1 -1
- package/dist/ui/Segmented.d.ts +2 -0
- package/dist/ui/Segmented.d.ts.map +1 -1
- package/dist/ui/Segmented.js +3 -1
- package/dist/ui/Segmented.js.map +1 -1
- package/dist/ui/Textarea.d.ts +2 -0
- package/dist/ui/Textarea.d.ts.map +1 -1
- package/dist/ui/Textarea.js +6 -1
- package/dist/ui/Textarea.js.map +1 -1
- package/dist/ui/Toast.d.ts +41 -8
- package/dist/ui/Toast.d.ts.map +1 -1
- package/dist/ui/Toast.js +216 -28
- package/dist/ui/Toast.js.map +1 -1
- package/dist/ui/WorkspacePicker.d.ts +15 -28
- package/dist/ui/WorkspacePicker.d.ts.map +1 -1
- package/dist/ui/WorkspacePicker.js +18 -27
- package/dist/ui/WorkspacePicker.js.map +1 -1
- package/dist/ui/card-css.d.ts +1 -1
- package/dist/ui/card-css.d.ts.map +1 -1
- package/dist/ui/card-css.generated.d.ts +2 -0
- package/dist/ui/card-css.generated.d.ts.map +1 -0
- package/dist/ui/card-css.generated.js +4 -0
- package/dist/ui/card-css.generated.js.map +1 -0
- package/dist/ui/card-css.js +1 -35
- package/dist/ui/card-css.js.map +1 -1
- package/dist/ui/chip-css.d.ts +1 -1
- package/dist/ui/chip-css.d.ts.map +1 -1
- package/dist/ui/chip-css.generated.d.ts +2 -0
- package/dist/ui/chip-css.generated.d.ts.map +1 -0
- package/dist/ui/chip-css.generated.js +4 -0
- package/dist/ui/chip-css.generated.js.map +1 -0
- package/dist/ui/chip-css.js +1 -17
- package/dist/ui/chip-css.js.map +1 -1
- package/dist/ui/code-viewer-css.d.ts +2 -0
- package/dist/ui/code-viewer-css.d.ts.map +1 -0
- package/dist/ui/code-viewer-css.generated.d.ts +2 -0
- package/dist/ui/code-viewer-css.generated.d.ts.map +1 -0
- package/dist/ui/code-viewer-css.generated.js +4 -0
- package/dist/ui/code-viewer-css.generated.js.map +1 -0
- package/dist/ui/code-viewer-css.js +3 -0
- package/dist/ui/code-viewer-css.js.map +1 -0
- package/dist/ui/code-viewer-lang.d.ts +15 -0
- package/dist/ui/code-viewer-lang.d.ts.map +1 -0
- package/dist/ui/code-viewer-lang.js +190 -0
- package/dist/ui/code-viewer-lang.js.map +1 -0
- package/dist/ui/code-viewer-theme.d.ts +5 -0
- package/dist/ui/code-viewer-theme.d.ts.map +1 -0
- package/dist/ui/code-viewer-theme.js +138 -0
- package/dist/ui/code-viewer-theme.js.map +1 -0
- package/dist/ui/controls/back-to-top-css.generated.d.ts +2 -0
- package/dist/ui/controls/back-to-top-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/back-to-top-css.generated.js +4 -0
- package/dist/ui/controls/back-to-top-css.generated.js.map +1 -0
- package/dist/ui/controls/button-css.generated.d.ts +2 -0
- package/dist/ui/controls/button-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/button-css.generated.js +4 -0
- package/dist/ui/controls/button-css.generated.js.map +1 -0
- package/dist/ui/controls/datetime-css.generated.d.ts +2 -0
- package/dist/ui/controls/datetime-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/datetime-css.generated.js +4 -0
- package/dist/ui/controls/datetime-css.generated.js.map +1 -0
- package/dist/ui/controls/field-css.generated.d.ts +2 -0
- package/dist/ui/controls/field-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/field-css.generated.js +4 -0
- package/dist/ui/controls/field-css.generated.js.map +1 -0
- package/dist/ui/controls/hint-css.generated.d.ts +2 -0
- package/dist/ui/controls/hint-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/hint-css.generated.js +4 -0
- package/dist/ui/controls/hint-css.generated.js.map +1 -0
- package/dist/ui/controls/loading-css.generated.d.ts +2 -0
- package/dist/ui/controls/loading-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/loading-css.generated.js +4 -0
- package/dist/ui/controls/loading-css.generated.js.map +1 -0
- package/dist/ui/controls/segmented-css.generated.d.ts +2 -0
- package/dist/ui/controls/segmented-css.generated.d.ts.map +1 -0
- package/dist/ui/controls/segmented-css.generated.js +4 -0
- package/dist/ui/controls/segmented-css.generated.js.map +1 -0
- package/dist/ui/controls-css.d.ts +7 -8
- package/dist/ui/controls-css.d.ts.map +1 -1
- package/dist/ui/controls-css.js +13 -8
- package/dist/ui/controls-css.js.map +1 -1
- package/dist/ui/css.d.ts +5 -0
- package/dist/ui/css.d.ts.map +1 -1
- package/dist/ui/css.js +13 -4
- package/dist/ui/css.js.map +1 -1
- package/dist/ui/datetime-logic.d.ts +100 -0
- package/dist/ui/datetime-logic.d.ts.map +1 -0
- package/dist/ui/datetime-logic.js +193 -0
- package/dist/ui/datetime-logic.js.map +1 -0
- package/dist/ui/feedback-css.d.ts +1 -1
- package/dist/ui/feedback-css.d.ts.map +1 -1
- package/dist/ui/feedback-css.generated.d.ts +2 -0
- package/dist/ui/feedback-css.generated.d.ts.map +1 -0
- package/dist/ui/feedback-css.generated.js +4 -0
- package/dist/ui/feedback-css.generated.js.map +1 -0
- package/dist/ui/feedback-css.js +1 -53
- package/dist/ui/feedback-css.js.map +1 -1
- package/dist/ui/host-data.d.ts +103 -0
- package/dist/ui/host-data.d.ts.map +1 -0
- package/dist/ui/host-data.js +106 -0
- package/dist/ui/host-data.js.map +1 -0
- package/dist/ui/host-toast.d.ts +23 -0
- package/dist/ui/host-toast.d.ts.map +1 -0
- package/dist/ui/host-toast.js +34 -0
- package/dist/ui/host-toast.js.map +1 -0
- package/dist/ui/index.d.ts +12 -6
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +10 -4
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/marquee-css.d.ts +2 -0
- package/dist/ui/marquee-css.d.ts.map +1 -0
- package/dist/ui/marquee-css.generated.d.ts +2 -0
- package/dist/ui/marquee-css.generated.d.ts.map +1 -0
- package/dist/ui/marquee-css.generated.js +4 -0
- package/dist/ui/marquee-css.generated.js.map +1 -0
- package/dist/ui/marquee-css.js +4 -0
- package/dist/ui/marquee-css.js.map +1 -0
- package/dist/ui/modal-host.d.ts +30 -0
- package/dist/ui/modal-host.d.ts.map +1 -0
- package/dist/ui/modal-host.js +101 -0
- package/dist/ui/modal-host.js.map +1 -0
- package/dist/ui/official.d.ts.map +1 -1
- package/dist/ui/official.js +45 -1
- package/dist/ui/official.js.map +1 -1
- package/dist/ui/panel-dock-css.d.ts +2 -0
- package/dist/ui/panel-dock-css.d.ts.map +1 -0
- package/dist/ui/panel-dock-css.generated.d.ts +2 -0
- package/dist/ui/panel-dock-css.generated.d.ts.map +1 -0
- package/dist/ui/panel-dock-css.generated.js +4 -0
- package/dist/ui/panel-dock-css.generated.js.map +1 -0
- package/dist/ui/panel-dock-css.js +4 -0
- package/dist/ui/panel-dock-css.js.map +1 -0
- package/dist/ui/panel-dock-logic.d.ts +50 -0
- package/dist/ui/panel-dock-logic.d.ts.map +1 -0
- package/dist/ui/panel-dock-logic.js +64 -0
- package/dist/ui/panel-dock-logic.js.map +1 -0
- package/dist/ui/picker-css.d.ts +1 -1
- package/dist/ui/picker-css.d.ts.map +1 -1
- package/dist/ui/picker-css.generated.d.ts +2 -0
- package/dist/ui/picker-css.generated.d.ts.map +1 -0
- package/dist/ui/picker-css.generated.js +4 -0
- package/dist/ui/picker-css.generated.js.map +1 -0
- package/dist/ui/picker-css.js +1 -48
- package/dist/ui/picker-css.js.map +1 -1
- package/dist/ui/picker-icons.d.ts +12 -0
- package/dist/ui/picker-icons.d.ts.map +1 -0
- package/dist/ui/picker-icons.js +29 -0
- package/dist/ui/picker-icons.js.map +1 -0
- package/dist/ui/picker-logic.d.ts +4 -1
- package/dist/ui/picker-logic.d.ts.map +1 -1
- package/dist/ui/picker-logic.js +1 -2
- package/dist/ui/picker-logic.js.map +1 -1
- package/dist/ui/resizer.d.ts +3 -1
- package/dist/ui/resizer.d.ts.map +1 -1
- package/dist/ui/resizer.js +1 -1
- package/dist/ui/resizer.js.map +1 -1
- package/dist/ui/toast-host.d.ts +24 -0
- package/dist/ui/toast-host.d.ts.map +1 -0
- package/dist/ui/toast-host.js +20 -0
- package/dist/ui/toast-host.js.map +1 -0
- package/dist/utils/date.d.ts +8 -0
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +16 -0
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/i18n.d.ts +1 -1
- package/dist/utils/i18n.d.ts.map +1 -1
- package/dist/utils/i18n.js +437 -18
- package/dist/utils/i18n.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +1 -0
- package/dist/utils/path.js.map +1 -1
- package/docs/README.md +12 -5
- package/docs/design/architecture.md +38 -8
- package/docs/design/copywriting.md +95 -0
- package/docs/design/doc-format.md +80 -0
- package/docs/design/doc-format.ts +39 -0
- package/docs/design/external/dsh-host.md +150 -1
- package/docs/design/features.md +4 -17
- package/docs/design/methods.md +13 -34
- package/docs/design/structure.md +25 -22
- package/docs/design/style.md +24 -50
- package/docs/help/design.doc.ts +112 -0
- package/docs/help/design.md +88 -0
- package/docs/help/explorer.doc.ts +136 -0
- package/docs/help/explorer.md +68 -0
- package/docs/help/index.doc.ts +79 -0
- package/docs/help/index.md +28 -0
- package/docs/help/integration.doc.ts +114 -0
- package/docs/help/integration.md +127 -0
- package/docs/help/methods.md +58 -0
- package/docs/help/session.doc.ts +154 -0
- package/docs/help/session.md +91 -0
- package/docs/help/style.md +80 -0
- package/docs/help/ui.doc.ts +404 -0
- package/docs/help/ui.md +342 -0
- package/docs/help/utils.doc.ts +133 -0
- package/docs/help/utils.md +96 -0
- package/docs/requirements.md +33 -12
- package/package.json +44 -3
- package/dist/ui/ErrorBoundary.d.ts +0 -22
- package/dist/ui/ErrorBoundary.d.ts.map +0 -1
- package/dist/ui/ErrorBoundary.js +0 -30
- package/dist/ui/ErrorBoundary.js.map +0 -1
- package/docs/design/features/design.md +0 -55
- package/docs/design/features/explorer.md +0 -73
- package/docs/design/features/session.md +0 -70
- package/docs/design/features/ui.md +0 -225
- package/docs/design/features/utils.md +0 -64
- package/docs/examples/integration.md +0 -103
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
# ui —— 基础控件
|
|
2
|
-
|
|
3
|
-
依赖 `design`。装的是「用 token 搭出来的零件」——直接用,不再自己写原生控件。
|
|
4
|
-
|
|
5
|
-
**纯零件,不自己取数**:选项、当前值都经 props 给(数据要跨 host↔client 边界,通道是插件私有的)。
|
|
6
|
-
|
|
7
|
-
## 使用前必做(一次)
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
import { createStyleKit } from 'dsh-plugin-core/design'
|
|
11
|
-
import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
|
|
12
|
-
|
|
13
|
-
setStyleKit(createStyleKit({ id: 'dsh-task-reminder-ui' }))
|
|
14
|
-
ensureControls()
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
漏了也不白屏(控件内部会补调),但样式可能晚一帧。
|
|
18
|
-
|
|
19
|
-
## 控件清单与 props
|
|
20
|
-
|
|
21
|
-
> 完整签名以 TypeScript 声明为准(`src/ui/*.ts`),下表是导读。
|
|
22
|
-
> 「追加 class/style」类参数一律**只允许补布局,不许覆盖皮肤**。
|
|
23
|
-
|
|
24
|
-
### Button / IconButton
|
|
25
|
-
|
|
26
|
-
10 档外观(2026-10-19 扩充,对齐主流 UI 框架的分类口径):
|
|
27
|
-
|
|
28
|
-
| 类别 | `variant` 档 |
|
|
29
|
-
|---|---|
|
|
30
|
-
| 实心(语义色底) | `primary`(黑)/ `secondary`(灰)/ `danger`(红)/ `success`(绿)/ `warning`(黄)/ `info`(蓝) |
|
|
31
|
-
| 线框 | `outline`(中性描边)/ `danger-outline`(红字描边,旧别名 `danger-ink` 仍可用) |
|
|
32
|
-
| 无底 | `ghost`(灰字,hover 起底)/ `link`(行内链接) |
|
|
33
|
-
|
|
34
|
-
| 参数 | 类型 | 默认 | 说明 |
|
|
35
|
-
|---|---|---|---|
|
|
36
|
-
| `variant` | 上表 10 档 | `outline` | 外观档 |
|
|
37
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `lg` | 高度档(24 / 28 / 32,有边无边同高) |
|
|
38
|
-
| `icon` | `ReactNode` | — | 前置图标(官方图标组件 / 字符串均可) |
|
|
39
|
-
| `iconRight` | `ReactNode` | — | 后置图标(展开箭头、外链) |
|
|
40
|
-
| `color` | `string` | — | 自定义主色(任意 CSS 色值):实心档作底色,线框 / 无底档作主色 |
|
|
41
|
-
| `loading` | `boolean` | `false` | 文案前显示同色小圈,并自动 `disabled` |
|
|
42
|
-
| `block` | `boolean` | `false` | 撑满父宽 |
|
|
43
|
-
| `children` | `ReactNode` | — | 文案(由调用方按语言给:中文出中文、英文出英文,中英混排也支持) |
|
|
44
|
-
| `…rest` | 原生 button 属性 | — | `type` / `disabled` / `title` / `aria-*` / `onClick` 原样透传 |
|
|
45
|
-
|
|
46
|
-
hover / active 走 token 派生色(**不用 opacity**),幅度见 `docs/design/style.md` §交互态颜色。
|
|
47
|
-
|
|
48
|
-
`IconButton`:`variant: 'plain' | 'outline' | 'danger'`(默认 `plain`)、`size`(默认 `lg`)、`icon`(必填)、
|
|
49
|
-
`label`(必填,无障碍名兼 title)。
|
|
50
|
-
|
|
51
|
-
### Segmented
|
|
52
|
-
|
|
53
|
-
`items: readonly { value: T; label: ReactNode }[]`(必填)+ 单选(`value: T` / `onChange: (v: T) => void`)
|
|
54
|
-
或多选(`multiple: true` + `value: T[]`)。另有 `size`(默认 `lg`)、`variant: 'default' | 'inset'`、
|
|
55
|
-
`block`(撑满等分)、`label`(无障碍组名)、`id`、`disabled`。
|
|
56
|
-
|
|
57
|
-
选中片 = `--dshpc-surface-raised`(与兄弟项目同取法)+ 1px 描边 + 浮起阴影:两种主题下都比轨道亮一档,
|
|
58
|
-
在卡片面上靠描边与阴影分界。未选中项 hover 起浅底(inset 用深一档,避免与轨道同色)。
|
|
59
|
-
|
|
60
|
-
### Input 家族(`Field.ts`)
|
|
61
|
-
|
|
62
|
-
| 组件 | 关键参数 | 说明 |
|
|
63
|
-
|---|---|---|
|
|
64
|
-
| `Input` | `value` `onChange(v)` `size`(默认 `sm`)`error` `disabled` `type` `placeholder` `inputRef` `onKeyDown` `onBlur` `aria-label` `title` | 基础输入框;`error` 描红 |
|
|
65
|
-
| `PrefixedInput` | 同 `Input` + `prefix: string` | 前置文案(`https://` / `C:\`) |
|
|
66
|
-
| `NumberInput` | `value: number` `onChange(v)` `min` `max` `step`(默认 1)`inputWidth` `suffix` `label` `decreaseLabel` `increaseLabel` | 已 clamp;失焦回弹草稿 |
|
|
67
|
-
| `Textarea` | `value` `onChange(v)` `placeholder` `error` `disabled` `rows` `spellCheck`(默认关)`aria-label` | — |
|
|
68
|
-
| `Checkbox` | `checked` `onChange(next)` `label` `accentColor` `disabled` | — |
|
|
69
|
-
| `fieldMetricsOf(size)` | `→ { height, font, line, icon, gap }` | 自己搭同款输入框时对齐尺寸 |
|
|
70
|
-
|
|
71
|
-
### Picker(通用选择器)
|
|
72
|
-
|
|
73
|
-
单选 / 多选 / 上限 / 搜索 / 分组 / 空态 / 降级,**自绘**(不依赖官方 Menu)。
|
|
74
|
-
|
|
75
|
-
| 参数 | 类型 | 默认 | 说明 |
|
|
76
|
-
|---|---|---|---|
|
|
77
|
-
| `groups` / `options` | `PickerGroup[]` / `PickerOption[]` | — | 二选一;`options` 会被当成一个无标题组 |
|
|
78
|
-
| `value` / `defaultValue` | `string \| string[]` | — | 给了 `value` 即受控;否则内部管 |
|
|
79
|
-
| `onChange` | `(v: string \| string[]) => void` | — | 单选回 `string`,多选回 `string[]` |
|
|
80
|
-
| `mode` | `'single' \| 'multiple'` | `single` | — |
|
|
81
|
-
| `max` | `number` | — | 多选上限;到上限其余项置灰 + 提示(不静默截断) |
|
|
82
|
-
| `searchable` | `boolean` | `false` | 显示搜索框 |
|
|
83
|
-
| `clearable` | `boolean` | `false` | 单选时列表顶部多一项「不选」 |
|
|
84
|
-
| `placeholder` | `string` | 内置「请选择」 | — |
|
|
85
|
-
| `degraded` | `boolean` | `false` | 候选可能不完整 ⇒ 顶部如实提示,不编造 |
|
|
86
|
-
| `disabled` | `boolean` | `false` | — |
|
|
87
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `md` | — |
|
|
88
|
-
| `placement` | `'down' \| 'up'` | `down` | 触发器靠近视口底部时用 `up` |
|
|
89
|
-
| `closeOnSelect` | `boolean` | 多选 `false` / 单选恒关 | 选中后是否收起 |
|
|
90
|
-
| `showLabels` | `boolean` | `true` | 多选时触发器列出已选项,而非只显示「已选 N 项」 |
|
|
91
|
-
| `className` | `string` | — | 定制宽度 / 外边距 |
|
|
92
|
-
| `ariaLabel` | `string` | — | 无障碍名 |
|
|
93
|
-
| `translate` | `Translate` | 内置 | 覆盖文案 |
|
|
94
|
-
|
|
95
|
-
键盘:`Esc` 关、`↑↓` 移游标、`Enter` 选。
|
|
96
|
-
|
|
97
|
-
纯逻辑也可单用:`toGroups` / `flattenOptions` / `filterGroups` / `toggleValue` / `labelsOf` / `groupOf`。
|
|
98
|
-
|
|
99
|
-
### WorkspacePicker / FilePicker
|
|
100
|
-
|
|
101
|
-
领域选择器——`Picker` 的薄封装(**领域数据 + 通用选择器交互**,与 explorer 的浏览/预览无关)。
|
|
102
|
-
|
|
103
|
-
| 组件 | 数据参数 | 其余 |
|
|
104
|
-
|---|---|---|
|
|
105
|
-
| `WorkspacePicker` | `workspaces: readonly string[]` | `value` `defaultValue` `mode` `max` `onChange` `clearable` `searchable` `disabled` `size` `placement` `className` `placeholder` `translate` |
|
|
106
|
-
| `FilePicker` | `files: readonly string[]` | 同上 |
|
|
107
|
-
|
|
108
|
-
**为什么在 ui 而不在 explorer**:它俩只是 select,不碰目录树 / 预览 / `WorkspaceFilesFace`。
|
|
109
|
-
放在 ui 里,需要「选工作区」的地方不必引入整个 explorer;explorer 内部要用也一样从 ui 引。
|
|
110
|
-
|
|
111
|
-
**数据由调用方给**:工作区列表是 host 侧 `ctx.workspaceRegistry.list()` 取的,要经插件自己的 HTTP 通道
|
|
112
|
-
送到 client,那条通道是插件私有的,组件取不到。
|
|
113
|
-
|
|
114
|
-
```tsx
|
|
115
|
-
import { WorkspacePicker } from 'dsh-plugin-core/ui'
|
|
116
|
-
|
|
117
|
-
h(WorkspacePicker, { workspaces: wsList, value: cur, onChange: setCur })
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
### ModelPicker
|
|
121
|
-
|
|
122
|
-
`groups: PickerGroup[]`(一组 = 一个供应商)+ `variant: 'cascade' | 'flat'`(默认 `flat`)。
|
|
123
|
-
|
|
124
|
-
- `flat`:一个下拉列全部
|
|
125
|
-
- `cascade`:一行两个下拉,先选供应商再选模型;换供应商会自动清空已选模型
|
|
126
|
-
|
|
127
|
-
其余参数透传给 `Picker`:`value` / `defaultValue` / `onChange` / `clearable` / `searchable` /
|
|
128
|
-
`size` / `placement` / `className` / `disabled` / `degraded` / `translate`。
|
|
129
|
-
|
|
130
|
-
「跟随宿主」这类默认项由调用方自己往 `groups` 里塞一项——编码口径(如 `provider/id`)也归调用方。
|
|
131
|
-
|
|
132
|
-
### Card / StripCard / Chip
|
|
133
|
-
|
|
134
|
-
**两种卡片外观,拆成两个独立组件**(消费方要用哪个拖哪个,不搞 variant 二合一):
|
|
135
|
-
|
|
136
|
-
| 组件 | 外观 | 色条 |
|
|
137
|
-
|---|---|---|
|
|
138
|
-
| `Card` | 圆角 + 1px 边框 | 短条,上下留距 8px |
|
|
139
|
-
| `StripCard` | 无圆角、无边框(贴边) | **通高**(贴顶到底) |
|
|
140
|
-
|
|
141
|
-
两者共享同一套 props:
|
|
142
|
-
|
|
143
|
-
| 参数 | 类型 | 默认 | 说明 |
|
|
144
|
-
|---|---|---|---|
|
|
145
|
-
| `accent` | 5 档 or 任意 CSS 色值 | `'business'` | 档位:`business`(蓝) / `success`(绿) / `warning`(黄) / `danger`(红) / `neutral`(灰),映射到 design 的 token;也可传 `'#f59e0b'` 这类自定义值 |
|
|
146
|
-
| `expanded` | `boolean` | `false` | 展开态(箭头朝向 + `panel` 显隐) |
|
|
147
|
-
| `onToggle` | `() => void` | — | 传了才显示右侧折叠箭头;**展开状态由调用方管** |
|
|
148
|
-
| `action` | `ReactNode` | — | 右上角操作区(「跳过」「查看会话」) |
|
|
149
|
-
| `children` | `ReactNode` | — | 主内容,排版随你 |
|
|
150
|
-
| `panel` | `ReactNode` | — | 展开后才显示的额外内容 |
|
|
151
|
-
| `className` / `style` | — | — | 追加类 / 样式 |
|
|
152
|
-
|
|
153
|
-
色条是绝对定位 + `top/bottom`,**跟着内容高度自适应**;上下是否留距由外观决定(`Card` 留 8px、`StripCard` 通高)。
|
|
154
|
-
颜色全走 token ⇒ **亮暗自动跟随宿主**(`body[data-ds-dark-theme]`),不需要调用方处理。
|
|
155
|
-
|
|
156
|
-
```tsx
|
|
157
|
-
import { Card, Chip, StripCard } from 'dsh-plugin-core/ui'
|
|
158
|
-
|
|
159
|
-
h(Card, {
|
|
160
|
-
accent: 'warning',
|
|
161
|
-
action: h(Button, { size: 'sm', variant: 'ghost' }, '跳过'),
|
|
162
|
-
},
|
|
163
|
-
h('div', null, '标题'),
|
|
164
|
-
h(Chip, null, '#npm'),
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
h(StripCard, {
|
|
168
|
-
accent: 'success',
|
|
169
|
-
expanded: open, onToggle: () => setOpen(!open),
|
|
170
|
-
panel: h('div', null, '展开详情'),
|
|
171
|
-
}, h('div', null, '标题 + 元信息'))
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
`Chip`:小标签,token 用现成的 `--dshpc-chip-bg`;传 `onClick` 才是可点的。
|
|
175
|
-
|
|
176
|
-
**语义边界**:`Chip` 只管「胶囊标签」这一件事。**只给图标的小按钮请用 `IconButton`**(`.dshpc-iconbtn`),
|
|
177
|
-
不要拿 `Chip` 当图标底板——同一个类名两套皮肤(28px 定宽 vs 胶囊形)会互相覆盖、把文字挤成一列。
|
|
178
|
-
现在一套皮肤只允许出现一次,由 `test/css-contract.test.mjs` 盯着。
|
|
179
|
-
|
|
180
|
-
### Modal
|
|
181
|
-
|
|
182
|
-
| 参数 | 类型 | 默认 | 说明 |
|
|
183
|
-
|---|---|---|---|
|
|
184
|
-
| `title` | `ReactNode` | — | 标题 |
|
|
185
|
-
| `onClose` | `() => void` | — | 不传则不显示关闭钮 |
|
|
186
|
-
| `closeOnMask` | `boolean` | `true` | 点遮罩关闭;误触代价大的场景设 `false` |
|
|
187
|
-
| `escClose` | `boolean` | `true` | Esc 关闭 |
|
|
188
|
-
| `maxWidth` | `string` | `min(960px, 92vw)` | — |
|
|
189
|
-
| `hideHeader` | `boolean` | `false` | 不渲染头部(沉浸式) |
|
|
190
|
-
| `footer` | `ReactNode` | — | 底栏(按钮区) |
|
|
191
|
-
| `children` | `ReactNode` | — | 主体 |
|
|
192
|
-
|
|
193
|
-
自绘 overlay,**不用 react-dom 的 portal**(避免多一个必需依赖)。
|
|
194
|
-
|
|
195
|
-
### 反馈件
|
|
196
|
-
|
|
197
|
-
**FieldHint(问号提示)**:独立组件,不属于 Input 家族——标题后、按钮后、文字后、输入框后随处可挂。
|
|
198
|
-
气泡 = **官方 Tooltip 本体**(2026-10-19 拍板「必须与悬停提示用同一个」):插件启动时
|
|
199
|
-
`setTooltipRenderer((props) => h(OfficialTooltip, props))` 把官方组件交给 core,`side` / `align` / `maxWidth` 可透传。
|
|
200
|
-
**不做降级兜底**(用户同日明确:宿主内官方包恒在;官方改版 = 重新适配,不另造一套)——
|
|
201
|
-
未注入 renderer 的非宿主环境(node 自检)只出问号图标、没有气泡。
|
|
202
|
-
|
|
203
|
-
core 保持零官方依赖:官方 Tooltip 只能由插件侧注入(`src/ui/tooltip.ts`),不许静态 import。
|
|
204
|
-
|
|
205
|
-
### 反馈件
|
|
206
|
-
|
|
207
|
-
| 组件 / 函数 | 说明 |
|
|
208
|
-
|---|---|
|
|
209
|
-
| `showToast(message, opts?)` | **命令式**,不要求挂组件。`opts: { variant?: 'info' \| 'success' \| 'error', durationMs? }`(默认 2600ms)。无 `document` 静默跳过 |
|
|
210
|
-
| `Loading({ anchorId? })` | 贴到主内容容器右下角的加载指示;`anchorId` 默认 `dshpc-main` |
|
|
211
|
-
| `RunningBlocks()` | 运行中的占位块 |
|
|
212
|
-
| `EmptyState({ text?, icon?, action?, translate? })` | 统一空态 |
|
|
213
|
-
| `ErrorBoundary({ fallback?, onError?, translate? })` | class 组件;子组件抛错不让整个插件白屏,默认给「出错了 + 重试」 |
|
|
214
|
-
| `SectionHead({ icon, title, right? })` | 分区标题 |
|
|
215
|
-
| `MarqueeText({ text, style?, title?, className? })` | 超长省略、hover 滚动 |
|
|
216
|
-
| `LiveText({ render, style? })` | 定时重渲染(相对时间这类) |
|
|
217
|
-
| `BackToTop({ anchorId? })` | 回到顶部,贴主容器右缘外侧 |
|
|
218
|
-
| `startResizeLayoutWidth(opts)` | 拖拽调整布局宽度 |
|
|
219
|
-
|
|
220
|
-
## 定制边界
|
|
221
|
-
|
|
222
|
-
- props 就是定制面:要改行为请**组合 props**,不要 fork 源码(fork 会跟不上后续修复)。
|
|
223
|
-
- 「追加 class/style」只允许补布局,皮肤一律走 token 覆盖。
|
|
224
|
-
- 缺控件时先提需求;实在要自己写,请按 `docs/design/style.md` 的口径用同一套 token,
|
|
225
|
-
并考虑提到本包(一个控件的复用价值高于一次性的私有实现)。
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# utils —— 通用方法
|
|
2
|
-
|
|
3
|
-
零 React、零 DOM、零 `design` 依赖。装的是「和界面无关的纯方法」。
|
|
4
|
-
|
|
5
|
-
## 日期(`date.ts`)
|
|
6
|
-
|
|
7
|
-
全部走**本机时区**;解析失败一律不抛错、按兜底返回,不编造时间。
|
|
8
|
-
|
|
9
|
-
| 函数 | 签名 | 边界行为 |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| `pad2` | `(value: number \| string) => string` | `9` ⇒ `'09'` |
|
|
12
|
-
| `formatDateTime` | `(iso, opts?: { seconds?, fallback? }) => string` | 解析失败 ⇒ `opts.fallback`,缺省**原串**;`seconds: true` 补 `:ss` |
|
|
13
|
-
| `formatYmd` | `(iso, opts?: { fallback? }) => string` | 解析失败 ⇒ `opts.fallback`,缺省 `—` |
|
|
14
|
-
| `formatClock` | `(iso: string \| null \| undefined, opts?: { fallback? }) => string` | 空值/解析失败 ⇒ `opts.fallback`,缺省 `-` |
|
|
15
|
-
| `formatDurationHms` | `(ms: number) => string` | 有小时 ⇒ `H:MM:SS`,否则 `MM:SS`;负数/NaN ⇒ `-` |
|
|
16
|
-
| `sameCalendarDay` | `(a: Date, b: Date) => boolean` | 本机时区比年月日 |
|
|
17
|
-
| `relativePast` | `(iso, nowMs, translate?) => string` | 过去时间 ⇒ 「3 分钟前」;未来/解析失败 ⇒ 「刚刚」 |
|
|
18
|
-
| `relativeFuture` | `(iso, nowMs, translate?) => string` | 未来时间 ⇒ 「3 分钟后」;解析失败回退 `formatYmd` |
|
|
19
|
-
| `formatRange` | `(fromIso, toIso, opts?: { seconds? }) => string` | 同天 ⇒ `09:00 – 10:30`;跨天两端带日期 |
|
|
20
|
-
| `overlaps` | `(aFrom, aTo, bFrom, bTo) => boolean` | 半开区间 `[from, to)`;NaN ⇒ 不重叠 |
|
|
21
|
-
|
|
22
|
-
> `relativePast` 与 `relativeFuture` 是**对偶**的:调度表这类展示未来时间的场景必须用
|
|
23
|
-
> `relativeFuture`——用 `relativePast` 会把「3 分钟后」显示成「刚刚」,直接丢语义。
|
|
24
|
-
|
|
25
|
-
## 字符串 / 数字
|
|
26
|
-
|
|
27
|
-
| 函数 | 签名 | 边界行为 |
|
|
28
|
-
|---|---|---|
|
|
29
|
-
| `baseNameOf` | `(path: string) => string` | 取末段;目录尾斜杠不会取成空串 |
|
|
30
|
-
| `safeTrim` | `(s: string) => string` | 去首尾空白 |
|
|
31
|
-
| `truncateBytes` | `(s: string, maxBytes: number) => string` | 按 **UTF-8 字节**截断,不切半个字 |
|
|
32
|
-
| `formatBytes` | `(bytes: number) => string` | `12 KB` / `3.4 MB`;0 与负数 ⇒ `—` |
|
|
33
|
-
| `formatCount` | `(n: number) => string` | 千分位 |
|
|
34
|
-
|
|
35
|
-
## HTTP
|
|
36
|
-
|
|
37
|
-
| 函数 | 签名 | 说明 |
|
|
38
|
-
|---|---|---|
|
|
39
|
-
| `request` | `(url, opts?: RequestOptions) => Promise<Response>` | 带超时(默认 10s)与 `AbortSignal` |
|
|
40
|
-
| `requestJson` | `<T>(url, opts?) => Promise<T>` | 自动解析 JSON |
|
|
41
|
-
| `HttpError` | `class extends Error` | 带 `status`;超时抛 `AbortError` |
|
|
42
|
-
|
|
43
|
-
`RequestOptions`:`{ timeoutMs?, signal?, method?, body?, headers? }`。
|
|
44
|
-
|
|
45
|
-
## 多语言(`i18n.ts`)
|
|
46
|
-
|
|
47
|
-
核心提供的固定提示语(控件错误、加载中、空态…)由本包内置中英字典管。
|
|
48
|
-
|
|
49
|
-
| 函数 | 说明 |
|
|
50
|
-
|---|---|
|
|
51
|
-
| `setLocale(locale)` | `'zh'`(默认)/ `'en'` |
|
|
52
|
-
| `getLocale()` | 当前语言 |
|
|
53
|
-
| `t(key, vars?)` | 取文案;`{n}` 占位由 `vars` 填 |
|
|
54
|
-
| `type Translate` | `(key, vars?) => string`,组件都收这个参数供覆盖 |
|
|
55
|
-
|
|
56
|
-
**边界**:插件自己界面的文案由插件自己管,本包不提供插件级 i18n 框架。
|
|
57
|
-
想覆盖某条文案:给组件传 `translate` prop,或给自己的场景直接用 `t` + 自定义字典。
|
|
58
|
-
|
|
59
|
-
可用 key 全集见 `src/utils/i18n.ts` 的 `UtilMessageKey`。
|
|
60
|
-
|
|
61
|
-
## 定制边界
|
|
62
|
-
|
|
63
|
-
- 这些是纯函数,**直接调用即可**,没有需要 fork 的场景。
|
|
64
|
-
- 时区口径固定本机时区(沿用三家现有口径)—— 要显式时区请在调用方转换后再传进来。
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# 样例:从零接入一个插件
|
|
2
|
-
|
|
3
|
-
一个插件从装包到用上各子包的完整路径。复制粘贴级别的最小可用示例。
|
|
4
|
-
|
|
5
|
-
## 0. 装包
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
pnpm add dsh-plugin-core
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
(npm 也能用;推荐 pnpm。)
|
|
12
|
-
`react` 是 optional peer——只用 `utils` / `design` 的插件不必装。
|
|
13
|
-
包里带预编译 `dist`(宿主以 git/npm 装插件**不跑构建脚本**,产物必须随包发布)。
|
|
14
|
-
|
|
15
|
-
## 1. 初始化样式(一次)
|
|
16
|
-
|
|
17
|
-
```ts
|
|
18
|
-
// 插件 client 入口
|
|
19
|
-
import { createStyleKit } from 'dsh-plugin-core/design'
|
|
20
|
-
import { ensureControls, setStyleKit } from 'dsh-plugin-core/ui'
|
|
21
|
-
|
|
22
|
-
const kit = createStyleKit({ id: 'dsh-task-reminder-ui' })
|
|
23
|
-
setStyleKit(kit)
|
|
24
|
-
ensureControls()
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
`id` 必须插件内唯一(多插件同页靠它互不覆盖);变量与类名统一使用 `dshpc` 前缀,不需要传参。
|
|
28
|
-
|
|
29
|
-
## 2. 用一个控件
|
|
30
|
-
|
|
31
|
-
```tsx
|
|
32
|
-
import { Button, Input, Picker, showToast } from 'dsh-plugin-core/ui'
|
|
33
|
-
|
|
34
|
-
h(Input, { value: name, onChange: setName, placeholder: '任务名', error: nameError })
|
|
35
|
-
h(Button, { variant: 'primary', onClick: save }, '保存')
|
|
36
|
-
h(Picker, {
|
|
37
|
-
options: models, // [{ value, label }]
|
|
38
|
-
value: current,
|
|
39
|
-
onChange: (v) => setCurrent(v as string),
|
|
40
|
-
searchable: true,
|
|
41
|
-
clearable: true,
|
|
42
|
-
})
|
|
43
|
-
showToast('已保存', { variant: 'success' })
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## 3. 用通用方法
|
|
47
|
-
|
|
48
|
-
```ts
|
|
49
|
-
import { formatDateTime, relativeFuture, formatBytes } from 'dsh-plugin-core/utils'
|
|
50
|
-
|
|
51
|
-
formatDateTime(task.runAt, { seconds: true }) // 2026-10-18 09:30:05
|
|
52
|
-
relativeFuture(task.runAt, Date.now()) // 3 分钟后(未来时间用这个)
|
|
53
|
-
formatBytes(file.size) // 12 KB
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## 4. 接工作区浏览(要宿主能力)
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
import { ExplorerPanel } from 'dsh-plugin-core/explorer'
|
|
60
|
-
|
|
61
|
-
// 从 ctx 取出这一小块(不要传整个 ctx)
|
|
62
|
-
const workspaceFiles = ctx.remote.workspaceFiles
|
|
63
|
-
|
|
64
|
-
h(ExplorerPanel, { workspaceFiles, sessionId, path: '', onSelect: (p) => setFile(p) })
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
选工作区的下拉(数据由你给——它要经插件私有通道送到 client):
|
|
68
|
-
|
|
69
|
-
```tsx
|
|
70
|
-
import { WorkspacePicker } from 'dsh-plugin-core/ui'
|
|
71
|
-
|
|
72
|
-
h(WorkspacePicker, { workspaces: wsList, value: cur, onChange: setCur })
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## 5. 接会话预览
|
|
76
|
-
|
|
77
|
-
```tsx
|
|
78
|
-
import { SessionPreview } from 'dsh-plugin-core/session'
|
|
79
|
-
|
|
80
|
-
const source = {
|
|
81
|
-
listMessages: async (id) => (await api.get(`/sessions/${id}/messages`)).data,
|
|
82
|
-
download: async (id, path) => api.getBytes(`/sessions/${id}/file?path=${path}`),
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
h(SessionPreview, { sessionId, source, variant: 'modal', onClose: close })
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## 6. 卸载清理(可选)
|
|
89
|
-
|
|
90
|
-
```ts
|
|
91
|
-
kit.dispose() // 撤掉 <style> 标签并清空登记域(插件卸载 / HMR)
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## 接入坑(按踩频排序)
|
|
95
|
-
|
|
96
|
-
| 坑 | 现象 | 解法 |
|
|
97
|
-
|---|---|---|
|
|
98
|
-
| 忘了 `setStyleKit` 就渲染控件 | 样式晚一帧或落到默认 style id | 入口处先调,再渲染 |
|
|
99
|
-
| 直接 `import` 官方 `@deepseek-ai/*` 并指望本包帮你引 | Node 下 `ERR_MODULE_NOT_FOUND` | 本包 `ui` 已零官方依赖;你要用官方件就在插件侧自己处理平台模块 |
|
|
100
|
-
| 给 `read` 少传第三参 `range` | 远端拒:`expected 3 business argument(s) … got 2` | 一律显式传 `{}` |
|
|
101
|
-
| 用 `relativePast` 显示未来时间 | 「3 分钟后」显示成「刚刚」 | 用 `relativeFuture` |
|
|
102
|
-
| 想让组件自己取工作区 / 模型列表 | 取不到(通道是插件私有的) | 数据经 props 给,宿主能力经接口注入 |
|
|
103
|
-
| 暗色不跟随宿主 | 插件固守一种明暗 | 判据是 `body[data-ds-dark-theme]`,别用 `prefers-color-scheme` |
|