@h-ai/ui 0.1.0-alpha5

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.
Files changed (234) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +488 -0
  3. package/auto-import.d.ts +96 -0
  4. package/auto-import.js +259 -0
  5. package/dist/components/compounds/Accordion.svelte +142 -0
  6. package/dist/components/compounds/Accordion.svelte.d.ts +25 -0
  7. package/dist/components/compounds/ActionSheet.svelte +116 -0
  8. package/dist/components/compounds/ActionSheet.svelte.d.ts +22 -0
  9. package/dist/components/compounds/Alert.svelte +67 -0
  10. package/dist/components/compounds/Alert.svelte.d.ts +8 -0
  11. package/dist/components/compounds/AppBar.svelte +77 -0
  12. package/dist/components/compounds/AppBar.svelte.d.ts +20 -0
  13. package/dist/components/compounds/BottomNav.svelte +75 -0
  14. package/dist/components/compounds/BottomNav.svelte.d.ts +18 -0
  15. package/dist/components/compounds/Breadcrumb.svelte +49 -0
  16. package/dist/components/compounds/Breadcrumb.svelte.d.ts +4 -0
  17. package/dist/components/compounds/Calendar.svelte +116 -0
  18. package/dist/components/compounds/Calendar.svelte.d.ts +47 -0
  19. package/dist/components/compounds/Card.svelte +77 -0
  20. package/dist/components/compounds/Card.svelte.d.ts +8 -0
  21. package/dist/components/compounds/Combobox.svelte +327 -0
  22. package/dist/components/compounds/Combobox.svelte.d.ts +69 -0
  23. package/dist/components/compounds/Confirm.svelte +90 -0
  24. package/dist/components/compounds/Confirm.svelte.d.ts +4 -0
  25. package/dist/components/compounds/DataTable.svelte +133 -0
  26. package/dist/components/compounds/DataTable.svelte.d.ts +69 -0
  27. package/dist/components/compounds/DatePicker.svelte +135 -0
  28. package/dist/components/compounds/DatePicker.svelte.d.ts +46 -0
  29. package/dist/components/compounds/Drawer.svelte +113 -0
  30. package/dist/components/compounds/Drawer.svelte.d.ts +4 -0
  31. package/dist/components/compounds/Dropdown.svelte +91 -0
  32. package/dist/components/compounds/Dropdown.svelte.d.ts +8 -0
  33. package/dist/components/compounds/Empty.svelte +83 -0
  34. package/dist/components/compounds/Empty.svelte.d.ts +4 -0
  35. package/dist/components/compounds/Form.svelte +96 -0
  36. package/dist/components/compounds/Form.svelte.d.ts +7 -0
  37. package/dist/components/compounds/FormField.svelte +56 -0
  38. package/dist/components/compounds/FormField.svelte.d.ts +4 -0
  39. package/dist/components/compounds/InfiniteScroll.svelte +82 -0
  40. package/dist/components/compounds/InfiniteScroll.svelte.d.ts +22 -0
  41. package/dist/components/compounds/Modal.svelte +123 -0
  42. package/dist/components/compounds/Modal.svelte.d.ts +8 -0
  43. package/dist/components/compounds/PageHeader.svelte +44 -0
  44. package/dist/components/compounds/PageHeader.svelte.d.ts +28 -0
  45. package/dist/components/compounds/Pagination.svelte +157 -0
  46. package/dist/components/compounds/Pagination.svelte.d.ts +4 -0
  47. package/dist/components/compounds/Popover.svelte +137 -0
  48. package/dist/components/compounds/Popover.svelte.d.ts +4 -0
  49. package/dist/components/compounds/PullRefresh.svelte +98 -0
  50. package/dist/components/compounds/PullRefresh.svelte.d.ts +16 -0
  51. package/dist/components/compounds/Result.svelte +84 -0
  52. package/dist/components/compounds/Result.svelte.d.ts +4 -0
  53. package/dist/components/compounds/SafeArea.svelte +37 -0
  54. package/dist/components/compounds/SafeArea.svelte.d.ts +12 -0
  55. package/dist/components/compounds/Skeleton.svelte +75 -0
  56. package/dist/components/compounds/Skeleton.svelte.d.ts +8 -0
  57. package/dist/components/compounds/Steps.svelte +111 -0
  58. package/dist/components/compounds/Steps.svelte.d.ts +4 -0
  59. package/dist/components/compounds/SwipeCell.svelte +115 -0
  60. package/dist/components/compounds/SwipeCell.svelte.d.ts +19 -0
  61. package/dist/components/compounds/Tabs.svelte +79 -0
  62. package/dist/components/compounds/Tabs.svelte.d.ts +8 -0
  63. package/dist/components/compounds/TagInput.svelte +108 -0
  64. package/dist/components/compounds/TagInput.svelte.d.ts +4 -0
  65. package/dist/components/compounds/Timeline.svelte +167 -0
  66. package/dist/components/compounds/Timeline.svelte.d.ts +25 -0
  67. package/dist/components/compounds/ToastContainer.svelte +59 -0
  68. package/dist/components/compounds/ToastContainer.svelte.d.ts +3 -0
  69. package/dist/components/compounds/Tooltip.svelte +41 -0
  70. package/dist/components/compounds/Tooltip.svelte.d.ts +4 -0
  71. package/dist/components/compounds/accordion-types.d.ts +16 -0
  72. package/dist/components/compounds/accordion-types.js +5 -0
  73. package/dist/components/compounds/action-sheet-types.d.ts +14 -0
  74. package/dist/components/compounds/action-sheet-types.js +5 -0
  75. package/dist/components/compounds/bottom-nav-types.d.ts +17 -0
  76. package/dist/components/compounds/bottom-nav-types.js +5 -0
  77. package/dist/components/compounds/index.d.ts +44 -0
  78. package/dist/components/compounds/index.js +54 -0
  79. package/dist/components/compounds/swipe-cell-types.d.ts +14 -0
  80. package/dist/components/compounds/swipe-cell-types.js +5 -0
  81. package/dist/components/compounds/timeline-types.d.ts +20 -0
  82. package/dist/components/compounds/timeline-types.js +5 -0
  83. package/dist/components/index.d.ts +9 -0
  84. package/dist/components/index.js +12 -0
  85. package/dist/components/primitives/Avatar.svelte +102 -0
  86. package/dist/components/primitives/Avatar.svelte.d.ts +8 -0
  87. package/dist/components/primitives/Badge.svelte +33 -0
  88. package/dist/components/primitives/Badge.svelte.d.ts +8 -0
  89. package/dist/components/primitives/BareButton.svelte +45 -0
  90. package/dist/components/primitives/BareButton.svelte.d.ts +4 -0
  91. package/dist/components/primitives/BareInput.svelte +101 -0
  92. package/dist/components/primitives/BareInput.svelte.d.ts +4 -0
  93. package/dist/components/primitives/Button.svelte +60 -0
  94. package/dist/components/primitives/Button.svelte.d.ts +8 -0
  95. package/dist/components/primitives/Checkbox.svelte +58 -0
  96. package/dist/components/primitives/Checkbox.svelte.d.ts +4 -0
  97. package/dist/components/primitives/IconButton.svelte +105 -0
  98. package/dist/components/primitives/IconButton.svelte.d.ts +4 -0
  99. package/dist/components/primitives/Input.svelte +130 -0
  100. package/dist/components/primitives/Input.svelte.d.ts +8 -0
  101. package/dist/components/primitives/Progress.svelte +58 -0
  102. package/dist/components/primitives/Progress.svelte.d.ts +4 -0
  103. package/dist/components/primitives/Radio.svelte +60 -0
  104. package/dist/components/primitives/Radio.svelte.d.ts +25 -0
  105. package/dist/components/primitives/Range.svelte +117 -0
  106. package/dist/components/primitives/Range.svelte.d.ts +27 -0
  107. package/dist/components/primitives/Rating.svelte +148 -0
  108. package/dist/components/primitives/Rating.svelte.d.ts +27 -0
  109. package/dist/components/primitives/Select.svelte +95 -0
  110. package/dist/components/primitives/Select.svelte.d.ts +25 -0
  111. package/dist/components/primitives/Spinner.svelte +54 -0
  112. package/dist/components/primitives/Spinner.svelte.d.ts +4 -0
  113. package/dist/components/primitives/Switch.svelte +53 -0
  114. package/dist/components/primitives/Switch.svelte.d.ts +4 -0
  115. package/dist/components/primitives/Tag.svelte +64 -0
  116. package/dist/components/primitives/Tag.svelte.d.ts +4 -0
  117. package/dist/components/primitives/Textarea.svelte +92 -0
  118. package/dist/components/primitives/Textarea.svelte.d.ts +4 -0
  119. package/dist/components/primitives/ToggleCheckbox.svelte +36 -0
  120. package/dist/components/primitives/ToggleCheckbox.svelte.d.ts +4 -0
  121. package/dist/components/primitives/ToggleInput.svelte +36 -0
  122. package/dist/components/primitives/ToggleInput.svelte.d.ts +4 -0
  123. package/dist/components/primitives/ToggleRadio.svelte +36 -0
  124. package/dist/components/primitives/ToggleRadio.svelte.d.ts +4 -0
  125. package/dist/components/primitives/index.d.ts +26 -0
  126. package/dist/components/primitives/index.js +30 -0
  127. package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte +387 -0
  128. package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte.d.ts +38 -0
  129. package/dist/components/scenes/ai/AiDocumentEditor.svelte +2259 -0
  130. package/dist/components/scenes/ai/AiDocumentEditor.svelte.d.ts +4 -0
  131. package/dist/components/scenes/ai/MarkdownRenderer.svelte +460 -0
  132. package/dist/components/scenes/ai/MarkdownRenderer.svelte.d.ts +4 -0
  133. package/dist/components/scenes/ai/document-download.d.ts +40 -0
  134. package/dist/components/scenes/ai/document-download.js +300 -0
  135. package/dist/components/scenes/ai/document-parse.d.ts +28 -0
  136. package/dist/components/scenes/ai/document-parse.js +243 -0
  137. package/dist/components/scenes/ai/document-types.d.ts +164 -0
  138. package/dist/components/scenes/ai/document-types.js +1 -0
  139. package/dist/components/scenes/ai/index.d.ts +17 -0
  140. package/dist/components/scenes/ai/index.js +13 -0
  141. package/dist/components/scenes/ai/markdown-parse.d.ts +32 -0
  142. package/dist/components/scenes/ai/markdown-parse.js +161 -0
  143. package/dist/components/scenes/app/FeedbackModal.svelte +160 -0
  144. package/dist/components/scenes/app/FeedbackModal.svelte.d.ts +47 -0
  145. package/dist/components/scenes/app/LanguageSwitch.svelte +136 -0
  146. package/dist/components/scenes/app/LanguageSwitch.svelte.d.ts +50 -0
  147. package/dist/components/scenes/app/SettingsModal.svelte +174 -0
  148. package/dist/components/scenes/app/SettingsModal.svelte.d.ts +31 -0
  149. package/dist/components/scenes/app/ThemeSelector.svelte +176 -0
  150. package/dist/components/scenes/app/ThemeSelector.svelte.d.ts +31 -0
  151. package/dist/components/scenes/app/ThemeToggle.svelte +76 -0
  152. package/dist/components/scenes/app/ThemeToggle.svelte.d.ts +29 -0
  153. package/dist/components/scenes/app/index.d.ts +11 -0
  154. package/dist/components/scenes/app/index.js +11 -0
  155. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte +39 -0
  156. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte.d.ts +18 -0
  157. package/dist/components/scenes/crud/CrudDetailDrawer.svelte +155 -0
  158. package/dist/components/scenes/crud/CrudDetailDrawer.svelte.d.ts +38 -0
  159. package/dist/components/scenes/crud/CrudEditDrawer.svelte +222 -0
  160. package/dist/components/scenes/crud/CrudEditDrawer.svelte.d.ts +48 -0
  161. package/dist/components/scenes/crud/CrudFilterBar.svelte +96 -0
  162. package/dist/components/scenes/crud/CrudFilterBar.svelte.d.ts +31 -0
  163. package/dist/components/scenes/crud/CrudPage.svelte +499 -0
  164. package/dist/components/scenes/crud/CrudPage.svelte.d.ts +114 -0
  165. package/dist/components/scenes/crud/crud-types.d.ts +135 -0
  166. package/dist/components/scenes/crud/crud-types.js +7 -0
  167. package/dist/components/scenes/crud/index.d.ts +12 -0
  168. package/dist/components/scenes/crud/index.js +11 -0
  169. package/dist/components/scenes/crypto/EncryptedInput.svelte +156 -0
  170. package/dist/components/scenes/crypto/EncryptedInput.svelte.d.ts +32 -0
  171. package/dist/components/scenes/crypto/HashDisplay.svelte +97 -0
  172. package/dist/components/scenes/crypto/HashDisplay.svelte.d.ts +4 -0
  173. package/dist/components/scenes/crypto/SignatureDisplay.svelte +161 -0
  174. package/dist/components/scenes/crypto/SignatureDisplay.svelte.d.ts +4 -0
  175. package/dist/components/scenes/crypto/index.d.ts +9 -0
  176. package/dist/components/scenes/crypto/index.js +11 -0
  177. package/dist/components/scenes/iam/ChangePasswordForm.svelte +134 -0
  178. package/dist/components/scenes/iam/ChangePasswordForm.svelte.d.ts +8 -0
  179. package/dist/components/scenes/iam/ForgotPasswordForm.svelte +147 -0
  180. package/dist/components/scenes/iam/ForgotPasswordForm.svelte.d.ts +4 -0
  181. package/dist/components/scenes/iam/LoginForm.svelte +191 -0
  182. package/dist/components/scenes/iam/LoginForm.svelte.d.ts +8 -0
  183. package/dist/components/scenes/iam/PasswordInput.svelte +203 -0
  184. package/dist/components/scenes/iam/PasswordInput.svelte.d.ts +49 -0
  185. package/dist/components/scenes/iam/PermGuard.svelte +69 -0
  186. package/dist/components/scenes/iam/PermGuard.svelte.d.ts +16 -0
  187. package/dist/components/scenes/iam/RegisterForm.svelte +269 -0
  188. package/dist/components/scenes/iam/RegisterForm.svelte.d.ts +8 -0
  189. package/dist/components/scenes/iam/ResetPasswordForm.svelte +153 -0
  190. package/dist/components/scenes/iam/ResetPasswordForm.svelte.d.ts +8 -0
  191. package/dist/components/scenes/iam/UserProfile.svelte +251 -0
  192. package/dist/components/scenes/iam/UserProfile.svelte.d.ts +4 -0
  193. package/dist/components/scenes/iam/index.d.ts +16 -0
  194. package/dist/components/scenes/iam/index.js +18 -0
  195. package/dist/components/scenes/iam/password-utils.d.ts +15 -0
  196. package/dist/components/scenes/iam/password-utils.js +19 -0
  197. package/dist/components/scenes/iam/permission-context.svelte.d.ts +90 -0
  198. package/dist/components/scenes/iam/permission-context.svelte.js +114 -0
  199. package/dist/components/scenes/index.d.ts +13 -0
  200. package/dist/components/scenes/index.js +20 -0
  201. package/dist/components/scenes/storage/AvatarUpload.svelte +218 -0
  202. package/dist/components/scenes/storage/AvatarUpload.svelte.d.ts +4 -0
  203. package/dist/components/scenes/storage/FileList.svelte +260 -0
  204. package/dist/components/scenes/storage/FileList.svelte.d.ts +4 -0
  205. package/dist/components/scenes/storage/FileUpload.svelte +400 -0
  206. package/dist/components/scenes/storage/FileUpload.svelte.d.ts +7 -0
  207. package/dist/components/scenes/storage/ImageUpload.svelte +285 -0
  208. package/dist/components/scenes/storage/ImageUpload.svelte.d.ts +4 -0
  209. package/dist/components/scenes/storage/index.d.ts +10 -0
  210. package/dist/components/scenes/storage/index.js +12 -0
  211. package/dist/components/scenes/types.d.ts +583 -0
  212. package/dist/components/scenes/types.js +7 -0
  213. package/dist/i18n.svelte.d.ts +44 -0
  214. package/dist/i18n.svelte.js +108 -0
  215. package/dist/index.d.ts +13 -0
  216. package/dist/index.js +19 -0
  217. package/dist/messages/en-US.json +242 -0
  218. package/dist/messages/zh-CN.json +242 -0
  219. package/dist/messages.d.ts +29 -0
  220. package/dist/messages.js +42 -0
  221. package/dist/styles/design-tokens.css +58 -0
  222. package/dist/styles/global.css +218 -0
  223. package/dist/styles/mobile.css +105 -0
  224. package/dist/theme-config.d.ts +92 -0
  225. package/dist/theme-config.js +122 -0
  226. package/dist/toast.svelte.d.ts +45 -0
  227. package/dist/toast.svelte.js +77 -0
  228. package/dist/types.d.ts +944 -0
  229. package/dist/types.js +7 -0
  230. package/dist/utils/platform.svelte.d.ts +54 -0
  231. package/dist/utils/platform.svelte.js +87 -0
  232. package/dist/utils.d.ts +46 -0
  233. package/dist/utils.js +100 -0
  234. package/package.json +69 -0
@@ -0,0 +1,53 @@
1
+ <!--
2
+ =============================================================================
3
+ @h-ai/ui - Switch 组件
4
+ =============================================================================
5
+ 开关组件
6
+
7
+ 使用 Svelte 5 Runes ($props, $derived, $bindable)
8
+ =============================================================================
9
+ -->
10
+ <script lang='ts'>
11
+ import type { SwitchProps } from '../../types.js'
12
+ import { cn, generateId, getSizeClass } from '../../utils.js'
13
+
14
+ let {
15
+ checked = $bindable(false),
16
+ label = '',
17
+ size = 'md',
18
+ disabled = false,
19
+ class: className = '',
20
+ onchange,
21
+ }: SwitchProps = $props()
22
+
23
+ const id = generateId('switch')
24
+
25
+ const toggleClass = $derived(
26
+ cn(
27
+ 'toggle',
28
+ getSizeClass(size, 'toggle'),
29
+ className,
30
+ ),
31
+ )
32
+
33
+ function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
34
+ checked = e.currentTarget.checked
35
+ onchange?.(checked)
36
+ }
37
+ </script>
38
+
39
+ <div class='inline-flex'>
40
+ <label class='label cursor-pointer gap-2' for={id}>
41
+ <input
42
+ {id}
43
+ type='checkbox'
44
+ class={toggleClass}
45
+ {disabled}
46
+ bind:checked
47
+ onchange={handleChange}
48
+ />
49
+ {#if label}
50
+ <span>{label}</span>
51
+ {/if}
52
+ </label>
53
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { SwitchProps } from '../../types.js';
2
+ declare const Switch: import("svelte").Component<SwitchProps, {}, "checked">;
3
+ type Switch = ReturnType<typeof Switch>;
4
+ export default Switch;
@@ -0,0 +1,64 @@
1
+ <!--
2
+ =============================================================================
3
+ @h-ai/ui - Tag 组件
4
+ =============================================================================
5
+ 标签组件
6
+
7
+ 使用 Svelte 5 Runes ($props, $derived)
8
+ =============================================================================
9
+ -->
10
+ <script lang='ts'>
11
+ import type { TagProps } from '../../types.js'
12
+ import { cn, getSizeClass, getVariantClass } from '../../utils.js'
13
+ import IconButton from './IconButton.svelte'
14
+
15
+ const {
16
+ text = '',
17
+ variant = 'default',
18
+ size = 'md',
19
+ closable = false,
20
+ outline = false,
21
+ /** 移除按钮的 aria-label */
22
+ removeLabel = 'Remove tag',
23
+ class: className = '',
24
+ onclose,
25
+ children,
26
+ }: TagProps = $props()
27
+
28
+ const tagClass = $derived(
29
+ cn(
30
+ 'badge gap-1',
31
+ getVariantClass(variant, 'badge'),
32
+ getSizeClass(size, 'badge'),
33
+ outline && 'badge-outline',
34
+ className,
35
+ ),
36
+ )
37
+
38
+ function handleClose(e: MouseEvent) {
39
+ e.stopPropagation()
40
+ onclose?.()
41
+ }
42
+ </script>
43
+
44
+ <span class={tagClass}>
45
+ {#if children}
46
+ {@render children()}
47
+ {:else}
48
+ {text}
49
+ {/if}
50
+
51
+ {#if closable}
52
+ <IconButton
53
+ variant='ghost'
54
+ size='xs'
55
+ class='-mr-1'
56
+ onclick={handleClose}
57
+ ariaLabel={removeLabel}
58
+ >
59
+ <svg xmlns='http://www.w3.org/2000/svg' class='h-3 w-3' viewBox='0 0 20 20' fill='currentColor'>
60
+ <path fill-rule='evenodd' d='M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z' clip-rule='evenodd' />
61
+ </svg>
62
+ </IconButton>
63
+ {/if}
64
+ </span>
@@ -0,0 +1,4 @@
1
+ import type { TagProps } from '../../types.js';
2
+ declare const Tag: import("svelte").Component<TagProps, {}, "">;
3
+ type Tag = ReturnType<typeof Tag>;
4
+ export default Tag;
@@ -0,0 +1,92 @@
1
+ <!--
2
+ =============================================================================
3
+ @h-ai/ui - Textarea 组件
4
+ =============================================================================
5
+ 多行文本输入框组件
6
+
7
+ 使用 Svelte 5 Runes ($props, $derived, $bindable)
8
+ 支持自定义验证消息(validationMessage)覆盖浏览器原生提示
9
+ =============================================================================
10
+ -->
11
+ <script lang='ts'>
12
+ import type { TextareaProps } from '../../types.js'
13
+ import { cn, getInputSizeClass } from '../../utils.js'
14
+
15
+ let {
16
+ value = $bindable(''),
17
+ placeholder = '',
18
+ rows = 3,
19
+ size = 'md',
20
+ disabled = false,
21
+ readonly = false,
22
+ required = false,
23
+ autoResize = false,
24
+ error = '',
25
+ validationMessage = '',
26
+ class: className = '',
27
+ id,
28
+ name,
29
+ oninput,
30
+ }: TextareaProps = $props()
31
+
32
+ let textareaRef: HTMLTextAreaElement | undefined = $state()
33
+
34
+ const textareaClass = $derived(
35
+ cn(
36
+ 'textarea w-full',
37
+ getInputSizeClass(size),
38
+ error && 'textarea-error',
39
+ className,
40
+ ),
41
+ )
42
+
43
+ // 当 validationMessage 变化时更新自定义验证消息
44
+ $effect(() => {
45
+ if (textareaRef) {
46
+ textareaRef.setCustomValidity(validationMessage)
47
+ }
48
+ })
49
+
50
+ function handleInput(e: Event & { currentTarget: HTMLTextAreaElement }) {
51
+ value = e.currentTarget.value
52
+
53
+ // 自动调整高度
54
+ if (autoResize) {
55
+ e.currentTarget.style.height = 'auto'
56
+ e.currentTarget.style.height = `${e.currentTarget.scrollHeight}px`
57
+ }
58
+
59
+ // 输入时重置自定义验证
60
+ if (validationMessage) {
61
+ e.currentTarget.setCustomValidity(validationMessage)
62
+ }
63
+
64
+ oninput?.(e)
65
+ }
66
+
67
+ function handleInvalid(e: Event & { currentTarget: HTMLTextAreaElement }) {
68
+ if (validationMessage) {
69
+ e.currentTarget.setCustomValidity(validationMessage)
70
+ }
71
+ }
72
+ </script>
73
+
74
+ <div class='fieldset w-full'>
75
+ <textarea
76
+ bind:this={textareaRef}
77
+ {id}
78
+ {name}
79
+ {placeholder}
80
+ {rows}
81
+ {disabled}
82
+ {readonly}
83
+ {required}
84
+ class={textareaClass}
85
+ bind:value
86
+ oninput={handleInput}
87
+ oninvalid={handleInvalid}
88
+ ></textarea>
89
+ {#if error}
90
+ <span class='fieldset-label text-error'>{error}</span>
91
+ {/if}
92
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { TextareaProps } from '../../types.js';
2
+ declare const Textarea: import("svelte").Component<TextareaProps, {}, "value">;
3
+ type Textarea = ReturnType<typeof Textarea>;
4
+ export default Textarea;
@@ -0,0 +1,36 @@
1
+ <!--
2
+ =============================================================================
3
+ @h-ai/ui - ToggleCheckbox 组件
4
+ =============================================================================
5
+ 仅渲染 checkbox input(用于 collapse/drawer 等结构要求)
6
+
7
+ 使用 Svelte 5 Runes ($props, $bindable)
8
+ =============================================================================
9
+ -->
10
+ <script lang='ts'>
11
+ import type { ToggleCheckboxProps } from '../../types.js'
12
+
13
+ let {
14
+ checked = $bindable(false),
15
+ name,
16
+ id,
17
+ disabled = false,
18
+ class: className = '',
19
+ onchange,
20
+ }: ToggleCheckboxProps = $props()
21
+
22
+ function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
23
+ checked = e.currentTarget.checked
24
+ onchange?.(checked)
25
+ }
26
+ </script>
27
+
28
+ <input
29
+ {id}
30
+ {name}
31
+ type='checkbox'
32
+ class={className}
33
+ {disabled}
34
+ checked={checked}
35
+ onchange={handleChange}
36
+ />
@@ -0,0 +1,4 @@
1
+ import type { ToggleCheckboxProps } from '../../types.js';
2
+ declare const ToggleCheckbox: import("svelte").Component<ToggleCheckboxProps, {}, "checked">;
3
+ type ToggleCheckbox = ReturnType<typeof ToggleCheckbox>;
4
+ export default ToggleCheckbox;
@@ -0,0 +1,36 @@
1
+ <!--
2
+ =============================================================================
3
+ @h-ai/ui - ToggleInput 组件
4
+ =============================================================================
5
+ 仅渲染原生 checkbox/radio input,用于需要 input 作为直接子元素的场景
6
+
7
+ 使用 Svelte 5 Runes ($props, $bindable)
8
+ =============================================================================
9
+ -->
10
+ <script lang='ts'>
11
+ import type { ToggleCheckboxProps } from '../../types.js'
12
+
13
+ let {
14
+ checked = $bindable(false),
15
+ name,
16
+ id,
17
+ disabled = false,
18
+ class: className = '',
19
+ onchange,
20
+ }: ToggleCheckboxProps = $props()
21
+
22
+ function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
23
+ checked = e.currentTarget.checked
24
+ onchange?.(checked)
25
+ }
26
+ </script>
27
+
28
+ <input
29
+ {id}
30
+ {name}
31
+ type='checkbox'
32
+ class={className}
33
+ {disabled}
34
+ checked={checked}
35
+ onchange={handleChange}
36
+ />
@@ -0,0 +1,4 @@
1
+ import type { ToggleCheckboxProps } from '../../types.js';
2
+ declare const ToggleInput: import("svelte").Component<ToggleCheckboxProps, {}, "checked">;
3
+ type ToggleInput = ReturnType<typeof ToggleInput>;
4
+ export default ToggleInput;
@@ -0,0 +1,36 @@
1
+ <!--
2
+ =============================================================================
3
+ @h-ai/ui - ToggleRadio 组件
4
+ =============================================================================
5
+ 仅渲染 radio input(用于 collapse/accordion 等结构要求)
6
+
7
+ 使用 Svelte 5 Runes ($props, $bindable)
8
+ =============================================================================
9
+ -->
10
+ <script lang='ts'>
11
+ import type { ToggleRadioProps } from '../../types.js'
12
+
13
+ let {
14
+ checked = $bindable(false),
15
+ name,
16
+ id,
17
+ disabled = false,
18
+ class: className = '',
19
+ onchange,
20
+ }: ToggleRadioProps = $props()
21
+
22
+ function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
23
+ checked = e.currentTarget.checked
24
+ onchange?.(checked)
25
+ }
26
+ </script>
27
+
28
+ <input
29
+ {id}
30
+ {name}
31
+ type='radio'
32
+ class={className}
33
+ {disabled}
34
+ checked={checked}
35
+ onchange={handleChange}
36
+ />
@@ -0,0 +1,4 @@
1
+ import type { ToggleRadioProps } from '../../types.js';
2
+ declare const ToggleRadio: import("svelte").Component<ToggleRadioProps, {}, "checked">;
3
+ type ToggleRadio = ReturnType<typeof ToggleRadio>;
4
+ export default ToggleRadio;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @h-ai/ui — 原子组件 (Primitives)
3
+ *
4
+ * 不可再分的基础 UI 单元,职责单一,无业务逻辑。
5
+ * @module index
6
+ */
7
+ export { default as Avatar } from './Avatar.svelte';
8
+ export { default as Badge } from './Badge.svelte';
9
+ export { default as BareButton } from './BareButton.svelte';
10
+ export { default as BareInput } from './BareInput.svelte';
11
+ export { default as Button } from './Button.svelte';
12
+ export { default as Checkbox } from './Checkbox.svelte';
13
+ export { default as IconButton } from './IconButton.svelte';
14
+ export { default as Input } from './Input.svelte';
15
+ export { default as Progress } from './Progress.svelte';
16
+ export { default as Radio } from './Radio.svelte';
17
+ export { default as Range } from './Range.svelte';
18
+ export { default as Rating } from './Rating.svelte';
19
+ export { default as Select } from './Select.svelte';
20
+ export { default as Spinner } from './Spinner.svelte';
21
+ export { default as Switch } from './Switch.svelte';
22
+ export { default as Tag } from './Tag.svelte';
23
+ export { default as Textarea } from './Textarea.svelte';
24
+ export { default as ToggleCheckbox } from './ToggleCheckbox.svelte';
25
+ export { default as ToggleInput } from './ToggleInput.svelte';
26
+ export { default as ToggleRadio } from './ToggleRadio.svelte';
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @h-ai/ui — 原子组件 (Primitives)
3
+ *
4
+ * 不可再分的基础 UI 单元,职责单一,无业务逻辑。
5
+ * @module index
6
+ */
7
+ export { default as Avatar } from './Avatar.svelte';
8
+ // 展示标签
9
+ export { default as Badge } from './Badge.svelte';
10
+ // 按钮
11
+ export { default as BareButton } from './BareButton.svelte';
12
+ // 表单控件
13
+ export { default as BareInput } from './BareInput.svelte';
14
+ export { default as Button } from './Button.svelte';
15
+ export { default as Checkbox } from './Checkbox.svelte';
16
+ export { default as IconButton } from './IconButton.svelte';
17
+ export { default as Input } from './Input.svelte';
18
+ export { default as Progress } from './Progress.svelte';
19
+ export { default as Radio } from './Radio.svelte';
20
+ export { default as Range } from './Range.svelte';
21
+ // 状态指示 / 评分
22
+ export { default as Rating } from './Rating.svelte';
23
+ export { default as Select } from './Select.svelte';
24
+ export { default as Spinner } from './Spinner.svelte';
25
+ export { default as Switch } from './Switch.svelte';
26
+ export { default as Tag } from './Tag.svelte';
27
+ export { default as Textarea } from './Textarea.svelte';
28
+ export { default as ToggleCheckbox } from './ToggleCheckbox.svelte';
29
+ export { default as ToggleInput } from './ToggleInput.svelte';
30
+ export { default as ToggleRadio } from './ToggleRadio.svelte';