@h-ai/ui 0.1.0-alpha.28 → 0.1.0-alpha.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +12 -0
  2. package/dist/components/compounds/Accordion.svelte +6 -3
  3. package/dist/components/compounds/Accordion.svelte.d.ts +3 -1
  4. package/dist/components/compounds/ActionSheet.svelte +11 -8
  5. package/dist/components/compounds/ActionSheet.svelte.d.ts +3 -1
  6. package/dist/components/compounds/Alert.svelte +6 -4
  7. package/dist/components/compounds/Alert.svelte.d.ts +3 -2
  8. package/dist/components/compounds/AppBar.svelte +13 -9
  9. package/dist/components/compounds/AppBar.svelte.d.ts +3 -1
  10. package/dist/components/compounds/BottomNav.svelte +13 -10
  11. package/dist/components/compounds/BottomNav.svelte.d.ts +3 -1
  12. package/dist/components/compounds/Breadcrumb.svelte +6 -4
  13. package/dist/components/compounds/Breadcrumb.svelte.d.ts +3 -2
  14. package/dist/components/compounds/Calendar.svelte +7 -2
  15. package/dist/components/compounds/Calendar.svelte.d.ts +3 -1
  16. package/dist/components/compounds/Card.svelte +6 -4
  17. package/dist/components/compounds/Card.svelte.d.ts +3 -2
  18. package/dist/components/compounds/Combobox.svelte +6 -2
  19. package/dist/components/compounds/Combobox.svelte.d.ts +3 -1
  20. package/dist/components/compounds/Confirm.svelte +9 -7
  21. package/dist/components/compounds/Confirm.svelte.d.ts +3 -2
  22. package/dist/components/compounds/DataTable.svelte +6 -2
  23. package/dist/components/compounds/DataTable.svelte.d.ts +2 -1
  24. package/dist/components/compounds/DatePicker.svelte +7 -2
  25. package/dist/components/compounds/DatePicker.svelte.d.ts +3 -1
  26. package/dist/components/compounds/Drawer.svelte +6 -4
  27. package/dist/components/compounds/Drawer.svelte.d.ts +3 -2
  28. package/dist/components/compounds/Dropdown.svelte +6 -4
  29. package/dist/components/compounds/Dropdown.svelte.d.ts +3 -2
  30. package/dist/components/compounds/Empty.svelte +6 -4
  31. package/dist/components/compounds/Empty.svelte.d.ts +3 -2
  32. package/dist/components/compounds/Form.svelte +11 -9
  33. package/dist/components/compounds/Form.svelte.d.ts +3 -2
  34. package/dist/components/compounds/FormField.svelte +6 -4
  35. package/dist/components/compounds/FormField.svelte.d.ts +3 -2
  36. package/dist/components/compounds/InfiniteScroll.svelte +10 -7
  37. package/dist/components/compounds/InfiniteScroll.svelte.d.ts +3 -1
  38. package/dist/components/compounds/MessageBoxContainer.svelte +6 -1
  39. package/dist/components/compounds/MessageBoxContainer.svelte.d.ts +3 -17
  40. package/dist/components/compounds/MessageBoxDialog.svelte +9 -7
  41. package/dist/components/compounds/MessageBoxDialog.svelte.d.ts +2 -1
  42. package/dist/components/compounds/MessageContainer.svelte +6 -2
  43. package/dist/components/compounds/MessageContainer.svelte.d.ts +2 -1
  44. package/dist/components/compounds/Modal.svelte +9 -7
  45. package/dist/components/compounds/Modal.svelte.d.ts +3 -2
  46. package/dist/components/compounds/PageHeader.svelte +6 -2
  47. package/dist/components/compounds/PageHeader.svelte.d.ts +3 -1
  48. package/dist/components/compounds/Pagination.svelte +6 -4
  49. package/dist/components/compounds/Pagination.svelte.d.ts +3 -2
  50. package/dist/components/compounds/Popover.svelte +10 -8
  51. package/dist/components/compounds/Popover.svelte.d.ts +3 -2
  52. package/dist/components/compounds/PullRefresh.svelte +11 -8
  53. package/dist/components/compounds/PullRefresh.svelte.d.ts +3 -1
  54. package/dist/components/compounds/Result.svelte +6 -4
  55. package/dist/components/compounds/Result.svelte.d.ts +3 -2
  56. package/dist/components/compounds/SafeArea.svelte +6 -3
  57. package/dist/components/compounds/SafeArea.svelte.d.ts +3 -1
  58. package/dist/components/compounds/Skeleton.svelte +6 -4
  59. package/dist/components/compounds/Skeleton.svelte.d.ts +3 -2
  60. package/dist/components/compounds/Steps.svelte +6 -4
  61. package/dist/components/compounds/Steps.svelte.d.ts +3 -2
  62. package/dist/components/compounds/SwipeCell.svelte +6 -3
  63. package/dist/components/compounds/SwipeCell.svelte.d.ts +3 -1
  64. package/dist/components/compounds/Tabs.svelte +6 -4
  65. package/dist/components/compounds/Tabs.svelte.d.ts +3 -2
  66. package/dist/components/compounds/TagInput.svelte +11 -9
  67. package/dist/components/compounds/TagInput.svelte.d.ts +3 -2
  68. package/dist/components/compounds/Timeline.svelte +6 -3
  69. package/dist/components/compounds/Timeline.svelte.d.ts +3 -1
  70. package/dist/components/compounds/ToastContainer.svelte +6 -2
  71. package/dist/components/compounds/ToastContainer.svelte.d.ts +2 -1
  72. package/dist/components/compounds/Tooltip.svelte +6 -4
  73. package/dist/components/compounds/Tooltip.svelte.d.ts +3 -2
  74. package/dist/components/primitives/Avatar.svelte +6 -4
  75. package/dist/components/primitives/Avatar.svelte.d.ts +3 -2
  76. package/dist/components/primitives/Badge.svelte +6 -4
  77. package/dist/components/primitives/Badge.svelte.d.ts +3 -2
  78. package/dist/components/primitives/BareButton.svelte +15 -12
  79. package/dist/components/primitives/BareButton.svelte.d.ts +3 -2
  80. package/dist/components/primitives/BareInput.svelte +37 -34
  81. package/dist/components/primitives/BareInput.svelte.d.ts +3 -2
  82. package/dist/components/primitives/Button.svelte +12 -10
  83. package/dist/components/primitives/Button.svelte.d.ts +3 -2
  84. package/dist/components/primitives/Checkbox.svelte +6 -4
  85. package/dist/components/primitives/Checkbox.svelte.d.ts +3 -2
  86. package/dist/components/primitives/IconButton.svelte +6 -4
  87. package/dist/components/primitives/IconButton.svelte.d.ts +3 -2
  88. package/dist/components/primitives/Input.svelte +6 -4
  89. package/dist/components/primitives/Input.svelte.d.ts +3 -2
  90. package/dist/components/primitives/Progress.svelte +6 -4
  91. package/dist/components/primitives/Progress.svelte.d.ts +3 -2
  92. package/dist/components/primitives/Radio.svelte +6 -4
  93. package/dist/components/primitives/Radio.svelte.d.ts +2 -2
  94. package/dist/components/primitives/Range.svelte +6 -3
  95. package/dist/components/primitives/Range.svelte.d.ts +3 -1
  96. package/dist/components/primitives/Rating.svelte +6 -3
  97. package/dist/components/primitives/Rating.svelte.d.ts +3 -1
  98. package/dist/components/primitives/Select.svelte +6 -4
  99. package/dist/components/primitives/Select.svelte.d.ts +2 -2
  100. package/dist/components/primitives/Spinner.svelte +6 -4
  101. package/dist/components/primitives/Spinner.svelte.d.ts +3 -2
  102. package/dist/components/primitives/Switch.svelte +6 -4
  103. package/dist/components/primitives/Switch.svelte.d.ts +3 -2
  104. package/dist/components/primitives/Tag.svelte +6 -4
  105. package/dist/components/primitives/Tag.svelte.d.ts +3 -2
  106. package/dist/components/primitives/Textarea.svelte +6 -4
  107. package/dist/components/primitives/Textarea.svelte.d.ts +3 -2
  108. package/dist/components/primitives/ToggleCheckbox.svelte +13 -10
  109. package/dist/components/primitives/ToggleCheckbox.svelte.d.ts +3 -2
  110. package/dist/components/primitives/ToggleInput.svelte +13 -10
  111. package/dist/components/primitives/ToggleInput.svelte.d.ts +3 -2
  112. package/dist/components/primitives/ToggleRadio.svelte +13 -10
  113. package/dist/components/primitives/ToggleRadio.svelte.d.ts +3 -2
  114. package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte +8 -5
  115. package/dist/components/scenes/ai/AiDocumentDownloadMenu.svelte.d.ts +3 -1
  116. package/dist/components/scenes/ai/AiDocumentEditor.svelte +6 -3
  117. package/dist/components/scenes/ai/AiDocumentEditor.svelte.d.ts +3 -1
  118. package/dist/components/scenes/ai/MarkdownRenderer.svelte +8 -7
  119. package/dist/components/scenes/ai/MarkdownRenderer.svelte.d.ts +3 -1
  120. package/dist/components/scenes/ai/document-types.d.ts +2 -1
  121. package/dist/components/scenes/ai/table/AiTableEditor.svelte +6 -3
  122. package/dist/components/scenes/ai/table/AiTableEditor.svelte.d.ts +3 -1
  123. package/dist/components/scenes/ai/table/table-types.d.ts +2 -1
  124. package/dist/components/scenes/app/FeedbackModal.svelte +5 -2
  125. package/dist/components/scenes/app/FeedbackModal.svelte.d.ts +3 -1
  126. package/dist/components/scenes/app/LanguageSwitch.svelte +6 -2
  127. package/dist/components/scenes/app/LanguageSwitch.svelte.d.ts +3 -1
  128. package/dist/components/scenes/app/SettingsLayout.svelte +6 -3
  129. package/dist/components/scenes/app/SettingsLayout.svelte.d.ts +2 -1
  130. package/dist/components/scenes/app/SettingsModal.svelte +6 -3
  131. package/dist/components/scenes/app/SettingsModal.svelte.d.ts +3 -1
  132. package/dist/components/scenes/app/ThemeColorPicker.svelte +6 -3
  133. package/dist/components/scenes/app/ThemeColorPicker.svelte.d.ts +3 -1
  134. package/dist/components/scenes/app/ThemeSelector.svelte +6 -3
  135. package/dist/components/scenes/app/ThemeSelector.svelte.d.ts +3 -1
  136. package/dist/components/scenes/app/ThemeToggle.svelte +6 -2
  137. package/dist/components/scenes/app/ThemeToggle.svelte.d.ts +3 -1
  138. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte +16 -11
  139. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte.d.ts +2 -1
  140. package/dist/components/scenes/crud/CrudDetailDrawer.svelte +6 -3
  141. package/dist/components/scenes/crud/CrudDetailDrawer.svelte.d.ts +2 -2
  142. package/dist/components/scenes/crud/CrudDetailPanel.svelte +6 -3
  143. package/dist/components/scenes/crud/CrudDetailPanel.svelte.d.ts +2 -2
  144. package/dist/components/scenes/crud/CrudEditPanel.svelte +6 -3
  145. package/dist/components/scenes/crud/CrudEditPanel.svelte.d.ts +2 -2
  146. package/dist/components/scenes/crud/CrudFilterBar.svelte +6 -2
  147. package/dist/components/scenes/crud/CrudFilterBar.svelte.d.ts +2 -1
  148. package/dist/components/scenes/crud/CrudPage.svelte +6 -2
  149. package/dist/components/scenes/crud/CrudPage.svelte.d.ts +2 -1
  150. package/dist/components/scenes/crud/crud-types.d.ts +2 -2
  151. package/dist/components/scenes/crypto/EncryptedInput.svelte +6 -3
  152. package/dist/components/scenes/crypto/EncryptedInput.svelte.d.ts +3 -2
  153. package/dist/components/scenes/crypto/HashDisplay.svelte +6 -3
  154. package/dist/components/scenes/crypto/HashDisplay.svelte.d.ts +3 -1
  155. package/dist/components/scenes/crypto/SignatureDisplay.svelte +6 -3
  156. package/dist/components/scenes/crypto/SignatureDisplay.svelte.d.ts +3 -1
  157. package/dist/components/scenes/error/ErrorPage.svelte +6 -3
  158. package/dist/components/scenes/error/ErrorPage.svelte.d.ts +2 -1
  159. package/dist/components/scenes/iam/AuthShell.svelte +6 -3
  160. package/dist/components/scenes/iam/AuthShell.svelte.d.ts +2 -1
  161. package/dist/components/scenes/iam/ChangePasswordForm.svelte +6 -3
  162. package/dist/components/scenes/iam/ChangePasswordForm.svelte.d.ts +3 -1
  163. package/dist/components/scenes/iam/ForgotPasswordForm.svelte +6 -3
  164. package/dist/components/scenes/iam/ForgotPasswordForm.svelte.d.ts +3 -1
  165. package/dist/components/scenes/iam/LoginForm.svelte +6 -3
  166. package/dist/components/scenes/iam/LoginForm.svelte.d.ts +3 -1
  167. package/dist/components/scenes/iam/PasswordInput.svelte +6 -4
  168. package/dist/components/scenes/iam/PasswordInput.svelte.d.ts +3 -2
  169. package/dist/components/scenes/iam/RegisterForm.svelte +6 -4
  170. package/dist/components/scenes/iam/RegisterForm.svelte.d.ts +3 -1
  171. package/dist/components/scenes/iam/ResetPasswordForm.svelte +6 -3
  172. package/dist/components/scenes/iam/ResetPasswordForm.svelte.d.ts +3 -1
  173. package/dist/components/scenes/iam/UserProfile.svelte +6 -3
  174. package/dist/components/scenes/iam/UserProfile.svelte.d.ts +3 -1
  175. package/dist/components/scenes/storage/AvatarUpload.svelte +11 -8
  176. package/dist/components/scenes/storage/AvatarUpload.svelte.d.ts +3 -1
  177. package/dist/components/scenes/storage/FileList.svelte +6 -3
  178. package/dist/components/scenes/storage/FileList.svelte.d.ts +3 -1
  179. package/dist/components/scenes/storage/FileUpload.svelte +6 -3
  180. package/dist/components/scenes/storage/FileUpload.svelte.d.ts +3 -1
  181. package/dist/components/scenes/storage/ImageUpload.svelte +12 -9
  182. package/dist/components/scenes/storage/ImageUpload.svelte.d.ts +3 -1
  183. package/dist/components/scenes/types.d.ts +16 -16
  184. package/dist/types.d.ts +43 -36
  185. package/dist/utils.d.ts +6 -1
  186. package/dist/utils.js +15 -0
  187. package/package.json +2 -2
@@ -8,7 +8,8 @@
8
8
  -->
9
9
  <script lang='ts'>
10
10
  import type { Snippet } from 'svelte'
11
- import { cn } from '../../utils.js'
11
+ import type { DataAttributes } from '../../types.js'
12
+ import { cn, getDataAttributes } from '../../utils.js'
12
13
 
13
14
  interface Props {
14
15
  /** 安全区域位置 */
@@ -23,8 +24,10 @@
23
24
  position = 'all',
24
25
  class: className,
25
26
  children,
26
- }: Props = $props()
27
+ ...restProps
28
+ }: Props & DataAttributes = $props()
27
29
 
30
+ const dataAttributes = $derived(getDataAttributes(restProps))
28
31
  const positionClasses = $derived({
29
32
  top: 'hai-safe-top',
30
33
  bottom: 'hai-safe-bottom',
@@ -32,6 +35,6 @@
32
35
  }[position])
33
36
  </script>
34
37
 
35
- <div class={cn(positionClasses, className)}>
38
+ <div {...dataAttributes} class={cn(positionClasses, className)}>
36
39
  {@render children()}
37
40
  </div>
@@ -1,4 +1,5 @@
1
1
  import type { Snippet } from 'svelte';
2
+ import type { DataAttributes } from '../../types.js';
2
3
  interface Props {
3
4
  /** 安全区域位置 */
4
5
  position?: 'top' | 'bottom' | 'all';
@@ -7,6 +8,7 @@ interface Props {
7
8
  /** 内容 */
8
9
  children: Snippet;
9
10
  }
10
- declare const SafeArea: import("svelte").Component<Props, {}, "">;
11
+ type $$ComponentProps = Props & DataAttributes;
12
+ declare const SafeArea: import("svelte").Component<$$ComponentProps, {}, "">;
11
13
  type SafeArea = ReturnType<typeof SafeArea>;
12
14
  export default SafeArea;
@@ -3,8 +3,8 @@
3
3
  骨架屏占位组件,用于加载状态展示。
4
4
  -->
5
5
  <script lang='ts'>
6
- import type { SkeletonProps } from '../../types.js'
7
- import { cn } from '../../utils.js'
6
+ import type { DataAttributes, SkeletonProps } from '../../types.js'
7
+ import { cn, getDataAttributes } from '../../utils.js'
8
8
 
9
9
  const {
10
10
  variant = 'text',
@@ -14,8 +14,10 @@
14
14
  animation = true,
15
15
  count = 1,
16
16
  class: className = '',
17
- }: SkeletonProps = $props()
17
+ ...restProps
18
+ }: SkeletonProps & DataAttributes = $props()
18
19
 
20
+ const dataAttributes = $derived(getDataAttributes(restProps))
19
21
  const baseClass = $derived(
20
22
  cn(
21
23
  'skeleton',
@@ -40,7 +42,7 @@
40
42
  </script>
41
43
 
42
44
  {#if count > 1}
43
- <div class='space-y-2'>
45
+ <div {...dataAttributes} class='space-y-2'>
44
46
  {#each Array.from({ length: count }) as _, i (i)}
45
47
  <div class={baseClass} {style}></div>
46
48
  {/each}
@@ -1,8 +1,9 @@
1
- import type { SkeletonProps } from '../../types.js';
1
+ import type { DataAttributes, SkeletonProps } from '../../types.js';
2
+ type $$ComponentProps = SkeletonProps & DataAttributes;
2
3
  /**
3
4
  * Skeleton
4
5
  * 骨架屏占位组件,用于加载状态展示。
5
6
  */
6
- declare const Skeleton: import("svelte").Component<SkeletonProps, {}, "">;
7
+ declare const Skeleton: import("svelte").Component<$$ComponentProps, {}, "">;
7
8
  type Skeleton = ReturnType<typeof Skeleton>;
8
9
  export default Skeleton;
@@ -8,8 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { StepsProps } from '../../types.js'
12
- import { cn } from '../../utils.js'
11
+ import type { DataAttributes, StepsProps } from '../../types.js'
12
+ import { cn, getDataAttributes } from '../../utils.js'
13
13
 
14
14
  const {
15
15
  items = [],
@@ -19,8 +19,10 @@
19
19
  clickable = false,
20
20
  class: className = '',
21
21
  onchange,
22
- }: StepsProps = $props()
22
+ ...restProps
23
+ }: StepsProps & DataAttributes = $props()
23
24
 
25
+ const dataAttributes = $derived(getDataAttributes(restProps))
24
26
  const containerClass = $derived(
25
27
  cn(
26
28
  'steps',
@@ -62,7 +64,7 @@
62
64
  }
63
65
  </script>
64
66
 
65
- <ul class={containerClass}>
67
+ <ul {...dataAttributes} class={containerClass}>
66
68
  {#each items as item, index (index)}
67
69
  {#if clickable}
68
70
  <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
@@ -1,4 +1,5 @@
1
- import type { StepsProps } from '../../types.js';
2
- declare const Steps: import("svelte").Component<StepsProps, {}, "">;
1
+ import type { DataAttributes, StepsProps } from '../../types.js';
2
+ type $$ComponentProps = StepsProps & DataAttributes;
3
+ declare const Steps: import("svelte").Component<$$ComponentProps, {}, "">;
3
4
  type Steps = ReturnType<typeof Steps>;
4
5
  export default Steps;
@@ -13,8 +13,9 @@
13
13
  -->
14
14
  <script lang='ts'>
15
15
  import type { Snippet } from 'svelte'
16
+ import type { DataAttributes } from '../../types.js'
16
17
  import type { SwipeCellAction } from './swipe-cell-types.js'
17
- import { cn } from '../../utils.js'
18
+ import { cn, getDataAttributes } from '../../utils.js'
18
19
 
19
20
  // eslint-disable-next-line no-import-assign -- type re-export
20
21
  export type { SwipeCellAction }
@@ -38,8 +39,10 @@
38
39
  disabled = false,
39
40
  class: className,
40
41
  children,
41
- }: Props = $props()
42
+ ...restProps
43
+ }: Props & DataAttributes = $props()
42
44
 
45
+ const dataAttributes = $derived(getDataAttributes(restProps))
43
46
  let offsetX = $state(0)
44
47
  let startX = 0
45
48
  let swiping = false
@@ -82,7 +85,7 @@
82
85
  }
83
86
  </script>
84
87
 
85
- <div class={cn('relative overflow-hidden', className)}>
88
+ <div {...dataAttributes} class={cn('relative overflow-hidden', className)}>
86
89
  <!-- 内容层 -->
87
90
  <div
88
91
  class='relative transition-transform'
@@ -1,4 +1,5 @@
1
1
  import type { Snippet } from 'svelte';
2
+ import type { DataAttributes } from '../../types.js';
2
3
  import type { SwipeCellAction } from './swipe-cell-types.js';
3
4
  interface Props {
4
5
  /** 右侧操作列表 */
@@ -12,7 +13,8 @@ interface Props {
12
13
  /** 内容 */
13
14
  children: Snippet;
14
15
  }
15
- declare const SwipeCell: import("svelte").Component<Props, {
16
+ type $$ComponentProps = Props & DataAttributes;
17
+ declare const SwipeCell: import("svelte").Component<$$ComponentProps, {
16
18
  SwipeCellAction: typeof SwipeCellAction;
17
19
  }, "">;
18
20
  type SwipeCell = ReturnType<typeof SwipeCell>;
@@ -3,8 +3,8 @@
3
3
  标签页组件,支持 line/card/pills 三种样式。
4
4
  -->
5
5
  <script lang='ts'>
6
- import type { TabsProps } from '../../types.js'
7
- import { cn } from '../../utils.js'
6
+ import type { DataAttributes, TabsProps } from '../../types.js'
7
+ import { cn, getDataAttributes } from '../../utils.js'
8
8
  import BareButton from '../primitives/BareButton.svelte'
9
9
 
10
10
  let {
@@ -15,8 +15,10 @@
15
15
  class: className = '',
16
16
  onchange,
17
17
  children,
18
- }: TabsProps = $props()
18
+ ...restProps
19
+ }: TabsProps & DataAttributes = $props()
19
20
 
21
+ const dataAttributes = $derived(getDataAttributes(restProps))
20
22
  // 默认选中第一个
21
23
  $effect(() => {
22
24
  if (!active && items.length > 0) {
@@ -56,7 +58,7 @@
56
58
  }
57
59
  </script>
58
60
 
59
- <div role='tablist' class={tabsClass}>
61
+ <div {...dataAttributes} role='tablist' class={tabsClass}>
60
62
  {#each items as item (item.key)}
61
63
  <BareButton
62
64
  role='tab'
@@ -1,8 +1,9 @@
1
- import type { TabsProps } from '../../types.js';
1
+ import type { DataAttributes, TabsProps } from '../../types.js';
2
+ type $$ComponentProps = TabsProps & DataAttributes;
2
3
  /**
3
4
  * Tabs
4
5
  * 标签页组件,支持 line/card/pills 三种样式。
5
6
  */
6
- declare const Tabs: import("svelte").Component<TabsProps, {}, "active">;
7
+ declare const Tabs: import("svelte").Component<$$ComponentProps, {}, "active">;
7
8
  type Tabs = ReturnType<typeof Tabs>;
8
9
  export default Tabs;
@@ -8,9 +8,9 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { TagInputProps } from '../../types.js'
11
+ import type { DataAttributes, TagInputProps } from '../../types.js'
12
12
  import { uiM } from '../../messages.js'
13
- import { cn, getInputSizeClass } from '../../utils.js'
13
+ import { cn, getDataAttributes, getInputSizeClass } from '../../utils.js'
14
14
  import BareInput from '../primitives/BareInput.svelte'
15
15
  import Tag from '../primitives/Tag.svelte'
16
16
 
@@ -23,8 +23,10 @@
23
23
  size = 'md',
24
24
  class: className = '',
25
25
  onchange,
26
- }: TagInputProps = $props()
26
+ ...restProps
27
+ }: TagInputProps & DataAttributes = $props()
27
28
 
29
+ const dataAttributes = $derived(getDataAttributes(restProps))
28
30
  let inputValue = $state('')
29
31
  let inputElement = $state<HTMLInputElement | undefined>(undefined)
30
32
 
@@ -77,12 +79,12 @@
77
79
  }
78
80
  </script>
79
81
 
80
- <div
81
- class={containerClass}
82
- onclick={() => inputElement?.focus()}
83
- onkeydown={e => e.key === 'Enter' && inputElement?.focus()}
84
- role='textbox'
85
- tabindex='-1'
82
+ <div {...dataAttributes}
83
+ class={containerClass}
84
+ onclick={() => inputElement?.focus()}
85
+ onkeydown={e => e.key === 'Enter' && inputElement?.focus()}
86
+ role='textbox'
87
+ tabindex='-1'
86
88
  >
87
89
  {#each tags as tag, index (index)}
88
90
  <Tag
@@ -1,4 +1,5 @@
1
- import type { TagInputProps } from '../../types.js';
2
- declare const TagInput: import("svelte").Component<TagInputProps, {}, "tags">;
1
+ import type { DataAttributes, TagInputProps } from '../../types.js';
2
+ type $$ComponentProps = TagInputProps & DataAttributes;
3
+ declare const TagInput: import("svelte").Component<$$ComponentProps, {}, "tags">;
3
4
  type TagInput = ReturnType<typeof TagInput>;
4
5
  export default TagInput;
@@ -11,8 +11,9 @@
11
11
 
12
12
  <script lang='ts'>
13
13
  import type { Snippet } from 'svelte'
14
+ import type { DataAttributes } from '../../types.js'
14
15
  import type { TimelineItem } from './timeline-types.js'
15
- import { cn } from '../../utils.js'
16
+ import { cn, getDataAttributes } from '../../utils.js'
16
17
 
17
18
  interface Props {
18
19
  /** 时间线项数据 */
@@ -45,8 +46,10 @@
45
46
  snapIcon = false,
46
47
  class: className = '',
47
48
  children,
48
- }: Props = $props()
49
+ ...restProps
50
+ }: Props & DataAttributes = $props()
49
51
 
52
+ const dataAttributes = $derived(getDataAttributes(restProps))
50
53
  const timelineClass = $derived(
51
54
  cn(
52
55
  'timeline',
@@ -95,7 +98,7 @@
95
98
  }
96
99
  </script>
97
100
 
98
- <ul class={timelineClass}>
101
+ <ul {...dataAttributes} class={timelineClass}>
99
102
  {#each items as item, index (item.id)}
100
103
  <li>
101
104
  <!-- 前置连线 -->
@@ -1,4 +1,5 @@
1
1
  import type { Snippet } from 'svelte';
2
+ import type { DataAttributes } from '../../types.js';
2
3
  import type { TimelineItem } from './timeline-types.js';
3
4
  interface Props {
4
5
  /** 时间线项数据 */
@@ -20,6 +21,7 @@ interface Props {
20
21
  /** 自定义项渲染 */
21
22
  children?: Snippet<[TimelineItem, number]>;
22
23
  }
23
- declare const Timeline: import("svelte").Component<Props, {}, "">;
24
+ type $$ComponentProps = Props & DataAttributes;
25
+ declare const Timeline: import("svelte").Component<$$ComponentProps, {}, "">;
24
26
  type Timeline = ReturnType<typeof Timeline>;
25
27
  export default Timeline;
@@ -14,12 +14,16 @@
14
14
  =============================================================================
15
15
  -->
16
16
  <script lang='ts'>
17
+ import type { DataAttributes } from '../../types.js'
17
18
  import { onMount } from 'svelte'
18
19
  import { uiM } from '../../messages.js'
19
20
  import { toast } from '../../toast.svelte.js'
20
- import { cn, getAlertVariantClass } from '../../utils.js'
21
+ import { cn, getAlertVariantClass, getDataAttributes } from '../../utils.js'
21
22
  import IconButton from '../primitives/IconButton.svelte'
22
23
 
24
+ const { ...restProps }: DataAttributes = $props()
25
+ const dataAttributes = $derived(getDataAttributes(restProps))
26
+
23
27
  const positionMap = {
24
28
  'top-right': 'toast-top toast-end',
25
29
  'top-left': 'toast-top toast-start',
@@ -150,7 +154,7 @@
150
154
  })
151
155
  </script>
152
156
 
153
- <div bind:this={layerElement} popover='manual' class='hai-toast-layer'>
157
+ <div {...dataAttributes} bind:this={layerElement} popover='manual' class='hai-toast-layer'>
154
158
  {#each Object.entries(groupedItems()) as [position, items] (position)}
155
159
  <div class={cn('toast', positionMap[position as keyof typeof positionMap])}>
156
160
  {#each items as item (item.id)}
@@ -1,3 +1,4 @@
1
- declare const ToastContainer: import("svelte").Component<Record<string, never>, {}, "">;
1
+ import type { DataAttributes } from '../../types.js';
2
+ declare const ToastContainer: import("svelte").Component<DataAttributes, {}, "">;
2
3
  type ToastContainer = ReturnType<typeof ToastContainer>;
3
4
  export default ToastContainer;
@@ -8,16 +8,18 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { TooltipProps } from '../../types.js'
12
- import { cn } from '../../utils.js'
11
+ import type { DataAttributes, TooltipProps } from '../../types.js'
12
+ import { cn, getDataAttributes } from '../../utils.js'
13
13
 
14
14
  const {
15
15
  content,
16
16
  position = 'top',
17
17
  class: className = '',
18
18
  children,
19
- }: TooltipProps = $props()
19
+ ...restProps
20
+ }: TooltipProps & DataAttributes = $props()
20
21
 
22
+ const dataAttributes = $derived(getDataAttributes(restProps))
21
23
  const positionMap = {
22
24
  top: 'tooltip-top',
23
25
  right: 'tooltip-right',
@@ -34,7 +36,7 @@
34
36
  )
35
37
  </script>
36
38
 
37
- <div class={tooltipClass} data-tip={content}>
39
+ <div {...dataAttributes} class={tooltipClass} data-tip={content}>
38
40
  {#if children}
39
41
  {@render children()}
40
42
  {/if}
@@ -1,4 +1,5 @@
1
- import type { TooltipProps } from '../../types.js';
2
- declare const Tooltip: import("svelte").Component<TooltipProps, {}, "">;
1
+ import type { DataAttributes, TooltipProps } from '../../types.js';
2
+ type $$ComponentProps = TooltipProps & DataAttributes;
3
+ declare const Tooltip: import("svelte").Component<$$ComponentProps, {}, "">;
3
4
  type Tooltip = ReturnType<typeof Tooltip>;
4
5
  export default Tooltip;
@@ -3,8 +3,8 @@
3
3
  头像组件,支持图片、名字首字母 fallback
4
4
  -->
5
5
  <script lang='ts'>
6
- import type { AvatarProps } from '../../types.js'
7
- import { cn } from '../../utils.js'
6
+ import type { AvatarProps, DataAttributes } from '../../types.js'
7
+ import { cn, getDataAttributes } from '../../utils.js'
8
8
 
9
9
  const NAME_PART_SPLIT_REGEX = /\s+/
10
10
 
@@ -15,8 +15,10 @@
15
15
  size = 'md',
16
16
  shape = 'circle',
17
17
  class: className = '',
18
- }: AvatarProps = $props()
18
+ ...restProps
19
+ }: AvatarProps & DataAttributes = $props()
19
20
 
21
+ const dataAttributes = $derived(getDataAttributes(restProps))
20
22
  const sizeMap = {
21
23
  'xs': 'w-6 h-6',
22
24
  'sm': 'w-8 h-8',
@@ -87,7 +89,7 @@
87
89
  )
88
90
  </script>
89
91
 
90
- <div class={containerClass}>
92
+ <div {...dataAttributes} class={containerClass}>
91
93
  <div
92
94
  class={innerClass}
93
95
  style:width={sizeValue}
@@ -1,8 +1,9 @@
1
- import type { AvatarProps } from '../../types.js';
1
+ import type { AvatarProps, DataAttributes } from '../../types.js';
2
+ type $$ComponentProps = AvatarProps & DataAttributes;
2
3
  /**
3
4
  * Avatar
4
5
  * 头像组件,支持图片、名字首字母 fallback
5
6
  */
6
- declare const Avatar: import("svelte").Component<AvatarProps, {}, "">;
7
+ declare const Avatar: import("svelte").Component<$$ComponentProps, {}, "">;
7
8
  type Avatar = ReturnType<typeof Avatar>;
8
9
  export default Avatar;
@@ -3,8 +3,8 @@
3
3
  徽章组件,支持多种变体与尺寸
4
4
  -->
5
5
  <script lang='ts'>
6
- import type { BadgeProps } from '../../types.js'
7
- import { cn, getBadgeSizeClass, getBadgeVariantClass } from '../../utils.js'
6
+ import type { BadgeProps, DataAttributes } from '../../types.js'
7
+ import { cn, getBadgeSizeClass, getBadgeVariantClass, getDataAttributes } from '../../utils.js'
8
8
 
9
9
  const {
10
10
  variant = 'default',
@@ -12,8 +12,10 @@
12
12
  outline = false,
13
13
  class: className = '',
14
14
  children,
15
- }: BadgeProps = $props()
15
+ ...restProps
16
+ }: BadgeProps & DataAttributes = $props()
16
17
 
18
+ const dataAttributes = $derived(getDataAttributes(restProps))
17
19
  const badgeClass = $derived(
18
20
  cn(
19
21
  'badge',
@@ -26,7 +28,7 @@
26
28
  )
27
29
  </script>
28
30
 
29
- <span class={badgeClass}>
31
+ <span {...dataAttributes} class={badgeClass}>
30
32
  {#if children}
31
33
  {@render children()}
32
34
  {/if}
@@ -1,8 +1,9 @@
1
- import type { BadgeProps } from '../../types.js';
1
+ import type { BadgeProps, DataAttributes } from '../../types.js';
2
+ type $$ComponentProps = BadgeProps & DataAttributes;
2
3
  /**
3
4
  * Badge
4
5
  * 徽章组件,支持多种变体与尺寸
5
6
  */
6
- declare const Badge: import("svelte").Component<BadgeProps, {}, "">;
7
+ declare const Badge: import("svelte").Component<$$ComponentProps, {}, "">;
7
8
  type Badge = ReturnType<typeof Badge>;
8
9
  export default Badge;
@@ -8,7 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { BareButtonProps } from '../../types.js'
11
+ import type { BareButtonProps, DataAttributes } from '../../types.js'
12
+ import { getDataAttributes } from '../../utils.js'
12
13
 
13
14
  const {
14
15
  type = 'button',
@@ -21,23 +22,25 @@
21
22
  onclick,
22
23
  onkeydown,
23
24
  children,
24
- }: BareButtonProps = $props()
25
+ ...restProps
26
+ }: BareButtonProps & DataAttributes = $props()
25
27
 
28
+ const dataAttributes = $derived(getDataAttributes(restProps))
26
29
  function handleClick(e: MouseEvent) {
27
30
  onclick?.(e)
28
31
  }
29
32
  </script>
30
33
 
31
- <button
32
- {type}
33
- class={className}
34
- disabled={disabled}
35
- aria-label={ariaLabel || undefined}
36
- role={role}
37
- aria-selected={ariaSelected}
38
- tabindex={tabindex}
39
- onclick={handleClick}
40
- onkeydown={onkeydown}
34
+ <button {...dataAttributes}
35
+ {type}
36
+ class={className}
37
+ disabled={disabled}
38
+ aria-label={ariaLabel || undefined}
39
+ role={role}
40
+ aria-selected={ariaSelected}
41
+ tabindex={tabindex}
42
+ onclick={handleClick}
43
+ onkeydown={onkeydown}
41
44
  >
42
45
  {#if children}
43
46
  {@render children()}
@@ -1,4 +1,5 @@
1
- import type { BareButtonProps } from '../../types.js';
2
- declare const BareButton: import("svelte").Component<BareButtonProps, {}, "">;
1
+ import type { BareButtonProps, DataAttributes } from '../../types.js';
2
+ type $$ComponentProps = BareButtonProps & DataAttributes;
3
+ declare const BareButton: import("svelte").Component<$$ComponentProps, {}, "">;
3
4
  type BareButton = ReturnType<typeof BareButton>;
4
5
  export default BareButton;
@@ -8,7 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { BareInputProps } from '../../types.js'
11
+ import type { BareInputProps, DataAttributes } from '../../types.js'
12
+ import { getDataAttributes } from '../../utils.js'
12
13
 
13
14
  let {
14
15
  value = $bindable(''),
@@ -42,8 +43,10 @@
42
43
  onblur,
43
44
  onfocus,
44
45
  oninvalid,
45
- }: BareInputProps = $props()
46
+ ...restProps
47
+ }: BareInputProps & DataAttributes = $props()
46
48
 
49
+ const dataAttributes = $derived(getDataAttributes(restProps))
47
50
  function handleInput(e: Event & { currentTarget: HTMLInputElement }) {
48
51
  value = e.currentTarget.value
49
52
  oninput?.(e)
@@ -66,36 +69,36 @@
66
69
  }
67
70
  </script>
68
71
 
69
- <input
70
- bind:this={inputRef}
71
- {id}
72
- {name}
73
- {type}
74
- {placeholder}
75
- {disabled}
76
- {readonly}
77
- {required}
78
- {pattern}
79
- {list}
80
- {accept}
81
- {multiple}
82
- {minlength}
83
- {min}
84
- {max}
85
- {maxlength}
86
- {step}
87
- inputmode={inputmode}
88
- autocomplete={autocomplete as HTMLInputElement['autocomplete']}
89
- role={role}
90
- aria-expanded={ariaExpanded}
91
- aria-controls={ariaControls}
92
- aria-autocomplete={ariaAutocomplete}
93
- class={className}
94
- bind:value
95
- oninput={handleInput}
96
- onchange={handleChange}
97
- onkeydown={handleKeydown}
98
- onblur={handleBlur}
99
- onfocus={handleFocus}
100
- oninvalid={oninvalid}
72
+ <input {...dataAttributes}
73
+ bind:this={inputRef}
74
+ {id}
75
+ {name}
76
+ {type}
77
+ {placeholder}
78
+ {disabled}
79
+ {readonly}
80
+ {required}
81
+ {pattern}
82
+ {list}
83
+ {accept}
84
+ {multiple}
85
+ {minlength}
86
+ {min}
87
+ {max}
88
+ {maxlength}
89
+ {step}
90
+ inputmode={inputmode}
91
+ autocomplete={autocomplete as HTMLInputElement['autocomplete']}
92
+ role={role}
93
+ aria-expanded={ariaExpanded}
94
+ aria-controls={ariaControls}
95
+ aria-autocomplete={ariaAutocomplete}
96
+ class={className}
97
+ bind:value
98
+ oninput={handleInput}
99
+ onchange={handleChange}
100
+ onkeydown={handleKeydown}
101
+ onblur={handleBlur}
102
+ onfocus={handleFocus}
103
+ oninvalid={oninvalid}
101
104
  />
@@ -1,4 +1,5 @@
1
- import type { BareInputProps } from '../../types.js';
2
- declare const BareInput: import("svelte").Component<BareInputProps, {}, "value" | "inputRef">;
1
+ import type { BareInputProps, DataAttributes } from '../../types.js';
2
+ type $$ComponentProps = BareInputProps & DataAttributes;
3
+ declare const BareInput: import("svelte").Component<$$ComponentProps, {}, "value" | "inputRef">;
3
4
  type BareInput = ReturnType<typeof BareInput>;
4
5
  export default BareInput;