@hina-ui/vue 1.7.5 → 1.7.6

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 (528) hide show
  1. package/README.md +37 -0
  2. package/dist/index.js +2222 -987
  3. package/dist/index.js.map +1 -1
  4. package/dist/shared/behavior/anchor-follow.ts +95 -0
  5. package/dist/shared/behavior/form.ts +187 -0
  6. package/dist/shared/behavior/ripple.ts +222 -0
  7. package/dist/shared/behavior/spoiler/painter.ts +197 -0
  8. package/dist/shared/behavior/spoiler/worklet.ts +199 -0
  9. package/dist/shared/behavior/toast.ts +243 -0
  10. package/dist/shared/lib/anchor.ts +83 -0
  11. package/dist/shared/lib/banner.ts +10 -0
  12. package/dist/shared/lib/calendar/format.ts +23 -0
  13. package/dist/shared/lib/caret.ts +48 -0
  14. package/dist/shared/lib/collapse.ts +29 -0
  15. package/dist/shared/lib/command-palette/hotkey.ts +27 -0
  16. package/dist/shared/lib/command-palette/match.ts +92 -0
  17. package/dist/shared/lib/data-list.ts +40 -0
  18. package/dist/shared/lib/data-table/column-sizing-styles.ts +41 -0
  19. package/dist/shared/lib/data-table/column-sizing.ts +101 -0
  20. package/dist/shared/lib/data-table/csv.ts +51 -0
  21. package/dist/shared/lib/data-table/layout.ts +199 -0
  22. package/dist/shared/lib/data-table/resize.ts +66 -0
  23. package/dist/shared/lib/data-table/state.ts +226 -0
  24. package/dist/shared/lib/data-table/utils.ts +80 -0
  25. package/dist/shared/lib/date-range-field/validity.ts +21 -0
  26. package/dist/shared/lib/date.ts +111 -0
  27. package/dist/shared/lib/field-focus.ts +36 -0
  28. package/dist/shared/lib/file-upload/select.ts +58 -0
  29. package/dist/shared/lib/file-upload/size.ts +16 -0
  30. package/dist/shared/lib/form/errors.ts +48 -0
  31. package/dist/shared/lib/form/focus.ts +10 -0
  32. package/dist/shared/lib/form/standard-schema.ts +26 -0
  33. package/dist/shared/lib/form/values.ts +23 -0
  34. package/dist/shared/lib/highlighter.ts +98 -0
  35. package/dist/shared/lib/iris-origin.ts +40 -0
  36. package/dist/shared/lib/lightbox/clip.ts +117 -0
  37. package/dist/shared/lib/lightbox/download.ts +29 -0
  38. package/dist/shared/lib/lightbox/gesture.ts +54 -0
  39. package/dist/shared/lib/lightbox/paging.ts +33 -0
  40. package/dist/shared/lib/lightbox/pose.ts +142 -0
  41. package/dist/shared/lib/lightbox/source.ts +17 -0
  42. package/dist/shared/lib/lightbox/types.ts +14 -0
  43. package/dist/shared/lib/lightbox/zoom.ts +127 -0
  44. package/dist/shared/lib/meter-group.ts +16 -0
  45. package/dist/shared/lib/overlay-anchor.ts +42 -0
  46. package/dist/shared/lib/pagination.ts +16 -0
  47. package/dist/shared/lib/pointer-corridor.ts +26 -0
  48. package/dist/shared/lib/qr-code-export.ts +68 -0
  49. package/dist/shared/lib/range-calendar/limit.ts +11 -0
  50. package/dist/shared/lib/rating.ts +4 -0
  51. package/dist/shared/lib/relative-time.ts +20 -0
  52. package/dist/shared/lib/scroll-area.ts +77 -0
  53. package/dist/shared/lib/scroll-restore.ts +148 -0
  54. package/dist/shared/lib/toast-layout.ts +42 -0
  55. package/dist/shared/lib/tree/selection.ts +131 -0
  56. package/dist/shared/lib/tree-select/filter.ts +19 -0
  57. package/dist/shared/lib/virtual/choices.ts +193 -0
  58. package/dist/shared/lib/virtual/collection.ts +71 -0
  59. package/dist/shared/lib/virtual/filter.ts +26 -0
  60. package/dist/shared/lib/virtual/flow.ts +32 -0
  61. package/dist/shared/lib/virtual/list.ts +63 -0
  62. package/dist/shared/lib/virtual/navigation.ts +26 -0
  63. package/dist/shared/lib/virtual/tree.ts +98 -0
  64. package/dist/shared/locale/en-US.ts +220 -0
  65. package/dist/shared/locale/index.ts +52 -0
  66. package/dist/shared/locale/types.ts +225 -0
  67. package/dist/shared/locale/zh-CN.ts +215 -0
  68. package/dist/shared/primitives/number-field/LICENSE +21 -0
  69. package/dist/shared/primitives/number-field/index.ts +407 -0
  70. package/dist/shared/styles/semantic.css +10 -2
  71. package/dist/shared/types/autocomplete.ts +16 -0
  72. package/dist/shared/types/data-table.ts +170 -0
  73. package/dist/shared/types/pagination.ts +19 -0
  74. package/dist/shared/types/select.ts +23 -0
  75. package/dist/shared/types/tree-select.ts +34 -0
  76. package/dist/shared/types/tree.ts +20 -0
  77. package/dist/types/shared/src/behavior/anchor-follow.d.ts +13 -0
  78. package/dist/types/shared/src/behavior/anchor-follow.d.ts.map +1 -0
  79. package/dist/types/shared/src/behavior/form.d.ts +24 -0
  80. package/dist/types/shared/src/behavior/form.d.ts.map +1 -0
  81. package/dist/types/shared/src/behavior/ripple.d.ts +11 -0
  82. package/dist/types/shared/src/behavior/ripple.d.ts.map +1 -0
  83. package/dist/types/shared/src/behavior/spoiler/painter.d.ts +35 -0
  84. package/dist/types/shared/src/behavior/spoiler/painter.d.ts.map +1 -0
  85. package/dist/types/shared/src/behavior/spoiler/worklet.d.ts +2 -0
  86. package/dist/types/shared/src/behavior/spoiler/worklet.d.ts.map +1 -0
  87. package/dist/types/shared/src/behavior/toast.d.ts +72 -0
  88. package/dist/types/shared/src/behavior/toast.d.ts.map +1 -0
  89. package/dist/types/shared/src/lib/anchor.d.ts +31 -0
  90. package/dist/types/shared/src/lib/anchor.d.ts.map +1 -0
  91. package/dist/types/shared/src/lib/banner.d.ts +3 -0
  92. package/dist/types/shared/src/lib/banner.d.ts.map +1 -0
  93. package/dist/types/shared/src/lib/calendar/format.d.ts +7 -0
  94. package/dist/types/shared/src/lib/calendar/format.d.ts.map +1 -0
  95. package/dist/types/shared/src/lib/caret.d.ts +2 -0
  96. package/dist/types/shared/src/lib/caret.d.ts.map +1 -0
  97. package/dist/types/shared/src/lib/collapse.d.ts +9 -0
  98. package/dist/types/shared/src/lib/collapse.d.ts.map +1 -0
  99. package/dist/types/shared/src/lib/command-palette/hotkey.d.ts +9 -0
  100. package/dist/types/shared/src/lib/command-palette/hotkey.d.ts.map +1 -0
  101. package/dist/types/shared/src/lib/command-palette/match.d.ts +21 -0
  102. package/dist/types/shared/src/lib/command-palette/match.d.ts.map +1 -0
  103. package/dist/types/shared/src/lib/data-list.d.ts +7 -0
  104. package/dist/types/shared/src/lib/data-list.d.ts.map +1 -0
  105. package/dist/types/shared/src/lib/data-table/column-sizing-styles.d.ts +8 -0
  106. package/dist/types/shared/src/lib/data-table/column-sizing-styles.d.ts.map +1 -0
  107. package/dist/types/shared/src/lib/data-table/column-sizing.d.ts +22 -0
  108. package/dist/types/shared/src/lib/data-table/column-sizing.d.ts.map +1 -0
  109. package/dist/types/shared/src/lib/data-table/csv.d.ts +5 -0
  110. package/dist/types/shared/src/lib/data-table/csv.d.ts.map +1 -0
  111. package/dist/types/shared/src/lib/data-table/layout.d.ts +28 -0
  112. package/dist/types/shared/src/lib/data-table/layout.d.ts.map +1 -0
  113. package/dist/types/shared/src/lib/data-table/resize.d.ts +15 -0
  114. package/dist/types/shared/src/lib/data-table/resize.d.ts.map +1 -0
  115. package/dist/types/shared/src/lib/data-table/state.d.ts +103 -0
  116. package/dist/types/shared/src/lib/data-table/state.d.ts.map +1 -0
  117. package/dist/types/shared/src/lib/data-table/utils.d.ts +11 -0
  118. package/dist/types/shared/src/lib/data-table/utils.d.ts.map +1 -0
  119. package/dist/types/shared/src/lib/date-range-field/validity.d.ts +12 -0
  120. package/dist/types/shared/src/lib/date-range-field/validity.d.ts.map +1 -0
  121. package/dist/types/shared/src/lib/date.d.ts +28 -0
  122. package/dist/types/shared/src/lib/date.d.ts.map +1 -0
  123. package/dist/types/shared/src/lib/field-focus.d.ts +2 -0
  124. package/dist/types/shared/src/lib/field-focus.d.ts.map +1 -0
  125. package/dist/types/shared/src/lib/file-upload/select.d.ts +17 -0
  126. package/dist/types/shared/src/lib/file-upload/select.d.ts.map +1 -0
  127. package/dist/types/shared/src/lib/file-upload/size.d.ts +2 -0
  128. package/dist/types/shared/src/lib/file-upload/size.d.ts.map +1 -0
  129. package/dist/types/shared/src/lib/form/errors.d.ts +7 -0
  130. package/dist/types/shared/src/lib/form/errors.d.ts.map +1 -0
  131. package/dist/types/shared/src/lib/form/focus.d.ts +2 -0
  132. package/dist/types/shared/src/lib/form/focus.d.ts.map +1 -0
  133. package/dist/types/shared/src/lib/form/standard-schema.d.ts +23 -0
  134. package/dist/types/shared/src/lib/form/standard-schema.d.ts.map +1 -0
  135. package/dist/types/shared/src/lib/form/values.d.ts +3 -0
  136. package/dist/types/shared/src/lib/form/values.d.ts.map +1 -0
  137. package/dist/types/shared/src/lib/highlighter.d.ts +4 -0
  138. package/dist/types/shared/src/lib/highlighter.d.ts.map +1 -0
  139. package/dist/types/shared/src/lib/iris-origin.d.ts +6 -0
  140. package/dist/types/shared/src/lib/iris-origin.d.ts.map +1 -0
  141. package/dist/types/shared/src/lib/lightbox/clip.d.ts +16 -0
  142. package/dist/types/shared/src/lib/lightbox/clip.d.ts.map +1 -0
  143. package/dist/types/shared/src/lib/lightbox/download.d.ts +3 -0
  144. package/dist/types/shared/src/lib/lightbox/download.d.ts.map +1 -0
  145. package/dist/types/shared/src/lib/lightbox/gesture.d.ts +26 -0
  146. package/dist/types/shared/src/lib/lightbox/gesture.d.ts.map +1 -0
  147. package/dist/types/shared/src/lib/lightbox/paging.d.ts +9 -0
  148. package/dist/types/shared/src/lib/lightbox/paging.d.ts.map +1 -0
  149. package/dist/types/shared/src/lib/lightbox/pose.d.ts +38 -0
  150. package/dist/types/shared/src/lib/lightbox/pose.d.ts.map +1 -0
  151. package/dist/types/shared/src/lib/lightbox/source.d.ts +4 -0
  152. package/dist/types/shared/src/lib/lightbox/source.d.ts.map +1 -0
  153. package/dist/types/shared/src/lib/lightbox/types.d.ts +16 -0
  154. package/dist/types/shared/src/lib/lightbox/types.d.ts.map +1 -0
  155. package/dist/types/shared/src/lib/lightbox/zoom.d.ts +40 -0
  156. package/dist/types/shared/src/lib/lightbox/zoom.d.ts.map +1 -0
  157. package/dist/types/shared/src/lib/meter-group.d.ts +5 -0
  158. package/dist/types/shared/src/lib/meter-group.d.ts.map +1 -0
  159. package/dist/types/shared/src/lib/overlay-anchor.d.ts +10 -0
  160. package/dist/types/shared/src/lib/overlay-anchor.d.ts.map +1 -0
  161. package/dist/types/shared/src/lib/pagination.d.ts +4 -0
  162. package/dist/types/shared/src/lib/pagination.d.ts.map +1 -0
  163. package/dist/types/shared/src/lib/pointer-corridor.d.ts +7 -0
  164. package/dist/types/shared/src/lib/pointer-corridor.d.ts.map +1 -0
  165. package/dist/types/shared/src/lib/qr-code-export.d.ts +6 -0
  166. package/dist/types/shared/src/lib/qr-code-export.d.ts.map +1 -0
  167. package/dist/types/shared/src/lib/range-calendar/limit.d.ts +3 -0
  168. package/dist/types/shared/src/lib/range-calendar/limit.d.ts.map +1 -0
  169. package/dist/types/shared/src/lib/rating.d.ts +2 -0
  170. package/dist/types/shared/src/lib/rating.d.ts.map +1 -0
  171. package/dist/types/shared/src/lib/relative-time.d.ts +2 -0
  172. package/dist/types/shared/src/lib/relative-time.d.ts.map +1 -0
  173. package/dist/types/shared/src/lib/scroll-area.d.ts +50 -0
  174. package/dist/types/shared/src/lib/scroll-area.d.ts.map +1 -0
  175. package/dist/types/shared/src/lib/scroll-restore.d.ts +34 -0
  176. package/dist/types/shared/src/lib/scroll-restore.d.ts.map +1 -0
  177. package/dist/types/shared/src/lib/toast-layout.d.ts +13 -0
  178. package/dist/types/shared/src/lib/toast-layout.d.ts.map +1 -0
  179. package/dist/types/shared/src/lib/tree/selection.d.ts +23 -0
  180. package/dist/types/shared/src/lib/tree/selection.d.ts.map +1 -0
  181. package/dist/types/shared/src/lib/tree-select/filter.d.ts +7 -0
  182. package/dist/types/shared/src/lib/tree-select/filter.d.ts.map +1 -0
  183. package/dist/types/shared/src/lib/virtual/choices.d.ts +59 -0
  184. package/dist/types/shared/src/lib/virtual/choices.d.ts.map +1 -0
  185. package/dist/types/shared/src/lib/virtual/collection.d.ts +25 -0
  186. package/dist/types/shared/src/lib/virtual/collection.d.ts.map +1 -0
  187. package/dist/types/shared/src/lib/virtual/flow.d.ts +18 -0
  188. package/dist/types/shared/src/lib/virtual/flow.d.ts.map +1 -0
  189. package/dist/types/shared/src/lib/virtual/list.d.ts +46 -0
  190. package/dist/types/shared/src/lib/virtual/list.d.ts.map +1 -0
  191. package/dist/types/shared/src/lib/virtual/navigation.d.ts +3 -0
  192. package/dist/types/shared/src/lib/virtual/navigation.d.ts.map +1 -0
  193. package/dist/types/shared/src/lib/virtual/tree.d.ts +31 -0
  194. package/dist/types/shared/src/lib/virtual/tree.d.ts.map +1 -0
  195. package/dist/types/shared/src/locale/en-US.d.ts +3 -0
  196. package/dist/types/shared/src/locale/en-US.d.ts.map +1 -0
  197. package/dist/types/shared/src/locale/index.d.ts +6 -0
  198. package/dist/types/shared/src/locale/index.d.ts.map +1 -0
  199. package/dist/types/shared/src/locale/types.d.ts +235 -0
  200. package/dist/types/shared/src/locale/types.d.ts.map +1 -0
  201. package/dist/types/shared/src/locale/zh-CN.d.ts +3 -0
  202. package/dist/types/shared/src/locale/zh-CN.d.ts.map +1 -0
  203. package/dist/types/shared/src/primitives/number-field/index.d.ts +155 -0
  204. package/dist/types/shared/src/primitives/number-field/index.d.ts.map +1 -0
  205. package/dist/types/shared/src/types/autocomplete.d.ts +14 -0
  206. package/dist/types/shared/src/types/autocomplete.d.ts.map +1 -0
  207. package/dist/types/shared/src/types/data-table.d.ts +169 -0
  208. package/dist/types/shared/src/types/data-table.d.ts.map +1 -0
  209. package/dist/types/shared/src/types/pagination.d.ts +23 -0
  210. package/dist/types/shared/src/types/pagination.d.ts.map +1 -0
  211. package/dist/types/shared/src/types/select.d.ts +14 -0
  212. package/dist/types/shared/src/types/select.d.ts.map +1 -0
  213. package/dist/types/shared/src/types/tree-select.d.ts +10 -0
  214. package/dist/types/shared/src/types/tree-select.d.ts.map +1 -0
  215. package/dist/types/shared/src/types/tree.d.ts +18 -0
  216. package/dist/types/shared/src/types/tree.d.ts.map +1 -0
  217. package/dist/types/shared/src/variants/autocomplete.d.ts +3 -0
  218. package/dist/types/shared/src/variants/autocomplete.d.ts.map +1 -0
  219. package/dist/types/shared/src/variants/editable.d.ts +52 -0
  220. package/dist/types/shared/src/variants/editable.d.ts.map +1 -0
  221. package/dist/types/shared/src/variants/float-button.d.ts +74 -0
  222. package/dist/types/shared/src/variants/float-button.d.ts.map +1 -0
  223. package/dist/types/shared/src/variants/split-button.d.ts +18 -0
  224. package/dist/types/shared/src/variants/split-button.d.ts.map +1 -0
  225. package/dist/types/vue/src/components/accordion/AccordionTrigger.vue.d.ts.map +1 -1
  226. package/dist/types/vue/src/components/anchor/composables/useAnchor.d.ts +2 -7
  227. package/dist/types/vue/src/components/anchor/composables/useAnchor.d.ts.map +1 -1
  228. package/dist/types/vue/src/components/anchor/composables/useAnchorFollow.d.ts.map +1 -1
  229. package/dist/types/vue/src/components/anchor/composables/useScrollSpy.d.ts +2 -5
  230. package/dist/types/vue/src/components/anchor/composables/useScrollSpy.d.ts.map +1 -1
  231. package/dist/types/vue/src/components/anchor/types.d.ts +1 -8
  232. package/dist/types/vue/src/components/anchor/types.d.ts.map +1 -1
  233. package/dist/types/vue/src/components/autocomplete/autocomplete.variants.d.ts +1 -1
  234. package/dist/types/vue/src/components/autocomplete/autocomplete.variants.d.ts.map +1 -1
  235. package/dist/types/vue/src/components/autocomplete/types.d.ts +1 -13
  236. package/dist/types/vue/src/components/autocomplete/types.d.ts.map +1 -1
  237. package/dist/types/vue/src/components/banner/utils/direction.d.ts +1 -2
  238. package/dist/types/vue/src/components/banner/utils/direction.d.ts.map +1 -1
  239. package/dist/types/vue/src/components/calendar/utils/format.d.ts +1 -6
  240. package/dist/types/vue/src/components/calendar/utils/format.d.ts.map +1 -1
  241. package/dist/types/vue/src/components/code-block/highlighter.d.ts +1 -3
  242. package/dist/types/vue/src/components/code-block/highlighter.d.ts.map +1 -1
  243. package/dist/types/vue/src/components/collapsible/CollapsibleTrigger.vue.d.ts.map +1 -1
  244. package/dist/types/vue/src/components/command-palette/composables/useCommandItems.d.ts +1 -1
  245. package/dist/types/vue/src/components/command-palette/utils/hotkey.d.ts +1 -8
  246. package/dist/types/vue/src/components/command-palette/utils/hotkey.d.ts.map +1 -1
  247. package/dist/types/vue/src/components/command-palette/utils/match.d.ts +5 -12
  248. package/dist/types/vue/src/components/command-palette/utils/match.d.ts.map +1 -1
  249. package/dist/types/vue/src/components/data-list/composables/useDataList.d.ts.map +1 -1
  250. package/dist/types/vue/src/components/data-list/utils/scroll.d.ts +1 -2
  251. package/dist/types/vue/src/components/data-list/utils/scroll.d.ts.map +1 -1
  252. package/dist/types/vue/src/components/data-table/column-sizing-styles.d.ts +1 -3
  253. package/dist/types/vue/src/components/data-table/column-sizing-styles.d.ts.map +1 -1
  254. package/dist/types/vue/src/components/data-table/column-sizing.d.ts +1 -21
  255. package/dist/types/vue/src/components/data-table/column-sizing.d.ts.map +1 -1
  256. package/dist/types/vue/src/components/data-table/composables/useDataTable.d.ts.map +1 -1
  257. package/dist/types/vue/src/components/data-table/composables/useTableColumns.d.ts.map +1 -1
  258. package/dist/types/vue/src/components/data-table/composables/useTableDrag.d.ts.map +1 -1
  259. package/dist/types/vue/src/components/data-table/composables/useTableExport.d.ts.map +1 -1
  260. package/dist/types/vue/src/components/data-table/composables/useTableResize.d.ts.map +1 -1
  261. package/dist/types/vue/src/components/data-table/composables/useTableResizeHandles.d.ts.map +1 -1
  262. package/dist/types/vue/src/components/data-table/composables/useTableVirtual.d.ts.map +1 -1
  263. package/dist/types/vue/src/components/data-table/types.d.ts +3 -153
  264. package/dist/types/vue/src/components/data-table/types.d.ts.map +1 -1
  265. package/dist/types/vue/src/components/data-table/utils.d.ts +1 -9
  266. package/dist/types/vue/src/components/data-table/utils.d.ts.map +1 -1
  267. package/dist/types/vue/src/components/date-range-field/utils/validity.d.ts +1 -11
  268. package/dist/types/vue/src/components/date-range-field/utils/validity.d.ts.map +1 -1
  269. package/dist/types/vue/src/components/editable/editable.variants.d.ts +1 -1
  270. package/dist/types/vue/src/components/editable/editable.variants.d.ts.map +1 -1
  271. package/dist/types/vue/src/components/file-upload/utils/select.d.ts +1 -16
  272. package/dist/types/vue/src/components/file-upload/utils/select.d.ts.map +1 -1
  273. package/dist/types/vue/src/components/file-upload/utils/size.d.ts +1 -1
  274. package/dist/types/vue/src/components/file-upload/utils/size.d.ts.map +1 -1
  275. package/dist/types/vue/src/components/float-button/float-button.variants.d.ts +1 -1
  276. package/dist/types/vue/src/components/float-button/float-button.variants.d.ts.map +1 -1
  277. package/dist/types/vue/src/components/form/Form.vue.d.ts +1 -1
  278. package/dist/types/vue/src/components/form/composables/useForm.d.ts +9 -15
  279. package/dist/types/vue/src/components/form/composables/useForm.d.ts.map +1 -1
  280. package/dist/types/vue/src/components/form/standard-schema.d.ts +1 -22
  281. package/dist/types/vue/src/components/form/standard-schema.d.ts.map +1 -1
  282. package/dist/types/vue/src/components/form/utils/errors.d.ts +1 -6
  283. package/dist/types/vue/src/components/form/utils/errors.d.ts.map +1 -1
  284. package/dist/types/vue/src/components/form/utils/focus.d.ts +1 -1
  285. package/dist/types/vue/src/components/form/utils/focus.d.ts.map +1 -1
  286. package/dist/types/vue/src/components/form/utils/values.d.ts +1 -2
  287. package/dist/types/vue/src/components/form/utils/values.d.ts.map +1 -1
  288. package/dist/types/vue/src/components/form-field/FormField.vue.d.ts.map +1 -1
  289. package/dist/types/vue/src/components/lightbox/types.d.ts +1 -15
  290. package/dist/types/vue/src/components/lightbox/types.d.ts.map +1 -1
  291. package/dist/types/vue/src/components/lightbox/utils/clip.d.ts +1 -15
  292. package/dist/types/vue/src/components/lightbox/utils/clip.d.ts.map +1 -1
  293. package/dist/types/vue/src/components/lightbox/utils/download.d.ts +1 -2
  294. package/dist/types/vue/src/components/lightbox/utils/download.d.ts.map +1 -1
  295. package/dist/types/vue/src/components/lightbox/utils/gesture.d.ts +1 -25
  296. package/dist/types/vue/src/components/lightbox/utils/gesture.d.ts.map +1 -1
  297. package/dist/types/vue/src/components/lightbox/utils/paging.d.ts +1 -8
  298. package/dist/types/vue/src/components/lightbox/utils/paging.d.ts.map +1 -1
  299. package/dist/types/vue/src/components/lightbox/utils/pose.d.ts +1 -37
  300. package/dist/types/vue/src/components/lightbox/utils/pose.d.ts.map +1 -1
  301. package/dist/types/vue/src/components/lightbox/utils/source.d.ts +1 -3
  302. package/dist/types/vue/src/components/lightbox/utils/source.d.ts.map +1 -1
  303. package/dist/types/vue/src/components/lightbox/utils/zoom.d.ts +1 -39
  304. package/dist/types/vue/src/components/lightbox/utils/zoom.d.ts.map +1 -1
  305. package/dist/types/vue/src/components/meter-group/utils/tones.d.ts +1 -3
  306. package/dist/types/vue/src/components/meter-group/utils/tones.d.ts.map +1 -1
  307. package/dist/types/vue/src/components/month-grid/MonthGrid.vue.d.ts +1 -1
  308. package/dist/types/vue/src/components/multi-select/MultiSelect.vue.d.ts.map +1 -1
  309. package/dist/types/vue/src/components/pagination/composables/usePagination.d.ts +2 -2
  310. package/dist/types/vue/src/components/pagination/composables/usePagination.d.ts.map +1 -1
  311. package/dist/types/vue/src/components/pagination/types.d.ts +1 -22
  312. package/dist/types/vue/src/components/pagination/types.d.ts.map +1 -1
  313. package/dist/types/vue/src/components/pagination/utils/ranges.d.ts +1 -2
  314. package/dist/types/vue/src/components/pagination/utils/ranges.d.ts.map +1 -1
  315. package/dist/types/vue/src/components/password-input/PasswordInput.vue.d.ts +4 -1
  316. package/dist/types/vue/src/components/password-input/PasswordInput.vue.d.ts.map +1 -1
  317. package/dist/types/vue/src/components/qr-code/export.d.ts +1 -2
  318. package/dist/types/vue/src/components/qr-code/export.d.ts.map +1 -1
  319. package/dist/types/vue/src/components/range-calendar/utils/limit.d.ts +1 -2
  320. package/dist/types/vue/src/components/range-calendar/utils/limit.d.ts.map +1 -1
  321. package/dist/types/vue/src/components/range-slider/RangeSlider.vue.d.ts +2 -2
  322. package/dist/types/vue/src/components/rating/utils/fill.d.ts +1 -1
  323. package/dist/types/vue/src/components/rating/utils/fill.d.ts.map +1 -1
  324. package/dist/types/vue/src/components/ripple/useRipple.d.ts.map +1 -1
  325. package/dist/types/vue/src/components/scroll-area/ScrollArea.vue.d.ts.map +1 -1
  326. package/dist/types/vue/src/components/scroll-area/composables/useEdgeShadow.d.ts +2 -1
  327. package/dist/types/vue/src/components/scroll-area/composables/useEdgeShadow.d.ts.map +1 -1
  328. package/dist/types/vue/src/components/scroll-area/composables/useLayerLock.d.ts.map +1 -1
  329. package/dist/types/vue/src/components/scroll-area/composables/useWheelRedirect.d.ts.map +1 -1
  330. package/dist/types/vue/src/components/scroll-area/scroll-restore.d.ts +1 -33
  331. package/dist/types/vue/src/components/scroll-area/scroll-restore.d.ts.map +1 -1
  332. package/dist/types/vue/src/components/search-input/SearchInput.vue.d.ts +4 -1
  333. package/dist/types/vue/src/components/search-input/SearchInput.vue.d.ts.map +1 -1
  334. package/dist/types/vue/src/components/select/types.d.ts +1 -13
  335. package/dist/types/vue/src/components/select/types.d.ts.map +1 -1
  336. package/dist/types/vue/src/components/slider/Slider.vue.d.ts +2 -2
  337. package/dist/types/vue/src/components/split-button/split-button.variants.d.ts +1 -1
  338. package/dist/types/vue/src/components/split-button/split-button.variants.d.ts.map +1 -1
  339. package/dist/types/vue/src/components/spoiler/SpoilerPainter.d.ts +1 -34
  340. package/dist/types/vue/src/components/spoiler/SpoilerPainter.d.ts.map +1 -1
  341. package/dist/types/vue/src/components/spoiler/utils/irisOrigin.d.ts +1 -5
  342. package/dist/types/vue/src/components/spoiler/utils/irisOrigin.d.ts.map +1 -1
  343. package/dist/types/vue/src/components/spoiler/worklet.d.ts +1 -1
  344. package/dist/types/vue/src/components/spoiler/worklet.d.ts.map +1 -1
  345. package/dist/types/vue/src/components/table/Table.vue.d.ts +6 -3
  346. package/dist/types/vue/src/components/table/Table.vue.d.ts.map +1 -1
  347. package/dist/types/vue/src/components/tabs/TabsList.vue.d.ts +6 -3
  348. package/dist/types/vue/src/components/tabs/TabsList.vue.d.ts.map +1 -1
  349. package/dist/types/vue/src/components/time/utils/relativeTime.d.ts +1 -1
  350. package/dist/types/vue/src/components/time/utils/relativeTime.d.ts.map +1 -1
  351. package/dist/types/vue/src/components/toast/composables/useToastLayout.d.ts +4 -11
  352. package/dist/types/vue/src/components/toast/composables/useToastLayout.d.ts.map +1 -1
  353. package/dist/types/vue/src/components/toast/store.d.ts +14 -62
  354. package/dist/types/vue/src/components/toast/store.d.ts.map +1 -1
  355. package/dist/types/vue/src/components/tree/composables/useTree.d.ts.map +1 -1
  356. package/dist/types/vue/src/components/tree/types.d.ts +1 -17
  357. package/dist/types/vue/src/components/tree/types.d.ts.map +1 -1
  358. package/dist/types/vue/src/components/tree/utils/selection.d.ts +1 -15
  359. package/dist/types/vue/src/components/tree/utils/selection.d.ts.map +1 -1
  360. package/dist/types/vue/src/components/tree-select/types.d.ts +1 -9
  361. package/dist/types/vue/src/components/tree-select/types.d.ts.map +1 -1
  362. package/dist/types/vue/src/components/tree-select/utils/filterTree.d.ts +1 -6
  363. package/dist/types/vue/src/components/tree-select/utils/filterTree.d.ts.map +1 -1
  364. package/dist/types/vue/src/components/virtual-list/composables/useVirtualList.d.ts +1 -1
  365. package/dist/types/vue/src/components/virtual-list/composables/useVirtualList.d.ts.map +1 -1
  366. package/dist/types/vue/src/components/visually-hidden/VisuallyHidden.vue.d.ts +4 -1
  367. package/dist/types/vue/src/components/visually-hidden/VisuallyHidden.vue.d.ts.map +1 -1
  368. package/dist/types/vue/src/lib/caret.d.ts +1 -1
  369. package/dist/types/vue/src/lib/caret.d.ts.map +1 -1
  370. package/dist/types/vue/src/lib/collapse.d.ts +2 -8
  371. package/dist/types/vue/src/lib/collapse.d.ts.map +1 -1
  372. package/dist/types/vue/src/lib/date.d.ts +1 -27
  373. package/dist/types/vue/src/lib/date.d.ts.map +1 -1
  374. package/dist/types/vue/src/lib/field-focus.d.ts +1 -1
  375. package/dist/types/vue/src/lib/field-focus.d.ts.map +1 -1
  376. package/dist/types/vue/src/lib/overlay-anchor.d.ts +2 -7
  377. package/dist/types/vue/src/lib/overlay-anchor.d.ts.map +1 -1
  378. package/dist/types/vue/src/lib/pointer-corridor.d.ts +1 -6
  379. package/dist/types/vue/src/lib/pointer-corridor.d.ts.map +1 -1
  380. package/dist/types/vue/src/lib/reka/useVirtualChoices.d.ts +3 -11
  381. package/dist/types/vue/src/lib/reka/useVirtualChoices.d.ts.map +1 -1
  382. package/dist/types/vue/src/lib/reka/useVirtualTree.d.ts +1 -1
  383. package/dist/types/vue/src/lib/reka/useVirtualTree.d.ts.map +1 -1
  384. package/dist/types/vue/src/lib/virtual/navigation.d.ts +1 -2
  385. package/dist/types/vue/src/lib/virtual/navigation.d.ts.map +1 -1
  386. package/dist/types/vue/src/lib/virtual/useVirtualCollection.d.ts +1 -1
  387. package/dist/types/vue/src/lib/virtual/useVirtualCollection.d.ts.map +1 -1
  388. package/dist/types/vue/src/lib/virtual/useVirtualWindow.d.ts +2 -15
  389. package/dist/types/vue/src/lib/virtual/useVirtualWindow.d.ts.map +1 -1
  390. package/dist/types/vue/src/locale/en-US.d.ts +1 -2
  391. package/dist/types/vue/src/locale/en-US.d.ts.map +1 -1
  392. package/dist/types/vue/src/locale/index.d.ts +3 -4
  393. package/dist/types/vue/src/locale/index.d.ts.map +1 -1
  394. package/dist/types/vue/src/locale/types.d.ts +1 -234
  395. package/dist/types/vue/src/locale/types.d.ts.map +1 -1
  396. package/dist/types/vue/src/locale/zh-CN.d.ts +1 -2
  397. package/dist/types/vue/src/locale/zh-CN.d.ts.map +1 -1
  398. package/dist/types/vue/src/primitives/number-field/NumberFieldDecrement.vue.d.ts +17 -0
  399. package/dist/types/vue/src/primitives/number-field/NumberFieldDecrement.vue.d.ts.map +1 -0
  400. package/dist/types/vue/src/primitives/number-field/NumberFieldIncrement.vue.d.ts +17 -0
  401. package/dist/types/vue/src/primitives/number-field/NumberFieldIncrement.vue.d.ts.map +1 -0
  402. package/dist/types/vue/src/primitives/number-field/NumberFieldInput.vue.d.ts +16 -0
  403. package/dist/types/vue/src/primitives/number-field/NumberFieldInput.vue.d.ts.map +1 -0
  404. package/dist/types/vue/src/primitives/number-field/NumberFieldRoot.vue.d.ts +47 -0
  405. package/dist/types/vue/src/primitives/number-field/NumberFieldRoot.vue.d.ts.map +1 -0
  406. package/dist/types/vue/src/primitives/number-field/context.d.ts +41 -0
  407. package/dist/types/vue/src/primitives/number-field/context.d.ts.map +1 -0
  408. package/dist/types/vue/src/primitives/number-field/index.d.ts +5 -0
  409. package/dist/types/vue/src/primitives/number-field/index.d.ts.map +1 -0
  410. package/dist/types/vue/src/primitives/utils/timers.d.ts +6 -0
  411. package/dist/types/vue/src/primitives/utils/timers.d.ts.map +1 -0
  412. package/dist/types/vue/src/primitives/utils/usePrimitiveElement.d.ts +6 -0
  413. package/dist/types/vue/src/primitives/utils/usePrimitiveElement.d.ts.map +1 -0
  414. package/dist/types/vue/src/primitives/utils/useVModel.d.ts +7 -0
  415. package/dist/types/vue/src/primitives/utils/useVModel.d.ts.map +1 -0
  416. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInput.d.ts +66 -0
  417. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInput.d.ts.map +1 -0
  418. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue.d.ts +28 -0
  419. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue.d.ts.map +1 -0
  420. package/package.json +3 -2
  421. package/src/components/accordion/AccordionTrigger.vue +9 -1
  422. package/src/components/anchor/composables/useAnchor.ts +3 -12
  423. package/src/components/anchor/composables/useAnchorFollow.ts +8 -76
  424. package/src/components/anchor/composables/useScrollSpy.ts +22 -38
  425. package/src/components/anchor/types.ts +1 -8
  426. package/src/components/autocomplete/autocomplete.variants.ts +1 -1
  427. package/src/components/autocomplete/composables/useAutocomplete.ts +1 -1
  428. package/src/components/autocomplete/types.ts +1 -16
  429. package/src/components/banner/utils/direction.ts +1 -10
  430. package/src/components/calendar/utils/format.ts +1 -23
  431. package/src/components/code-block/highlighter.ts +1 -98
  432. package/src/components/collapsible/CollapsibleTrigger.vue +8 -1
  433. package/src/components/command-palette/utils/hotkey.ts +1 -27
  434. package/src/components/command-palette/utils/match.ts +5 -75
  435. package/src/components/data-list/composables/useDataList.ts +2 -4
  436. package/src/components/data-list/utils/scroll.ts +1 -26
  437. package/src/components/data-table/column-sizing-styles.ts +1 -40
  438. package/src/components/data-table/column-sizing.ts +1 -101
  439. package/src/components/data-table/composables/useDataTable.ts +103 -123
  440. package/src/components/data-table/composables/useTableColumns.ts +38 -113
  441. package/src/components/data-table/composables/useTableDrag.ts +21 -11
  442. package/src/components/data-table/composables/useTableExport.ts +8 -32
  443. package/src/components/data-table/composables/useTableResize.ts +13 -17
  444. package/src/components/data-table/composables/useTableResizeHandles.ts +6 -21
  445. package/src/components/data-table/types.ts +15 -155
  446. package/src/components/data-table/utils.ts +1 -75
  447. package/src/components/date-range-field/utils/validity.ts +1 -21
  448. package/src/components/editable/editable.variants.ts +1 -1
  449. package/src/components/file-upload/utils/select.ts +1 -58
  450. package/src/components/file-upload/utils/size.ts +1 -16
  451. package/src/components/float-button/float-button.variants.ts +1 -1
  452. package/src/components/form/composables/useForm.ts +24 -135
  453. package/src/components/form/standard-schema.ts +1 -26
  454. package/src/components/form/utils/errors.ts +1 -48
  455. package/src/components/form/utils/focus.ts +1 -10
  456. package/src/components/form/utils/values.ts +1 -23
  457. package/src/components/form-field/FormField.vue +3 -2
  458. package/src/components/lightbox/types.ts +1 -14
  459. package/src/components/lightbox/utils/clip.ts +1 -117
  460. package/src/components/lightbox/utils/download.ts +1 -29
  461. package/src/components/lightbox/utils/gesture.ts +1 -54
  462. package/src/components/lightbox/utils/paging.ts +1 -33
  463. package/src/components/lightbox/utils/pose.ts +1 -142
  464. package/src/components/lightbox/utils/source.ts +1 -17
  465. package/src/components/lightbox/utils/zoom.ts +1 -127
  466. package/src/components/meter-group/utils/tones.ts +1 -14
  467. package/src/components/multi-select/MultiSelect.vue +1 -2
  468. package/src/components/number-input/NumberInput.vue +2 -2
  469. package/src/components/pagination/composables/usePagination.ts +2 -3
  470. package/src/components/pagination/types.ts +1 -19
  471. package/src/components/pagination/utils/ranges.ts +1 -12
  472. package/src/components/password-input/PasswordInput.vue +6 -0
  473. package/src/components/qr-code/export.ts +1 -65
  474. package/src/components/range-calendar/utils/limit.ts +1 -11
  475. package/src/components/rating/utils/fill.ts +1 -4
  476. package/src/components/ripple/useRipple.ts +10 -198
  477. package/src/components/scroll-area/ScrollArea.vue +6 -18
  478. package/src/components/scroll-area/composables/useEdgeShadow.ts +7 -16
  479. package/src/components/scroll-area/composables/useLayerLock.ts +2 -9
  480. package/src/components/scroll-area/composables/useWheelRedirect.ts +2 -10
  481. package/src/components/scroll-area/scroll-restore.ts +1 -148
  482. package/src/components/search-input/SearchInput.vue +6 -0
  483. package/src/components/select/types.ts +1 -23
  484. package/src/components/split-button/split-button.variants.ts +1 -1
  485. package/src/components/spoiler/SpoilerPainter.ts +1 -197
  486. package/src/components/spoiler/utils/irisOrigin.ts +1 -40
  487. package/src/components/spoiler/worklet.ts +1 -199
  488. package/src/components/table/Table.vue +9 -0
  489. package/src/components/tabs/TabsList.vue +9 -0
  490. package/src/components/time/utils/relativeTime.ts +1 -20
  491. package/src/components/toast/composables/useToastLayout.ts +12 -24
  492. package/src/components/toast/store.ts +16 -228
  493. package/src/components/tree/composables/useTree.ts +17 -33
  494. package/src/components/tree/types.ts +1 -20
  495. package/src/components/tree/utils/selection.ts +1 -78
  496. package/src/components/tree-select/types.ts +1 -34
  497. package/src/components/tree-select/utils/filterTree.ts +1 -19
  498. package/src/components/virtual-list/composables/useVirtualList.ts +16 -42
  499. package/src/components/visually-hidden/VisuallyHidden.vue +21 -3
  500. package/src/lib/caret.ts +1 -48
  501. package/src/lib/collapse.ts +6 -29
  502. package/src/lib/date.ts +1 -111
  503. package/src/lib/field-focus.ts +1 -36
  504. package/src/lib/overlay-anchor.ts +11 -37
  505. package/src/lib/pointer-corridor.ts +1 -26
  506. package/src/lib/reka/useVirtualChoices.ts +55 -133
  507. package/src/lib/reka/useVirtualTree.ts +22 -65
  508. package/src/lib/virtual/navigation.ts +1 -26
  509. package/src/lib/virtual/useVirtualCollection.ts +28 -47
  510. package/src/lib/virtual/useVirtualWindow.ts +15 -25
  511. package/src/locale/en-US.ts +1 -220
  512. package/src/locale/index.ts +9 -53
  513. package/src/locale/types.ts +1 -225
  514. package/src/locale/zh-CN.ts +1 -215
  515. package/src/primitives/number-field/LICENSE +21 -0
  516. package/src/primitives/number-field/NumberFieldDecrement.vue +21 -0
  517. package/src/primitives/number-field/NumberFieldIncrement.vue +21 -0
  518. package/src/primitives/number-field/NumberFieldInput.vue +114 -0
  519. package/src/primitives/number-field/NumberFieldRoot.vue +169 -0
  520. package/src/primitives/number-field/context.ts +111 -0
  521. package/src/primitives/number-field/index.ts +14 -0
  522. package/src/primitives/utils/LICENSE +44 -0
  523. package/src/primitives/utils/timers.ts +6 -0
  524. package/src/primitives/utils/usePrimitiveElement.ts +12 -0
  525. package/src/primitives/utils/useVModel.ts +37 -0
  526. package/src/primitives/visually-hidden/LICENSE +21 -0
  527. package/src/primitives/visually-hidden/VisuallyHiddenInput.ts +97 -0
  528. package/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue +49 -0
@@ -10,6 +10,15 @@ import {
10
10
  import { cssSize } from '../utils'
11
11
  import { allocateWidths, pixelWidth } from '../column-sizing'
12
12
  import { columnSizingStyles } from '../column-sizing-styles'
13
+ import {
14
+ canMoveColumn,
15
+ cellStyle as layoutCellStyle,
16
+ controlStyle as layoutControlStyle,
17
+ headerRows as layoutHeaderRows,
18
+ moveColumnOrder,
19
+ pinStyle as layoutPinStyle,
20
+ type DataTablePinLayout,
21
+ } from '../../../../../shared/src/lib/data-table/layout'
13
22
  import { useTableResize } from './useTableResize'
14
23
  import { useTableResizeHandles } from './useTableResizeHandles'
15
24
  import type { DataTableColumn, DataTableHeader, DataTableProps } from '../types'
@@ -130,106 +139,35 @@ export function useTableColumns<T extends object>(
130
139
  function columnStyle(column: DataTableColumn<T>): CSSProperties {
131
140
  return { width: cssSize(constrained.value ? widthVariable(column) : column.width) }
132
141
  }
142
+ const pinLayout = (): DataTablePinLayout<T> => ({
143
+ columns: ctl.visibleColumns.value,
144
+ constrained: constrained.value,
145
+ leading: leading.value,
146
+ trailing: trailing.value,
147
+ get fixedWidths() {
148
+ return fixedWidths.value
149
+ },
150
+ width,
151
+ })
133
152
  function pinStyle(column: DataTableColumn<T>, head = false): CSSProperties {
134
- if (!column.pin) return {}
135
- const siblings = ctl.visibleColumns.value.filter(item => item.pin === column.pin)
136
- const index = siblings.findIndex(item => item.key === column.key)
137
- const preceding = column.pin === 'start' ? siblings.slice(0, index) : siblings.slice(index + 1)
138
- const controls = column.pin === 'start' ? leading.value * 48 : trailing.value * 72
139
- const offset = `${preceding.reduce(
140
- (sum, column) => sum + (constrained.value ? fixedWidths.value[column.key]! : width(column)),
141
- controls,
142
- )}px`
143
- return {
144
- position: 'sticky',
145
- [column.pin === 'start' ? 'insetInlineStart' : 'insetInlineEnd']: offset,
146
- zIndex: head ? 5 : 1,
147
- backgroundColor: head ? 'var(--hn-table-head-bg)' : 'var(--hn-table-bg)',
148
- boxShadow: `${column.pin === 'start' ? '1px' : '-1px'} 0 0 var(--hn-border)`,
149
- }
153
+ return layoutPinStyle(pinLayout(), column, head)
150
154
  }
151
155
  function cellStyle(column: DataTableColumn<T>, head = false): CSSProperties {
152
- return {
153
- ...(constrained.value
154
- ? {}
155
- : {
156
- width: cssSize(column.width),
157
- minWidth: cssSize(column.minWidth ?? column.width),
158
- maxWidth: cssSize(column.maxWidth),
159
- }),
160
- ...pinStyle(column, head),
161
- }
156
+ return layoutCellStyle(pinLayout(), column, head)
162
157
  }
163
158
  function controlStyle(side: 'start' | 'end', index: number, head = false): CSSProperties {
164
- return {
165
- width: side === 'end' ? '72px' : '48px',
166
- minWidth: side === 'end' ? '72px' : '48px',
167
- paddingInline: '8px',
168
- textAlign: 'center',
169
- ...(ctl.visibleColumns.value.some(column => column.pin === side)
170
- ? {
171
- position: 'sticky',
172
- [side === 'start' ? 'insetInlineStart' : 'insetInlineEnd']: `${index * 48}px`,
173
- zIndex: head ? 5 : 1,
174
- backgroundColor: head ? 'var(--hn-table-head-bg)' : 'var(--hn-table-bg)',
175
- }
176
- : {}),
177
- }
159
+ return layoutControlStyle(ctl.visibleColumns.value, side, index, head)
178
160
  }
179
- const headerRows = computed<DataTableHeader<T>[][]>(() => {
180
- const paths = new Map<string, DataTableColumn<T>[]>()
181
- function visit(columns: DataTableColumn<T>[], parent: DataTableColumn<T>[] = []) {
182
- for (const column of columns) {
183
- const path = [...parent, column]
184
- if (column.children?.length) visit(column.children, path)
185
- else paths.set(column.key, path)
186
- }
187
- }
188
- visit(props.columns)
189
- const visible = ctl.visibleColumns.value
190
- const depth = Math.max(1, ...visible.map(column => paths.get(column.key)!.length))
191
- return Array.from({ length: depth }, (_, level) => {
192
- const result: DataTableHeader<T>[] = []
193
- for (let index = 0; index < visible.length;) {
194
- const first = visible[index]!
195
- const path = paths.get(first.key)!
196
- const column = path[level]
197
- if (!column) {
198
- index++
199
- continue
200
- }
201
- const leaf = level === path.length - 1
202
- let end = index + 1
203
- if (!leaf)
204
- while (
205
- end < visible.length &&
206
- paths.get(visible[end]!.key)?.[level]?.key === column.key &&
207
- visible[end]!.pin === first.pin
208
- )
209
- end++
210
- const top = Array.from({ length: level }, (_, i) => heights.value[i] ?? 44).reduce(
211
- (a, b) => a + b,
212
- 0,
213
- )
214
- result.push({
215
- ...ctl.headerContext(column),
216
- id: leaf ? `leaf:${column.key}` : `${level}:${column.key}:${first.key}`,
217
- leaf,
218
- colspan: end - index,
219
- rowspan: leaf ? depth - level : 1,
220
- top,
221
- style: {
222
- ...(leaf
223
- ? cellStyle(column, true)
224
- : pinStyle(first.pin === 'end' ? visible[end - 1]! : first, true)),
225
- ...(props.stickyHeader ? { top: `${top}px` } : {}),
226
- },
227
- })
228
- index = end
229
- }
230
- return result
231
- })
232
- })
161
+ const headerRows = computed<DataTableHeader<T>[][]>(() =>
162
+ layoutHeaderRows(
163
+ props.columns,
164
+ ctl.visibleColumns.value,
165
+ heights.value,
166
+ props.stickyHeader,
167
+ ctl.headerContext,
168
+ (column, leaf) => (leaf ? cellStyle(column, true) : pinStyle(column, true)),
169
+ ),
170
+ )
233
171
  const sizing = computed<CSSProperties>(() =>
234
172
  constrained.value
235
173
  ? columnSizingStyles(
@@ -251,26 +189,13 @@ export function useTableColumns<T extends object>(
251
189
  '--hn-table-viewport-width': available.value ? `${available.value}px` : undefined,
252
190
  }))
253
191
  function moveColumn(key: string, target: string) {
254
- if (ctl.blocked.value || key === target) return
255
- const columns = ctl.visibleColumns.value
256
- const source = columns.find(column => column.key === key),
257
- destination = columns.find(column => column.key === target)
258
- if (
259
- !source ||
260
- !destination ||
261
- source.pin !== destination.pin ||
262
- source.reorderable === false ||
263
- destination.reorderable === false
192
+ if (ctl.blocked.value || !canMoveColumn(ctl.visibleColumns.value, key, target)) return
193
+ models.columnOrder.value = moveColumnOrder(
194
+ models.columnOrder.value,
195
+ ctl.leaves.value,
196
+ key,
197
+ target,
264
198
  )
265
- return
266
- const order = [
267
- ...new Set([...models.columnOrder.value, ...ctl.leaves.value.map(column => column.key)]),
268
- ]
269
- const from = order.indexOf(key),
270
- to = order.indexOf(target)
271
- order.splice(from, 1)
272
- order.splice(to, 0, key)
273
- models.columnOrder.value = order
274
199
  }
275
200
  Object.assign(ctl.api, { setColumnWidth: resizing.setWidth, moveColumn })
276
201
  onScopeDispose(() => {
@@ -1,5 +1,10 @@
1
1
  import { computed, nextTick, onScopeDispose, shallowRef, type Ref, type CSSProperties } from 'vue'
2
2
  import { rowId } from '../utils'
3
+ import {
4
+ dropColumnOrder,
5
+ reorderPosition,
6
+ reorderedRows,
7
+ } from '../../../../../shared/src/lib/data-table/layout'
3
8
  import type { DataTableKey, DataTableProps, DataTableReorder } from '../types'
4
9
  import type { DataTableController, DataTableModels } from './useDataTable'
5
10
 
@@ -59,12 +64,16 @@ export function useTableDrag<T extends object>(
59
64
  if (!source) return
60
65
  const from = source.findIndex(item => ctl.keyOf(item) === key),
61
66
  to = source.findIndex(item => ctl.keyOf(item) === targetKey)
62
- const position = before === undefined ? to : to + (before ? 0 : 1) - (from < to ? 1 : 0)
67
+ const position = reorderPosition(from, to, before)
63
68
  if (position === from) return
64
- const rows = [...source]
65
- rows.splice(from, 1)
66
- rows.splice(position, 0, row.original)
67
- onReorder({ row: row.original, target: target.original, parent, from, to: position, rows })
69
+ onReorder({
70
+ row: row.original,
71
+ target: target.original,
72
+ parent,
73
+ from,
74
+ to: position,
75
+ rows: reorderedRows(source, from, position, row.original),
76
+ })
68
77
  }
69
78
  function start(kind: 'row' | 'column', key: string, label: string, event: PointerEvent) {
70
79
  if (event.button !== 0 || ctl.blocked.value || (kind === 'row' && !ordered.value)) return
@@ -209,12 +218,13 @@ export function useTableDrag<T extends object>(
209
218
  cleanup?.()
210
219
  if (!apply || !destination) return
211
220
  if (kind === 'column') {
212
- const order = [
213
- ...new Set([...models.columnOrder.value, ...ctl.leaves.value.map(column => column.key)]),
214
- ]
215
- order.splice(order.indexOf(key), 1)
216
- order.splice(order.indexOf(destination.target) + (destination.before ? 0 : 1), 0, key)
217
- models.columnOrder.value = order
221
+ models.columnOrder.value = dropColumnOrder(
222
+ models.columnOrder.value,
223
+ ctl.leaves.value,
224
+ key,
225
+ destination.target,
226
+ destination.before,
227
+ )
218
228
  } else {
219
229
  const all = ctl.table.getCoreRowModel().rowsById
220
230
  const row = all[key],
@@ -1,44 +1,20 @@
1
+ import { downloadCsv, tableCsv } from '../../../../../shared/src/lib/data-table/csv'
1
2
  import type { DataTableExportOptions } from '../types'
2
3
  import type { DataTableController } from './useDataTable'
3
4
 
4
5
  export function useTableExport<T extends object>(ctl: DataTableController<T>) {
5
6
  function toCsv(options: DataTableExportOptions = {}) {
6
- const delimiter = options.delimiter ?? ','
7
- const columns = ctl.visibleColumns.value.filter(
8
- column =>
9
- column.exportable !== false && (!options.columns || options.columns.includes(column.key)),
7
+ return tableCsv(
8
+ ctl.visibleColumns.value,
9
+ ctl.api.getRows(options.scope ?? 'filtered'),
10
+ options,
11
+ ctl.valueOf,
12
+ ctl.displayValue,
10
13
  )
11
- const escape = (value: unknown) => {
12
- let text = value == null ? '' : String(value)
13
- if (typeof value === 'string' && /^[\s]*[=+@-]/.test(text)) text = "'" + text
14
- return '"' + text.replaceAll('"', '""') + '"'
15
- }
16
- const lines = [columns.map(column => escape(column.label)).join(delimiter)]
17
- for (const row of ctl.api.getRows(options.scope ?? 'filtered')) {
18
- lines.push(
19
- columns
20
- .map(column =>
21
- escape(
22
- column.exportValue
23
- ? column.exportValue(row)
24
- : options.formatted
25
- ? ctl.displayValue(row, column)
26
- : ctl.valueOf(row, column),
27
- ),
28
- )
29
- .join(delimiter),
30
- )
31
- }
32
- return (options.bom === false ? '' : '\uFEFF') + lines.join('\r\n')
33
14
  }
34
15
  function exportCsv(options: DataTableExportOptions = {}) {
35
16
  if (typeof document === 'undefined') return
36
- const url = URL.createObjectURL(new Blob([toCsv(options)], { type: 'text/csv;charset=utf-8' }))
37
- const anchor = document.createElement('a')
38
- anchor.href = url
39
- anchor.download = options.filename ?? 'data.csv'
40
- anchor.click()
41
- setTimeout(() => URL.revokeObjectURL(url), 1000)
17
+ downloadCsv(toCsv(options), options.filename)
42
18
  }
43
19
  Object.assign(ctl.api, { toCsv, exportCsv })
44
20
  }
@@ -1,5 +1,9 @@
1
1
  import { nextTick, onScopeDispose, shallowRef, watch, type Ref } from 'vue'
2
2
  import { clampWidth, resizeBoundary, resizeBounds, resizeWidths } from '../column-sizing'
3
+ import {
4
+ pinnedMaximumWidth,
5
+ resizeAffectedColumns,
6
+ } from '../../../../../shared/src/lib/data-table/resize'
3
7
  import type { DataTableColumn, DataTableProps } from '../types'
4
8
  import type { DataTableController, DataTableModels } from './useDataTable'
5
9
 
@@ -25,14 +29,8 @@ export function useTableResize<T extends object>(
25
29
  let release: (() => void) | undefined
26
30
  const boundary = (column: DataTableColumn<T>) =>
27
31
  resizeBoundary(ctl.visibleColumns.value, column, props.resizeMode ?? 'fit')
28
- const affectedColumns = (column: DataTableColumn<T>) => {
29
- const edge = boundary(column)
30
- return edge?.neighbor
31
- ? edge.side === 'start'
32
- ? [edge.neighbor, column]
33
- : [column, edge.neighbor]
34
- : [column]
35
- }
32
+ const affectedColumns = (column: DataTableColumn<T>) =>
33
+ resizeAffectedColumns(ctl.visibleColumns.value, column, props.resizeMode ?? 'fit')
36
34
  const resizeLabel = (column: DataTableColumn<T>) =>
37
35
  affectedColumns(column)
38
36
  .map(item => item.label)
@@ -42,16 +40,14 @@ export function useTableResize<T extends object>(
42
40
  .map(item => `${item.label}: ${Math.round(widths.value[item.key]!)}px`)
43
41
  .join(' / ')
44
42
  const minimumTotalWidth = () => (props.resizeMode === 'expand' ? Math.max(0, available.value) : 0)
45
- const maximumWidth = (column: DataTableColumn<T>, source: Record<string, number>) => {
46
- if (!column.pin || boundary(column)?.neighbor?.pin) return Infinity
47
- const columns = ctl.visibleColumns.value
48
- const otherPinned = columns.reduce(
49
- (sum, item) => sum + (item.pin && item.key !== column.key ? source[item.key]! : 0),
50
- 0,
43
+ const maximumWidth = (column: DataTableColumn<T>, source: Record<string, number>) =>
44
+ pinnedMaximumWidth(
45
+ ctl.visibleColumns.value,
46
+ column,
47
+ props.resizeMode ?? 'fit',
48
+ source,
49
+ available.value,
51
50
  )
52
- const center = columns.some(item => !item.pin) ? 48 : 0
53
- return Math.max(source[column.key]!, available.value - otherPinned - center)
54
- }
55
51
  const bounds = (column: DataTableColumn<T>) =>
56
52
  resizeBounds(
57
53
  column,
@@ -9,6 +9,10 @@ import {
9
9
  } from 'vue'
10
10
  import { useEventListener } from '@vueuse/core'
11
11
  import type { DataTableColumn } from '../types'
12
+ import {
13
+ resizeHandlePositions,
14
+ type DataTableHandlePosition,
15
+ } from '../../../../../shared/src/lib/data-table/resize'
12
16
 
13
17
  export function useTableResizeHandles<T extends object>(
14
18
  element: Ref<HTMLTableElement | undefined>,
@@ -16,7 +20,7 @@ export function useTableResizeHandles<T extends object>(
16
20
  columns: Ref<DataTableColumn<T>[]>,
17
21
  enabled: () => boolean,
18
22
  ) {
19
- const positions = shallowRef<Record<string, { inset: number; visible: boolean }>>({})
23
+ const positions = shallowRef<Record<string, DataTableHandlePosition>>({})
20
24
  let frame = 0
21
25
  let observer: ResizeObserver | undefined
22
26
  function update() {
@@ -35,26 +39,7 @@ export function useTableResizeHandles<T extends object>(
35
39
  cell.getBoundingClientRect(),
36
40
  ]),
37
41
  )
38
- let left = box.left
39
- let right = box.right
40
- for (const column of columns.value) {
41
- const rect = cells.get(column.key)
42
- if (!rect || !column.pin) continue
43
- if ((column.pin === 'start') !== rtl) left = Math.max(left, rect.right)
44
- else right = Math.min(right, rect.left)
45
- }
46
- const next: typeof positions.value = {}
47
- for (const column of columns.value) {
48
- const rect = cells.get(column.key)
49
- if (!rect) continue
50
- const start = Math.max(rect.left, column.pin ? box.left : left)
51
- const end = Math.min(rect.right, column.pin ? box.right : right)
52
- const fromLeft = (column.pin === 'end') !== rtl
53
- next[column.key] = {
54
- inset: Math.max(0, (fromLeft ? start - rect.left : rect.right - end) / scale),
55
- visible: end - start >= 9 * scale - 0.01,
56
- }
57
- }
42
+ const next = resizeHandlePositions(columns.value, cells, box, scale, rtl)
58
43
  if (JSON.stringify(next) !== JSON.stringify(positions.value)) positions.value = next
59
44
  }
60
45
  function schedule() {
@@ -1,85 +1,22 @@
1
1
  import type { VirtualizeOptions } from '../../lib/virtual/types'
2
2
  import type { CSSProperties } from 'vue'
3
3
  import type { TableVariants } from '../table/table.variants'
4
+ import type {
5
+ DataTableCellContext,
6
+ DataTableColumn,
7
+ DataTableEdit,
8
+ DataTableEditorContext,
9
+ DataTableGroupContext,
10
+ DataTableHeaderCell,
11
+ DataTableHeaderContext,
12
+ DataTableKey,
13
+ DataTableKeyField,
14
+ DataTableRowContext,
15
+ DataTableState,
16
+ } from '../../../../shared/src/types/data-table'
4
17
 
5
- export type DataTableKey = string | number
6
- export type DataTableKeyField<T> = {
7
- [K in keyof T]-?: T[K] extends DataTableKey ? K : never
8
- }[keyof T] &
9
- string
10
- export type DataTableAggregate = 'sum' | 'min' | 'max' | 'mean' | 'count' | 'uniqueCount'
11
- export type DataTableScope = 'page' | 'filtered' | 'selected' | 'all'
12
- export type DataTableFilterMode = 'contains' | 'equals' | 'in' | 'range'
18
+ export * from '../../../../shared/src/types/data-table'
13
19
 
14
- export interface DataTableColumn<T> {
15
- key: string
16
- label: string
17
- children?: DataTableColumn<T>[]
18
- field?: keyof T
19
- accessor?: (row: T) => unknown
20
- sortable?: boolean
21
- sort?: (a: T, b: T) => number
22
- filterable?: boolean
23
- filter?: (row: T, query: string) => boolean
24
- filterValue?: (row: T, value: unknown) => boolean
25
- filterMode?: DataTableFilterMode
26
- format?: (value: unknown, row: T) => string | number
27
- align?: 'start' | 'center' | 'end'
28
- width?: number | string
29
- minWidth?: number | string
30
- maxWidth?: number | string
31
- pin?: 'start' | 'end'
32
- truncate?: boolean
33
- resizable?: boolean
34
- reorderable?: boolean
35
- aggregate?: DataTableAggregate | ((rows: T[]) => unknown)
36
- footer?: boolean | string | ((rows: T[]) => string | number)
37
- editable?: boolean | ((row: T) => boolean)
38
- parse?: (value: unknown, row: T) => unknown
39
- validate?: (value: unknown, row: T) => string | undefined | Promise<string | undefined>
40
- exportable?: boolean
41
- exportValue?: (row: T) => unknown
42
- headerClass?: string
43
- cellClass?: string | ((row: T) => string | undefined)
44
- }
45
- export interface DataTableSort {
46
- key: string
47
- desc: boolean
48
- }
49
- export interface DataTableFilter {
50
- key: string
51
- value: unknown
52
- }
53
- export interface DataTableQuery {
54
- page: number
55
- pageSize: number
56
- sorting: DataTableSort[]
57
- filter: string
58
- columnFilters: DataTableFilter[]
59
- grouping: string[]
60
- }
61
- export interface DataTableEdit<T> {
62
- key: DataTableKey
63
- row: T
64
- values: Record<string, unknown>
65
- column?: string
66
- }
67
- export interface DataTableReorder<T> {
68
- row: T
69
- target: T
70
- parent?: T
71
- from: number
72
- to: number
73
- rows: T[]
74
- }
75
- export interface DataTableExportOptions {
76
- scope?: DataTableScope
77
- columns?: string[]
78
- formatted?: boolean
79
- delimiter?: ',' | ';' | '\t'
80
- bom?: boolean
81
- filename?: string
82
- }
83
20
  export interface DataTableProps<T> {
84
21
  rows: T[]
85
22
  columns: DataTableColumn<T>[]
@@ -122,74 +59,6 @@ export interface DataTableProps<T> {
122
59
  class?: string
123
60
  tableClass?: string
124
61
  }
125
- export interface DataTableRowContext<T> {
126
- row: T
127
- key: DataTableKey
128
- index: number
129
- depth: number
130
- selected: boolean
131
- indeterminate: boolean
132
- selectable: boolean
133
- expanded: boolean
134
- expandable: boolean
135
- toggleSelected: (selected?: boolean) => void
136
- toggleExpanded: (expanded?: boolean) => void
137
- startEdit: (column?: string) => void
138
- }
139
- export interface DataTableCellContext<T> extends DataTableRowContext<T> {
140
- column: DataTableColumn<T>
141
- value: unknown
142
- }
143
- export interface DataTableHeaderContext<T> {
144
- column: DataTableColumn<T>
145
- sorting: 'asc' | 'desc' | false
146
- sortIndex: number
147
- filterValue: unknown
148
- toggleSort: (multi?: boolean) => void
149
- setFilter: (value: unknown) => void
150
- }
151
- export interface DataTableGroupContext<T> {
152
- key: string
153
- column: DataTableColumn<T>
154
- value: unknown
155
- rows: T[]
156
- depth: number
157
- expanded: boolean
158
- toggleExpanded: (expanded?: boolean) => void
159
- aggregate: (column: string) => unknown
160
- }
161
- export interface DataTableEditorContext<T> extends DataTableCellContext<T> {
162
- value: unknown
163
- pending: boolean
164
- error?: string
165
- updateValue: (value: unknown) => void
166
- commit: () => Promise<void>
167
- cancel: () => void
168
- }
169
- export interface DataTableApi<T> {
170
- getRows: (scope?: DataTableScope) => T[]
171
- toggleSelected: (key: DataTableKey, selected?: boolean) => void
172
- toggleExpanded: (key: DataTableKey, expanded?: boolean) => void
173
- setFilter: (column: string, value: unknown) => void
174
- setColumnHidden: (column: string, hidden: boolean) => void
175
- setColumnWidth: (column: string, width: number) => void
176
- moveColumn: (column: string, target: string) => void
177
- moveRow: (key: DataTableKey, target: DataTableKey) => void
178
- startEdit: (key: DataTableKey, column?: string) => void
179
- cancelEdit: () => void
180
- commitEdit: () => Promise<void>
181
- scrollToRow: (key: DataTableKey) => void
182
- toCsv: (options?: DataTableExportOptions) => string
183
- exportCsv: (options?: DataTableExportOptions) => void
184
- }
185
- export interface DataTableState<T> extends DataTableQuery {
186
- total: number
187
- rows: T[]
188
- selected: DataTableKey[]
189
- expanded: DataTableKey[]
190
- visibleColumns: DataTableColumn<T>[]
191
- api: DataTableApi<T>
192
- }
193
62
  export type DataTableSlots<T> = {
194
63
  toolbar?(state: DataTableState<T>): unknown
195
64
  footer?(state: DataTableState<T>): unknown
@@ -207,13 +76,4 @@ export type DataTableSlots<T> = {
207
76
  [K in `footer-${string}`]?: (context: { column: DataTableColumn<T>; rows: T[] }) => unknown
208
77
  }
209
78
 
210
- export interface DataTableHeader<T> extends DataTableHeaderContext<T> {
211
- id: string
212
- colspan: number
213
- rowspan: number
214
- leaf: boolean
215
- top: number
216
- style: CSSProperties
217
- ariaSort?: 'ascending' | 'descending'
218
- nextLabel: string
219
- }
79
+ export interface DataTableHeader<T> extends DataTableHeaderCell<T, CSSProperties> {}
@@ -1,75 +1 @@
1
- import type { DataTableColumn, DataTableFilterMode, DataTableKey } from './types'
2
-
3
- export function rowId(key: DataTableKey) {
4
- return `${typeof key}:${key}`
5
- }
6
-
7
- export function rowKey(id: string): DataTableKey {
8
- return id.startsWith('number:') ? Number(id.slice(7)) : id.slice(7)
9
- }
10
-
11
- export function positiveInteger(value: number, fallback: number) {
12
- return Number.isFinite(value) ? Math.max(1, Math.floor(value)) : fallback
13
- }
14
-
15
- export function cssSize(value: number | string | undefined) {
16
- return typeof value === 'number' ? `${value}px` : value
17
- }
18
-
19
- export function isRowAction(event: MouseEvent | KeyboardEvent) {
20
- const target = event.target as HTMLElement | null
21
- if (!target || event.defaultPrevented) return false
22
- if (event.type === 'keydown') return target === event.currentTarget
23
- const control = target.closest(
24
- 'a, button, input, select, textarea, label, [role="button"], [role="checkbox"], [role="switch"], [contenteditable]:not([contenteditable="false"]), [tabindex]',
25
- )
26
- return !control || control === event.currentTarget
27
- }
28
-
29
- export function flattenColumns<T>(columns: DataTableColumn<T>[]): DataTableColumn<T>[] {
30
- return columns.flatMap(column =>
31
- column.children?.length ? flattenColumns(column.children) : [column],
32
- )
33
- }
34
- export function filterValue(
35
- value: unknown,
36
- filter: unknown,
37
- mode: DataTableFilterMode = 'contains',
38
- locale = 'en',
39
- ) {
40
- if (mode === 'equals') return Object.is(value, filter)
41
- if (mode === 'in') return Array.isArray(filter) && filter.some(item => Object.is(item, value))
42
- if (mode === 'range') {
43
- if (!Array.isArray(filter)) return true
44
- const numeric = value instanceof Date ? value.getTime() : Number(value)
45
- const bound = (value: unknown) => (value instanceof Date ? value.getTime() : Number(value))
46
- return (
47
- value != null &&
48
- Number.isFinite(numeric) &&
49
- (filter[0] == null || numeric >= bound(filter[0])) &&
50
- (filter[1] == null || numeric <= bound(filter[1]))
51
- )
52
- }
53
- return String(value ?? '')
54
- .toLocaleLowerCase(locale)
55
- .includes(String(filter ?? '').toLocaleLowerCase(locale))
56
- }
57
- export function aggregate<T>(
58
- rows: T[],
59
- column: DataTableColumn<T>,
60
- valueOf: (row: T, column: DataTableColumn<T>) => unknown,
61
- ) {
62
- if (typeof column.aggregate === 'function') return column.aggregate(rows)
63
- if (!column.aggregate) return undefined
64
- if (column.aggregate === 'count') return rows.length
65
- const values = rows.map(row => valueOf(row, column))
66
- if (column.aggregate === 'uniqueCount') return new Set(values).size
67
- const numbers = values.filter(
68
- (value): value is number => typeof value === 'number' && Number.isFinite(value),
69
- )
70
- if (!numbers.length) return column.aggregate === 'sum' ? 0 : undefined
71
- if (column.aggregate === 'min') return numbers.reduce((a, b) => Math.min(a, b))
72
- if (column.aggregate === 'max') return numbers.reduce((a, b) => Math.max(a, b))
73
- const sum = numbers.reduce((a, b) => a + b, 0)
74
- return column.aggregate === 'mean' ? sum / numbers.length : sum
75
- }
1
+ export * from '../../../../shared/src/lib/data-table/utils'
@@ -1,21 +1 @@
1
- import type { DateValue } from '@internationalized/date'
2
-
3
- interface Bounds {
4
- min?: DateValue
5
- max?: DateValue
6
- }
7
-
8
- interface Parts {
9
- start?: DateValue
10
- end?: DateValue
11
- }
12
-
13
- function outside(value: DateValue | undefined, { min, max }: Bounds) {
14
- if (!value) return false
15
- return (!!min && value.compare(min) < 0) || (!!max && value.compare(max) > 0)
16
- }
17
-
18
- export function isRangeInvalid({ start, end }: Parts, bounds: Bounds) {
19
- if (outside(start, bounds) || outside(end, bounds)) return true
20
- return !!start && !!end && start.compare(end) > 0
21
- }
1
+ export * from '../../../../../shared/src/lib/date-range-field/validity'
@@ -1 +1 @@
1
- export * from '@hina-ui/shared/variants/editable'
1
+ export * from '../../../../shared/src/variants/editable'