@h-ai/ui 0.1.0-alpha.29 → 0.1.0-alpha.31

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 (194) hide show
  1. package/README.md +50 -3
  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 +43 -66
  43. package/dist/components/compounds/MessageContainer.svelte.d.ts +2 -1
  44. package/dist/components/compounds/Modal.svelte +29 -43
  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 +255 -48
  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 +34 -19
  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 +40 -10
  117. package/dist/components/scenes/ai/AiDocumentEditor.svelte.d.ts +3 -1
  118. package/dist/components/scenes/ai/MarkdownRenderer.svelte +49 -7
  119. package/dist/components/scenes/ai/MarkdownRenderer.svelte.d.ts +3 -1
  120. package/dist/components/scenes/ai/document-parse.d.ts +2 -0
  121. package/dist/components/scenes/ai/document-parse.js +16 -17
  122. package/dist/components/scenes/ai/document-types.d.ts +6 -1
  123. package/dist/components/scenes/ai/markdown-parse.d.ts +2 -0
  124. package/dist/components/scenes/ai/markdown-parse.js +17 -20
  125. package/dist/components/scenes/ai/safe-html.d.ts +16 -0
  126. package/dist/components/scenes/ai/safe-html.js +284 -0
  127. package/dist/components/scenes/ai/table/AiTableEditor.svelte +6 -3
  128. package/dist/components/scenes/ai/table/AiTableEditor.svelte.d.ts +3 -1
  129. package/dist/components/scenes/ai/table/table-types.d.ts +2 -1
  130. package/dist/components/scenes/app/FeedbackModal.svelte +5 -2
  131. package/dist/components/scenes/app/FeedbackModal.svelte.d.ts +3 -1
  132. package/dist/components/scenes/app/LanguageSwitch.svelte +6 -2
  133. package/dist/components/scenes/app/LanguageSwitch.svelte.d.ts +3 -1
  134. package/dist/components/scenes/app/SettingsLayout.svelte +6 -3
  135. package/dist/components/scenes/app/SettingsLayout.svelte.d.ts +2 -1
  136. package/dist/components/scenes/app/SettingsModal.svelte +6 -3
  137. package/dist/components/scenes/app/SettingsModal.svelte.d.ts +3 -1
  138. package/dist/components/scenes/app/ThemeColorPicker.svelte +6 -3
  139. package/dist/components/scenes/app/ThemeColorPicker.svelte.d.ts +3 -1
  140. package/dist/components/scenes/app/ThemeSelector.svelte +6 -3
  141. package/dist/components/scenes/app/ThemeSelector.svelte.d.ts +3 -1
  142. package/dist/components/scenes/app/ThemeToggle.svelte +6 -2
  143. package/dist/components/scenes/app/ThemeToggle.svelte.d.ts +3 -1
  144. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte +16 -11
  145. package/dist/components/scenes/crud/CrudDeleteConfirm.svelte.d.ts +2 -1
  146. package/dist/components/scenes/crud/CrudDetailDrawer.svelte +6 -3
  147. package/dist/components/scenes/crud/CrudDetailDrawer.svelte.d.ts +2 -2
  148. package/dist/components/scenes/crud/CrudDetailPanel.svelte +6 -3
  149. package/dist/components/scenes/crud/CrudDetailPanel.svelte.d.ts +2 -2
  150. package/dist/components/scenes/crud/CrudEditPanel.svelte +6 -3
  151. package/dist/components/scenes/crud/CrudEditPanel.svelte.d.ts +2 -2
  152. package/dist/components/scenes/crud/CrudFilterBar.svelte +6 -2
  153. package/dist/components/scenes/crud/CrudFilterBar.svelte.d.ts +2 -1
  154. package/dist/components/scenes/crud/CrudPage.svelte +6 -2
  155. package/dist/components/scenes/crud/CrudPage.svelte.d.ts +2 -1
  156. package/dist/components/scenes/crud/crud-types.d.ts +2 -2
  157. package/dist/components/scenes/crypto/EncryptedInput.svelte +6 -3
  158. package/dist/components/scenes/crypto/EncryptedInput.svelte.d.ts +3 -2
  159. package/dist/components/scenes/crypto/HashDisplay.svelte +6 -3
  160. package/dist/components/scenes/crypto/HashDisplay.svelte.d.ts +3 -1
  161. package/dist/components/scenes/crypto/SignatureDisplay.svelte +6 -3
  162. package/dist/components/scenes/crypto/SignatureDisplay.svelte.d.ts +3 -1
  163. package/dist/components/scenes/error/ErrorPage.svelte +6 -3
  164. package/dist/components/scenes/error/ErrorPage.svelte.d.ts +2 -1
  165. package/dist/components/scenes/iam/AuthShell.svelte +6 -3
  166. package/dist/components/scenes/iam/AuthShell.svelte.d.ts +2 -1
  167. package/dist/components/scenes/iam/ChangePasswordForm.svelte +6 -3
  168. package/dist/components/scenes/iam/ChangePasswordForm.svelte.d.ts +3 -1
  169. package/dist/components/scenes/iam/ForgotPasswordForm.svelte +6 -3
  170. package/dist/components/scenes/iam/ForgotPasswordForm.svelte.d.ts +3 -1
  171. package/dist/components/scenes/iam/LoginForm.svelte +6 -3
  172. package/dist/components/scenes/iam/LoginForm.svelte.d.ts +3 -1
  173. package/dist/components/scenes/iam/PasswordInput.svelte +6 -4
  174. package/dist/components/scenes/iam/PasswordInput.svelte.d.ts +3 -2
  175. package/dist/components/scenes/iam/RegisterForm.svelte +6 -4
  176. package/dist/components/scenes/iam/RegisterForm.svelte.d.ts +3 -1
  177. package/dist/components/scenes/iam/ResetPasswordForm.svelte +6 -3
  178. package/dist/components/scenes/iam/ResetPasswordForm.svelte.d.ts +3 -1
  179. package/dist/components/scenes/iam/UserProfile.svelte +6 -3
  180. package/dist/components/scenes/iam/UserProfile.svelte.d.ts +3 -1
  181. package/dist/components/scenes/storage/AvatarUpload.svelte +11 -8
  182. package/dist/components/scenes/storage/AvatarUpload.svelte.d.ts +3 -1
  183. package/dist/components/scenes/storage/FileList.svelte +6 -3
  184. package/dist/components/scenes/storage/FileList.svelte.d.ts +3 -1
  185. package/dist/components/scenes/storage/FileUpload.svelte +6 -3
  186. package/dist/components/scenes/storage/FileUpload.svelte.d.ts +3 -1
  187. package/dist/components/scenes/storage/ImageUpload.svelte +12 -9
  188. package/dist/components/scenes/storage/ImageUpload.svelte.d.ts +3 -1
  189. package/dist/components/scenes/types.d.ts +20 -16
  190. package/dist/styles/global.css +5 -0
  191. package/dist/types.d.ts +48 -41
  192. package/dist/utils.d.ts +6 -1
  193. package/dist/utils.js +16 -1
  194. package/package.json +2 -2
@@ -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;
@@ -3,8 +3,8 @@
3
3
  通用按钮组件,支持多种变体和尺寸。
4
4
  -->
5
5
  <script lang='ts'>
6
- import type { ButtonProps } from '../../types.js'
7
- import { cn, getSizeClass, getVariantClass } from '../../utils.js'
6
+ import type { ButtonProps, DataAttributes } from '../../types.js'
7
+ import { cn, getDataAttributes, getSizeClass, getVariantClass } from '../../utils.js'
8
8
 
9
9
  const {
10
10
  variant = 'default',
@@ -19,8 +19,10 @@
19
19
  type = 'button',
20
20
  onclick,
21
21
  children,
22
- }: ButtonProps = $props()
22
+ ...restProps
23
+ }: ButtonProps & DataAttributes = $props()
23
24
 
25
+ const dataAttributes = $derived(getDataAttributes(restProps))
24
26
  const buttonClass = $derived(
25
27
  cn(
26
28
  'btn no-animation',
@@ -45,13 +47,13 @@
45
47
  }
46
48
  </script>
47
49
 
48
- <button
49
- {type}
50
- form={form || undefined}
51
- class={buttonClass}
52
- disabled={disabled || loading}
53
- aria-label={ariaLabel || undefined}
54
- onclick={handleClick}
50
+ <button {...dataAttributes}
51
+ {type}
52
+ form={form || undefined}
53
+ class={buttonClass}
54
+ disabled={disabled || loading}
55
+ aria-label={ariaLabel || undefined}
56
+ onclick={handleClick}
55
57
  >
56
58
  {#if loading}
57
59
  <span class='loading loading-spinner loading-xs'></span>
@@ -1,8 +1,9 @@
1
- import type { ButtonProps } from '../../types.js';
1
+ import type { ButtonProps, DataAttributes } from '../../types.js';
2
+ type $$ComponentProps = ButtonProps & DataAttributes;
2
3
  /**
3
4
  * Button
4
5
  * 通用按钮组件,支持多种变体和尺寸。
5
6
  */
6
- declare const Button: import("svelte").Component<ButtonProps, {}, "">;
7
+ declare const Button: import("svelte").Component<$$ComponentProps, {}, "">;
7
8
  type Button = ReturnType<typeof Button>;
8
9
  export default Button;
@@ -8,8 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { CheckboxProps } from '../../types.js'
12
- import { cn, generateId, getSizeClass } from '../../utils.js'
11
+ import type { CheckboxProps, DataAttributes } from '../../types.js'
12
+ import { cn, generateId, getDataAttributes, getSizeClass } from '../../utils.js'
13
13
 
14
14
  let {
15
15
  checked = $bindable(false),
@@ -20,8 +20,10 @@
20
20
  indeterminate = false,
21
21
  class: className = '',
22
22
  onchange,
23
- }: CheckboxProps = $props()
23
+ ...restProps
24
+ }: CheckboxProps & DataAttributes = $props()
24
25
 
26
+ const dataAttributes = $derived(getDataAttributes(restProps))
25
27
  const id = generateId('checkbox')
26
28
 
27
29
  const checkboxClass = $derived(
@@ -40,7 +42,7 @@
40
42
  }
41
43
  </script>
42
44
 
43
- <div class='inline-flex'>
45
+ <div {...dataAttributes} class='inline-flex'>
44
46
  <label class='label cursor-pointer gap-2' for={id}>
45
47
  <input
46
48
  {id}
@@ -1,4 +1,5 @@
1
- import type { CheckboxProps } from '../../types.js';
2
- declare const Checkbox: import("svelte").Component<CheckboxProps, {}, "checked">;
1
+ import type { CheckboxProps, DataAttributes } from '../../types.js';
2
+ type $$ComponentProps = CheckboxProps & DataAttributes;
3
+ declare const Checkbox: import("svelte").Component<$$ComponentProps, {}, "checked">;
3
4
  type Checkbox = ReturnType<typeof Checkbox>;
4
5
  export default Checkbox;
@@ -8,8 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { IconButtonProps } from '../../types.js'
12
- import { cn, getSizeClass, getVariantClass } from '../../utils.js'
11
+ import type { DataAttributes, IconButtonProps } from '../../types.js'
12
+ import { cn, getDataAttributes, getSizeClass, getVariantClass } from '../../utils.js'
13
13
 
14
14
  const SAFE_INLINE_SVG_REGEX = /^<svg[\s\S]*<\/svg>$/i
15
15
  const UNSAFE_INLINE_SVG_REGEX = /<\s*(?:script|foreignObject|iframe|object|embed|link|meta|img)\b|\son[a-z]+\s*=|(?:href|xlink:href)\s*=\s*['"]\s*(?:javascript:|vbscript:|data:text\/html)/i
@@ -26,8 +26,10 @@
26
26
  class: className = '',
27
27
  onclick,
28
28
  children,
29
- }: IconButtonProps = $props()
29
+ ...restProps
30
+ }: IconButtonProps & DataAttributes = $props()
30
31
 
32
+ const dataAttributes = $derived(getDataAttributes(restProps))
31
33
  /** 计算最终的 aria-label */
32
34
  const computedAriaLabel = $derived(ariaLabel || label || tooltip)
33
35
 
@@ -85,7 +87,7 @@
85
87
  </script>
86
88
 
87
89
  {#if tooltip}
88
- <div class='tooltip' data-tip={tooltip}>
90
+ <div {...dataAttributes} class='tooltip' data-tip={tooltip}>
89
91
  <button
90
92
  type='button'
91
93
  class={buttonClass}
@@ -1,4 +1,5 @@
1
- import type { IconButtonProps } from '../../types.js';
2
- declare const IconButton: import("svelte").Component<IconButtonProps, {}, "">;
1
+ import type { DataAttributes, IconButtonProps } from '../../types.js';
2
+ type $$ComponentProps = IconButtonProps & DataAttributes;
3
+ declare const IconButton: import("svelte").Component<$$ComponentProps, {}, "">;
3
4
  type IconButton = ReturnType<typeof IconButton>;
4
5
  export default IconButton;
@@ -3,8 +3,8 @@
3
3
  文本输入框组件,支持自定义验证消息
4
4
  -->
5
5
  <script lang='ts'>
6
- import type { InputProps } from '../../types.js'
7
- import { cn } from '../../utils.js'
6
+ import type { DataAttributes, InputProps } from '../../types.js'
7
+ import { cn, getDataAttributes } from '../../utils.js'
8
8
 
9
9
  let {
10
10
  value = $bindable(''),
@@ -35,8 +35,10 @@
35
35
  onblur,
36
36
  onfocus,
37
37
  oninvalid,
38
- }: InputProps = $props()
38
+ ...restProps
39
+ }: InputProps & DataAttributes = $props()
39
40
 
41
+ const dataAttributes = $derived(getDataAttributes(restProps))
40
42
  const containerHeight = $derived(
41
43
  size === 'xs'
42
44
  ? 'h-8'
@@ -112,7 +114,7 @@
112
114
  }
113
115
  </script>
114
116
 
115
- <div class='fieldset w-full'>
117
+ <div {...dataAttributes} class='fieldset w-full'>
116
118
  <div class={containerClass}>
117
119
  <input
118
120
  bind:this={inputRef}
@@ -1,8 +1,9 @@
1
- import type { InputProps } from '../../types.js';
1
+ import type { DataAttributes, InputProps } from '../../types.js';
2
+ type $$ComponentProps = InputProps & DataAttributes;
2
3
  /**
3
4
  * Input
4
5
  * 文本输入框组件,支持自定义验证消息
5
6
  */
6
- declare const Input: import("svelte").Component<InputProps, {}, "value" | "inputRef">;
7
+ declare const Input: import("svelte").Component<$$ComponentProps, {}, "value" | "inputRef">;
7
8
  type Input = ReturnType<typeof Input>;
8
9
  export default Input;
@@ -8,8 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts'>
11
- import type { ProgressProps } from '../../types.js'
12
- import { cn, getProgressVariantClass } from '../../utils.js'
11
+ import type { DataAttributes, ProgressProps } from '../../types.js'
12
+ import { cn, getDataAttributes, getProgressVariantClass } from '../../utils.js'
13
13
 
14
14
  const {
15
15
  value,
@@ -18,8 +18,10 @@
18
18
  variant = 'primary',
19
19
  showLabel = false,
20
20
  class: className = '',
21
- }: ProgressProps = $props()
21
+ ...restProps
22
+ }: ProgressProps & DataAttributes = $props()
22
23
 
24
+ const dataAttributes = $derived(getDataAttributes(restProps))
23
25
  const sizeMap = {
24
26
  'xs': 'h-1',
25
27
  'sm': 'h-2',
@@ -43,7 +45,7 @@
43
45
  )
44
46
  </script>
45
47
 
46
- <div class='w-full'>
48
+ <div {...dataAttributes} class='w-full'>
47
49
  <progress
48
50
  class={progressClass}
49
51
  {value}
@@ -1,4 +1,5 @@
1
- import type { ProgressProps } from '../../types.js';
2
- declare const Progress: import("svelte").Component<ProgressProps, {}, "">;
1
+ import type { DataAttributes, ProgressProps } from '../../types.js';
2
+ type $$ComponentProps = ProgressProps & DataAttributes;
3
+ declare const Progress: import("svelte").Component<$$ComponentProps, {}, "">;
3
4
  type Progress = ReturnType<typeof Progress>;
4
5
  export default Progress;
@@ -8,8 +8,8 @@
8
8
  =============================================================================
9
9
  -->
10
10
  <script lang='ts' generics="T = string">
11
- import type { RadioProps, SelectOption } from '../../types.js'
12
- import { cn, getSizeClass } from '../../utils.js'
11
+ import type { DataAttributes, RadioProps, SelectOption } from '../../types.js'
12
+ import { cn, getDataAttributes, getSizeClass } from '../../utils.js'
13
13
 
14
14
  let {
15
15
  value = $bindable() as T,
@@ -20,8 +20,10 @@
20
20
  direction = 'vertical',
21
21
  class: className = '',
22
22
  onchange,
23
- }: RadioProps<T> = $props()
23
+ ...restProps
24
+ }: RadioProps<T> & DataAttributes = $props()
24
25
 
26
+ const dataAttributes = $derived(getDataAttributes(restProps))
25
27
  const containerClass = $derived(
26
28
  cn(
27
29
  'flex gap-2',
@@ -43,7 +45,7 @@
43
45
  }
44
46
  </script>
45
47
 
46
- <div class={containerClass} role='radiogroup'>
48
+ <div {...dataAttributes} class={containerClass} role='radiogroup'>
47
49
  {#each options as option (option.value)}
48
50
  <label class='label cursor-pointer gap-2 justify-start'>
49
51
  <input
@@ -1,6 +1,6 @@
1
- import type { RadioProps } from '../../types.js';
1
+ import type { DataAttributes, RadioProps } from '../../types.js';
2
2
  declare function $$render<T = string>(): {
3
- props: RadioProps<T>;
3
+ props: RadioProps<T> & DataAttributes;
4
4
  exports: {};
5
5
  bindings: "value";
6
6
  slots: {};