@hina-ui/vue 1.7.4 → 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 (536) hide show
  1. package/README.md +37 -0
  2. package/dist/index.js +2251 -992
  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/Anchor.vue.d.ts.map +1 -1
  227. package/dist/types/vue/src/components/anchor/composables/useAnchor.d.ts +2 -7
  228. package/dist/types/vue/src/components/anchor/composables/useAnchor.d.ts.map +1 -1
  229. package/dist/types/vue/src/components/anchor/composables/useAnchorFollow.d.ts +1 -1
  230. package/dist/types/vue/src/components/anchor/composables/useAnchorFollow.d.ts.map +1 -1
  231. package/dist/types/vue/src/components/anchor/composables/useScrollSpy.d.ts +2 -5
  232. package/dist/types/vue/src/components/anchor/composables/useScrollSpy.d.ts.map +1 -1
  233. package/dist/types/vue/src/components/anchor/types.d.ts +1 -8
  234. package/dist/types/vue/src/components/anchor/types.d.ts.map +1 -1
  235. package/dist/types/vue/src/components/autocomplete/autocomplete.variants.d.ts +1 -1
  236. package/dist/types/vue/src/components/autocomplete/autocomplete.variants.d.ts.map +1 -1
  237. package/dist/types/vue/src/components/autocomplete/types.d.ts +1 -13
  238. package/dist/types/vue/src/components/autocomplete/types.d.ts.map +1 -1
  239. package/dist/types/vue/src/components/banner/utils/direction.d.ts +1 -2
  240. package/dist/types/vue/src/components/banner/utils/direction.d.ts.map +1 -1
  241. package/dist/types/vue/src/components/calendar/utils/format.d.ts +1 -6
  242. package/dist/types/vue/src/components/calendar/utils/format.d.ts.map +1 -1
  243. package/dist/types/vue/src/components/code-block/highlighter.d.ts +1 -3
  244. package/dist/types/vue/src/components/code-block/highlighter.d.ts.map +1 -1
  245. package/dist/types/vue/src/components/collapsible/CollapsibleTrigger.vue.d.ts.map +1 -1
  246. package/dist/types/vue/src/components/command-palette/composables/useCommandItems.d.ts +1 -1
  247. package/dist/types/vue/src/components/command-palette/utils/hotkey.d.ts +1 -8
  248. package/dist/types/vue/src/components/command-palette/utils/hotkey.d.ts.map +1 -1
  249. package/dist/types/vue/src/components/command-palette/utils/match.d.ts +5 -12
  250. package/dist/types/vue/src/components/command-palette/utils/match.d.ts.map +1 -1
  251. package/dist/types/vue/src/components/data-list/composables/useDataList.d.ts.map +1 -1
  252. package/dist/types/vue/src/components/data-list/utils/scroll.d.ts +1 -2
  253. package/dist/types/vue/src/components/data-list/utils/scroll.d.ts.map +1 -1
  254. package/dist/types/vue/src/components/data-table/column-sizing-styles.d.ts +1 -3
  255. package/dist/types/vue/src/components/data-table/column-sizing-styles.d.ts.map +1 -1
  256. package/dist/types/vue/src/components/data-table/column-sizing.d.ts +1 -21
  257. package/dist/types/vue/src/components/data-table/column-sizing.d.ts.map +1 -1
  258. package/dist/types/vue/src/components/data-table/composables/useDataTable.d.ts.map +1 -1
  259. package/dist/types/vue/src/components/data-table/composables/useTableColumns.d.ts.map +1 -1
  260. package/dist/types/vue/src/components/data-table/composables/useTableDrag.d.ts.map +1 -1
  261. package/dist/types/vue/src/components/data-table/composables/useTableExport.d.ts.map +1 -1
  262. package/dist/types/vue/src/components/data-table/composables/useTableResize.d.ts.map +1 -1
  263. package/dist/types/vue/src/components/data-table/composables/useTableResizeHandles.d.ts.map +1 -1
  264. package/dist/types/vue/src/components/data-table/composables/useTableVirtual.d.ts.map +1 -1
  265. package/dist/types/vue/src/components/data-table/types.d.ts +3 -153
  266. package/dist/types/vue/src/components/data-table/types.d.ts.map +1 -1
  267. package/dist/types/vue/src/components/data-table/utils.d.ts +1 -9
  268. package/dist/types/vue/src/components/data-table/utils.d.ts.map +1 -1
  269. package/dist/types/vue/src/components/date-range-field/utils/validity.d.ts +1 -11
  270. package/dist/types/vue/src/components/date-range-field/utils/validity.d.ts.map +1 -1
  271. package/dist/types/vue/src/components/editable/editable.variants.d.ts +1 -1
  272. package/dist/types/vue/src/components/editable/editable.variants.d.ts.map +1 -1
  273. package/dist/types/vue/src/components/file-upload/utils/select.d.ts +1 -16
  274. package/dist/types/vue/src/components/file-upload/utils/select.d.ts.map +1 -1
  275. package/dist/types/vue/src/components/file-upload/utils/size.d.ts +1 -1
  276. package/dist/types/vue/src/components/file-upload/utils/size.d.ts.map +1 -1
  277. package/dist/types/vue/src/components/float-button/float-button.variants.d.ts +1 -1
  278. package/dist/types/vue/src/components/float-button/float-button.variants.d.ts.map +1 -1
  279. package/dist/types/vue/src/components/form/Form.vue.d.ts +1 -1
  280. package/dist/types/vue/src/components/form/composables/useForm.d.ts +9 -15
  281. package/dist/types/vue/src/components/form/composables/useForm.d.ts.map +1 -1
  282. package/dist/types/vue/src/components/form/standard-schema.d.ts +1 -22
  283. package/dist/types/vue/src/components/form/standard-schema.d.ts.map +1 -1
  284. package/dist/types/vue/src/components/form/utils/errors.d.ts +1 -6
  285. package/dist/types/vue/src/components/form/utils/errors.d.ts.map +1 -1
  286. package/dist/types/vue/src/components/form/utils/focus.d.ts +1 -1
  287. package/dist/types/vue/src/components/form/utils/focus.d.ts.map +1 -1
  288. package/dist/types/vue/src/components/form/utils/values.d.ts +1 -2
  289. package/dist/types/vue/src/components/form/utils/values.d.ts.map +1 -1
  290. package/dist/types/vue/src/components/form-field/FormField.vue.d.ts.map +1 -1
  291. package/dist/types/vue/src/components/lightbox/composables/useLightboxHint.d.ts.map +1 -1
  292. package/dist/types/vue/src/components/lightbox/types.d.ts +1 -15
  293. package/dist/types/vue/src/components/lightbox/types.d.ts.map +1 -1
  294. package/dist/types/vue/src/components/lightbox/utils/clip.d.ts +1 -15
  295. package/dist/types/vue/src/components/lightbox/utils/clip.d.ts.map +1 -1
  296. package/dist/types/vue/src/components/lightbox/utils/download.d.ts +1 -2
  297. package/dist/types/vue/src/components/lightbox/utils/download.d.ts.map +1 -1
  298. package/dist/types/vue/src/components/lightbox/utils/gesture.d.ts +1 -25
  299. package/dist/types/vue/src/components/lightbox/utils/gesture.d.ts.map +1 -1
  300. package/dist/types/vue/src/components/lightbox/utils/paging.d.ts +1 -8
  301. package/dist/types/vue/src/components/lightbox/utils/paging.d.ts.map +1 -1
  302. package/dist/types/vue/src/components/lightbox/utils/pose.d.ts +1 -37
  303. package/dist/types/vue/src/components/lightbox/utils/pose.d.ts.map +1 -1
  304. package/dist/types/vue/src/components/lightbox/utils/source.d.ts +1 -3
  305. package/dist/types/vue/src/components/lightbox/utils/source.d.ts.map +1 -1
  306. package/dist/types/vue/src/components/lightbox/utils/zoom.d.ts +1 -39
  307. package/dist/types/vue/src/components/lightbox/utils/zoom.d.ts.map +1 -1
  308. package/dist/types/vue/src/components/meter-group/utils/tones.d.ts +1 -3
  309. package/dist/types/vue/src/components/meter-group/utils/tones.d.ts.map +1 -1
  310. package/dist/types/vue/src/components/month-grid/MonthGrid.vue.d.ts +1 -1
  311. package/dist/types/vue/src/components/multi-select/MultiSelect.vue.d.ts.map +1 -1
  312. package/dist/types/vue/src/components/pagination/composables/usePagination.d.ts +2 -2
  313. package/dist/types/vue/src/components/pagination/composables/usePagination.d.ts.map +1 -1
  314. package/dist/types/vue/src/components/pagination/types.d.ts +1 -22
  315. package/dist/types/vue/src/components/pagination/types.d.ts.map +1 -1
  316. package/dist/types/vue/src/components/pagination/utils/ranges.d.ts +1 -2
  317. package/dist/types/vue/src/components/pagination/utils/ranges.d.ts.map +1 -1
  318. package/dist/types/vue/src/components/password-input/PasswordInput.vue.d.ts +4 -1
  319. package/dist/types/vue/src/components/password-input/PasswordInput.vue.d.ts.map +1 -1
  320. package/dist/types/vue/src/components/prev-next/PrevNextLink.vue.d.ts.map +1 -1
  321. package/dist/types/vue/src/components/qr-code/export.d.ts +1 -2
  322. package/dist/types/vue/src/components/qr-code/export.d.ts.map +1 -1
  323. package/dist/types/vue/src/components/range-calendar/utils/limit.d.ts +1 -2
  324. package/dist/types/vue/src/components/range-calendar/utils/limit.d.ts.map +1 -1
  325. package/dist/types/vue/src/components/range-slider/RangeSlider.vue.d.ts +2 -2
  326. package/dist/types/vue/src/components/rating/utils/fill.d.ts +1 -1
  327. package/dist/types/vue/src/components/rating/utils/fill.d.ts.map +1 -1
  328. package/dist/types/vue/src/components/ripple/useRipple.d.ts.map +1 -1
  329. package/dist/types/vue/src/components/scroll-area/ScrollArea.vue.d.ts.map +1 -1
  330. package/dist/types/vue/src/components/scroll-area/composables/useEdgeShadow.d.ts +2 -1
  331. package/dist/types/vue/src/components/scroll-area/composables/useEdgeShadow.d.ts.map +1 -1
  332. package/dist/types/vue/src/components/scroll-area/composables/useLayerLock.d.ts.map +1 -1
  333. package/dist/types/vue/src/components/scroll-area/composables/useWheelRedirect.d.ts.map +1 -1
  334. package/dist/types/vue/src/components/scroll-area/scroll-restore.d.ts +1 -33
  335. package/dist/types/vue/src/components/scroll-area/scroll-restore.d.ts.map +1 -1
  336. package/dist/types/vue/src/components/search-input/SearchInput.vue.d.ts +4 -1
  337. package/dist/types/vue/src/components/search-input/SearchInput.vue.d.ts.map +1 -1
  338. package/dist/types/vue/src/components/select/types.d.ts +1 -13
  339. package/dist/types/vue/src/components/select/types.d.ts.map +1 -1
  340. package/dist/types/vue/src/components/slider/Slider.vue.d.ts +2 -2
  341. package/dist/types/vue/src/components/split-button/split-button.variants.d.ts +1 -1
  342. package/dist/types/vue/src/components/split-button/split-button.variants.d.ts.map +1 -1
  343. package/dist/types/vue/src/components/spoiler/SpoilerPainter.d.ts +1 -34
  344. package/dist/types/vue/src/components/spoiler/SpoilerPainter.d.ts.map +1 -1
  345. package/dist/types/vue/src/components/spoiler/utils/irisOrigin.d.ts +1 -5
  346. package/dist/types/vue/src/components/spoiler/utils/irisOrigin.d.ts.map +1 -1
  347. package/dist/types/vue/src/components/spoiler/worklet.d.ts +1 -1
  348. package/dist/types/vue/src/components/spoiler/worklet.d.ts.map +1 -1
  349. package/dist/types/vue/src/components/table/Table.vue.d.ts +6 -3
  350. package/dist/types/vue/src/components/table/Table.vue.d.ts.map +1 -1
  351. package/dist/types/vue/src/components/tabs/TabsList.vue.d.ts +6 -3
  352. package/dist/types/vue/src/components/tabs/TabsList.vue.d.ts.map +1 -1
  353. package/dist/types/vue/src/components/time/utils/relativeTime.d.ts +1 -1
  354. package/dist/types/vue/src/components/time/utils/relativeTime.d.ts.map +1 -1
  355. package/dist/types/vue/src/components/toast/composables/useToastLayout.d.ts +4 -11
  356. package/dist/types/vue/src/components/toast/composables/useToastLayout.d.ts.map +1 -1
  357. package/dist/types/vue/src/components/toast/store.d.ts +14 -62
  358. package/dist/types/vue/src/components/toast/store.d.ts.map +1 -1
  359. package/dist/types/vue/src/components/tree/composables/useTree.d.ts.map +1 -1
  360. package/dist/types/vue/src/components/tree/types.d.ts +1 -17
  361. package/dist/types/vue/src/components/tree/types.d.ts.map +1 -1
  362. package/dist/types/vue/src/components/tree/utils/selection.d.ts +1 -15
  363. package/dist/types/vue/src/components/tree/utils/selection.d.ts.map +1 -1
  364. package/dist/types/vue/src/components/tree-select/types.d.ts +1 -9
  365. package/dist/types/vue/src/components/tree-select/types.d.ts.map +1 -1
  366. package/dist/types/vue/src/components/tree-select/utils/filterTree.d.ts +1 -6
  367. package/dist/types/vue/src/components/tree-select/utils/filterTree.d.ts.map +1 -1
  368. package/dist/types/vue/src/components/virtual-list/composables/useVirtualList.d.ts +1 -1
  369. package/dist/types/vue/src/components/virtual-list/composables/useVirtualList.d.ts.map +1 -1
  370. package/dist/types/vue/src/components/visually-hidden/VisuallyHidden.vue.d.ts +4 -1
  371. package/dist/types/vue/src/components/visually-hidden/VisuallyHidden.vue.d.ts.map +1 -1
  372. package/dist/types/vue/src/lib/caret.d.ts +1 -1
  373. package/dist/types/vue/src/lib/caret.d.ts.map +1 -1
  374. package/dist/types/vue/src/lib/collapse.d.ts +2 -8
  375. package/dist/types/vue/src/lib/collapse.d.ts.map +1 -1
  376. package/dist/types/vue/src/lib/date.d.ts +1 -27
  377. package/dist/types/vue/src/lib/date.d.ts.map +1 -1
  378. package/dist/types/vue/src/lib/field-focus.d.ts +1 -1
  379. package/dist/types/vue/src/lib/field-focus.d.ts.map +1 -1
  380. package/dist/types/vue/src/lib/overlay-anchor.d.ts +2 -7
  381. package/dist/types/vue/src/lib/overlay-anchor.d.ts.map +1 -1
  382. package/dist/types/vue/src/lib/pointer-corridor.d.ts +1 -6
  383. package/dist/types/vue/src/lib/pointer-corridor.d.ts.map +1 -1
  384. package/dist/types/vue/src/lib/reka/useVirtualChoices.d.ts +3 -11
  385. package/dist/types/vue/src/lib/reka/useVirtualChoices.d.ts.map +1 -1
  386. package/dist/types/vue/src/lib/reka/useVirtualTree.d.ts +1 -1
  387. package/dist/types/vue/src/lib/reka/useVirtualTree.d.ts.map +1 -1
  388. package/dist/types/vue/src/lib/virtual/navigation.d.ts +1 -2
  389. package/dist/types/vue/src/lib/virtual/navigation.d.ts.map +1 -1
  390. package/dist/types/vue/src/lib/virtual/useVirtualCollection.d.ts +1 -1
  391. package/dist/types/vue/src/lib/virtual/useVirtualCollection.d.ts.map +1 -1
  392. package/dist/types/vue/src/lib/virtual/useVirtualWindow.d.ts +2 -15
  393. package/dist/types/vue/src/lib/virtual/useVirtualWindow.d.ts.map +1 -1
  394. package/dist/types/vue/src/locale/en-US.d.ts +1 -2
  395. package/dist/types/vue/src/locale/en-US.d.ts.map +1 -1
  396. package/dist/types/vue/src/locale/index.d.ts +3 -4
  397. package/dist/types/vue/src/locale/index.d.ts.map +1 -1
  398. package/dist/types/vue/src/locale/types.d.ts +1 -234
  399. package/dist/types/vue/src/locale/types.d.ts.map +1 -1
  400. package/dist/types/vue/src/locale/zh-CN.d.ts +1 -2
  401. package/dist/types/vue/src/locale/zh-CN.d.ts.map +1 -1
  402. package/dist/types/vue/src/primitives/number-field/NumberFieldDecrement.vue.d.ts +17 -0
  403. package/dist/types/vue/src/primitives/number-field/NumberFieldDecrement.vue.d.ts.map +1 -0
  404. package/dist/types/vue/src/primitives/number-field/NumberFieldIncrement.vue.d.ts +17 -0
  405. package/dist/types/vue/src/primitives/number-field/NumberFieldIncrement.vue.d.ts.map +1 -0
  406. package/dist/types/vue/src/primitives/number-field/NumberFieldInput.vue.d.ts +16 -0
  407. package/dist/types/vue/src/primitives/number-field/NumberFieldInput.vue.d.ts.map +1 -0
  408. package/dist/types/vue/src/primitives/number-field/NumberFieldRoot.vue.d.ts +47 -0
  409. package/dist/types/vue/src/primitives/number-field/NumberFieldRoot.vue.d.ts.map +1 -0
  410. package/dist/types/vue/src/primitives/number-field/context.d.ts +41 -0
  411. package/dist/types/vue/src/primitives/number-field/context.d.ts.map +1 -0
  412. package/dist/types/vue/src/primitives/number-field/index.d.ts +5 -0
  413. package/dist/types/vue/src/primitives/number-field/index.d.ts.map +1 -0
  414. package/dist/types/vue/src/primitives/utils/timers.d.ts +6 -0
  415. package/dist/types/vue/src/primitives/utils/timers.d.ts.map +1 -0
  416. package/dist/types/vue/src/primitives/utils/usePrimitiveElement.d.ts +6 -0
  417. package/dist/types/vue/src/primitives/utils/usePrimitiveElement.d.ts.map +1 -0
  418. package/dist/types/vue/src/primitives/utils/useVModel.d.ts +7 -0
  419. package/dist/types/vue/src/primitives/utils/useVModel.d.ts.map +1 -0
  420. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInput.d.ts +66 -0
  421. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInput.d.ts.map +1 -0
  422. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue.d.ts +28 -0
  423. package/dist/types/vue/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue.d.ts.map +1 -0
  424. package/package.json +3 -2
  425. package/src/components/accordion/AccordionTrigger.vue +9 -1
  426. package/src/components/anchor/Anchor.vue +13 -9
  427. package/src/components/anchor/composables/useAnchor.ts +3 -12
  428. package/src/components/anchor/composables/useAnchorFollow.ts +10 -63
  429. package/src/components/anchor/composables/useScrollSpy.ts +22 -38
  430. package/src/components/anchor/types.ts +1 -8
  431. package/src/components/autocomplete/autocomplete.variants.ts +1 -1
  432. package/src/components/autocomplete/composables/useAutocomplete.ts +1 -1
  433. package/src/components/autocomplete/types.ts +1 -16
  434. package/src/components/banner/utils/direction.ts +1 -10
  435. package/src/components/calendar/utils/format.ts +1 -23
  436. package/src/components/code-block/highlighter.ts +1 -98
  437. package/src/components/collapsible/CollapsibleTrigger.vue +8 -1
  438. package/src/components/command-palette/utils/hotkey.ts +1 -27
  439. package/src/components/command-palette/utils/match.ts +5 -75
  440. package/src/components/data-list/composables/useDataList.ts +2 -4
  441. package/src/components/data-list/utils/scroll.ts +1 -26
  442. package/src/components/data-table/column-sizing-styles.ts +1 -40
  443. package/src/components/data-table/column-sizing.ts +1 -101
  444. package/src/components/data-table/composables/useDataTable.ts +103 -123
  445. package/src/components/data-table/composables/useTableColumns.ts +38 -113
  446. package/src/components/data-table/composables/useTableDrag.ts +21 -11
  447. package/src/components/data-table/composables/useTableExport.ts +8 -32
  448. package/src/components/data-table/composables/useTableResize.ts +13 -17
  449. package/src/components/data-table/composables/useTableResizeHandles.ts +6 -21
  450. package/src/components/data-table/types.ts +15 -155
  451. package/src/components/data-table/utils.ts +1 -75
  452. package/src/components/date-range-field/utils/validity.ts +1 -21
  453. package/src/components/editable/editable.variants.ts +1 -1
  454. package/src/components/file-upload/utils/select.ts +1 -58
  455. package/src/components/file-upload/utils/size.ts +1 -16
  456. package/src/components/float-button/float-button.variants.ts +1 -1
  457. package/src/components/form/composables/useForm.ts +24 -135
  458. package/src/components/form/standard-schema.ts +1 -26
  459. package/src/components/form/utils/errors.ts +1 -48
  460. package/src/components/form/utils/focus.ts +1 -10
  461. package/src/components/form/utils/values.ts +1 -23
  462. package/src/components/form-field/FormField.vue +3 -2
  463. package/src/components/lightbox/composables/useLightboxHint.ts +6 -1
  464. package/src/components/lightbox/types.ts +1 -14
  465. package/src/components/lightbox/utils/clip.ts +1 -117
  466. package/src/components/lightbox/utils/download.ts +1 -29
  467. package/src/components/lightbox/utils/gesture.ts +1 -54
  468. package/src/components/lightbox/utils/paging.ts +1 -33
  469. package/src/components/lightbox/utils/pose.ts +1 -142
  470. package/src/components/lightbox/utils/source.ts +1 -17
  471. package/src/components/lightbox/utils/zoom.ts +1 -127
  472. package/src/components/meter-group/utils/tones.ts +1 -14
  473. package/src/components/multi-select/MultiSelect.vue +1 -2
  474. package/src/components/number-input/NumberInput.vue +2 -2
  475. package/src/components/pagination/composables/usePagination.ts +2 -3
  476. package/src/components/pagination/types.ts +1 -19
  477. package/src/components/pagination/utils/ranges.ts +1 -12
  478. package/src/components/password-input/PasswordInput.vue +6 -0
  479. package/src/components/prev-next/PrevNext.vue +1 -1
  480. package/src/components/prev-next/PrevNextLink.vue +1 -1
  481. package/src/components/qr-code/export.ts +1 -65
  482. package/src/components/range-calendar/utils/limit.ts +1 -11
  483. package/src/components/rating/utils/fill.ts +1 -4
  484. package/src/components/ripple/useRipple.ts +10 -198
  485. package/src/components/scroll-area/ScrollArea.vue +6 -18
  486. package/src/components/scroll-area/composables/useEdgeShadow.ts +7 -16
  487. package/src/components/scroll-area/composables/useLayerLock.ts +2 -9
  488. package/src/components/scroll-area/composables/useWheelRedirect.ts +2 -10
  489. package/src/components/scroll-area/scroll-restore.ts +1 -148
  490. package/src/components/search-input/SearchInput.vue +6 -0
  491. package/src/components/select/types.ts +1 -23
  492. package/src/components/split-button/split-button.variants.ts +1 -1
  493. package/src/components/spoiler/SpoilerPainter.ts +1 -197
  494. package/src/components/spoiler/utils/irisOrigin.ts +1 -40
  495. package/src/components/spoiler/worklet.ts +1 -199
  496. package/src/components/table/Table.vue +9 -0
  497. package/src/components/tabs/TabsList.vue +9 -0
  498. package/src/components/time/utils/relativeTime.ts +1 -20
  499. package/src/components/toast/composables/useToastLayout.ts +12 -24
  500. package/src/components/toast/store.ts +16 -228
  501. package/src/components/tree/composables/useTree.ts +17 -33
  502. package/src/components/tree/types.ts +1 -20
  503. package/src/components/tree/utils/selection.ts +1 -78
  504. package/src/components/tree-select/types.ts +1 -34
  505. package/src/components/tree-select/utils/filterTree.ts +1 -19
  506. package/src/components/virtual-list/composables/useVirtualList.ts +16 -42
  507. package/src/components/visually-hidden/VisuallyHidden.vue +21 -3
  508. package/src/lib/caret.ts +1 -48
  509. package/src/lib/collapse.ts +6 -29
  510. package/src/lib/date.ts +1 -111
  511. package/src/lib/field-focus.ts +1 -36
  512. package/src/lib/overlay-anchor.ts +11 -37
  513. package/src/lib/pointer-corridor.ts +1 -26
  514. package/src/lib/reka/useVirtualChoices.ts +55 -133
  515. package/src/lib/reka/useVirtualTree.ts +22 -65
  516. package/src/lib/virtual/navigation.ts +1 -26
  517. package/src/lib/virtual/useVirtualCollection.ts +28 -47
  518. package/src/lib/virtual/useVirtualWindow.ts +15 -25
  519. package/src/locale/en-US.ts +1 -220
  520. package/src/locale/index.ts +9 -53
  521. package/src/locale/types.ts +1 -225
  522. package/src/locale/zh-CN.ts +1 -215
  523. package/src/primitives/number-field/LICENSE +21 -0
  524. package/src/primitives/number-field/NumberFieldDecrement.vue +21 -0
  525. package/src/primitives/number-field/NumberFieldIncrement.vue +21 -0
  526. package/src/primitives/number-field/NumberFieldInput.vue +114 -0
  527. package/src/primitives/number-field/NumberFieldRoot.vue +169 -0
  528. package/src/primitives/number-field/context.ts +111 -0
  529. package/src/primitives/number-field/index.ts +14 -0
  530. package/src/primitives/utils/LICENSE +44 -0
  531. package/src/primitives/utils/timers.ts +6 -0
  532. package/src/primitives/utils/usePrimitiveElement.ts +12 -0
  533. package/src/primitives/utils/useVModel.ts +37 -0
  534. package/src/primitives/visually-hidden/LICENSE +21 -0
  535. package/src/primitives/visually-hidden/VisuallyHiddenInput.ts +97 -0
  536. package/src/primitives/visually-hidden/VisuallyHiddenInputBubble.vue +49 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 UnoVue <https://github.com/unovue>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,407 @@
1
+ import { NumberFormatter, NumberParser } from '@internationalized/number'
2
+
3
+ export type NumberFieldStep = 'increase' | 'decrease'
4
+ export type NumberFieldBound = 'min' | 'max'
5
+ export type NumberFieldInputMode = 'decimal' | 'numeric'
6
+
7
+ export interface NumberFieldRange {
8
+ min?: number
9
+ max?: number
10
+ step: number
11
+ stepSnapping: boolean
12
+ }
13
+
14
+ export interface NumberFieldFormat {
15
+ formatter: NumberFormatter
16
+ parser: NumberParser
17
+ }
18
+
19
+ export const NUMBER_FIELD_DEFAULT_LOCALE = 'en'
20
+ export const NUMBER_FIELD_PAGE_STEPS = 10
21
+ export const NUMBER_FIELD_HOLD_DELAY = 400
22
+ export const NUMBER_FIELD_HOLD_INTERVAL = 60
23
+
24
+ export function clamp(
25
+ value: number,
26
+ min = Number.NEGATIVE_INFINITY,
27
+ max = Number.POSITIVE_INFINITY,
28
+ ) {
29
+ return Math.min(max, Math.max(min, value))
30
+ }
31
+
32
+ export function roundToStepPrecision(value: number, step: number) {
33
+ let rounded = value
34
+ const text = step.toString()
35
+ const point = text.indexOf('.')
36
+ const precision = point >= 0 ? text.length - point : 0
37
+ if (precision > 0) {
38
+ const pow = 10 ** precision
39
+ rounded = Math.round(rounded * pow) / pow
40
+ }
41
+ return rounded
42
+ }
43
+
44
+ export function snapValueToStep(
45
+ value: number,
46
+ minValue: number | undefined,
47
+ maxValue: number | undefined,
48
+ step: number,
49
+ ) {
50
+ const min = Number(minValue)
51
+ const max = Number(maxValue)
52
+ const remainder = (value - (Number.isNaN(min) ? 0 : min)) % step
53
+ let snapped = roundToStepPrecision(
54
+ Math.abs(remainder) * 2 >= step
55
+ ? value + Math.sign(remainder) * (step - Math.abs(remainder))
56
+ : value - remainder,
57
+ step,
58
+ )
59
+ if (!Number.isNaN(min)) {
60
+ if (snapped < min) snapped = min
61
+ else if (!Number.isNaN(max) && snapped > max)
62
+ snapped = min + Math.floor(roundToStepPrecision((max - min) / step, step)) * step
63
+ } else if (!Number.isNaN(max) && snapped > max)
64
+ snapped = Math.floor(roundToStepPrecision(max / step, step)) * step
65
+ return roundToStepPrecision(snapped, step)
66
+ }
67
+
68
+ export function handleDecimalOperation(operator: '-' | '+', left: number, right: number) {
69
+ let result = operator === '+' ? left + right : left - right
70
+ if (left % 1 !== 0 || right % 1 !== 0) {
71
+ const leftDecimals = left.toString().split('.')[1]?.length ?? 0
72
+ const rightDecimals = right.toString().split('.')[1]?.length ?? 0
73
+ const multiplier = 10 ** Math.max(leftDecimals, rightDecimals)
74
+ const a = Math.round(left * multiplier)
75
+ const b = Math.round(right * multiplier)
76
+ result = (operator === '+' ? a + b : a - b) / multiplier
77
+ }
78
+ return result
79
+ }
80
+
81
+ export function isNullish(value: unknown): value is null | undefined {
82
+ return value === null || value === undefined
83
+ }
84
+
85
+ function isNumber(value: number | null | undefined): value is number {
86
+ return !isNullish(value) && !Number.isNaN(value)
87
+ }
88
+
89
+ export function resolveNumberFieldLocale(locale?: string, inherited?: string) {
90
+ return locale || inherited || NUMBER_FIELD_DEFAULT_LOCALE
91
+ }
92
+
93
+ export function createNumberFieldFormat(
94
+ locale: string,
95
+ options?: Intl.NumberFormatOptions,
96
+ ): NumberFieldFormat {
97
+ return {
98
+ formatter: new NumberFormatter(locale, options),
99
+ parser: new NumberParser(locale, options),
100
+ }
101
+ }
102
+
103
+ export function numberFieldInputMode(format: NumberFieldFormat): NumberFieldInputMode {
104
+ return format.formatter.resolvedOptions().maximumFractionDigits! > 0 ? 'decimal' : 'numeric'
105
+ }
106
+
107
+ export function formatNumberFieldValue(
108
+ value: number | null | undefined,
109
+ format: NumberFieldFormat,
110
+ ) {
111
+ return isNumber(value) ? format.formatter.format(value) : ''
112
+ }
113
+
114
+ export function clampNumberFieldValue(
115
+ value: number,
116
+ range: NumberFieldRange,
117
+ format: NumberFieldFormat,
118
+ ) {
119
+ const { min, max, step, stepSnapping } = range
120
+ const clamped =
121
+ Number.isNaN(step) || !stepSnapping
122
+ ? clamp(value, min, max)
123
+ : snapValueToStep(value, min, max, step)
124
+ return format.parser.parse(format.formatter.format(clamped))
125
+ }
126
+
127
+ export function nextNumberFieldValue(
128
+ direction: NumberFieldStep,
129
+ from: number,
130
+ range: NumberFieldRange,
131
+ format: NumberFieldFormat,
132
+ multiplier = 1,
133
+ ) {
134
+ const { step } = range
135
+ const operator = direction === 'increase' ? '+' : '-'
136
+ let next: number
137
+ if (range.stepSnapping && !Number.isNaN(step)) {
138
+ const snapped = snapValueToStep(from, range.min, range.max, step)
139
+ if (snapped === from) next = handleDecimalOperation(operator, from, step * multiplier)
140
+ else {
141
+ const aligned =
142
+ direction === 'increase'
143
+ ? snapped > from
144
+ ? snapped
145
+ : handleDecimalOperation('+', snapped, step)
146
+ : snapped < from
147
+ ? snapped
148
+ : handleDecimalOperation('-', snapped, step)
149
+ next =
150
+ multiplier > 1
151
+ ? handleDecimalOperation(operator, aligned, step * (multiplier - 1))
152
+ : aligned
153
+ }
154
+ } else next = handleDecimalOperation(operator, from, step * multiplier)
155
+ return clampNumberFieldValue(next, range, format)
156
+ }
157
+
158
+ export function isNumberFieldAtLimit(
159
+ direction: NumberFieldStep,
160
+ value: number | null | undefined,
161
+ range: NumberFieldRange,
162
+ format: NumberFieldFormat,
163
+ ) {
164
+ if (!isNumber(value)) return false
165
+ const next = nextNumberFieldValue(direction, value, range, format)
166
+ return direction === 'increase' ? next <= value : next >= value
167
+ }
168
+
169
+ export function stepNumberFieldText(
170
+ direction: NumberFieldStep,
171
+ text: string,
172
+ range: NumberFieldRange,
173
+ format: NumberFieldFormat,
174
+ multiplier = 1,
175
+ ) {
176
+ const current = format.parser.parse(text)
177
+ if (Number.isNaN(current)) return clampNumberFieldValue(range.min ?? 0, range, format)
178
+ return nextNumberFieldValue(direction, current, range, format, multiplier)
179
+ }
180
+
181
+ export function boundNumberFieldValue(
182
+ bound: NumberFieldBound,
183
+ range: NumberFieldRange,
184
+ format: NumberFieldFormat,
185
+ ) {
186
+ const target = bound === 'min' ? range.min : range.max
187
+ return target === undefined ? undefined : clampNumberFieldValue(target, range, format)
188
+ }
189
+
190
+ export interface NumberFieldCommit {
191
+ value: number | undefined
192
+ reformat: boolean
193
+ }
194
+
195
+ export function commitNumberFieldText(
196
+ text: string,
197
+ range: NumberFieldRange,
198
+ format: NumberFieldFormat,
199
+ ): NumberFieldCommit {
200
+ const parsed = format.parser.parse(text)
201
+ return {
202
+ value: Number.isNaN(parsed) ? undefined : clampNumberFieldValue(parsed, range, format),
203
+ reformat: text.length > 0,
204
+ }
205
+ }
206
+
207
+ export interface NumberFieldBeforeInput {
208
+ isComposing: boolean
209
+ inputType: string
210
+ data: string | null
211
+ }
212
+
213
+ export interface NumberFieldTextSelection {
214
+ value: string
215
+ selectionStart: number | null
216
+ selectionEnd: number | null
217
+ }
218
+
219
+ export function rejectsNumberFieldInput(
220
+ event: NumberFieldBeforeInput,
221
+ input: NumberFieldTextSelection,
222
+ range: NumberFieldRange,
223
+ format: NumberFieldFormat,
224
+ ) {
225
+ if (event.isComposing) return false
226
+ if (event.inputType.startsWith('delete') || event.inputType.startsWith('history')) return false
227
+ const next =
228
+ input.value.slice(0, input.selectionStart ?? undefined) +
229
+ (event.data ?? '') +
230
+ input.value.slice(input.selectionEnd ?? undefined)
231
+ return !format.parser.isValidPartialNumber(next, range.min, range.max)
232
+ }
233
+
234
+ export type NumberFieldKeyAction =
235
+ | { type: 'step'; direction: NumberFieldStep; multiplier: number; prevent: true }
236
+ | { type: 'bound'; bound: NumberFieldBound; prevent: true }
237
+ | { type: 'commit'; prevent: false }
238
+
239
+ export function numberFieldKeyAction(
240
+ event: { key: string; isComposing: boolean },
241
+ composing: boolean,
242
+ ): NumberFieldKeyAction | undefined {
243
+ if (composing || event.isComposing) return undefined
244
+ switch (event.key) {
245
+ case 'ArrowUp':
246
+ return { type: 'step', direction: 'increase', multiplier: 1, prevent: true }
247
+ case 'ArrowDown':
248
+ return { type: 'step', direction: 'decrease', multiplier: 1, prevent: true }
249
+ case 'PageUp':
250
+ return {
251
+ type: 'step',
252
+ direction: 'increase',
253
+ multiplier: NUMBER_FIELD_PAGE_STEPS,
254
+ prevent: true,
255
+ }
256
+ case 'PageDown':
257
+ return {
258
+ type: 'step',
259
+ direction: 'decrease',
260
+ multiplier: NUMBER_FIELD_PAGE_STEPS,
261
+ prevent: true,
262
+ }
263
+ case 'Home':
264
+ return { type: 'bound', bound: 'min', prevent: true }
265
+ case 'End':
266
+ return { type: 'bound', bound: 'max', prevent: true }
267
+ case 'Enter':
268
+ return { type: 'commit', prevent: false }
269
+ default:
270
+ return undefined
271
+ }
272
+ }
273
+
274
+ export interface NumberFieldWheelState {
275
+ focused: boolean
276
+ disabled: boolean
277
+ inverted: boolean
278
+ }
279
+
280
+ export function numberFieldWheelStep(
281
+ event: { deltaX: number; deltaY: number },
282
+ state: NumberFieldWheelState,
283
+ ): NumberFieldStep | undefined {
284
+ if (state.disabled || !state.focused) return undefined
285
+ if (Math.abs(event.deltaY) <= Math.abs(event.deltaX)) return undefined
286
+ const down = event.deltaY > 0
287
+ return down !== state.inverted ? 'increase' : 'decrease'
288
+ }
289
+
290
+ export function deepActiveElement(root: Pick<DocumentOrShadowRoot, 'activeElement'>) {
291
+ let active = root.activeElement
292
+ while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement
293
+ return active
294
+ }
295
+
296
+ export interface NumberFieldTimers {
297
+ setTimeout: (callback: () => void, delay: number) => unknown
298
+ clearTimeout: (handle: unknown) => void
299
+ }
300
+
301
+ export interface NumberFieldPressHoldOptions {
302
+ timers: NumberFieldTimers
303
+ disabled: () => boolean
304
+ trigger: () => void
305
+ pressed: (pressed: boolean) => void
306
+ }
307
+
308
+ export interface NumberFieldPress {
309
+ button: number
310
+ preventDefault: () => void
311
+ }
312
+
313
+ export function createNumberFieldPressHold(options: NumberFieldPressHoldOptions) {
314
+ let handle: unknown
315
+ let pressed = false
316
+ const reset = () => options.timers.clearTimeout(handle)
317
+ const repeat = (delay: number) => {
318
+ reset()
319
+ if (options.disabled()) return
320
+ options.trigger()
321
+ handle = options.timers.setTimeout(() => repeat(NUMBER_FIELD_HOLD_INTERVAL), delay)
322
+ }
323
+ return {
324
+ press(event: NumberFieldPress) {
325
+ if (event.button !== 0 || pressed) return
326
+ event.preventDefault()
327
+ pressed = true
328
+ options.pressed(true)
329
+ repeat(NUMBER_FIELD_HOLD_DELAY)
330
+ },
331
+ release() {
332
+ pressed = false
333
+ options.pressed(false)
334
+ reset()
335
+ },
336
+ dispose: reset,
337
+ }
338
+ }
339
+
340
+ export function numberFieldRootAttributes(state: { disabled: boolean; readonly: boolean }) {
341
+ return {
342
+ role: 'group',
343
+ 'data-disabled': state.disabled ? '' : undefined,
344
+ 'data-readonly': state.readonly ? '' : undefined,
345
+ } as const
346
+ }
347
+
348
+ export interface NumberFieldInputState {
349
+ id: string | undefined
350
+ value: string
351
+ inputMode: NumberFieldInputMode
352
+ disabled: boolean
353
+ readonly: boolean
354
+ modelValue: number | null | undefined
355
+ min: number | undefined
356
+ max: number | undefined
357
+ }
358
+
359
+ export function numberFieldInputAttributes(state: NumberFieldInputState) {
360
+ return {
361
+ id: state.id,
362
+ value: state.value,
363
+ role: 'spinbutton',
364
+ type: 'text',
365
+ tabindex: '0',
366
+ inputmode: state.inputMode,
367
+ disabled: state.disabled ? '' : undefined,
368
+ 'data-disabled': state.disabled ? '' : undefined,
369
+ readonly: state.readonly ? '' : undefined,
370
+ 'data-readonly': state.readonly ? '' : undefined,
371
+ autocomplete: 'off',
372
+ autocorrect: 'off',
373
+ spellcheck: 'false',
374
+ 'aria-roledescription': 'Number field',
375
+ 'aria-valuenow': state.modelValue,
376
+ 'aria-valuemin': state.min,
377
+ 'aria-valuemax': state.max,
378
+ } as const
379
+ }
380
+
381
+ export function isNumberFieldStepDisabled(state: {
382
+ disabled: boolean
383
+ readonly: boolean
384
+ own: boolean
385
+ atLimit: boolean
386
+ }) {
387
+ return state.disabled || state.readonly || state.own || state.atLimit
388
+ }
389
+
390
+ export interface NumberFieldStepState {
391
+ direction: NumberFieldStep
392
+ button: boolean
393
+ disabled: boolean
394
+ pressed: boolean
395
+ }
396
+
397
+ export function numberFieldStepAttributes(state: NumberFieldStepState) {
398
+ return {
399
+ tabindex: '-1',
400
+ 'aria-label': state.direction === 'increase' ? 'Increase' : 'Decrease',
401
+ type: state.button ? 'button' : undefined,
402
+ style: { userSelect: state.pressed ? 'none' : undefined },
403
+ disabled: state.disabled ? '' : undefined,
404
+ 'data-disabled': state.disabled ? '' : undefined,
405
+ 'data-pressed': state.pressed ? 'true' : undefined,
406
+ } as const
407
+ }
@@ -155,9 +155,17 @@
155
155
  --hn-skeleton-wave: rgb(255 255 255 / 0.04);
156
156
  }
157
157
 
158
+ :where(:root) {
159
+ --hn-font-sans: var(--hn-font-latin), var(--hn-font-cjk), ui-sans-serif, system-ui, sans-serif;
160
+ }
161
+
162
+ :where(:root:lang(zh)) {
163
+ --hn-font-sans: var(--hn-font-cjk), var(--hn-font-latin), ui-sans-serif, system-ui, sans-serif;
164
+ }
165
+
158
166
  :root {
159
- --hn-font-sans:
160
- 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', ui-sans-serif, system-ui, sans-serif;
167
+ --hn-font-latin: 'Noto Sans';
168
+ --hn-font-cjk: 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei';
161
169
  --hn-font-mono:
162
170
  'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, 'Noto Sans SC', 'PingFang SC',
163
171
  'Microsoft YaHei', monospace;
@@ -0,0 +1,16 @@
1
+ import type { CompletionContext, CompletionEdit } from '../lib/completion'
2
+
3
+ export type { CompletionContext, CompletionEdit } from '../lib/completion'
4
+
5
+ export interface AutocompleteOption {
6
+ value: string | number
7
+ label: string
8
+ description?: string
9
+ disabled?: boolean
10
+ }
11
+
12
+ export interface AutocompleteSelection<T extends AutocompleteOption = AutocompleteOption> {
13
+ option: T
14
+ context: CompletionContext
15
+ edit: CompletionEdit
16
+ }
@@ -0,0 +1,170 @@
1
+ export type DataTableKey = string | number
2
+ export type DataTableKeyField<T> = {
3
+ [K in keyof T]-?: T[K] extends DataTableKey ? K : never
4
+ }[keyof T] &
5
+ string
6
+ export type DataTableAggregate = 'sum' | 'min' | 'max' | 'mean' | 'count' | 'uniqueCount'
7
+ export type DataTableScope = 'page' | 'filtered' | 'selected' | 'all'
8
+ export type DataTableFilterMode = 'contains' | 'equals' | 'in' | 'range'
9
+
10
+ export interface DataTableColumn<T> {
11
+ key: string
12
+ label: string
13
+ children?: DataTableColumn<T>[]
14
+ field?: keyof T
15
+ accessor?: (row: T) => unknown
16
+ sortable?: boolean
17
+ sort?: (a: T, b: T) => number
18
+ filterable?: boolean
19
+ filter?: (row: T, query: string) => boolean
20
+ filterValue?: (row: T, value: unknown) => boolean
21
+ filterMode?: DataTableFilterMode
22
+ format?: (value: unknown, row: T) => string | number
23
+ align?: 'start' | 'center' | 'end'
24
+ width?: number | string
25
+ minWidth?: number | string
26
+ maxWidth?: number | string
27
+ pin?: 'start' | 'end'
28
+ truncate?: boolean
29
+ resizable?: boolean
30
+ reorderable?: boolean
31
+ aggregate?: DataTableAggregate | ((rows: T[]) => unknown)
32
+ footer?: boolean | string | ((rows: T[]) => string | number)
33
+ editable?: boolean | ((row: T) => boolean)
34
+ parse?: (value: unknown, row: T) => unknown
35
+ validate?: (value: unknown, row: T) => string | undefined | Promise<string | undefined>
36
+ exportable?: boolean
37
+ exportValue?: (row: T) => unknown
38
+ headerClass?: string
39
+ cellClass?: string | ((row: T) => string | undefined)
40
+ }
41
+ export interface DataTableSort {
42
+ key: string
43
+ desc: boolean
44
+ }
45
+ export interface DataTableFilter {
46
+ key: string
47
+ value: unknown
48
+ }
49
+ export interface DataTableQuery {
50
+ page: number
51
+ pageSize: number
52
+ sorting: DataTableSort[]
53
+ filter: string
54
+ columnFilters: DataTableFilter[]
55
+ grouping: string[]
56
+ }
57
+ export interface DataTableEdit<T> {
58
+ key: DataTableKey
59
+ row: T
60
+ values: Record<string, unknown>
61
+ column?: string
62
+ }
63
+ export interface DataTableReorder<T> {
64
+ row: T
65
+ target: T
66
+ parent?: T
67
+ from: number
68
+ to: number
69
+ rows: T[]
70
+ }
71
+ export interface DataTableExportOptions {
72
+ scope?: DataTableScope
73
+ columns?: string[]
74
+ formatted?: boolean
75
+ delimiter?: ',' | ';' | '\t'
76
+ bom?: boolean
77
+ filename?: string
78
+ }
79
+ export interface DataTableRowContext<T> {
80
+ row: T
81
+ key: DataTableKey
82
+ index: number
83
+ depth: number
84
+ selected: boolean
85
+ indeterminate: boolean
86
+ selectable: boolean
87
+ expanded: boolean
88
+ expandable: boolean
89
+ toggleSelected: (selected?: boolean) => void
90
+ toggleExpanded: (expanded?: boolean) => void
91
+ startEdit: (column?: string) => void
92
+ }
93
+ export interface DataTableCellContext<T> extends DataTableRowContext<T> {
94
+ column: DataTableColumn<T>
95
+ value: unknown
96
+ }
97
+ export interface DataTableHeaderContext<T> {
98
+ column: DataTableColumn<T>
99
+ sorting: 'asc' | 'desc' | false
100
+ sortIndex: number
101
+ filterValue: unknown
102
+ toggleSort: (multi?: boolean) => void
103
+ setFilter: (value: unknown) => void
104
+ }
105
+ export interface DataTableGroupContext<T> {
106
+ key: string
107
+ column: DataTableColumn<T>
108
+ value: unknown
109
+ rows: T[]
110
+ depth: number
111
+ expanded: boolean
112
+ toggleExpanded: (expanded?: boolean) => void
113
+ aggregate: (column: string) => unknown
114
+ }
115
+ export interface DataTableEditorContext<T> extends DataTableCellContext<T> {
116
+ value: unknown
117
+ pending: boolean
118
+ error?: string
119
+ updateValue: (value: unknown) => void
120
+ commit: () => Promise<void>
121
+ cancel: () => void
122
+ }
123
+ export interface DataTableApi<T> {
124
+ getRows: (scope?: DataTableScope) => T[]
125
+ toggleSelected: (key: DataTableKey, selected?: boolean) => void
126
+ toggleExpanded: (key: DataTableKey, expanded?: boolean) => void
127
+ setFilter: (column: string, value: unknown) => void
128
+ setColumnHidden: (column: string, hidden: boolean) => void
129
+ setColumnWidth: (column: string, width: number) => void
130
+ moveColumn: (column: string, target: string) => void
131
+ moveRow: (key: DataTableKey, target: DataTableKey) => void
132
+ startEdit: (key: DataTableKey, column?: string) => void
133
+ cancelEdit: () => void
134
+ commitEdit: () => Promise<void>
135
+ scrollToRow: (key: DataTableKey) => void
136
+ toCsv: (options?: DataTableExportOptions) => string
137
+ exportCsv: (options?: DataTableExportOptions) => void
138
+ }
139
+ export interface DataTableState<T> extends DataTableQuery {
140
+ total: number
141
+ rows: T[]
142
+ selected: DataTableKey[]
143
+ expanded: DataTableKey[]
144
+ visibleColumns: DataTableColumn<T>[]
145
+ api: DataTableApi<T>
146
+ }
147
+ export type DataTableCellStyle = {
148
+ position?: 'sticky'
149
+ insetInlineStart?: string
150
+ insetInlineEnd?: string
151
+ zIndex?: number
152
+ backgroundColor?: string
153
+ boxShadow?: string
154
+ width?: string
155
+ minWidth?: string
156
+ maxWidth?: string
157
+ paddingInline?: string
158
+ textAlign?: 'center'
159
+ top?: string | number
160
+ }
161
+ export interface DataTableHeaderCell<T, S = DataTableCellStyle> extends DataTableHeaderContext<T> {
162
+ id: string
163
+ colspan: number
164
+ rowspan: number
165
+ leaf: boolean
166
+ top: number
167
+ style: S
168
+ ariaSort?: 'ascending' | 'descending'
169
+ nextLabel: string
170
+ }
@@ -0,0 +1,19 @@
1
+ export interface PaginationChange {
2
+ page: number
3
+ pageSize: number
4
+ }
5
+
6
+ export interface PaginationState extends PaginationChange {
7
+ total: number
8
+ pageCount: number
9
+ from: number
10
+ to: number
11
+ }
12
+
13
+ export type PaginationEntry = { type: 'page'; value: number } | { type: 'ellipsis' }
14
+ export type PaginationSide = 'prev' | 'next'
15
+ export interface PaginationRange {
16
+ side: PaginationSide
17
+ from: number
18
+ to: number
19
+ }
@@ -0,0 +1,23 @@
1
+ export type SelectOption<T extends object = object> = {
2
+ value: string | number
3
+ label: string
4
+ description?: string
5
+ disabled?: boolean
6
+ } & T
7
+
8
+ export interface SelectOptionGroup<T extends SelectOption = SelectOption> {
9
+ label: string
10
+ options: T[]
11
+ }
12
+
13
+ export type SelectItems<T extends SelectOption = SelectOption> = Array<T | SelectOptionGroup<T>>
14
+
15
+ export function isOptionGroup<T extends SelectOption>(
16
+ item: T | SelectOptionGroup<T>,
17
+ ): item is SelectOptionGroup<T> {
18
+ return !('value' in item) && 'options' in item
19
+ }
20
+
21
+ export function flattenOptions<T extends SelectOption>(items: SelectItems<T>): T[] {
22
+ return items.flatMap(item => (isOptionGroup(item) ? item.options : [item]))
23
+ }