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
package/dist/ui/MarqueeText.js
CHANGED
|
@@ -22,11 +22,13 @@ export function MarqueeText(props) {
|
|
|
22
22
|
}, []);
|
|
23
23
|
useLayoutEffect(() => {
|
|
24
24
|
const outer = outerRef.current;
|
|
25
|
-
|
|
25
|
+
const inner = innerRef.current;
|
|
26
|
+
if (outer === null || inner === null)
|
|
26
27
|
return;
|
|
27
28
|
measure();
|
|
28
29
|
const ro = new ResizeObserver(measure); // 抽屉拖宽变窄 / 字体就绪都会改 clientWidth ⇒ 重测
|
|
29
30
|
ro.observe(outer);
|
|
31
|
+
ro.observe(inner); // webfont 就绪只改 inner.scrollWidth 不改 outer.clientWidth,不观察就漏测(官方 PathLabel 同款双观察)
|
|
30
32
|
return () => { ro.disconnect(); };
|
|
31
33
|
}, [measure]);
|
|
32
34
|
useEffect(() => { measure(); }, [props.text, measure]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarqueeText.js","sourceRoot":"","sources":["../../src/ui/MarqueeText.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAyC,MAAM,OAAO,CAAA;AAE5I,aAAa;AACb,MAAM,UAAU,WAAW,CAAC,KAS3B;IACC,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;
|
|
1
|
+
{"version":3,"file":"MarqueeText.js","sourceRoot":"","sources":["../../src/ui/MarqueeText.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAyC,MAAM,OAAO,CAAA;AAE5I,aAAa;AACb,MAAM,UAAU,WAAW,CAAC,KAS3B;IACC,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACxE,CAAC,EAAE,EAAE,CAAC,CAAA;IACN,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAM;QAC5C,OAAO,EAAE,CAAA;QACT,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA,CAAC,oCAAoC;QAC3E,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACjB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,CAAC,iFAAiF;QACnG,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAA,CAAC,CAAC,CAAA;IAClC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACb,SAAS,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAA;IACpB,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACtH,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,EACC,CAAC,CAAC,MAAM,EAAE;QACR,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,aAAa;QACxB,KAAK,EAAE;YACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClH;KACF,EAAE,KAAK,CAAC,IAAI,CAAC,CACf,CAAA;AACH,CAAC"}
|
package/dist/ui/Modal.d.ts
CHANGED
|
@@ -1,16 +1,38 @@
|
|
|
1
1
|
import { createElement as h, type ReactNode } from 'react';
|
|
2
2
|
import { type Translate } from '../utils/i18n.js';
|
|
3
|
+
/** 弹窗尺寸档:sm≈确认框 / md(默认) / lg 大窗。 */
|
|
4
|
+
export type ModalSize = 'sm' | 'md' | 'lg';
|
|
3
5
|
export interface ModalProps {
|
|
6
|
+
/** 头部左侧图标位(可不传)。 */
|
|
7
|
+
icon?: ReactNode;
|
|
4
8
|
title?: ReactNode;
|
|
5
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* 标题**下方**的副标题行(等宽小字;会话预览的 sessionId 就放这里 —— 用户 2026-10-22:
|
|
11
|
+
* 标识属于标题区,不占正文)。与标题同宽、可换行。
|
|
12
|
+
*/
|
|
13
|
+
subtitle?: ReactNode;
|
|
14
|
+
/** 标题右侧小块:数字 / 标签(ReactNode;demo 用 Chip 演示)。 */
|
|
15
|
+
headerExtra?: ReactNode;
|
|
16
|
+
/** 头部右侧动作区:关闭钮之外的更多按钮(ReactNode)。 */
|
|
17
|
+
headerActions?: ReactNode;
|
|
18
|
+
/** 关闭回调;不传则 ✕ 不显示(必须自己给关闭路径)。 */
|
|
6
19
|
onClose?: () => void;
|
|
20
|
+
/** 是否显示右上角 ✕(默认 = `onClose` 是否传入)。确认框传 false 即可去掉小叉。 */
|
|
21
|
+
closable?: boolean;
|
|
7
22
|
/** 点遮罩是否关闭(默认 true;误触代价大的场景设 false)。 */
|
|
8
23
|
closeOnMask?: boolean;
|
|
9
24
|
/** 按 Esc 是否关闭(默认 true)。 */
|
|
10
25
|
escClose?: boolean;
|
|
11
|
-
/**
|
|
26
|
+
/** 尺寸档:sm=小确认框家族 / md·lg=大弹窗家族;也可用 width/height 精确覆盖。 */
|
|
27
|
+
size?: ModalSize;
|
|
28
|
+
/** 面板宽度(默认随 size:sm 360px / md 720px / lg 1120px,均带视口兜底)。 */
|
|
29
|
+
width?: string;
|
|
30
|
+
/** 面板高度(默认仅 lg 有:calc(100% - 80px),同兄弟项目大弹窗)。 */
|
|
31
|
+
height?: string;
|
|
32
|
+
/** 面板最大宽度 / 最大高度覆盖(不传走 size 默认)。 */
|
|
12
33
|
maxWidth?: string;
|
|
13
|
-
|
|
34
|
+
maxHeight?: string;
|
|
35
|
+
/** 不渲染头部(沉浸式 / 无标题场景)。 */
|
|
14
36
|
hideHeader?: boolean;
|
|
15
37
|
footer?: ReactNode;
|
|
16
38
|
children?: ReactNode;
|
package/dist/ui/Modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErE,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEpD,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,oBAAoB;IACpB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gDAAgD;IAChD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,qCAAqC;IACrC,aAAa,CAAC,EAAE,SAAS,CAAA;IACzB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,yDAAyD;IACzD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAwG7D"}
|
package/dist/ui/Modal.js
CHANGED
|
@@ -21,6 +21,23 @@ export function Modal(props) {
|
|
|
21
21
|
document.addEventListener('keydown', onKey);
|
|
22
22
|
return () => document.removeEventListener('keydown', onKey);
|
|
23
23
|
}, [escClose, props.onClose]);
|
|
24
|
+
// 默认宽高(兄弟项目真值:小框 360px(task-list.tsx:457)/ 大弹窗 min(1120px,100vw-32px) × calc(100%-80px)(archive-session-css.ts:42))。
|
|
25
|
+
// 宽度用 `100%`(相对遮罩盒)而不是 `100vw`:遮罩已按右侧分栏让位(见 feedback.css),
|
|
26
|
+
// 用 `100vw` 算出来的宽在分栏在场时会溢出到分栏上,等于白让(用户 2026-10-22)。
|
|
27
|
+
const sizeStyle = {
|
|
28
|
+
sm: { width: '360px', maxWidth: 'calc(100% - 48px)' },
|
|
29
|
+
md: { width: 'min(720px, calc(100% - 32px))', maxHeight: '86vh' },
|
|
30
|
+
lg: { width: 'min(1120px, calc(100% - 32px))', height: 'calc(100% - 80px)' },
|
|
31
|
+
};
|
|
32
|
+
const s = sizeStyle[props.size ?? 'md'];
|
|
33
|
+
const showClose = props.closable !== false && props.onClose !== undefined;
|
|
34
|
+
const showHeader = props.hideHeader !== true &&
|
|
35
|
+
(props.icon !== undefined ||
|
|
36
|
+
props.title !== undefined ||
|
|
37
|
+
props.subtitle !== undefined ||
|
|
38
|
+
props.headerExtra !== undefined ||
|
|
39
|
+
props.headerActions !== undefined ||
|
|
40
|
+
showClose);
|
|
24
41
|
return h('div', {
|
|
25
42
|
className: 'dshpc-modal-mask',
|
|
26
43
|
onClick: () => {
|
|
@@ -28,18 +45,35 @@ export function Modal(props) {
|
|
|
28
45
|
props.onClose?.();
|
|
29
46
|
},
|
|
30
47
|
}, h('div', {
|
|
31
|
-
className:
|
|
32
|
-
style:
|
|
48
|
+
className: `dshpc-modal${props.size ? ` dshpc-modal--${props.size}` : ''}`,
|
|
49
|
+
style: {
|
|
50
|
+
width: props.width ?? s.width,
|
|
51
|
+
maxWidth: props.maxWidth ?? s.maxWidth,
|
|
52
|
+
maxHeight: props.maxHeight ?? s.maxHeight,
|
|
53
|
+
height: props.height ?? s.height,
|
|
54
|
+
},
|
|
33
55
|
onClick: (e) => e.stopPropagation(),
|
|
34
|
-
},
|
|
35
|
-
? null
|
|
36
|
-
|
|
56
|
+
}, showHeader
|
|
57
|
+
? h('div', { className: 'dshpc-modal__head' }, h('div', { className: 'dshpc-modal__heading' }, props.icon === undefined ? null : h('span', { className: 'dshpc-modal__lead' }, props.icon),
|
|
58
|
+
// 标题组:第一行 = 标题 + 右侧小块(徽标**紧跟标题**,不跨两行居中),
|
|
59
|
+
// 第二行 = 副标题(会话 id 这类标识)。
|
|
60
|
+
h('div', { className: 'dshpc-modal__titlegroup' }, h('div', { className: 'dshpc-modal__titlerow' }, h('div', { className: 'dshpc-modal__title' }, props.title ?? ''), props.headerExtra === undefined
|
|
61
|
+
? null
|
|
62
|
+
: h('div', { className: 'dshpc-modal__extra' }, props.headerExtra)), props.subtitle === undefined
|
|
63
|
+
? null
|
|
64
|
+
: h('div', { className: 'dshpc-modal__sid' }, props.subtitle))), h('div', { className: 'dshpc-modal__spacer' }), props.headerActions === undefined
|
|
37
65
|
? null
|
|
38
|
-
: h('
|
|
66
|
+
: h('div', { className: 'dshpc-modal__actions' }, props.headerActions), showClose
|
|
67
|
+
? h('button', {
|
|
39
68
|
type: 'button',
|
|
40
69
|
className: 'dshpc-modal__close',
|
|
41
70
|
'aria-label': tt('modalClose'),
|
|
42
71
|
onClick: () => props.onClose?.(),
|
|
43
|
-
}, '✕')
|
|
72
|
+
}, '✕')
|
|
73
|
+
: null)
|
|
74
|
+
: null,
|
|
75
|
+
// body 是**唯一滚动容器**:内距归它、滚动条归它、滚动条贴面板右缘;
|
|
76
|
+
// 内容只管按流排,不许自己定高、不许自己再开滚动条(用户 2026-10-22 定的口径)。
|
|
77
|
+
h('div', { className: 'dshpc-modal__body' }, props.children ?? null), props.footer === undefined ? null : h('div', { className: 'dshpc-modal__foot' }, props.footer)));
|
|
44
78
|
}
|
|
45
79
|
//# sourceMappingURL=Modal.js.map
|
package/dist/ui/Modal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,CAAC,EAAkB,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../src/ui/Modal.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/ModelPicker.d.ts
CHANGED
|
@@ -1,30 +1,43 @@
|
|
|
1
|
-
import { createElement as h } from 'react';
|
|
1
|
+
import { createElement as h, type ReactNode } from 'react';
|
|
2
2
|
import { type Translate } from '../utils/i18n.js';
|
|
3
3
|
import { type PickerSize } from './Picker.js';
|
|
4
4
|
import { type PickerGroup } from './picker-logic.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* - `
|
|
8
|
-
* - `
|
|
6
|
+
* 模型选择器的两种形态(消费者自选):
|
|
7
|
+
* - `grouped`(分组,默认):**一个下拉、完全独立**,供应商做组头、模型列在下面,不与任何东西联动。
|
|
8
|
+
* - `cascade`(联动):**两个下拉、彼此联动** —— 先选供应商,后面模型列表跟着筛;
|
|
9
|
+
* 换供应商会清空已选模型(旧模型不属于新供应商)。
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* **返回口径一致**:`onChange` 一律发最终模型值(`${provider}/${id}`);级联态换供应商先发 `''`。
|
|
12
|
+
* 选「默认模型」也发 `''` —— 表示没选,调用方自己处理。
|
|
13
|
+
*
|
|
14
|
+
* **数据自带**:不传 `groups` 就读 `connectHost(ctx, { modelsPath })` 喂进的真实目录。
|
|
12
15
|
*/
|
|
13
|
-
export type ModelPickerVariant = '
|
|
16
|
+
export type ModelPickerVariant = 'grouped' | 'cascade';
|
|
14
17
|
export interface ModelPickerProps {
|
|
15
|
-
/**
|
|
16
|
-
groups
|
|
18
|
+
/** 覆盖内置目录(一般不用;测试或特殊数据源时才传)。 */
|
|
19
|
+
groups?: PickerGroup[];
|
|
17
20
|
variant?: ModelPickerVariant;
|
|
18
|
-
/**
|
|
21
|
+
/** 最终模型值;`''` = 默认模型(没选)。 */
|
|
19
22
|
value?: string;
|
|
20
23
|
/** 非受控初始值。 */
|
|
21
24
|
defaultValue?: string;
|
|
22
25
|
onChange?: (value: string) => void;
|
|
23
|
-
/**
|
|
26
|
+
/** 是否提供「默认模型」选项(默认提供;不需要就传 false)。 */
|
|
27
|
+
allowDefault?: boolean;
|
|
28
|
+
/** 「默认模型」的文案(默认取内置字典)。 */
|
|
29
|
+
defaultLabel?: string;
|
|
30
|
+
/** 未选时的文字(默认「模型」)。 */
|
|
31
|
+
placeholder?: string;
|
|
32
|
+
/** 触发器前置图标:不传 = 默认星形;传 `null` = 不显示;传元素 = 自定义。 */
|
|
33
|
+
icon?: ReactNode | null;
|
|
34
|
+
/** 问号提示文字(传了才显示)。 */
|
|
35
|
+
hint?: string;
|
|
36
|
+
/** 目录不可用时的如实提示(不传则由目录状态决定)。 */
|
|
24
37
|
degraded?: boolean;
|
|
25
38
|
disabled?: boolean;
|
|
26
|
-
/** 允许清空(「跟随宿主」这类语义靠调用方自己塞默认项,这里只负责能清掉)。 */
|
|
27
39
|
clearable?: boolean;
|
|
40
|
+
/** 下拉内搜索框(默认开;要关传 false)。 */
|
|
28
41
|
searchable?: boolean;
|
|
29
42
|
size?: PickerSize;
|
|
30
43
|
placement?: 'down' | 'up';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAA6C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAErG,OAAO,EAAK,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI7E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,CAAA;AAEtD,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,kBAAkB,CAAA;IAC5B,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kDAAkD;IAClD,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAqGzE"}
|
package/dist/ui/ModelPicker.js
CHANGED
|
@@ -1,52 +1,100 @@
|
|
|
1
|
-
import { createElement as h } from 'react';
|
|
1
|
+
import { createElement as h, useEffect, useState, useSyncExternalStore } from 'react';
|
|
2
2
|
import { ensureControls } from './css.js';
|
|
3
3
|
import { t } from '../utils/i18n.js';
|
|
4
4
|
import { Picker } from './Picker.js';
|
|
5
5
|
import { flattenOptions, groupOf } from './picker-logic.js';
|
|
6
|
+
import { modelCatalog } from './host-data.js';
|
|
7
|
+
import { sparkleIcon } from './picker-icons.js';
|
|
6
8
|
export function ModelPicker(props) {
|
|
7
9
|
ensureControls();
|
|
8
10
|
const tt = props.translate ?? t;
|
|
9
11
|
const value = props.value;
|
|
10
|
-
const variant = props.variant ?? '
|
|
11
|
-
const
|
|
12
|
-
|
|
12
|
+
const variant = props.variant ?? 'grouped';
|
|
13
|
+
const searchable = props.searchable ?? true;
|
|
14
|
+
const defaultOption = props.allowDefault === false
|
|
15
|
+
? undefined
|
|
16
|
+
: { value: '', label: props.defaultLabel ?? tt('modelDefault') };
|
|
17
|
+
// 目录状态:外部没喂目录(Node 自检 / 宿主缺服务)⇒ 空 + 如实降级,不编数据。
|
|
18
|
+
const catalog = useSyncExternalStore(modelCatalog.subscribe, modelCatalog.getSnapshot);
|
|
19
|
+
const groups = props.groups ??
|
|
20
|
+
(catalog.status === 'ready'
|
|
21
|
+
? catalog.routes.map((route) => ({
|
|
22
|
+
value: route.provider,
|
|
23
|
+
label: route.displayName,
|
|
24
|
+
options: route.models.map((model) => ({
|
|
25
|
+
value: `${route.provider}/${model.id}`,
|
|
26
|
+
label: model.name ?? model.id,
|
|
27
|
+
})),
|
|
28
|
+
}))
|
|
29
|
+
: []);
|
|
30
|
+
// 目录不可用、或读出来是空的 ⇒ 如实提示「候选可能不完整」,别让空列表看起来像坏了。
|
|
31
|
+
const degraded = props.degraded ?? (catalog.status === 'unavailable' || (catalog.status === 'ready' && groups.length === 0));
|
|
32
|
+
const icon = props.icon === undefined ? sparkleIcon() : props.icon ?? undefined;
|
|
33
|
+
const emitModel = (v) => {
|
|
34
|
+
props.onChange?.(typeof v === 'string' ? v : v[0] ?? '');
|
|
35
|
+
};
|
|
36
|
+
// 联动态的厂商选择必须组件自己记 —— 值是从模型值反推的,换厂商会把模型清成 ''
|
|
37
|
+
// (拍板口径),反推就再也找不到刚点的厂商(2026-10-20 真机:选完厂商后面仍是黑的)。
|
|
38
|
+
const [pickedProvider, setPickedProvider] = useState('');
|
|
39
|
+
const curGroup = groupOf(groups, value ?? '');
|
|
40
|
+
const provider = pickedProvider !== '' && groups.some((g) => g.value === pickedProvider)
|
|
41
|
+
? pickedProvider
|
|
42
|
+
: curGroup?.value ?? '';
|
|
43
|
+
// 值定到某模型上 ⇒ 临时选的厂商功成身退,回到按值反推
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (value !== undefined && value !== '')
|
|
46
|
+
setPickedProvider('');
|
|
47
|
+
}, [value]);
|
|
48
|
+
if (variant === 'grouped') {
|
|
13
49
|
return h(Picker, {
|
|
14
|
-
|
|
50
|
+
// 「默认模型」放最上面:空 label 的组,Picker 只渲染选项不渲染组头
|
|
51
|
+
groups: defaultOption === undefined
|
|
52
|
+
? groups
|
|
53
|
+
: [{ value: '', label: '', options: [defaultOption] }, ...groups],
|
|
15
54
|
value,
|
|
16
55
|
defaultValue: props.defaultValue,
|
|
17
|
-
|
|
18
|
-
|
|
56
|
+
icon,
|
|
57
|
+
placeholder: props.placeholder ?? tt('modelModel'),
|
|
58
|
+
degraded,
|
|
19
59
|
disabled: props.disabled,
|
|
20
60
|
clearable: props.clearable,
|
|
21
|
-
searchable
|
|
61
|
+
searchable,
|
|
62
|
+
hint: props.hint,
|
|
22
63
|
size: props.size,
|
|
23
64
|
placement: props.placement,
|
|
24
65
|
className: props.className,
|
|
25
|
-
onChange:
|
|
66
|
+
onChange: emitModel,
|
|
26
67
|
});
|
|
27
68
|
}
|
|
28
|
-
|
|
29
|
-
const
|
|
69
|
+
// cascade:两个下拉联动 —— 供应商筛模型;换供应商清空模型
|
|
70
|
+
const group = groups.find((g) => g.value === provider);
|
|
71
|
+
const options = group === undefined ? [] : flattenOptions([group]);
|
|
30
72
|
return h('div', { className: 'dshpc-picker__row' }, h(Picker, {
|
|
31
|
-
options:
|
|
73
|
+
options: groups.map((g) => ({ value: g.value, label: g.label })),
|
|
32
74
|
value: provider === '' ? undefined : provider,
|
|
33
75
|
placeholder: tt('modelProvider'),
|
|
76
|
+
degraded,
|
|
34
77
|
disabled: props.disabled,
|
|
35
|
-
|
|
36
|
-
onChange: () =>
|
|
78
|
+
searchable: false,
|
|
79
|
+
onChange: (v) => {
|
|
80
|
+
setPickedProvider(typeof v === 'string' ? v : v[0] ?? '');
|
|
81
|
+
props.onChange?.('');
|
|
82
|
+
},
|
|
37
83
|
}), h(Picker, {
|
|
38
|
-
options:
|
|
84
|
+
options: defaultOption === undefined ? options : [defaultOption, ...options],
|
|
39
85
|
value,
|
|
40
86
|
defaultValue: props.defaultValue,
|
|
41
|
-
|
|
42
|
-
|
|
87
|
+
icon,
|
|
88
|
+
placeholder: props.placeholder ?? tt('modelModel'),
|
|
89
|
+
degraded,
|
|
43
90
|
disabled: props.disabled === true || provider === '',
|
|
44
91
|
clearable: props.clearable,
|
|
45
|
-
searchable
|
|
92
|
+
searchable,
|
|
93
|
+
hint: props.hint,
|
|
46
94
|
size: props.size,
|
|
47
95
|
placement: props.placement,
|
|
48
96
|
className: props.className,
|
|
49
|
-
onChange:
|
|
97
|
+
onChange: emitModel,
|
|
50
98
|
}));
|
|
51
99
|
}
|
|
52
100
|
//# sourceMappingURL=ModelPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../src/ui/ModelPicker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 停靠面板(PanelDock)—— 可停靠的右侧分栏容器。
|
|
3
|
+
*
|
|
4
|
+
* 形态:**布局成员,不是浮层**。占宽度、把主区挤窄,因此必须由调用方放进自己的
|
|
5
|
+
* flex 根容器里;不能像 Modal 那样自挂 `document.body`(自挂只能遮盖、挤不窄)。
|
|
6
|
+
*
|
|
7
|
+
* 分工照成熟组件库的通行做法(Ant Design `Tabs` / `Drawer` 同一套):
|
|
8
|
+
* · **结构写在调用点** —— `<PanelDock dock={dock}><DockPanel id="files">…</DockPanel></PanelDock>`;
|
|
9
|
+
* · **显隐归状态** —— `dock.open('files')` / `dock.close('files')`,只传 id,不传内容;
|
|
10
|
+
* · **头部可控** —— `title` / `icon` / `extra` 三件套;要更自由就 `header` 整块替换,`header={null}` 表示不要头部;
|
|
11
|
+
* · **关闭钮可退让** —— `closable={false}` 不出;`closeButton="floating"` 浮在右上角,不占头部布局。
|
|
12
|
+
*/
|
|
13
|
+
import { createElement as h, type ReactNode } from 'react';
|
|
14
|
+
import { type Translate } from '../utils/i18n.js';
|
|
15
|
+
import { type DockState, type OpenResult } from './panel-dock-logic.js';
|
|
16
|
+
/** 关闭钮位置:`auto` = 有头部就放头部行末、没头部就浮着。 */
|
|
17
|
+
export type DockCloseButton = 'auto' | 'header' | 'floating' | 'none';
|
|
18
|
+
/** 关闭来源:区分「用户点 ✕」与「代码关的」,拦截/清理时用得着。 */
|
|
19
|
+
export type DockCloseReason = 'button' | 'api';
|
|
20
|
+
export interface DockPanelProps {
|
|
21
|
+
/** 组名(寻址键);同名唯一。 */
|
|
22
|
+
id: string;
|
|
23
|
+
/** 标题;`header` 传了非 undefined 的值时它只用于无障碍名。 */
|
|
24
|
+
title?: ReactNode;
|
|
25
|
+
/** 标题前的图标位(可多个)。 */
|
|
26
|
+
icon?: ReactNode;
|
|
27
|
+
/** 标题**右侧**的任意内容(可以是按钮、标签、下拉、甚至是弹层触发器)。 */
|
|
28
|
+
extra?: ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* 整块替换头部:
|
|
31
|
+
* · 不传 / `undefined` ⇒ 内置头(`icon` + `title` + `extra`)
|
|
32
|
+
* · `null` ⇒ 不要头部(此时关闭钮默认浮在右上角)
|
|
33
|
+
* · 其他 ReactNode ⇒ 你的头部,库不加内边距/边框/背景
|
|
34
|
+
*/
|
|
35
|
+
header?: ReactNode | null;
|
|
36
|
+
/** 是否显示关闭钮(默认 true)。 */
|
|
37
|
+
closable?: boolean;
|
|
38
|
+
/** 关闭钮位置(默认 `auto`)。 */
|
|
39
|
+
closeButton?: DockCloseButton;
|
|
40
|
+
/** 自定义关闭图标(默认 ✕)。 */
|
|
41
|
+
closeIcon?: ReactNode;
|
|
42
|
+
/** 首次打开时的宽度(px,默认 460)。 */
|
|
43
|
+
width?: number;
|
|
44
|
+
/** 可拖动的宽度下限(默认 320)。 */
|
|
45
|
+
minWidth?: number;
|
|
46
|
+
/** 可拖动的宽度上限;不传 = 只受视口与主区保底约束。 */
|
|
47
|
+
maxWidth?: number;
|
|
48
|
+
/** 无头部时的无障碍名(缺省退回 `title`,再退回 `id`)。 */
|
|
49
|
+
ariaLabel?: string;
|
|
50
|
+
children?: ReactNode;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 声明一个面板。**它自己不渲染任何东西**——由父级 `<PanelDock>` 读它的 props 后统一画。
|
|
54
|
+
* 因此必须作为 `<PanelDock>` 的**直接子元素**(可以条件渲染成 `null`)。
|
|
55
|
+
*/
|
|
56
|
+
export declare function DockPanel(_props: DockPanelProps): null;
|
|
57
|
+
export interface PanelDockOptions {
|
|
58
|
+
/** 同时存在的栏数上限(默认 3)。 */
|
|
59
|
+
maxPanels?: number;
|
|
60
|
+
/** 新栏默认宽度(默认 460)。 */
|
|
61
|
+
defaultWidth?: number;
|
|
62
|
+
/** 新栏默认宽度下限(默认 320)。 */
|
|
63
|
+
minWidth?: number;
|
|
64
|
+
/** 宽度记忆前缀;传 `false` 关闭记忆(默认 `dshpc-dock`)。 */
|
|
65
|
+
storageKey?: string | false;
|
|
66
|
+
/** 新开一栏后触发(重复打开已存在的不触发)。 */
|
|
67
|
+
onOpen?: (event: {
|
|
68
|
+
id: string;
|
|
69
|
+
created: boolean;
|
|
70
|
+
}) => void;
|
|
71
|
+
/** 关闭**之前**触发;返回 `false` 可取消(未保存内容拦截就靠它)。 */
|
|
72
|
+
onBeforeClose?: (event: {
|
|
73
|
+
id: string;
|
|
74
|
+
reason: DockCloseReason;
|
|
75
|
+
}) => boolean | undefined;
|
|
76
|
+
/** 已经关掉之后触发。 */
|
|
77
|
+
onClose?: (event: {
|
|
78
|
+
id: string;
|
|
79
|
+
reason: DockCloseReason;
|
|
80
|
+
}) => void;
|
|
81
|
+
/** 拖宽松手后触发。 */
|
|
82
|
+
onResize?: (event: {
|
|
83
|
+
id: string;
|
|
84
|
+
width: number;
|
|
85
|
+
}) => void;
|
|
86
|
+
/** 到上限被拒时触发(库不弹提示、不抛异常)。 */
|
|
87
|
+
onLimitReached?: (event: {
|
|
88
|
+
id: string;
|
|
89
|
+
}) => void;
|
|
90
|
+
}
|
|
91
|
+
export interface PanelDockController {
|
|
92
|
+
open(id?: string): OpenResult;
|
|
93
|
+
close(id?: string, reason?: DockCloseReason): void;
|
|
94
|
+
toggle(id?: string): OpenResult;
|
|
95
|
+
isOpen(id?: string): boolean;
|
|
96
|
+
ids(): string[];
|
|
97
|
+
setWidth(id: string, width: number): void;
|
|
98
|
+
subscribe(listener: () => void): () => void;
|
|
99
|
+
getSnapshot(): DockState;
|
|
100
|
+
/** 归一化后的默认值(组件兜底用)。 */
|
|
101
|
+
defaults: {
|
|
102
|
+
maxPanels: number;
|
|
103
|
+
defaultWidth: number;
|
|
104
|
+
minWidth: number;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 造一个面板控制器。状态在它身上,组件用 `useSyncExternalStore` 订阅。
|
|
109
|
+
*
|
|
110
|
+
* 为什么状态不放在组件里:开门/关门常常发生在按钮 onClick、事件回调里(命令式),
|
|
111
|
+
* 而**内容与头部仍在调用点声明**——这正是 Tabs 那种「状态 + children」的分工。
|
|
112
|
+
*/
|
|
113
|
+
export declare function createPanelDock(options?: PanelDockOptions): PanelDockController;
|
|
114
|
+
export interface PanelDockProps {
|
|
115
|
+
/** `createPanelDock()` 的返回值。 */
|
|
116
|
+
dock: PanelDockController;
|
|
117
|
+
/** 由 `<DockPanel>` 直接子元素组成。 */
|
|
118
|
+
children?: ReactNode;
|
|
119
|
+
/** 追加 class(只补布局,不覆盖皮肤)。 */
|
|
120
|
+
className?: string;
|
|
121
|
+
/** 拖宽时给主区留的最小宽度(px,默认 480)。 */
|
|
122
|
+
mainMinWidth?: number;
|
|
123
|
+
translate?: Translate;
|
|
124
|
+
}
|
|
125
|
+
/** 停靠栏本体:只渲染「开着的」面板,结构取自对应的 `<DockPanel>`。 */
|
|
126
|
+
export declare function PanelDock(props: PanelDockProps): ReturnType<typeof h>;
|
|
127
|
+
//# sourceMappingURL=PanelDock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PanelDock.d.ts","sourceRoot":"","sources":["../../src/ui/PanelDock.ts"],"names":[],"mappings":"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"}
|