dsh-plugin-core 0.2.14 → 0.4.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/LICENSE +21 -0
- 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 +4 -0
- package/dist/ui/Segmented.d.ts.map +1 -1
- package/dist/ui/Segmented.js +88 -31
- 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 -11
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Segmented.d.ts","sourceRoot":"","sources":["../../src/ui/Segmented.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Segmented.d.ts","sourceRoot":"","sources":["../../src/ui/Segmented.ts"],"names":[],"mappings":"AAqBA,OAAO,EACL,aAAa,IAAI,CAAC,EAKlB,KAAK,aAAa,EACnB,MAAM,OAAO,CAAA;AAWd,iBAAiB;AACjB,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACtD,kBAAkB;IAClB,KAAK,EAAE,CAAC,CAAA;IACR,YAAY;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACpD,WAAW;IACX,KAAK,EAAE,SAAS,aAAa,CAAC,CAAC,CAAC,EAAE,CAAA;IAClC,2BAA2B;IAC3B,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,uBAAuB;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC5F,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,aAAa;IACb,KAAK,EAAE,CAAC,CAAA;IACR,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,kBAAkB,CAAC,CAAC,CAAC;IAC3F,iBAAiB;IACjB,QAAQ,EAAE,IAAI,CAAA;IACd,eAAe;IACf,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;CAC/B;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;AAExG;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAsG1F"}
|
package/dist/ui/Segmented.js
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* (真不够用才允许在调用点本地覆盖 `--dshpc-control-h-*`,属例外而非常态);
|
|
7
7
|
* - `variant`:`default`(纯黑面:轨道=第二层面 + 外描边)/ `inset`(灰底面:抄「版本」开关观感,
|
|
8
8
|
* 轨道=交互灰 hover 底、无外描边)—— 两套都保留、不合并;变体只改两个颜色变量,结构 / 尺寸 / 交互规则零重复。
|
|
9
|
+
* - `bordered`(默认 false):最外再包一圈 1px 描边,选中段相应变为描边块而非填充;
|
|
10
|
+
* 总高与无框版逐像素一致(border 由 padding 抵消),两种模式整行混排不跳高。
|
|
9
11
|
*
|
|
10
12
|
* 用法:
|
|
11
13
|
* // 单选
|
|
@@ -17,7 +19,8 @@
|
|
|
17
19
|
* docs/design/ui-style-guide.md §五 的流程(改基础层,一处改全站生效)。
|
|
18
20
|
*/
|
|
19
21
|
import { ensureControls } from './css.js';
|
|
20
|
-
import { createElement as h } from 'react';
|
|
22
|
+
import { createElement as h, useCallback, useLayoutEffect, useRef, useState, } from 'react';
|
|
23
|
+
import { getTooltipRenderer } from './tooltip.js';
|
|
21
24
|
/**
|
|
22
25
|
* 渲染一个分段控件(单选 / 多选同体)。
|
|
23
26
|
*
|
|
@@ -33,42 +36,96 @@ export function Segmented(props) {
|
|
|
33
36
|
const multiple = props.multiple === true;
|
|
34
37
|
const value = props.value;
|
|
35
38
|
const onChange = props.onChange;
|
|
39
|
+
// 单选:选中底由一块共用「滑动块」承担,点选后从旧段滑到新段(多选每段各自着色,没有唯一滑块可滑)。
|
|
40
|
+
const sliding = !multiple && props.items.length > 1;
|
|
41
|
+
const rootRef = useRef(null);
|
|
42
|
+
const [thumb, setThumb] = useState(null);
|
|
43
|
+
// 量选中段的位置:容器 width 由内容决定,段宽又随文案 / 角标变,只能读一次布局。
|
|
44
|
+
const measure = useCallback(() => {
|
|
45
|
+
const sel = rootRef.current?.querySelector('.dshpc-seg__item[aria-pressed="true"]');
|
|
46
|
+
if (sel === undefined || sel === null) {
|
|
47
|
+
setThumb(null);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const next = { left: sel.offsetLeft, top: sel.offsetTop, width: sel.offsetWidth, height: sel.offsetHeight };
|
|
51
|
+
// 尺寸没变就不 set,免得 ResizeObserver 与渲染互相打转。
|
|
52
|
+
setThumb((cur) => cur !== null && cur.left === next.left && cur.top === next.top && cur.width === next.width && cur.height === next.height
|
|
53
|
+
? cur
|
|
54
|
+
: next);
|
|
55
|
+
}, []);
|
|
56
|
+
useLayoutEffect(() => {
|
|
57
|
+
if (!sliding) {
|
|
58
|
+
setThumb(null);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
measure();
|
|
62
|
+
const root = rootRef.current;
|
|
63
|
+
// 容器被布局改宽(block / 换行 / webfont 到位)时重测;首帧 thumb 是插入的新元素,不触发过渡。
|
|
64
|
+
if (root === null || typeof ResizeObserver === 'undefined')
|
|
65
|
+
return;
|
|
66
|
+
const ro = new ResizeObserver(measure);
|
|
67
|
+
ro.observe(root);
|
|
68
|
+
return () => ro.disconnect();
|
|
69
|
+
}, [sliding, measure, value, size, variant, props.items, props.bordered, props.block]);
|
|
70
|
+
// 核心 Tooltip 渲染器(宿主启动注入官方 Tooltip;未注入则段级提示降级为无)。
|
|
71
|
+
const renderer = getTooltipRenderer();
|
|
36
72
|
return h('div', {
|
|
37
73
|
role: 'group',
|
|
38
74
|
'aria-label': props.label,
|
|
39
75
|
id: props.id,
|
|
76
|
+
ref: rootRef,
|
|
40
77
|
// 结构一套、皮肤只在 controls-css 里;此处只拼「轴」类名,不写任何颜色 / 尺寸字面值。
|
|
41
|
-
className: `dshpc-seg dshpc-seg--${variant} dshpc-seg--${size}${props.block === true ? ' dshpc-seg--block' : ''}${props.className !== undefined ? ` ${props.className}` : ''}`,
|
|
78
|
+
className: `dshpc-seg dshpc-seg--${variant} dshpc-seg--${size}${sliding ? ' dshpc-seg--slide' : ''}${props.block === true ? ' dshpc-seg--block' : ''}${props.bordered === true ? ' dshpc-seg--bordered' : ''}${props.className !== undefined ? ` ${props.className}` : ''}`,
|
|
42
79
|
style: props.style,
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
80
|
+
}, [
|
|
81
|
+
sliding && thumb !== null
|
|
82
|
+
? h('span', {
|
|
83
|
+
key: '__thumb__',
|
|
84
|
+
className: 'dshpc-seg__thumb',
|
|
85
|
+
'aria-hidden': true,
|
|
86
|
+
style: {
|
|
87
|
+
left: `${String(thumb.left)}px`,
|
|
88
|
+
top: `${String(thumb.top)}px`,
|
|
89
|
+
width: `${String(thumb.width)}px`,
|
|
90
|
+
height: `${String(thumb.height)}px`,
|
|
91
|
+
},
|
|
92
|
+
})
|
|
93
|
+
: null,
|
|
94
|
+
...props.items.map(item => {
|
|
95
|
+
const on = multiple ? value.includes(item.value) : value === item.value;
|
|
96
|
+
const disabled = item.disabled === true || props.disabled === true;
|
|
97
|
+
const handle = () => {
|
|
98
|
+
if (disabled)
|
|
99
|
+
return;
|
|
100
|
+
if (multiple) {
|
|
101
|
+
const arr = value;
|
|
102
|
+
const next = arr.includes(item.value) ? arr.filter(v => v !== item.value) : [...arr, item.value];
|
|
103
|
+
onChange(next);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
;
|
|
107
|
+
onChange(item.value);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const itemButton = h('button', {
|
|
111
|
+
key: item.value,
|
|
112
|
+
type: 'button',
|
|
113
|
+
className: 'dshpc-seg__item',
|
|
114
|
+
// 选中态用 aria-pressed 表达 ⇒ 读屏可读,皮肤也只认这一个选择器
|
|
115
|
+
'aria-pressed': on,
|
|
116
|
+
disabled,
|
|
117
|
+
onClick: handle,
|
|
118
|
+
}, item.label, item.count !== undefined && item.count > 0
|
|
119
|
+
? h('span', { className: 'dshpc-seg__count' }, String(item.count))
|
|
120
|
+
: null, item.badge !== undefined && item.badge > 0
|
|
121
|
+
? h('span', { className: 'dshpc-seg__badge' }, String(item.badge))
|
|
122
|
+
: null);
|
|
123
|
+
// 段级悬停提示:走注入的官方 Tooltip(与 FieldHint 同一条路),不破坏分段布局。
|
|
124
|
+
if (item.tooltip !== undefined && renderer !== undefined) {
|
|
125
|
+
return renderer({ label: item.tooltip, side: 'top', children: itemButton });
|
|
53
126
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
return h('button', {
|
|
60
|
-
key: item.value,
|
|
61
|
-
type: 'button',
|
|
62
|
-
className: 'dshpc-seg__item',
|
|
63
|
-
// 选中态用 aria-pressed 表达 ⇒ 读屏可读,皮肤也只认这一个选择器
|
|
64
|
-
'aria-pressed': on,
|
|
65
|
-
disabled,
|
|
66
|
-
onClick: handle,
|
|
67
|
-
}, item.label, item.count !== undefined && item.count > 0
|
|
68
|
-
? h('span', { className: 'dshpc-seg__count' }, String(item.count))
|
|
69
|
-
: null, item.badge !== undefined && item.badge > 0
|
|
70
|
-
? h('span', { className: 'dshpc-seg__badge' }, String(item.badge))
|
|
71
|
-
: null);
|
|
72
|
-
}));
|
|
127
|
+
return itemButton;
|
|
128
|
+
}),
|
|
129
|
+
]);
|
|
73
130
|
}
|
|
74
131
|
//# sourceMappingURL=Segmented.js.map
|
package/dist/ui/Segmented.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Segmented.js","sourceRoot":"","sources":["../../src/ui/Segmented.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"Segmented.js","sourceRoot":"","sources":["../../src/ui/Segmented.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/Textarea.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export interface TextareaProps {
|
|
|
28
28
|
className?: string;
|
|
29
29
|
/** 追加样式(只允许补布局)。 */
|
|
30
30
|
style?: CSSProperties;
|
|
31
|
+
/** 问号提示文字:给了就在输入框后面挂标准 FieldHint。 */
|
|
32
|
+
hint?: string;
|
|
31
33
|
}
|
|
32
34
|
/** 多行文本输入。 */
|
|
33
35
|
export declare function Textarea(props: TextareaProps): ReturnType<typeof h>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/ui/Textarea.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../src/ui/Textarea.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AAI9D,MAAM,WAAW,aAAa;IAC5B,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,UAAU;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU;IACV,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+BAA+B;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iBAAiB;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oBAAoB;IACpB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,cAAc;AACd,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAkBnE"}
|
package/dist/ui/Textarea.js
CHANGED
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { createElement as h } from 'react';
|
|
8
8
|
import { ensureControls } from './css.js';
|
|
9
|
+
import { FieldHint } from './FieldHint.js';
|
|
9
10
|
/** 多行文本输入。 */
|
|
10
11
|
export function Textarea(props) {
|
|
11
12
|
ensureControls();
|
|
12
13
|
const { value, onChange, placeholder, error, disabled, id, rows, spellCheck, className, style } = props;
|
|
13
|
-
|
|
14
|
+
const box = h('textarea', {
|
|
14
15
|
id,
|
|
15
16
|
rows,
|
|
16
17
|
value,
|
|
@@ -22,5 +23,9 @@ export function Textarea(props) {
|
|
|
22
23
|
style,
|
|
23
24
|
onChange: (event) => { onChange(event.target.value); },
|
|
24
25
|
});
|
|
26
|
+
// 多行的问号放**右下角**(2026-10-20 用户:不要垂直居中,那样像贴在中间的空白上)
|
|
27
|
+
if (props.hint === undefined)
|
|
28
|
+
return box;
|
|
29
|
+
return h('span', { className: 'dshpc-fieldwrap dshpc-fieldwrap--block' }, box, h(FieldHint, { text: props.hint }));
|
|
25
30
|
}
|
|
26
31
|
//# sourceMappingURL=Textarea.js.map
|
package/dist/ui/Textarea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../src/ui/Textarea.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAsB,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"Textarea.js","sourceRoot":"","sources":["../../src/ui/Textarea.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,aAAa,IAAI,CAAC,EAAsB,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AA6B1C,cAAc;AACd,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,cAAc,EAAE,CAAA;IAChB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACvG,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE;QACxB,EAAE;QACF,IAAI;QACJ,KAAK;QACL,WAAW;QACX,QAAQ;QACR,UAAU,EAAE,UAAU,KAAK,IAAI;QAC/B,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC;QACjC,SAAS,EAAE,iBAAiB,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACjJ,KAAK;QACL,QAAQ,EAAE,CAAC,KAAoC,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;KAC5E,CAAC,CAAA;IACX,kDAAkD;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IACxC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,wCAAwC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AACpH,CAAC"}
|
package/dist/ui/Toast.d.ts
CHANGED
|
@@ -1,12 +1,45 @@
|
|
|
1
|
-
|
|
1
|
+
import { type ButtonVariant } from './Button.js';
|
|
2
|
+
export type ToastVariant = 'info' | 'success' | 'error' | 'warning';
|
|
3
|
+
export type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
4
|
+
export interface ToastOptions {
|
|
5
|
+
variant?: ToastVariant;
|
|
6
|
+
/** 停留时长(毫秒),默认 2600。 */
|
|
7
|
+
durationMs?: number;
|
|
8
|
+
/** 整条自定义颜色(背景色)。传了就走 unstyled 自定义卡,覆盖默认语义色。 */
|
|
9
|
+
color?: string;
|
|
10
|
+
/** toast 消失(自动或手动关闭)后触发。 */
|
|
11
|
+
onDismiss?: () => void;
|
|
12
|
+
/** 出现位置(作用于全局唯一 Toaster),默认 'bottom-center'。 */
|
|
13
|
+
position?: ToastPosition;
|
|
14
|
+
}
|
|
15
|
+
/** 封装好的提示:右侧动作按钮(用我们自己的 Button 样式)。 */
|
|
16
|
+
export interface ToastAction {
|
|
17
|
+
text: string;
|
|
18
|
+
/** 按钮样式(我们的 ButtonVariant),默认 'outline'。 */
|
|
19
|
+
variant?: ButtonVariant;
|
|
20
|
+
onClick: () => void;
|
|
21
|
+
}
|
|
22
|
+
export interface NotifyOptions {
|
|
23
|
+
variant?: ToastVariant;
|
|
24
|
+
/** 次要说明文字(标题下方)。 */
|
|
25
|
+
description?: string;
|
|
26
|
+
durationMs?: number;
|
|
27
|
+
position?: ToastPosition;
|
|
28
|
+
/** 右侧 1–2 个动作按钮;传了就走我们封装的卡片样式并渲染按钮。 */
|
|
29
|
+
actions?: ToastAction[];
|
|
30
|
+
}
|
|
2
31
|
/**
|
|
3
|
-
*
|
|
32
|
+
* 官方 Sonner 原生提示(**命令式**)。用于「官方的」对比 demo 与需要 Sonner 原味的场景。
|
|
33
|
+
* 变体:info(中性卡)/ success(绿)/ error(红)/ warning(黄,richColors)。
|
|
34
|
+
* 无 `document` 时静默跳过(Node 单测 / SSR 不炸)。
|
|
35
|
+
*/
|
|
36
|
+
export declare function showToast(message: string, opts?: ToastOptions): void;
|
|
37
|
+
/**
|
|
38
|
+
* 我们封装好的提示(**推荐项目内使用**):统一卡片样式(灰/绿/红/黄,跟随明暗皮肤),
|
|
39
|
+
* 右侧可挂 1–2 个**我们自己的 Button** 动作按钮,点击后自动关闭并调用你的事件。
|
|
4
40
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
41
|
+
* 底层仍是 Sonner(动画 / 定位 / 堆叠),但视觉与交互是我们定制的。
|
|
42
|
+
* 无 `document` 时静默跳过。
|
|
7
43
|
*/
|
|
8
|
-
export declare function
|
|
9
|
-
variant?: ToastVariant;
|
|
10
|
-
durationMs?: number;
|
|
11
|
-
}): void;
|
|
44
|
+
export declare function notify(message: string, opts?: NotifyOptions): void;
|
|
12
45
|
//# sourceMappingURL=Toast.d.ts.map
|
package/dist/ui/Toast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/ui/Toast.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../src/ui/Toast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAGxD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAEnE,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,YAAY,GACZ,WAAW,GACX,aAAa,GACb,eAAe,GACf,cAAc,CAAA;AAElB,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,wBAAwB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,aAAa,CAAA;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,4CAA4C;IAC5C,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,oBAAoB;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,uCAAuC;IACvC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;CACxB;AAiMD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAapE;AAwBD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAalE"}
|
package/dist/ui/Toast.js
CHANGED
|
@@ -1,37 +1,225 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { createElement as h } from 'react';
|
|
2
|
+
import { createRoot } from 'react-dom/client';
|
|
3
|
+
import { Toaster, toast } from 'sonner';
|
|
4
|
+
import { Button } from './Button.js';
|
|
5
|
+
import { claimToastHost } from './toast-host.js';
|
|
3
6
|
const DEFAULT_MS = 2600;
|
|
7
|
+
const ROOT_ID = 'dshpc-toast-root';
|
|
8
|
+
// 宿主暗色判据是 body[data-ds-dark-theme](不是 prefers-color-scheme),
|
|
9
|
+
// Sonner 的 theme 必须显式传,故从这里读并监听变化。
|
|
10
|
+
function currentTheme() {
|
|
11
|
+
return document.body.hasAttribute('data-ds-dark-theme') ? 'dark' : 'light';
|
|
12
|
+
}
|
|
13
|
+
// ── 跨副本共享宿主 ──
|
|
14
|
+
// core 被打进每个插件 bundle,本模块的 root / position 等状态各副本一份;同页多插件
|
|
15
|
+
// 会各挂一个同 id 容器 + 一个 Toaster,叠在同一屏位。sonner 的 toast() / toast.custom()
|
|
16
|
+
// 是模块级 store(B 副本调自己 bundle 的 sonner,事件只进 B 的 store),所以只能共享
|
|
17
|
+
// 「命令式入口」、不能共享 React root:由先到场的副本建宿主,其余副本交给它渲染。
|
|
18
|
+
let sharedHost = null;
|
|
19
|
+
function toasterHost() {
|
|
20
|
+
if (sharedHost !== null)
|
|
21
|
+
return sharedHost;
|
|
22
|
+
if (typeof document === 'undefined' || typeof MutationObserver === 'undefined')
|
|
23
|
+
return null;
|
|
24
|
+
sharedHost = claimToastHost(createToasterHost);
|
|
25
|
+
return sharedHost;
|
|
26
|
+
}
|
|
27
|
+
function createToasterHost() {
|
|
28
|
+
let root = null;
|
|
29
|
+
let themeObserver = null;
|
|
30
|
+
let position = 'bottom-center';
|
|
31
|
+
function renderToaster() {
|
|
32
|
+
if (root === null)
|
|
33
|
+
return;
|
|
34
|
+
root.render(h(Toaster, {
|
|
35
|
+
theme: currentTheme(),
|
|
36
|
+
position,
|
|
37
|
+
// richColors:success=绿整条 / error=红整条 / warning=黄整条(Sonner 自带);
|
|
38
|
+
// 不开 closeButton:在宿主里吃不到 Sonner 的 CSS 变量,会渲染成白底方块叉(真机踩过)。
|
|
39
|
+
richColors: true,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
// 全局唯一 Toaster:命令式 toast() 需要一个挂着的 Toaster 才能渲染。
|
|
43
|
+
function ensureToaster() {
|
|
44
|
+
if (root !== null)
|
|
45
|
+
return;
|
|
46
|
+
// 双闸:容器可能已被他人建过(重复 DOM id 会破坏 getElementById 语义)。
|
|
47
|
+
let container = document.getElementById(ROOT_ID);
|
|
48
|
+
if (container === null) {
|
|
49
|
+
container = document.createElement('div');
|
|
50
|
+
container.id = ROOT_ID;
|
|
51
|
+
document.body.appendChild(container);
|
|
52
|
+
}
|
|
53
|
+
root = createRoot(container);
|
|
54
|
+
renderToaster();
|
|
55
|
+
themeObserver = new MutationObserver(() => renderToaster());
|
|
56
|
+
themeObserver.observe(document.body, {
|
|
57
|
+
attributes: true,
|
|
58
|
+
attributeFilter: ['data-ds-dark-theme'],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
function showNative(payload) {
|
|
62
|
+
const duration = payload.durationMs;
|
|
63
|
+
const onDismiss = payload.onDismiss;
|
|
64
|
+
if (payload.color !== undefined) {
|
|
65
|
+
toast(payload.message, {
|
|
66
|
+
duration,
|
|
67
|
+
unstyled: true,
|
|
68
|
+
onDismiss,
|
|
69
|
+
className: 'dshpc-toast-custom',
|
|
70
|
+
style: {
|
|
71
|
+
background: payload.color,
|
|
72
|
+
color: '#fff',
|
|
73
|
+
minWidth: '320px',
|
|
74
|
+
minHeight: '48px',
|
|
75
|
+
padding: '12px 16px',
|
|
76
|
+
borderRadius: '8px',
|
|
77
|
+
boxShadow: '0 6px 16px rgba(0, 0, 0, 0.18)',
|
|
78
|
+
fontSize: '14px',
|
|
79
|
+
lineHeight: '20px',
|
|
80
|
+
boxSizing: 'border-box',
|
|
81
|
+
display: 'flex',
|
|
82
|
+
alignItems: 'center',
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const variant = payload.variant;
|
|
88
|
+
if (variant === 'success') {
|
|
89
|
+
toast.success(payload.message, { duration, onDismiss });
|
|
90
|
+
}
|
|
91
|
+
else if (variant === 'error') {
|
|
92
|
+
toast.error(payload.message, { duration, onDismiss });
|
|
93
|
+
}
|
|
94
|
+
else if (variant === 'warning') {
|
|
95
|
+
toast.warning(payload.message, { duration, onDismiss });
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
toast(payload.message, { duration, onDismiss });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function showCard(payload) {
|
|
102
|
+
const palette = notifyPalette(payload.variant, currentTheme());
|
|
103
|
+
const duration = payload.durationMs;
|
|
104
|
+
const actions = payload.actions;
|
|
105
|
+
const id = toast.custom(() => h('div', {
|
|
106
|
+
style: {
|
|
107
|
+
display: 'flex',
|
|
108
|
+
alignItems: 'center',
|
|
109
|
+
gap: '12px',
|
|
110
|
+
minWidth: '320px',
|
|
111
|
+
minHeight: '48px',
|
|
112
|
+
padding: '12px 16px',
|
|
113
|
+
borderRadius: '10px',
|
|
114
|
+
boxShadow: '0 6px 16px rgba(0, 0, 0, 0.18)',
|
|
115
|
+
background: palette.bg,
|
|
116
|
+
color: palette.fg,
|
|
117
|
+
boxSizing: 'border-box',
|
|
118
|
+
fontSize: '14px',
|
|
119
|
+
lineHeight: '20px',
|
|
120
|
+
},
|
|
121
|
+
}, h('span', {
|
|
122
|
+
style: {
|
|
123
|
+
flexShrink: 0,
|
|
124
|
+
width: '20px',
|
|
125
|
+
height: '20px',
|
|
126
|
+
borderRadius: '50%',
|
|
127
|
+
background: 'rgba(255, 255, 255, 0.25)',
|
|
128
|
+
display: 'inline-flex',
|
|
129
|
+
alignItems: 'center',
|
|
130
|
+
justifyContent: 'center',
|
|
131
|
+
fontSize: '13px',
|
|
132
|
+
fontWeight: 700,
|
|
133
|
+
},
|
|
134
|
+
}, palette.glyph), h('div', { style: { flex: 1, minWidth: 0 } }, h('div', { style: { fontWeight: 600 } }, payload.message), payload.description !== undefined
|
|
135
|
+
? h('div', { style: { opacity: 0.9, fontSize: '13px', marginTop: '2px' } }, payload.description)
|
|
136
|
+
: null), actions !== undefined && actions.length > 0
|
|
137
|
+
? h('div', { style: { display: 'flex', gap: '8px', flexShrink: 0 } }, ...actions.slice(0, 2).map((a) => h(Button, {
|
|
138
|
+
variant: a.variant ?? 'outline',
|
|
139
|
+
size: 'md',
|
|
140
|
+
onClick: () => {
|
|
141
|
+
a.onClick();
|
|
142
|
+
toast.dismiss(id);
|
|
143
|
+
},
|
|
144
|
+
}, a.text)))
|
|
145
|
+
: null), { duration, unstyled: true });
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
show(payload) {
|
|
149
|
+
ensureToaster();
|
|
150
|
+
renderToaster(); // 应用最新 position / theme(root 已存在时也要重渲染)
|
|
151
|
+
if (payload.style === 'card')
|
|
152
|
+
showCard(payload);
|
|
153
|
+
else
|
|
154
|
+
showNative(payload);
|
|
155
|
+
},
|
|
156
|
+
setPosition(next) {
|
|
157
|
+
position = next;
|
|
158
|
+
renderToaster();
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
}
|
|
4
162
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* 直接操作一个固定容器最简单,且无 document 时静默跳过(SSR / 单测不炸)。
|
|
163
|
+
* 官方 Sonner 原生提示(**命令式**)。用于「官方的」对比 demo 与需要 Sonner 原味的场景。
|
|
164
|
+
* 变体:info(中性卡)/ success(绿)/ error(红)/ warning(黄,richColors)。
|
|
165
|
+
* 无 `document` 时静默跳过(Node 单测 / SSR 不炸)。
|
|
9
166
|
*/
|
|
10
167
|
export function showToast(message, opts) {
|
|
11
168
|
if (typeof document === 'undefined')
|
|
12
169
|
return;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
170
|
+
const host = toasterHost();
|
|
171
|
+
if (host === null)
|
|
172
|
+
return;
|
|
173
|
+
if (opts?.position !== undefined)
|
|
174
|
+
host.setPosition(opts.position);
|
|
175
|
+
host.show({
|
|
176
|
+
message,
|
|
177
|
+
variant: opts?.variant ?? 'info',
|
|
178
|
+
style: 'native',
|
|
179
|
+
durationMs: opts?.durationMs ?? DEFAULT_MS,
|
|
180
|
+
color: opts?.color,
|
|
181
|
+
onDismiss: opts?.onDismiss,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
// 我们封装卡片的配色:info 走灰(不是纯黑,随明暗切换);其余用整条语义色。
|
|
185
|
+
function notifyPalette(variant, theme) {
|
|
186
|
+
switch (variant) {
|
|
187
|
+
case 'success':
|
|
188
|
+
return { bg: '#16a34a', fg: '#ffffff', glyph: '✓' };
|
|
189
|
+
// error / warning 用哑光降饱和档:实心卡上加透明度会透出底层内容、伤可读性,
|
|
190
|
+
// 故改为压暗一档的色相(设计师口径:冷静的严重度,而非警报荧光)。
|
|
191
|
+
case 'error':
|
|
192
|
+
return { bg: '#c0392b', fg: '#ffffff', glyph: '✕' };
|
|
193
|
+
case 'warning':
|
|
194
|
+
return { bg: '#e0922f', fg: '#1f2937', glyph: '!' };
|
|
195
|
+
default:
|
|
196
|
+
return theme === 'dark'
|
|
197
|
+
? { bg: '#3f3f46', fg: '#fafafa', glyph: 'i' }
|
|
198
|
+
: { bg: '#f4f4f5', fg: '#18181b', glyph: 'i' };
|
|
199
|
+
}
|
|
26
200
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
201
|
+
/**
|
|
202
|
+
* 我们封装好的提示(**推荐项目内使用**):统一卡片样式(灰/绿/红/黄,跟随明暗皮肤),
|
|
203
|
+
* 右侧可挂 1–2 个**我们自己的 Button** 动作按钮,点击后自动关闭并调用你的事件。
|
|
204
|
+
*
|
|
205
|
+
* 底层仍是 Sonner(动画 / 定位 / 堆叠),但视觉与交互是我们定制的。
|
|
206
|
+
* 无 `document` 时静默跳过。
|
|
207
|
+
*/
|
|
208
|
+
export function notify(message, opts) {
|
|
209
|
+
if (typeof document === 'undefined')
|
|
210
|
+
return;
|
|
211
|
+
const host = toasterHost();
|
|
212
|
+
if (host === null)
|
|
213
|
+
return;
|
|
214
|
+
if (opts?.position !== undefined)
|
|
215
|
+
host.setPosition(opts.position);
|
|
216
|
+
host.show({
|
|
217
|
+
message,
|
|
218
|
+
variant: opts?.variant ?? 'info',
|
|
219
|
+
style: 'card',
|
|
220
|
+
description: opts?.description,
|
|
221
|
+
durationMs: opts?.durationMs ?? DEFAULT_MS,
|
|
222
|
+
actions: opts?.actions,
|
|
223
|
+
});
|
|
36
224
|
}
|
|
37
225
|
//# sourceMappingURL=Toast.js.map
|
package/dist/ui/Toast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../src/ui/Toast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../src/ui/Toast.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,35 @@
|
|
|
1
|
-
import { createElement as h } from 'react';
|
|
1
|
+
import { createElement as h, type ReactNode } from 'react';
|
|
2
2
|
import { type PickerSize } from './Picker.js';
|
|
3
3
|
import { type Translate } from '../utils/i18n.js';
|
|
4
4
|
export interface WorkspacePickerProps {
|
|
5
|
-
/**
|
|
6
|
-
* 工作区名字列表 —— **由调用方给**。
|
|
7
|
-
*
|
|
8
|
-
* 为什么组件不自己取:工作区列表是 host 侧 `ctx.workspaceRegistry.list()` 取的,
|
|
9
|
-
* 要经插件自己的 HTTP 通道送到 client,那条通道是插件私有的(需求文档 §6)。
|
|
10
|
-
*/
|
|
11
|
-
workspaces: readonly string[];
|
|
12
5
|
value?: string | string[];
|
|
13
6
|
defaultValue?: string | string[];
|
|
14
7
|
mode?: 'single' | 'multiple';
|
|
15
8
|
max?: number;
|
|
16
9
|
onChange?: (value: string | string[]) => void;
|
|
10
|
+
/**
|
|
11
|
+
* 是否提供「所有工作区」默认项(**默认提供**;只在单选形态下出现):
|
|
12
|
+
* 选中即发 `''` —— 表示不筛,是否当「全部」由消费方自己处理。
|
|
13
|
+
*/
|
|
14
|
+
allowDefault?: boolean;
|
|
15
|
+
/** 「所有工作区」的文案(默认取内置字典)。 */
|
|
16
|
+
defaultLabel?: string;
|
|
17
17
|
/** 允许「不选」。 */
|
|
18
18
|
clearable?: boolean;
|
|
19
|
+
/** 下拉内搜索框(默认关;要就传 true)。 */
|
|
19
20
|
searchable?: boolean;
|
|
20
21
|
disabled?: boolean;
|
|
21
22
|
size?: PickerSize;
|
|
22
23
|
placement?: 'down' | 'up';
|
|
23
24
|
className?: string;
|
|
25
|
+
/** 未选时的文字(默认「工作区」;想叫「选择工作区」就传它)。 */
|
|
24
26
|
placeholder?: string;
|
|
27
|
+
/** 触发器前置图标:不传 = 默认文件夹;传 `null` = 不显示;传元素 = 自定义。 */
|
|
28
|
+
icon?: ReactNode | null;
|
|
29
|
+
/** 问号提示文字(传了才显示)。 */
|
|
30
|
+
hint?: string;
|
|
25
31
|
translate?: Translate;
|
|
26
32
|
}
|
|
27
|
-
/** 选工作区(交互全管:单选 / 多选 / 上限 /
|
|
33
|
+
/** 选工作区(交互全管:单选 / 多选 / 上限 / 空态;数据自动来自宿主工作区快照)。 */
|
|
28
34
|
export declare function WorkspacePicker(props: WorkspacePickerProps): ReturnType<typeof h>;
|
|
29
|
-
export interface FilePickerProps {
|
|
30
|
-
/** 候选文件(相对路径);同样由调用方给。 */
|
|
31
|
-
files: readonly string[];
|
|
32
|
-
value?: string | string[];
|
|
33
|
-
defaultValue?: string | string[];
|
|
34
|
-
mode?: 'single' | 'multiple';
|
|
35
|
-
max?: number;
|
|
36
|
-
onChange?: (value: string | string[]) => void;
|
|
37
|
-
clearable?: boolean;
|
|
38
|
-
searchable?: boolean;
|
|
39
|
-
disabled?: boolean;
|
|
40
|
-
size?: PickerSize;
|
|
41
|
-
placement?: 'down' | 'up';
|
|
42
|
-
className?: string;
|
|
43
|
-
placeholder?: string;
|
|
44
|
-
translate?: Translate;
|
|
45
|
-
}
|
|
46
|
-
/** 选文件(同上:交互全管,数据调用方给)。 */
|
|
47
|
-
export declare function FilePicker(props: FilePickerProps): ReturnType<typeof h>;
|
|
48
35
|
//# sourceMappingURL=WorkspacePicker.d.ts.map
|