@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,58 +1 @@
1
- export type FileUploadReason = 'type' | 'size' | 'count'
2
-
3
- export interface FileUploadRejection {
4
- file: File
5
- reason: FileUploadReason
6
- }
7
-
8
- interface Rules {
9
- accept?: string
10
- maxSize?: number
11
- maxFiles?: number
12
- multiple?: boolean
13
- }
14
-
15
- function matchesAccept(file: File, accept: string | undefined) {
16
- if (!accept) return true
17
- const name = file.name.toLowerCase()
18
- const type = file.type.toLowerCase()
19
- return accept
20
- .split(',')
21
- .map(rule => rule.trim().toLowerCase())
22
- .filter(Boolean)
23
- .some(rule => {
24
- if (rule.startsWith('.')) return name.endsWith(rule)
25
- if (rule.endsWith('/*')) return type.startsWith(rule.slice(0, -1))
26
- return type === rule
27
- })
28
- }
29
-
30
- function sameFile(a: File, b: File) {
31
- return a.name === b.name && a.size === b.size && a.lastModified === b.lastModified
32
- }
33
-
34
- export function selectFiles(current: File[], incoming: File[], rules: Rules) {
35
- const rejected: FileUploadRejection[] = []
36
- const next = rules.multiple ? [...current] : current.slice(0, 1)
37
- for (const file of incoming) {
38
- if (!matchesAccept(file, rules.accept)) {
39
- rejected.push({ file, reason: 'type' })
40
- continue
41
- }
42
- if (rules.maxSize !== undefined && file.size > rules.maxSize) {
43
- rejected.push({ file, reason: 'size' })
44
- continue
45
- }
46
- if (next.some(existing => sameFile(existing, file))) continue
47
- if (!rules.multiple) {
48
- next.splice(0, next.length, file)
49
- continue
50
- }
51
- if (rules.maxFiles !== undefined && next.length >= rules.maxFiles) {
52
- rejected.push({ file, reason: 'count' })
53
- continue
54
- }
55
- next.push(file)
56
- }
57
- return { next, rejected }
58
- }
1
+ export * from '../../../../../shared/src/lib/file-upload/select'
@@ -1,16 +1 @@
1
- const UNITS = ['byte', 'kilobyte', 'megabyte', 'gigabyte'] as const
2
-
3
- export function formatSize(tag: string, bytes: number) {
4
- let value = bytes
5
- let index = 0
6
- while (value >= 1024 && index < UNITS.length - 1) {
7
- value /= 1024
8
- index += 1
9
- }
10
- return new Intl.NumberFormat(tag, {
11
- style: 'unit',
12
- unit: UNITS[index],
13
- unitDisplay: 'narrow',
14
- maximumFractionDigits: index === 0 ? 0 : 1,
15
- }).format(value)
16
- }
1
+ export * from '../../../../../shared/src/lib/file-upload/size'
@@ -1 +1 @@
1
- export * from '@hina-ui/shared/variants/float-button'
1
+ export * from '../../../../shared/src/variants/float-button'
@@ -1,144 +1,33 @@
1
- import { computed, ref, shallowRef } from 'vue'
2
- import type { FormErrors, FormRules, FormValues } from '../standard-schema'
3
- import { ROOT, readPath, runRules } from '../utils/errors'
4
- import { same, snapshot } from '../utils/values'
1
+ import { computed, shallowRef } from 'vue'
2
+ import { createForm, type FormOptions } from '../../../../../shared/src/behavior/form'
5
3
 
6
- export type FormValidateOn = 'submit' | 'blur' | 'change'
4
+ export type { FormValidateOn } from '../../../../../shared/src/behavior/form'
7
5
 
8
- interface Options {
9
- values: () => FormValues
10
- rules: () => FormRules | undefined
11
- validateOn: () => FormValidateOn
12
- }
13
-
14
- interface ServerError {
15
- message: string
16
- value: unknown
17
- }
18
-
19
- export function useForm(options: Options) {
20
- const found = shallowRef<FormErrors>({})
21
- const touched = ref(new Set<string>())
22
- const submitted = ref(false)
23
- const submitting = ref(false)
24
- const server = shallowRef(new Map<string, ServerError>())
25
- let pending: { values: FormValues; rules: FormRules | undefined } | undefined
26
- let validation = 0
27
- let submission = 0
28
- let initial = snapshot(options.values()) as FormValues
29
-
30
- function shown(key: string) {
31
- if (submitted.value || touched.value.has(key)) return true
32
- const mode = options.validateOn()
33
- return mode === 'change' && !same(readPath(options.values(), key), readPath(initial, key))
34
- }
35
-
36
- const errors = computed<FormErrors>(() => {
37
- const result: FormErrors = {}
38
- for (const [key, message] of Object.entries(found.value)) {
39
- if (key !== ROOT && shown(key)) result[key] = message
40
- }
41
- for (const [key, entry] of server.value) result[key] = entry.message
42
- return result
6
+ export function useForm(options: FormOptions) {
7
+ const form = createForm(options)
8
+ const version = shallowRef(form.version())
9
+ form.subscribe(() => {
10
+ version.value = form.version()
43
11
  })
44
- const formError = computed(() => found.value[ROOT])
45
- const invalid = computed(() => Object.keys(errors.value).length > 0 || !!formError.value)
46
-
47
- async function validate() {
48
- const version = ++validation
49
- const values = snapshot(options.values()) as FormValues
50
- const rules = options.rules()
51
- const request = { values, rules }
52
- pending = request
53
- try {
54
- const result = await runRules(rules, values)
55
- if (version !== validation || rules !== options.rules() || !same(values, options.values())) {
56
- return false
57
- }
58
- found.value = result
59
- return Object.keys(result).length === 0
60
- } finally {
61
- if (pending === request) pending = undefined
62
- }
63
- }
64
-
65
- function revalidate() {
66
- if (pending && pending.rules === options.rules() && same(pending.values, options.values()))
67
- return
68
- void validate()
69
- }
70
-
71
- function touch(name: string) {
72
- if (touched.value.has(name)) return
73
- touched.value = new Set(touched.value).add(name)
74
- if (options.validateOn() !== 'submit') revalidate()
75
- }
76
-
77
- function onChange() {
78
- const values = options.values()
79
- if (server.value.size) {
80
- const next = new Map(server.value)
81
- for (const [key, entry] of next) if (readPath(values, key) !== entry.value) next.delete(key)
82
- if (next.size !== server.value.size) server.value = next
83
- }
84
- if (submitted.value || options.validateOn() !== 'submit') revalidate()
85
- }
86
-
87
- async function submit(handler?: (values: FormValues) => unknown) {
88
- if (submitting.value) return false
89
- const version = ++submission
90
- const values = snapshot(options.values()) as FormValues
91
- submitted.value = true
92
- submitting.value = true
93
- try {
94
- const valid = await validate()
95
- if (
96
- !valid ||
97
- version !== submission ||
98
- server.value.size ||
99
- !same(values, options.values())
100
- ) {
101
- return false
102
- }
103
- await handler?.(options.values())
104
- return true
105
- } finally {
106
- if (version === submission) submitting.value = false
107
- }
108
- }
109
-
110
- function setErrors(next: FormErrors) {
111
- const values = options.values()
112
- const map = new Map<string, ServerError>()
113
- for (const [key, message] of Object.entries(next)) {
114
- map.set(key, { message, value: readPath(values, key) })
115
- }
116
- server.value = map
117
- }
118
12
 
119
- function reset() {
120
- validation++
121
- submission++
122
- pending = undefined
123
- submitting.value = false
124
- found.value = {}
125
- touched.value = new Set()
126
- submitted.value = false
127
- server.value = new Map()
128
- initial = snapshot(options.values()) as FormValues
13
+ function track<T>(read: () => T) {
14
+ return computed(() => {
15
+ void version.value
16
+ return read()
17
+ })
129
18
  }
130
19
 
131
20
  return {
132
- errors,
133
- formError,
134
- invalid,
135
- submitted,
136
- submitting,
137
- validate,
138
- touch,
139
- onChange,
140
- submit,
141
- setErrors,
142
- reset,
21
+ errors: track(form.errors),
22
+ formError: track(form.formError),
23
+ invalid: track(form.invalid),
24
+ submitted: track(form.submitted),
25
+ submitting: track(form.submitting),
26
+ validate: form.validate,
27
+ touch: form.touch,
28
+ onChange: form.onChange,
29
+ submit: form.submit,
30
+ setErrors: form.setErrors,
31
+ reset: form.reset,
143
32
  }
144
33
  }
@@ -1,26 +1 @@
1
- export interface StandardSchemaIssue {
2
- message: string
3
- path?: ReadonlyArray<PropertyKey | { key: PropertyKey }>
4
- }
5
-
6
- export interface StandardSchemaResult {
7
- value?: unknown
8
- issues?: ReadonlyArray<StandardSchemaIssue>
9
- }
10
-
11
- export interface StandardSchema {
12
- '~standard': {
13
- version: 1
14
- vendor: string
15
- validate: (value: unknown) => StandardSchemaResult | Promise<StandardSchemaResult>
16
- }
17
- }
18
-
19
- export type FormValues = Record<string, unknown>
20
- export type FormErrors = Record<string, string>
21
- export type FormValidator = (values: FormValues) => FormErrors | Promise<FormErrors>
22
- export type FormRules = StandardSchema | FormValidator
23
-
24
- export function isStandardSchema(rules: FormRules): rules is StandardSchema {
25
- return typeof rules === 'object' && rules !== null && '~standard' in rules
26
- }
1
+ export * from '../../../../shared/src/lib/form/standard-schema'
@@ -1,48 +1 @@
1
- import {
2
- isStandardSchema,
3
- type FormErrors,
4
- type FormRules,
5
- type FormValues,
6
- type StandardSchemaIssue,
7
- } from '../standard-schema'
8
-
9
- export const ROOT = ''
10
-
11
- export function issueKey(issue: StandardSchemaIssue) {
12
- return (issue.path ?? [])
13
- .map(part => String(typeof part === 'object' && part !== null ? part.key : part))
14
- .join('.')
15
- }
16
-
17
- export function issuesToErrors(issues: ReadonlyArray<StandardSchemaIssue>): FormErrors {
18
- const errors: FormErrors = {}
19
- for (const issue of issues) {
20
- const key = issueKey(issue)
21
- if (!(key in errors)) errors[key] = issue.message
22
- }
23
- return errors
24
- }
25
-
26
- export function readPath(values: FormValues, key: string): unknown {
27
- return key
28
- .split('.')
29
- .reduce<unknown>(
30
- (current, part) =>
31
- current && typeof current === 'object'
32
- ? (current as Record<string, unknown>)[part]
33
- : undefined,
34
- values,
35
- )
36
- }
37
-
38
- export async function runRules(
39
- rules: FormRules | undefined,
40
- values: FormValues,
41
- ): Promise<FormErrors> {
42
- if (!rules) return {}
43
- if (isStandardSchema(rules)) {
44
- const result = await rules['~standard'].validate(values)
45
- return result.issues ? issuesToErrors(result.issues) : {}
46
- }
47
- return await rules(values)
48
- }
1
+ export * from '../../../../../shared/src/lib/form/errors'
@@ -1,10 +1 @@
1
- const FOCUSABLE = 'input,select,textarea,button,[tabindex],[contenteditable="true"]'
2
-
3
- export function focusFirstInvalid(root: HTMLElement) {
4
- const invalid = root.querySelector<HTMLElement>('[aria-invalid="true"]')
5
- if (!invalid) return
6
- const target = invalid.matches(FOCUSABLE)
7
- ? invalid
8
- : invalid.querySelector<HTMLElement>(FOCUSABLE)
9
- target?.focus()
10
- }
1
+ export * from '../../../../../shared/src/lib/form/focus'
@@ -1,23 +1 @@
1
- function isPlain(value: unknown): value is Record<string, unknown> {
2
- return Object.prototype.toString.call(value) === '[object Object]'
3
- }
4
-
5
- export function snapshot(value: unknown): unknown {
6
- if (Array.isArray(value)) return value.map(snapshot)
7
- if (isPlain(value)) {
8
- return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, snapshot(item)]))
9
- }
10
- return value
11
- }
12
-
13
- export function same(a: unknown, b: unknown): boolean {
14
- if (a === b) return true
15
- if (Array.isArray(a) && Array.isArray(b)) {
16
- return a.length === b.length && a.every((item, index) => same(item, b[index]))
17
- }
18
- if (isPlain(a) && isPlain(b)) {
19
- const keys = Object.keys(a)
20
- return keys.length === Object.keys(b).length && keys.every(key => same(a[key], b[key]))
21
- }
22
- return false
23
- }
1
+ export * from '../../../../../shared/src/lib/form/values'
@@ -39,7 +39,8 @@
39
39
  const form = injectForm()
40
40
 
41
41
  const root = shallowRef<HTMLElement | null>(null)
42
- const hooks = collapseHooks('y', () => root.value)
42
+ const body = shallowRef<HTMLElement | null>(null)
43
+ const hooks = collapseHooks('y', () => body.value)
43
44
 
44
45
  const id = useId()
45
46
  const labelId = useId()
@@ -111,7 +112,7 @@
111
112
  <slot name="description">{{ props.description }}</slot>
112
113
  </p>
113
114
  </div>
114
- <div data-hn-form-field-body :class="formFieldContent()">
115
+ <div ref="body" data-hn-form-field-body :class="formFieldContent()">
115
116
  <div
116
117
  data-hn-form-field-control
117
118
  :class="formFieldControl({ orientation: contentOrientation })"
@@ -1,14 +1 @@
1
- import type { ImageVariants } from '../image/image.variants'
2
- import type { Rect } from './utils/pose'
3
-
4
- export type LightboxSource = HTMLImageElement | Rect
5
-
6
- export interface LightboxItem {
7
- id: string
8
- src: string
9
- preview?: string
10
- previewSize?: { width: number; height: number }
11
- alt: string
12
- fit?: ImageVariants['fit']
13
- source?: () => LightboxSource | null | undefined
14
- }
1
+ export * from '../../../../shared/src/lib/lightbox/types'
@@ -1,117 +1 @@
1
- import type { Rect } from './pose'
2
-
3
- export interface Corner {
4
- x: number
5
- y: number
6
- }
7
-
8
- export type Corners = [Corner, Corner, Corner, Corner]
9
-
10
- function emptyCorners(): Corners {
11
- return [
12
- { x: 0, y: 0 },
13
- { x: 0, y: 0 },
14
- { x: 0, y: 0 },
15
- { x: 0, y: 0 },
16
- ]
17
- }
18
-
19
- function length(value: string, size: number): number {
20
- const number = Number.parseFloat(value) || 0
21
- return value.endsWith('%') ? (number * size) / 100 : number
22
- }
23
-
24
- function cornersOf(style: CSSStyleDeclaration, width: number, height: number): Corners {
25
- const corners = [
26
- style.borderTopLeftRadius,
27
- style.borderTopRightRadius,
28
- style.borderBottomRightRadius,
29
- style.borderBottomLeftRadius,
30
- ].map(value => {
31
- const [x = '0', y = x] = value.split(/\s+/)
32
- return { x: length(x, width), y: length(y, height) }
33
- }) as Corners
34
- const [tl, tr, br, bl] = corners
35
- const factor = Math.min(
36
- 1,
37
- width / (tl.x + tr.x || 1),
38
- width / (bl.x + br.x || 1),
39
- height / (tl.y + bl.y || 1),
40
- height / (tr.y + br.y || 1),
41
- )
42
- return corners.map(corner => ({ x: corner.x * factor, y: corner.y * factor })) as Corners
43
- }
44
-
45
- function paddingBox(node: Element, style: CSSStyleDeclaration) {
46
- const box = node.getBoundingClientRect()
47
- const width = node instanceof HTMLElement ? node.offsetWidth : box.width
48
- const height = node instanceof HTMLElement ? node.offsetHeight : box.height
49
- const sx = width ? box.width / width : 1
50
- const sy = height ? box.height / height : 1
51
- const left = Number.parseFloat(style.borderLeftWidth) || 0
52
- const right = Number.parseFloat(style.borderRightWidth) || 0
53
- const top = Number.parseFloat(style.borderTopWidth) || 0
54
- const bottom = Number.parseFloat(style.borderBottomWidth) || 0
55
- const corners = cornersOf(style, width, height)
56
- const borders = [
57
- [left, top],
58
- [right, top],
59
- [right, bottom],
60
- [left, bottom],
61
- ]
62
- return {
63
- rect: {
64
- x: box.x + left * sx,
65
- y: box.y + top * sy,
66
- width: Math.max(0, box.width - (left + right) * sx),
67
- height: Math.max(0, box.height - (top + bottom) * sy),
68
- },
69
- corners: corners.map((corner, index) => ({
70
- x: Math.max(0, corner.x - borders[index]![0]!) * sx,
71
- y: Math.max(0, corner.y - borders[index]![1]!) * sy,
72
- })) as Corners,
73
- }
74
- }
75
-
76
- function points(rect: Rect) {
77
- return [
78
- [rect.x, rect.y],
79
- [rect.x + rect.width, rect.y],
80
- [rect.x + rect.width, rect.y + rect.height],
81
- [rect.x, rect.y + rect.height],
82
- ]
83
- }
84
-
85
- export function clipOf(el: Element | null | undefined, box: Rect) {
86
- let rect = { x: box.x, y: box.y, width: box.width, height: box.height }
87
- const clips: ReturnType<typeof paddingBox>[] = []
88
- for (let node = el; node; node = node.parentElement) {
89
- const style = getComputedStyle(node)
90
- const clipX = node === el || /^(hidden|clip|scroll|auto)$/.test(style.overflowX)
91
- const clipY = node === el || /^(hidden|clip|scroll|auto)$/.test(style.overflowY)
92
- if (!clipX && !clipY) continue
93
- const clip = paddingBox(node, style)
94
- const x = clipX ? Math.max(rect.x, clip.rect.x) : rect.x
95
- const y = clipY ? Math.max(rect.y, clip.rect.y) : rect.y
96
- const right = clipX
97
- ? Math.min(rect.x + rect.width, clip.rect.x + clip.rect.width)
98
- : rect.x + rect.width
99
- const bottom = clipY
100
- ? Math.min(rect.y + rect.height, clip.rect.y + clip.rect.height)
101
- : rect.y + rect.height
102
- rect = { x, y, width: Math.max(0, right - x), height: Math.max(0, bottom - y) }
103
- if (clipX && clipY) clips.push(clip)
104
- }
105
- const corners = emptyCorners()
106
- const visible = points(rect)
107
- for (const clip of clips) {
108
- const edges = points(clip.rect)
109
- for (let index = 0; index < 4; index += 1) {
110
- if (visible[index]!.some((value, axis) => Math.abs(value - edges[index]![axis]!) > 0.5))
111
- continue
112
- corners[index]!.x = Math.max(corners[index]!.x, clip.corners[index]!.x)
113
- corners[index]!.y = Math.max(corners[index]!.y, clip.corners[index]!.y)
114
- }
115
- }
116
- return { rect, corners }
117
- }
1
+ export * from '../../../../../shared/src/lib/lightbox/clip'
@@ -1,29 +1 @@
1
- export function fileNameOf(url: string, fallback = 'image'): string {
2
- try {
3
- const parsed = new URL(url, 'http://localhost')
4
- if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return fallback
5
- const name = decodeURIComponent(parsed.pathname.split('/').filter(Boolean).pop() ?? '')
6
- return name || fallback
7
- } catch {
8
- return fallback
9
- }
10
- }
11
-
12
- export async function saveImage(url: string): Promise<'saved' | 'opened'> {
13
- try {
14
- const response = await fetch(url, { mode: 'cors' })
15
- if (!response.ok) throw new Error(String(response.status))
16
- const blob = await response.blob()
17
- const href = URL.createObjectURL(blob)
18
- const anchor = Object.assign(document.createElement('a'), {
19
- href,
20
- download: fileNameOf(url),
21
- })
22
- anchor.click()
23
- setTimeout(() => URL.revokeObjectURL(href), 0)
24
- return 'saved'
25
- } catch {
26
- window.open(url, '_blank', 'noopener')
27
- return 'opened'
28
- }
29
- }
1
+ export * from '../../../../../shared/src/lib/lightbox/download'
@@ -1,54 +1 @@
1
- import type { Point } from './zoom'
2
-
3
- export interface Touch extends Point {
4
- time: number
5
- }
6
-
7
- export const DRAG_THRESHOLD = 4
8
- export const TAP_MAX_DISTANCE = 10
9
- export const TAP_MAX_MS = 300
10
- export const DOUBLE_TAP_MS = 300
11
- export const DOUBLE_TAP_DISTANCE = 25
12
- export const WHEEL_LINE = 16
13
- export const TRACKPAD_INTENSITY = 0.01
14
-
15
- export const FLING = {
16
- power: 0.8,
17
- timeConstant: 750,
18
- bounceStiffness: 200,
19
- bounceDamping: 40,
20
- restDelta: 1,
21
- restSpeed: 10,
22
- } as const
23
-
24
- export function midpoint(a: Point, b: Point): Point {
25
- return { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 }
26
- }
27
-
28
- export function distance(a: Point, b: Point): number {
29
- return Math.hypot(b.x - a.x, b.y - a.y)
30
- }
31
-
32
- export function dragAxis(start: Point, current: Point): 'x' | 'y' | null {
33
- const dx = Math.abs(current.x - start.x)
34
- const dy = Math.abs(current.y - start.y)
35
- if (Math.max(dx, dy) < DRAG_THRESHOLD) return null
36
- return dx > dy ? 'x' : 'y'
37
- }
38
-
39
- export function isTap(start: Touch, end: Touch): boolean {
40
- return distance(start, end) <= TAP_MAX_DISTANCE && end.time - start.time <= TAP_MAX_MS
41
- }
42
-
43
- export function isDoubleTap(previous: Touch | null, next: Touch): boolean {
44
- if (!previous) return false
45
- return (
46
- next.time - previous.time <= DOUBLE_TAP_MS && distance(previous, next) <= DOUBLE_TAP_DISTANCE
47
- )
48
- }
49
-
50
- export function wheelDelta(deltaY: number, deltaMode: number, stageHeight: number): number {
51
- if (deltaMode === 1) return deltaY * WHEEL_LINE
52
- if (deltaMode === 2) return deltaY * stageHeight
53
- return deltaY
54
- }
1
+ export * from '../../../../../shared/src/lib/lightbox/gesture'
@@ -1,33 +1 @@
1
- import { rubberBand } from './zoom'
2
-
3
- export const PAGE_COMMIT = 0.2
4
- export const PAGE_VELOCITY = 400
5
- export const PAGE_PROJECTION = 0.25
6
-
7
- export function pageSteps(offset: number, velocity: number, width: number): number {
8
- if (width <= 0) return 0
9
- if (Math.abs(offset) < width * PAGE_COMMIT && Math.abs(velocity) < PAGE_VELOCITY) return 0
10
- const projected = offset + velocity * PAGE_PROJECTION
11
- if (projected === 0) return 0
12
- return projected < 0 ? 1 : -1
13
- }
14
-
15
- export function clampIndex(index: number, count: number): number {
16
- if (count <= 0) return 0
17
- return Math.min(Math.max(index, 0), count - 1)
18
- }
19
-
20
- export function wrapIndex(index: number, count: number): number {
21
- if (count <= 0) return 0
22
- return ((index % count) + count) % count
23
- }
24
-
25
- export function shortestDelta(delta: number, count: number): number {
26
- if (count <= 0) return 0
27
- const forward = wrapIndex(delta, count)
28
- return forward > count / 2 ? forward - count : forward
29
- }
30
-
31
- export function edgePosition(raw: number, count: number, width: number): number {
32
- return rubberBand(raw, -Math.max(0, count - 1) * width, 0, width)
33
- }
1
+ export * from '../../../../../shared/src/lib/lightbox/paging'