@hina-ui/vue 1.3.0 → 1.4.0

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 (223) hide show
  1. package/dist/index.js +4326 -2130
  2. package/dist/index.js.map +1 -1
  3. package/dist/types/components/alert-dialog/AlertDialog.vue.d.ts +2 -2
  4. package/dist/types/components/alert-dialog/AlertDialog.vue.d.ts.map +1 -1
  5. package/dist/types/components/dialog/Dialog.vue.d.ts.map +1 -1
  6. package/dist/types/components/dialog/ModalContent.vue.d.ts +21 -0
  7. package/dist/types/components/dialog/ModalContent.vue.d.ts.map +1 -0
  8. package/dist/types/components/dropdown-menu/DropdownMenu.vue.d.ts.map +1 -1
  9. package/dist/types/components/file-upload/FileUpload.vue.d.ts +1 -1
  10. package/dist/types/components/file-upload/FileUpload.vue.d.ts.map +1 -1
  11. package/dist/types/components/hover-card/HoverCard.vue.d.ts +7 -7
  12. package/dist/types/components/hover-card/HoverCard.vue.d.ts.map +1 -1
  13. package/dist/types/components/hover-card/HoverCardAnchor.vue.d.ts +27 -0
  14. package/dist/types/components/hover-card/HoverCardAnchor.vue.d.ts.map +1 -0
  15. package/dist/types/components/hover-card/composables/useHoverCardAnchor.d.ts +17 -0
  16. package/dist/types/components/hover-card/composables/useHoverCardAnchor.d.ts.map +1 -0
  17. package/dist/types/components/image/Image.vue.d.ts +8 -3
  18. package/dist/types/components/image/Image.vue.d.ts.map +1 -1
  19. package/dist/types/components/image/composables/useImage.d.ts.map +1 -1
  20. package/dist/types/components/image/composables/useImageGroupState.d.ts.map +1 -1
  21. package/dist/types/components/image/image.variants.d.ts +23 -1
  22. package/dist/types/components/image/image.variants.d.ts.map +1 -1
  23. package/dist/types/components/lightbox/Lightbox.vue.d.ts.map +1 -1
  24. package/dist/types/components/lightbox/LightboxChrome.vue.d.ts +4 -0
  25. package/dist/types/components/lightbox/LightboxChrome.vue.d.ts.map +1 -1
  26. package/dist/types/components/lightbox/LightboxToolbar.vue.d.ts +4 -0
  27. package/dist/types/components/lightbox/LightboxToolbar.vue.d.ts.map +1 -1
  28. package/dist/types/components/lightbox/composables/useLightboxFrames.d.ts +4 -1
  29. package/dist/types/components/lightbox/composables/useLightboxFrames.d.ts.map +1 -1
  30. package/dist/types/components/lightbox/composables/useLightboxLarge.d.ts +1 -0
  31. package/dist/types/components/lightbox/composables/useLightboxLarge.d.ts.map +1 -1
  32. package/dist/types/components/lightbox/composables/useLightboxLayout.d.ts +17 -0
  33. package/dist/types/components/lightbox/composables/useLightboxLayout.d.ts.map +1 -0
  34. package/dist/types/components/lightbox/composables/useLightboxMotion.d.ts.map +1 -1
  35. package/dist/types/components/lightbox/composables/useLightboxPhase.d.ts +1 -1
  36. package/dist/types/components/lightbox/composables/useLightboxPhase.d.ts.map +1 -1
  37. package/dist/types/components/lightbox/composables/useLightboxPose.d.ts.map +1 -1
  38. package/dist/types/components/lightbox/composables/useLightboxRotation.d.ts +5 -1
  39. package/dist/types/components/lightbox/composables/useLightboxRotation.d.ts.map +1 -1
  40. package/dist/types/components/lightbox/composables/useLightboxZoom.d.ts +10 -1
  41. package/dist/types/components/lightbox/composables/useLightboxZoom.d.ts.map +1 -1
  42. package/dist/types/components/lightbox/lightbox.variants.d.ts +2 -0
  43. package/dist/types/components/lightbox/lightbox.variants.d.ts.map +1 -0
  44. package/dist/types/components/lightbox/types.d.ts +7 -1
  45. package/dist/types/components/lightbox/types.d.ts.map +1 -1
  46. package/dist/types/components/lightbox/utils/clip.d.ts +16 -0
  47. package/dist/types/components/lightbox/utils/clip.d.ts.map +1 -0
  48. package/dist/types/components/lightbox/utils/pose.d.ts +4 -4
  49. package/dist/types/components/lightbox/utils/pose.d.ts.map +1 -1
  50. package/dist/types/components/lightbox/utils/source.d.ts +4 -0
  51. package/dist/types/components/lightbox/utils/source.d.ts.map +1 -0
  52. package/dist/types/components/lightbox/utils/zoom.d.ts +8 -4
  53. package/dist/types/components/lightbox/utils/zoom.d.ts.map +1 -1
  54. package/dist/types/components/pagination/Pagination.vue.d.ts +59 -0
  55. package/dist/types/components/pagination/Pagination.vue.d.ts.map +1 -0
  56. package/dist/types/components/pagination/PaginationContent.vue.d.ts +23 -0
  57. package/dist/types/components/pagination/PaginationContent.vue.d.ts.map +1 -0
  58. package/dist/types/components/pagination/PaginationControl.vue.d.ts +10 -0
  59. package/dist/types/components/pagination/PaginationControl.vue.d.ts.map +1 -0
  60. package/dist/types/components/pagination/PaginationEllipsis.vue.d.ts +23 -0
  61. package/dist/types/components/pagination/PaginationEllipsis.vue.d.ts.map +1 -0
  62. package/dist/types/components/pagination/PaginationInfo.vue.d.ts +24 -0
  63. package/dist/types/components/pagination/PaginationInfo.vue.d.ts.map +1 -0
  64. package/dist/types/components/pagination/PaginationJump.vue.d.ts +7 -0
  65. package/dist/types/components/pagination/PaginationJump.vue.d.ts.map +1 -0
  66. package/dist/types/components/pagination/PaginationPage.vue.d.ts +20 -0
  67. package/dist/types/components/pagination/PaginationPage.vue.d.ts.map +1 -0
  68. package/dist/types/components/pagination/PaginationPages.vue.d.ts +27 -0
  69. package/dist/types/components/pagination/PaginationPages.vue.d.ts.map +1 -0
  70. package/dist/types/components/pagination/PaginationPopup.vue.d.ts +8 -0
  71. package/dist/types/components/pagination/PaginationPopup.vue.d.ts.map +1 -0
  72. package/dist/types/components/pagination/PaginationSize.vue.d.ts +7 -0
  73. package/dist/types/components/pagination/PaginationSize.vue.d.ts.map +1 -0
  74. package/dist/types/components/pagination/composables/usePagination.d.ts +25 -0
  75. package/dist/types/components/pagination/composables/usePagination.d.ts.map +1 -0
  76. package/dist/types/components/pagination/composables/usePaginationEllipsis.d.ts +34 -0
  77. package/dist/types/components/pagination/composables/usePaginationEllipsis.d.ts.map +1 -0
  78. package/dist/types/components/pagination/composables/usePaginationJump.d.ts +8 -0
  79. package/dist/types/components/pagination/composables/usePaginationJump.d.ts.map +1 -0
  80. package/dist/types/components/pagination/composables/usePaginationPageTooltip.d.ts +3 -0
  81. package/dist/types/components/pagination/composables/usePaginationPageTooltip.d.ts.map +1 -0
  82. package/dist/types/components/pagination/composables/usePaginationWindow.d.ts +188 -0
  83. package/dist/types/components/pagination/composables/usePaginationWindow.d.ts.map +1 -0
  84. package/dist/types/components/pagination/context.d.ts +19 -0
  85. package/dist/types/components/pagination/context.d.ts.map +1 -0
  86. package/dist/types/components/pagination/pagination.variants.d.ts +68 -0
  87. package/dist/types/components/pagination/pagination.variants.d.ts.map +1 -0
  88. package/dist/types/components/pagination/types.d.ts +23 -0
  89. package/dist/types/components/pagination/types.d.ts.map +1 -0
  90. package/dist/types/components/pagination/utils/ranges.d.ts +3 -0
  91. package/dist/types/components/pagination/utils/ranges.d.ts.map +1 -0
  92. package/dist/types/components/popover/Popover.vue.d.ts.map +1 -1
  93. package/dist/types/components/range-slider/RangeSlider.vue.d.ts +1 -0
  94. package/dist/types/components/range-slider/RangeSlider.vue.d.ts.map +1 -1
  95. package/dist/types/components/scroll-area/composables/useLayerLock.d.ts.map +1 -1
  96. package/dist/types/components/slider/Slider.vue.d.ts +1 -0
  97. package/dist/types/components/slider/Slider.vue.d.ts.map +1 -1
  98. package/dist/types/components/slider/slider.variants.d.ts.map +1 -1
  99. package/dist/types/components/tooltip/Tooltip.vue.d.ts +4 -15
  100. package/dist/types/components/tooltip/Tooltip.vue.d.ts.map +1 -1
  101. package/dist/types/components/tooltip/TooltipBubble.vue.d.ts +20 -0
  102. package/dist/types/components/tooltip/TooltipBubble.vue.d.ts.map +1 -0
  103. package/dist/types/components/tooltip/TooltipDirectiveRoot.d.ts +33 -0
  104. package/dist/types/components/tooltip/TooltipDirectiveRoot.d.ts.map +1 -0
  105. package/dist/types/components/tooltip/composables/useTooltipTarget.d.ts +2 -0
  106. package/dist/types/components/tooltip/composables/useTooltipTarget.d.ts.map +1 -0
  107. package/dist/types/components/tooltip/directive.d.ts +4 -0
  108. package/dist/types/components/tooltip/directive.d.ts.map +1 -0
  109. package/dist/types/components/tooltip/types.d.ts +14 -0
  110. package/dist/types/components/tooltip/types.d.ts.map +1 -0
  111. package/dist/types/components/tooltip/utils/directiveContext.d.ts +10 -0
  112. package/dist/types/components/tooltip/utils/directiveContext.d.ts.map +1 -0
  113. package/dist/types/components/tree-select/TreeSelect.vue.d.ts +6 -1
  114. package/dist/types/components/tree-select/TreeSelect.vue.d.ts.map +1 -1
  115. package/dist/types/components/tree-select/TreeSelectSearch.vue.d.ts +22 -0
  116. package/dist/types/components/tree-select/TreeSelectSearch.vue.d.ts.map +1 -0
  117. package/dist/types/components/tree-select/composables/useTreeSelect.d.ts +35 -0
  118. package/dist/types/components/tree-select/composables/useTreeSelect.d.ts.map +1 -0
  119. package/dist/types/components/tree-select/tree-select.variants.d.ts +1 -1
  120. package/dist/types/components/tree-select/tree-select.variants.d.ts.map +1 -1
  121. package/dist/types/components/tree-select/utils/filterTree.d.ts +7 -0
  122. package/dist/types/components/tree-select/utils/filterTree.d.ts.map +1 -0
  123. package/dist/types/index.d.ts +10 -0
  124. package/dist/types/index.d.ts.map +1 -1
  125. package/dist/types/lib/anchored-overlay.d.ts +3 -7
  126. package/dist/types/lib/anchored-overlay.d.ts.map +1 -1
  127. package/dist/types/lib/dialog-focus.d.ts +2 -0
  128. package/dist/types/lib/dialog-focus.d.ts.map +1 -0
  129. package/dist/types/lib/overlay-portal.d.ts +6 -0
  130. package/dist/types/lib/overlay-portal.d.ts.map +1 -0
  131. package/dist/types/lib/overlay-positioner.d.ts +3 -0
  132. package/dist/types/lib/overlay-positioner.d.ts.map +1 -0
  133. package/dist/types/lib/pointer-corridor.d.ts +7 -0
  134. package/dist/types/lib/pointer-corridor.d.ts.map +1 -0
  135. package/dist/types/lib/useDirection.d.ts +7 -0
  136. package/dist/types/lib/useDirection.d.ts.map +1 -0
  137. package/dist/types/locale/en-US.d.ts.map +1 -1
  138. package/dist/types/locale/index.d.ts.map +1 -1
  139. package/dist/types/locale/types.d.ts +13 -0
  140. package/dist/types/locale/types.d.ts.map +1 -1
  141. package/dist/types/locale/zh-CN.d.ts.map +1 -1
  142. package/package.json +1 -1
  143. package/src/components/alert-dialog/AlertDialog.vue +7 -4
  144. package/src/components/badge/badge.variants.ts +1 -1
  145. package/src/components/dialog/Dialog.vue +7 -4
  146. package/src/components/dialog/ModalContent.vue +19 -0
  147. package/src/components/dropdown-menu/DropdownMenu.vue +1 -1
  148. package/src/components/hover-card/HoverCard.vue +34 -16
  149. package/src/components/hover-card/HoverCardAnchor.vue +16 -0
  150. package/src/components/hover-card/composables/useHoverCardAnchor.ts +160 -0
  151. package/src/components/image/Image.vue +11 -12
  152. package/src/components/image/composables/useImage.ts +6 -3
  153. package/src/components/image/composables/useImageGroupState.ts +9 -1
  154. package/src/components/image/image.variants.ts +13 -1
  155. package/src/components/lightbox/Lightbox.vue +23 -17
  156. package/src/components/lightbox/LightboxChrome.vue +7 -1
  157. package/src/components/lightbox/LightboxToolbar.vue +16 -2
  158. package/src/components/lightbox/composables/useLightboxFrames.ts +108 -12
  159. package/src/components/lightbox/composables/useLightboxLarge.ts +4 -1
  160. package/src/components/lightbox/composables/useLightboxLayout.ts +44 -0
  161. package/src/components/lightbox/composables/useLightboxMotion.ts +3 -1
  162. package/src/components/lightbox/composables/useLightboxPhase.ts +12 -4
  163. package/src/components/lightbox/composables/useLightboxPose.ts +20 -19
  164. package/src/components/lightbox/composables/useLightboxRotation.ts +14 -4
  165. package/src/components/lightbox/composables/useLightboxZoom.ts +51 -9
  166. package/src/components/lightbox/lightbox.variants.ts +5 -0
  167. package/src/components/lightbox/types.ts +5 -1
  168. package/src/components/lightbox/utils/clip.ts +117 -0
  169. package/src/components/lightbox/utils/pose.ts +36 -19
  170. package/src/components/lightbox/utils/source.ts +17 -0
  171. package/src/components/lightbox/utils/zoom.ts +21 -7
  172. package/src/components/pagination/Pagination.vue +118 -0
  173. package/src/components/pagination/PaginationContent.vue +29 -0
  174. package/src/components/pagination/PaginationControl.vue +42 -0
  175. package/src/components/pagination/PaginationEllipsis.vue +67 -0
  176. package/src/components/pagination/PaginationInfo.vue +18 -0
  177. package/src/components/pagination/PaginationJump.vue +32 -0
  178. package/src/components/pagination/PaginationPage.vue +34 -0
  179. package/src/components/pagination/PaginationPages.vue +43 -0
  180. package/src/components/pagination/PaginationPopup.vue +92 -0
  181. package/src/components/pagination/PaginationSize.vue +30 -0
  182. package/src/components/pagination/composables/usePagination.ts +76 -0
  183. package/src/components/pagination/composables/usePaginationEllipsis.ts +269 -0
  184. package/src/components/pagination/composables/usePaginationJump.ts +23 -0
  185. package/src/components/pagination/composables/usePaginationPageTooltip.ts +23 -0
  186. package/src/components/pagination/composables/usePaginationWindow.ts +116 -0
  187. package/src/components/pagination/context.ts +23 -0
  188. package/src/components/pagination/pagination.variants.ts +32 -0
  189. package/src/components/pagination/types.ts +19 -0
  190. package/src/components/pagination/utils/ranges.ts +12 -0
  191. package/src/components/popover/Popover.vue +6 -2
  192. package/src/components/range-slider/RangeSlider.vue +6 -0
  193. package/src/components/scroll-area/composables/useLayerLock.ts +8 -9
  194. package/src/components/scroll-area/composables/useWheelRedirect.ts +1 -1
  195. package/src/components/skeleton/LICENSE +24 -0
  196. package/src/components/slider/Slider.vue +6 -0
  197. package/src/components/slider/slider.variants.ts +1 -0
  198. package/src/components/tooltip/Tooltip.vue +10 -33
  199. package/src/components/tooltip/TooltipBubble.vue +36 -0
  200. package/src/components/tooltip/TooltipDirectiveRoot.ts +61 -0
  201. package/src/components/tooltip/composables/useTooltipTarget.ts +56 -0
  202. package/src/components/tooltip/directive.ts +54 -0
  203. package/src/components/tooltip/types.ts +15 -0
  204. package/src/components/tooltip/utils/directiveContext.ts +32 -0
  205. package/src/components/tree-select/TreeSelect.vue +90 -61
  206. package/src/components/tree-select/TreeSelectSearch.vue +48 -0
  207. package/src/components/tree-select/composables/useTreeSelect.ts +130 -0
  208. package/src/components/tree-select/tree-select.variants.ts +2 -2
  209. package/src/components/tree-select/utils/filterTree.ts +19 -0
  210. package/src/index.ts +10 -0
  211. package/src/lib/anchored-overlay.ts +2 -5
  212. package/src/lib/dialog-focus.ts +13 -0
  213. package/src/lib/overlay-portal.ts +8 -0
  214. package/src/lib/overlay-positioner.ts +25 -0
  215. package/src/lib/pointer-corridor.ts +26 -0
  216. package/src/lib/useDirection.ts +31 -0
  217. package/src/locale/en-US.ts +15 -1
  218. package/src/locale/index.ts +1 -0
  219. package/src/locale/types.ts +13 -0
  220. package/src/locale/zh-CN.ts +15 -1
  221. package/src/styles/interaction.css +26 -3
  222. package/src/styles/motion.css +14 -2
  223. package/src/styles/semantic.css +5 -1
@@ -0,0 +1,31 @@
1
+ import { computed, shallowRef, watchEffect } from 'vue'
2
+ import { injectConfigProviderContext, type Direction } from 'reka-ui'
3
+
4
+ export function useDirection(dir: () => Direction | undefined) {
5
+ const root = shallowRef<HTMLElement>()
6
+ const context = injectConfigProviderContext(null)
7
+ const inherited = shallowRef<Direction>('ltr')
8
+ const rootDirection = computed(() => dir() ?? context?.dir?.value)
9
+ const direction = computed(() => rootDirection.value ?? inherited.value)
10
+
11
+ watchEffect(
12
+ onCleanup => {
13
+ const element = root.value
14
+ const view = element?.ownerDocument.defaultView
15
+ if (!element || !view || rootDirection.value) return
16
+
17
+ const update = () => {
18
+ inherited.value = view.getComputedStyle(element).direction === 'rtl' ? 'rtl' : 'ltr'
19
+ }
20
+
21
+ update()
22
+ const observer = new view.MutationObserver(update)
23
+ for (let ancestor: HTMLElement | null = element; ancestor; ancestor = ancestor.parentElement)
24
+ observer.observe(ancestor, { attributes: true, attributeFilter: ['dir'] })
25
+ onCleanup(() => observer.disconnect())
26
+ },
27
+ { flush: 'post' },
28
+ )
29
+
30
+ return { root, direction, rootDirection }
31
+ }
@@ -16,6 +16,16 @@ export const enUS: UiMessages = {
16
16
  next: 'Next notice',
17
17
  },
18
18
  pagination: {
19
+ rangeLabel: (from, to, total) =>
20
+ total ? String(from) + '–' + to + ' of ' + total + ' items' : '0 items',
21
+ pageCountLabel: (page, count) => 'Page ' + page + ' of ' + count,
22
+ pageSizeLabel: 'Items per page',
23
+ pageSizeOption: n => String(n) + ' / page',
24
+ jumpLabel: 'Go to page',
25
+ previousPagesLabel: n => 'Go back ' + n + ' pages',
26
+ nextPagesLabel: n => 'Go forward ' + n + ' pages',
27
+ choosePage: 'Choose a page',
28
+ choosePageHint: 'Press ArrowDown or ArrowUp to choose a page',
19
29
  navLabel: 'Pagination',
20
30
  prev: 'Previous page',
21
31
  next: 'Next page',
@@ -78,7 +88,8 @@ export const enUS: UiMessages = {
78
88
  lightbox: {
79
89
  zoomIn: 'Zoom in',
80
90
  zoomOut: 'Zoom out',
81
- resetZoom: 'Reset zoom',
91
+ resetZoom: 'Fit to window',
92
+ actualSize: 'Actual size',
82
93
  rotate: 'Rotate',
83
94
  download: 'Download',
84
95
  loadingLarge: 'Loading HD',
@@ -94,6 +105,9 @@ export const enUS: UiMessages = {
94
105
  show: 'Show password',
95
106
  hide: 'Hide password',
96
107
  },
108
+ treeSelect: {
109
+ search: 'Search nodes',
110
+ },
97
111
  combobox: {
98
112
  placeholder: 'Type or choose',
99
113
  toggle: 'Show options',
@@ -36,6 +36,7 @@ function merge(base: UiMessages, patch: PartialUiMessages): UiMessages {
36
36
  chip: { ...base.chip, ...patch.chip },
37
37
  numberInput: { ...base.numberInput, ...patch.numberInput },
38
38
  passwordInput: { ...base.passwordInput, ...patch.passwordInput },
39
+ treeSelect: { ...base.treeSelect, ...patch.treeSelect },
39
40
  combobox: { ...base.combobox, ...patch.combobox },
40
41
  slider: { ...base.slider, ...patch.slider },
41
42
  pinInput: { ...base.pinInput, ...patch.pinInput },
@@ -14,6 +14,15 @@ export interface UiMessages {
14
14
  next: string
15
15
  }
16
16
  pagination: {
17
+ rangeLabel: (from: number, to: number, total: number) => string
18
+ pageCountLabel: (page: number, count: number) => string
19
+ pageSizeLabel: string
20
+ pageSizeOption: (n: number) => string
21
+ jumpLabel: string
22
+ previousPagesLabel: (n: number) => string
23
+ nextPagesLabel: (n: number) => string
24
+ choosePage: string
25
+ choosePageHint: string
17
26
  navLabel: string
18
27
  prev: string
19
28
  next: string
@@ -77,6 +86,7 @@ export interface UiMessages {
77
86
  zoomIn: string
78
87
  zoomOut: string
79
88
  resetZoom: string
89
+ actualSize: string
80
90
  rotate: string
81
91
  download: string
82
92
  loadingLarge: string
@@ -92,6 +102,9 @@ export interface UiMessages {
92
102
  show: string
93
103
  hide: string
94
104
  }
105
+ treeSelect: {
106
+ search: string
107
+ }
95
108
  combobox: {
96
109
  placeholder: string
97
110
  toggle: string
@@ -16,6 +16,16 @@ export const zhCN: UiMessages = {
16
16
  next: '下一条',
17
17
  },
18
18
  pagination: {
19
+ rangeLabel: (from, to, total) =>
20
+ total ? String(from) + '–' + to + ' / 共 ' + total + ' 条' : '共 0 条',
21
+ pageCountLabel: (page, count) => '第 ' + page + ' / ' + count + ' 页',
22
+ pageSizeLabel: '每页条数',
23
+ pageSizeOption: n => String(n) + ' / 页',
24
+ jumpLabel: '跳至页码',
25
+ previousPagesLabel: n => '向前跳 ' + n + ' 页',
26
+ nextPagesLabel: n => '向后跳 ' + n + ' 页',
27
+ choosePage: '选择页码',
28
+ choosePageHint: '按向下或向上箭头选择页码',
19
29
  navLabel: '翻页',
20
30
  prev: '上一页',
21
31
  next: '下一页',
@@ -78,7 +88,8 @@ export const zhCN: UiMessages = {
78
88
  lightbox: {
79
89
  zoomIn: '放大',
80
90
  zoomOut: '缩小',
81
- resetZoom: '恢复原始大小',
91
+ resetZoom: '适应窗口',
92
+ actualSize: '原始尺寸',
82
93
  rotate: '旋转',
83
94
  download: '下载',
84
95
  loadingLarge: '正在加载原图',
@@ -94,6 +105,9 @@ export const zhCN: UiMessages = {
94
105
  show: '显示密码',
95
106
  hide: '隐藏密码',
96
107
  },
108
+ treeSelect: {
109
+ search: '搜索节点',
110
+ },
97
111
  combobox: {
98
112
  placeholder: '输入或选择',
99
113
  toggle: '展开选项',
@@ -266,20 +266,43 @@
266
266
  }
267
267
 
268
268
  @utility hn-skeleton {
269
- background-color: var(--hn-bg-subtle);
269
+ position: relative;
270
+ overflow: hidden;
271
+ background-color: var(--hn-skeleton-bg);
270
272
  border-radius: var(--hn-radius-md);
271
273
  color: transparent;
272
274
  cursor: default;
273
275
  pointer-events: none;
274
276
  user-select: none;
275
- animation: hn-skeleton var(--hn-skeleton-duration) var(--hn-ease-move) infinite;
277
+
278
+ &::after {
279
+ content: '';
280
+ position: absolute;
281
+ inset: 0;
282
+ z-index: 1;
283
+ transform: translateX(-100%);
284
+ background: linear-gradient(
285
+ 90deg,
286
+ rgb(255 255 255 / 0),
287
+ var(--hn-skeleton-wave),
288
+ rgb(255 255 255 / 0)
289
+ );
290
+ animation: hn-skeleton var(--hn-skeleton-duration) var(--hn-ease-move) infinite;
291
+ }
292
+
293
+ &:dir(rtl)::after {
294
+ animation-name: hn-skeleton-rtl;
295
+ }
276
296
 
277
297
  & * {
278
298
  visibility: hidden;
279
299
  }
280
300
 
281
301
  @media (prefers-reduced-motion: reduce) {
282
- animation: none;
302
+ &::after,
303
+ &:dir(rtl)::after {
304
+ animation: none;
305
+ }
283
306
  }
284
307
  }
285
308
 
@@ -5,8 +5,20 @@
5
5
  }
6
6
 
7
7
  @keyframes hn-skeleton {
8
- 50% {
9
- background-color: var(--hn-bg-inset);
8
+ from {
9
+ transform: translateX(-100%);
10
+ }
11
+ to {
12
+ transform: translateX(100%);
13
+ }
14
+ }
15
+
16
+ @keyframes hn-skeleton-rtl {
17
+ from {
18
+ transform: translateX(100%);
19
+ }
20
+ to {
21
+ transform: translateX(-100%);
10
22
  }
11
23
  }
12
24
 
@@ -72,6 +72,8 @@
72
72
  0 40px 80px -24px rgb(0 0 0 / 0.16);
73
73
 
74
74
  --hn-scroll-shadow: rgb(0 0 0 / 0.1);
75
+ --hn-skeleton-bg: var(--color-neutral-200);
76
+ --hn-skeleton-wave: rgb(255 255 255 / 0.4);
75
77
 
76
78
  --hn-z-overlay: 100;
77
79
  --hn-z-toast: 110;
@@ -146,6 +148,8 @@
146
148
  0 32px 64px -16px rgb(0 0 0 / 0.55);
147
149
 
148
150
  --hn-scroll-shadow: rgb(0 0 0 / 0.5);
151
+ --hn-skeleton-bg: rgb(255 255 255 / 0.06);
152
+ --hn-skeleton-wave: rgb(255 255 255 / 0.04);
149
153
  }
150
154
 
151
155
  :root {
@@ -202,7 +206,7 @@
202
206
  --hn-travel-md: 10px;
203
207
  --hn-stagger: 24ms;
204
208
  --hn-spin-duration: 700ms;
205
- --hn-skeleton-duration: 2200ms;
209
+ --hn-skeleton-duration: 1200ms;
206
210
  --hn-ripple-in: 75ms;
207
211
  --hn-ripple-out: 375ms;
208
212
  --hn-pulse-duration: 1500ms;