@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,199 @@
1
+ declare function registerPaint(name: string, painter: unknown): void
2
+
3
+ const workletMain = () => {
4
+ const M = Math
5
+
6
+ const lcgrand =
7
+ (seed = 1) =>
8
+ (a = 0, b = 1) =>
9
+ a +
10
+ (M.abs(b - a) * (M.imul(48271, (seed = M.imul(214013, seed) + 2531011)) & 0x7fffffff)) /
11
+ 0x7fffffff
12
+
13
+ const pol2vec = (l: number, a = 0) => [l * M.cos(a), l * M.sin(a)] as const
14
+ const vecmag = ([x, y]: readonly number[]) => M.sqrt(x! * x! + y! * y!)
15
+ const vecnorm = ([x, y]: readonly number[], l = vecmag([x!, y!])) =>
16
+ l === 0 ? ([0, 0] as const) : ([x! / l, y! / l] as const)
17
+
18
+ const trapezoidalWave = (l: number, a: number, b: number) => {
19
+ const s = M.max(a, l - b)
20
+ return (t: number) => {
21
+ if (t < a) return M.max(0, t / a)
22
+ if (t > s) return M.max(0, 1 - (t - s) / (l - s))
23
+ return 1
24
+ }
25
+ }
26
+
27
+ const cycle = (x: number, n: number) => ((x % n) + n) % n
28
+ const mirror = (x: number, n: number, r: number) => (x < r ? n + x : x > n - r ? x - n : x)
29
+ const clamp = (min: number, x: number, max: number) => M.max(min, M.min(x, max))
30
+
31
+ const cycleBounds = ([x, y]: readonly number[], [w, h]: readonly number[], r: number) => {
32
+ const tx = cycle(x!, w!)
33
+ const ty = cycle(y!, h!)
34
+ return [
35
+ [tx, ty],
36
+ [mirror(tx, w!, r), mirror(ty, h!, r)],
37
+ ] as const
38
+ }
39
+
40
+ const easeOutCubic = (t: number) => --t * t * t + 1
41
+
42
+ type World = { t: number; tStop: number; tStart: number; n: number }
43
+
44
+ const animateFadeInOut = (world: World, idx: number, duration: number) => {
45
+ const direction = world.tStop <= world.t ? 'out' : 'in'
46
+ const animationStartT = direction === 'in' ? world.tStart : world.tStop
47
+ const t = animationStartT + ((2 / 3) * duration * idx) / world.n
48
+ const fadeFor = (1 / 3) * duration
49
+
50
+ let progress = 0
51
+ if (direction === 'in') {
52
+ progress = (fadeFor + t - world.t) / fadeFor || 0
53
+ } else {
54
+ progress = (world.t - t) / fadeFor || 1
55
+ }
56
+
57
+ return easeOutCubic(1 - clamp(0, progress, 1))
58
+ }
59
+
60
+ const FAKE_WORDS = [5, 3, 4, 4, 2, 4, 7, 6, 8, 6, 3, 1, 6]
61
+
62
+ const makeWordDistribution = (line: number, em: number, space: number) => {
63
+ let marker = 0
64
+ let i = 0
65
+ let wordslen = 0
66
+ const chunks: [number, number][] = []
67
+
68
+ do {
69
+ const endOfWord = M.min(line, marker + FAKE_WORDS[i++ % FAKE_WORDS.length]! * em)
70
+ wordslen += endOfWord - marker
71
+ chunks.push([marker, (marker = endOfWord)])
72
+ } while ((marker += space) < line)
73
+
74
+ if (chunks.length >= 0) chunks[chunks.length - 1]![1] = line
75
+
76
+ return (t: number) => {
77
+ const w = t * wordslen
78
+ let m = 0
79
+ for (const [start, end] of chunks) {
80
+ const wordLength = end - start
81
+ if (m < w && w <= m + wordLength) return start + w - m
82
+ m += wordLength
83
+ }
84
+ return 0
85
+ }
86
+ }
87
+
88
+ const getVar = (props: { get(name: string): unknown }, name: string) => {
89
+ const val = props.get(name)
90
+ if (typeof val === 'string') return val
91
+ return String(val ?? '')
92
+ }
93
+
94
+ class HnSpoilerWorklet {
95
+ static get contextOptions() {
96
+ return { alpha: true }
97
+ }
98
+
99
+ static get inputProperties() {
100
+ return [
101
+ '--hn-nz-t',
102
+ '--hn-nz-stop',
103
+ '--hn-nz-fade',
104
+ '--hn-nz-gap',
105
+ '--hn-nz-accent',
106
+ '--hn-nz-words',
107
+ '--hn-nz-density',
108
+ ]
109
+ }
110
+
111
+ paint(
112
+ ctx: CanvasRenderingContext2D,
113
+ size: { width: number; height: number },
114
+ props: { get(name: string): unknown },
115
+ ) {
116
+ const rand = lcgrand(4011505)
117
+
118
+ const accent = (getVar(props, '--hn-nz-accent') || '0 0% 0%').split(' ')
119
+ const mimicWords = getVar(props, '--hn-nz-words').trim() === 'true'
120
+ const vmin = 2
121
+ const vmax = 12
122
+ const width = size.width
123
+ const height = size.height
124
+ const gaps = (getVar(props, '--hn-nz-gap') || '0px 0px').split(' ').map(parseFloat)
125
+ const hgap = gaps[0] ?? 0
126
+ const vgap = gaps[1] ?? 0
127
+ const density = parseFloat(getVar(props, '--hn-nz-density')) || 0.08
128
+ const sizedev = (globalThis as { devicePixelRatio?: number }).devicePixelRatio! > 1 ? 0.5 : 0
129
+ const fadeDuration = parseFloat(getVar(props, '--hn-nz-fade')) || 0
130
+
131
+ const world: World = {
132
+ t: parseFloat(getVar(props, '--hn-nz-t') || '0'),
133
+ tStop: parseFloat(getVar(props, '--hn-nz-stop') || 'Infinity'),
134
+ tStart: 0,
135
+ n: M.round(M.min(5000, density * (width - 2 * hgap) * (height - 2 * vgap))),
136
+ }
137
+
138
+ const lineWidth = width - 2 * hgap
139
+ const lineHeight = height - 2 * vgap
140
+
141
+ const wordDist = mimicWords
142
+ ? makeWordDistribution(lineWidth, lineHeight, M.max(12, lineHeight / 4))
143
+ : (x: number) => x * (width - 2 * hgap)
144
+
145
+ ctx.clearRect(0, 0, size.width, size.height)
146
+
147
+ for (let i = 0; i < world.n; ++i) {
148
+ const x0 = hgap + wordDist(rand())
149
+ const y0 = rand(vgap, height - vgap)
150
+ const v0mag = rand(vmin, vmax)
151
+ const size0 = rand(1, 1 + sizedev)
152
+
153
+ const l = parseInt(accent[2] ?? '0')
154
+ const ldir = l > 50 ? -1 : 1
155
+ const lightness = M.floor(clamp(0, l + ldir * rand(0, 30), 100))
156
+
157
+ const v0 = pol2vec(v0mag, rand(0, M.PI * 2))
158
+ const vx0 = v0[0]
159
+ const vy0 = v0[1]
160
+ vecnorm(v0)
161
+
162
+ const shape = rand() > 0.5 ? 'square' : 'circle'
163
+ const lifetime = rand(0.3, 1.5)
164
+ const respawn = rand(0, 1)
165
+ const visibilityFn = trapezoidalWave(lifetime, 0.15, 0.3)
166
+ const phase = rand(0, lifetime + respawn)
167
+
168
+ const cantSpawnNoMore =
169
+ M.floor((world.tStop + phase) / (lifetime + respawn)) <
170
+ M.floor((world.t + phase) / (lifetime + respawn))
171
+ if (cantSpawnNoMore) continue
172
+
173
+ const t = M.min(lifetime, (world.t + phase) % (lifetime + respawn))
174
+ const x = x0 + vx0 * t
175
+ const y = y0 + vy0 * t
176
+
177
+ const fade = animateFadeInOut(world, i, fadeDuration)
178
+ const alpha = fade * (1 - t / lifetime)
179
+ const psize = fade * (size0 * visibilityFn(t))
180
+
181
+ for (const [wx, wy] of cycleBounds([x, y], [width, height], psize / 2)) {
182
+ ctx.beginPath()
183
+ ctx.fillStyle = `hsl(${accent[0]} ${accent[1]} ${lightness}% / ${M.round(alpha * 100)}%)`
184
+ if (shape === 'square') {
185
+ ctx.rect(wx!, wy!, psize, psize)
186
+ } else {
187
+ ctx.arc(wx!, wy!, psize / 2, 0, M.PI * 2)
188
+ }
189
+ ctx.closePath()
190
+ ctx.fill()
191
+ }
192
+ }
193
+ }
194
+ }
195
+
196
+ registerPaint('hn-spoiler', HnSpoilerWorklet)
197
+ }
198
+
199
+ export const workletSource = `(${workletMain.toString()})()`
@@ -0,0 +1,243 @@
1
+ import { DURATION } from '../motion'
2
+
3
+ export type ToastTone = 'neutral' | 'success' | 'danger' | 'warning' | 'info' | 'loading'
4
+
5
+ export type ToasterPosition =
6
+ 'bottom-end' | 'bottom-start' | 'bottom-center' | 'top-end' | 'top-start' | 'top-center'
7
+
8
+ export interface ToastAction {
9
+ label: string
10
+ onClick?: () => void
11
+ }
12
+
13
+ export interface ToastItem<C = unknown> {
14
+ id: number | string
15
+ tone: ToastTone
16
+ message: string
17
+ description?: string
18
+ duration: number
19
+ open: boolean
20
+ action?: ToastAction
21
+ cancel?: ToastAction
22
+ component?: C
23
+ componentProps?: Record<string, unknown>
24
+ onDismiss?: (id: number | string) => void
25
+ onAutoClose?: (id: number | string) => void
26
+ }
27
+
28
+ export interface ToastOptions {
29
+ id?: number | string
30
+ tone?: ToastTone
31
+ description?: string
32
+ duration?: number
33
+ action?: ToastAction
34
+ cancel?: ToastAction
35
+ onDismiss?: (id: number | string) => void
36
+ onAutoClose?: (id: number | string) => void
37
+ }
38
+
39
+ type MessageInput<T> = string | { message: string; description?: string } | T
40
+
41
+ export interface ToastPromiseMessages<T> {
42
+ loading: string
43
+ success: MessageInput<(value: T) => string | { message: string; description?: string }>
44
+ error: MessageInput<(reason: unknown) => string | { message: string; description?: string }>
45
+ }
46
+
47
+ export type ToastTonedOptions = Omit<ToastOptions, 'tone'>
48
+
49
+ export interface ToastStoreOptions<C> {
50
+ state: { items: ToastItem<C>[] }
51
+ raw?: (component: C) => C
52
+ notify?: () => void
53
+ }
54
+
55
+ const MAX_VISIBLE = 5
56
+ const SETTLE_DELAY = (DURATION.exit + 0.06) * 1000
57
+
58
+ interface Timer {
59
+ handle: ReturnType<typeof setTimeout> | undefined
60
+ remaining: number
61
+ startedAt: number
62
+ }
63
+
64
+ interface InternalOptions<C> extends ToastOptions {
65
+ component?: C
66
+ componentProps?: Record<string, unknown>
67
+ }
68
+
69
+ function defaultDuration(tone: ToastTone) {
70
+ return tone === 'loading' ? 0 : 4000
71
+ }
72
+
73
+ function resolveMessage(
74
+ input: MessageInput<(v: never) => string | { message: string; description?: string }>,
75
+ value: unknown,
76
+ ): { message: string; description?: string } {
77
+ const raw = typeof input === 'function' ? (input as (v: unknown) => unknown)(value) : input
78
+ if (typeof raw === 'string') return { message: raw }
79
+ return raw as { message: string; description?: string }
80
+ }
81
+
82
+ export function createToastStore<C>(options: ToastStoreOptions<C>) {
83
+ const state = options.state
84
+ const wrap = options.raw ?? ((component: C) => component)
85
+ const notify = options.notify ?? (() => {})
86
+
87
+ let seed = 0
88
+ const timers = new Map<number | string, Timer>()
89
+ const pauseReasons = new Set<string>()
90
+
91
+ function fire(id: number | string) {
92
+ timers.delete(id)
93
+ const item = state.items.find(t => t.id === id)
94
+ if (item) close(item, 'auto')
95
+ }
96
+
97
+ function startTimer(item: ToastItem<C>) {
98
+ stopTimer(item.id)
99
+ if (item.duration <= 0) return
100
+ const timer: Timer = { handle: undefined, remaining: item.duration, startedAt: Date.now() }
101
+ timers.set(item.id, timer)
102
+ if (pauseReasons.size === 0) timer.handle = setTimeout(() => fire(item.id), timer.remaining)
103
+ }
104
+
105
+ function stopTimer(id: number | string) {
106
+ const timer = timers.get(id)
107
+ if (timer?.handle) clearTimeout(timer.handle)
108
+ timers.delete(id)
109
+ }
110
+
111
+ function pauseTimers(reason: string) {
112
+ if (pauseReasons.has(reason)) return
113
+ const wasRunning = pauseReasons.size === 0
114
+ pauseReasons.add(reason)
115
+ if (!wasRunning) return
116
+ for (const timer of timers.values()) {
117
+ if (!timer.handle) continue
118
+ clearTimeout(timer.handle)
119
+ timer.handle = undefined
120
+ timer.remaining = Math.max(0, timer.remaining - (Date.now() - timer.startedAt))
121
+ }
122
+ }
123
+
124
+ function resumeTimers(reason: string) {
125
+ pauseReasons.delete(reason)
126
+ if (pauseReasons.size > 0) return
127
+ for (const [id, timer] of timers) {
128
+ if (timer.handle) continue
129
+ timer.startedAt = Date.now()
130
+ timer.handle = setTimeout(() => fire(id), timer.remaining)
131
+ }
132
+ }
133
+
134
+ function settle(item: ToastItem<C>) {
135
+ const index = state.items.indexOf(item)
136
+ if (index >= 0) state.items.splice(index, 1)
137
+ notify()
138
+ }
139
+
140
+ function close(item: ToastItem<C>, source: 'manual' | 'auto') {
141
+ if (!item.open) return
142
+ item.open = false
143
+ stopTimer(item.id)
144
+ notify()
145
+ if (source === 'auto') item.onAutoClose?.(item.id)
146
+ item.onDismiss?.(item.id)
147
+ setTimeout(() => settle(item), SETTLE_DELAY)
148
+ }
149
+
150
+ function dismiss(id?: number | string) {
151
+ for (const item of state.items) {
152
+ if (id !== undefined && item.id !== id) continue
153
+ close(item, 'manual')
154
+ }
155
+ }
156
+
157
+ function push(message: string, options: InternalOptions<C> = {}) {
158
+ const tone = options.tone ?? 'neutral'
159
+ const existing =
160
+ options.id !== undefined ? state.items.find(t => t.id === options.id) : undefined
161
+
162
+ if (existing && existing.open) {
163
+ existing.tone = tone
164
+ existing.message = message
165
+ existing.description = options.description
166
+ existing.duration = options.duration ?? defaultDuration(tone)
167
+ existing.action = options.action
168
+ existing.cancel = options.cancel
169
+ existing.component = options.component ? wrap(options.component) : undefined
170
+ existing.componentProps = options.componentProps
171
+ if (options.onDismiss) existing.onDismiss = options.onDismiss
172
+ if (options.onAutoClose) existing.onAutoClose = options.onAutoClose
173
+ startTimer(existing)
174
+ notify()
175
+ return existing.id
176
+ }
177
+
178
+ if (existing) settle(existing)
179
+
180
+ const item: ToastItem<C> = {
181
+ id: options.id ?? ++seed,
182
+ tone,
183
+ message,
184
+ description: options.description,
185
+ duration: options.duration ?? defaultDuration(tone),
186
+ open: true,
187
+ action: options.action,
188
+ cancel: options.cancel,
189
+ component: options.component ? wrap(options.component) : undefined,
190
+ componentProps: options.componentProps,
191
+ onDismiss: options.onDismiss,
192
+ onAutoClose: options.onAutoClose,
193
+ }
194
+ state.items.push(item)
195
+ startTimer(item)
196
+ notify()
197
+
198
+ const visible = state.items.filter(t => t.open)
199
+ for (const stale of visible.slice(0, Math.max(0, visible.length - MAX_VISIBLE))) {
200
+ close(stale, 'manual')
201
+ }
202
+ return item.id
203
+ }
204
+
205
+ function promiseToast<T>(
206
+ promise: Promise<T>,
207
+ messages: ToastPromiseMessages<T>,
208
+ options: ToastTonedOptions = {},
209
+ ): Promise<T> {
210
+ const id = push(messages.loading, { ...options, tone: 'loading', duration: 0 })
211
+ promise
212
+ .then(value => {
213
+ const done = resolveMessage(messages.success, value)
214
+ push(done.message, { ...options, id, tone: 'success', description: done.description })
215
+ })
216
+ .catch(reason => {
217
+ const done = resolveMessage(messages.error, reason)
218
+ push(done.message, { ...options, id, tone: 'danger', description: done.description })
219
+ })
220
+ return promise
221
+ }
222
+
223
+ const toast = Object.assign((message: string, options?: ToastOptions) => push(message, options), {
224
+ success: (message: string, options?: ToastTonedOptions) =>
225
+ push(message, { ...options, tone: 'success' }),
226
+ danger: (message: string, options?: ToastTonedOptions) =>
227
+ push(message, { ...options, tone: 'danger' }),
228
+ warning: (message: string, options?: ToastTonedOptions) =>
229
+ push(message, { ...options, tone: 'warning' }),
230
+ info: (message: string, options?: ToastTonedOptions) =>
231
+ push(message, { ...options, tone: 'info' }),
232
+ loading: (message: string, options?: ToastTonedOptions) =>
233
+ push(message, { ...options, tone: 'loading' }),
234
+ custom: (component: C, options?: ToastTonedOptions & { props?: Record<string, unknown> }) => {
235
+ const { props: componentProps, ...rest } = options ?? {}
236
+ return push('', { ...rest, component, componentProps })
237
+ },
238
+ promise: promiseToast,
239
+ dismiss,
240
+ })
241
+
242
+ return { toast, dismiss, pauseTimers, resumeTimers }
243
+ }
@@ -0,0 +1,83 @@
1
+ import { prefersReducedMotion } from '../motion'
2
+
3
+ export interface AnchorItem {
4
+ id: string
5
+ label: string
6
+ children?: AnchorItem[]
7
+ }
8
+
9
+ export type AnchorSlotItem<T extends AnchorItem> =
10
+ T | (T extends { children?: AnchorItem[] } ? NonNullable<T['children']>[number] : never)
11
+
12
+ export interface SpyEntry {
13
+ id: string
14
+ label: string
15
+ depth: number
16
+ }
17
+
18
+ export interface AnchorEntry<T extends AnchorItem> extends SpyEntry {
19
+ item: AnchorSlotItem<T>
20
+ }
21
+
22
+ export const SCROLL_SPY_OPTIONS = {
23
+ rootMargin: '0px 0px -15% 0px',
24
+ threshold: [0, Number.EPSILON],
25
+ }
26
+
27
+ export function anchorEntries<T extends AnchorItem>(items: T[]): AnchorEntry<T>[] {
28
+ return items.flatMap(item => [
29
+ { id: item.id, label: item.label, depth: 0, item: item as AnchorSlotItem<T> },
30
+ ...(item.children ?? []).map(child => ({
31
+ id: child.id,
32
+ label: child.label,
33
+ depth: 1,
34
+ item: child as AnchorSlotItem<T>,
35
+ })),
36
+ ])
37
+ }
38
+
39
+ export function coveredEntries<E extends SpyEntry>(entries: E[], visible: ReadonlySet<string>) {
40
+ return entries.filter(entry => visible.has(entry.id))
41
+ }
42
+
43
+ export function coveredSpan(entries: SpyEntry[], visible: ReadonlySet<string>) {
44
+ const rows = entries.flatMap((entry, index) => (visible.has(entry.id) ? [index] : []))
45
+ return rows.length ? `${rows[0]! + 1} / ${rows.at(-1)! + 2}` : undefined
46
+ }
47
+
48
+ export function sameTargets(next: SpyEntry[], previous: SpyEntry[]) {
49
+ return (
50
+ next.length === previous.length &&
51
+ next.every((entry, index) => entry.id === previous[index]?.id)
52
+ )
53
+ }
54
+
55
+ export function hashTarget(entries: SpyEntry[]) {
56
+ const hash = decodeURIComponent(location.hash.slice(1))
57
+ return hash && entries.some(entry => entry.id === hash) ? hash : undefined
58
+ }
59
+
60
+ export function spyTargets(entries: SpyEntry[]) {
61
+ return entries.map(({ id }) => document.getElementById(id))
62
+ }
63
+
64
+ export function applyIntersections(
65
+ intersecting: Set<string>,
66
+ observed: IntersectionObserverEntry[],
67
+ current: string | undefined,
68
+ ): ReadonlySet<string> {
69
+ for (const entry of observed) {
70
+ if (entry.isIntersecting && entry.intersectionRatio > 0) intersecting.add(entry.target.id)
71
+ else intersecting.delete(entry.target.id)
72
+ }
73
+ return intersecting.size ? new Set(intersecting) : new Set(current ? [current] : [])
74
+ }
75
+
76
+ export function jumpToAnchor(event: { preventDefault(): void }, id: string) {
77
+ const el = document.getElementById(id)
78
+ if (!el) return false
79
+ event.preventDefault()
80
+ el.scrollIntoView({ behavior: prefersReducedMotion() ? 'auto' : 'smooth', block: 'start' })
81
+ history.replaceState(history.state, '', `#${id}`)
82
+ return true
83
+ }
@@ -0,0 +1,10 @@
1
+ export type SlideDirection = 1 | -1
2
+
3
+ export function stepBetween(previous: number, next: number, count: number): SlideDirection {
4
+ if (count < 2) return 1
5
+ const from = ((previous % count) + count) % count
6
+ const to = ((next % count) + count) % count
7
+ if (to === (from + 1) % count) return 1
8
+ if (to === (from - 1 + count) % count) return -1
9
+ return to > from ? 1 : -1
10
+ }
@@ -0,0 +1,23 @@
1
+ import { getLocalTimeZone, type DateValue } from '@internationalized/date'
2
+
3
+ const local = (date: DateValue) => date.toDate(getLocalTimeZone())
4
+
5
+ export function formatMonthHeading(tag: string, date: DateValue) {
6
+ return new Intl.DateTimeFormat(tag, { year: 'numeric', month: 'long' }).format(local(date))
7
+ }
8
+
9
+ export function formatYearHeading(tag: string, date: DateValue) {
10
+ return new Intl.DateTimeFormat(tag, { year: 'numeric' }).format(local(date))
11
+ }
12
+
13
+ export function formatMonthName(tag: string, date: DateValue) {
14
+ return new Intl.DateTimeFormat(tag, { month: 'short' }).format(local(date))
15
+ }
16
+
17
+ export function formatDigits(tag: string, value: number) {
18
+ return new Intl.NumberFormat(tag, { useGrouping: false }).format(value)
19
+ }
20
+
21
+ export function formatYearsHeading(tag: string, cells: DateValue[]) {
22
+ return `${formatDigits(tag, cells[0]!.year)} – ${formatDigits(tag, cells.at(-1)!.year)}`
23
+ }
@@ -0,0 +1,48 @@
1
+ const MIRRORED = [
2
+ 'font-family',
3
+ 'font-size',
4
+ 'font-weight',
5
+ 'font-style',
6
+ 'font-variant',
7
+ 'font-feature-settings',
8
+ 'line-height',
9
+ 'letter-spacing',
10
+ 'word-spacing',
11
+ 'text-indent',
12
+ 'text-transform',
13
+ 'tab-size',
14
+ 'direction',
15
+ 'padding-top',
16
+ 'padding-right',
17
+ 'padding-bottom',
18
+ 'padding-left',
19
+ 'border-top-width',
20
+ 'border-right-width',
21
+ 'border-bottom-width',
22
+ 'border-left-width',
23
+ ]
24
+
25
+ export function caretTop(node: HTMLTextAreaElement, at = node.selectionEnd): number {
26
+ const style = getComputedStyle(node)
27
+ const mirror = node.ownerDocument.createElement('div')
28
+ for (const prop of MIRRORED) mirror.style.setProperty(prop, style.getPropertyValue(prop))
29
+ Object.assign(mirror.style, {
30
+ position: 'absolute',
31
+ top: '0',
32
+ insetInlineStart: '-9999px',
33
+ visibility: 'hidden',
34
+ pointerEvents: 'none',
35
+ boxSizing: 'border-box',
36
+ width: `${node.offsetWidth}px`,
37
+ whiteSpace: 'pre-wrap',
38
+ overflowWrap: 'break-word',
39
+ })
40
+ mirror.textContent = node.value.slice(0, at)
41
+ const marker = node.ownerDocument.createElement('span')
42
+ marker.textContent = node.value.slice(at) || '​'
43
+ mirror.append(marker)
44
+ node.ownerDocument.body.append(mirror)
45
+ const top = marker.offsetTop
46
+ mirror.remove()
47
+ return top
48
+ }
@@ -0,0 +1,29 @@
1
+ export type CollapseAxis = 'y' | 'x'
2
+
3
+ export function collapseGapOf(parent: Element | null, axis: CollapseAxis = 'y') {
4
+ if (!parent) return '0px'
5
+ const style = getComputedStyle(parent)
6
+ const stacked = style.display.includes('flex') || style.display.includes('grid')
7
+ const gap = axis === 'y' ? style.rowGap : style.columnGap
8
+ return stacked && gap !== 'normal' ? gap : '0px'
9
+ }
10
+
11
+ export function writeCollapseGap(el: Element, parent: Element | null, axis: CollapseAxis = 'y') {
12
+ ;(el as HTMLElement).style.setProperty('--hn-collapse-gap', collapseGapOf(parent, axis))
13
+ }
14
+
15
+ export function collapseHooks(axis: CollapseAxis = 'y', parentOf?: () => Element | null) {
16
+ function beforeEnter(el: Element) {
17
+ writeCollapseGap(el, el.parentElement ?? parentOf?.() ?? null, axis)
18
+ }
19
+
20
+ function beforeLeave(el: Element) {
21
+ writeCollapseGap(el, el.parentElement, axis)
22
+ }
23
+
24
+ function afterEnter(el: Element) {
25
+ ;(el as HTMLElement).style.removeProperty('--hn-collapse-gap')
26
+ }
27
+
28
+ return { beforeEnter, afterEnter, beforeLeave }
29
+ }
@@ -0,0 +1,27 @@
1
+ export interface Hotkey {
2
+ key: string
3
+ mod: boolean
4
+ shift: boolean
5
+ alt: boolean
6
+ }
7
+
8
+ export function parseHotkey(spec: string): Hotkey {
9
+ const parts = spec
10
+ .toLowerCase()
11
+ .split('+')
12
+ .map(part => part.trim())
13
+ .filter(Boolean)
14
+ const modifiers = parts.slice(0, -1)
15
+ return {
16
+ key: parts.at(-1) ?? '',
17
+ mod: modifiers.includes('mod'),
18
+ shift: modifiers.includes('shift'),
19
+ alt: modifiers.includes('alt'),
20
+ }
21
+ }
22
+
23
+ export function matchesHotkey(event: KeyboardEvent, hotkey: Hotkey): boolean {
24
+ if (event.key.toLowerCase() !== hotkey.key) return false
25
+ const mod = event.metaKey || event.ctrlKey
26
+ return mod === hotkey.mod && event.shiftKey === hotkey.shift && event.altKey === hotkey.alt
27
+ }