@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
|
@@ -9,11 +9,49 @@
|
|
|
9
9
|
* - 使用 NFKC 统一兼容字符
|
|
10
10
|
*/
|
|
11
11
|
import type { PasswordPolicy } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* 按约定进行 Unicode 归一化,保留用户密码的空白字符。
|
|
14
|
+
* @param value - 待处理或校验的值。
|
|
15
|
+
* @returns 按约定 Unicode 形式归一化的密码,保留空白字符。
|
|
16
|
+
*
|
|
17
|
+
* @example 模块内部上下文
|
|
18
|
+
* ```ts
|
|
19
|
+
* const normalized = normalizePassword('Abcd1234!')
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
12
22
|
export declare function normalizePassword(value: string): string;
|
|
13
23
|
/**
|
|
14
24
|
* 比较两次密码是否一致
|
|
25
|
+
* @param password - 用户输入的密码,不能持久化为 UI 偏好。
|
|
26
|
+
* @param confirmPassword - 再次输入的确认密码。
|
|
27
|
+
* @returns 归一化后两次密码输入是否一致。
|
|
28
|
+
*
|
|
29
|
+
* @example 模块内部上下文
|
|
30
|
+
* ```ts
|
|
31
|
+
* const same = arePasswordsEqual('Abcd1234!', 'Abcd1234!')
|
|
32
|
+
* ```
|
|
15
33
|
*/
|
|
16
34
|
export declare function arePasswordsEqual(password: string, confirmPassword: string): boolean;
|
|
17
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* 与 IAM 密码策略一致的前端提示;服务端仍执行最终校验。
|
|
37
|
+
* @param password - 用户输入的密码,不能持久化为 UI 偏好。
|
|
38
|
+
* @param policy - 服务端公开的密码策略。
|
|
39
|
+
* @returns 第一项未满足策略的提示,全部满足时为空字符串。
|
|
40
|
+
*
|
|
41
|
+
* @example 模块内部上下文
|
|
42
|
+
* ```ts
|
|
43
|
+
* const message = passwordPolicyError('Example-pass-42!', { minLength: 12, maxLength: 128, requireUppercase: true, requireLowercase: true, requireNumber: true, requireSpecialChar: true })
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
18
46
|
export declare function passwordPolicyError(password: string, policy: PasswordPolicy): string;
|
|
47
|
+
/**
|
|
48
|
+
* 按当前 UI 语言说明服务端公开的密码策略。
|
|
49
|
+
* @param policy - 服务端公开的密码策略。
|
|
50
|
+
* @returns 按当前 UI 语言拼接的密码策略说明。
|
|
51
|
+
*
|
|
52
|
+
* @example 模块内部上下文
|
|
53
|
+
* ```ts
|
|
54
|
+
* const hint = passwordPolicyHint({ minLength: 12, maxLength: 128, requireUppercase: true, requireLowercase: true, requireNumber: true, requireSpecialChar: true })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
19
57
|
export declare function passwordPolicyHint(policy: PasswordPolicy): string;
|
|
@@ -5,16 +5,44 @@
|
|
|
5
5
|
* @module password-utils
|
|
6
6
|
*/
|
|
7
7
|
import { uiM } from '../../../messages.js';
|
|
8
|
+
/**
|
|
9
|
+
* 按约定进行 Unicode 归一化,保留用户密码的空白字符。
|
|
10
|
+
* @param value - 待处理或校验的值。
|
|
11
|
+
* @returns 按约定 Unicode 形式归一化的密码,保留空白字符。
|
|
12
|
+
*
|
|
13
|
+
* @example 模块内部上下文
|
|
14
|
+
* ```ts
|
|
15
|
+
* const normalized = normalizePassword('Abcd1234!')
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
8
18
|
export function normalizePassword(value) {
|
|
9
19
|
return value.normalize('NFKC');
|
|
10
20
|
}
|
|
11
21
|
/**
|
|
12
22
|
* 比较两次密码是否一致
|
|
23
|
+
* @param password - 用户输入的密码,不能持久化为 UI 偏好。
|
|
24
|
+
* @param confirmPassword - 再次输入的确认密码。
|
|
25
|
+
* @returns 归一化后两次密码输入是否一致。
|
|
26
|
+
*
|
|
27
|
+
* @example 模块内部上下文
|
|
28
|
+
* ```ts
|
|
29
|
+
* const same = arePasswordsEqual('Abcd1234!', 'Abcd1234!')
|
|
30
|
+
* ```
|
|
13
31
|
*/
|
|
14
32
|
export function arePasswordsEqual(password, confirmPassword) {
|
|
15
33
|
return normalizePassword(password) === normalizePassword(confirmPassword);
|
|
16
34
|
}
|
|
17
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* 与 IAM 密码策略一致的前端提示;服务端仍执行最终校验。
|
|
37
|
+
* @param password - 用户输入的密码,不能持久化为 UI 偏好。
|
|
38
|
+
* @param policy - 服务端公开的密码策略。
|
|
39
|
+
* @returns 第一项未满足策略的提示,全部满足时为空字符串。
|
|
40
|
+
*
|
|
41
|
+
* @example 模块内部上下文
|
|
42
|
+
* ```ts
|
|
43
|
+
* const message = passwordPolicyError('Example-pass-42!', { minLength: 12, maxLength: 128, requireUppercase: true, requireLowercase: true, requireNumber: true, requireSpecialChar: true })
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
18
46
|
export function passwordPolicyError(password, policy) {
|
|
19
47
|
if (password.length < policy.minLength || password.length > policy.maxLength)
|
|
20
48
|
return uiM('password_policy_length', { min: policy.minLength, max: policy.maxLength });
|
|
@@ -28,6 +56,16 @@ export function passwordPolicyError(password, policy) {
|
|
|
28
56
|
return uiM('password_policy_special');
|
|
29
57
|
return '';
|
|
30
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* 按当前 UI 语言说明服务端公开的密码策略。
|
|
61
|
+
* @param policy - 服务端公开的密码策略。
|
|
62
|
+
* @returns 按当前 UI 语言拼接的密码策略说明。
|
|
63
|
+
*
|
|
64
|
+
* @example 模块内部上下文
|
|
65
|
+
* ```ts
|
|
66
|
+
* const hint = passwordPolicyHint({ minLength: 12, maxLength: 128, requireUppercase: true, requireLowercase: true, requireNumber: true, requireSpecialChar: true })
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
31
69
|
export function passwordPolicyHint(policy) {
|
|
32
70
|
const requirements = [uiM('password_policy_length', { min: policy.minLength, max: policy.maxLength })];
|
|
33
71
|
if (policy.requireUppercase)
|
|
@@ -6,20 +6,12 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```svelte
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* setPermissionContext(() =>
|
|
13
|
-
* </script>
|
|
14
|
-
*
|
|
15
|
-
* <!-- 子组件 -->
|
|
16
|
-
* <script>
|
|
17
|
-
* import { usePermission } from '@h-ai/ui'
|
|
18
|
-
* const { hasPerm, hasAnyPerm, hasAllPerms } = usePermission()
|
|
9
|
+
* <script lang="ts">
|
|
10
|
+
* import { setPermissionContext, PermGuard } from '@h-ai/ui'
|
|
11
|
+
* const permissions = ['user:create']
|
|
12
|
+
* setPermissionContext(() => permissions)
|
|
19
13
|
* </script>
|
|
20
|
-
*
|
|
21
|
-
* <button>新建用户</button>
|
|
22
|
-
* {/if}
|
|
14
|
+
* <PermGuard permission="user:create"><button type="button">新建用户</button></PermGuard>
|
|
23
15
|
* ```
|
|
24
16
|
*
|
|
25
17
|
* @module permission-context.svelte
|
|
@@ -35,9 +27,28 @@
|
|
|
35
27
|
* @param required - 需要检查的权限码
|
|
36
28
|
* @param userPermissions - 用户拥有的权限列表
|
|
37
29
|
* @returns 是否匹配
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { matchPermission } from '@h-ai/ui'
|
|
34
|
+
* const canRead = matchPermission('user:read', ['user:*'])
|
|
35
|
+
* const canDelete = matchPermission('user:delete', ['user:read'])
|
|
36
|
+
* ```
|
|
38
37
|
*/
|
|
39
38
|
export declare function matchPermission(required: string, userPermissions: string[]): boolean;
|
|
40
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* 权限上下文消费接口
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```svelte
|
|
44
|
+
* <script lang="ts">
|
|
45
|
+
* import { usePermission } from '@h-ai/ui'
|
|
46
|
+
* import type { PermissionContext } from '@h-ai/ui'
|
|
47
|
+
* const permission: PermissionContext = usePermission()
|
|
48
|
+
* </script>
|
|
49
|
+
* {#if permission.hasPerm('user:read')}<span>用户列表</span>{/if}
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
41
52
|
export interface PermissionContext {
|
|
42
53
|
/** 当前用户权限列表(响应式) */
|
|
43
54
|
readonly permissions: string[];
|
|
@@ -56,15 +67,16 @@ export interface PermissionContext {
|
|
|
56
67
|
* 以便权限变化时自动触发子组件更新。
|
|
57
68
|
*
|
|
58
69
|
* @param getPermissions - 返回当前用户权限列表的函数
|
|
70
|
+
* @returns {void} 无返回值;注册当前组件树的权限读取函数。
|
|
59
71
|
*
|
|
60
72
|
* @example
|
|
61
73
|
* ```svelte
|
|
62
|
-
* <script>
|
|
74
|
+
* <script lang="ts">
|
|
63
75
|
* import { setPermissionContext } from '@h-ai/ui'
|
|
64
|
-
* let
|
|
65
|
-
*
|
|
66
|
-
* setPermissionContext(() => userPermissions)
|
|
76
|
+
* let permissions = $state(['user:read'])
|
|
77
|
+
* setPermissionContext(() => permissions)
|
|
67
78
|
* </script>
|
|
79
|
+
* <main>在此渲染需要权限上下文的子组件。</main>
|
|
68
80
|
* ```
|
|
69
81
|
*/
|
|
70
82
|
export declare function setPermissionContext(getPermissions: () => string[]): void;
|
|
@@ -78,13 +90,11 @@ export declare function setPermissionContext(getPermissions: () => string[]): vo
|
|
|
78
90
|
*
|
|
79
91
|
* @example
|
|
80
92
|
* ```svelte
|
|
81
|
-
* <script>
|
|
93
|
+
* <script lang="ts">
|
|
82
94
|
* import { usePermission } from '@h-ai/ui'
|
|
83
|
-
* const
|
|
95
|
+
* const permission = usePermission()
|
|
84
96
|
* </script>
|
|
85
|
-
* {#if
|
|
86
|
-
* <button>创建角色</button>
|
|
87
|
-
* {/if}
|
|
97
|
+
* {#if permission.hasAnyPerm('user:read', 'user:update')}<span>用户管理</span>{/if}
|
|
88
98
|
* ```
|
|
89
99
|
*/
|
|
90
100
|
export declare function usePermission(): PermissionContext;
|
|
@@ -6,20 +6,12 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* ```svelte
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* setPermissionContext(() =>
|
|
13
|
-
* </script>
|
|
14
|
-
*
|
|
15
|
-
* <!-- 子组件 -->
|
|
16
|
-
* <script>
|
|
17
|
-
* import { usePermission } from '@h-ai/ui'
|
|
18
|
-
* const { hasPerm, hasAnyPerm, hasAllPerms } = usePermission()
|
|
9
|
+
* <script lang="ts">
|
|
10
|
+
* import { setPermissionContext, PermGuard } from '@h-ai/ui'
|
|
11
|
+
* const permissions = ['user:create']
|
|
12
|
+
* setPermissionContext(() => permissions)
|
|
19
13
|
* </script>
|
|
20
|
-
*
|
|
21
|
-
* <button>新建用户</button>
|
|
22
|
-
* {/if}
|
|
14
|
+
* <PermGuard permission="user:create"><button type="button">新建用户</button></PermGuard>
|
|
23
15
|
* ```
|
|
24
16
|
*
|
|
25
17
|
* @module permission-context.svelte
|
|
@@ -39,6 +31,13 @@ const PERMISSION_CONTEXT_KEY = Symbol('hai-permission-context');
|
|
|
39
31
|
* @param required - 需要检查的权限码
|
|
40
32
|
* @param userPermissions - 用户拥有的权限列表
|
|
41
33
|
* @returns 是否匹配
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import { matchPermission } from '@h-ai/ui'
|
|
38
|
+
* const canRead = matchPermission('user:read', ['user:*'])
|
|
39
|
+
* const canDelete = matchPermission('user:delete', ['user:read'])
|
|
40
|
+
* ```
|
|
42
41
|
*/
|
|
43
42
|
export function matchPermission(required, userPermissions) {
|
|
44
43
|
for (const userPerm of userPermissions) {
|
|
@@ -58,15 +57,16 @@ export function matchPermission(required, userPermissions) {
|
|
|
58
57
|
* 以便权限变化时自动触发子组件更新。
|
|
59
58
|
*
|
|
60
59
|
* @param getPermissions - 返回当前用户权限列表的函数
|
|
60
|
+
* @returns {void} 无返回值;注册当前组件树的权限读取函数。
|
|
61
61
|
*
|
|
62
62
|
* @example
|
|
63
63
|
* ```svelte
|
|
64
|
-
* <script>
|
|
64
|
+
* <script lang="ts">
|
|
65
65
|
* import { setPermissionContext } from '@h-ai/ui'
|
|
66
|
-
* let
|
|
67
|
-
*
|
|
68
|
-
* setPermissionContext(() => userPermissions)
|
|
66
|
+
* let permissions = $state(['user:read'])
|
|
67
|
+
* setPermissionContext(() => permissions)
|
|
69
68
|
* </script>
|
|
69
|
+
* <main>在此渲染需要权限上下文的子组件。</main>
|
|
70
70
|
* ```
|
|
71
71
|
*/
|
|
72
72
|
export function setPermissionContext(getPermissions) {
|
|
@@ -82,13 +82,11 @@ export function setPermissionContext(getPermissions) {
|
|
|
82
82
|
*
|
|
83
83
|
* @example
|
|
84
84
|
* ```svelte
|
|
85
|
-
* <script>
|
|
85
|
+
* <script lang="ts">
|
|
86
86
|
* import { usePermission } from '@h-ai/ui'
|
|
87
|
-
* const
|
|
87
|
+
* const permission = usePermission()
|
|
88
88
|
* </script>
|
|
89
|
-
* {#if
|
|
90
|
-
* <button>创建角色</button>
|
|
91
|
-
* {/if}
|
|
89
|
+
* {#if permission.hasAnyPerm('user:read', 'user:update')}<span>用户管理</span>{/if}
|
|
92
90
|
* ```
|
|
93
91
|
*/
|
|
94
92
|
export function usePermission() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component AvatarUpload
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - AvatarUpload 组件
|
|
4
5
|
=============================================================================
|
|
@@ -6,6 +7,16 @@
|
|
|
6
7
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $state, $derived)
|
|
8
9
|
=============================================================================
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```ts
|
|
13
|
+
import { mount, unmount } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { AvatarUpload } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof AvatarUpload> = { fallback: 'A', size: 'lg' }
|
|
17
|
+
const component = mount(AvatarUpload, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes } from '../../../types.js'
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
import type { DataAttributes } from '../../../types.js';
|
|
2
2
|
import type { AvatarUploadProps } from '../types.js';
|
|
3
3
|
type $$ComponentProps = AvatarUploadProps & DataAttributes;
|
|
4
|
+
/**
|
|
5
|
+
* AvatarUpload
|
|
6
|
+
* =============================================================================
|
|
7
|
+
* @h-ai/ui - AvatarUpload 组件
|
|
8
|
+
* =============================================================================
|
|
9
|
+
* 头像上传组件(圆形)
|
|
10
|
+
*
|
|
11
|
+
* 使用 Svelte 5 Runes ($props, $state, $derived)
|
|
12
|
+
* =============================================================================
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { mount, unmount } from 'svelte'
|
|
17
|
+
* import type { ComponentProps } from 'svelte'
|
|
18
|
+
* import { AvatarUpload } from '@h-ai/ui'
|
|
19
|
+
* const props: ComponentProps<typeof AvatarUpload> = { fallback: 'A', size: 'lg' }
|
|
20
|
+
* const component = mount(AvatarUpload, { target: document.body, props })
|
|
21
|
+
* await unmount(component)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
4
24
|
declare const AvatarUpload: import("svelte").Component<$$ComponentProps, {}, "value">;
|
|
5
25
|
type AvatarUpload = ReturnType<typeof AvatarUpload>;
|
|
6
26
|
export default AvatarUpload;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component FileList
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - FileList 组件
|
|
4
5
|
=============================================================================
|
|
@@ -6,11 +7,21 @@
|
|
|
6
7
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $state, $derived)
|
|
8
9
|
=============================================================================
|
|
10
|
+
|
|
11
|
+
@example
|
|
12
|
+
```ts
|
|
13
|
+
import { mount, unmount } from 'svelte'
|
|
14
|
+
import type { ComponentProps } from 'svelte'
|
|
15
|
+
import { FileList } from '@h-ai/ui'
|
|
16
|
+
const props: ComponentProps<typeof FileList> = { files: [{ id: 'f1', name: 'report.pdf', size: 1024, type: 'application/pdf' }], showSize: true }
|
|
17
|
+
const component = mount(FileList, { target: document.body, props })
|
|
18
|
+
await unmount(component)
|
|
19
|
+
```
|
|
9
20
|
-->
|
|
10
21
|
<script lang='ts'>
|
|
11
22
|
import type { DataAttributes } from '../../../types.js'
|
|
12
23
|
import type { FileItem, FileListProps } from '../types.js'
|
|
13
|
-
import { uiM } from '../../../messages.js'
|
|
24
|
+
import { getUILocale, uiM } from '../../../messages.js'
|
|
14
25
|
import { cn, getDataAttributes } from '../../../utils.js'
|
|
15
26
|
import Button from '../../primitives/Button.svelte'
|
|
16
27
|
import IconButton from '../../primitives/IconButton.svelte'
|
|
@@ -56,7 +67,7 @@
|
|
|
56
67
|
// 格式化日期
|
|
57
68
|
function formatDate(date: Date | string): string {
|
|
58
69
|
const d = typeof date === 'string' ? new Date(date) : date
|
|
59
|
-
return d.toLocaleDateString(
|
|
70
|
+
return d.toLocaleDateString(getUILocale(), {
|
|
60
71
|
year: 'numeric',
|
|
61
72
|
month: '2-digit',
|
|
62
73
|
day: '2-digit',
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
import type { DataAttributes } from '../../../types.js';
|
|
2
2
|
import type { FileListProps } from '../types.js';
|
|
3
3
|
type $$ComponentProps = FileListProps & DataAttributes;
|
|
4
|
+
/**
|
|
5
|
+
* FileList
|
|
6
|
+
* =============================================================================
|
|
7
|
+
* @h-ai/ui - FileList 组件
|
|
8
|
+
* =============================================================================
|
|
9
|
+
* 文件列表展示组件
|
|
10
|
+
*
|
|
11
|
+
* 使用 Svelte 5 Runes ($props, $state, $derived)
|
|
12
|
+
* =============================================================================
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { mount, unmount } from 'svelte'
|
|
17
|
+
* import type { ComponentProps } from 'svelte'
|
|
18
|
+
* import { FileList } from '@h-ai/ui'
|
|
19
|
+
* const props: ComponentProps<typeof FileList> = { files: [{ id: 'f1', name: 'report.pdf', size: 1024, type: 'application/pdf' }], showSize: true }
|
|
20
|
+
* const component = mount(FileList, { target: document.body, props })
|
|
21
|
+
* await unmount(component)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
4
24
|
declare const FileList: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
5
25
|
type FileList = ReturnType<typeof FileList>;
|
|
6
26
|
export default FileList;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component FileUpload
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - FileUpload 组件
|
|
4
5
|
=============================================================================
|
|
@@ -7,6 +8,16 @@
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $state, $derived)
|
|
8
9
|
使用 primitives 组件:Progress, IconButton
|
|
9
10
|
=============================================================================
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
```ts
|
|
14
|
+
import { mount, unmount } from 'svelte'
|
|
15
|
+
import type { ComponentProps } from 'svelte'
|
|
16
|
+
import { FileUpload } from '@h-ai/ui'
|
|
17
|
+
const props: ComponentProps<typeof FileUpload> = { accept: '.pdf', maxFiles: 3, autoUpload: false }
|
|
18
|
+
const component = mount(FileUpload, { target: document.body, props })
|
|
19
|
+
await unmount(component)
|
|
20
|
+
```
|
|
10
21
|
-->
|
|
11
22
|
<script lang='ts'>
|
|
12
23
|
import type { DataAttributes } from '../../../types.js'
|
|
@@ -287,12 +298,36 @@
|
|
|
287
298
|
e.currentTarget.value = ''
|
|
288
299
|
}
|
|
289
300
|
|
|
290
|
-
/**
|
|
301
|
+
/**
|
|
302
|
+
* 手动触发上传
|
|
303
|
+
* @returns 当前待上传文件的上传 Promise;组件通过错误回调报告上传失败。
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```ts
|
|
307
|
+
* import { mount, unmount } from 'svelte'
|
|
308
|
+
* import { FileUpload } from '@h-ai/ui'
|
|
309
|
+
* const uploader = mount(FileUpload, { target: document.body, props: { autoUpload: false } })
|
|
310
|
+
* await uploader.upload()
|
|
311
|
+
* await unmount(uploader)
|
|
312
|
+
* ```
|
|
313
|
+
*/
|
|
291
314
|
export async function upload() {
|
|
292
315
|
await uploadPendingFiles(files.filter(f => f.state === 'pending'))
|
|
293
316
|
}
|
|
294
317
|
|
|
295
|
-
/**
|
|
318
|
+
/**
|
|
319
|
+
* 清空文件列表
|
|
320
|
+
* @returns 无返回值;取消本组件请求并清空文件列表。
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```ts
|
|
324
|
+
* import { mount, unmount } from 'svelte'
|
|
325
|
+
* import { FileUpload } from '@h-ai/ui'
|
|
326
|
+
* const uploader = mount(FileUpload, { target: document.body, props: { autoUpload: false } })
|
|
327
|
+
* uploader.clear()
|
|
328
|
+
* await unmount(uploader)
|
|
329
|
+
* ```
|
|
330
|
+
*/
|
|
296
331
|
export function clear() {
|
|
297
332
|
abortAllActiveRequests()
|
|
298
333
|
files = []
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
import type { DataAttributes } from '../../../types.js';
|
|
2
2
|
import type { FileUploadProps } from '../types.js';
|
|
3
3
|
type $$ComponentProps = FileUploadProps & DataAttributes;
|
|
4
|
+
/**
|
|
5
|
+
* FileUpload
|
|
6
|
+
* =============================================================================
|
|
7
|
+
* @h-ai/ui - FileUpload 组件
|
|
8
|
+
* =============================================================================
|
|
9
|
+
* 文件上传组件,负责文件选择、校验、进度与列表展示
|
|
10
|
+
*
|
|
11
|
+
* 使用 Svelte 5 Runes ($props, $state, $derived)
|
|
12
|
+
* 使用 primitives 组件:Progress, IconButton
|
|
13
|
+
* =============================================================================
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { mount, unmount } from 'svelte'
|
|
18
|
+
* import type { ComponentProps } from 'svelte'
|
|
19
|
+
* import { FileUpload } from '@h-ai/ui'
|
|
20
|
+
* const props: ComponentProps<typeof FileUpload> = { accept: '.pdf', maxFiles: 3, autoUpload: false }
|
|
21
|
+
* const component = mount(FileUpload, { target: document.body, props })
|
|
22
|
+
* await unmount(component)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
4
25
|
declare const FileUpload: import("svelte").Component<$$ComponentProps, {
|
|
5
26
|
upload: () => Promise<void>;
|
|
6
27
|
clear: () => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<!--
|
|
2
|
+
@component ImageUpload
|
|
2
3
|
=============================================================================
|
|
3
4
|
@h-ai/ui - ImageUpload 组件
|
|
4
5
|
=============================================================================
|
|
@@ -7,6 +8,16 @@
|
|
|
7
8
|
使用 Svelte 5 Runes ($props, $state, $derived)
|
|
8
9
|
使用 primitives 组件:IconButton, Spinner
|
|
9
10
|
=============================================================================
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
```ts
|
|
14
|
+
import { mount, unmount } from 'svelte'
|
|
15
|
+
import type { ComponentProps } from 'svelte'
|
|
16
|
+
import { ImageUpload } from '@h-ai/ui'
|
|
17
|
+
const props: ComponentProps<typeof ImageUpload> = { accept: 'image/png,image/jpeg', maxSize: 5 * 1024 * 1024 }
|
|
18
|
+
const component = mount(ImageUpload, { 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,6 +1,27 @@
|
|
|
1
1
|
import type { DataAttributes } from '../../../types.js';
|
|
2
2
|
import type { ImageUploadProps } from '../types.js';
|
|
3
3
|
type $$ComponentProps = ImageUploadProps & DataAttributes;
|
|
4
|
+
/**
|
|
5
|
+
* ImageUpload
|
|
6
|
+
* =============================================================================
|
|
7
|
+
* @h-ai/ui - ImageUpload 组件
|
|
8
|
+
* =============================================================================
|
|
9
|
+
* 图片上传组件,支持预览
|
|
10
|
+
*
|
|
11
|
+
* 使用 Svelte 5 Runes ($props, $state, $derived)
|
|
12
|
+
* 使用 primitives 组件:IconButton, Spinner
|
|
13
|
+
* =============================================================================
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { mount, unmount } from 'svelte'
|
|
18
|
+
* import type { ComponentProps } from 'svelte'
|
|
19
|
+
* import { ImageUpload } from '@h-ai/ui'
|
|
20
|
+
* const props: ComponentProps<typeof ImageUpload> = { accept: 'image/png,image/jpeg', maxSize: 5 * 1024 * 1024 }
|
|
21
|
+
* const component = mount(ImageUpload, { target: document.body, props })
|
|
22
|
+
* await unmount(component)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
4
25
|
declare const ImageUpload: import("svelte").Component<$$ComponentProps, {}, "value">;
|
|
5
26
|
type ImageUpload = ReturnType<typeof ImageUpload>;
|
|
6
27
|
export default ImageUpload;
|