@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
@@ -0,0 +1,92 @@
1
+ export interface CommandMatchable {
2
+ label: string
3
+ description?: string
4
+ keywords?: string[]
5
+ }
6
+
7
+ export interface CommandGroupOf<T> {
8
+ label: string
9
+ items: T[]
10
+ }
11
+
12
+ export interface CommandMatch<T extends CommandMatchable = CommandMatchable> {
13
+ item: T
14
+ start: number
15
+ end: number
16
+ }
17
+
18
+ export interface CommandSection<T extends CommandMatchable = CommandMatchable> {
19
+ key: string
20
+ label?: string
21
+ matches: CommandMatch<T>[]
22
+ }
23
+
24
+ interface Scored<T extends CommandMatchable> extends CommandMatch<T> {
25
+ score: number
26
+ }
27
+
28
+ interface ScoredSection<T extends CommandMatchable> extends CommandSection<T> {
29
+ best: number
30
+ }
31
+
32
+ function isGroup<T>(entry: T | CommandGroupOf<T>): entry is CommandGroupOf<T> {
33
+ return 'items' in (entry as object)
34
+ }
35
+
36
+ function score<T extends CommandMatchable>(item: T, query: string): Scored<T> | null {
37
+ if (!query) return { item, start: -1, end: -1, score: 0 }
38
+ const label = item.label.toLowerCase()
39
+ const at = label.indexOf(query)
40
+ if (at === 0) return { item, start: 0, end: query.length, score: label === query ? 4 : 3 }
41
+ if (at > 0) return { item, start: at, end: at + query.length, score: 2 }
42
+ const keywords = item.keywords?.map(keyword => keyword.toLowerCase()) ?? []
43
+ if (keywords.includes(query)) return { item, start: -1, end: -1, score: 1.5 }
44
+ if (keywords.some(keyword => keyword.includes(query)))
45
+ return { item, start: -1, end: -1, score: 1 }
46
+ if (item.description?.toLowerCase().includes(query)) {
47
+ return { item, start: -1, end: -1, score: 0.5 }
48
+ }
49
+ return null
50
+ }
51
+
52
+ function rank<T extends CommandMatchable>(items: T[], query: string): Scored<T>[] {
53
+ return items
54
+ .map(item => score(item, query))
55
+ .filter((match): match is Scored<T> => match !== null)
56
+ .sort((a, b) => b.score - a.score)
57
+ }
58
+
59
+ export function filterCommands<T extends CommandMatchable>(
60
+ items: ReadonlyArray<T | CommandGroupOf<T>>,
61
+ query: string,
62
+ ): CommandSection<T>[] {
63
+ const q = query.trim().toLowerCase()
64
+ const sections: ScoredSection<T>[] = []
65
+ let loose: T[] = []
66
+ const push = (label: string | undefined, entries: T[]) => {
67
+ const ranked = rank(entries, q)
68
+ if (ranked.length === 0) return
69
+ sections.push({
70
+ key: String(sections.length),
71
+ label,
72
+ best: ranked[0]!.score,
73
+ matches: ranked.map(({ item, start, end }) => ({ item, start, end })),
74
+ })
75
+ }
76
+ const flush = () => {
77
+ if (loose.length === 0) return
78
+ push(undefined, loose)
79
+ loose = []
80
+ }
81
+ for (const entry of items) {
82
+ if (!isGroup(entry)) {
83
+ loose.push(entry)
84
+ continue
85
+ }
86
+ flush()
87
+ push(entry.label, entry.items)
88
+ }
89
+ flush()
90
+ if (q) sections.sort((a, b) => b.best - a.best)
91
+ return sections.map(({ key, label, matches }) => ({ key, label, matches }))
92
+ }
@@ -0,0 +1,40 @@
1
+ export interface DataListScrollOptions {
2
+ align?: 'start' | 'center' | 'end' | 'auto'
3
+ behavior?: 'auto' | 'smooth'
4
+ }
5
+
6
+ export function dataListText<T>(
7
+ item: T,
8
+ index: number,
9
+ field: keyof T | ((item: T, index: number) => unknown) | undefined,
10
+ ) {
11
+ const value = typeof field === 'function' ? field(item, index) : field ? item[field] : undefined
12
+ return value !== '' && (typeof value === 'string' || typeof value === 'number')
13
+ ? value
14
+ : undefined
15
+ }
16
+
17
+ export function scrollDataListItem(
18
+ element: HTMLElement,
19
+ viewport: HTMLElement | undefined,
20
+ { align = 'auto', behavior }: DataListScrollOptions,
21
+ ) {
22
+ if (!viewport) {
23
+ element.scrollIntoView({ block: align === 'auto' ? 'nearest' : align, behavior })
24
+ return
25
+ }
26
+ const rect = element.getBoundingClientRect()
27
+ const start =
28
+ rect.top - viewport.getBoundingClientRect().top - viewport.clientTop + viewport.scrollTop
29
+ const end = start + rect.height - viewport.clientHeight
30
+ const nearest = Math.min(Math.max(viewport.scrollTop, Math.min(start, end)), Math.max(start, end))
31
+ const offset =
32
+ align === 'start'
33
+ ? start
34
+ : align === 'end'
35
+ ? end
36
+ : align === 'center'
37
+ ? (start + end) / 2
38
+ : nearest
39
+ viewport.scrollTo({ top: offset, behavior })
40
+ }
@@ -0,0 +1,41 @@
1
+ import { allocateWidths, columnBounds } from './column-sizing'
2
+ import type { DataTableColumn } from '../../types/data-table'
3
+
4
+ export type DataTableSizingStyle = { width: string } & { [key: `--${string}`]: string }
5
+
6
+ export function columnSizingStyles<T extends object>(
7
+ columns: DataTableColumn<T>[],
8
+ overrides: Record<string, number>,
9
+ controls: number,
10
+ ): DataTableSizingStyle {
11
+ const initial = allocateWidths(columns, overrides, 0)
12
+ const total = Object.values(initial).reduce((sum, width) => sum + width, controls)
13
+ const flexible = columns.filter(
14
+ column =>
15
+ !column.pin &&
16
+ overrides[column.key] === undefined &&
17
+ initial[column.key]! < columnBounds(column).max,
18
+ )
19
+ const capacities = flexible
20
+ .map(column => columnBounds(column).max - initial[column.key]!)
21
+ .sort((a, b) => a - b)
22
+ let consumed = 0
23
+ const shares = capacities.map((capacity, index) => {
24
+ const share = `calc((100cqi - ${total + consumed}px) / ${capacities.length - index})`
25
+ consumed += capacity
26
+ return share
27
+ })
28
+ const keys = new Set(flexible.map(column => column.key))
29
+ return {
30
+ width: shares.length ? `clamp(${total}px, 100%, ${total + consumed}px)` : `${total}px`,
31
+ '--hn-table-column-grow': shares.length ? `max(0px, ${shares.join(', ')})` : '0px',
32
+ ...Object.fromEntries(
33
+ columns.map((column, index) => [
34
+ `--hn-table-column-${index}`,
35
+ keys.has(column.key)
36
+ ? `min(${columnBounds(column).max}px, calc(${initial[column.key]}px + var(--hn-table-column-grow)))`
37
+ : `${initial[column.key]}px`,
38
+ ]),
39
+ ),
40
+ }
41
+ }
@@ -0,0 +1,101 @@
1
+ import type { DataTableColumn } from '../../types/data-table'
2
+
3
+ export function pixelWidth(value: number | string | undefined, fallback: number) {
4
+ return typeof value === 'number' && Number.isFinite(value)
5
+ ? value
6
+ : typeof value === 'string' && /^\d+(\.\d+)?px$/.test(value)
7
+ ? parseFloat(value)
8
+ : fallback
9
+ }
10
+
11
+ export function columnBounds<T extends object>(column: DataTableColumn<T>) {
12
+ const min = Math.max(0, pixelWidth(column.minWidth, 48))
13
+ return { min, max: Math.max(min, pixelWidth(column.maxWidth, 1600)) }
14
+ }
15
+
16
+ export function clampWidth<T extends object>(column: DataTableColumn<T>, width: number) {
17
+ const { min, max } = columnBounds(column)
18
+ return Math.max(min, Math.min(max, width))
19
+ }
20
+
21
+ export function allocateWidths<T extends object>(
22
+ columns: DataTableColumn<T>[],
23
+ overrides: Record<string, number>,
24
+ available: number,
25
+ ) {
26
+ const widths = Object.fromEntries(
27
+ columns.map(column => [
28
+ column.key,
29
+ clampWidth(column, pixelWidth(overrides[column.key] ?? column.width, 160)),
30
+ ]),
31
+ )
32
+ let remaining = available - Object.values(widths).reduce((sum, width) => sum + width, 0)
33
+ let flexible = columns.filter(column => !column.pin && overrides[column.key] === undefined)
34
+ while (remaining > 0.01 && flexible.length) {
35
+ const share = remaining / flexible.length
36
+ for (const column of flexible) {
37
+ const extra = Math.min(share, columnBounds(column).max - widths[column.key]!)
38
+ widths[column.key]! += extra
39
+ remaining -= extra
40
+ }
41
+ flexible = flexible.filter(column => widths[column.key]! < columnBounds(column).max - 0.01)
42
+ }
43
+ return widths
44
+ }
45
+
46
+ export function resizeBoundary<T extends object>(
47
+ columns: DataTableColumn<T>[],
48
+ column: DataTableColumn<T>,
49
+ mode: 'fit' | 'expand',
50
+ ) {
51
+ const index = columns.findIndex(item => item.key === column.key)
52
+ if (index < 0 || column.resizable === false) return
53
+ const side = column.pin === 'end' ? 'start' : 'end'
54
+ const neighbor = columns[index + (side === 'start' ? -1 : 1)]
55
+ if (mode === 'fit' && side === 'end' && neighbor?.pin === 'end') return
56
+ if (mode === 'fit' && (!neighbor || neighbor.resizable === false)) return
57
+ return { side, neighbor: mode === 'fit' ? neighbor : undefined } as const
58
+ }
59
+
60
+ export function resizeBounds<T extends object>(
61
+ column: DataTableColumn<T>,
62
+ neighbor: DataTableColumn<T> | undefined,
63
+ widths: Record<string, number>,
64
+ minimumTotalWidth = 0,
65
+ maximumWidth = Infinity,
66
+ ) {
67
+ const bounds = columnBounds(column)
68
+ bounds.max = Math.min(bounds.max, maximumWidth)
69
+ if (!neighbor) {
70
+ const otherWidth = Object.entries(widths).reduce(
71
+ (sum, [key, width]) => sum + (key === column.key ? 0 : width),
72
+ 0,
73
+ )
74
+ return {
75
+ min: Math.max(bounds.min, Math.min(widths[column.key]!, minimumTotalWidth - otherWidth)),
76
+ max: bounds.max,
77
+ }
78
+ }
79
+ const other = columnBounds(neighbor)
80
+ const total = widths[column.key]! + widths[neighbor.key]!
81
+ return {
82
+ min: Math.max(bounds.min, total - other.max),
83
+ max: Math.min(bounds.max, total - other.min),
84
+ }
85
+ }
86
+
87
+ export function resizeWidths<T extends object>(
88
+ column: DataTableColumn<T>,
89
+ neighbor: DataTableColumn<T> | undefined,
90
+ widths: Record<string, number>,
91
+ value: number,
92
+ minimumTotalWidth = 0,
93
+ maximumWidth = Infinity,
94
+ ) {
95
+ const { min, max } = resizeBounds(column, neighbor, widths, minimumTotalWidth, maximumWidth)
96
+ const width = Math.max(min, Math.min(max, value))
97
+ return {
98
+ [column.key]: width,
99
+ ...(neighbor ? { [neighbor.key]: widths[neighbor.key]! + widths[column.key]! - width } : {}),
100
+ }
101
+ }
@@ -0,0 +1,51 @@
1
+ import type { DataTableColumn, DataTableExportOptions } from '../../types/data-table'
2
+
3
+ export function exportColumns<T>(columns: DataTableColumn<T>[], options: DataTableExportOptions) {
4
+ return columns.filter(
5
+ column =>
6
+ column.exportable !== false && (!options.columns || options.columns.includes(column.key)),
7
+ )
8
+ }
9
+
10
+ export function tableCsv<T>(
11
+ visible: DataTableColumn<T>[],
12
+ rows: T[],
13
+ options: DataTableExportOptions,
14
+ valueOf: (row: T, column: DataTableColumn<T>) => unknown,
15
+ displayValue: (row: T, column: DataTableColumn<T>) => unknown,
16
+ ) {
17
+ const delimiter = options.delimiter ?? ','
18
+ const columns = exportColumns(visible, options)
19
+ const escape = (value: unknown) => {
20
+ let text = value == null ? '' : String(value)
21
+ if (typeof value === 'string' && /^[\s]*[=+@-]/.test(text)) text = "'" + text
22
+ return '"' + text.replaceAll('"', '""') + '"'
23
+ }
24
+ const lines = [columns.map(column => escape(column.label)).join(delimiter)]
25
+ for (const row of rows) {
26
+ lines.push(
27
+ columns
28
+ .map(column =>
29
+ escape(
30
+ column.exportValue
31
+ ? column.exportValue(row)
32
+ : options.formatted
33
+ ? displayValue(row, column)
34
+ : valueOf(row, column),
35
+ ),
36
+ )
37
+ .join(delimiter),
38
+ )
39
+ }
40
+ return (options.bom === false ? '' : '') + lines.join('\r\n')
41
+ }
42
+
43
+ export function downloadCsv(text: string, filename = 'data.csv') {
44
+ if (typeof document === 'undefined') return
45
+ const url = URL.createObjectURL(new Blob([text], { type: 'text/csv;charset=utf-8' }))
46
+ const anchor = document.createElement('a')
47
+ anchor.href = url
48
+ anchor.download = filename
49
+ anchor.click()
50
+ setTimeout(() => URL.revokeObjectURL(url), 1000)
51
+ }
@@ -0,0 +1,199 @@
1
+ import type { DataTableCellStyle, DataTableColumn } from '../../types/data-table'
2
+ import { cssSize } from './utils'
3
+
4
+ export interface DataTablePinLayout<T> {
5
+ columns: DataTableColumn<T>[]
6
+ constrained: boolean
7
+ leading: number
8
+ trailing: number
9
+ fixedWidths: Record<string, number>
10
+ width: (column: DataTableColumn<T>) => number
11
+ }
12
+
13
+ export function pinStyle<T>(
14
+ layout: DataTablePinLayout<T>,
15
+ column: DataTableColumn<T>,
16
+ head = false,
17
+ ): DataTableCellStyle {
18
+ if (!column.pin) return {}
19
+ const siblings = layout.columns.filter(item => item.pin === column.pin)
20
+ const index = siblings.findIndex(item => item.key === column.key)
21
+ const preceding = column.pin === 'start' ? siblings.slice(0, index) : siblings.slice(index + 1)
22
+ const controls = column.pin === 'start' ? layout.leading * 48 : layout.trailing * 72
23
+ const offset = `${preceding.reduce(
24
+ (sum, column) =>
25
+ sum + (layout.constrained ? layout.fixedWidths[column.key]! : layout.width(column)),
26
+ controls,
27
+ )}px`
28
+ return {
29
+ position: 'sticky',
30
+ [column.pin === 'start' ? 'insetInlineStart' : 'insetInlineEnd']: offset,
31
+ zIndex: head ? 5 : 1,
32
+ backgroundColor: head ? 'var(--hn-table-head-bg)' : 'var(--hn-table-bg)',
33
+ boxShadow: `${column.pin === 'start' ? '1px' : '-1px'} 0 0 var(--hn-border)`,
34
+ }
35
+ }
36
+
37
+ export function cellStyle<T>(
38
+ layout: DataTablePinLayout<T>,
39
+ column: DataTableColumn<T>,
40
+ head = false,
41
+ ): DataTableCellStyle {
42
+ return {
43
+ ...(layout.constrained
44
+ ? {}
45
+ : {
46
+ width: cssSize(column.width),
47
+ minWidth: cssSize(column.minWidth ?? column.width),
48
+ maxWidth: cssSize(column.maxWidth),
49
+ }),
50
+ ...pinStyle(layout, column, head),
51
+ }
52
+ }
53
+
54
+ export function controlStyle<T>(
55
+ columns: DataTableColumn<T>[],
56
+ side: 'start' | 'end',
57
+ index: number,
58
+ head = false,
59
+ ): DataTableCellStyle {
60
+ return {
61
+ width: side === 'end' ? '72px' : '48px',
62
+ minWidth: side === 'end' ? '72px' : '48px',
63
+ paddingInline: '8px',
64
+ textAlign: 'center',
65
+ ...(columns.some(column => column.pin === side)
66
+ ? {
67
+ position: 'sticky',
68
+ [side === 'start' ? 'insetInlineStart' : 'insetInlineEnd']: `${index * 48}px`,
69
+ zIndex: head ? 5 : 1,
70
+ backgroundColor: head ? 'var(--hn-table-head-bg)' : 'var(--hn-table-bg)',
71
+ }
72
+ : {}),
73
+ }
74
+ }
75
+
76
+ export interface DataTableHeaderPlacement<S> {
77
+ id: string
78
+ leaf: boolean
79
+ colspan: number
80
+ rowspan: number
81
+ top: number
82
+ style: S
83
+ }
84
+
85
+ export function headerRows<T, C extends object, S extends object>(
86
+ columns: DataTableColumn<T>[],
87
+ visible: DataTableColumn<T>[],
88
+ heights: number[],
89
+ sticky: boolean | undefined,
90
+ context: (column: DataTableColumn<T>) => C,
91
+ styleOf: (column: DataTableColumn<T>, leaf: boolean) => S,
92
+ ) {
93
+ const paths = new Map<string, DataTableColumn<T>[]>()
94
+ function visit(columns: DataTableColumn<T>[], parent: DataTableColumn<T>[] = []) {
95
+ for (const column of columns) {
96
+ const path = [...parent, column]
97
+ if (column.children?.length) visit(column.children, path)
98
+ else paths.set(column.key, path)
99
+ }
100
+ }
101
+ visit(columns)
102
+ const depth = Math.max(1, ...visible.map(column => paths.get(column.key)!.length))
103
+ return Array.from({ length: depth }, (_, level) => {
104
+ const result: (C & DataTableHeaderPlacement<S>)[] = []
105
+ for (let index = 0; index < visible.length;) {
106
+ const first = visible[index]!
107
+ const path = paths.get(first.key)!
108
+ const column = path[level]
109
+ if (!column) {
110
+ index++
111
+ continue
112
+ }
113
+ const leaf = level === path.length - 1
114
+ let end = index + 1
115
+ if (!leaf)
116
+ while (
117
+ end < visible.length &&
118
+ paths.get(visible[end]!.key)?.[level]?.key === column.key &&
119
+ visible[end]!.pin === first.pin
120
+ )
121
+ end++
122
+ const top = Array.from({ length: level }, (_, i) => heights[i] ?? 44).reduce(
123
+ (a, b) => a + b,
124
+ 0,
125
+ )
126
+ result.push({
127
+ ...context(column),
128
+ id: leaf ? `leaf:${column.key}` : `${level}:${column.key}:${first.key}`,
129
+ leaf,
130
+ colspan: end - index,
131
+ rowspan: leaf ? depth - level : 1,
132
+ top,
133
+ style: {
134
+ ...(leaf
135
+ ? styleOf(column, true)
136
+ : styleOf(first.pin === 'end' ? visible[end - 1]! : first, false)),
137
+ ...(sticky ? { top: `${top}px` } : {}),
138
+ } as S,
139
+ })
140
+ index = end
141
+ }
142
+ return result
143
+ })
144
+ }
145
+
146
+ export function canMoveColumn<T>(columns: DataTableColumn<T>[], key: string, target: string) {
147
+ if (key === target) return false
148
+ const source = columns.find(column => column.key === key),
149
+ destination = columns.find(column => column.key === target)
150
+ return !(
151
+ !source ||
152
+ !destination ||
153
+ source.pin !== destination.pin ||
154
+ source.reorderable === false ||
155
+ destination.reorderable === false
156
+ )
157
+ }
158
+
159
+ export function columnOrder<T>(order: string[], leaves: DataTableColumn<T>[]) {
160
+ return [...new Set([...order, ...leaves.map(column => column.key)])]
161
+ }
162
+
163
+ export function moveColumnOrder<T>(
164
+ order: string[],
165
+ leaves: DataTableColumn<T>[],
166
+ key: string,
167
+ target: string,
168
+ ) {
169
+ const next = columnOrder(order, leaves)
170
+ const from = next.indexOf(key),
171
+ to = next.indexOf(target)
172
+ next.splice(from, 1)
173
+ next.splice(to, 0, key)
174
+ return next
175
+ }
176
+
177
+ export function dropColumnOrder<T>(
178
+ order: string[],
179
+ leaves: DataTableColumn<T>[],
180
+ key: string,
181
+ target: string,
182
+ before: boolean | undefined,
183
+ ) {
184
+ const next = columnOrder(order, leaves)
185
+ next.splice(next.indexOf(key), 1)
186
+ next.splice(next.indexOf(target) + (before ? 0 : 1), 0, key)
187
+ return next
188
+ }
189
+
190
+ export function reorderPosition(from: number, to: number, before?: boolean) {
191
+ return before === undefined ? to : to + (before ? 0 : 1) - (from < to ? 1 : 0)
192
+ }
193
+
194
+ export function reorderedRows<T>(source: T[], from: number, position: number, row: T) {
195
+ const rows = [...source]
196
+ rows.splice(from, 1)
197
+ rows.splice(position, 0, row)
198
+ return rows
199
+ }
@@ -0,0 +1,66 @@
1
+ import type { DataTableColumn } from '../../types/data-table'
2
+ import { resizeBoundary } from './column-sizing'
3
+
4
+ export interface DataTableHandlePosition {
5
+ inset: number
6
+ visible: boolean
7
+ }
8
+
9
+ export function resizeHandlePositions<T extends object>(
10
+ columns: DataTableColumn<T>[],
11
+ cells: Map<string, { left: number; right: number }>,
12
+ box: { left: number; right: number },
13
+ scale: number,
14
+ rtl: boolean,
15
+ ) {
16
+ let left = box.left
17
+ let right = box.right
18
+ for (const column of columns) {
19
+ const rect = cells.get(column.key)
20
+ if (!rect || !column.pin) continue
21
+ if ((column.pin === 'start') !== rtl) left = Math.max(left, rect.right)
22
+ else right = Math.min(right, rect.left)
23
+ }
24
+ const next: Record<string, DataTableHandlePosition> = {}
25
+ for (const column of columns) {
26
+ const rect = cells.get(column.key)
27
+ if (!rect) continue
28
+ const start = Math.max(rect.left, column.pin ? box.left : left)
29
+ const end = Math.min(rect.right, column.pin ? box.right : right)
30
+ const fromLeft = (column.pin === 'end') !== rtl
31
+ next[column.key] = {
32
+ inset: Math.max(0, (fromLeft ? start - rect.left : rect.right - end) / scale),
33
+ visible: end - start >= 9 * scale - 0.01,
34
+ }
35
+ }
36
+ return next
37
+ }
38
+
39
+ export function resizeAffectedColumns<T extends object>(
40
+ columns: DataTableColumn<T>[],
41
+ column: DataTableColumn<T>,
42
+ mode: 'fit' | 'expand',
43
+ ) {
44
+ const edge = resizeBoundary(columns, column, mode)
45
+ return edge?.neighbor
46
+ ? edge.side === 'start'
47
+ ? [edge.neighbor, column]
48
+ : [column, edge.neighbor]
49
+ : [column]
50
+ }
51
+
52
+ export function pinnedMaximumWidth<T extends object>(
53
+ columns: DataTableColumn<T>[],
54
+ column: DataTableColumn<T>,
55
+ mode: 'fit' | 'expand',
56
+ source: Record<string, number>,
57
+ available: number,
58
+ ) {
59
+ if (!column.pin || resizeBoundary(columns, column, mode)?.neighbor?.pin) return Infinity
60
+ const otherPinned = columns.reduce(
61
+ (sum, item) => sum + (item.pin && item.key !== column.key ? source[item.key]! : 0),
62
+ 0,
63
+ )
64
+ const center = columns.some(item => !item.pin) ? 48 : 0
65
+ return Math.max(source[column.key]!, available - otherPinned - center)
66
+ }