@h-ai/ui 0.1.0-alpha.28 → 0.1.0-alpha.30
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 +12 -0
- package/dist/components/compounds/Accordion.svelte +6 -3
- package/dist/components/compounds/Accordion.svelte.d.ts +3 -1
- package/dist/components/compounds/ActionSheet.svelte +11 -8
- package/dist/components/compounds/ActionSheet.svelte.d.ts +3 -1
- package/dist/components/compounds/Alert.svelte +6 -4
- package/dist/components/compounds/Alert.svelte.d.ts +3 -2
- package/dist/components/compounds/AppBar.svelte +13 -9
- package/dist/components/compounds/AppBar.svelte.d.ts +3 -1
- package/dist/components/compounds/BottomNav.svelte +13 -10
- package/dist/components/compounds/BottomNav.svelte.d.ts +3 -1
- package/dist/components/compounds/Breadcrumb.svelte +6 -4
- package/dist/components/compounds/Breadcrumb.svelte.d.ts +3 -2
- package/dist/components/compounds/Calendar.svelte +7 -2
- package/dist/components/compounds/Calendar.svelte.d.ts +3 -1
- package/dist/components/compounds/Card.svelte +6 -4
- package/dist/components/compounds/Card.svelte.d.ts +3 -2
- package/dist/components/compounds/Combobox.svelte +6 -2
- package/dist/components/compounds/Combobox.svelte.d.ts +3 -1
- package/dist/components/compounds/Confirm.svelte +9 -7
- package/dist/components/compounds/Confirm.svelte.d.ts +3 -2
- package/dist/components/compounds/DataTable.svelte +6 -2
- package/dist/components/compounds/DataTable.svelte.d.ts +2 -1
- package/dist/components/compounds/DatePicker.svelte +7 -2
- package/dist/components/compounds/DatePicker.svelte.d.ts +3 -1
- package/dist/components/compounds/Drawer.svelte +6 -4
- package/dist/components/compounds/Drawer.svelte.d.ts +3 -2
- package/dist/components/compounds/Dropdown.svelte +6 -4
- package/dist/components/compounds/Dropdown.svelte.d.ts +3 -2
- package/dist/components/compounds/Empty.svelte +6 -4
- package/dist/components/compounds/Empty.svelte.d.ts +3 -2
- package/dist/components/compounds/Form.svelte +11 -9
- package/dist/components/compounds/Form.svelte.d.ts +3 -2
- package/dist/components/compounds/FormField.svelte +6 -4
- package/dist/components/compounds/FormField.svelte.d.ts +3 -2
- package/dist/components/compounds/InfiniteScroll.svelte +10 -7
- package/dist/components/compounds/InfiniteScroll.svelte.d.ts +3 -1
- package/dist/components/compounds/MessageBoxContainer.svelte +6 -1
- package/dist/components/compounds/MessageBoxContainer.svelte.d.ts +3 -17
- package/dist/components/compounds/MessageBoxDialog.svelte +9 -7
- package/dist/components/compounds/MessageBoxDialog.svelte.d.ts +2 -1
- package/dist/components/compounds/MessageContainer.svelte +6 -2
- package/dist/components/compounds/MessageContainer.svelte.d.ts +2 -1
- package/dist/components/compounds/Modal.svelte +9 -7
- package/dist/components/compounds/Modal.svelte.d.ts +3 -2
- package/dist/components/compounds/PageHeader.svelte +6 -2
- package/dist/components/compounds/PageHeader.svelte.d.ts +3 -1
- package/dist/components/compounds/Pagination.svelte +6 -4
- package/dist/components/compounds/Pagination.svelte.d.ts +3 -2
- package/dist/components/compounds/Popover.svelte +10 -8
- package/dist/components/compounds/Popover.svelte.d.ts +3 -2
- package/dist/components/compounds/PullRefresh.svelte +11 -8
- package/dist/components/compounds/PullRefresh.svelte.d.ts +3 -1
- package/dist/components/compounds/Result.svelte +6 -4
- package/dist/components/compounds/Result.svelte.d.ts +3 -2
- package/dist/components/compounds/SafeArea.svelte +6 -3
- package/dist/components/compounds/SafeArea.svelte.d.ts +3 -1
- package/dist/components/compounds/Skeleton.svelte +6 -4
- package/dist/components/compounds/Skeleton.svelte.d.ts +3 -2
- package/dist/components/compounds/Steps.svelte +6 -4
- package/dist/components/compounds/Steps.svelte.d.ts +3 -2
- package/dist/components/compounds/SwipeCell.svelte +6 -3
- package/dist/components/compounds/SwipeCell.svelte.d.ts +3 -1
- package/dist/components/compounds/Tabs.svelte +6 -4
- package/dist/components/compounds/Tabs.svelte.d.ts +3 -2
- package/dist/components/compounds/TagInput.svelte +11 -9
- package/dist/components/compounds/TagInput.svelte.d.ts +3 -2
- package/dist/components/compounds/Timeline.svelte +6 -3
- package/dist/components/compounds/Timeline.svelte.d.ts +3 -1
- package/dist/components/compounds/ToastContainer.svelte +6 -2
- package/dist/components/compounds/ToastContainer.svelte.d.ts +2 -1
- package/dist/components/compounds/Tooltip.svelte +6 -4
- package/dist/components/compounds/Tooltip.svelte.d.ts +3 -2
- package/dist/components/primitives/Avatar.svelte +6 -4
- package/dist/components/primitives/Avatar.svelte.d.ts +3 -2
- package/dist/components/primitives/Badge.svelte +6 -4
- package/dist/components/primitives/Badge.svelte.d.ts +3 -2
- package/dist/components/primitives/BareButton.svelte +15 -12
- package/dist/components/primitives/BareButton.svelte.d.ts +3 -2
- package/dist/components/primitives/BareInput.svelte +37 -34
- package/dist/components/primitives/BareInput.svelte.d.ts +3 -2
- package/dist/components/primitives/Button.svelte +12 -10
- package/dist/components/primitives/Button.svelte.d.ts +3 -2
- package/dist/components/primitives/Checkbox.svelte +6 -4
- package/dist/components/primitives/Checkbox.svelte.d.ts +3 -2
- package/dist/components/primitives/IconButton.svelte +6 -4
- package/dist/components/primitives/IconButton.svelte.d.ts +3 -2
- package/dist/components/primitives/Input.svelte +6 -4
- package/dist/components/primitives/Input.svelte.d.ts +3 -2
- package/dist/components/primitives/Progress.svelte +6 -4
- package/dist/components/primitives/Progress.svelte.d.ts +3 -2
- package/dist/components/primitives/Radio.svelte +6 -4
- package/dist/components/primitives/Radio.svelte.d.ts +2 -2
- package/dist/components/primitives/Range.svelte +6 -3
- package/dist/components/primitives/Range.svelte.d.ts +3 -1
- package/dist/components/primitives/Rating.svelte +6 -3
- package/dist/components/primitives/Rating.svelte.d.ts +3 -1
- package/dist/components/primitives/Select.svelte +6 -4
- package/dist/components/primitives/Select.svelte.d.ts +2 -2
- package/dist/components/primitives/Spinner.svelte +6 -4
- package/dist/components/primitives/Spinner.svelte.d.ts +3 -2
- package/dist/components/primitives/Switch.svelte +6 -4
- package/dist/components/primitives/Switch.svelte.d.ts +3 -2
- package/dist/components/primitives/Tag.svelte +6 -4
- package/dist/components/primitives/Tag.svelte.d.ts +3 -2
- package/dist/components/primitives/Textarea.svelte +6 -4
- package/dist/components/primitives/Textarea.svelte.d.ts +3 -2
- package/dist/components/primitives/ToggleCheckbox.svelte +13 -10
- package/dist/components/primitives/ToggleCheckbox.svelte.d.ts +3 -2
- package/dist/components/primitives/ToggleInput.svelte +13 -10
- package/dist/components/primitives/ToggleInput.svelte.d.ts +3 -2
- package/dist/components/primitives/ToggleRadio.svelte +13 -10
- package/dist/components/primitives/ToggleRadio.svelte.d.ts +3 -2
- package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte +8 -5
- package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte.d.ts +3 -1
- package/dist/components/scenes/ai/AiDocumentEditor.svelte +6 -3
- package/dist/components/scenes/ai/AiDocumentEditor.svelte.d.ts +3 -1
- package/dist/components/scenes/ai/MarkdownRenderer.svelte +8 -7
- package/dist/components/scenes/ai/MarkdownRenderer.svelte.d.ts +3 -1
- package/dist/components/scenes/ai/document-types.d.ts +2 -1
- package/dist/components/scenes/ai/table/AiTableEditor.svelte +6 -3
- package/dist/components/scenes/ai/table/AiTableEditor.svelte.d.ts +3 -1
- package/dist/components/scenes/ai/table/table-types.d.ts +2 -1
- package/dist/components/scenes/app/FeedbackModal.svelte +5 -2
- package/dist/components/scenes/app/FeedbackModal.svelte.d.ts +3 -1
- package/dist/components/scenes/app/LanguageSwitch.svelte +6 -2
- package/dist/components/scenes/app/LanguageSwitch.svelte.d.ts +3 -1
- package/dist/components/scenes/app/SettingsLayout.svelte +6 -3
- package/dist/components/scenes/app/SettingsLayout.svelte.d.ts +2 -1
- package/dist/components/scenes/app/SettingsModal.svelte +6 -3
- package/dist/components/scenes/app/SettingsModal.svelte.d.ts +3 -1
- package/dist/components/scenes/app/ThemeColorPicker.svelte +6 -3
- package/dist/components/scenes/app/ThemeColorPicker.svelte.d.ts +3 -1
- package/dist/components/scenes/app/ThemeSelector.svelte +6 -3
- package/dist/components/scenes/app/ThemeSelector.svelte.d.ts +3 -1
- package/dist/components/scenes/app/ThemeToggle.svelte +6 -2
- package/dist/components/scenes/app/ThemeToggle.svelte.d.ts +3 -1
- package/dist/components/scenes/crud/CrudDeleteConfirm.svelte +16 -11
- package/dist/components/scenes/crud/CrudDeleteConfirm.svelte.d.ts +2 -1
- package/dist/components/scenes/crud/CrudDetailDrawer.svelte +6 -3
- package/dist/components/scenes/crud/CrudDetailDrawer.svelte.d.ts +2 -2
- package/dist/components/scenes/crud/CrudDetailPanel.svelte +6 -3
- package/dist/components/scenes/crud/CrudDetailPanel.svelte.d.ts +2 -2
- package/dist/components/scenes/crud/CrudEditPanel.svelte +6 -3
- package/dist/components/scenes/crud/CrudEditPanel.svelte.d.ts +2 -2
- package/dist/components/scenes/crud/CrudFilterBar.svelte +6 -2
- package/dist/components/scenes/crud/CrudFilterBar.svelte.d.ts +2 -1
- package/dist/components/scenes/crud/CrudPage.svelte +6 -2
- package/dist/components/scenes/crud/CrudPage.svelte.d.ts +2 -1
- package/dist/components/scenes/crud/crud-types.d.ts +2 -2
- package/dist/components/scenes/crypto/EncryptedInput.svelte +6 -3
- package/dist/components/scenes/crypto/EncryptedInput.svelte.d.ts +3 -2
- package/dist/components/scenes/crypto/HashDisplay.svelte +6 -3
- package/dist/components/scenes/crypto/HashDisplay.svelte.d.ts +3 -1
- package/dist/components/scenes/crypto/SignatureDisplay.svelte +6 -3
- package/dist/components/scenes/crypto/SignatureDisplay.svelte.d.ts +3 -1
- package/dist/components/scenes/error/ErrorPage.svelte +6 -3
- package/dist/components/scenes/error/ErrorPage.svelte.d.ts +2 -1
- package/dist/components/scenes/iam/AuthShell.svelte +6 -3
- package/dist/components/scenes/iam/AuthShell.svelte.d.ts +2 -1
- package/dist/components/scenes/iam/ChangePasswordForm.svelte +6 -3
- package/dist/components/scenes/iam/ChangePasswordForm.svelte.d.ts +3 -1
- package/dist/components/scenes/iam/ForgotPasswordForm.svelte +6 -3
- package/dist/components/scenes/iam/ForgotPasswordForm.svelte.d.ts +3 -1
- package/dist/components/scenes/iam/LoginForm.svelte +6 -3
- package/dist/components/scenes/iam/LoginForm.svelte.d.ts +3 -1
- package/dist/components/scenes/iam/PasswordInput.svelte +6 -4
- package/dist/components/scenes/iam/PasswordInput.svelte.d.ts +3 -2
- package/dist/components/scenes/iam/RegisterForm.svelte +6 -4
- package/dist/components/scenes/iam/RegisterForm.svelte.d.ts +3 -1
- package/dist/components/scenes/iam/ResetPasswordForm.svelte +6 -3
- package/dist/components/scenes/iam/ResetPasswordForm.svelte.d.ts +3 -1
- package/dist/components/scenes/iam/UserProfile.svelte +6 -3
- package/dist/components/scenes/iam/UserProfile.svelte.d.ts +3 -1
- package/dist/components/scenes/storage/AvatarUpload.svelte +11 -8
- package/dist/components/scenes/storage/AvatarUpload.svelte.d.ts +3 -1
- package/dist/components/scenes/storage/FileList.svelte +6 -3
- package/dist/components/scenes/storage/FileList.svelte.d.ts +3 -1
- package/dist/components/scenes/storage/FileUpload.svelte +6 -3
- package/dist/components/scenes/storage/FileUpload.svelte.d.ts +3 -1
- package/dist/components/scenes/storage/ImageUpload.svelte +12 -9
- package/dist/components/scenes/storage/ImageUpload.svelte.d.ts +3 -1
- package/dist/components/scenes/types.d.ts +16 -16
- package/dist/types.d.ts +43 -36
- package/dist/utils.d.ts +6 -1
- package/dist/utils.js +15 -0
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ToggleCheckboxProps } from '../../types.js';
|
|
2
|
-
|
|
1
|
+
import type { DataAttributes, ToggleCheckboxProps } from '../../types.js';
|
|
2
|
+
type $$ComponentProps = ToggleCheckboxProps & DataAttributes;
|
|
3
|
+
declare const ToggleInput: import("svelte").Component<$$ComponentProps, {}, "checked">;
|
|
3
4
|
type ToggleInput = ReturnType<typeof ToggleInput>;
|
|
4
5
|
export default ToggleInput;
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
=============================================================================
|
|
9
9
|
-->
|
|
10
10
|
<script lang='ts'>
|
|
11
|
-
import type { ToggleRadioProps } from '../../types.js'
|
|
11
|
+
import type { DataAttributes, ToggleRadioProps } from '../../types.js'
|
|
12
|
+
import { getDataAttributes } from '../../utils.js'
|
|
12
13
|
|
|
13
14
|
let {
|
|
14
15
|
checked = $bindable(false),
|
|
@@ -17,20 +18,22 @@
|
|
|
17
18
|
disabled = false,
|
|
18
19
|
class: className = '',
|
|
19
20
|
onchange,
|
|
20
|
-
|
|
21
|
+
...restProps
|
|
22
|
+
}: ToggleRadioProps & DataAttributes = $props()
|
|
21
23
|
|
|
24
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
22
25
|
function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
|
|
23
26
|
checked = e.currentTarget.checked
|
|
24
27
|
onchange?.(checked)
|
|
25
28
|
}
|
|
26
29
|
</script>
|
|
27
30
|
|
|
28
|
-
<input
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
<input {...dataAttributes}
|
|
32
|
+
{id}
|
|
33
|
+
{name}
|
|
34
|
+
type='radio'
|
|
35
|
+
class={className}
|
|
36
|
+
{disabled}
|
|
37
|
+
checked={checked}
|
|
38
|
+
onchange={handleChange}
|
|
36
39
|
/>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ToggleRadioProps } from '../../types.js';
|
|
2
|
-
|
|
1
|
+
import type { DataAttributes, ToggleRadioProps } from '../../types.js';
|
|
2
|
+
type $$ComponentProps = ToggleRadioProps & DataAttributes;
|
|
3
|
+
declare const ToggleRadio: import("svelte").Component<$$ComponentProps, {}, "checked">;
|
|
3
4
|
type ToggleRadio = ReturnType<typeof ToggleRadio>;
|
|
4
5
|
export default ToggleRadio;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
<script lang='ts'>
|
|
2
|
+
import type { DataAttributes } from '../../../types.js'
|
|
2
3
|
import type {
|
|
3
4
|
MarkdownSourceKind,
|
|
4
5
|
MarkdownToolbarDownloadAction,
|
|
5
6
|
} from './document-types.js'
|
|
6
7
|
import { uiM } from '../../../messages.js'
|
|
7
|
-
import { cn } from '../../../utils.js'
|
|
8
|
+
import { cn, getDataAttributes } from '../../../utils.js'
|
|
8
9
|
import {
|
|
9
10
|
downloadAiDocument,
|
|
10
11
|
resolveDocumentDownloadActions,
|
|
@@ -62,8 +63,10 @@
|
|
|
62
63
|
triggerClass = '',
|
|
63
64
|
menuClass = '',
|
|
64
65
|
itemClass = '',
|
|
65
|
-
|
|
66
|
+
...restProps
|
|
67
|
+
}: AiDocumentDownloadMenuProps & DataAttributes = $props()
|
|
66
68
|
|
|
69
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
67
70
|
// menuWrapEl 只负责识别外部点击,以便菜单展开后能自然收起。
|
|
68
71
|
let menuWrapEl: HTMLDivElement | undefined = $state()
|
|
69
72
|
// open 由组件内部维护,左右两侧可以直接复用,不需要额外再托管弹层状态。
|
|
@@ -118,9 +121,9 @@
|
|
|
118
121
|
}
|
|
119
122
|
</script>
|
|
120
123
|
|
|
121
|
-
<div
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
<div {...dataAttributes}
|
|
125
|
+
bind:this={menuWrapEl}
|
|
126
|
+
class={cn('hai-ai-download-menu', className)}
|
|
124
127
|
>
|
|
125
128
|
<button
|
|
126
129
|
type='button'
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
import type { MarkdownSourceKind, MarkdownToolbarDownloadAction } from './document-types.js';
|
|
2
3
|
interface AiDocumentDownloadMenuProps {
|
|
3
4
|
/** 触发下载时导出的原始内容。 */
|
|
@@ -33,6 +34,7 @@ interface AiDocumentDownloadMenuProps {
|
|
|
33
34
|
/** 菜单项自定义类名。 */
|
|
34
35
|
itemClass?: string;
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
type $$ComponentProps = AiDocumentDownloadMenuProps & DataAttributes;
|
|
38
|
+
declare const AiDocumentDownloadMenu: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
37
39
|
type AiDocumentDownloadMenu = ReturnType<typeof AiDocumentDownloadMenu>;
|
|
38
40
|
export default AiDocumentDownloadMenu;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
=============================================================================
|
|
12
12
|
-->
|
|
13
13
|
<script lang='ts'>
|
|
14
|
+
import type { DataAttributes } from '../../../types.js'
|
|
14
15
|
import type {
|
|
15
16
|
AiDocumentEditorProps,
|
|
16
17
|
MarkdownBlockFormatKind,
|
|
@@ -27,7 +28,7 @@
|
|
|
27
28
|
import { tick } from 'svelte'
|
|
28
29
|
import { writeTextToClipboard } from '../../../internal/browser-safety.js'
|
|
29
30
|
import { uiM } from '../../../messages.js'
|
|
30
|
-
import { cn } from '../../../utils.js'
|
|
31
|
+
import { cn, getDataAttributes } from '../../../utils.js'
|
|
31
32
|
import AiDocumentDownloadMenu from './AiDocumentDownloadMenu.svelte'
|
|
32
33
|
import {
|
|
33
34
|
createBuiltInCodePreview,
|
|
@@ -319,8 +320,10 @@
|
|
|
319
320
|
oncopyselection,
|
|
320
321
|
// 选区注释回调。
|
|
321
322
|
onannotation,
|
|
322
|
-
|
|
323
|
+
...restProps
|
|
324
|
+
}: AiDocumentEditorProps & DataAttributes = $props()
|
|
323
325
|
|
|
326
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
324
327
|
// outlineCollapsedInitialized 用来把 `initialOutlineCollapsed` 只消费一次,避免用户手动展开后又被 props 回写覆盖。
|
|
325
328
|
let outlineCollapsedInitialized = $state(false)
|
|
326
329
|
// 当前目录是否折叠。
|
|
@@ -2340,7 +2343,7 @@
|
|
|
2340
2343
|
}
|
|
2341
2344
|
</script>
|
|
2342
2345
|
|
|
2343
|
-
<section class={cn('hai-ai-doc-pane', className)}>
|
|
2346
|
+
<section {...dataAttributes} class={cn('hai-ai-doc-pane', className)}>
|
|
2344
2347
|
<div class='hai-ai-doc-shell'>
|
|
2345
2348
|
{#if showToolbar}
|
|
2346
2349
|
<header class='hai-ai-doc-topbar'>
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
import type { AiDocumentEditorProps } from './document-types.js';
|
|
2
|
-
|
|
3
|
+
type $$ComponentProps = AiDocumentEditorProps & DataAttributes;
|
|
4
|
+
declare const AiDocumentEditor: import("svelte").Component<$$ComponentProps, {}, "editorScrollHost" | "previewHost">;
|
|
3
5
|
type AiDocumentEditor = ReturnType<typeof AiDocumentEditor>;
|
|
4
6
|
export default AiDocumentEditor;
|
|
@@ -16,9 +16,10 @@
|
|
|
16
16
|
=============================================================================
|
|
17
17
|
-->
|
|
18
18
|
<script lang='ts'>
|
|
19
|
+
import type { DataAttributes } from '../../../types.js'
|
|
19
20
|
import type { MarkdownRendererProps } from '../types.js'
|
|
20
21
|
import { writeTextToClipboard } from '../../../internal/browser-safety.js'
|
|
21
|
-
import { cn } from '../../../utils.js'
|
|
22
|
+
import { cn, getDataAttributes } from '../../../utils.js'
|
|
22
23
|
import { parseMarkdown } from './markdown-parse.js'
|
|
23
24
|
|
|
24
25
|
const {
|
|
@@ -27,8 +28,10 @@
|
|
|
27
28
|
showCopyButton = true,
|
|
28
29
|
enableHighlight = true,
|
|
29
30
|
breaks = true,
|
|
30
|
-
|
|
31
|
+
...restProps
|
|
32
|
+
}: MarkdownRendererProps & DataAttributes = $props()
|
|
31
33
|
|
|
34
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
32
35
|
/** 解析后的 HTML */
|
|
33
36
|
const html = $derived(
|
|
34
37
|
parseMarkdown(content, { enableHighlight, showCopyButton, breaks }),
|
|
@@ -62,11 +65,9 @@
|
|
|
62
65
|
}
|
|
63
66
|
</script>
|
|
64
67
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
class={cn('hai-markdown', className)}
|
|
69
|
-
onclick={handleClick}
|
|
68
|
+
<div {...dataAttributes}
|
|
69
|
+
class={cn('hai-markdown', className)}
|
|
70
|
+
onclick={handleClick}
|
|
70
71
|
>
|
|
71
72
|
<!-- eslint-disable-next-line svelte/no-at-html-tags -- Markdown HTML 渲染 -->
|
|
72
73
|
{@html html}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
import type { MarkdownRendererProps } from '../types.js';
|
|
2
|
-
|
|
3
|
+
type $$ComponentProps = MarkdownRendererProps & DataAttributes;
|
|
4
|
+
declare const MarkdownRenderer: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
3
5
|
type MarkdownRenderer = ReturnType<typeof MarkdownRenderer>;
|
|
4
6
|
export default MarkdownRenderer;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
/**
|
|
2
3
|
* Markdown source type, used to distinguish plain markdown, document panel, or code-only rendering.
|
|
3
4
|
*/
|
|
@@ -126,7 +127,7 @@ export interface MarkdownToolbarDownloadAction {
|
|
|
126
127
|
type BivariantCallback<Args extends unknown[], Return = void> = {
|
|
127
128
|
bivarianceHack: (...args: Args) => Return;
|
|
128
129
|
}['bivarianceHack'];
|
|
129
|
-
export interface AiDocumentEditorProps {
|
|
130
|
+
export interface AiDocumentEditorProps extends DataAttributes {
|
|
130
131
|
/** Markdown source content. */
|
|
131
132
|
content?: string;
|
|
132
133
|
/** Document title displayed in the header. */
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
=============================================================================
|
|
13
13
|
-->
|
|
14
14
|
<script lang='ts'>
|
|
15
|
+
import type { DataAttributes } from '../../../../types.js'
|
|
15
16
|
import type { MarkdownToolbarDownloadAction } from '../document-types.js'
|
|
16
17
|
import type {
|
|
17
18
|
AiTableColumn,
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
} from './table-types.js'
|
|
24
25
|
import { SvelteSet } from 'svelte/reactivity'
|
|
25
26
|
import { uiM } from '../../../../messages.js'
|
|
26
|
-
import { cn } from '../../../../utils.js'
|
|
27
|
+
import { cn, getDataAttributes } from '../../../../utils.js'
|
|
27
28
|
import AiDocumentDownloadMenu from '../AiDocumentDownloadMenu.svelte'
|
|
28
29
|
|
|
29
30
|
interface ExtractedArrayChunk {
|
|
@@ -92,8 +93,10 @@
|
|
|
92
93
|
oncopytable,
|
|
93
94
|
// 表格下载回调。
|
|
94
95
|
ondownloadtable,
|
|
95
|
-
|
|
96
|
+
...restProps
|
|
97
|
+
}: AiTableEditorProps & DataAttributes = $props()
|
|
96
98
|
|
|
99
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
97
100
|
// 复制反馈只影响右上角复制按钮,不和业务数据混用。
|
|
98
101
|
let copied = $state(false)
|
|
99
102
|
// 连续复制时按最后一次点击重新计时。
|
|
@@ -1029,7 +1032,7 @@
|
|
|
1029
1032
|
}
|
|
1030
1033
|
</script>
|
|
1031
1034
|
|
|
1032
|
-
<section class={tablePaneClass}>
|
|
1035
|
+
<section {...dataAttributes} class={tablePaneClass}>
|
|
1033
1036
|
<header class='hai-ai-table-header'>
|
|
1034
1037
|
<div class='hai-ai-table-heading'>
|
|
1035
1038
|
<div class='hai-ai-table-eyebrow'>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../../types.js';
|
|
1
2
|
import type { AiTableEditorProps } from './table-types.js';
|
|
2
|
-
|
|
3
|
+
type $$ComponentProps = AiTableEditorProps & DataAttributes;
|
|
4
|
+
declare const AiTableEditor: import("svelte").Component<$$ComponentProps, {
|
|
3
5
|
flushPendingTableChange: () => void;
|
|
4
6
|
}, "editorScrollHost">;
|
|
5
7
|
type AiTableEditor = ReturnType<typeof AiTableEditor>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../../types.js';
|
|
1
2
|
/**
|
|
2
3
|
* 表格列支持的数据类型。
|
|
3
4
|
* - `text`: 普通文本输入
|
|
@@ -67,7 +68,7 @@ export interface AiTableDownloadPayload {
|
|
|
67
68
|
/** 推荐文件名(已带 `.csv` 后缀)。 */
|
|
68
69
|
filename: string;
|
|
69
70
|
}
|
|
70
|
-
export interface AiTableEditorProps {
|
|
71
|
+
export interface AiTableEditorProps extends DataAttributes {
|
|
71
72
|
/** 原始表格内容字符串,通常是 JSON 文本,支持流式残缺片段。 */
|
|
72
73
|
content?: string;
|
|
73
74
|
/** 结构化表格数据;有值时优先于 `content`。 */
|
|
@@ -47,7 +47,9 @@
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
import type { DataAttributes } from '../../../types.js'
|
|
50
51
|
import { uiM } from '../../../messages.js'
|
|
52
|
+
import { getDataAttributes } from '../../../utils.js'
|
|
51
53
|
|
|
52
54
|
interface Props {
|
|
53
55
|
open?: boolean
|
|
@@ -55,8 +57,9 @@
|
|
|
55
57
|
onsubmit?: (data: FeedbackData) => Promise<void>
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
let { open = $bindable(false), labels = {}, onsubmit }: Props = $props()
|
|
60
|
+
let { open = $bindable(false), labels = {}, onsubmit, ...restProps }: Props & DataAttributes = $props()
|
|
59
61
|
|
|
62
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
60
63
|
// 文案优先使用传入的 labels,缺省回退到内置消息 uiM(...)
|
|
61
64
|
|
|
62
65
|
let feedbackType = $state<FeedbackType>('bug')
|
|
@@ -106,7 +109,7 @@
|
|
|
106
109
|
}
|
|
107
110
|
</script>
|
|
108
111
|
|
|
109
|
-
<Modal bind:open title={labels.title ?? uiM('feedback_title')}>
|
|
112
|
+
<Modal {...dataAttributes} bind:open title={labels.title ?? uiM('feedback_title')}>
|
|
110
113
|
<p class='text-base-content/70 mb-4'>{labels.description ?? uiM('feedback_description')}</p>
|
|
111
114
|
|
|
112
115
|
{#if error}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
type FeedbackType = 'bug' | 'feature' | 'question' | 'other';
|
|
2
3
|
interface FeedbackData {
|
|
3
4
|
type: FeedbackType;
|
|
@@ -29,6 +30,7 @@ interface Props {
|
|
|
29
30
|
labels?: FeedbackLabels;
|
|
30
31
|
onsubmit?: (data: FeedbackData) => Promise<void>;
|
|
31
32
|
}
|
|
33
|
+
type $$ComponentProps = Props & DataAttributes;
|
|
32
34
|
/**
|
|
33
35
|
* FeedbackModal
|
|
34
36
|
* 用户反馈模态框,支持 Bug 报告、功能建议等多种反馈类型。
|
|
@@ -42,6 +44,6 @@ interface Props {
|
|
|
42
44
|
* onsubmit={async (data) => { await submitFeedback(data) }}
|
|
43
45
|
* />
|
|
44
46
|
*/
|
|
45
|
-
declare const FeedbackModal: import("svelte").Component
|
|
47
|
+
declare const FeedbackModal: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
46
48
|
type FeedbackModal = ReturnType<typeof FeedbackModal>;
|
|
47
49
|
export default FeedbackModal;
|
|
@@ -29,7 +29,9 @@
|
|
|
29
29
|
```
|
|
30
30
|
-->
|
|
31
31
|
<script lang='ts'>
|
|
32
|
+
import type { DataAttributes } from '../../../types.js'
|
|
32
33
|
import { uiM } from '../../../messages.js'
|
|
34
|
+
import { getDataAttributes } from '../../../utils.js'
|
|
33
35
|
import BareButton from '../../primitives/BareButton.svelte'
|
|
34
36
|
|
|
35
37
|
interface Language {
|
|
@@ -63,8 +65,10 @@
|
|
|
63
65
|
align = 'end',
|
|
64
66
|
compact = false,
|
|
65
67
|
class: className = '',
|
|
66
|
-
|
|
68
|
+
...restProps
|
|
69
|
+
}: Props & DataAttributes = $props()
|
|
67
70
|
|
|
71
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
68
72
|
let open = $state(false)
|
|
69
73
|
let containerRef = $state<HTMLDivElement | null>(null)
|
|
70
74
|
|
|
@@ -94,7 +98,7 @@
|
|
|
94
98
|
})
|
|
95
99
|
</script>
|
|
96
100
|
|
|
97
|
-
<div bind:this={containerRef} class='dropdown {align === 'end' ? 'dropdown-end' : ''} {open ? 'dropdown-open' : ''} {className}'>
|
|
101
|
+
<div {...dataAttributes} bind:this={containerRef} class='dropdown {align === 'end' ? 'dropdown-end' : ''} {open ? 'dropdown-open' : ''} {className}'>
|
|
98
102
|
<BareButton
|
|
99
103
|
type='button'
|
|
100
104
|
class='btn btn-ghost {compact ? 'btn-sm btn-square' : 'btn-sm gap-2 min-w-fit'}'
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
interface Language {
|
|
2
3
|
value: string;
|
|
3
4
|
label: string;
|
|
@@ -17,6 +18,7 @@ interface Props {
|
|
|
17
18
|
/** 自定义类名 */
|
|
18
19
|
class?: string;
|
|
19
20
|
}
|
|
21
|
+
type $$ComponentProps = Props & DataAttributes;
|
|
20
22
|
/**
|
|
21
23
|
* LanguageSwitch
|
|
22
24
|
* 语言切换下拉组件,支持多语言切换。
|
|
@@ -47,6 +49,6 @@ interface Props {
|
|
|
47
49
|
* />
|
|
48
50
|
* ```
|
|
49
51
|
*/
|
|
50
|
-
declare const LanguageSwitch: import("svelte").Component
|
|
52
|
+
declare const LanguageSwitch: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
51
53
|
type LanguageSwitch = ReturnType<typeof LanguageSwitch>;
|
|
52
54
|
export default LanguageSwitch;
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
-->
|
|
21
21
|
<script lang='ts'>
|
|
22
22
|
import type { Snippet } from 'svelte'
|
|
23
|
-
import {
|
|
23
|
+
import type { DataAttributes } from '../../../types.js'
|
|
24
|
+
import { cn, getDataAttributes } from '../../../utils.js'
|
|
24
25
|
import BareButton from '../../primitives/BareButton.svelte'
|
|
25
26
|
|
|
26
27
|
type SettingsSection = {
|
|
@@ -40,6 +41,7 @@
|
|
|
40
41
|
children,
|
|
41
42
|
headerActions,
|
|
42
43
|
class: className = '',
|
|
44
|
+
...restProps
|
|
43
45
|
}: {
|
|
44
46
|
title?: string
|
|
45
47
|
description?: string
|
|
@@ -49,8 +51,9 @@
|
|
|
49
51
|
children?: Snippet
|
|
50
52
|
headerActions?: Snippet
|
|
51
53
|
class?: string
|
|
52
|
-
} = $props()
|
|
54
|
+
} & DataAttributes = $props()
|
|
53
55
|
|
|
56
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
54
57
|
function navItemClass(id: string): string {
|
|
55
58
|
return cn(
|
|
56
59
|
'flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-sm font-medium transition-colors',
|
|
@@ -61,7 +64,7 @@
|
|
|
61
64
|
}
|
|
62
65
|
</script>
|
|
63
66
|
|
|
64
|
-
<div class={cn('space-y-5', className)}>
|
|
67
|
+
<div {...dataAttributes} class={cn('space-y-5', className)}>
|
|
65
68
|
<!-- 标题区 -->
|
|
66
69
|
{#if title || description || headerActions}
|
|
67
70
|
<div class='flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between'>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { DataAttributes } from '../../../types.js';
|
|
2
3
|
type SettingsSection = {
|
|
3
4
|
id: string;
|
|
4
5
|
label: string;
|
|
@@ -15,7 +16,7 @@ type $$ComponentProps = {
|
|
|
15
16
|
children?: Snippet;
|
|
16
17
|
headerActions?: Snippet;
|
|
17
18
|
class?: string;
|
|
18
|
-
};
|
|
19
|
+
} & DataAttributes;
|
|
19
20
|
/**
|
|
20
21
|
* SettingsLayout
|
|
21
22
|
* 设置页布局场景组件
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
@prop {function} onthemechange - 主题变更回调
|
|
11
11
|
-->
|
|
12
12
|
<script lang='ts'>
|
|
13
|
+
import type { DataAttributes } from '../../../types.js'
|
|
13
14
|
import { uiM } from '../../../messages.js'
|
|
15
|
+
import { getDataAttributes } from '../../../utils.js'
|
|
14
16
|
import BareButton from '../../primitives/BareButton.svelte'
|
|
15
17
|
import IconButton from '../../primitives/IconButton.svelte'
|
|
16
18
|
|
|
@@ -43,8 +45,10 @@
|
|
|
43
45
|
onlanguagechange,
|
|
44
46
|
onthemechange,
|
|
45
47
|
onclose,
|
|
46
|
-
|
|
48
|
+
...restProps
|
|
49
|
+
}: Props & DataAttributes = $props()
|
|
47
50
|
|
|
51
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
48
52
|
function handleClose() {
|
|
49
53
|
open = false
|
|
50
54
|
onclose?.()
|
|
@@ -66,9 +70,8 @@
|
|
|
66
70
|
<svelte:window onkeydown={handleKeydown} />
|
|
67
71
|
|
|
68
72
|
{#if open}
|
|
69
|
-
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
70
|
-
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
71
73
|
<div
|
|
74
|
+
{...dataAttributes}
|
|
72
75
|
class='fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm transition-opacity'
|
|
73
76
|
onclick={handleBackdropClick}
|
|
74
77
|
>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
interface Props {
|
|
2
3
|
open?: boolean;
|
|
3
4
|
currentLanguage?: string;
|
|
@@ -15,6 +16,7 @@ interface Props {
|
|
|
15
16
|
onthemechange?: (theme: string) => void;
|
|
16
17
|
onclose?: () => void;
|
|
17
18
|
}
|
|
19
|
+
type $$ComponentProps = Props & DataAttributes;
|
|
18
20
|
/**
|
|
19
21
|
* SettingsModal
|
|
20
22
|
* 应用设置模态框,包含语言和主题切换功能。
|
|
@@ -26,6 +28,6 @@ interface Props {
|
|
|
26
28
|
* @prop {function} onlanguagechange - 语言变更回调
|
|
27
29
|
* @prop {function} onthemechange - 主题变更回调
|
|
28
30
|
*/
|
|
29
|
-
declare const SettingsModal: import("svelte").Component
|
|
31
|
+
declare const SettingsModal: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
30
32
|
type SettingsModal = ReturnType<typeof SettingsModal>;
|
|
31
33
|
export default SettingsModal;
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
@prop {function} onchange - 颜色变更回调
|
|
8
8
|
-->
|
|
9
9
|
<script lang='ts'>
|
|
10
|
+
import type { DataAttributes } from '../../../types.js'
|
|
10
11
|
import { uiM } from '../../../messages.js'
|
|
11
12
|
import { DEFAULT_THEME_COLOR, THEME_COLOR_PRESETS } from '../../../theme-config.js'
|
|
12
|
-
import { cn } from '../../../utils.js'
|
|
13
|
+
import { cn, getDataAttributes } from '../../../utils.js'
|
|
13
14
|
|
|
14
15
|
const HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/
|
|
15
16
|
const SHORT_HEX_COLOR_REGEX = /^#[0-9a-f]{3}$/
|
|
@@ -37,8 +38,10 @@
|
|
|
37
38
|
pickerLabel,
|
|
38
39
|
customLabel,
|
|
39
40
|
class: className = '',
|
|
40
|
-
|
|
41
|
+
...restProps
|
|
42
|
+
}: Props & DataAttributes = $props()
|
|
41
43
|
|
|
44
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
42
45
|
let colorInputRef = $state<HTMLInputElement | null>(null)
|
|
43
46
|
|
|
44
47
|
const defaultPresets = $derived(
|
|
@@ -97,7 +100,7 @@
|
|
|
97
100
|
}
|
|
98
101
|
</script>
|
|
99
102
|
|
|
100
|
-
<div class={cn('theme-color-picker', className)}>
|
|
103
|
+
<div {...dataAttributes} class={cn('theme-color-picker', className)}>
|
|
101
104
|
<div class='flex flex-wrap items-center gap-2'>
|
|
102
105
|
{#each normalizedPresets as preset (preset.value)}
|
|
103
106
|
<button
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
interface ThemeColorPreset {
|
|
2
3
|
value: string;
|
|
3
4
|
label: string;
|
|
@@ -11,6 +12,7 @@ interface Props {
|
|
|
11
12
|
customLabel?: string;
|
|
12
13
|
class?: string;
|
|
13
14
|
}
|
|
15
|
+
type $$ComponentProps = Props & DataAttributes;
|
|
14
16
|
/**
|
|
15
17
|
* ThemeColorPicker
|
|
16
18
|
* 主题色选择器,提供预置主题色与原生取色盘能力。
|
|
@@ -19,6 +21,6 @@ interface Props {
|
|
|
19
21
|
* @prop {Array<{ value: string, label: string }>} presets - 预置主题色列表
|
|
20
22
|
* @prop {function} onchange - 颜色变更回调
|
|
21
23
|
*/
|
|
22
|
-
declare const ThemeColorPicker: import("svelte").Component
|
|
24
|
+
declare const ThemeColorPicker: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
23
25
|
type ThemeColorPicker = ReturnType<typeof ThemeColorPicker>;
|
|
24
26
|
export default ThemeColorPicker;
|
|
@@ -17,9 +17,10 @@
|
|
|
17
17
|
-->
|
|
18
18
|
<script lang='ts'>
|
|
19
19
|
import type { ThemeInfo } from '../../../theme-config.js'
|
|
20
|
+
import type { DataAttributes } from '../../../types.js'
|
|
20
21
|
import { uiM } from '../../../messages.js'
|
|
21
22
|
import { THEME_GROUPS, THEMES } from '../../../theme-config.js'
|
|
22
|
-
import { cn } from '../../../utils.js'
|
|
23
|
+
import { cn, getDataAttributes } from '../../../utils.js'
|
|
23
24
|
import BareButton from '../../primitives/BareButton.svelte'
|
|
24
25
|
|
|
25
26
|
interface Props {
|
|
@@ -45,8 +46,10 @@
|
|
|
45
46
|
compact = false,
|
|
46
47
|
grouped = true,
|
|
47
48
|
class: className = '',
|
|
48
|
-
|
|
49
|
+
...restProps
|
|
50
|
+
}: Props & DataAttributes = $props()
|
|
49
51
|
|
|
52
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
50
53
|
const displaySelectLabel = $derived(selectLabel ?? uiM('theme_selector_label'))
|
|
51
54
|
|
|
52
55
|
let open = $state(false)
|
|
@@ -83,7 +86,7 @@
|
|
|
83
86
|
})
|
|
84
87
|
</script>
|
|
85
88
|
|
|
86
|
-
<div bind:this={containerRef} class={cn('dropdown', align === 'end' ? 'dropdown-end' : '', open ? 'dropdown-open' : '', className)}>
|
|
89
|
+
<div {...dataAttributes} bind:this={containerRef} class={cn('dropdown', align === 'end' ? 'dropdown-end' : '', open ? 'dropdown-open' : '', className)}>
|
|
87
90
|
<BareButton
|
|
88
91
|
type='button'
|
|
89
92
|
class='btn btn-ghost {compact ? 'btn-sm btn-square' : 'gap-2'}'
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
interface Props {
|
|
2
3
|
currentTheme?: string;
|
|
3
4
|
/** 选择主题按钮的 aria-label */
|
|
@@ -11,6 +12,7 @@ interface Props {
|
|
|
11
12
|
grouped?: boolean;
|
|
12
13
|
class?: string;
|
|
13
14
|
}
|
|
15
|
+
type $$ComponentProps = Props & DataAttributes;
|
|
14
16
|
/**
|
|
15
17
|
* ThemeSelector
|
|
16
18
|
* 主题选择器组件,支持内置主题集合的选择和预览。
|
|
@@ -28,6 +30,6 @@ interface Props {
|
|
|
28
30
|
* grouped
|
|
29
31
|
* />
|
|
30
32
|
*/
|
|
31
|
-
declare const ThemeSelector: import("svelte").Component
|
|
33
|
+
declare const ThemeSelector: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
32
34
|
type ThemeSelector = ReturnType<typeof ThemeSelector>;
|
|
33
35
|
export default ThemeSelector;
|
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
/>
|
|
15
15
|
-->
|
|
16
16
|
<script lang='ts'>
|
|
17
|
+
import type { DataAttributes } from '../../../types.js'
|
|
17
18
|
import { uiM } from '../../../messages.js'
|
|
18
19
|
import { isDarkTheme } from '../../../theme-config.js'
|
|
20
|
+
import { getDataAttributes } from '../../../utils.js'
|
|
19
21
|
import IconButton from '../../primitives/IconButton.svelte'
|
|
20
22
|
|
|
21
23
|
interface Props {
|
|
@@ -37,8 +39,10 @@
|
|
|
37
39
|
darkTheme = 'dark',
|
|
38
40
|
labels = {},
|
|
39
41
|
class: className = '',
|
|
40
|
-
|
|
42
|
+
...restProps
|
|
43
|
+
}: Props & DataAttributes = $props()
|
|
41
44
|
|
|
45
|
+
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
42
46
|
// labels 优先,缺省回退到内置文案
|
|
43
47
|
const isDark = $derived(isDarkTheme(currentTheme))
|
|
44
48
|
|
|
@@ -48,7 +52,7 @@
|
|
|
48
52
|
}
|
|
49
53
|
</script>
|
|
50
54
|
|
|
51
|
-
<div class='tooltip tooltip-bottom {className}' data-tip={isDark ? (labels.switchToLight ?? uiM('theme_switch_to_light')) : (labels.switchToDark ?? uiM('theme_switch_to_dark'))}>
|
|
55
|
+
<div {...dataAttributes} class='tooltip tooltip-bottom {className}' data-tip={isDark ? (labels.switchToLight ?? uiM('theme_switch_to_light')) : (labels.switchToDark ?? uiM('theme_switch_to_dark'))}>
|
|
52
56
|
<IconButton
|
|
53
57
|
variant='ghost'
|
|
54
58
|
size='sm'
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DataAttributes } from '../../../types.js';
|
|
1
2
|
interface Props {
|
|
2
3
|
currentTheme?: string;
|
|
3
4
|
onchange?: (theme: string) => void;
|
|
@@ -9,6 +10,7 @@ interface Props {
|
|
|
9
10
|
};
|
|
10
11
|
class?: string;
|
|
11
12
|
}
|
|
13
|
+
type $$ComponentProps = Props & DataAttributes;
|
|
12
14
|
/**
|
|
13
15
|
* ThemeToggle
|
|
14
16
|
* 主题切换按钮组件,支持明/暗主题快速切换。
|
|
@@ -24,6 +26,6 @@ interface Props {
|
|
|
24
26
|
* onchange={(theme) => themeStore.set(theme)}
|
|
25
27
|
* />
|
|
26
28
|
*/
|
|
27
|
-
declare const ThemeToggle: import("svelte").Component
|
|
29
|
+
declare const ThemeToggle: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
28
30
|
type ThemeToggle = ReturnType<typeof ThemeToggle>;
|
|
29
31
|
export default ThemeToggle;
|