@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
|
@@ -16,19 +16,15 @@
|
|
|
16
16
|
@prop {'normal' | 'compact'} density - 显示密度,compact 为紧凑布局
|
|
17
17
|
|
|
18
18
|
@example
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
{#snippet actions(item)}
|
|
29
|
-
<Button size="xs" onclick={() => edit(item)}>编辑</Button>
|
|
30
|
-
{/snippet}
|
|
31
|
-
</DataTable>
|
|
19
|
+
```ts
|
|
20
|
+
import { mount, unmount } from 'svelte'
|
|
21
|
+
import type { ComponentProps } from 'svelte'
|
|
22
|
+
import { DataTable } from '@h-ai/ui'
|
|
23
|
+
const Table = DataTable<{ id: string, name: string }>
|
|
24
|
+
const props: ComponentProps<typeof Table> = { data: [{ id: 'u1', name: 'Ada' }], keyField: 'id', columns: [{ key: 'name', label: '姓名', sortable: true }] }
|
|
25
|
+
const component = mount(Table, { target: document.body, props })
|
|
26
|
+
await unmount(component)
|
|
27
|
+
```
|
|
32
28
|
-->
|
|
33
29
|
<script lang='ts' generics='T'>
|
|
34
30
|
import type { Snippet } from 'svelte'
|
|
@@ -78,7 +74,20 @@
|
|
|
78
74
|
|
|
79
75
|
/** 透传到根节点的 data-* 属性。 */
|
|
80
76
|
const dataAttributes = $derived(getDataAttributes(restProps))
|
|
81
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* DataTable 内部使用的列定义。
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```ts
|
|
82
|
+
* import { mount, unmount } from 'svelte'
|
|
83
|
+
* import type { ComponentProps } from 'svelte'
|
|
84
|
+
* import { DataTable } from '@h-ai/ui'
|
|
85
|
+
* const Table = DataTable<{ id: string, name: string }>
|
|
86
|
+
* const props: ComponentProps<typeof Table> = { data: [{ id: 'u1', name: 'Ada' }], keyField: 'id', columns: [{ key: 'name', label: '姓名', sortable: true }] }
|
|
87
|
+
* const component = mount(Table, { target: document.body, props })
|
|
88
|
+
* await unmount(component)
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
82
91
|
type Column = {
|
|
83
92
|
/** 列对应的数据字段。 */
|
|
84
93
|
key: keyof T | string
|
|
@@ -287,12 +296,14 @@
|
|
|
287
296
|
</script>
|
|
288
297
|
|
|
289
298
|
<div {...dataAttributes} bind:this={scrollContainer} class='overflow-x-auto {className}' onscroll={syncActionColumnShadow}>
|
|
290
|
-
<table bind:this={tableElement} class={tableClass}>
|
|
299
|
+
<table bind:this={tableElement} class={tableClass} aria-busy={loading}>
|
|
291
300
|
<thead>
|
|
292
301
|
<tr class={headerRowClass}>
|
|
293
302
|
{#each columns as col (String(col.key))}
|
|
294
303
|
{@const isSorted = activeSortKey === String(col.key)}
|
|
295
304
|
<th
|
|
305
|
+
scope='col'
|
|
306
|
+
aria-sort={col.sortable ? (isSorted ? (activeSortDir === 'asc' ? 'ascending' : 'descending') : 'none') : undefined}
|
|
296
307
|
style={getColumnStyle(col)}
|
|
297
308
|
class='{getAlignClass(col.align)} {headerCellDividerClass} relative font-medium'
|
|
298
309
|
>
|
|
@@ -326,7 +337,10 @@
|
|
|
326
337
|
{#if loading}
|
|
327
338
|
<tr>
|
|
328
339
|
<td colspan={columns.length + (actions ? 1 : 0)} class={placeholderCellClass}>
|
|
329
|
-
<span class='
|
|
340
|
+
<span role='status' class='inline-flex items-center gap-2'>
|
|
341
|
+
<span class='loading loading-spinner loading-sm' aria-hidden='true'></span>
|
|
342
|
+
<span>{uiM('common_loading')}</span>
|
|
343
|
+
</span>
|
|
330
344
|
</td>
|
|
331
345
|
</tr>
|
|
332
346
|
{:else if data.length === 0}
|
|
@@ -341,7 +355,16 @@
|
|
|
341
355
|
</tr>
|
|
342
356
|
{:else}
|
|
343
357
|
{#each sortedData as item (item[keyField])}
|
|
344
|
-
<tr class='{rowClass} {onrowclick ? 'cursor-pointer' : ''}'
|
|
358
|
+
<tr class='{rowClass} {onrowclick ? 'cursor-pointer focus-visible:outline-2 focus-visible:outline-primary focus-visible:-outline-offset-2' : ''}'
|
|
359
|
+
tabindex={onrowclick ? 0 : undefined}
|
|
360
|
+
onclick={() => onrowclick?.(item)}
|
|
361
|
+
onkeydown={(event) => {
|
|
362
|
+
if (onrowclick && event.target === event.currentTarget && (event.key === 'Enter' || event.key === ' ')) {
|
|
363
|
+
event.preventDefault()
|
|
364
|
+
onrowclick(item)
|
|
365
|
+
}
|
|
366
|
+
}}
|
|
367
|
+
>
|
|
345
368
|
{#each columns as col (String(col.key))}
|
|
346
369
|
<td style={getColumnStyle(col)} class={getAlignClass(col.align)}>
|
|
347
370
|
{#if col.onclick}
|
|
@@ -68,19 +68,15 @@ interface $$IsomorphicComponent {
|
|
|
68
68
|
* @prop {'normal' | 'compact'} density - 显示密度,compact 为紧凑布局
|
|
69
69
|
*
|
|
70
70
|
* @example
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* {#snippet actions(item)}
|
|
81
|
-
* <Button size="xs" onclick={() => edit(item)}>编辑</Button>
|
|
82
|
-
* {/snippet}
|
|
83
|
-
* </DataTable>
|
|
71
|
+
* ```ts
|
|
72
|
+
* import { mount, unmount } from 'svelte'
|
|
73
|
+
* import type { ComponentProps } from 'svelte'
|
|
74
|
+
* import { DataTable } from '@h-ai/ui'
|
|
75
|
+
* const Table = DataTable<{ id: string, name: string }>
|
|
76
|
+
* const props: ComponentProps<typeof Table> = { data: [{ id: 'u1', name: 'Ada' }], keyField: 'id', columns: [{ key: 'name', label: '姓名', sortable: true }] }
|
|
77
|
+
* const component = mount(Table, { target: document.body, props })
|
|
78
|
+
* await unmount(component)
|
|
79
|
+
* ```
|
|
84
80
|
*/
|
|
85
81
|
declare const DataTable: $$IsomorphicComponent;
|
|
86
82
|
type DataTable<T> = InstanceType<typeof DataTable<T>>;
|
|
@@ -13,12 +13,13 @@
|
|
|
13
13
|
@prop {function} onchange - 日期变更回调
|
|
14
14
|
|
|
15
15
|
@example
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
```ts
|
|
17
|
+
import { mount, unmount } from 'svelte'
|
|
18
|
+
import type { ComponentProps } from 'svelte'
|
|
19
|
+
import { DatePicker } from '@h-ai/ui'
|
|
20
|
+
const props: ComponentProps<typeof DatePicker> = { weekStartsOn: 1, size: 'md' }
|
|
21
|
+
const component = mount(DatePicker, { target: document.body, props })
|
|
22
|
+
await unmount(component)
|
|
22
23
|
```
|
|
23
24
|
-->
|
|
24
25
|
<script lang='ts'>
|
|
@@ -30,6 +31,19 @@
|
|
|
30
31
|
import { cn, getDataAttributes } from '../../utils.js'
|
|
31
32
|
import { getFormControlSizeClasses } from '../control-size.js'
|
|
32
33
|
|
|
34
|
+
/**
|
|
35
|
+
* DatePicker 组件的属性契约;通过公开组件配置使用。
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* import { mount, unmount } from 'svelte'
|
|
40
|
+
* import type { ComponentProps } from 'svelte'
|
|
41
|
+
* import { DatePicker } from '@h-ai/ui'
|
|
42
|
+
* const props: ComponentProps<typeof DatePicker> = { weekStartsOn: 1, size: 'md' }
|
|
43
|
+
* const component = mount(DatePicker, { target: document.body, props })
|
|
44
|
+
* await unmount(component)
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
33
47
|
interface Props {
|
|
34
48
|
/** 选中日期(双向绑定) */
|
|
35
49
|
value?: DateValue
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { DateValue } from '@internationalized/date';
|
|
2
2
|
import type { DataAttributes, FormText, Size } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* DatePicker 组件的属性契约;通过公开组件配置使用。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { mount, unmount } from 'svelte'
|
|
9
|
+
* import type { ComponentProps } from 'svelte'
|
|
10
|
+
* import { DatePicker } from '@h-ai/ui'
|
|
11
|
+
* const props: ComponentProps<typeof DatePicker> = { weekStartsOn: 1, size: 'md' }
|
|
12
|
+
* const component = mount(DatePicker, { target: document.body, props })
|
|
13
|
+
* await unmount(component)
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
3
16
|
interface Props {
|
|
4
17
|
/** 选中日期(双向绑定) */
|
|
5
18
|
value?: DateValue;
|
|
@@ -38,12 +51,13 @@ type $$ComponentProps = Props & DataAttributes;
|
|
|
38
51
|
* @prop {function} onchange - 日期变更回调
|
|
39
52
|
*
|
|
40
53
|
* @example
|
|
41
|
-
* ```
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
54
|
+
* ```ts
|
|
55
|
+
* import { mount, unmount } from 'svelte'
|
|
56
|
+
* import type { ComponentProps } from 'svelte'
|
|
57
|
+
* import { DatePicker } from '@h-ai/ui'
|
|
58
|
+
* const props: ComponentProps<typeof DatePicker> = { weekStartsOn: 1, size: 'md' }
|
|
59
|
+
* const component = mount(DatePicker, { target: document.body, props })
|
|
60
|
+
* await unmount(component)
|
|
47
61
|
* ```
|
|
48
62
|
*/
|
|
49
63
|
declare const DatePicker: import("svelte").Component<$$ComponentProps, {}, "value">;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component Drawer
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - Drawer 组件
|
|
4
5
|
=============================================================================
|
|
@@ -7,6 +8,16 @@
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $derived, $effect, $bindable)
|
|
8
9
|
使用 primitives 组件:IconButton
|
|
9
10
|
=============================================================================
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
```ts
|
|
14
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
15
|
+
import type { ComponentProps } from 'svelte'
|
|
16
|
+
import { Drawer } from '@h-ai/ui'
|
|
17
|
+
const props: ComponentProps<typeof Drawer> = { open: true, title: '详情', position: 'right', width: '28rem', children: createRawSnippet(() => ({ render: () => "<span>详情内容</span>" })) }
|
|
18
|
+
const component = mount(Drawer, { target: document.body, props })
|
|
19
|
+
await unmount(component)
|
|
20
|
+
```
|
|
10
21
|
-->
|
|
11
22
|
<script lang='ts'>
|
|
12
23
|
import type { DataAttributes, DrawerProps } from '../../types.js'
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import type { DataAttributes, DrawerProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = DrawerProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* Drawer
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - Drawer 组件
|
|
7
|
+
* =============================================================================
|
|
8
|
+
* 抽屉组件
|
|
9
|
+
*
|
|
10
|
+
* 使用 Svelte 5 Runes ($props, $derived, $effect, $bindable)
|
|
11
|
+
* 使用 primitives 组件:IconButton
|
|
12
|
+
* =============================================================================
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
17
|
+
* import type { ComponentProps } from 'svelte'
|
|
18
|
+
* import { Drawer } from '@h-ai/ui'
|
|
19
|
+
* const props: ComponentProps<typeof Drawer> = { open: true, title: '详情', position: 'right', width: '28rem', children: createRawSnippet(() => ({ render: () => "<span>详情内容</span>" })) }
|
|
20
|
+
* const component = mount(Drawer, { target: document.body, props })
|
|
21
|
+
* await unmount(component)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
3
24
|
declare const Drawer: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
4
25
|
type Drawer = ReturnType<typeof Drawer>;
|
|
5
26
|
export default Drawer;
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Dropdown
|
|
3
3
|
下拉菜单组件,支持 click/hover 触发。
|
|
4
|
+
|
|
5
|
+
@example
|
|
6
|
+
```ts
|
|
7
|
+
import { mount, unmount } from 'svelte'
|
|
8
|
+
import type { ComponentProps } from 'svelte'
|
|
9
|
+
import { Dropdown } from '@h-ai/ui'
|
|
10
|
+
const props: ComponentProps<typeof Dropdown> = { items: [{ key: 'edit', label: '编辑' }], position: 'bottom' }
|
|
11
|
+
const component = mount(Dropdown, { target: document.body, props })
|
|
12
|
+
await unmount(component)
|
|
13
|
+
```
|
|
4
14
|
-->
|
|
5
15
|
<script lang='ts'>
|
|
6
16
|
import type { DataAttributes, DropdownProps } from '../../types.js'
|
|
@@ -3,6 +3,16 @@ type $$ComponentProps = DropdownProps & DataAttributes;
|
|
|
3
3
|
/**
|
|
4
4
|
* Dropdown
|
|
5
5
|
* 下拉菜单组件,支持 click/hover 触发。
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { mount, unmount } from 'svelte'
|
|
10
|
+
* import type { ComponentProps } from 'svelte'
|
|
11
|
+
* import { Dropdown } from '@h-ai/ui'
|
|
12
|
+
* const props: ComponentProps<typeof Dropdown> = { items: [{ key: 'edit', label: '编辑' }], position: 'bottom' }
|
|
13
|
+
* const component = mount(Dropdown, { target: document.body, props })
|
|
14
|
+
* await unmount(component)
|
|
15
|
+
* ```
|
|
6
16
|
*/
|
|
7
17
|
declare const Dropdown: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
18
|
type Dropdown = ReturnType<typeof Dropdown>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component Empty
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - Empty 组件
|
|
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 { Empty } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof Empty> = { title: '暂无记录', icon: 'inbox' }
|
|
17
|
+
const component = mount(Empty, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes, EmptyProps } from '../../types.js'
|
|
@@ -28,7 +39,7 @@
|
|
|
28
39
|
|
|
29
40
|
const containerClass = $derived(
|
|
30
41
|
cn(
|
|
31
|
-
'flex flex-col items-center justify-center py-8 text-center',
|
|
42
|
+
'flex min-w-0 flex-col items-center justify-center px-4 py-8 text-center',
|
|
32
43
|
size === 'sm' && 'py-4',
|
|
33
44
|
size === 'lg' && 'py-12',
|
|
34
45
|
className,
|
|
@@ -46,7 +57,7 @@
|
|
|
46
57
|
|
|
47
58
|
<div {...dataAttributes} class={containerClass}>
|
|
48
59
|
<!-- 图标区域 -->
|
|
49
|
-
<div class='text-base-content/
|
|
60
|
+
<div class='text-base-content/40 mb-4 shrink-0 {iconSize}' aria-hidden='true'>
|
|
50
61
|
{#if children}
|
|
51
62
|
{@render children()}
|
|
52
63
|
{:else if icon === 'inbox'}
|
|
@@ -69,16 +80,16 @@
|
|
|
69
80
|
</div>
|
|
70
81
|
|
|
71
82
|
<!-- 标题 -->
|
|
72
|
-
<h3 class='font-medium text-base-content/
|
|
83
|
+
<h3 class='max-w-full font-medium text-base-content/80 [overflow-wrap:anywhere] {titleSize}'>{displayTitle}</h3>
|
|
73
84
|
|
|
74
85
|
<!-- 描述 -->
|
|
75
86
|
{#if description}
|
|
76
|
-
<p class='mt-
|
|
87
|
+
<p class='mt-2 max-w-prose text-sm text-base-content/70 leading-relaxed [overflow-wrap:anywhere]'>{description}</p>
|
|
77
88
|
{/if}
|
|
78
89
|
|
|
79
90
|
<!-- 操作按钮插槽 -->
|
|
80
91
|
{#if action}
|
|
81
|
-
<div class='mt-
|
|
92
|
+
<div class='mt-5 flex max-w-full flex-wrap justify-center gap-2'>
|
|
82
93
|
{@render action()}
|
|
83
94
|
</div>
|
|
84
95
|
{/if}
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes, EmptyProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = EmptyProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* Empty
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - Empty 组件
|
|
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 { Empty } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof Empty> = { title: '暂无记录', icon: 'inbox' }
|
|
19
|
+
* const component = mount(Empty, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
declare const Empty: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
4
24
|
type Empty = ReturnType<typeof Empty>;
|
|
5
25
|
export default Empty;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component Form
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - Form 组件
|
|
4
5
|
=============================================================================
|
|
@@ -6,6 +7,16 @@
|
|
|
6
7
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $state)
|
|
8
9
|
=============================================================================
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```ts
|
|
13
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { Form } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof Form> = { id: 'profile-form', columns: 2, children: createRawSnippet(() => ({ render: () => "<input name=\"email\" type=\"email\" value=\"ada@example.com\" />" })) }
|
|
17
|
+
const component = mount(Form, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes, FormProps } from '../../types.js'
|
|
@@ -73,12 +84,36 @@
|
|
|
73
84
|
onreset?.()
|
|
74
85
|
}
|
|
75
86
|
|
|
76
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* 重置表单
|
|
89
|
+
* @returns 无返回值;调用原生 form.reset()。
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* import { mount, unmount } from 'svelte'
|
|
94
|
+
* import { Form } from '@h-ai/ui'
|
|
95
|
+
* const form = mount(Form, { target: document.body, props: { id: 'profile' } })
|
|
96
|
+
* form.reset()
|
|
97
|
+
* await unmount(form)
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
77
100
|
export function reset() {
|
|
78
101
|
formElement?.reset()
|
|
79
102
|
}
|
|
80
103
|
|
|
81
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* 获取表单数据
|
|
106
|
+
* @returns 当前 form 的字段值记录。
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```ts
|
|
110
|
+
* import { mount, unmount } from 'svelte'
|
|
111
|
+
* import { Form } from '@h-ai/ui'
|
|
112
|
+
* const form = mount(Form, { target: document.body, props: { id: 'profile' } })
|
|
113
|
+
* const data = form.getData()
|
|
114
|
+
* await unmount(form)
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
82
117
|
export function getData(): Record<string, unknown> {
|
|
83
118
|
const formData = new FormData(formElement)
|
|
84
119
|
const data: Record<string, unknown> = {}
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes, FormProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = FormProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* Form
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - Form 组件
|
|
7
|
+
* =============================================================================
|
|
8
|
+
* 表单容器组件,提供统一的表单提交、验证和重置功能
|
|
9
|
+
*
|
|
10
|
+
* 使用 Svelte 5 Runes ($props, $state)
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { Form } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof Form> = { id: 'profile-form', columns: 2, children: createRawSnippet(() => ({ render: () => "<input name=\"email\" type=\"email\" value=\"ada@example.com\" />" })) }
|
|
19
|
+
* const component = mount(Form, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
declare const Form: import("svelte").Component<$$ComponentProps, {
|
|
4
24
|
reset: () => void;
|
|
5
25
|
getData: () => Record<string, unknown>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component FormField
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - FormField 组件
|
|
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, createRawSnippet } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { FormField } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof FormField> = { label: '邮箱', name: 'email', required: true, children: createRawSnippet(() => ({ render: () => "<input name=\"email\" type=\"email\" />" })) }
|
|
17
|
+
const component = mount(FormField, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes, FormFieldProps } from '../../types.js'
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
import type { DataAttributes, FormFieldProps } from '../../types.js';
|
|
2
2
|
type $$ComponentProps = FormFieldProps & DataAttributes;
|
|
3
|
+
/**
|
|
4
|
+
* FormField
|
|
5
|
+
* =============================================================================
|
|
6
|
+
* @h-ai/ui - FormField 组件
|
|
7
|
+
* =============================================================================
|
|
8
|
+
* 表单字段包装器,统一 label/error/hint 展示
|
|
9
|
+
*
|
|
10
|
+
* 使用 Svelte 5 Runes ($props, $derived)
|
|
11
|
+
* =============================================================================
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
16
|
+
* import type { ComponentProps } from 'svelte'
|
|
17
|
+
* import { FormField } from '@h-ai/ui'
|
|
18
|
+
* const props: ComponentProps<typeof FormField> = { label: '邮箱', name: 'email', required: true, children: createRawSnippet(() => ({ render: () => "<input name=\"email\" type=\"email\" />" })) }
|
|
19
|
+
* const component = mount(FormField, { target: document.body, props })
|
|
20
|
+
* await unmount(component)
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
3
23
|
declare const FormField: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
4
24
|
type FormField = ReturnType<typeof FormField>;
|
|
5
25
|
export default FormField;
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
<!--
|
|
1
|
+
<!--
|
|
2
|
+
@component FormLayout 表单字段布局,供 Form 和原生表单/场景组件共同复用。
|
|
3
|
+
|
|
4
|
+
@example
|
|
5
|
+
```ts
|
|
6
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
7
|
+
import type { ComponentProps } from 'svelte'
|
|
8
|
+
import { FormLayout } from '@h-ai/ui'
|
|
9
|
+
const props: ComponentProps<typeof FormLayout> = { columns: 2, labelPosition: 'top', children: createRawSnippet(() => ({ render: () => "<span>表单字段</span>" })) }
|
|
10
|
+
const component = mount(FormLayout, { target: document.body, props })
|
|
11
|
+
await unmount(component)
|
|
12
|
+
```
|
|
13
|
+
-->
|
|
2
14
|
<script lang='ts'>
|
|
3
15
|
import type { FormLayoutProps } from '../../types.js'
|
|
4
16
|
import { setContext } from 'svelte'
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
import type { FormLayoutProps } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* FormLayout 表单字段布局,供 Form 和原生表单/场景组件共同复用。
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
8
|
+
* import type { ComponentProps } from 'svelte'
|
|
9
|
+
* import { FormLayout } from '@h-ai/ui'
|
|
10
|
+
* const props: ComponentProps<typeof FormLayout> = { columns: 2, labelPosition: 'top', children: createRawSnippet(() => ({ render: () => "<span>表单字段</span>" })) }
|
|
11
|
+
* const component = mount(FormLayout, { target: document.body, props })
|
|
12
|
+
* await unmount(component)
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
2
15
|
declare const FormLayout: import("svelte").Component<FormLayoutProps, {}, "">;
|
|
3
16
|
type FormLayout = ReturnType<typeof FormLayout>;
|
|
4
17
|
export default FormLayout;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component InfiniteScroll
|
|
2
3
|
@h-ai/ui — InfiniteScroll(无限滚动 / 上拉加载更多)
|
|
3
4
|
|
|
4
5
|
用法:
|
|
@@ -7,12 +8,35 @@
|
|
|
7
8
|
<div>{item.name}</div>
|
|
8
9
|
{/each}
|
|
9
10
|
</InfiniteScroll>
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
```ts
|
|
14
|
+
import { mount, unmount, createRawSnippet } from 'svelte'
|
|
15
|
+
import type { ComponentProps } from 'svelte'
|
|
16
|
+
import { InfiniteScroll } from '@h-ai/ui'
|
|
17
|
+
const props: ComponentProps<typeof InfiniteScroll> = { hasMore: false, children: createRawSnippet(() => ({ render: () => "<p>已经加载全部记录。</p>" })) }
|
|
18
|
+
const component = mount(InfiniteScroll, { target: document.body, props })
|
|
19
|
+
await unmount(component)
|
|
20
|
+
```
|
|
10
21
|
-->
|
|
11
22
|
<script lang='ts'>
|
|
12
23
|
import type { Snippet } from 'svelte'
|
|
13
24
|
import type { DataAttributes } from '../../types.js'
|
|
14
25
|
import { cn, getDataAttributes } from '../../utils.js'
|
|
15
26
|
|
|
27
|
+
/**
|
|
28
|
+
* InfiniteScroll 组件的属性契约;通过公开组件配置使用。
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```ts
|
|
32
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
33
|
+
* import type { ComponentProps } from 'svelte'
|
|
34
|
+
* import { InfiniteScroll } from '@h-ai/ui'
|
|
35
|
+
* const props: ComponentProps<typeof InfiniteScroll> = { hasMore: false, children: createRawSnippet(() => ({ render: () => "<p>已经加载全部记录。</p>" })) }
|
|
36
|
+
* const component = mount(InfiniteScroll, { target: document.body, props })
|
|
37
|
+
* await unmount(component)
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
16
40
|
interface Props {
|
|
17
41
|
/** 加载更多回调 */
|
|
18
42
|
onloadmore?: () => Promise<void>
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { DataAttributes } from '../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* InfiniteScroll 组件的属性契约;通过公开组件配置使用。
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
9
|
+
* import type { ComponentProps } from 'svelte'
|
|
10
|
+
* import { InfiniteScroll } from '@h-ai/ui'
|
|
11
|
+
* const props: ComponentProps<typeof InfiniteScroll> = { hasMore: false, children: createRawSnippet(() => ({ render: () => "<p>已经加载全部记录。</p>" })) }
|
|
12
|
+
* const component = mount(InfiniteScroll, { target: document.body, props })
|
|
13
|
+
* await unmount(component)
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
3
16
|
interface Props {
|
|
4
17
|
/** 加载更多回调 */
|
|
5
18
|
onloadmore?: () => Promise<void>;
|
|
@@ -19,6 +32,27 @@ interface Props {
|
|
|
19
32
|
children: Snippet;
|
|
20
33
|
}
|
|
21
34
|
type $$ComponentProps = Props & DataAttributes;
|
|
35
|
+
/**
|
|
36
|
+
* InfiniteScroll
|
|
37
|
+
* @h-ai/ui — InfiniteScroll(无限滚动 / 上拉加载更多)
|
|
38
|
+
*
|
|
39
|
+
* 用法:
|
|
40
|
+
* <InfiniteScroll onloadmore={async () => await loadNextPage()} hasMore={hasMoreData}>
|
|
41
|
+
* {#each items as item}
|
|
42
|
+
* <div>{item.name}</div>
|
|
43
|
+
* {/each}
|
|
44
|
+
* </InfiniteScroll>
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { mount, unmount, createRawSnippet } from 'svelte'
|
|
49
|
+
* import type { ComponentProps } from 'svelte'
|
|
50
|
+
* import { InfiniteScroll } from '@h-ai/ui'
|
|
51
|
+
* const props: ComponentProps<typeof InfiniteScroll> = { hasMore: false, children: createRawSnippet(() => ({ render: () => "<p>已经加载全部记录。</p>" })) }
|
|
52
|
+
* const component = mount(InfiniteScroll, { target: document.body, props })
|
|
53
|
+
* await unmount(component)
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
22
56
|
declare const InfiniteScroll: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
23
57
|
type InfiniteScroll = ReturnType<typeof InfiniteScroll>;
|
|
24
58
|
export default InfiniteScroll;
|