@h-ai/ui 0.1.0-alpha.67 → 0.1.0-alpha.68
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.en.md +31 -5
- package/README.ja.md +31 -5
- package/README.md +64 -38
- package/dist/components/compounds/Accordion.svelte +24 -0
- package/dist/components/compounds/Accordion.svelte.d.ts +34 -0
- package/dist/components/compounds/ActionSheet.svelte +24 -0
- package/dist/components/compounds/ActionSheet.svelte.d.ts +38 -0
- package/dist/components/compounds/Alert.svelte +15 -4
- package/dist/components/compounds/Alert.svelte.d.ts +10 -0
- package/dist/components/compounds/AppBar.svelte +24 -0
- package/dist/components/compounds/AppBar.svelte.d.ts +33 -0
- package/dist/components/compounds/BottomNav.svelte +37 -0
- package/dist/components/compounds/BottomNav.svelte.d.ts +43 -0
- package/dist/components/compounds/Breadcrumb.svelte +11 -0
- package/dist/components/compounds/Breadcrumb.svelte.d.ts +20 -0
- package/dist/components/compounds/Calendar.svelte +20 -6
- package/dist/components/compounds/Calendar.svelte.d.ts +20 -6
- package/dist/components/compounds/Card.svelte +10 -0
- package/dist/components/compounds/Card.svelte.d.ts +10 -0
- package/dist/components/compounds/Combobox.svelte +35 -18
- package/dist/components/compounds/Combobox.svelte.d.ts +35 -18
- package/dist/components/compounds/Confirm.svelte +11 -0
- package/dist/components/compounds/Confirm.svelte.d.ts +21 -0
- package/dist/components/compounds/DataTable.svelte +40 -17
- package/dist/components/compounds/DataTable.svelte.d.ts +9 -13
- package/dist/components/compounds/DatePicker.svelte +20 -6
- package/dist/components/compounds/DatePicker.svelte.d.ts +20 -6
- package/dist/components/compounds/Drawer.svelte +11 -0
- package/dist/components/compounds/Drawer.svelte.d.ts +21 -0
- package/dist/components/compounds/Dropdown.svelte +10 -0
- package/dist/components/compounds/Dropdown.svelte.d.ts +10 -0
- package/dist/components/compounds/Empty.svelte +16 -5
- package/dist/components/compounds/Empty.svelte.d.ts +20 -0
- package/dist/components/compounds/Form.svelte +37 -2
- package/dist/components/compounds/Form.svelte.d.ts +20 -0
- package/dist/components/compounds/FormField.svelte +11 -0
- package/dist/components/compounds/FormField.svelte.d.ts +20 -0
- package/dist/components/compounds/FormLayout.svelte +13 -1
- package/dist/components/compounds/FormLayout.svelte.d.ts +13 -0
- package/dist/components/compounds/InfiniteScroll.svelte +24 -0
- package/dist/components/compounds/InfiniteScroll.svelte.d.ts +34 -0
- package/dist/components/compounds/MessageBoxContainer.svelte +11 -0
- package/dist/components/compounds/MessageBoxContainer.svelte.d.ts +21 -0
- package/dist/components/compounds/MessageBoxDialog.svelte +14 -0
- package/dist/components/compounds/MessageBoxDialog.svelte.d.ts +21 -0
- package/dist/components/compounds/MessageContainer.svelte +11 -0
- package/dist/components/compounds/MessageContainer.svelte.d.ts +21 -0
- package/dist/components/compounds/Modal.svelte +10 -0
- package/dist/components/compounds/Modal.svelte.d.ts +10 -0
- package/dist/components/compounds/PageHeader.svelte +21 -8
- package/dist/components/compounds/PageHeader.svelte.d.ts +21 -8
- package/dist/components/compounds/Pagination.svelte +34 -8
- package/dist/components/compounds/Pagination.svelte.d.ts +20 -0
- package/dist/components/compounds/Popover.svelte +11 -0
- package/dist/components/compounds/Popover.svelte.d.ts +20 -0
- package/dist/components/compounds/PullRefresh.svelte +24 -0
- package/dist/components/compounds/PullRefresh.svelte.d.ts +32 -0
- package/dist/components/compounds/Result.svelte +11 -0
- package/dist/components/compounds/Result.svelte.d.ts +20 -0
- package/dist/components/compounds/SafeArea.svelte +24 -0
- package/dist/components/compounds/SafeArea.svelte.d.ts +32 -0
- package/dist/components/compounds/Skeleton.svelte +10 -0
- package/dist/components/compounds/Skeleton.svelte.d.ts +10 -0
- package/dist/components/compounds/Steps.svelte +11 -0
- package/dist/components/compounds/Steps.svelte.d.ts +20 -0
- package/dist/components/compounds/SwipeCell.svelte +24 -0
- package/dist/components/compounds/SwipeCell.svelte.d.ts +37 -0
- package/dist/components/compounds/TableToolbar.svelte +66 -28
- package/dist/components/compounds/TableToolbar.svelte.d.ts +29 -19
- package/dist/components/compounds/Tabs.svelte +58 -10
- package/dist/components/compounds/Tabs.svelte.d.ts +10 -0
- package/dist/components/compounds/TagInput.svelte +11 -0
- package/dist/components/compounds/TagInput.svelte.d.ts +20 -0
- package/dist/components/compounds/Timeline.svelte +24 -0
- package/dist/components/compounds/Timeline.svelte.d.ts +34 -0
- package/dist/components/compounds/ToastContainer.svelte +11 -0
- package/dist/components/compounds/ToastContainer.svelte.d.ts +26 -0
- package/dist/components/compounds/Tooltip.svelte +11 -0
- package/dist/components/compounds/Tooltip.svelte.d.ts +22 -0
- package/dist/components/compounds/accordion-types.d.ts +10 -1
- package/dist/components/compounds/action-sheet-types.d.ts +9 -0
- package/dist/components/compounds/bottom-nav-types.d.ts +9 -0
- package/dist/components/compounds/swipe-cell-types.d.ts +9 -0
- package/dist/components/compounds/timeline-types.d.ts +9 -0
- package/dist/components/control-size.d.ts +17 -0
- package/dist/components/control-size.js +8 -0
- package/dist/components/primitives/Avatar.svelte +10 -0
- package/dist/components/primitives/Avatar.svelte.d.ts +10 -0
- package/dist/components/primitives/Badge.svelte +10 -0
- package/dist/components/primitives/Badge.svelte.d.ts +10 -0
- package/dist/components/primitives/BareButton.svelte +11 -0
- package/dist/components/primitives/BareButton.svelte.d.ts +20 -0
- package/dist/components/primitives/BareInput.svelte +11 -0
- package/dist/components/primitives/BareInput.svelte.d.ts +20 -0
- package/dist/components/primitives/Button.svelte +10 -0
- package/dist/components/primitives/Button.svelte.d.ts +10 -0
- package/dist/components/primitives/Checkbox.svelte +11 -0
- package/dist/components/primitives/Checkbox.svelte.d.ts +20 -0
- package/dist/components/primitives/IconButton.svelte +11 -0
- package/dist/components/primitives/IconButton.svelte.d.ts +20 -0
- package/dist/components/primitives/Input.svelte +10 -0
- package/dist/components/primitives/Input.svelte.d.ts +10 -0
- package/dist/components/primitives/Progress.svelte +11 -0
- package/dist/components/primitives/Progress.svelte.d.ts +20 -0
- package/dist/components/primitives/Radio.svelte +11 -0
- package/dist/components/primitives/Radio.svelte.d.ts +20 -0
- package/dist/components/primitives/Range.svelte +24 -0
- package/dist/components/primitives/Range.svelte.d.ts +34 -0
- package/dist/components/primitives/Rating.svelte +24 -0
- package/dist/components/primitives/Rating.svelte.d.ts +34 -0
- package/dist/components/primitives/Select.svelte +11 -0
- package/dist/components/primitives/Select.svelte.d.ts +21 -0
- package/dist/components/primitives/Spinner.svelte +11 -0
- package/dist/components/primitives/Spinner.svelte.d.ts +20 -0
- package/dist/components/primitives/Switch.svelte +11 -0
- package/dist/components/primitives/Switch.svelte.d.ts +20 -0
- package/dist/components/primitives/Tag.svelte +11 -0
- package/dist/components/primitives/Tag.svelte.d.ts +20 -0
- package/dist/components/primitives/Textarea.svelte +11 -0
- package/dist/components/primitives/Textarea.svelte.d.ts +21 -0
- package/dist/components/primitives/ToggleCheckbox.svelte +11 -0
- package/dist/components/primitives/ToggleCheckbox.svelte.d.ts +20 -0
- package/dist/components/primitives/ToggleInput.svelte +11 -0
- package/dist/components/primitives/ToggleInput.svelte.d.ts +20 -0
- package/dist/components/primitives/ToggleRadio.svelte +11 -0
- package/dist/components/primitives/ToggleRadio.svelte.d.ts +20 -0
- package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte +27 -0
- package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte.d.ts +27 -0
- package/dist/components/scenes/ai/AiDocumentEditor.svelte +79 -0
- package/dist/components/scenes/ai/AiDocumentEditor.svelte.d.ts +23 -0
- package/dist/components/scenes/ai/MarkdownRenderer.svelte +11 -0
- package/dist/components/scenes/ai/MarkdownRenderer.svelte.d.ts +28 -0
- package/dist/components/scenes/ai/code-preview.d.ts +28 -0
- package/dist/components/scenes/ai/code-preview.js +20 -0
- package/dist/components/scenes/ai/document-download.d.ts +52 -0
- package/dist/components/scenes/ai/document-download.js +30 -2
- package/dist/components/scenes/ai/document-parse.d.ts +71 -14
- package/dist/components/scenes/ai/document-parse.js +19 -9
- package/dist/components/scenes/ai/document-types.d.ts +222 -88
- package/dist/components/scenes/ai/editor-markdown-extensions.d.ts +16 -0
- package/dist/components/scenes/ai/editor-markdown-extensions.js +16 -0
- package/dist/components/scenes/ai/highlight.d.ts +11 -0
- package/dist/components/scenes/ai/highlight.js +11 -0
- package/dist/components/scenes/ai/markdown-parse.d.ts +8 -2
- package/dist/components/scenes/ai/markdown-parse.js +2 -2
- package/dist/components/scenes/ai/mermaid-host-sync.d.ts +38 -0
- package/dist/components/scenes/ai/mermaid-host-sync.js +30 -0
- package/dist/components/scenes/ai/mermaid-render.d.ts +23 -0
- package/dist/components/scenes/ai/mermaid-render.js +23 -0
- package/dist/components/scenes/ai/safe-html.d.ts +54 -6
- package/dist/components/scenes/ai/safe-html.js +54 -6
- package/dist/components/scenes/ai/table/AiTableEditor.svelte +48 -0
- package/dist/components/scenes/ai/table/AiTableEditor.svelte.d.ts +24 -0
- package/dist/components/scenes/ai/table/table-types.d.ts +79 -0
- package/dist/components/scenes/app/FeedbackModal.svelte +45 -5
- package/dist/components/scenes/app/FeedbackModal.svelte.d.ts +45 -5
- package/dist/components/scenes/app/LanguageSwitch.svelte +29 -19
- package/dist/components/scenes/app/LanguageSwitch.svelte.d.ts +28 -19
- package/dist/components/scenes/app/SettingsLayout.svelte +21 -9
- package/dist/components/scenes/app/SettingsLayout.svelte.d.ts +21 -9
- package/dist/components/scenes/app/SettingsModal.svelte +23 -0
- package/dist/components/scenes/app/SettingsModal.svelte.d.ts +23 -0
- package/dist/components/scenes/app/ThemeColorPicker.svelte +31 -0
- package/dist/components/scenes/app/ThemeColorPicker.svelte.d.ts +31 -0
- package/dist/components/scenes/app/ThemeSelector.svelte +21 -6
- package/dist/components/scenes/app/ThemeSelector.svelte.d.ts +21 -6
- package/dist/components/scenes/app/ThemeToggle.svelte +21 -4
- package/dist/components/scenes/app/ThemeToggle.svelte.d.ts +21 -4
- package/dist/components/scenes/app/index.d.ts +1 -1
- package/dist/components/scenes/app/index.js +1 -1
- package/dist/components/scenes/charts/Chart.svelte +11 -0
- package/dist/components/scenes/charts/Chart.svelte.d.ts +20 -0
- package/dist/components/scenes/charts/chart-theme.d.ts +25 -1
- package/dist/components/scenes/charts/chart-theme.js +25 -1
- package/dist/components/scenes/charts/chart-types.d.ts +83 -7
- package/dist/components/scenes/charts/renderers/LineChart.svelte +53 -0
- package/dist/components/scenes/charts/renderers/LineChart.svelte.d.ts +13 -0
- package/dist/components/scenes/crud/CrudDeleteConfirm.svelte +10 -0
- package/dist/components/scenes/crud/CrudDeleteConfirm.svelte.d.ts +10 -0
- package/dist/components/scenes/crud/CrudDetailDrawer.svelte +8 -0
- package/dist/components/scenes/crud/CrudDetailDrawer.svelte.d.ts +8 -0
- package/dist/components/scenes/crud/CrudDetailPanel.svelte +18 -0
- package/dist/components/scenes/crud/CrudDetailPanel.svelte.d.ts +18 -0
- package/dist/components/scenes/crud/CrudEditPanel.svelte +10 -0
- package/dist/components/scenes/crud/CrudEditPanel.svelte.d.ts +10 -0
- package/dist/components/scenes/crud/CrudFilterBar.svelte +18 -0
- package/dist/components/scenes/crud/CrudFilterBar.svelte.d.ts +18 -0
- package/dist/components/scenes/crud/CrudPage.svelte +37 -5
- package/dist/components/scenes/crud/CrudPage.svelte.d.ts +35 -3
- package/dist/components/scenes/crud/crud-controller.svelte.d.ts +142 -23
- package/dist/components/scenes/crud/crud-controller.svelte.js +22 -11
- package/dist/components/scenes/crud/crud-form-validation.d.ts +12 -0
- package/dist/components/scenes/crud/crud-form-validation.js +12 -0
- package/dist/components/scenes/crud/crud-types.d.ts +79 -8
- package/dist/components/scenes/crud/nav-adapter.d.ts +14 -0
- package/dist/components/scenes/crud/nav-adapter.js +8 -0
- package/dist/components/scenes/crypto/EncryptedInput.svelte +24 -0
- package/dist/components/scenes/crypto/EncryptedInput.svelte.d.ts +34 -0
- package/dist/components/scenes/crypto/HashDisplay.svelte +11 -0
- package/dist/components/scenes/crypto/HashDisplay.svelte.d.ts +21 -0
- package/dist/components/scenes/crypto/SignatureDisplay.svelte +11 -0
- package/dist/components/scenes/crypto/SignatureDisplay.svelte.d.ts +21 -0
- package/dist/components/scenes/error/ErrorPage.svelte +8 -1
- package/dist/components/scenes/error/ErrorPage.svelte.d.ts +8 -1
- package/dist/components/scenes/error/error-presets.d.ts +40 -4
- package/dist/components/scenes/error/error-presets.js +22 -2
- package/dist/components/scenes/guide/GuideHost.svelte +27 -0
- package/dist/components/scenes/guide/GuideHost.svelte.d.ts +27 -0
- package/dist/components/scenes/guide/HelpCenter.svelte +27 -0
- package/dist/components/scenes/guide/HelpCenter.svelte.d.ts +27 -0
- package/dist/components/scenes/iam/AuthPanel.svelte +26 -2
- package/dist/components/scenes/iam/AuthPanel.svelte.d.ts +25 -0
- package/dist/components/scenes/iam/AuthShell.svelte +8 -3
- package/dist/components/scenes/iam/AuthShell.svelte.d.ts +8 -3
- package/dist/components/scenes/iam/ChangePasswordForm.svelte +10 -0
- package/dist/components/scenes/iam/ChangePasswordForm.svelte.d.ts +10 -0
- package/dist/components/scenes/iam/ForgotPasswordForm.svelte +11 -0
- package/dist/components/scenes/iam/ForgotPasswordForm.svelte.d.ts +21 -0
- package/dist/components/scenes/iam/LoginForm.svelte +24 -31
- package/dist/components/scenes/iam/LoginForm.svelte.d.ts +10 -0
- package/dist/components/scenes/iam/PasswordInput.svelte +23 -0
- package/dist/components/scenes/iam/PasswordInput.svelte.d.ts +23 -0
- package/dist/components/scenes/iam/PermGuard.svelte +21 -11
- package/dist/components/scenes/iam/PermGuard.svelte.d.ts +30 -0
- package/dist/components/scenes/iam/RegisterForm.svelte +10 -0
- package/dist/components/scenes/iam/RegisterForm.svelte.d.ts +10 -0
- package/dist/components/scenes/iam/ResetPasswordForm.svelte +10 -0
- package/dist/components/scenes/iam/ResetPasswordForm.svelte.d.ts +10 -0
- package/dist/components/scenes/iam/UserProfile.svelte +11 -0
- package/dist/components/scenes/iam/UserProfile.svelte.d.ts +21 -0
- package/dist/components/scenes/iam/auth-error-message.d.ts +10 -0
- package/dist/components/scenes/iam/auth-error-message.js +10 -0
- package/dist/components/scenes/iam/password-utils.d.ts +39 -1
- package/dist/components/scenes/iam/password-utils.js +39 -1
- package/dist/components/scenes/iam/permission-context.svelte.d.ts +33 -23
- package/dist/components/scenes/iam/permission-context.svelte.js +20 -22
- package/dist/components/scenes/storage/AvatarUpload.svelte +11 -0
- package/dist/components/scenes/storage/AvatarUpload.svelte.d.ts +20 -0
- package/dist/components/scenes/storage/FileList.svelte +13 -2
- package/dist/components/scenes/storage/FileList.svelte.d.ts +20 -0
- package/dist/components/scenes/storage/FileUpload.svelte +37 -2
- package/dist/components/scenes/storage/FileUpload.svelte.d.ts +21 -0
- package/dist/components/scenes/storage/ImageUpload.svelte +11 -0
- package/dist/components/scenes/storage/ImageUpload.svelte.d.ts +21 -0
- package/dist/components/scenes/types.d.ts +352 -11
- package/dist/guide-storage.d.ts +13 -1
- package/dist/guide-storage.js +13 -1
- package/dist/guide-types.d.ts +67 -2
- package/dist/guide.svelte.d.ts +22 -1
- package/dist/guide.svelte.js +22 -1
- package/dist/i18n.svelte.d.ts +64 -3
- package/dist/i18n.svelte.js +99 -18
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -2
- package/dist/internal/browser-safety.d.ts +51 -2
- package/dist/internal/browser-safety.js +45 -7
- package/dist/internal/form-context.d.ts +73 -0
- package/dist/internal/form-context.js +57 -0
- package/dist/internal/form-validation.svelte.d.ts +42 -0
- package/dist/internal/form-validation.svelte.js +26 -0
- package/dist/internal/icon-safety.d.ts +7 -0
- package/dist/internal/icon-safety.js +7 -0
- package/dist/internal/locale.d.ts +19 -0
- package/dist/internal/locale.js +21 -0
- package/dist/message.svelte.d.ts +90 -0
- package/dist/message.svelte.js +84 -0
- package/dist/messagebox.svelte.d.ts +61 -13
- package/dist/messagebox.svelte.js +55 -13
- package/dist/messages/en-US.json +6 -1
- package/dist/messages/ja-JP.json +389 -0
- package/dist/messages/zh-CN.json +6 -1
- package/dist/messages.d.ts +24 -3
- package/dist/messages.js +18 -3
- package/dist/styles/design-tokens.css +4 -2
- package/dist/styles/global.css +28 -8
- package/dist/styles/theme.css +2 -0
- package/dist/theme-config.d.ts +173 -0
- package/dist/theme-config.js +143 -0
- package/dist/toast.svelte.d.ts +114 -4
- package/dist/toast.svelte.js +108 -4
- package/dist/types.d.ts +526 -9
- package/dist/utils/platform.svelte.d.ts +28 -15
- package/dist/utils/platform.svelte.js +19 -14
- package/dist/utils.d.ts +102 -0
- package/dist/utils.js +93 -0
- package/package.json +66 -6
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component MessageBoxContainer
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - MessageBoxContainer 组件
|
|
4
5
|
=============================================================================
|
|
@@ -7,6 +8,16 @@
|
|
|
7
8
|
|
|
8
9
|
使用 DaisyUI 样式 + tabler icon,不依赖 ElementUI。
|
|
9
10
|
=============================================================================
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
```ts
|
|
14
|
+
import { mount, unmount } from 'svelte'
|
|
15
|
+
import type { ComponentProps } from 'svelte'
|
|
16
|
+
import { MessageBoxContainer } from '@h-ai/ui'
|
|
17
|
+
const props: ComponentProps<typeof MessageBoxContainer> = { 'data-testid': 'message-boxes' }
|
|
18
|
+
const component = mount(MessageBoxContainer, { target: document.body, props })
|
|
19
|
+
await unmount(component)
|
|
20
|
+
```
|
|
10
21
|
-->
|
|
11
22
|
<script lang='ts'>
|
|
12
23
|
import type { DataAttributes } from '../../types.js'
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* MessageBoxContainer
|
|
4
|
+
* =============================================================================
|
|
5
|
+
* @h-ai/ui - MessageBoxContainer 组件
|
|
6
|
+
* =============================================================================
|
|
7
|
+
* 命令式弹框容器,渲染 messageBox store 中的所有弹框。
|
|
8
|
+
* 每个弹框由 MessageBoxDialog 独立管理 showModal()/close()。
|
|
9
|
+
*
|
|
10
|
+
* 使用 DaisyUI 样式 + tabler icon,不依赖 ElementUI。
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { MessageBoxContainer } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof MessageBoxContainer> = { 'data-testid': 'message-boxes' }
|
|
19
|
+
* const component = mount(MessageBoxContainer, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
2
23
|
declare const MessageBoxContainer: import("svelte").Component<DataAttributes, {}, "">;
|
|
3
24
|
type MessageBoxContainer = ReturnType<typeof MessageBoxContainer>;
|
|
4
25
|
export default MessageBoxContainer;
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component MessageBoxDialog
|
|
2
3
|
单个 MessageBox 弹框,由 MessageBoxContainer 渲染。
|
|
3
4
|
内部使用原生 <dialog>.showModal() 进入浏览器 top layer。
|
|
4
5
|
行为对标 ElementUI MessageBox:
|
|
5
6
|
- 始终显示标题(默认"提示")和右上角关闭按钮;
|
|
6
7
|
- 遮罩层点击可通过 closeOnClickModal 配置。
|
|
8
|
+
|
|
9
|
+
@example
|
|
10
|
+
```ts
|
|
11
|
+
import { mount, unmount } from 'svelte'
|
|
12
|
+
import { MessageBoxDialog, messageBox } from '@h-ai/ui'
|
|
13
|
+
const response = messageBox.confirm({ title: '确认', message: '提交资料?' })
|
|
14
|
+
const item = messageBox.items[0]
|
|
15
|
+
if (!item) throw new Error('Dialog state unavailable')
|
|
16
|
+
const dialog = mount(MessageBoxDialog, { target: document.body, props: { item } })
|
|
17
|
+
messageBox.handleCancel(item)
|
|
18
|
+
const accepted = await response
|
|
19
|
+
await unmount(dialog)
|
|
20
|
+
```
|
|
7
21
|
-->
|
|
8
22
|
<script lang='ts'>
|
|
9
23
|
import type { MessageBoxItem } from '../../messagebox.svelte.js'
|
|
@@ -3,6 +3,27 @@ import type { DataAttributes } from '../../types.js';
|
|
|
3
3
|
type $$ComponentProps = {
|
|
4
4
|
item: MessageBoxItem;
|
|
5
5
|
} & DataAttributes;
|
|
6
|
+
/**
|
|
7
|
+
* MessageBoxDialog
|
|
8
|
+
* 单个 MessageBox 弹框,由 MessageBoxContainer 渲染。
|
|
9
|
+
* 内部使用原生 <dialog>.showModal() 进入浏览器 top layer。
|
|
10
|
+
* 行为对标 ElementUI MessageBox:
|
|
11
|
+
* - 始终显示标题(默认"提示")和右上角关闭按钮;
|
|
12
|
+
* - 遮罩层点击可通过 closeOnClickModal 配置。
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { mount, unmount } from 'svelte'
|
|
17
|
+
* import { MessageBoxDialog, messageBox } from '@h-ai/ui'
|
|
18
|
+
* const response = messageBox.confirm({ title: '确认', message: '提交资料?' })
|
|
19
|
+
* const item = messageBox.items[0]
|
|
20
|
+
* if (!item) throw new Error('Dialog state unavailable')
|
|
21
|
+
* const dialog = mount(MessageBoxDialog, { target: document.body, props: { item } })
|
|
22
|
+
* messageBox.handleCancel(item)
|
|
23
|
+
* const accepted = await response
|
|
24
|
+
* await unmount(dialog)
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
6
27
|
declare const MessageBoxDialog: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
28
|
type MessageBoxDialog = ReturnType<typeof MessageBoxDialog>;
|
|
8
29
|
export default MessageBoxDialog;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component MessageContainer
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - MessageContainer 组件
|
|
4
5
|
=============================================================================
|
|
@@ -7,6 +8,16 @@
|
|
|
7
8
|
|
|
8
9
|
叠加策略:消息层始终挂载到 `document.body`,使用 fixed overlay + 超高 z-index(高于 Modal 的 `--hai-z-modal`),保证不被任何弹层遮挡;空消息时隐藏容器避免拦截交互。
|
|
9
10
|
=============================================================================
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
```ts
|
|
14
|
+
import { mount, unmount } from 'svelte'
|
|
15
|
+
import type { ComponentProps } from 'svelte'
|
|
16
|
+
import { MessageContainer } from '@h-ai/ui'
|
|
17
|
+
const props: ComponentProps<typeof MessageContainer> = { 'data-testid': 'messages' }
|
|
18
|
+
const component = mount(MessageContainer, { target: document.body, props })
|
|
19
|
+
await unmount(component)
|
|
20
|
+
```
|
|
10
21
|
-->
|
|
11
22
|
<script lang='ts'>
|
|
12
23
|
import type { DataAttributes } from '../../types.js'
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* MessageContainer
|
|
4
|
+
* =============================================================================
|
|
5
|
+
* @h-ai/ui - MessageContainer 组件
|
|
6
|
+
* =============================================================================
|
|
7
|
+
* 轻量消息提示容器,渲染 message store 中的消息条目。
|
|
8
|
+
* 视觉风格:顶部居中、带类型图标、自动滑入滑出。
|
|
9
|
+
*
|
|
10
|
+
* 叠加策略:消息层始终挂载到 `document.body`,使用 fixed overlay + 超高 z-index(高于 Modal 的 `--hai-z-modal`),保证不被任何弹层遮挡;空消息时隐藏容器避免拦截交互。
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { MessageContainer } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof MessageContainer> = { 'data-testid': 'messages' }
|
|
19
|
+
* const component = mount(MessageContainer, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
2
23
|
declare const MessageContainer: import("svelte").Component<DataAttributes, {}, "">;
|
|
3
24
|
type MessageContainer = ReturnType<typeof MessageContainer>;
|
|
4
25
|
export default MessageContainer;
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Modal
|
|
3
3
|
模态框组件,支持 backdrop-blur 和 scale-in 动画。
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```ts
|
|
7
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
8
|
+
import type { ComponentProps } from 'svelte'
|
|
9
|
+
import { Modal } from '@h-ai/ui'
|
|
10
|
+
const props: ComponentProps<typeof Modal> = { open: true, title: '编辑资料', closeOnBackdrop: false, children: createRawSnippet(() => ({ render: () => "<span>表单内容</span>" })) }
|
|
11
|
+
const component = mount(Modal, { target: document.body, props })
|
|
12
|
+
await unmount(component)
|
|
13
|
+
```
|
|
4
14
|
-->
|
|
5
15
|
<script lang='ts'>
|
|
6
16
|
import type { DataAttributes, ModalProps } from '../../types.js'
|
|
@@ -3,6 +3,16 @@ type $$ComponentProps = ModalProps & DataAttributes;
|
|
|
3
3
|
/**
|
|
4
4
|
* Modal
|
|
5
5
|
* 模态框组件,支持 backdrop-blur 和 scale-in 动画。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
10
|
+
* import type { ComponentProps } from 'svelte'
|
|
11
|
+
* import { Modal } from '@h-ai/ui'
|
|
12
|
+
* const props: ComponentProps<typeof Modal> = { open: true, title: '编辑资料', closeOnBackdrop: false, children: createRawSnippet(() => ({ render: () => "<span>表单内容</span>" })) }
|
|
13
|
+
* const component = mount(Modal, { target: document.body, props })
|
|
14
|
+
* await unmount(component)
|
|
15
|
+
* ```
|
|
6
16
|
*/
|
|
7
17
|
declare const Modal: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
8
18
|
type Modal = ReturnType<typeof Modal>;
|
|
@@ -7,20 +7,33 @@
|
|
|
7
7
|
@prop {Snippet} actions - 右侧操作按钮插槽
|
|
8
8
|
|
|
9
9
|
@example
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
```ts
|
|
11
|
+
import { mount, unmount } from 'svelte'
|
|
12
|
+
import type { ComponentProps } from 'svelte'
|
|
13
|
+
import { PageHeader } from '@h-ai/ui'
|
|
14
|
+
const props: ComponentProps<typeof PageHeader> = { title: '用户管理', description: '维护用户资料' }
|
|
15
|
+
const component = mount(PageHeader, { target: document.body, props })
|
|
16
|
+
await unmount(component)
|
|
17
|
+
```
|
|
18
18
|
-->
|
|
19
19
|
<script lang='ts'>
|
|
20
20
|
import type { Snippet } from 'svelte'
|
|
21
21
|
import type { DataAttributes } from '../../types.js'
|
|
22
22
|
import { getDataAttributes } from '../../utils.js'
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* PageHeader 组件的属性契约;通过公开组件配置使用。
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { mount, unmount } from 'svelte'
|
|
30
|
+
* import type { ComponentProps } from 'svelte'
|
|
31
|
+
* import { PageHeader } from '@h-ai/ui'
|
|
32
|
+
* const props: ComponentProps<typeof PageHeader> = { title: '用户管理', description: '维护用户资料' }
|
|
33
|
+
* const component = mount(PageHeader, { target: document.body, props })
|
|
34
|
+
* await unmount(component)
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
24
37
|
interface Props {
|
|
25
38
|
title: string
|
|
26
39
|
description?: string
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { DataAttributes } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* PageHeader 组件的属性契约;通过公开组件配置使用。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { mount, unmount } from 'svelte'
|
|
9
|
+
* import type { ComponentProps } from 'svelte'
|
|
10
|
+
* import { PageHeader } from '@h-ai/ui'
|
|
11
|
+
* const props: ComponentProps<typeof PageHeader> = { title: '用户管理', description: '维护用户资料' }
|
|
12
|
+
* const component = mount(PageHeader, { target: document.body, props })
|
|
13
|
+
* await unmount(component)
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
3
16
|
interface Props {
|
|
4
17
|
title: string;
|
|
5
18
|
description?: string;
|
|
@@ -16,14 +29,14 @@ type $$ComponentProps = Props & DataAttributes;
|
|
|
16
29
|
* @prop {Snippet} actions - 右侧操作按钮插槽
|
|
17
30
|
*
|
|
18
31
|
* @example
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { mount, unmount } from 'svelte'
|
|
34
|
+
* import type { ComponentProps } from 'svelte'
|
|
35
|
+
* import { PageHeader } from '@h-ai/ui'
|
|
36
|
+
* const props: ComponentProps<typeof PageHeader> = { title: '用户管理', description: '维护用户资料' }
|
|
37
|
+
* const component = mount(PageHeader, { target: document.body, props })
|
|
38
|
+
* await unmount(component)
|
|
39
|
+
* ```
|
|
27
40
|
*/
|
|
28
41
|
declare const PageHeader: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
29
42
|
type PageHeader = ReturnType<typeof PageHeader>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component Pagination
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - Pagination 组件
|
|
4
5
|
=============================================================================
|
|
@@ -6,6 +7,16 @@
|
|
|
6
7
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $derived, $bindable)
|
|
8
9
|
=============================================================================
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```ts
|
|
13
|
+
import { mount, unmount } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { Pagination } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof Pagination> = { page: 1, total: 42, pageSize: 10 }
|
|
17
|
+
const component = mount(Pagination, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes, PaginationProps } from '../../types.js'
|
|
@@ -35,6 +46,7 @@
|
|
|
35
46
|
}: PaginationProps & DataAttributes = $props()
|
|
36
47
|
|
|
37
48
|
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
49
|
+
const controlId = $props.id()
|
|
38
50
|
// labels 优先,缺省回退到内置消息 uiM(...)
|
|
39
51
|
|
|
40
52
|
// 计算总页数(至少 1 页,保证分页栏在空数据时仍可渲染)
|
|
@@ -51,7 +63,8 @@
|
|
|
51
63
|
: 'w-[2.5rem] shrink-0 [&>.fieldset]:m-0 [&>.fieldset]:min-w-0',
|
|
52
64
|
)
|
|
53
65
|
|
|
54
|
-
|
|
66
|
+
// 可写派生值保留编辑草稿,父级页码变化时自动恢复实际值。
|
|
67
|
+
let jumperValue = $derived(String(page))
|
|
55
68
|
|
|
56
69
|
function goToPage(p: number) {
|
|
57
70
|
const clamped = Math.max(1, Math.min(totalPages, Math.round(p)))
|
|
@@ -108,9 +121,10 @@
|
|
|
108
121
|
<div class={rowGapClass}>
|
|
109
122
|
{#if showSizeChanger}
|
|
110
123
|
<div class='flex items-center gap-2'>
|
|
111
|
-
<
|
|
124
|
+
<label for={`${controlId}-size`} class={tableTextClass}>{labels.rowsPerPage ?? uiM('pagination_rows_per_page')}</label>
|
|
112
125
|
<div class={sizeChangerClass}>
|
|
113
126
|
<Select
|
|
127
|
+
id={`${controlId}-size`}
|
|
114
128
|
size={controlSize}
|
|
115
129
|
value={String(pageSize)}
|
|
116
130
|
options={pageSizeSelectOptions}
|
|
@@ -121,23 +135,23 @@
|
|
|
121
135
|
{/if}
|
|
122
136
|
|
|
123
137
|
{#if showPageInfo}
|
|
124
|
-
<span class={tableTextClass}>{pageInfoText}</span>
|
|
138
|
+
<span class={tableTextClass} aria-live='polite' aria-atomic='true'>{pageInfoText}</span>
|
|
125
139
|
{/if}
|
|
126
140
|
|
|
127
|
-
<div class='flex items-center gap-1'>
|
|
141
|
+
<div class='hai-pagination__navigation flex items-center gap-1'>
|
|
128
142
|
{#if showFirstLast}
|
|
129
|
-
<BareButton class={navBtnClass} disabled={page === 1} onclick={() => goToPage(1)} ariaLabel='
|
|
143
|
+
<BareButton class={navBtnClass} disabled={page === 1} onclick={() => goToPage(1)} ariaLabel={uiM('pagination_first')}>
|
|
130
144
|
<span class={cn('icon-[tabler--chevrons-left]', navIconClass)}></span>
|
|
131
145
|
</BareButton>
|
|
132
146
|
{/if}
|
|
133
|
-
<BareButton class={navBtnClass} disabled={page === 1} onclick={() => goToPage(page - 1)} ariaLabel='
|
|
147
|
+
<BareButton class={navBtnClass} disabled={page === 1} onclick={() => goToPage(page - 1)} ariaLabel={uiM('pagination_previous')}>
|
|
134
148
|
<span class={cn('icon-[tabler--chevron-left]', navIconClass)}></span>
|
|
135
149
|
</BareButton>
|
|
136
|
-
<BareButton class={navBtnClass} disabled={page === totalPages} onclick={() => goToPage(page + 1)} ariaLabel='
|
|
150
|
+
<BareButton class={navBtnClass} disabled={page === totalPages} onclick={() => goToPage(page + 1)} ariaLabel={uiM('pagination_next')}>
|
|
137
151
|
<span class={cn('icon-[tabler--chevron-right]', navIconClass)}></span>
|
|
138
152
|
</BareButton>
|
|
139
153
|
{#if showFirstLast}
|
|
140
|
-
<BareButton class={navBtnClass} disabled={page === totalPages} onclick={() => goToPage(totalPages)} ariaLabel='
|
|
154
|
+
<BareButton class={navBtnClass} disabled={page === totalPages} onclick={() => goToPage(totalPages)} ariaLabel={uiM('pagination_last')}>
|
|
141
155
|
<span class={cn('icon-[tabler--chevrons-right]', navIconClass)}></span>
|
|
142
156
|
</BareButton>
|
|
143
157
|
{/if}
|
|
@@ -147,7 +161,9 @@
|
|
|
147
161
|
<div class={jumperWrapClass}>
|
|
148
162
|
<span class={tableTextClass}>{labels.jumpTo ?? uiM('pagination_jump_to')}</span>
|
|
149
163
|
<div class={jumperInputClass}>
|
|
164
|
+
<label for={`${controlId}-jump`} class='sr-only'>{uiM('pagination_jump_label')}</label>
|
|
150
165
|
<Input
|
|
166
|
+
id={`${controlId}-jump`}
|
|
151
167
|
type='number'
|
|
152
168
|
size={jumperControlSize}
|
|
153
169
|
class='h-7 w-full rounded-md [&_input]:px-1.5 [&_input]:text-center [&_input]:text-[12px]'
|
|
@@ -163,3 +179,13 @@
|
|
|
163
179
|
{/if}
|
|
164
180
|
</div>
|
|
165
181
|
</div>
|
|
182
|
+
|
|
183
|
+
<style>
|
|
184
|
+
/* 桌面保持紧凑;触摸设备扩大真实命中区域。 */
|
|
185
|
+
@media (pointer: coarse) {
|
|
186
|
+
.hai-pagination__navigation :global(button) {
|
|
187
|
+
min-width: var(--hai-touch-target-min, 44px);
|
|
188
|
+
min-height: var(--hai-touch-target-min, 44px);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
</style>
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes, PaginationProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = PaginationProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* Pagination
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - Pagination 组件
|
|
7
|
+
* =============================================================================
|
|
8
|
+
* 分页组件
|
|
9
|
+
*
|
|
10
|
+
* 使用 Svelte 5 Runes ($props, $derived, $bindable)
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { Pagination } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof Pagination> = { page: 1, total: 42, pageSize: 10 }
|
|
19
|
+
* const component = mount(Pagination, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
declare const Pagination: import("svelte").Component<$$ComponentProps, {}, "page">;
|
|
4
24
|
type Pagination = ReturnType<typeof Pagination>;
|
|
5
25
|
export default Pagination;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component Popover
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - Popover 组件
|
|
4
5
|
=============================================================================
|
|
@@ -6,6 +7,16 @@
|
|
|
6
7
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $state, $effect)
|
|
8
9
|
=============================================================================
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```ts
|
|
13
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { Popover } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof Popover> = { position: 'bottom', portal: true, children: createRawSnippet(() => ({ render: () => "<span>提示内容</span>" })) }
|
|
17
|
+
const component = mount(Popover, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes, PopoverProps } from '../../types.js'
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes, PopoverProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = PopoverProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* Popover
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - Popover 组件
|
|
7
|
+
* =============================================================================
|
|
8
|
+
* 弹出层组件
|
|
9
|
+
*
|
|
10
|
+
* 使用 Svelte 5 Runes ($props, $state, $effect)
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { Popover } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof Popover> = { position: 'bottom', portal: true, children: createRawSnippet(() => ({ render: () => "<span>提示内容</span>" })) }
|
|
19
|
+
* const component = mount(Popover, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
declare const Popover: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
4
24
|
type Popover = ReturnType<typeof Popover>;
|
|
5
25
|
export default Popover;
|
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component PullRefresh
|
|
2
3
|
@h-ai/ui — PullRefresh(下拉刷新)
|
|
3
4
|
|
|
4
5
|
用法:
|
|
5
6
|
<PullRefresh onrefresh={async () => await loadData()} >
|
|
6
7
|
<div>列表内容</div>
|
|
7
8
|
</PullRefresh>
|
|
9
|
+
|
|
10
|
+
@example
|
|
11
|
+
```ts
|
|
12
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
13
|
+
import type { ComponentProps } from 'svelte'
|
|
14
|
+
import { PullRefresh } from '@h-ai/ui'
|
|
15
|
+
const props: ComponentProps<typeof PullRefresh> = { threshold: 80, children: createRawSnippet(() => ({ render: () => "<p>可下拉更新的内容。</p>" })) }
|
|
16
|
+
const component = mount(PullRefresh, { target: document.body, props })
|
|
17
|
+
await unmount(component)
|
|
18
|
+
```
|
|
8
19
|
-->
|
|
9
20
|
<script lang='ts'>
|
|
10
21
|
import type { Snippet } from 'svelte'
|
|
11
22
|
import type { DataAttributes } from '../../types.js'
|
|
12
23
|
import { cn, getDataAttributes } from '../../utils.js'
|
|
13
24
|
|
|
25
|
+
/**
|
|
26
|
+
* PullRefresh 组件的属性契约;通过公开组件配置使用。
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
31
|
+
* import type { ComponentProps } from 'svelte'
|
|
32
|
+
* import { PullRefresh } from '@h-ai/ui'
|
|
33
|
+
* const props: ComponentProps<typeof PullRefresh> = { threshold: 80, children: createRawSnippet(() => ({ render: () => "<p>可下拉更新的内容。</p>" })) }
|
|
34
|
+
* const component = mount(PullRefresh, { target: document.body, props })
|
|
35
|
+
* await unmount(component)
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
14
38
|
interface Props {
|
|
15
39
|
/** 刷新回调(需返回 Promise) */
|
|
16
40
|
onrefresh?: () => Promise<void>
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { DataAttributes } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* PullRefresh 组件的属性契约;通过公开组件配置使用。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
9
|
+
* import type { ComponentProps } from 'svelte'
|
|
10
|
+
* import { PullRefresh } from '@h-ai/ui'
|
|
11
|
+
* const props: ComponentProps<typeof PullRefresh> = { threshold: 80, children: createRawSnippet(() => ({ render: () => "<p>可下拉更新的内容。</p>" })) }
|
|
12
|
+
* const component = mount(PullRefresh, { target: document.body, props })
|
|
13
|
+
* await unmount(component)
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
3
16
|
interface Props {
|
|
4
17
|
/** 刷新回调(需返回 Promise) */
|
|
5
18
|
onrefresh?: () => Promise<void>;
|
|
@@ -13,6 +26,25 @@ interface Props {
|
|
|
13
26
|
children: Snippet;
|
|
14
27
|
}
|
|
15
28
|
type $$ComponentProps = Props & DataAttributes;
|
|
29
|
+
/**
|
|
30
|
+
* PullRefresh
|
|
31
|
+
* @h-ai/ui — PullRefresh(下拉刷新)
|
|
32
|
+
*
|
|
33
|
+
* 用法:
|
|
34
|
+
* <PullRefresh onrefresh={async () => await loadData()} >
|
|
35
|
+
* <div>列表内容</div>
|
|
36
|
+
* </PullRefresh>
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
41
|
+
* import type { ComponentProps } from 'svelte'
|
|
42
|
+
* import { PullRefresh } from '@h-ai/ui'
|
|
43
|
+
* const props: ComponentProps<typeof PullRefresh> = { threshold: 80, children: createRawSnippet(() => ({ render: () => "<p>可下拉更新的内容。</p>" })) }
|
|
44
|
+
* const component = mount(PullRefresh, { target: document.body, props })
|
|
45
|
+
* await unmount(component)
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
16
48
|
declare const PullRefresh: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
17
49
|
type PullRefresh = ReturnType<typeof PullRefresh>;
|
|
18
50
|
export default PullRefresh;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component Result
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - Result 组件
|
|
4
5
|
=============================================================================
|
|
@@ -6,6 +7,16 @@
|
|
|
6
7
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $derived)
|
|
8
9
|
=============================================================================
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```ts
|
|
13
|
+
import { mount, unmount } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { Result } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof Result> = { status: 'success', title: '提交完成' }
|
|
17
|
+
const component = mount(Result, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes, ResultProps } from '../../types.js'
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes, ResultProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = ResultProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* Result
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - Result 组件
|
|
7
|
+
* =============================================================================
|
|
8
|
+
* 结果页展示组件,用于操作反馈
|
|
9
|
+
*
|
|
10
|
+
* 使用 Svelte 5 Runes ($props, $derived)
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { Result } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof Result> = { status: 'success', title: '提交完成' }
|
|
19
|
+
* const component = mount(Result, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
declare const Result: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
4
24
|
type Result = ReturnType<typeof Result>;
|
|
5
25
|
export default Result;
|
|
@@ -1,16 +1,40 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component SafeArea
|
|
2
3
|
@h-ai/ui — SafeArea(安全区域包裹组件)
|
|
3
4
|
|
|
4
5
|
用法:
|
|
5
6
|
<SafeArea position="top">
|
|
6
7
|
<AppBar />
|
|
7
8
|
</SafeArea>
|
|
9
|
+
|
|
10
|
+
@example
|
|
11
|
+
```ts
|
|
12
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
13
|
+
import type { ComponentProps } from 'svelte'
|
|
14
|
+
import { SafeArea } from '@h-ai/ui'
|
|
15
|
+
const props: ComponentProps<typeof SafeArea> = { position: 'all', children: createRawSnippet(() => ({ render: () => "<main>页面内容</main>" })) }
|
|
16
|
+
const component = mount(SafeArea, { target: document.body, props })
|
|
17
|
+
await unmount(component)
|
|
18
|
+
```
|
|
8
19
|
-->
|
|
9
20
|
<script lang='ts'>
|
|
10
21
|
import type { Snippet } from 'svelte'
|
|
11
22
|
import type { DataAttributes } from '../../types.js'
|
|
12
23
|
import { cn, getDataAttributes } from '../../utils.js'
|
|
13
24
|
|
|
25
|
+
/**
|
|
26
|
+
* SafeArea 组件的属性契约;通过公开组件配置使用。
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
31
|
+
* import type { ComponentProps } from 'svelte'
|
|
32
|
+
* import { SafeArea } from '@h-ai/ui'
|
|
33
|
+
* const props: ComponentProps<typeof SafeArea> = { position: 'all', children: createRawSnippet(() => ({ render: () => "<main>页面内容</main>" })) }
|
|
34
|
+
* const component = mount(SafeArea, { target: document.body, props })
|
|
35
|
+
* await unmount(component)
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
14
38
|
interface Props {
|
|
15
39
|
/** 安全区域位置 */
|
|
16
40
|
position?: 'top' | 'bottom' | 'all'
|