@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
@@ -1,76 +1,6 @@
1
- import { isCommandGroup, type CommandItem, type CommandItems } from '../types'
1
+ import type { CommandItem } from '../types'
2
+ import type * as Shared from '../../../../../shared/src/lib/command-palette/match'
2
3
 
3
- export interface CommandMatch {
4
- item: CommandItem
5
- start: number
6
- end: number
7
- }
8
-
9
- export interface CommandSection {
10
- key: string
11
- label?: string
12
- matches: CommandMatch[]
13
- }
14
-
15
- interface Scored extends CommandMatch {
16
- score: number
17
- }
18
-
19
- interface ScoredSection extends CommandSection {
20
- best: number
21
- }
22
-
23
- function score(item: CommandItem, query: string): Scored | null {
24
- if (!query) return { item, start: -1, end: -1, score: 0 }
25
- const label = item.label.toLowerCase()
26
- const at = label.indexOf(query)
27
- if (at === 0) return { item, start: 0, end: query.length, score: label === query ? 4 : 3 }
28
- if (at > 0) return { item, start: at, end: at + query.length, score: 2 }
29
- const keywords = item.keywords?.map(keyword => keyword.toLowerCase()) ?? []
30
- if (keywords.includes(query)) return { item, start: -1, end: -1, score: 1.5 }
31
- if (keywords.some(keyword => keyword.includes(query)))
32
- return { item, start: -1, end: -1, score: 1 }
33
- if (item.description?.toLowerCase().includes(query)) {
34
- return { item, start: -1, end: -1, score: 0.5 }
35
- }
36
- return null
37
- }
38
-
39
- function rank(items: CommandItem[], query: string): Scored[] {
40
- return items
41
- .map(item => score(item, query))
42
- .filter((match): match is Scored => match !== null)
43
- .sort((a, b) => b.score - a.score)
44
- }
45
-
46
- export function filterCommands(items: CommandItems, query: string): CommandSection[] {
47
- const q = query.trim().toLowerCase()
48
- const sections: ScoredSection[] = []
49
- let loose: CommandItem[] = []
50
- const push = (label: string | undefined, entries: CommandItem[]) => {
51
- const ranked = rank(entries, q)
52
- if (ranked.length === 0) return
53
- sections.push({
54
- key: String(sections.length),
55
- label,
56
- best: ranked[0]!.score,
57
- matches: ranked.map(({ item, start, end }) => ({ item, start, end })),
58
- })
59
- }
60
- const flush = () => {
61
- if (loose.length === 0) return
62
- push(undefined, loose)
63
- loose = []
64
- }
65
- for (const entry of items) {
66
- if (!isCommandGroup(entry)) {
67
- loose.push(entry)
68
- continue
69
- }
70
- flush()
71
- push(entry.label, entry.items)
72
- }
73
- flush()
74
- if (q) sections.sort((a, b) => b.best - a.best)
75
- return sections.map(({ key, label, matches }) => ({ key, label, matches }))
76
- }
4
+ export { filterCommands } from '../../../../../shared/src/lib/command-palette/match'
5
+ export type CommandMatch = Shared.CommandMatch<CommandItem>
6
+ export type CommandSection = Shared.CommandSection<CommandItem>
@@ -1,6 +1,7 @@
1
1
  import { computed, watch, type Ref } from 'vue'
2
2
  import { paginationInteger } from '../../pagination/composables/usePagination'
3
3
  import { cn } from '../../../lib/cn'
4
+ import { dataListText } from '../../../../../shared/src/lib/data-list'
4
5
  import { dataListItem } from '../data-list.variants'
5
6
  import type {
6
7
  DataListKey,
@@ -21,10 +22,7 @@ export function useDataList<T>(
21
22
  ) {
22
23
  const layout = computed(() => layoutModel?.value ?? props.layout ?? 'list')
23
24
  function text(item: T, index: number, field: DataListTextField<T> | undefined) {
24
- const value = typeof field === 'function' ? field(item, index) : field ? item[field] : undefined
25
- return value !== '' && (typeof value === 'string' || typeof value === 'number')
26
- ? value
27
- : undefined
25
+ return dataListText(item, index, field)
28
26
  }
29
27
  const pageSize = computed(() => paginationInteger(sizeModel.value, 10, 1))
30
28
  const total = computed(() =>
@@ -1,26 +1 @@
1
- import type { VirtualListScrollOptions } from '../../virtual-list/types'
2
-
3
- export function scrollDataListItem(
4
- element: HTMLElement,
5
- viewport: HTMLElement | undefined,
6
- { align = 'auto', behavior }: VirtualListScrollOptions,
7
- ) {
8
- if (!viewport) {
9
- element.scrollIntoView({ block: align === 'auto' ? 'nearest' : align, behavior })
10
- return
11
- }
12
- const rect = element.getBoundingClientRect()
13
- const start =
14
- rect.top - viewport.getBoundingClientRect().top - viewport.clientTop + viewport.scrollTop
15
- const end = start + rect.height - viewport.clientHeight
16
- const nearest = Math.min(Math.max(viewport.scrollTop, Math.min(start, end)), Math.max(start, end))
17
- const offset =
18
- align === 'start'
19
- ? start
20
- : align === 'end'
21
- ? end
22
- : align === 'center'
23
- ? (start + end) / 2
24
- : nearest
25
- viewport.scrollTo({ top: offset, behavior })
26
- }
1
+ export * from '../../../../../shared/src/lib/data-list'
@@ -1,40 +1 @@
1
- import type { CSSProperties } from 'vue'
2
- import { allocateWidths, columnBounds } from './column-sizing'
3
- import type { DataTableColumn } from './types'
4
-
5
- export function columnSizingStyles<T extends object>(
6
- columns: DataTableColumn<T>[],
7
- overrides: Record<string, number>,
8
- controls: number,
9
- ): CSSProperties {
10
- const initial = allocateWidths(columns, overrides, 0)
11
- const total = Object.values(initial).reduce((sum, width) => sum + width, controls)
12
- const flexible = columns.filter(
13
- column =>
14
- !column.pin &&
15
- overrides[column.key] === undefined &&
16
- initial[column.key]! < columnBounds(column).max,
17
- )
18
- const capacities = flexible
19
- .map(column => columnBounds(column).max - initial[column.key]!)
20
- .sort((a, b) => a - b)
21
- let consumed = 0
22
- const shares = capacities.map((capacity, index) => {
23
- const share = `calc((100cqi - ${total + consumed}px) / ${capacities.length - index})`
24
- consumed += capacity
25
- return share
26
- })
27
- const keys = new Set(flexible.map(column => column.key))
28
- return {
29
- width: shares.length ? `clamp(${total}px, 100%, ${total + consumed}px)` : `${total}px`,
30
- '--hn-table-column-grow': shares.length ? `max(0px, ${shares.join(', ')})` : '0px',
31
- ...Object.fromEntries(
32
- columns.map((column, index) => [
33
- `--hn-table-column-${index}`,
34
- keys.has(column.key)
35
- ? `min(${columnBounds(column).max}px, calc(${initial[column.key]}px + var(--hn-table-column-grow)))`
36
- : `${initial[column.key]}px`,
37
- ]),
38
- ),
39
- }
40
- }
1
+ export * from '../../../../shared/src/lib/data-table/column-sizing-styles'
@@ -1,101 +1 @@
1
- import type { DataTableColumn } from './types'
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
- }
1
+ export * from '../../../../shared/src/lib/data-table/column-sizing'
@@ -9,8 +9,32 @@ import {
9
9
  isRowAction,
10
10
  positiveInteger,
11
11
  rowId,
12
- rowKey,
13
12
  } from '../utils'
13
+ import {
14
+ ariaSort,
15
+ canGoNext,
16
+ clampedPage,
17
+ compareValues,
18
+ displayValue as formatValue,
19
+ engineSelection,
20
+ engineSorting,
21
+ engineState,
22
+ keyOf as rowKeyOf,
23
+ labelOf as rowLabelOf,
24
+ modelSelection,
25
+ modelSorting,
26
+ nextColumnFilters,
27
+ orderColumns,
28
+ pageCount as countPages,
29
+ selectionState,
30
+ sortLabel,
31
+ tableQuery,
32
+ toggleKey,
33
+ toggleSelection,
34
+ totalRows,
35
+ uniqueSelectable,
36
+ valueOf as cellValue,
37
+ } from '../../../../../shared/src/lib/data-table/state'
14
38
  import type {
15
39
  DataTableApi,
16
40
  DataTableColumn,
@@ -53,18 +77,9 @@ export function useDataTable<T extends object>(
53
77
  const collator = computed(
54
78
  () => new Intl.Collator(t.value.tag, { numeric: true, sensitivity: 'base' }),
55
79
  )
56
- const keyOf = (row: T) =>
57
- typeof props.rowKey === 'function' ? props.rowKey(row) : (row[props.rowKey] as DataTableKey)
58
- const labelOf = (row: T) =>
59
- String(
60
- typeof props.rowLabel === 'function'
61
- ? props.rowLabel(row)
62
- : props.rowLabel === undefined
63
- ? keyOf(row)
64
- : row[props.rowLabel],
65
- )
66
- const valueOf = (row: T, column: DataTableColumn<T>) =>
67
- column.accessor ? column.accessor(row) : row[column.field ?? (column.key as keyof T)]
80
+ const keyOf = (row: T) => rowKeyOf(row, props.rowKey)
81
+ const labelOf = (row: T) => rowLabelOf(row, props.rowLabel, keyOf)
82
+ const valueOf = (row: T, column: DataTableColumn<T>) => cellValue(row, column)
68
83
  const selectable = (row: T) =>
69
84
  typeof props.selectable === 'function' ? props.selectable(row) : !!props.selectable
70
85
  const expandable = (row: T) =>
@@ -84,11 +99,7 @@ export function useDataTable<T extends object>(
84
99
  sortUndefined: 'last',
85
100
  sortFn: (a, b, id) => {
86
101
  if (column.sort) return column.sort(a.original, b.original)
87
- const left = a.getValue(id),
88
- right = b.getValue(id)
89
- if (typeof left === 'number' && typeof right === 'number') return left - right
90
- if (left instanceof Date && right instanceof Date) return left.getTime() - right.getTime()
91
- return compare.compare(String(left), String(right))
102
+ return compareValues(a.getValue(id), b.getValue(id), compare)
92
103
  },
93
104
  }))
94
105
  })
@@ -122,73 +133,65 @@ export function useDataTable<T extends object>(
122
133
  ? column.filter(row.original, query)
123
134
  : filterValue(row.getValue(id), query, 'contains', t.value.tag)
124
135
  },
125
- state: computed(() => ({
126
- sorting: models.sorting.value.map(sort => ({ id: sort.key, desc: sort.desc })),
127
- globalFilter: models.filter.value.trim(),
128
- columnFilters: models.columnFilters.value
129
- .filter(filter => leaves.value.some(column => column.key === filter.key))
130
- .map(filter => ({ id: filter.key, value: filter.value })),
131
- grouping: models.grouping.value.filter(key =>
132
- leaves.value.some(column => column.key === key),
133
- ),
134
- expanded: Object.fromEntries(
135
- [...models.expanded.value.map(rowId), ...models.expandedGroups.value].map(key => [
136
- key,
137
- true,
138
- ]),
136
+ state: computed(() =>
137
+ engineState(
138
+ leaves.value,
139
+ {
140
+ sorting: models.sorting.value,
141
+ filter: models.filter.value,
142
+ columnFilters: models.columnFilters.value,
143
+ grouping: models.grouping.value,
144
+ selected: models.selected.value,
145
+ expanded: models.expanded.value,
146
+ expandedGroups: models.expandedGroups.value,
147
+ hiddenColumns: models.hiddenColumns.value,
148
+ },
149
+ page.value,
150
+ pageSize.value,
139
151
  ),
140
- pagination: { pageIndex: page.value - 1, pageSize: pageSize.value },
141
- rowSelection: Object.fromEntries(
142
- models.selected.value.map(key => [rowId(key), true as const]),
143
- ),
144
- columnVisibility: Object.fromEntries(models.hiddenColumns.value.map(key => [key, false])),
145
- })),
152
+ ),
146
153
  onSortingChange: updater => {
147
154
  if (blocked.value) return
148
- const current = models.sorting.value.map(sort => ({ id: sort.key, desc: sort.desc }))
155
+ const current = engineSorting(models.sorting.value)
149
156
  const next = typeof updater === 'function' ? updater(current) : updater
150
- models.sorting.value = next.map(sort => ({ key: sort.id, desc: sort.desc }))
157
+ models.sorting.value = modelSorting(next)
151
158
  },
152
159
  onRowSelectionChange: updater => {
153
160
  if (blocked.value) return
154
- const current = Object.fromEntries(
155
- models.selected.value.map(key => [rowId(key), true as const]),
156
- )
161
+ const current = engineSelection(models.selected.value)
157
162
  const next = typeof updater === 'function' ? updater(current) : updater
158
- models.selected.value = Object.keys(next)
159
- .filter(key => next[key])
160
- .map(rowKey)
163
+ models.selected.value = modelSelection(next)
161
164
  },
162
165
  })
163
- const visibleColumns = computed(() => {
164
- const visible = leaves.value.filter(column => !models.hiddenColumns.value.includes(column.key))
165
- const order = [...new Set([...models.columnOrder.value, ...visible.map(column => column.key)])]
166
- return visible.sort((a, b) => {
167
- const rank = (column: DataTableColumn<T>) =>
168
- column.pin === 'start' ? 0 : column.pin === 'end' ? 2 : 1
169
- return rank(a) - rank(b) || order.indexOf(a.key) - order.indexOf(b.key)
170
- })
171
- })
166
+ const visibleColumns = computed(() =>
167
+ orderColumns(leaves.value, models.hiddenColumns.value, models.columnOrder.value),
168
+ )
172
169
  const knownTotal = computed(() => !props.manual || props.total !== undefined)
173
170
  const total = computed(() =>
174
- props.manual
175
- ? Math.max(0, Math.floor(Number.isFinite(props.total) ? props.total! : props.rows.length))
176
- : table.getPreExpandedRowModel().rows.length,
171
+ totalRows(
172
+ props.manual,
173
+ props.total,
174
+ props.rows.length,
175
+ () => table.getPreExpandedRowModel().rows.length,
176
+ ),
177
177
  )
178
- const pageCount = computed(() => Math.max(1, Math.ceil(total.value / pageSize.value)))
178
+ const pageCount = computed(() => countPages(total.value, pageSize.value))
179
179
  const canNext = computed(() =>
180
- knownTotal.value
181
- ? page.value < pageCount.value
182
- : (props.hasNextPage ?? props.rows.length >= pageSize.value),
180
+ canGoNext(
181
+ knownTotal.value,
182
+ page.value,
183
+ pageCount.value,
184
+ props.hasNextPage,
185
+ props.rows.length,
186
+ pageSize.value,
187
+ ),
183
188
  )
184
189
  function toggleExpanded(key: DataTableKey, value?: boolean) {
185
190
  if (blocked.value) return
186
191
  const row = table.getCoreRowModel().rowsById[rowId(key)]
187
192
  if (!row?.getCanExpand()) return
188
193
  const next = value ?? !models.expanded.value.includes(key)
189
- models.expanded.value = next
190
- ? [...new Set([...models.expanded.value, key])]
191
- : models.expanded.value.filter(item => item !== key)
194
+ models.expanded.value = toggleKey(models.expanded.value, key, next)
192
195
  }
193
196
  function toggleSelected(key: DataTableKey, value?: boolean) {
194
197
  if (blocked.value) return
@@ -225,9 +228,7 @@ export function useDataTable<T extends object>(
225
228
  toggleExpanded: value => {
226
229
  if (blocked.value) return
227
230
  const next = value ?? !models.expandedGroups.value.includes(row.id)
228
- models.expandedGroups.value = next
229
- ? [...new Set([...models.expandedGroups.value, row.id])]
230
- : models.expandedGroups.value.filter(key => key !== row.id)
231
+ models.expandedGroups.value = toggleKey(models.expandedGroups.value, row.id, next)
231
232
  },
232
233
  aggregate: key => {
233
234
  const column = leaves.value.find(column => column.key === key)
@@ -244,43 +245,28 @@ export function useDataTable<T extends object>(
244
245
  return { ...context, id: row.id, label: labelOf(row.original), group }
245
246
  }),
246
247
  )
247
- const selectionRows = computed(() => {
248
- const source =
248
+ const selectionRows = computed(() =>
249
+ uniqueSelectable(
249
250
  props.selectAll === 'filtered'
250
251
  ? table.getFilteredRowModel().flatRows
251
- : table.getRowModel().rows.flatMap(row => (row.getIsGrouped() ? row.getLeafRows() : [row]))
252
- return [...new Map(source.filter(row => row.getCanSelect()).map(row => [row.id, row])).values()]
253
- })
254
- const pageSelection = computed(() => {
255
- const eligible = selectionRows.value
256
- if (!eligible.length) return false
257
- const count = eligible.filter(row => row.getIsSelected()).length
258
- return count === eligible.length
259
- ? true
260
- : count || eligible.some(row => row.getIsSomeSelected())
261
- ? 'indeterminate'
262
- : false
263
- })
252
+ : table.getRowModel().rows.flatMap(row => (row.getIsGrouped() ? row.getLeafRows() : [row])),
253
+ ),
254
+ )
255
+ const pageSelection = computed(() => selectionState(selectionRows.value))
264
256
  const selectionDisabled = computed(() => blocked.value || !selectionRows.value.length)
265
257
  function togglePage(selected: boolean | 'indeterminate') {
266
258
  if (blocked.value || props.selectionMode === 'single') return
267
- const keys = new Set(models.selected.value)
268
- for (const row of selectionRows.value) {
269
- const descendants = props.selectChildren === false ? [row] : [row, ...row.getLeafRows()]
270
- for (const item of descendants)
271
- if (item.getCanSelect()) {
272
- if (selected === true) keys.add(keyOf(item.original))
273
- else keys.delete(keyOf(item.original))
274
- }
275
- }
276
- models.selected.value = [...keys]
259
+ models.selected.value = toggleSelection(
260
+ models.selected.value,
261
+ selectionRows.value,
262
+ selected,
263
+ props.selectChildren !== false,
264
+ keyOf,
265
+ )
277
266
  }
278
267
  function setFilter(column: string, value: unknown) {
279
268
  if (blocked.value) return
280
- const next = models.columnFilters.value.filter(filter => filter.key !== column)
281
- if (value != null && value !== '' && !(Array.isArray(value) && !value.length))
282
- next.push({ key: column, value })
283
- models.columnFilters.value = next
269
+ models.columnFilters.value = nextColumnFilters(models.columnFilters.value, column, value)
284
270
  }
285
271
  function headerContext(column: DataTableColumn<T>) {
286
272
  const engine = leaves.value.some(item => item.key === column.key)
@@ -294,17 +280,8 @@ export function useDataTable<T extends object>(
294
280
  sortIndex: engine?.getSortIndex() ?? -1,
295
281
  filterValue: models.columnFilters.value.find(filter => filter.key === column.key)?.value,
296
282
  setFilter: (value: unknown) => setFilter(column.key, value),
297
- nextLabel:
298
- next === 'asc'
299
- ? t.value.table.sortAsc
300
- : next === 'desc'
301
- ? t.value.table.sortDesc
302
- : t.value.table.sortNone,
303
- ariaSort: sorting
304
- ? sorting === 'asc'
305
- ? ('ascending' as const)
306
- : ('descending' as const)
307
- : undefined,
283
+ nextLabel: sortLabel(next, t.value.table),
284
+ ariaSort: ariaSort(sorting),
308
285
  toggleSort: (multi = false) => {
309
286
  if (!blocked.value && column.sortable)
310
287
  engine?.toggleSorting(undefined, !!props.multiSort && multi)
@@ -328,9 +305,7 @@ export function useDataTable<T extends object>(
328
305
  toggleExpanded,
329
306
  setFilter,
330
307
  setColumnHidden: (key: string, hidden: boolean) => {
331
- models.hiddenColumns.value = hidden
332
- ? [...new Set([...models.hiddenColumns.value, key])]
333
- : models.hiddenColumns.value.filter(value => value !== key)
308
+ models.hiddenColumns.value = toggleKey(models.hiddenColumns.value, key, hidden)
334
309
  },
335
310
  })
336
311
  const state = computed<DataTableState<T>>(() => ({
@@ -363,8 +338,14 @@ export function useDataTable<T extends object>(
363
338
  watch(
364
339
  [pageCount, page, () => props.loading, () => props.pagination, knownTotal],
365
340
  () => {
366
- if (props.pagination && !props.loading && knownTotal.value && page.value > pageCount.value)
367
- models.page.value = pageCount.value
341
+ const target = clampedPage(
342
+ props.pagination,
343
+ props.loading,
344
+ knownTotal.value,
345
+ page.value,
346
+ pageCount.value,
347
+ )
348
+ if (target !== undefined) models.page.value = target
368
349
  },
369
350
  { immediate: true },
370
351
  )
@@ -378,14 +359,14 @@ export function useDataTable<T extends object>(
378
359
  models.grouping.value,
379
360
  ],
380
361
  () => {
381
- onChange({
382
- page: page.value,
383
- pageSize: pageSize.value,
384
- sorting: models.sorting.value.map(sort => ({ ...sort })),
385
- filter: models.filter.value,
386
- columnFilters: models.columnFilters.value.map(filter => ({ ...filter })),
387
- grouping: [...models.grouping.value],
388
- })
362
+ onChange(
363
+ tableQuery(page.value, pageSize.value, {
364
+ sorting: models.sorting.value,
365
+ filter: models.filter.value,
366
+ columnFilters: models.columnFilters.value,
367
+ grouping: models.grouping.value,
368
+ }),
369
+ )
389
370
  },
390
371
  { deep: true, flush: 'post' },
391
372
  )
@@ -395,8 +376,7 @@ export function useDataTable<T extends object>(
395
376
  onRowClick(row, event)
396
377
  }
397
378
  function displayValue(row: T, column: DataTableColumn<T>) {
398
- const value = valueOf(row, column)
399
- return column.format ? column.format(value, row) : value == null ? '—' : String(value)
379
+ return formatValue(row, column)
400
380
  }
401
381
  return {
402
382
  api,