mado-ui 0.4.0 → 0.5.1

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 (388) hide show
  1. package/css/index.css +563 -0
  2. package/dist/components/button.d.ts +1 -0
  3. package/dist/components/button.d.ts.map +1 -0
  4. package/dist/components/details.d.ts +1 -0
  5. package/dist/components/details.d.ts.map +1 -0
  6. package/dist/components/drop-down.d.ts +6 -4
  7. package/dist/components/drop-down.d.ts.map +1 -0
  8. package/dist/components/form/fieldset.d.ts +1 -0
  9. package/dist/components/form/fieldset.d.ts.map +1 -0
  10. package/dist/components/form/index.d.ts +1 -0
  11. package/dist/components/form/index.d.ts.map +1 -0
  12. package/dist/components/form/input/date/index.d.ts +1 -0
  13. package/dist/components/form/input/date/index.d.ts.map +1 -0
  14. package/dist/components/form/input/index.d.ts +1 -0
  15. package/dist/components/form/input/index.d.ts.map +1 -0
  16. package/dist/components/form/submit-button.d.ts +1 -0
  17. package/dist/components/form/submit-button.d.ts.map +1 -0
  18. package/dist/components/form/textarea.d.ts +1 -0
  19. package/dist/components/form/textarea.d.ts.map +1 -0
  20. package/dist/components/ghost.d.ts +1 -0
  21. package/dist/components/ghost.d.ts.map +1 -0
  22. package/dist/components/heading.d.ts +1 -0
  23. package/dist/components/heading.d.ts.map +1 -0
  24. package/dist/components/iframe.d.ts +6 -5
  25. package/dist/components/iframe.d.ts.map +1 -0
  26. package/dist/components/index.d.ts +3 -0
  27. package/dist/components/index.d.ts.map +1 -0
  28. package/dist/components/link.d.ts +1 -0
  29. package/dist/components/link.d.ts.map +1 -0
  30. package/dist/components/modal.d.ts +1 -0
  31. package/dist/components/modal.d.ts.map +1 -0
  32. package/dist/components/time.d.ts +1 -0
  33. package/dist/components/time.d.ts.map +1 -0
  34. package/dist/components/tooltip.d.ts +1 -0
  35. package/dist/components/tooltip.d.ts.map +1 -0
  36. package/dist/components/video.d.ts +31 -0
  37. package/dist/components/video.d.ts.map +1 -0
  38. package/dist/components.d.ts +665 -1
  39. package/dist/components.d.ts.map +1 -0
  40. package/dist/components.esm.js +589 -9
  41. package/dist/components.esm.js.map +1 -1
  42. package/dist/components.js +589 -7
  43. package/dist/components.js.map +1 -1
  44. package/dist/hooks/create-fast-context.d.ts +2 -1
  45. package/dist/hooks/create-fast-context.d.ts.map +1 -0
  46. package/dist/hooks/index.d.ts +3 -2
  47. package/dist/hooks/index.d.ts.map +1 -0
  48. package/dist/hooks/use-fieldset-context.d.ts +1 -0
  49. package/dist/hooks/use-fieldset-context.d.ts.map +1 -0
  50. package/dist/hooks/use-form-context.d.ts +1 -0
  51. package/dist/hooks/use-form-context.d.ts.map +1 -0
  52. package/dist/hooks/use-form-status.d.ts +1 -0
  53. package/dist/hooks/use-form-status.d.ts.map +1 -0
  54. package/dist/hooks/use-pointer-movement.d.ts +17 -0
  55. package/dist/hooks/use-pointer-movement.d.ts.map +1 -0
  56. package/dist/hooks.d.ts +95 -1
  57. package/dist/hooks.d.ts.map +1 -0
  58. package/dist/hooks.esm.js +104 -2
  59. package/dist/hooks.esm.js.map +1 -1
  60. package/dist/hooks.js +103 -0
  61. package/dist/hooks.js.map +1 -1
  62. package/dist/icons/10-arrow-trianglehead-clockwise.d.ts +3 -0
  63. package/dist/icons/10-arrow-trianglehead-clockwise.d.ts.map +1 -0
  64. package/dist/icons/10-arrow-trianglehead-counterclockwise.d.ts +3 -0
  65. package/dist/icons/10-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  66. package/dist/icons/15-arrow-trianglehead-clockwise.d.ts +3 -0
  67. package/dist/icons/15-arrow-trianglehead-clockwise.d.ts.map +1 -0
  68. package/dist/icons/15-arrow-trianglehead-counterclockwise.d.ts +3 -0
  69. package/dist/icons/15-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  70. package/dist/icons/3-people.d.ts +2 -1
  71. package/dist/icons/3-people.d.ts.map +1 -0
  72. package/dist/icons/3-rectangles-desktop-fill.d.ts +2 -1
  73. package/dist/icons/3-rectangles-desktop-fill.d.ts.map +1 -0
  74. package/dist/icons/3-rectangles-desktop.d.ts +2 -1
  75. package/dist/icons/3-rectangles-desktop.d.ts.map +1 -0
  76. package/dist/icons/30-arrow-trianglehead-clockwise.d.ts +3 -0
  77. package/dist/icons/30-arrow-trianglehead-clockwise.d.ts.map +1 -0
  78. package/dist/icons/30-arrow-trianglehead-counterclockwise.d.ts +3 -0
  79. package/dist/icons/30-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  80. package/dist/icons/45-arrow-trianglehead-clockwise.d.ts +3 -0
  81. package/dist/icons/45-arrow-trianglehead-clockwise.d.ts.map +1 -0
  82. package/dist/icons/45-arrow-trianglehead-counterclockwise.d.ts +3 -0
  83. package/dist/icons/45-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  84. package/dist/icons/5-arrow-trianglehead-clockwise.d.ts +3 -0
  85. package/dist/icons/5-arrow-trianglehead-clockwise.d.ts.map +1 -0
  86. package/dist/icons/5-arrow-trianglehead-counterclockwise.d.ts +3 -0
  87. package/dist/icons/5-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  88. package/dist/icons/60-arrow-trianglehead-clockwise.d.ts +3 -0
  89. package/dist/icons/60-arrow-trianglehead-clockwise.d.ts.map +1 -0
  90. package/dist/icons/60-arrow-trianglehead-counterclockwise.d.ts +3 -0
  91. package/dist/icons/60-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  92. package/dist/icons/75-arrow-trianglehead-clockwise.d.ts +3 -0
  93. package/dist/icons/75-arrow-trianglehead-clockwise.d.ts.map +1 -0
  94. package/dist/icons/75-arrow-trianglehead-counterclockwise.d.ts +3 -0
  95. package/dist/icons/75-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  96. package/dist/icons/90-arrow-trianglehead-clockwise.d.ts +3 -0
  97. package/dist/icons/90-arrow-trianglehead-clockwise.d.ts.map +1 -0
  98. package/dist/icons/90-arrow-trianglehead-counterclockwise.d.ts +3 -0
  99. package/dist/icons/90-arrow-trianglehead-counterclockwise.d.ts.map +1 -0
  100. package/dist/icons/airplane.d.ts +2 -1
  101. package/dist/icons/airplane.d.ts.map +1 -0
  102. package/dist/icons/arrow-down-backward-and-arrow-up-forward-rectangle.d.ts +3 -0
  103. package/dist/icons/arrow-down-backward-and-arrow-up-forward-rectangle.d.ts.map +1 -0
  104. package/dist/icons/arrow-triangle-2-circlepath-circle-fill.d.ts +2 -1
  105. package/dist/icons/arrow-triangle-2-circlepath-circle-fill.d.ts.map +1 -0
  106. package/dist/icons/arrow-triangle-2-circlepath-circle.d.ts +2 -1
  107. package/dist/icons/arrow-triangle-2-circlepath-circle.d.ts.map +1 -0
  108. package/dist/icons/arrow-up-forward-and-arrow-down-backward-rectangle.d.ts +3 -0
  109. package/dist/icons/arrow-up-forward-and-arrow-down-backward-rectangle.d.ts.map +1 -0
  110. package/dist/icons/bag-fill.d.ts +2 -1
  111. package/dist/icons/bag-fill.d.ts.map +1 -0
  112. package/dist/icons/banknote.d.ts +2 -1
  113. package/dist/icons/banknote.d.ts.map +1 -0
  114. package/dist/icons/bell-fill.d.ts +2 -1
  115. package/dist/icons/bell-fill.d.ts.map +1 -0
  116. package/dist/icons/bolt-car.d.ts +2 -1
  117. package/dist/icons/bolt-car.d.ts.map +1 -0
  118. package/dist/icons/bolt-fill.d.ts +2 -1
  119. package/dist/icons/bolt-fill.d.ts.map +1 -0
  120. package/dist/icons/bolt-ring-closed.d.ts +2 -1
  121. package/dist/icons/bolt-ring-closed.d.ts.map +1 -0
  122. package/dist/icons/bolt-trianglebadge-exclamationmark.d.ts +2 -1
  123. package/dist/icons/bolt-trianglebadge-exclamationmark.d.ts.map +1 -0
  124. package/dist/icons/book-fill.d.ts +2 -1
  125. package/dist/icons/book-fill.d.ts.map +1 -0
  126. package/dist/icons/bookmark-fill.d.ts +2 -1
  127. package/dist/icons/bookmark-fill.d.ts.map +1 -0
  128. package/dist/icons/briefcase-fill.d.ts +2 -1
  129. package/dist/icons/briefcase-fill.d.ts.map +1 -0
  130. package/dist/icons/bubble-left-fill.d.ts +2 -1
  131. package/dist/icons/bubble-left-fill.d.ts.map +1 -0
  132. package/dist/icons/building-2-fill.d.ts +2 -1
  133. package/dist/icons/building-2-fill.d.ts.map +1 -0
  134. package/dist/icons/calendar.d.ts +2 -1
  135. package/dist/icons/calendar.d.ts.map +1 -0
  136. package/dist/icons/camera-fill.d.ts +2 -1
  137. package/dist/icons/camera-fill.d.ts.map +1 -0
  138. package/dist/icons/car-fill.d.ts +2 -1
  139. package/dist/icons/car-fill.d.ts.map +1 -0
  140. package/dist/icons/cart-fill.d.ts +2 -1
  141. package/dist/icons/cart-fill.d.ts.map +1 -0
  142. package/dist/icons/chart-bar-doc-horizontal.d.ts +2 -1
  143. package/dist/icons/chart-bar-doc-horizontal.d.ts.map +1 -0
  144. package/dist/icons/checkmark-seal.d.ts +2 -1
  145. package/dist/icons/checkmark-seal.d.ts.map +1 -0
  146. package/dist/icons/checkmark.d.ts +2 -1
  147. package/dist/icons/checkmark.d.ts.map +1 -0
  148. package/dist/icons/chevron-compact-down.d.ts +2 -1
  149. package/dist/icons/chevron-compact-down.d.ts.map +1 -0
  150. package/dist/icons/chevron-down.d.ts +2 -1
  151. package/dist/icons/chevron-down.d.ts.map +1 -0
  152. package/dist/icons/chevron-left-forwardslash-chevron-right.d.ts +2 -1
  153. package/dist/icons/chevron-left-forwardslash-chevron-right.d.ts.map +1 -0
  154. package/dist/icons/chevron-left.d.ts +2 -1
  155. package/dist/icons/chevron-left.d.ts.map +1 -0
  156. package/dist/icons/chevron-right.d.ts +2 -1
  157. package/dist/icons/chevron-right.d.ts.map +1 -0
  158. package/dist/icons/chevron-up-chevron-down.d.ts +2 -1
  159. package/dist/icons/chevron-up-chevron-down.d.ts.map +1 -0
  160. package/dist/icons/circle-fill.d.ts +2 -1
  161. package/dist/icons/circle-fill.d.ts.map +1 -0
  162. package/dist/icons/clock-badge-checkmark.d.ts +2 -1
  163. package/dist/icons/clock-badge-checkmark.d.ts.map +1 -0
  164. package/dist/icons/clock-fill.d.ts +2 -1
  165. package/dist/icons/clock-fill.d.ts.map +1 -0
  166. package/dist/icons/cloud-fill.d.ts +2 -1
  167. package/dist/icons/cloud-fill.d.ts.map +1 -0
  168. package/dist/icons/cube-fill.d.ts +2 -1
  169. package/dist/icons/cube-fill.d.ts.map +1 -0
  170. package/dist/icons/curve-point-left.d.ts +2 -1
  171. package/dist/icons/curve-point-left.d.ts.map +1 -0
  172. package/dist/icons/dial-high.d.ts +2 -1
  173. package/dist/icons/dial-high.d.ts.map +1 -0
  174. package/dist/icons/doc-fill.d.ts +2 -1
  175. package/dist/icons/doc-fill.d.ts.map +1 -0
  176. package/dist/icons/doc-on-clipboard.d.ts +2 -1
  177. package/dist/icons/doc-on-clipboard.d.ts.map +1 -0
  178. package/dist/icons/doc-on-doc-fill.d.ts +2 -1
  179. package/dist/icons/doc-on-doc-fill.d.ts.map +1 -0
  180. package/dist/icons/doc-on-doc.d.ts +2 -1
  181. package/dist/icons/doc-on-doc.d.ts.map +1 -0
  182. package/dist/icons/doc-text-magnifyingglass.d.ts +2 -1
  183. package/dist/icons/doc-text-magnifyingglass.d.ts.map +1 -0
  184. package/dist/icons/dollar-sign.d.ts +2 -1
  185. package/dist/icons/dollar-sign.d.ts.map +1 -0
  186. package/dist/icons/ellipsis-circle-fill.d.ts +2 -1
  187. package/dist/icons/ellipsis-circle-fill.d.ts.map +1 -0
  188. package/dist/icons/ellipsis-circle.d.ts +2 -1
  189. package/dist/icons/ellipsis-circle.d.ts.map +1 -0
  190. package/dist/icons/envelope-fill.d.ts +2 -1
  191. package/dist/icons/envelope-fill.d.ts.map +1 -0
  192. package/dist/icons/envelope.d.ts +2 -1
  193. package/dist/icons/envelope.d.ts.map +1 -0
  194. package/dist/icons/exclamationmark-octagon.d.ts +2 -1
  195. package/dist/icons/exclamationmark-octagon.d.ts.map +1 -0
  196. package/dist/icons/eye.d.ts +2 -1
  197. package/dist/icons/eye.d.ts.map +1 -0
  198. package/dist/icons/figure-water-fitness.d.ts +2 -1
  199. package/dist/icons/figure-water-fitness.d.ts.map +1 -0
  200. package/dist/icons/flag-fill.d.ts +2 -1
  201. package/dist/icons/flag-fill.d.ts.map +1 -0
  202. package/dist/icons/flame-fill.d.ts +2 -1
  203. package/dist/icons/flame-fill.d.ts.map +1 -0
  204. package/dist/icons/folder-fill.d.ts +2 -1
  205. package/dist/icons/folder-fill.d.ts.map +1 -0
  206. package/dist/icons/folder.d.ts +2 -1
  207. package/dist/icons/folder.d.ts.map +1 -0
  208. package/dist/icons/gearshape-fill.d.ts +2 -1
  209. package/dist/icons/gearshape-fill.d.ts.map +1 -0
  210. package/dist/icons/gearshape.d.ts +2 -1
  211. package/dist/icons/gearshape.d.ts.map +1 -0
  212. package/dist/icons/gift-fill.d.ts +2 -1
  213. package/dist/icons/gift-fill.d.ts.map +1 -0
  214. package/dist/icons/globe-americas-fill.d.ts +2 -1
  215. package/dist/icons/globe-americas-fill.d.ts.map +1 -0
  216. package/dist/icons/hare-fill.d.ts +2 -1
  217. package/dist/icons/hare-fill.d.ts.map +1 -0
  218. package/dist/icons/house-deskclock.d.ts +2 -1
  219. package/dist/icons/house-deskclock.d.ts.map +1 -0
  220. package/dist/icons/house-fill.d.ts +2 -1
  221. package/dist/icons/house-fill.d.ts.map +1 -0
  222. package/dist/icons/house.d.ts +2 -1
  223. package/dist/icons/house.d.ts.map +1 -0
  224. package/dist/icons/index.d.ts +144 -104
  225. package/dist/icons/index.d.ts.map +1 -0
  226. package/dist/icons/iphone-house.d.ts +2 -1
  227. package/dist/icons/iphone-house.d.ts.map +1 -0
  228. package/dist/icons/light-ribbon.d.ts +2 -1
  229. package/dist/icons/light-ribbon.d.ts.map +1 -0
  230. package/dist/icons/lightbulb-fill.d.ts +2 -1
  231. package/dist/icons/lightbulb-fill.d.ts.map +1 -0
  232. package/dist/icons/lightbulb-led.d.ts +2 -1
  233. package/dist/icons/lightbulb-led.d.ts.map +1 -0
  234. package/dist/icons/list-bullet-clipboard-fill.d.ts +2 -1
  235. package/dist/icons/list-bullet-clipboard-fill.d.ts.map +1 -0
  236. package/dist/icons/magnifyingglass.d.ts +2 -1
  237. package/dist/icons/magnifyingglass.d.ts.map +1 -0
  238. package/dist/icons/map-pin-ellipse.d.ts +2 -1
  239. package/dist/icons/map-pin-ellipse.d.ts.map +1 -0
  240. package/dist/icons/minus-plus-batterblock.d.ts +2 -1
  241. package/dist/icons/minus-plus-batterblock.d.ts.map +1 -0
  242. package/dist/icons/network-shield.d.ts +2 -1
  243. package/dist/icons/network-shield.d.ts.map +1 -0
  244. package/dist/icons/network.d.ts +2 -1
  245. package/dist/icons/network.d.ts.map +1 -0
  246. package/dist/icons/newspaper-fill.d.ts +2 -1
  247. package/dist/icons/newspaper-fill.d.ts.map +1 -0
  248. package/dist/icons/number.d.ts +2 -1
  249. package/dist/icons/number.d.ts.map +1 -0
  250. package/dist/icons/paperplane-fill.d.ts +2 -1
  251. package/dist/icons/paperplane-fill.d.ts.map +1 -0
  252. package/dist/icons/pause-fill.d.ts +3 -0
  253. package/dist/icons/pause-fill.d.ts.map +1 -0
  254. package/dist/icons/person-crop-square.d.ts +2 -1
  255. package/dist/icons/person-crop-square.d.ts.map +1 -0
  256. package/dist/icons/person-fill-questionmark.d.ts +2 -1
  257. package/dist/icons/person-fill-questionmark.d.ts.map +1 -0
  258. package/dist/icons/person-fill.d.ts +2 -1
  259. package/dist/icons/person-fill.d.ts.map +1 -0
  260. package/dist/icons/person.d.ts +2 -1
  261. package/dist/icons/person.d.ts.map +1 -0
  262. package/dist/icons/phone-arrow-up-right.d.ts +2 -1
  263. package/dist/icons/phone-arrow-up-right.d.ts.map +1 -0
  264. package/dist/icons/phone-fill.d.ts +2 -1
  265. package/dist/icons/phone-fill.d.ts.map +1 -0
  266. package/dist/icons/phone.d.ts +2 -1
  267. package/dist/icons/phone.d.ts.map +1 -0
  268. package/dist/icons/photo-badge-arrow-down-fill.d.ts +3 -0
  269. package/dist/icons/photo-badge-arrow-down-fill.d.ts.map +1 -0
  270. package/dist/icons/photo-badge-arrow-down.d.ts +3 -0
  271. package/dist/icons/photo-badge-arrow-down.d.ts.map +1 -0
  272. package/dist/icons/play-fill.d.ts +3 -0
  273. package/dist/icons/play-fill.d.ts.map +1 -0
  274. package/dist/icons/play-rectangle-fill.d.ts +2 -1
  275. package/dist/icons/play-rectangle-fill.d.ts.map +1 -0
  276. package/dist/icons/plus.d.ts +2 -1
  277. package/dist/icons/plus.d.ts.map +1 -0
  278. package/dist/icons/qrcode.d.ts +2 -1
  279. package/dist/icons/qrcode.d.ts.map +1 -0
  280. package/dist/icons/rectangle-fill-on-arrow-down-forward-topleading-rectangle.d.ts +3 -0
  281. package/dist/icons/rectangle-fill-on-arrow-down-forward-topleading-rectangle.d.ts.map +1 -0
  282. package/dist/icons/rectangle-fill.d.ts +3 -0
  283. package/dist/icons/rectangle-fill.d.ts.map +1 -0
  284. package/dist/icons/rectangle-portrait-and-arrow-left-fill.d.ts +2 -1
  285. package/dist/icons/rectangle-portrait-and-arrow-left-fill.d.ts.map +1 -0
  286. package/dist/icons/rectangle-portrait-and-arrow-left.d.ts +2 -1
  287. package/dist/icons/rectangle-portrait-and-arrow-left.d.ts.map +1 -0
  288. package/dist/icons/rectangle-triangle-up.d.ts +3 -0
  289. package/dist/icons/rectangle-triangle-up.d.ts.map +1 -0
  290. package/dist/icons/rectangle.d.ts +3 -0
  291. package/dist/icons/rectangle.d.ts.map +1 -0
  292. package/dist/icons/sensor.d.ts +2 -1
  293. package/dist/icons/sensor.d.ts.map +1 -0
  294. package/dist/icons/signature.d.ts +2 -1
  295. package/dist/icons/signature.d.ts.map +1 -0
  296. package/dist/icons/solar-panel.d.ts +2 -1
  297. package/dist/icons/solar-panel.d.ts.map +1 -0
  298. package/dist/icons/speaker-fill.d.ts +3 -0
  299. package/dist/icons/speaker-fill.d.ts.map +1 -0
  300. package/dist/icons/speaker-minus-fill.d.ts +3 -0
  301. package/dist/icons/speaker-minus-fill.d.ts.map +1 -0
  302. package/dist/icons/speaker-minus.d.ts +3 -0
  303. package/dist/icons/speaker-minus.d.ts.map +1 -0
  304. package/dist/icons/speaker-plus-fill.d.ts +3 -0
  305. package/dist/icons/speaker-plus-fill.d.ts.map +1 -0
  306. package/dist/icons/speaker-plus.d.ts +3 -0
  307. package/dist/icons/speaker-plus.d.ts.map +1 -0
  308. package/dist/icons/speaker-slash-fill.d.ts +3 -0
  309. package/dist/icons/speaker-slash-fill.d.ts.map +1 -0
  310. package/dist/icons/speaker-slash.d.ts +3 -0
  311. package/dist/icons/speaker-slash.d.ts.map +1 -0
  312. package/dist/icons/speaker-wave-1-fill.d.ts +3 -0
  313. package/dist/icons/speaker-wave-1-fill.d.ts.map +1 -0
  314. package/dist/icons/speaker-wave-1.d.ts +3 -0
  315. package/dist/icons/speaker-wave-1.d.ts.map +1 -0
  316. package/dist/icons/speaker-wave-2-fill.d.ts +3 -0
  317. package/dist/icons/speaker-wave-2-fill.d.ts.map +1 -0
  318. package/dist/icons/speaker-wave-2.d.ts +3 -0
  319. package/dist/icons/speaker-wave-2.d.ts.map +1 -0
  320. package/dist/icons/speaker-wave-3-fill.d.ts +3 -0
  321. package/dist/icons/speaker-wave-3-fill.d.ts.map +1 -0
  322. package/dist/icons/speaker-wave-3.d.ts +3 -0
  323. package/dist/icons/speaker-wave-3.d.ts.map +1 -0
  324. package/dist/icons/speaker.d.ts +3 -0
  325. package/dist/icons/speaker.d.ts.map +1 -0
  326. package/dist/icons/square-and-arrow-down-fill.d.ts +2 -1
  327. package/dist/icons/square-and-arrow-down-fill.d.ts.map +1 -0
  328. package/dist/icons/square-and-arrow-down.d.ts +2 -1
  329. package/dist/icons/square-and-arrow-down.d.ts.map +1 -0
  330. package/dist/icons/square-and-arrow-up-fill.d.ts +2 -1
  331. package/dist/icons/square-and-arrow-up-fill.d.ts.map +1 -0
  332. package/dist/icons/square-and-arrow-up.d.ts +2 -1
  333. package/dist/icons/square-and-arrow-up.d.ts.map +1 -0
  334. package/dist/icons/square-and-pencil-fill.d.ts +2 -1
  335. package/dist/icons/square-and-pencil-fill.d.ts.map +1 -0
  336. package/dist/icons/square-and-pencil.d.ts +2 -1
  337. package/dist/icons/square-and-pencil.d.ts.map +1 -0
  338. package/dist/icons/text-bubble.d.ts +2 -1
  339. package/dist/icons/text-bubble.d.ts.map +1 -0
  340. package/dist/icons/trash-fill.d.ts +2 -1
  341. package/dist/icons/trash-fill.d.ts.map +1 -0
  342. package/dist/icons/trash.d.ts +2 -1
  343. package/dist/icons/trash.d.ts.map +1 -0
  344. package/dist/icons/tree.d.ts +2 -1
  345. package/dist/icons/tree.d.ts.map +1 -0
  346. package/dist/icons/umbrella-fill.d.ts +2 -1
  347. package/dist/icons/umbrella-fill.d.ts.map +1 -0
  348. package/dist/icons/xmark.d.ts +2 -1
  349. package/dist/icons/xmark.d.ts.map +1 -0
  350. package/dist/icons.d.ts +290 -1
  351. package/dist/icons.d.ts.map +1 -0
  352. package/dist/icons.esm.js +162 -2
  353. package/dist/icons.esm.js.map +1 -1
  354. package/dist/icons.js +203 -3
  355. package/dist/icons.js.map +1 -1
  356. package/dist/index.d.ts +665 -1
  357. package/dist/index.d.ts.map +1 -0
  358. package/dist/index.esm.js +589 -9
  359. package/dist/index.esm.js.map +1 -1
  360. package/dist/index.js +589 -7
  361. package/dist/index.js.map +1 -1
  362. package/dist/types/index.d.ts +1 -0
  363. package/dist/types/index.d.ts.map +1 -0
  364. package/dist/types/utils.d.ts +1 -0
  365. package/dist/types/utils.d.ts.map +1 -0
  366. package/dist/types.d.ts +39 -1
  367. package/dist/types.d.ts.map +1 -0
  368. package/dist/utils/class-management.d.ts +1 -0
  369. package/dist/utils/class-management.d.ts.map +1 -0
  370. package/dist/utils/custom-tailwind-merge.d.ts +1 -0
  371. package/dist/utils/custom-tailwind-merge.d.ts.map +1 -0
  372. package/dist/utils/get-date.d.ts +1 -0
  373. package/dist/utils/get-date.d.ts.map +1 -0
  374. package/dist/utils/helpers.d.ts +1 -0
  375. package/dist/utils/helpers.d.ts.map +1 -0
  376. package/dist/utils/index.d.ts +1 -0
  377. package/dist/utils/index.d.ts.map +1 -0
  378. package/dist/utils/math.d.ts +1 -0
  379. package/dist/utils/math.d.ts.map +1 -0
  380. package/dist/utils/regex.d.ts +1 -0
  381. package/dist/utils/regex.d.ts.map +1 -0
  382. package/dist/utils/string-manipulation.d.ts +1 -0
  383. package/dist/utils/string-manipulation.d.ts.map +1 -0
  384. package/dist/utils/tw-sort.d.ts +1 -0
  385. package/dist/utils/tw-sort.d.ts.map +1 -0
  386. package/dist/utils.d.ts +287 -1
  387. package/dist/utils.d.ts.map +1 -0
  388. package/package.json +96 -94
@@ -1,7 +1,8 @@
1
1
  import { HTMLAttributes } from 'react';
2
- export default function createFastContext<Store>(defaultInitialState: Store): {
2
+ export declare function createFastContext<Store>(defaultInitialState: Store): {
3
3
  Provider: ({ initialValue, ...props }: Pick<HTMLAttributes<HTMLElement>, "children"> & {
4
4
  initialValue?: Store;
5
5
  }) => import("react/jsx-runtime").JSX.Element;
6
6
  useStore: <SelectorOutput>(selector: (store: Store) => SelectorOutput, initialValue?: Store) => [SelectorOutput | undefined, ((value: Store | ((prevState: Store) => Store)) => void) | undefined];
7
7
  };
8
+ //# sourceMappingURL=create-fast-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-fast-context.d.ts","sourceRoot":"","sources":["../../src/hooks/create-fast-context.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAA2D,MAAM,OAAO,CAAA;AAE/F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK;2CAsC/D,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,GAAG;QAAE,YAAY,CAAC,EAAE,KAAK,CAAA;KAAE;eAIzD,cAAc,YACrB,CAAC,KAAK,EAAE,KAAK,KAAK,cAAc,iBAC3B,KAAK,KAClB,CAAC,cAAc,GAAG,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;EAyBrG"}
@@ -1,5 +1,6 @@
1
- import createFastContext from './create-fast-context';
1
+ export * from './create-fast-context';
2
2
  export * from './use-fieldset-context';
3
3
  export * from './use-form-context';
4
4
  export * from './use-form-status';
5
- export { createFastContext };
5
+ export * from './use-pointer-movement';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA"}
@@ -20,3 +20,4 @@ export declare function FieldsetContextProvider({ children, initialValue, }: {
20
20
  initialValue?: FieldsetContextValue;
21
21
  }): import("react/jsx-runtime").JSX.Element;
22
22
  export declare function useFieldsetContext(): FieldsetContext;
23
+ //# sourceMappingURL=use-fieldset-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-fieldset-context.d.ts","sourceRoot":"","sources":["../../src/hooks/use-fieldset-context.tsx"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,EAA8C,MAAM,oBAAoB,CAAA;AAEnG,MAAM,MAAM,oBAAoB,GAAG;IAClC,SAAS,EAAE,KAAK,EAAE,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,oBAAoB,GAAG,SAAS;IAChC;QACC,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;QACrC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;QACtC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA;KAC/D;CACD,CAAA;AAGD,OAAO,EAAE,SAAS,EAA0B,MAAM,OAAO,CAAA;AAOzD,wBAAgB,uBAAuB,CAAC,EACvC,QAAQ,EACR,YAAY,GACZ,EAAE;IACF,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,YAAY,CAAC,EAAE,oBAAoB,CAAA;CACnC,2CAEA;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CA+EpD"}
@@ -36,3 +36,4 @@ export declare function useFormContext(): readonly [FormContext | undefined, {
36
36
  readonly updateField: (fieldID: string, updates: Partial<Field>) => void;
37
37
  }];
38
38
  export {};
39
+ //# sourceMappingURL=use-form-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-form-context.d.ts","sourceRoot":"","sources":["../../src/hooks/use-form-context.tsx"],"names":[],"mappings":"AACA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAA;AAEhH,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAA;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CAAA;AAE7D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,wBAAwB,CAAA;CAAE,CAAA;AAExE,KAAK,wBAAwB,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAA;AAEtE,MAAM,MAAM,KAAK,GAAG,wBAAwB,GAAG;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,KAAK,EAAE,CAAA;AAGjC,OAAO,EAAE,SAAS,EAAe,MAAM,OAAO,CAAA;AAK9C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,eAAe,EAAE,KAAK,SAEjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,WAEzC;AAID,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,2CAEzE;AAED,wBAAgB,cAAc;oCAGa,KAAK;oCAQL,MAAM;oCAIN,MAAM,WAAW,OAAO,CAAC,KAAK,CAAC;GAezE"}
@@ -5,3 +5,4 @@ export declare function FormStatusProvider({ children, initialStatus, }: {
5
5
  initialStatus?: FormStatus;
6
6
  }): import("react/jsx-runtime").JSX.Element;
7
7
  export declare function useFormStatus(): [FormStatus | undefined, ((value: FormStatus | ((prevState: FormStatus) => FormStatus)) => void) | undefined];
8
+ //# sourceMappingURL=use-form-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-form-status.d.ts","sourceRoot":"","sources":["../../src/hooks/use-form-status.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AAE3C,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAA;AAS9F,wBAAgB,kBAAkB,CAAC,EAClC,QAAQ,EACR,aAA8B,GAC9B,EAAE;IACF,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,aAAa,CAAC,EAAE,UAAU,CAAA;CAC1B,2CAMA;AAED,wBAAgB,aAAa,kHAE5B"}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ export type Coords = {
3
+ x: number;
4
+ y: number;
5
+ };
6
+ export type Cursor = 'alias' | 'all-scroll' | 'auto' | 'cell' | 'col-resize' | 'context-menu' | 'copy' | 'crosshair' | 'default' | 'e-resize' | 'ew-resize' | 'grab' | 'grabbing' | 'help' | 'move' | 'no-drop' | 'not-allowed' | 'n-resize' | 'ne-resize' | 'nw-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'pointer' | 'progress' | 'row-resize' | 's-resize' | 'se-resize' | 'sw-resize' | 'text' | 'vertical-text' | 'w-resize' | 'wait' | 'zoom-in' | 'zoom-out';
7
+ export type UsePointerMovementProps = {
8
+ activeCursor?: Cursor;
9
+ onChange?: (delta: Coords) => void;
10
+ onEnd?: (delta: Coords) => void;
11
+ };
12
+ export declare function usePointerMovement(props?: UsePointerMovementProps): {
13
+ delta: Coords;
14
+ stopTracking: () => void;
15
+ trackPointerMovement: (e: React.MouseEvent<HTMLElement> | React.PointerEvent<HTMLElement> | React.TouchEvent<HTMLElement>) => void;
16
+ };
17
+ //# sourceMappingURL=use-pointer-movement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-pointer-movement.d.ts","sourceRoot":"","sources":["../../src/hooks/use-pointer-movement.ts"],"names":[],"mappings":"AAAA,OAAO,KAA0D,MAAM,OAAO,CAAA;AAE9E,MAAM,MAAM,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7C,MAAM,MAAM,MAAM,GACf,OAAO,GACP,YAAY,GACZ,MAAM,GACN,MAAM,GACN,YAAY,GACZ,cAAc,GACd,MAAM,GACN,WAAW,GACX,SAAS,GACT,UAAU,GACV,WAAW,GACX,MAAM,GACN,UAAU,GACV,MAAM,GACN,MAAM,GACN,SAAS,GACT,aAAa,GACb,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,GACb,aAAa,GACb,SAAS,GACT,UAAU,GACV,YAAY,GACZ,UAAU,GACV,WAAW,GACX,WAAW,GACX,MAAM,GACN,eAAe,GACf,UAAU,GACV,MAAM,GACN,SAAS,GACT,UAAU,CAAA;AAEb,MAAM,MAAM,uBAAuB,GAAG;IACrC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAC/B,CAAA;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,uBAAuB;;;8BAyB7D,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;EA0GnG"}
package/dist/hooks.d.ts CHANGED
@@ -1 +1,95 @@
1
- export * from './hooks/';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React, { HTMLAttributes, ReactNode } from 'react';
3
+
4
+ declare function createFastContext<Store>(defaultInitialState: Store): {
5
+ Provider: ({ initialValue, ...props }: Pick<HTMLAttributes<HTMLElement>, "children"> & {
6
+ initialValue?: Store;
7
+ }) => react_jsx_runtime.JSX.Element;
8
+ useStore: <SelectorOutput>(selector: (store: Store) => SelectorOutput, initialValue?: Store) => [SelectorOutput | undefined, ((value: Store | ((prevState: Store) => Store)) => void) | undefined];
9
+ };
10
+
11
+ type FieldType = 'array' | 'email' | 'file' | 'number' | 'object' | 'string' | 'tel' | 'textarea' | 'url';
12
+ type StringField = {
13
+ type: 'email' | 'file' | 'number' | 'string' | 'tel' | 'textarea' | 'url';
14
+ value: string;
15
+ required?: boolean;
16
+ invalid?: boolean;
17
+ };
18
+ type ObjectField = {
19
+ type: 'object';
20
+ fields: Field[];
21
+ };
22
+ type ArrayField = {
23
+ type: 'array';
24
+ of: ArrayObjectOrNormalField;
25
+ };
26
+ type ArrayObjectOrNormalField = StringField | ArrayField | ObjectField;
27
+ type Field = ArrayObjectOrNormalField & {
28
+ id: string;
29
+ name: string;
30
+ };
31
+ type FormContext = Field[];
32
+
33
+ /**
34
+ * # Define Field
35
+ *
36
+ * This is a helper function to define a field in a form context with type safety.
37
+ */
38
+ declare function defineField(fieldDefinition: Field): Field;
39
+ declare function isStringField(field: Field): boolean;
40
+ declare function FormContextProvider({ children }: {
41
+ children?: ReactNode;
42
+ }): react_jsx_runtime.JSX.Element;
43
+ declare function useFormContext(): readonly [FormContext | undefined, {
44
+ readonly registerField: (field: Field) => void;
45
+ readonly removeField: (fieldID: string) => void;
46
+ readonly updateField: (fieldID: string, updates: Partial<Field>) => void;
47
+ }];
48
+
49
+ type FieldsetContextValue = {
50
+ fieldList: Field[];
51
+ decorative: boolean;
52
+ id: string;
53
+ join?: string;
54
+ name: string;
55
+ };
56
+ type FieldsetContext = [
57
+ FieldsetContextValue | undefined,
58
+ {
59
+ registerField: (field: Field) => void;
60
+ removeField: (fieldID: string) => void;
61
+ updateField: (fieldID: string, updates: Partial<Field>) => void;
62
+ }
63
+ ];
64
+
65
+ declare function FieldsetContextProvider({ children, initialValue, }: {
66
+ children?: ReactNode;
67
+ initialValue?: FieldsetContextValue;
68
+ }): react_jsx_runtime.JSX.Element;
69
+ declare function useFieldsetContext(): FieldsetContext;
70
+
71
+ type FormStatus = 'error' | 'incomplete' | 'loading' | 'ready' | 'success' | 'readonly';
72
+ declare function FormStatusProvider({ children, initialStatus, }: {
73
+ children?: ReactNode;
74
+ initialStatus?: FormStatus;
75
+ }): react_jsx_runtime.JSX.Element;
76
+ declare function useFormStatus(): [FormStatus | undefined, ((value: FormStatus | ((prevState: FormStatus) => FormStatus)) => void) | undefined];
77
+
78
+ type Coords = {
79
+ x: number;
80
+ y: number;
81
+ };
82
+ type Cursor = 'alias' | 'all-scroll' | 'auto' | 'cell' | 'col-resize' | 'context-menu' | 'copy' | 'crosshair' | 'default' | 'e-resize' | 'ew-resize' | 'grab' | 'grabbing' | 'help' | 'move' | 'no-drop' | 'not-allowed' | 'n-resize' | 'ne-resize' | 'nw-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'pointer' | 'progress' | 'row-resize' | 's-resize' | 'se-resize' | 'sw-resize' | 'text' | 'vertical-text' | 'w-resize' | 'wait' | 'zoom-in' | 'zoom-out';
83
+ type UsePointerMovementProps = {
84
+ activeCursor?: Cursor;
85
+ onChange?: (delta: Coords) => void;
86
+ onEnd?: (delta: Coords) => void;
87
+ };
88
+ declare function usePointerMovement(props?: UsePointerMovementProps): {
89
+ delta: Coords;
90
+ stopTracking: () => void;
91
+ trackPointerMovement: (e: React.MouseEvent<HTMLElement> | React.PointerEvent<HTMLElement> | React.TouchEvent<HTMLElement>) => void;
92
+ };
93
+
94
+ export { FieldsetContextProvider, FormContextProvider, FormStatusProvider, createFastContext, defineField, isStringField, useFieldsetContext, useFormContext, useFormStatus, usePointerMovement };
95
+ export type { ArrayField, Coords, Cursor, Field, FieldType, FieldsetContext, FieldsetContextValue, FormContext, FormStatus, ObjectField, StringField, UsePointerMovementProps };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA"}
package/dist/hooks.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { createContext, useContext, useSyncExternalStore, useRef, useCallback, useEffect, Suspense } from 'react';
2
+ import { createContext, useContext, useSyncExternalStore, useRef, useCallback, useEffect, Suspense, useState, useId } from 'react';
3
3
 
4
4
  function createFastContext(defaultInitialState) {
5
5
  function useStoreData(initialState = defaultInitialState) {
@@ -163,5 +163,107 @@ function useFormStatus() {
163
163
  return useStore(store => store);
164
164
  }
165
165
 
166
- export { FieldsetContextProvider, FormContextProvider, FormStatusProvider, createFastContext, defineField, isStringField, useFieldsetContext, useFormContext, useFormStatus };
166
+ function usePointerMovement(props) {
167
+ const pointerTypeRef = useRef('pointer'), [isTracking, setIsTracking] = useState(false), [delta, setDelta] = useState({ x: 0, y: 0 }), startCoordsRef = useRef({ x: 0, y: 0 });
168
+ const styleID = useId();
169
+ const changeCursor = (cursor) => {
170
+ if (cursor === false) {
171
+ document.querySelector(`#${styleID}`)?.remove();
172
+ return;
173
+ }
174
+ const css = `*, *:active { cursor: ${cursor}; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; }`;
175
+ const style = document.createElement('style');
176
+ style.id = styleID;
177
+ style.innerHTML = css;
178
+ document.body.prepend(style);
179
+ };
180
+ const trackPointerMovement = (e) => {
181
+ changeCursor(props?.activeCursor || 'grabbing');
182
+ const { type } = e;
183
+ switch (type) {
184
+ case 'mousemove':
185
+ case 'mouseup':
186
+ case 'pointermove':
187
+ case 'pointerup':
188
+ case 'touchmove':
189
+ case 'touchend':
190
+ throw new Error('To initiate the tracking of pointer movement, you must use a `mousedown`, `pointerdown`, or `touchstart`.');
191
+ case 'mousedown':
192
+ pointerTypeRef.current = 'mouse';
193
+ break;
194
+ case 'pointerdown':
195
+ pointerTypeRef.current = 'pointer';
196
+ break;
197
+ case 'touchstart':
198
+ pointerTypeRef.current = 'touch';
199
+ break;
200
+ }
201
+ let x = 0, y = 0;
202
+ if ('touches' in e) {
203
+ const { touches } = e;
204
+ if (touches.length > 1)
205
+ return;
206
+ x = touches[0].clientX;
207
+ y = touches[0].clientY;
208
+ }
209
+ else {
210
+ x = e.clientX;
211
+ y = e.clientY;
212
+ }
213
+ startCoordsRef.current = { x, y };
214
+ setIsTracking(true);
215
+ };
216
+ const updateDelta = useCallback((e) => {
217
+ let clientX = 0, clientY = 0;
218
+ if ('touches' in e) {
219
+ const { touches } = e;
220
+ if (touches.length > 1)
221
+ return;
222
+ clientX = touches[0].clientX;
223
+ clientY = touches[0].clientY;
224
+ }
225
+ else {
226
+ clientX = e.clientX;
227
+ clientY = e.clientY;
228
+ }
229
+ const { x, y } = startCoordsRef.current, newDelta = { x: clientX - x, y: clientY - y };
230
+ setDelta(newDelta);
231
+ props?.onChange?.(newDelta);
232
+ }, []);
233
+ const stopTracking = useCallback(() => {
234
+ changeCursor(false);
235
+ setIsTracking(false);
236
+ props?.onEnd?.(delta);
237
+ }, [delta]);
238
+ useEffect(() => {
239
+ if (typeof window === 'undefined')
240
+ return;
241
+ const controller = new AbortController(), signal = controller.signal;
242
+ if (isTracking) {
243
+ switch (pointerTypeRef.current) {
244
+ case 'mouse':
245
+ document.body.addEventListener('mousemove', updateDelta, { signal });
246
+ document.body.addEventListener('mouseup', stopTracking, { signal });
247
+ break;
248
+ case 'pointer':
249
+ document.body.addEventListener('pointermove', updateDelta, { signal });
250
+ document.body.addEventListener('pointerup', stopTracking, { signal });
251
+ break;
252
+ case 'touch':
253
+ document.body.addEventListener('touchmove', updateDelta, { signal });
254
+ document.body.addEventListener('touchend', stopTracking, { signal });
255
+ break;
256
+ }
257
+ }
258
+ else {
259
+ controller.abort();
260
+ }
261
+ return () => {
262
+ controller.abort();
263
+ };
264
+ }, [isTracking, updateDelta, stopTracking]);
265
+ return { delta, stopTracking, trackPointerMovement };
266
+ }
267
+
268
+ export { FieldsetContextProvider, FormContextProvider, FormStatusProvider, createFastContext, defineField, isStringField, useFieldsetContext, useFormContext, useFormStatus, usePointerMovement };
167
269
  //# sourceMappingURL=hooks.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.esm.js","sources":["../src/hooks/create-fast-context.tsx","../src/hooks/use-form-context.tsx","../src/hooks/use-fieldset-context.tsx","../src/hooks/use-form-status.tsx"],"sourcesContent":["// * React\nimport { HTMLAttributes, useRef, createContext, useContext, useSyncExternalStore } from 'react'\n\nexport default function createFastContext<Store>(defaultInitialState: Store) {\n\tfunction useStoreData(initialState: Store = defaultInitialState): {\n\t\tget: () => Store\n\t\tset: (value: Store | ((prevState: Store) => Store)) => void\n\t\tsubscribe: (callback: () => void) => () => void\n\t} {\n\t\tconst store = useRef(initialState),\n\t\t\tget = () => store.current,\n\t\t\tsubscribers = useRef(new Set<() => void>())\n\n\t\tconst set = (value: Store | ((prevState: Store) => Store)) => {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\tstore.current = (value as (prevState: Store) => Store)(store.current)\n\t\t\t} else {\n\t\t\t\tstore.current = value\n\t\t\t}\n\t\t\tsubscribers.current.forEach(callback => callback())\n\t\t}\n\n\t\tconst subscribe = (callback: () => void) => {\n\t\t\tsubscribers.current.add(callback)\n\t\t\treturn () => subscribers.current.delete(callback)\n\t\t}\n\n\t\treturn {\n\t\t\tget,\n\t\t\tset,\n\t\t\tsubscribe,\n\t\t}\n\t}\n\n\ttype UseStoreDataReturnType = ReturnType<typeof useStoreData>\n\n\tconst StoreContext = createContext<UseStoreDataReturnType | null>(null)\n\n\tfunction Provider({\n\t\tinitialValue = defaultInitialState,\n\t\t...props\n\t}: Pick<HTMLAttributes<HTMLElement>, 'children'> & { initialValue?: Store }) {\n\t\treturn <StoreContext.Provider value={useStoreData(initialValue)} {...props} />\n\t}\n\n\tfunction useStore<SelectorOutput>(\n\t\tselector: (store: Store) => SelectorOutput,\n\t\tinitialValue?: Store,\n\t): [SelectorOutput | undefined, ((value: Store | ((prevState: Store) => Store)) => void) | undefined] {\n\t\tconst store = useContext(StoreContext)\n\n\t\tif (!store) {\n\t\t\tconst localStoreValue = initialValue !== undefined ? initialValue : defaultInitialState\n\n\t\t\tconst selectedValue = selector(localStoreValue)\n\t\t\tconst noOpSet = () => console.warn('Attempting to set store value outside of Provider')\n\n\t\t\treturn [selectedValue, noOpSet]\n\t\t}\n\n\t\tconst state = useSyncExternalStore(\n\t\t\tstore.subscribe,\n\t\t\t() => selector(store.get()),\n\t\t\t() => selector(initialValue !== undefined ? initialValue : defaultInitialState),\n\t\t)\n\n\t\treturn [state, store.set]\n\t}\n\n\treturn {\n\t\tProvider,\n\t\tuseStore,\n\t}\n}\n","// * Types\nexport type FieldType = 'array' | 'email' | 'file' | 'number' | 'object' | 'string' | 'tel' | 'textarea' | 'url'\n\nexport type StringField = {\n\ttype: 'email' | 'file' | 'number' | 'string' | 'tel' | 'textarea' | 'url'\n\tvalue: string\n\trequired?: boolean\n\tinvalid?: boolean\n}\n\nexport type ObjectField = { type: 'object'; fields: Field[] }\n\nexport type ArrayField = { type: 'array'; of: ArrayObjectOrNormalField }\n\ntype ArrayObjectOrNormalField = StringField | ArrayField | ObjectField\n\nexport type Field = ArrayObjectOrNormalField & {\n\tid: string\n\tname: string\n}\n\nexport type FormContext = Field[]\n\n// * React\nimport { ReactNode, useCallback } from 'react'\n\n// * Hooks\nimport createFastContext from './create-fast-context'\n\n/**\n * # Define Field\n *\n * This is a helper function to define a field in a form context with type safety.\n */\nexport function defineField(fieldDefinition: Field) {\n\treturn fieldDefinition\n}\n\nexport function isStringField(field: Field) {\n\treturn Boolean(field.type !== 'object' && field.type !== 'array')\n}\n\nconst { Provider, useStore } = createFastContext<FormContext>([])\n\nexport function FormContextProvider({ children }: { children?: ReactNode }) {\n\treturn <Provider>{children}</Provider>\n}\n\nexport function useFormContext() {\n\tconst [formContext, setFormContext] = useStore(store => store)\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst otherFields = (prevContext || []).filter(otherField => otherField.id !== field.id)\n\n\t\t\treturn [...otherFields, field]\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFormContext?.(prevContext => (prevContext || []).filter(field => field.id !== fieldID))\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst field = prevContext.find(({ id }) => id === fieldID)\n\n\t\t\tif (!field) throw new Error(`Field with id \"${fieldID}\" not found in form context.`)\n\n\t\t\tconst otherFields = prevContext.filter(({ id }) => id !== fieldID)\n\n\t\t\tconst updatedField = { ...field, ...updates } as Field\n\n\t\t\treturn [...otherFields, updatedField]\n\t\t})\n\t}, [])\n\n\treturn [formContext, { registerField, removeField, updateField }] as const\n}\n","// * Types\nimport { defineField, Field, isStringField, StringField, useFormContext } from './use-form-context'\n\nexport type FieldsetContextValue = {\n\tfieldList: Field[]\n\tdecorative: boolean\n\tid: string\n\tjoin?: string\n\tname: string\n}\n\nexport type FieldsetContext = [\n\tFieldsetContextValue | undefined,\n\t{\n\t\tregisterField: (field: Field) => void\n\t\tremoveField: (fieldID: string) => void\n\t\tupdateField: (fieldID: string, updates: Partial<Field>) => void\n\t},\n]\n\n// * React\nimport { ReactNode, useCallback, useEffect } from 'react'\n\n// * Hooks\nimport createFastContext from './create-fast-context'\n\nconst { Provider, useStore } = createFastContext<FieldsetContextValue | undefined>(undefined)\n\nexport function FieldsetContextProvider({\n\tchildren,\n\tinitialValue,\n}: {\n\tchildren?: ReactNode\n\tinitialValue?: FieldsetContextValue\n}) {\n\treturn <Provider initialValue={initialValue}>{children}</Provider>\n}\n\nexport function useFieldsetContext(): FieldsetContext {\n\tconst [fieldsetContext, setFieldsetContext] = useStore(store => store),\n\t\t[, formContextFunctions] = useFormContext()\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\tconst existingFieldIndex = prev.fieldList.findIndex(existingField => existingField.id === field.id)\n\n\t\t\tconst newFieldList =\n\t\t\t\texistingFieldIndex >= 0\n\t\t\t\t\t? prev.fieldList.map((existingField, index) => (index === existingFieldIndex ? field : existingField))\n\t\t\t\t\t: [...prev.fieldList, field]\n\n\t\t\treturn { ...prev, fieldList: newFieldList }\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.filter(field => field.id !== fieldID),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.map(field => (field.id === fieldID ? ({ ...field, ...updates } as Field) : field)),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst createFormContextEntry = useCallback((fieldsetEntry: FieldsetContextValue): Field => {\n\t\tif (fieldsetEntry.join) {\n\t\t\tconst joinedValue = fieldsetEntry.fieldList\n\t\t\t\t.filter(field => isStringField(field) && (field as StringField).value !== '')\n\t\t\t\t.map(field => (field as StringField).value)\n\t\t\t\t.join(fieldsetEntry.join)\n\n\t\t\treturn defineField({\n\t\t\t\ttype: 'string',\n\t\t\t\tid: fieldsetEntry.id,\n\t\t\t\tname: fieldsetEntry.name,\n\t\t\t\tvalue: joinedValue,\n\t\t\t\trequired: fieldsetEntry.fieldList.some(field => (field as StringField).required),\n\t\t\t\tinvalid: fieldsetEntry.fieldList.some(field => (field as StringField).invalid),\n\t\t\t})\n\t\t}\n\n\t\treturn defineField({\n\t\t\ttype: 'object',\n\t\t\tid: fieldsetEntry.id,\n\t\t\tname: fieldsetEntry.name,\n\t\t\tfields: fieldsetEntry.fieldList,\n\t\t})\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (!fieldsetContext || fieldsetContext.decorative) return\n\n\t\tconst formContextEntry = createFormContextEntry(fieldsetContext)\n\n\t\tformContextFunctions.registerField(formContextEntry)\n\n\t\treturn () => {\n\t\t\tformContextFunctions.removeField(fieldsetContext.id)\n\t\t}\n\t}, [fieldsetContext, formContextFunctions.registerField, formContextFunctions.removeField, createFormContextEntry])\n\n\treturn [fieldsetContext, { registerField, removeField, updateField }]\n}\n","// * Types\nimport { ReactNode, Suspense } from 'react'\n\nexport type FormStatus = 'error' | 'incomplete' | 'loading' | 'ready' | 'success' | 'readonly'\n\n// * Hooks\nimport createFastContext from './create-fast-context'\n\nconst DEFAULT_STATUS: FormStatus = 'incomplete'\n\nconst { Provider, useStore } = createFastContext<FormStatus>(DEFAULT_STATUS)\n\nexport function FormStatusProvider({\n\tchildren,\n\tinitialStatus = DEFAULT_STATUS,\n}: {\n\tchildren?: ReactNode\n\tinitialStatus?: FormStatus\n}) {\n\treturn (\n\t\t<Suspense>\n\t\t\t<Provider initialValue={initialStatus}>{children}</Provider>\n\t\t</Suspense>\n\t)\n}\n\nexport function useFormStatus() {\n\treturn useStore(store => store)\n}\n"],"names":["_jsx","Provider","useStore"],"mappings":"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"}
1
+ {"version":3,"file":"hooks.esm.js","sources":["../src/hooks/create-fast-context.tsx","../src/hooks/use-form-context.tsx","../src/hooks/use-fieldset-context.tsx","../src/hooks/use-form-status.tsx","../src/hooks/use-pointer-movement.ts"],"sourcesContent":["// * React\nimport { HTMLAttributes, useRef, createContext, useContext, useSyncExternalStore } from 'react'\n\nexport function createFastContext<Store>(defaultInitialState: Store) {\n\tfunction useStoreData(initialState: Store = defaultInitialState): {\n\t\tget: () => Store\n\t\tset: (value: Store | ((prevState: Store) => Store)) => void\n\t\tsubscribe: (callback: () => void) => () => void\n\t} {\n\t\tconst store = useRef(initialState),\n\t\t\tget = () => store.current,\n\t\t\tsubscribers = useRef(new Set<() => void>())\n\n\t\tconst set = (value: Store | ((prevState: Store) => Store)) => {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\tstore.current = (value as (prevState: Store) => Store)(store.current)\n\t\t\t} else {\n\t\t\t\tstore.current = value\n\t\t\t}\n\t\t\tsubscribers.current.forEach(callback => callback())\n\t\t}\n\n\t\tconst subscribe = (callback: () => void) => {\n\t\t\tsubscribers.current.add(callback)\n\t\t\treturn () => subscribers.current.delete(callback)\n\t\t}\n\n\t\treturn {\n\t\t\tget,\n\t\t\tset,\n\t\t\tsubscribe,\n\t\t}\n\t}\n\n\ttype UseStoreDataReturnType = ReturnType<typeof useStoreData>\n\n\tconst StoreContext = createContext<UseStoreDataReturnType | null>(null)\n\n\tfunction Provider({\n\t\tinitialValue = defaultInitialState,\n\t\t...props\n\t}: Pick<HTMLAttributes<HTMLElement>, 'children'> & { initialValue?: Store }) {\n\t\treturn <StoreContext.Provider value={useStoreData(initialValue)} {...props} />\n\t}\n\n\tfunction useStore<SelectorOutput>(\n\t\tselector: (store: Store) => SelectorOutput,\n\t\tinitialValue?: Store,\n\t): [SelectorOutput | undefined, ((value: Store | ((prevState: Store) => Store)) => void) | undefined] {\n\t\tconst store = useContext(StoreContext)\n\n\t\tif (!store) {\n\t\t\tconst localStoreValue = initialValue !== undefined ? initialValue : defaultInitialState\n\n\t\t\tconst selectedValue = selector(localStoreValue)\n\t\t\tconst noOpSet = () => console.warn('Attempting to set store value outside of Provider')\n\n\t\t\treturn [selectedValue, noOpSet]\n\t\t}\n\n\t\tconst state = useSyncExternalStore(\n\t\t\tstore.subscribe,\n\t\t\t() => selector(store.get()),\n\t\t\t() => selector(initialValue !== undefined ? initialValue : defaultInitialState),\n\t\t)\n\n\t\treturn [state, store.set]\n\t}\n\n\treturn {\n\t\tProvider,\n\t\tuseStore,\n\t}\n}\n","// * Types\nexport type FieldType = 'array' | 'email' | 'file' | 'number' | 'object' | 'string' | 'tel' | 'textarea' | 'url'\n\nexport type StringField = {\n\ttype: 'email' | 'file' | 'number' | 'string' | 'tel' | 'textarea' | 'url'\n\tvalue: string\n\trequired?: boolean\n\tinvalid?: boolean\n}\n\nexport type ObjectField = { type: 'object'; fields: Field[] }\n\nexport type ArrayField = { type: 'array'; of: ArrayObjectOrNormalField }\n\ntype ArrayObjectOrNormalField = StringField | ArrayField | ObjectField\n\nexport type Field = ArrayObjectOrNormalField & {\n\tid: string\n\tname: string\n}\n\nexport type FormContext = Field[]\n\n// * React\nimport { ReactNode, useCallback } from 'react'\n\n// * Hooks\nimport { createFastContext } from './create-fast-context'\n\n/**\n * # Define Field\n *\n * This is a helper function to define a field in a form context with type safety.\n */\nexport function defineField(fieldDefinition: Field) {\n\treturn fieldDefinition\n}\n\nexport function isStringField(field: Field) {\n\treturn Boolean(field.type !== 'object' && field.type !== 'array')\n}\n\nconst { Provider, useStore } = createFastContext<FormContext>([])\n\nexport function FormContextProvider({ children }: { children?: ReactNode }) {\n\treturn <Provider>{children}</Provider>\n}\n\nexport function useFormContext() {\n\tconst [formContext, setFormContext] = useStore(store => store)\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst otherFields = (prevContext || []).filter(otherField => otherField.id !== field.id)\n\n\t\t\treturn [...otherFields, field]\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFormContext?.(prevContext => (prevContext || []).filter(field => field.id !== fieldID))\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst field = prevContext.find(({ id }) => id === fieldID)\n\n\t\t\tif (!field) throw new Error(`Field with id \"${fieldID}\" not found in form context.`)\n\n\t\t\tconst otherFields = prevContext.filter(({ id }) => id !== fieldID)\n\n\t\t\tconst updatedField = { ...field, ...updates } as Field\n\n\t\t\treturn [...otherFields, updatedField]\n\t\t})\n\t}, [])\n\n\treturn [formContext, { registerField, removeField, updateField }] as const\n}\n","// * Types\nimport { defineField, Field, isStringField, StringField, useFormContext } from './use-form-context'\n\nexport type FieldsetContextValue = {\n\tfieldList: Field[]\n\tdecorative: boolean\n\tid: string\n\tjoin?: string\n\tname: string\n}\n\nexport type FieldsetContext = [\n\tFieldsetContextValue | undefined,\n\t{\n\t\tregisterField: (field: Field) => void\n\t\tremoveField: (fieldID: string) => void\n\t\tupdateField: (fieldID: string, updates: Partial<Field>) => void\n\t},\n]\n\n// * React\nimport { ReactNode, useCallback, useEffect } from 'react'\n\n// * Hooks\nimport { createFastContext } from './create-fast-context'\n\nconst { Provider, useStore } = createFastContext<FieldsetContextValue | undefined>(undefined)\n\nexport function FieldsetContextProvider({\n\tchildren,\n\tinitialValue,\n}: {\n\tchildren?: ReactNode\n\tinitialValue?: FieldsetContextValue\n}) {\n\treturn <Provider initialValue={initialValue}>{children}</Provider>\n}\n\nexport function useFieldsetContext(): FieldsetContext {\n\tconst [fieldsetContext, setFieldsetContext] = useStore(store => store),\n\t\t[, formContextFunctions] = useFormContext()\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\tconst existingFieldIndex = prev.fieldList.findIndex(existingField => existingField.id === field.id)\n\n\t\t\tconst newFieldList =\n\t\t\t\texistingFieldIndex >= 0\n\t\t\t\t\t? prev.fieldList.map((existingField, index) => (index === existingFieldIndex ? field : existingField))\n\t\t\t\t\t: [...prev.fieldList, field]\n\n\t\t\treturn { ...prev, fieldList: newFieldList }\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.filter(field => field.id !== fieldID),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.map(field => (field.id === fieldID ? ({ ...field, ...updates } as Field) : field)),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst createFormContextEntry = useCallback((fieldsetEntry: FieldsetContextValue): Field => {\n\t\tif (fieldsetEntry.join) {\n\t\t\tconst joinedValue = fieldsetEntry.fieldList\n\t\t\t\t.filter(field => isStringField(field) && (field as StringField).value !== '')\n\t\t\t\t.map(field => (field as StringField).value)\n\t\t\t\t.join(fieldsetEntry.join)\n\n\t\t\treturn defineField({\n\t\t\t\ttype: 'string',\n\t\t\t\tid: fieldsetEntry.id,\n\t\t\t\tname: fieldsetEntry.name,\n\t\t\t\tvalue: joinedValue,\n\t\t\t\trequired: fieldsetEntry.fieldList.some(field => (field as StringField).required),\n\t\t\t\tinvalid: fieldsetEntry.fieldList.some(field => (field as StringField).invalid),\n\t\t\t})\n\t\t}\n\n\t\treturn defineField({\n\t\t\ttype: 'object',\n\t\t\tid: fieldsetEntry.id,\n\t\t\tname: fieldsetEntry.name,\n\t\t\tfields: fieldsetEntry.fieldList,\n\t\t})\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (!fieldsetContext || fieldsetContext.decorative) return\n\n\t\tconst formContextEntry = createFormContextEntry(fieldsetContext)\n\n\t\tformContextFunctions.registerField(formContextEntry)\n\n\t\treturn () => {\n\t\t\tformContextFunctions.removeField(fieldsetContext.id)\n\t\t}\n\t}, [fieldsetContext, formContextFunctions.registerField, formContextFunctions.removeField, createFormContextEntry])\n\n\treturn [fieldsetContext, { registerField, removeField, updateField }]\n}\n","// * Types\nimport { ReactNode, Suspense } from 'react'\n\nexport type FormStatus = 'error' | 'incomplete' | 'loading' | 'ready' | 'success' | 'readonly'\n\n// * Hooks\nimport { createFastContext } from './create-fast-context'\n\nconst DEFAULT_STATUS: FormStatus = 'incomplete'\n\nconst { Provider, useStore } = createFastContext<FormStatus>(DEFAULT_STATUS)\n\nexport function FormStatusProvider({\n\tchildren,\n\tinitialStatus = DEFAULT_STATUS,\n}: {\n\tchildren?: ReactNode\n\tinitialStatus?: FormStatus\n}) {\n\treturn (\n\t\t<Suspense>\n\t\t\t<Provider initialValue={initialStatus}>{children}</Provider>\n\t\t</Suspense>\n\t)\n}\n\nexport function useFormStatus() {\n\treturn useStore(store => store)\n}\n","import React, { useCallback, useEffect, useId, useRef, useState } from 'react'\n\nexport type Coords = { x: number; y: number }\n\nexport type Cursor =\n\t| 'alias'\n\t| 'all-scroll'\n\t| 'auto'\n\t| 'cell'\n\t| 'col-resize'\n\t| 'context-menu'\n\t| 'copy'\n\t| 'crosshair'\n\t| 'default'\n\t| 'e-resize'\n\t| 'ew-resize'\n\t| 'grab'\n\t| 'grabbing'\n\t| 'help'\n\t| 'move'\n\t| 'no-drop'\n\t| 'not-allowed'\n\t| 'n-resize'\n\t| 'ne-resize'\n\t| 'nw-resize'\n\t| 'ns-resize'\n\t| 'nesw-resize'\n\t| 'nwse-resize'\n\t| 'pointer'\n\t| 'progress'\n\t| 'row-resize'\n\t| 's-resize'\n\t| 'se-resize'\n\t| 'sw-resize'\n\t| 'text'\n\t| 'vertical-text'\n\t| 'w-resize'\n\t| 'wait'\n\t| 'zoom-in'\n\t| 'zoom-out'\n\nexport type UsePointerMovementProps = {\n\tactiveCursor?: Cursor\n\tonChange?: (delta: Coords) => void\n\tonEnd?: (delta: Coords) => void\n}\n\nexport function usePointerMovement(props?: UsePointerMovementProps) {\n\tconst pointerTypeRef = useRef<'mouse' | 'pointer' | 'touch'>('pointer'),\n\t\t[isTracking, setIsTracking] = useState(false),\n\t\t[delta, setDelta] = useState<Coords>({ x: 0, y: 0 }),\n\t\tstartCoordsRef = useRef<Coords>({ x: 0, y: 0 })\n\n\tconst styleID = useId()\n\n\tconst changeCursor = (cursor: Cursor | false) => {\n\t\tif (cursor === false) {\n\t\t\tdocument.querySelector<HTMLStyleElement>(`#${styleID}`)?.remove()\n\t\t\treturn\n\t\t}\n\n\t\tconst css = `*, *:active { cursor: ${cursor}; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; }`\n\n\t\tconst style = document.createElement('style')\n\n\t\tstyle.id = styleID\n\t\tstyle.innerHTML = css\n\n\t\tdocument.body.prepend(style)\n\t}\n\n\tconst trackPointerMovement = (\n\t\te: React.MouseEvent<HTMLElement> | React.PointerEvent<HTMLElement> | React.TouchEvent<HTMLElement>,\n\t) => {\n\t\tchangeCursor(props?.activeCursor || 'grabbing')\n\n\t\tconst { type } = e\n\n\t\tswitch (type) {\n\t\t\tcase 'mousemove':\n\t\t\tcase 'mouseup':\n\t\t\tcase 'pointermove':\n\t\t\tcase 'pointerup':\n\t\t\tcase 'touchmove':\n\t\t\tcase 'touchend':\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'To initiate the tracking of pointer movement, you must use a `mousedown`, `pointerdown`, or `touchstart`.',\n\t\t\t\t)\n\t\t\tcase 'mousedown':\n\t\t\t\tpointerTypeRef.current = 'mouse'\n\t\t\t\tbreak\n\t\t\tcase 'pointerdown':\n\t\t\t\tpointerTypeRef.current = 'pointer'\n\t\t\t\tbreak\n\t\t\tcase 'touchstart':\n\t\t\t\tpointerTypeRef.current = 'touch'\n\t\t\t\tbreak\n\t\t}\n\n\t\tlet x = 0,\n\t\t\ty = 0\n\n\t\tif ('touches' in e) {\n\t\t\tconst { touches } = e\n\n\t\t\tif (touches.length > 1) return\n\n\t\t\tx = touches[0].clientX\n\t\t\ty = touches[0].clientY\n\t\t} else {\n\t\t\tx = e.clientX\n\t\t\ty = e.clientY\n\t\t}\n\n\t\tstartCoordsRef.current = { x, y }\n\t\tsetIsTracking(true)\n\t}\n\n\tconst updateDelta = useCallback((e: MouseEvent | PointerEvent | TouchEvent) => {\n\t\tlet clientX = 0,\n\t\t\tclientY = 0\n\n\t\tif ('touches' in e) {\n\t\t\tconst { touches } = e\n\n\t\t\tif (touches.length > 1) return\n\n\t\t\tclientX = touches[0].clientX\n\t\t\tclientY = touches[0].clientY\n\t\t} else {\n\t\t\tclientX = e.clientX\n\t\t\tclientY = e.clientY\n\t\t}\n\n\t\tconst { x, y } = startCoordsRef.current,\n\t\t\tnewDelta = { x: clientX - x, y: clientY - y }\n\n\t\tsetDelta(newDelta)\n\t\tprops?.onChange?.(newDelta)\n\t}, [])\n\n\tconst stopTracking = useCallback(() => {\n\t\tchangeCursor(false)\n\t\tsetIsTracking(false)\n\t\tprops?.onEnd?.(delta)\n\t}, [delta])\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst controller = new AbortController(),\n\t\t\tsignal = controller.signal\n\n\t\tif (isTracking) {\n\t\t\tswitch (pointerTypeRef.current) {\n\t\t\t\tcase 'mouse':\n\t\t\t\t\tdocument.body.addEventListener('mousemove', updateDelta, { signal })\n\t\t\t\t\tdocument.body.addEventListener('mouseup', stopTracking, { signal })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'pointer':\n\t\t\t\t\tdocument.body.addEventListener('pointermove', updateDelta, { signal })\n\t\t\t\t\tdocument.body.addEventListener('pointerup', stopTracking, { signal })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'touch':\n\t\t\t\t\tdocument.body.addEventListener('touchmove', updateDelta, { signal })\n\t\t\t\t\tdocument.body.addEventListener('touchend', stopTracking, { signal })\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tcontroller.abort()\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontroller.abort()\n\t\t}\n\t}, [isTracking, updateDelta, stopTracking])\n\n\treturn { delta, stopTracking, trackPointerMovement }\n}\n"],"names":["_jsx","Provider","useStore"],"mappings":";;;AAGM,SAAU,iBAAiB,CAAQ,mBAA0B,EAAA;IAClE,SAAS,YAAY,CAAC,YAAA,GAAsB,mBAAmB,EAAA;QAK9D,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,EACjC,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EACzB,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,EAAc,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAG,CAAC,KAA4C,KAAI;AAC5D,YAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAChC,KAAK,CAAC,OAAO,GAAI,KAAqC,CAAC,KAAK,CAAC,OAAO,CAAC;YACtE;iBAAO;AACN,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;YACtB;AACA,YAAA,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACpD,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,CAAC,QAAoB,KAAI;AAC1C,YAAA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,QAAA,CAAC;QAED,OAAO;YACN,GAAG;YACH,GAAG;YACH,SAAS;SACT;IACF;AAIA,IAAA,MAAM,YAAY,GAAG,aAAa,CAAgC,IAAI,CAAC;IAEvE,SAAS,QAAQ,CAAC,EACjB,YAAY,GAAG,mBAAmB,EAClC,GAAG,KAAK,EACkE,EAAA;AAC1E,QAAA,OAAOA,GAAA,CAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,EAAA,GAAM,KAAK,GAAI;IAC/E;AAEA,IAAA,SAAS,QAAQ,CAChB,QAA0C,EAC1C,YAAoB,EAAA;AAEpB,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE;AACX,YAAA,MAAM,eAAe,GAAG,YAAY,KAAK,SAAS,GAAG,YAAY,GAAG,mBAAmB;AAEvF,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC;AAEvF,YAAA,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;QAChC;AAEA,QAAA,MAAM,KAAK,GAAG,oBAAoB,CACjC,KAAK,CAAC,SAAS,EACf,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAC3B,MAAM,QAAQ,CAAC,YAAY,KAAK,SAAS,GAAG,YAAY,GAAG,mBAAmB,CAAC,CAC/E;AAED,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IAC1B;IAEA,OAAO;QACN,QAAQ;QACR,QAAQ;KACR;AACF;;AC5CA;;;;AAIG;AACG,SAAU,WAAW,CAAC,eAAsB,EAAA;AACjD,IAAA,OAAO,eAAe;AACvB;AAEM,SAAU,aAAa,CAAC,KAAY,EAAA;AACzC,IAAA,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAClE;AAEA,MAAM,YAAEC,UAAQ,YAAEC,UAAQ,EAAE,GAAG,iBAAiB,CAAc,EAAE,CAAC;AAE3D,SAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA4B,EAAA;AACzE,IAAA,OAAOF,GAAA,CAACC,UAAQ,EAAA,EAAA,QAAA,EAAE,QAAQ,GAAY;AACvC;SAEgB,cAAc,GAAA;AAC7B,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAGC,UAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;AAE9D,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAY,KAAI;AAClD,QAAA,cAAc,GAAG,WAAW,IAAG;YAC9B,MAAM,WAAW,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;AAExF,YAAA,OAAO,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,KAAI;QACnD,cAAc,GAAG,WAAW,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC3F,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,OAAuB,KAAI;AAC5E,QAAA,cAAc,GAAG,WAAW,IAAG;AAC9B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAE1D,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAA,4BAAA,CAA8B,CAAC;AAEpF,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;YAElE,MAAM,YAAY,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAW;AAEtD,YAAA,OAAO,CAAC,GAAG,WAAW,EAAE,YAAY,CAAC;AACtC,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAU;AAC3E;;ACpDA,MAAM,YAAED,UAAQ,YAAEC,UAAQ,EAAE,GAAG,iBAAiB,CAAmC,SAAS,CAAC;SAE7E,uBAAuB,CAAC,EACvC,QAAQ,EACR,YAAY,GAIZ,EAAA;IACA,OAAOF,GAAA,CAACC,UAAQ,EAAA,EAAC,YAAY,EAAE,YAAY,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAY;AACnE;SAEgB,kBAAkB,GAAA;IACjC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAGC,UAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,EACrE,GAAG,oBAAoB,CAAC,GAAG,cAAc,EAAE;AAE5C,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAY,KAAI;AAClD,QAAA,kBAAkB,GAAG,IAAI,IAAG;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,IAAI,aAAa,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;AAEnG,YAAA,MAAM,YAAY,GACjB,kBAAkB,IAAI;kBACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,KAAK,MAAM,KAAK,KAAK,kBAAkB,GAAG,KAAK,GAAG,aAAa,CAAC;kBACnG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;YAE9B,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;AAC5C,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,KAAI;AACnD,QAAA,kBAAkB,GAAG,IAAI,IAAG;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,OAAO;AACN,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;aAC/D;AACF,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,OAAuB,KAAI;AAC5E,QAAA,kBAAkB,GAAG,IAAI,IAAG;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,OAAO;AACN,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,OAAO,GAAI,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAY,GAAG,KAAK,CAAC,CAAC;aAC5G;AACF,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,CAAC,aAAmC,KAAW;AACzF,QAAA,IAAI,aAAa,CAAC,IAAI,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC;AAChC,iBAAA,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAK,KAAqB,CAAC,KAAK,KAAK,EAAE;iBAC3E,GAAG,CAAC,KAAK,IAAK,KAAqB,CAAC,KAAK;AACzC,iBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAE1B,YAAA,OAAO,WAAW,CAAC;AAClB,gBAAA,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,aAAa,CAAC,EAAE;gBACpB,IAAI,EAAE,aAAa,CAAC,IAAI;AACxB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,KAAqB,CAAC,QAAQ,CAAC;AAChF,gBAAA,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,KAAqB,CAAC,OAAO,CAAC;AAC9E,aAAA,CAAC;QACH;AAEA,QAAA,OAAO,WAAW,CAAC;AAClB,YAAA,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,MAAM,EAAE,aAAa,CAAC,SAAS;AAC/B,SAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,SAAS,CAAC,MAAK;AACd,QAAA,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,UAAU;YAAE;AAEpD,QAAA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,eAAe,CAAC;AAEhE,QAAA,oBAAoB,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAEpD,QAAA,OAAO,MAAK;AACX,YAAA,oBAAoB,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;AACrD,QAAA,CAAC;AACF,IAAA,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,aAAa,EAAE,oBAAoB,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAEnH,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACtE;;AC7GA,MAAM,cAAc,GAAe,YAAY;AAE/C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAa,cAAc,CAAC;AAEtE,SAAU,kBAAkB,CAAC,EAClC,QAAQ,EACR,aAAa,GAAG,cAAc,GAI9B,EAAA;AACA,IAAA,QACCF,GAAA,CAAC,QAAQ,EAAA,EAAA,QAAA,EACRA,IAAC,QAAQ,EAAA,EAAC,YAAY,EAAE,aAAa,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAY,EAAA,CAClD;AAEb;SAEgB,aAAa,GAAA;IAC5B,OAAO,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;AAChC;;ACmBM,SAAU,kBAAkB,CAAC,KAA+B,EAAA;IACjE,MAAM,cAAc,GAAG,MAAM,CAAgC,SAAS,CAAC,EACtE,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,EAC7C,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACpD,cAAc,GAAG,MAAM,CAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAEhD,IAAA,MAAM,OAAO,GAAG,KAAK,EAAE;AAEvB,IAAA,MAAM,YAAY,GAAG,CAAC,MAAsB,KAAI;AAC/C,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;YACrB,QAAQ,CAAC,aAAa,CAAmB,CAAA,CAAA,EAAI,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE;YACjE;QACD;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,sBAAA,EAAyB,MAAM,kGAAkG;QAE7I,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAE7C,QAAA,KAAK,CAAC,EAAE,GAAG,OAAO;AAClB,QAAA,KAAK,CAAC,SAAS,GAAG,GAAG;AAErB,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC7B,IAAA,CAAC;AAED,IAAA,MAAM,oBAAoB,GAAG,CAC5B,CAAkG,KAC/F;AACH,QAAA,YAAY,CAAC,KAAK,EAAE,YAAY,IAAI,UAAU,CAAC;AAE/C,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;QAElB,QAAQ,IAAI;AACX,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,aAAa;AAClB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,WAAW;AAChB,YAAA,KAAK,UAAU;AACd,gBAAA,MAAM,IAAI,KAAK,CACd,2GAA2G,CAC3G;AACF,YAAA,KAAK,WAAW;AACf,gBAAA,cAAc,CAAC,OAAO,GAAG,OAAO;gBAChC;AACD,YAAA,KAAK,aAAa;AACjB,gBAAA,cAAc,CAAC,OAAO,GAAG,SAAS;gBAClC;AACD,YAAA,KAAK,YAAY;AAChB,gBAAA,cAAc,CAAC,OAAO,GAAG,OAAO;gBAChC;;AAGF,QAAA,IAAI,CAAC,GAAG,CAAC,EACR,CAAC,GAAG,CAAC;AAEN,QAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AACnB,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;AAErB,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE;AAExB,YAAA,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AACtB,YAAA,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;QACvB;aAAO;AACN,YAAA,CAAC,GAAG,CAAC,CAAC,OAAO;AACb,YAAA,CAAC,GAAG,CAAC,CAAC,OAAO;QACd;QAEA,cAAc,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;QACjC,aAAa,CAAC,IAAI,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAyC,KAAI;AAC7E,QAAA,IAAI,OAAO,GAAG,CAAC,EACd,OAAO,GAAG,CAAC;AAEZ,QAAA,IAAI,SAAS,IAAI,CAAC,EAAE;AACnB,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC;AAErB,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE;AAExB,YAAA,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;AAC5B,YAAA,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;QAC7B;aAAO;AACN,YAAA,OAAO,GAAG,CAAC,CAAC,OAAO;AACnB,YAAA,OAAO,GAAG,CAAC,CAAC,OAAO;QACpB;QAEA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,OAAO,EACtC,QAAQ,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE;QAE9C,QAAQ,CAAC,QAAQ,CAAC;AAClB,QAAA,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;QACrC,YAAY,CAAC,KAAK,CAAC;QACnB,aAAa,CAAC,KAAK,CAAC;AACpB,QAAA,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC;AACtB,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAEX,SAAS,CAAC,MAAK;QACd,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;QAEnC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,EACvC,MAAM,GAAG,UAAU,CAAC,MAAM;QAE3B,IAAI,UAAU,EAAE;AACf,YAAA,QAAQ,cAAc,CAAC,OAAO;AAC7B,gBAAA,KAAK,OAAO;AACX,oBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AACpE,oBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;oBACnE;AACD,gBAAA,KAAK,SAAS;AACb,oBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AACtE,oBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;oBACrE;AACD,gBAAA,KAAK,OAAO;AACX,oBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC;AACpE,oBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC;oBACpE;;QAEH;aAAO;YACN,UAAU,CAAC,KAAK,EAAE;QACnB;AAEA,QAAA,OAAO,MAAK;YACX,UAAU,CAAC,KAAK,EAAE;AACnB,QAAA,CAAC;IACF,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAE3C,IAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE;AACrD;;;;"}
package/dist/hooks.js CHANGED
@@ -165,6 +165,108 @@ function useFormStatus() {
165
165
  return useStore(store => store);
166
166
  }
167
167
 
168
+ function usePointerMovement(props) {
169
+ const pointerTypeRef = react.useRef('pointer'), [isTracking, setIsTracking] = react.useState(false), [delta, setDelta] = react.useState({ x: 0, y: 0 }), startCoordsRef = react.useRef({ x: 0, y: 0 });
170
+ const styleID = react.useId();
171
+ const changeCursor = (cursor) => {
172
+ if (cursor === false) {
173
+ document.querySelector(`#${styleID}`)?.remove();
174
+ return;
175
+ }
176
+ const css = `*, *:active { cursor: ${cursor}; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; }`;
177
+ const style = document.createElement('style');
178
+ style.id = styleID;
179
+ style.innerHTML = css;
180
+ document.body.prepend(style);
181
+ };
182
+ const trackPointerMovement = (e) => {
183
+ changeCursor(props?.activeCursor || 'grabbing');
184
+ const { type } = e;
185
+ switch (type) {
186
+ case 'mousemove':
187
+ case 'mouseup':
188
+ case 'pointermove':
189
+ case 'pointerup':
190
+ case 'touchmove':
191
+ case 'touchend':
192
+ throw new Error('To initiate the tracking of pointer movement, you must use a `mousedown`, `pointerdown`, or `touchstart`.');
193
+ case 'mousedown':
194
+ pointerTypeRef.current = 'mouse';
195
+ break;
196
+ case 'pointerdown':
197
+ pointerTypeRef.current = 'pointer';
198
+ break;
199
+ case 'touchstart':
200
+ pointerTypeRef.current = 'touch';
201
+ break;
202
+ }
203
+ let x = 0, y = 0;
204
+ if ('touches' in e) {
205
+ const { touches } = e;
206
+ if (touches.length > 1)
207
+ return;
208
+ x = touches[0].clientX;
209
+ y = touches[0].clientY;
210
+ }
211
+ else {
212
+ x = e.clientX;
213
+ y = e.clientY;
214
+ }
215
+ startCoordsRef.current = { x, y };
216
+ setIsTracking(true);
217
+ };
218
+ const updateDelta = react.useCallback((e) => {
219
+ let clientX = 0, clientY = 0;
220
+ if ('touches' in e) {
221
+ const { touches } = e;
222
+ if (touches.length > 1)
223
+ return;
224
+ clientX = touches[0].clientX;
225
+ clientY = touches[0].clientY;
226
+ }
227
+ else {
228
+ clientX = e.clientX;
229
+ clientY = e.clientY;
230
+ }
231
+ const { x, y } = startCoordsRef.current, newDelta = { x: clientX - x, y: clientY - y };
232
+ setDelta(newDelta);
233
+ props?.onChange?.(newDelta);
234
+ }, []);
235
+ const stopTracking = react.useCallback(() => {
236
+ changeCursor(false);
237
+ setIsTracking(false);
238
+ props?.onEnd?.(delta);
239
+ }, [delta]);
240
+ react.useEffect(() => {
241
+ if (typeof window === 'undefined')
242
+ return;
243
+ const controller = new AbortController(), signal = controller.signal;
244
+ if (isTracking) {
245
+ switch (pointerTypeRef.current) {
246
+ case 'mouse':
247
+ document.body.addEventListener('mousemove', updateDelta, { signal });
248
+ document.body.addEventListener('mouseup', stopTracking, { signal });
249
+ break;
250
+ case 'pointer':
251
+ document.body.addEventListener('pointermove', updateDelta, { signal });
252
+ document.body.addEventListener('pointerup', stopTracking, { signal });
253
+ break;
254
+ case 'touch':
255
+ document.body.addEventListener('touchmove', updateDelta, { signal });
256
+ document.body.addEventListener('touchend', stopTracking, { signal });
257
+ break;
258
+ }
259
+ }
260
+ else {
261
+ controller.abort();
262
+ }
263
+ return () => {
264
+ controller.abort();
265
+ };
266
+ }, [isTracking, updateDelta, stopTracking]);
267
+ return { delta, stopTracking, trackPointerMovement };
268
+ }
269
+
168
270
  exports.FieldsetContextProvider = FieldsetContextProvider;
169
271
  exports.FormContextProvider = FormContextProvider;
170
272
  exports.FormStatusProvider = FormStatusProvider;
@@ -174,4 +276,5 @@ exports.isStringField = isStringField;
174
276
  exports.useFieldsetContext = useFieldsetContext;
175
277
  exports.useFormContext = useFormContext;
176
278
  exports.useFormStatus = useFormStatus;
279
+ exports.usePointerMovement = usePointerMovement;
177
280
  //# sourceMappingURL=hooks.js.map
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sources":["../src/hooks/create-fast-context.tsx","../src/hooks/use-form-context.tsx","../src/hooks/use-fieldset-context.tsx","../src/hooks/use-form-status.tsx"],"sourcesContent":["// * React\nimport { HTMLAttributes, useRef, createContext, useContext, useSyncExternalStore } from 'react'\n\nexport default function createFastContext<Store>(defaultInitialState: Store) {\n\tfunction useStoreData(initialState: Store = defaultInitialState): {\n\t\tget: () => Store\n\t\tset: (value: Store | ((prevState: Store) => Store)) => void\n\t\tsubscribe: (callback: () => void) => () => void\n\t} {\n\t\tconst store = useRef(initialState),\n\t\t\tget = () => store.current,\n\t\t\tsubscribers = useRef(new Set<() => void>())\n\n\t\tconst set = (value: Store | ((prevState: Store) => Store)) => {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\tstore.current = (value as (prevState: Store) => Store)(store.current)\n\t\t\t} else {\n\t\t\t\tstore.current = value\n\t\t\t}\n\t\t\tsubscribers.current.forEach(callback => callback())\n\t\t}\n\n\t\tconst subscribe = (callback: () => void) => {\n\t\t\tsubscribers.current.add(callback)\n\t\t\treturn () => subscribers.current.delete(callback)\n\t\t}\n\n\t\treturn {\n\t\t\tget,\n\t\t\tset,\n\t\t\tsubscribe,\n\t\t}\n\t}\n\n\ttype UseStoreDataReturnType = ReturnType<typeof useStoreData>\n\n\tconst StoreContext = createContext<UseStoreDataReturnType | null>(null)\n\n\tfunction Provider({\n\t\tinitialValue = defaultInitialState,\n\t\t...props\n\t}: Pick<HTMLAttributes<HTMLElement>, 'children'> & { initialValue?: Store }) {\n\t\treturn <StoreContext.Provider value={useStoreData(initialValue)} {...props} />\n\t}\n\n\tfunction useStore<SelectorOutput>(\n\t\tselector: (store: Store) => SelectorOutput,\n\t\tinitialValue?: Store,\n\t): [SelectorOutput | undefined, ((value: Store | ((prevState: Store) => Store)) => void) | undefined] {\n\t\tconst store = useContext(StoreContext)\n\n\t\tif (!store) {\n\t\t\tconst localStoreValue = initialValue !== undefined ? initialValue : defaultInitialState\n\n\t\t\tconst selectedValue = selector(localStoreValue)\n\t\t\tconst noOpSet = () => console.warn('Attempting to set store value outside of Provider')\n\n\t\t\treturn [selectedValue, noOpSet]\n\t\t}\n\n\t\tconst state = useSyncExternalStore(\n\t\t\tstore.subscribe,\n\t\t\t() => selector(store.get()),\n\t\t\t() => selector(initialValue !== undefined ? initialValue : defaultInitialState),\n\t\t)\n\n\t\treturn [state, store.set]\n\t}\n\n\treturn {\n\t\tProvider,\n\t\tuseStore,\n\t}\n}\n","// * Types\nexport type FieldType = 'array' | 'email' | 'file' | 'number' | 'object' | 'string' | 'tel' | 'textarea' | 'url'\n\nexport type StringField = {\n\ttype: 'email' | 'file' | 'number' | 'string' | 'tel' | 'textarea' | 'url'\n\tvalue: string\n\trequired?: boolean\n\tinvalid?: boolean\n}\n\nexport type ObjectField = { type: 'object'; fields: Field[] }\n\nexport type ArrayField = { type: 'array'; of: ArrayObjectOrNormalField }\n\ntype ArrayObjectOrNormalField = StringField | ArrayField | ObjectField\n\nexport type Field = ArrayObjectOrNormalField & {\n\tid: string\n\tname: string\n}\n\nexport type FormContext = Field[]\n\n// * React\nimport { ReactNode, useCallback } from 'react'\n\n// * Hooks\nimport createFastContext from './create-fast-context'\n\n/**\n * # Define Field\n *\n * This is a helper function to define a field in a form context with type safety.\n */\nexport function defineField(fieldDefinition: Field) {\n\treturn fieldDefinition\n}\n\nexport function isStringField(field: Field) {\n\treturn Boolean(field.type !== 'object' && field.type !== 'array')\n}\n\nconst { Provider, useStore } = createFastContext<FormContext>([])\n\nexport function FormContextProvider({ children }: { children?: ReactNode }) {\n\treturn <Provider>{children}</Provider>\n}\n\nexport function useFormContext() {\n\tconst [formContext, setFormContext] = useStore(store => store)\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst otherFields = (prevContext || []).filter(otherField => otherField.id !== field.id)\n\n\t\t\treturn [...otherFields, field]\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFormContext?.(prevContext => (prevContext || []).filter(field => field.id !== fieldID))\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst field = prevContext.find(({ id }) => id === fieldID)\n\n\t\t\tif (!field) throw new Error(`Field with id \"${fieldID}\" not found in form context.`)\n\n\t\t\tconst otherFields = prevContext.filter(({ id }) => id !== fieldID)\n\n\t\t\tconst updatedField = { ...field, ...updates } as Field\n\n\t\t\treturn [...otherFields, updatedField]\n\t\t})\n\t}, [])\n\n\treturn [formContext, { registerField, removeField, updateField }] as const\n}\n","// * Types\nimport { defineField, Field, isStringField, StringField, useFormContext } from './use-form-context'\n\nexport type FieldsetContextValue = {\n\tfieldList: Field[]\n\tdecorative: boolean\n\tid: string\n\tjoin?: string\n\tname: string\n}\n\nexport type FieldsetContext = [\n\tFieldsetContextValue | undefined,\n\t{\n\t\tregisterField: (field: Field) => void\n\t\tremoveField: (fieldID: string) => void\n\t\tupdateField: (fieldID: string, updates: Partial<Field>) => void\n\t},\n]\n\n// * React\nimport { ReactNode, useCallback, useEffect } from 'react'\n\n// * Hooks\nimport createFastContext from './create-fast-context'\n\nconst { Provider, useStore } = createFastContext<FieldsetContextValue | undefined>(undefined)\n\nexport function FieldsetContextProvider({\n\tchildren,\n\tinitialValue,\n}: {\n\tchildren?: ReactNode\n\tinitialValue?: FieldsetContextValue\n}) {\n\treturn <Provider initialValue={initialValue}>{children}</Provider>\n}\n\nexport function useFieldsetContext(): FieldsetContext {\n\tconst [fieldsetContext, setFieldsetContext] = useStore(store => store),\n\t\t[, formContextFunctions] = useFormContext()\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\tconst existingFieldIndex = prev.fieldList.findIndex(existingField => existingField.id === field.id)\n\n\t\t\tconst newFieldList =\n\t\t\t\texistingFieldIndex >= 0\n\t\t\t\t\t? prev.fieldList.map((existingField, index) => (index === existingFieldIndex ? field : existingField))\n\t\t\t\t\t: [...prev.fieldList, field]\n\n\t\t\treturn { ...prev, fieldList: newFieldList }\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.filter(field => field.id !== fieldID),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.map(field => (field.id === fieldID ? ({ ...field, ...updates } as Field) : field)),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst createFormContextEntry = useCallback((fieldsetEntry: FieldsetContextValue): Field => {\n\t\tif (fieldsetEntry.join) {\n\t\t\tconst joinedValue = fieldsetEntry.fieldList\n\t\t\t\t.filter(field => isStringField(field) && (field as StringField).value !== '')\n\t\t\t\t.map(field => (field as StringField).value)\n\t\t\t\t.join(fieldsetEntry.join)\n\n\t\t\treturn defineField({\n\t\t\t\ttype: 'string',\n\t\t\t\tid: fieldsetEntry.id,\n\t\t\t\tname: fieldsetEntry.name,\n\t\t\t\tvalue: joinedValue,\n\t\t\t\trequired: fieldsetEntry.fieldList.some(field => (field as StringField).required),\n\t\t\t\tinvalid: fieldsetEntry.fieldList.some(field => (field as StringField).invalid),\n\t\t\t})\n\t\t}\n\n\t\treturn defineField({\n\t\t\ttype: 'object',\n\t\t\tid: fieldsetEntry.id,\n\t\t\tname: fieldsetEntry.name,\n\t\t\tfields: fieldsetEntry.fieldList,\n\t\t})\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (!fieldsetContext || fieldsetContext.decorative) return\n\n\t\tconst formContextEntry = createFormContextEntry(fieldsetContext)\n\n\t\tformContextFunctions.registerField(formContextEntry)\n\n\t\treturn () => {\n\t\t\tformContextFunctions.removeField(fieldsetContext.id)\n\t\t}\n\t}, [fieldsetContext, formContextFunctions.registerField, formContextFunctions.removeField, createFormContextEntry])\n\n\treturn [fieldsetContext, { registerField, removeField, updateField }]\n}\n","// * Types\nimport { ReactNode, Suspense } from 'react'\n\nexport type FormStatus = 'error' | 'incomplete' | 'loading' | 'ready' | 'success' | 'readonly'\n\n// * Hooks\nimport createFastContext from './create-fast-context'\n\nconst DEFAULT_STATUS: FormStatus = 'incomplete'\n\nconst { Provider, useStore } = createFastContext<FormStatus>(DEFAULT_STATUS)\n\nexport function FormStatusProvider({\n\tchildren,\n\tinitialStatus = DEFAULT_STATUS,\n}: {\n\tchildren?: ReactNode\n\tinitialStatus?: FormStatus\n}) {\n\treturn (\n\t\t<Suspense>\n\t\t\t<Provider initialValue={initialStatus}>{children}</Provider>\n\t\t</Suspense>\n\t)\n}\n\nexport function useFormStatus() {\n\treturn useStore(store => store)\n}\n"],"names":["useRef","createContext","_jsx","useContext","useSyncExternalStore","Provider","useStore","useCallback","useEffect","Suspense"],"mappings":";;;;;AAGc,SAAU,iBAAiB,CAAQ,mBAA0B,EAAA;IAC1E,SAAS,YAAY,CAAC,YAAA,GAAsB,mBAAmB,EAAA;QAK9D,MAAM,KAAK,GAAGA,YAAM,CAAC,YAAY,CAAC,EACjC,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EACzB,WAAW,GAAGA,YAAM,CAAC,IAAI,GAAG,EAAc,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAG,CAAC,KAA4C,KAAI;AAC5D,YAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;gBAChC,KAAK,CAAC,OAAO,GAAI,KAAqC,CAAC,KAAK,CAAC,OAAO,CAAC;YACtE;iBAAO;AACN,gBAAA,KAAK,CAAC,OAAO,GAAG,KAAK;YACtB;AACA,YAAA,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACpD,QAAA,CAAC;AAED,QAAA,MAAM,SAAS,GAAG,CAAC,QAAoB,KAAI;AAC1C,YAAA,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACjC,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,QAAA,CAAC;QAED,OAAO;YACN,GAAG;YACH,GAAG;YACH,SAAS;SACT;IACF;AAIA,IAAA,MAAM,YAAY,GAAGC,mBAAa,CAAgC,IAAI,CAAC;IAEvE,SAAS,QAAQ,CAAC,EACjB,YAAY,GAAG,mBAAmB,EAClC,GAAG,KAAK,EACkE,EAAA;AAC1E,QAAA,OAAOC,cAAA,CAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,EAAA,GAAM,KAAK,GAAI;IAC/E;AAEA,IAAA,SAAS,QAAQ,CAChB,QAA0C,EAC1C,YAAoB,EAAA;AAEpB,QAAA,MAAM,KAAK,GAAGC,gBAAU,CAAC,YAAY,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE;AACX,YAAA,MAAM,eAAe,GAAG,YAAY,KAAK,SAAS,GAAG,YAAY,GAAG,mBAAmB;AAEvF,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC;AAEvF,YAAA,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC;QAChC;AAEA,QAAA,MAAM,KAAK,GAAGC,0BAAoB,CACjC,KAAK,CAAC,SAAS,EACf,MAAM,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAC3B,MAAM,QAAQ,CAAC,YAAY,KAAK,SAAS,GAAG,YAAY,GAAG,mBAAmB,CAAC,CAC/E;AAED,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IAC1B;IAEA,OAAO;QACN,QAAQ;QACR,QAAQ;KACR;AACF;;AC5CA;;;;AAIG;AACG,SAAU,WAAW,CAAC,eAAsB,EAAA;AACjD,IAAA,OAAO,eAAe;AACvB;AAEM,SAAU,aAAa,CAAC,KAAY,EAAA;AACzC,IAAA,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAClE;AAEA,MAAM,YAAEC,UAAQ,YAAEC,UAAQ,EAAE,GAAG,iBAAiB,CAAc,EAAE,CAAC;AAE3D,SAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA4B,EAAA;AACzE,IAAA,OAAOJ,cAAA,CAACG,UAAQ,EAAA,EAAA,QAAA,EAAE,QAAQ,GAAY;AACvC;SAEgB,cAAc,GAAA;AAC7B,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAGC,UAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;AAE9D,IAAA,MAAM,aAAa,GAAGC,iBAAW,CAAC,CAAC,KAAY,KAAI;AAClD,QAAA,cAAc,GAAG,WAAW,IAAG;YAC9B,MAAM,WAAW,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;AAExF,YAAA,OAAO,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC;AAC/B,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,WAAW,GAAGA,iBAAW,CAAC,CAAC,OAAe,KAAI;QACnD,cAAc,GAAG,WAAW,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC3F,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,WAAW,GAAGA,iBAAW,CAAC,CAAC,OAAe,EAAE,OAAuB,KAAI;AAC5E,QAAA,cAAc,GAAG,WAAW,IAAG;AAC9B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAE1D,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,CAAA,4BAAA,CAA8B,CAAC;AAEpF,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;YAElE,MAAM,YAAY,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAW;AAEtD,YAAA,OAAO,CAAC,GAAG,WAAW,EAAE,YAAY,CAAC;AACtC,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAU;AAC3E;;ACpDA,MAAM,YAAEF,UAAQ,YAAEC,UAAQ,EAAE,GAAG,iBAAiB,CAAmC,SAAS,CAAC;SAE7E,uBAAuB,CAAC,EACvC,QAAQ,EACR,YAAY,GAIZ,EAAA;IACA,OAAOJ,cAAA,CAACG,UAAQ,EAAA,EAAC,YAAY,EAAE,YAAY,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAY;AACnE;SAEgB,kBAAkB,GAAA;IACjC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAGC,UAAQ,CAAC,KAAK,IAAI,KAAK,CAAC,EACrE,GAAG,oBAAoB,CAAC,GAAG,cAAc,EAAE;AAE5C,IAAA,MAAM,aAAa,GAAGC,iBAAW,CAAC,CAAC,KAAY,KAAI;AAClD,QAAA,kBAAkB,GAAG,IAAI,IAAG;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,IAAI,aAAa,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;AAEnG,YAAA,MAAM,YAAY,GACjB,kBAAkB,IAAI;kBACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,KAAK,MAAM,KAAK,KAAK,kBAAkB,GAAG,KAAK,GAAG,aAAa,CAAC;kBACnG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;YAE9B,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE;AAC5C,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,WAAW,GAAGA,iBAAW,CAAC,CAAC,OAAe,KAAI;AACnD,QAAA,kBAAkB,GAAG,IAAI,IAAG;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,OAAO;AACN,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC;aAC/D;AACF,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,MAAM,WAAW,GAAGA,iBAAW,CAAC,CAAC,OAAe,EAAE,OAAuB,KAAI;AAC5E,QAAA,kBAAkB,GAAG,IAAI,IAAG;AAC3B,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,IAAI;YAEtB,OAAO;AACN,gBAAA,GAAG,IAAI;AACP,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,OAAO,GAAI,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAY,GAAG,KAAK,CAAC,CAAC;aAC5G;AACF,QAAA,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,MAAM,sBAAsB,GAAGA,iBAAW,CAAC,CAAC,aAAmC,KAAW;AACzF,QAAA,IAAI,aAAa,CAAC,IAAI,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC;AAChC,iBAAA,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,IAAK,KAAqB,CAAC,KAAK,KAAK,EAAE;iBAC3E,GAAG,CAAC,KAAK,IAAK,KAAqB,CAAC,KAAK;AACzC,iBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAE1B,YAAA,OAAO,WAAW,CAAC;AAClB,gBAAA,IAAI,EAAE,QAAQ;gBACd,EAAE,EAAE,aAAa,CAAC,EAAE;gBACpB,IAAI,EAAE,aAAa,CAAC,IAAI;AACxB,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,KAAqB,CAAC,QAAQ,CAAC;AAChF,gBAAA,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAK,KAAqB,CAAC,OAAO,CAAC;AAC9E,aAAA,CAAC;QACH;AAEA,QAAA,OAAO,WAAW,CAAC;AAClB,YAAA,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,MAAM,EAAE,aAAa,CAAC,SAAS;AAC/B,SAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAENC,eAAS,CAAC,MAAK;AACd,QAAA,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,UAAU;YAAE;AAEpD,QAAA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,eAAe,CAAC;AAEhE,QAAA,oBAAoB,CAAC,aAAa,CAAC,gBAAgB,CAAC;AAEpD,QAAA,OAAO,MAAK;AACX,YAAA,oBAAoB,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;AACrD,QAAA,CAAC;AACF,IAAA,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,aAAa,EAAE,oBAAoB,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAEnH,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACtE;;AC7GA,MAAM,cAAc,GAAe,YAAY;AAE/C,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAa,cAAc,CAAC;AAEtE,SAAU,kBAAkB,CAAC,EAClC,QAAQ,EACR,aAAa,GAAG,cAAc,GAI9B,EAAA;AACA,IAAA,QACCN,cAAA,CAACO,cAAQ,EAAA,EAAA,QAAA,EACRP,eAAC,QAAQ,EAAA,EAAC,YAAY,EAAE,aAAa,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAY,EAAA,CAClD;AAEb;SAEgB,aAAa,GAAA;IAC5B,OAAO,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;AAChC;;;;;;;;;;;;"}
1
+ {"version":3,"file":"hooks.js","sources":["../src/hooks/create-fast-context.tsx","../src/hooks/use-form-context.tsx","../src/hooks/use-fieldset-context.tsx","../src/hooks/use-form-status.tsx","../src/hooks/use-pointer-movement.ts"],"sourcesContent":["// * React\nimport { HTMLAttributes, useRef, createContext, useContext, useSyncExternalStore } from 'react'\n\nexport function createFastContext<Store>(defaultInitialState: Store) {\n\tfunction useStoreData(initialState: Store = defaultInitialState): {\n\t\tget: () => Store\n\t\tset: (value: Store | ((prevState: Store) => Store)) => void\n\t\tsubscribe: (callback: () => void) => () => void\n\t} {\n\t\tconst store = useRef(initialState),\n\t\t\tget = () => store.current,\n\t\t\tsubscribers = useRef(new Set<() => void>())\n\n\t\tconst set = (value: Store | ((prevState: Store) => Store)) => {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\tstore.current = (value as (prevState: Store) => Store)(store.current)\n\t\t\t} else {\n\t\t\t\tstore.current = value\n\t\t\t}\n\t\t\tsubscribers.current.forEach(callback => callback())\n\t\t}\n\n\t\tconst subscribe = (callback: () => void) => {\n\t\t\tsubscribers.current.add(callback)\n\t\t\treturn () => subscribers.current.delete(callback)\n\t\t}\n\n\t\treturn {\n\t\t\tget,\n\t\t\tset,\n\t\t\tsubscribe,\n\t\t}\n\t}\n\n\ttype UseStoreDataReturnType = ReturnType<typeof useStoreData>\n\n\tconst StoreContext = createContext<UseStoreDataReturnType | null>(null)\n\n\tfunction Provider({\n\t\tinitialValue = defaultInitialState,\n\t\t...props\n\t}: Pick<HTMLAttributes<HTMLElement>, 'children'> & { initialValue?: Store }) {\n\t\treturn <StoreContext.Provider value={useStoreData(initialValue)} {...props} />\n\t}\n\n\tfunction useStore<SelectorOutput>(\n\t\tselector: (store: Store) => SelectorOutput,\n\t\tinitialValue?: Store,\n\t): [SelectorOutput | undefined, ((value: Store | ((prevState: Store) => Store)) => void) | undefined] {\n\t\tconst store = useContext(StoreContext)\n\n\t\tif (!store) {\n\t\t\tconst localStoreValue = initialValue !== undefined ? initialValue : defaultInitialState\n\n\t\t\tconst selectedValue = selector(localStoreValue)\n\t\t\tconst noOpSet = () => console.warn('Attempting to set store value outside of Provider')\n\n\t\t\treturn [selectedValue, noOpSet]\n\t\t}\n\n\t\tconst state = useSyncExternalStore(\n\t\t\tstore.subscribe,\n\t\t\t() => selector(store.get()),\n\t\t\t() => selector(initialValue !== undefined ? initialValue : defaultInitialState),\n\t\t)\n\n\t\treturn [state, store.set]\n\t}\n\n\treturn {\n\t\tProvider,\n\t\tuseStore,\n\t}\n}\n","// * Types\nexport type FieldType = 'array' | 'email' | 'file' | 'number' | 'object' | 'string' | 'tel' | 'textarea' | 'url'\n\nexport type StringField = {\n\ttype: 'email' | 'file' | 'number' | 'string' | 'tel' | 'textarea' | 'url'\n\tvalue: string\n\trequired?: boolean\n\tinvalid?: boolean\n}\n\nexport type ObjectField = { type: 'object'; fields: Field[] }\n\nexport type ArrayField = { type: 'array'; of: ArrayObjectOrNormalField }\n\ntype ArrayObjectOrNormalField = StringField | ArrayField | ObjectField\n\nexport type Field = ArrayObjectOrNormalField & {\n\tid: string\n\tname: string\n}\n\nexport type FormContext = Field[]\n\n// * React\nimport { ReactNode, useCallback } from 'react'\n\n// * Hooks\nimport { createFastContext } from './create-fast-context'\n\n/**\n * # Define Field\n *\n * This is a helper function to define a field in a form context with type safety.\n */\nexport function defineField(fieldDefinition: Field) {\n\treturn fieldDefinition\n}\n\nexport function isStringField(field: Field) {\n\treturn Boolean(field.type !== 'object' && field.type !== 'array')\n}\n\nconst { Provider, useStore } = createFastContext<FormContext>([])\n\nexport function FormContextProvider({ children }: { children?: ReactNode }) {\n\treturn <Provider>{children}</Provider>\n}\n\nexport function useFormContext() {\n\tconst [formContext, setFormContext] = useStore(store => store)\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst otherFields = (prevContext || []).filter(otherField => otherField.id !== field.id)\n\n\t\t\treturn [...otherFields, field]\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFormContext?.(prevContext => (prevContext || []).filter(field => field.id !== fieldID))\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFormContext?.(prevContext => {\n\t\t\tconst field = prevContext.find(({ id }) => id === fieldID)\n\n\t\t\tif (!field) throw new Error(`Field with id \"${fieldID}\" not found in form context.`)\n\n\t\t\tconst otherFields = prevContext.filter(({ id }) => id !== fieldID)\n\n\t\t\tconst updatedField = { ...field, ...updates } as Field\n\n\t\t\treturn [...otherFields, updatedField]\n\t\t})\n\t}, [])\n\n\treturn [formContext, { registerField, removeField, updateField }] as const\n}\n","// * Types\nimport { defineField, Field, isStringField, StringField, useFormContext } from './use-form-context'\n\nexport type FieldsetContextValue = {\n\tfieldList: Field[]\n\tdecorative: boolean\n\tid: string\n\tjoin?: string\n\tname: string\n}\n\nexport type FieldsetContext = [\n\tFieldsetContextValue | undefined,\n\t{\n\t\tregisterField: (field: Field) => void\n\t\tremoveField: (fieldID: string) => void\n\t\tupdateField: (fieldID: string, updates: Partial<Field>) => void\n\t},\n]\n\n// * React\nimport { ReactNode, useCallback, useEffect } from 'react'\n\n// * Hooks\nimport { createFastContext } from './create-fast-context'\n\nconst { Provider, useStore } = createFastContext<FieldsetContextValue | undefined>(undefined)\n\nexport function FieldsetContextProvider({\n\tchildren,\n\tinitialValue,\n}: {\n\tchildren?: ReactNode\n\tinitialValue?: FieldsetContextValue\n}) {\n\treturn <Provider initialValue={initialValue}>{children}</Provider>\n}\n\nexport function useFieldsetContext(): FieldsetContext {\n\tconst [fieldsetContext, setFieldsetContext] = useStore(store => store),\n\t\t[, formContextFunctions] = useFormContext()\n\n\tconst registerField = useCallback((field: Field) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\tconst existingFieldIndex = prev.fieldList.findIndex(existingField => existingField.id === field.id)\n\n\t\t\tconst newFieldList =\n\t\t\t\texistingFieldIndex >= 0\n\t\t\t\t\t? prev.fieldList.map((existingField, index) => (index === existingFieldIndex ? field : existingField))\n\t\t\t\t\t: [...prev.fieldList, field]\n\n\t\t\treturn { ...prev, fieldList: newFieldList }\n\t\t})\n\t}, [])\n\n\tconst removeField = useCallback((fieldID: string) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.filter(field => field.id !== fieldID),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst updateField = useCallback((fieldID: string, updates: Partial<Field>) => {\n\t\tsetFieldsetContext?.(prev => {\n\t\t\tif (!prev) return prev\n\n\t\t\treturn {\n\t\t\t\t...prev,\n\t\t\t\tfieldList: prev.fieldList.map(field => (field.id === fieldID ? ({ ...field, ...updates } as Field) : field)),\n\t\t\t}\n\t\t})\n\t}, [])\n\n\tconst createFormContextEntry = useCallback((fieldsetEntry: FieldsetContextValue): Field => {\n\t\tif (fieldsetEntry.join) {\n\t\t\tconst joinedValue = fieldsetEntry.fieldList\n\t\t\t\t.filter(field => isStringField(field) && (field as StringField).value !== '')\n\t\t\t\t.map(field => (field as StringField).value)\n\t\t\t\t.join(fieldsetEntry.join)\n\n\t\t\treturn defineField({\n\t\t\t\ttype: 'string',\n\t\t\t\tid: fieldsetEntry.id,\n\t\t\t\tname: fieldsetEntry.name,\n\t\t\t\tvalue: joinedValue,\n\t\t\t\trequired: fieldsetEntry.fieldList.some(field => (field as StringField).required),\n\t\t\t\tinvalid: fieldsetEntry.fieldList.some(field => (field as StringField).invalid),\n\t\t\t})\n\t\t}\n\n\t\treturn defineField({\n\t\t\ttype: 'object',\n\t\t\tid: fieldsetEntry.id,\n\t\t\tname: fieldsetEntry.name,\n\t\t\tfields: fieldsetEntry.fieldList,\n\t\t})\n\t}, [])\n\n\tuseEffect(() => {\n\t\tif (!fieldsetContext || fieldsetContext.decorative) return\n\n\t\tconst formContextEntry = createFormContextEntry(fieldsetContext)\n\n\t\tformContextFunctions.registerField(formContextEntry)\n\n\t\treturn () => {\n\t\t\tformContextFunctions.removeField(fieldsetContext.id)\n\t\t}\n\t}, [fieldsetContext, formContextFunctions.registerField, formContextFunctions.removeField, createFormContextEntry])\n\n\treturn [fieldsetContext, { registerField, removeField, updateField }]\n}\n","// * Types\nimport { ReactNode, Suspense } from 'react'\n\nexport type FormStatus = 'error' | 'incomplete' | 'loading' | 'ready' | 'success' | 'readonly'\n\n// * Hooks\nimport { createFastContext } from './create-fast-context'\n\nconst DEFAULT_STATUS: FormStatus = 'incomplete'\n\nconst { Provider, useStore } = createFastContext<FormStatus>(DEFAULT_STATUS)\n\nexport function FormStatusProvider({\n\tchildren,\n\tinitialStatus = DEFAULT_STATUS,\n}: {\n\tchildren?: ReactNode\n\tinitialStatus?: FormStatus\n}) {\n\treturn (\n\t\t<Suspense>\n\t\t\t<Provider initialValue={initialStatus}>{children}</Provider>\n\t\t</Suspense>\n\t)\n}\n\nexport function useFormStatus() {\n\treturn useStore(store => store)\n}\n","import React, { useCallback, useEffect, useId, useRef, useState } from 'react'\n\nexport type Coords = { x: number; y: number }\n\nexport type Cursor =\n\t| 'alias'\n\t| 'all-scroll'\n\t| 'auto'\n\t| 'cell'\n\t| 'col-resize'\n\t| 'context-menu'\n\t| 'copy'\n\t| 'crosshair'\n\t| 'default'\n\t| 'e-resize'\n\t| 'ew-resize'\n\t| 'grab'\n\t| 'grabbing'\n\t| 'help'\n\t| 'move'\n\t| 'no-drop'\n\t| 'not-allowed'\n\t| 'n-resize'\n\t| 'ne-resize'\n\t| 'nw-resize'\n\t| 'ns-resize'\n\t| 'nesw-resize'\n\t| 'nwse-resize'\n\t| 'pointer'\n\t| 'progress'\n\t| 'row-resize'\n\t| 's-resize'\n\t| 'se-resize'\n\t| 'sw-resize'\n\t| 'text'\n\t| 'vertical-text'\n\t| 'w-resize'\n\t| 'wait'\n\t| 'zoom-in'\n\t| 'zoom-out'\n\nexport type UsePointerMovementProps = {\n\tactiveCursor?: Cursor\n\tonChange?: (delta: Coords) => void\n\tonEnd?: (delta: Coords) => void\n}\n\nexport function usePointerMovement(props?: UsePointerMovementProps) {\n\tconst pointerTypeRef = useRef<'mouse' | 'pointer' | 'touch'>('pointer'),\n\t\t[isTracking, setIsTracking] = useState(false),\n\t\t[delta, setDelta] = useState<Coords>({ x: 0, y: 0 }),\n\t\tstartCoordsRef = useRef<Coords>({ x: 0, y: 0 })\n\n\tconst styleID = useId()\n\n\tconst changeCursor = (cursor: Cursor | false) => {\n\t\tif (cursor === false) {\n\t\t\tdocument.querySelector<HTMLStyleElement>(`#${styleID}`)?.remove()\n\t\t\treturn\n\t\t}\n\n\t\tconst css = `*, *:active { cursor: ${cursor}; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; }`\n\n\t\tconst style = document.createElement('style')\n\n\t\tstyle.id = styleID\n\t\tstyle.innerHTML = css\n\n\t\tdocument.body.prepend(style)\n\t}\n\n\tconst trackPointerMovement = (\n\t\te: React.MouseEvent<HTMLElement> | React.PointerEvent<HTMLElement> | React.TouchEvent<HTMLElement>,\n\t) => {\n\t\tchangeCursor(props?.activeCursor || 'grabbing')\n\n\t\tconst { type } = e\n\n\t\tswitch (type) {\n\t\t\tcase 'mousemove':\n\t\t\tcase 'mouseup':\n\t\t\tcase 'pointermove':\n\t\t\tcase 'pointerup':\n\t\t\tcase 'touchmove':\n\t\t\tcase 'touchend':\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'To initiate the tracking of pointer movement, you must use a `mousedown`, `pointerdown`, or `touchstart`.',\n\t\t\t\t)\n\t\t\tcase 'mousedown':\n\t\t\t\tpointerTypeRef.current = 'mouse'\n\t\t\t\tbreak\n\t\t\tcase 'pointerdown':\n\t\t\t\tpointerTypeRef.current = 'pointer'\n\t\t\t\tbreak\n\t\t\tcase 'touchstart':\n\t\t\t\tpointerTypeRef.current = 'touch'\n\t\t\t\tbreak\n\t\t}\n\n\t\tlet x = 0,\n\t\t\ty = 0\n\n\t\tif ('touches' in e) {\n\t\t\tconst { touches } = e\n\n\t\t\tif (touches.length > 1) return\n\n\t\t\tx = touches[0].clientX\n\t\t\ty = touches[0].clientY\n\t\t} else {\n\t\t\tx = e.clientX\n\t\t\ty = e.clientY\n\t\t}\n\n\t\tstartCoordsRef.current = { x, y }\n\t\tsetIsTracking(true)\n\t}\n\n\tconst updateDelta = useCallback((e: MouseEvent | PointerEvent | TouchEvent) => {\n\t\tlet clientX = 0,\n\t\t\tclientY = 0\n\n\t\tif ('touches' in e) {\n\t\t\tconst { touches } = e\n\n\t\t\tif (touches.length > 1) return\n\n\t\t\tclientX = touches[0].clientX\n\t\t\tclientY = touches[0].clientY\n\t\t} else {\n\t\t\tclientX = e.clientX\n\t\t\tclientY = e.clientY\n\t\t}\n\n\t\tconst { x, y } = startCoordsRef.current,\n\t\t\tnewDelta = { x: clientX - x, y: clientY - y }\n\n\t\tsetDelta(newDelta)\n\t\tprops?.onChange?.(newDelta)\n\t}, [])\n\n\tconst stopTracking = useCallback(() => {\n\t\tchangeCursor(false)\n\t\tsetIsTracking(false)\n\t\tprops?.onEnd?.(delta)\n\t}, [delta])\n\n\tuseEffect(() => {\n\t\tif (typeof window === 'undefined') return\n\n\t\tconst controller = new AbortController(),\n\t\t\tsignal = controller.signal\n\n\t\tif (isTracking) {\n\t\t\tswitch (pointerTypeRef.current) {\n\t\t\t\tcase 'mouse':\n\t\t\t\t\tdocument.body.addEventListener('mousemove', updateDelta, { signal })\n\t\t\t\t\tdocument.body.addEventListener('mouseup', stopTracking, { signal })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'pointer':\n\t\t\t\t\tdocument.body.addEventListener('pointermove', updateDelta, { signal })\n\t\t\t\t\tdocument.body.addEventListener('pointerup', stopTracking, { signal })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'touch':\n\t\t\t\t\tdocument.body.addEventListener('touchmove', updateDelta, { signal })\n\t\t\t\t\tdocument.body.addEventListener('touchend', stopTracking, { signal })\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tcontroller.abort()\n\t\t}\n\n\t\treturn () => {\n\t\t\tcontroller.abort()\n\t\t}\n\t}, [isTracking, updateDelta, stopTracking])\n\n\treturn { delta, stopTracking, trackPointerMovement }\n}\n"],"names":["useRef","createContext","_jsx","useContext","useSyncExternalStore","Provider","useStore","useCallback","useEffect","Suspense","useState","useId"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export declare function TenArrowTriangleheadClockwise(props: Omit<ComponentPropsWithRef<'svg'>, 'viewBox'>): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=10-arrow-trianglehead-clockwise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"10-arrow-trianglehead-clockwise.d.ts","sourceRoot":"","sources":["../../src/icons/10-arrow-trianglehead-clockwise.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAA;AAE7C,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,2CAQjG"}
@@ -0,0 +1,3 @@
1
+ import { ComponentPropsWithRef } from 'react';
2
+ export declare function TenArrowTriangleheadCounterclockwise(props: Omit<ComponentPropsWithRef<'svg'>, 'viewBox'>): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=10-arrow-trianglehead-counterclockwise.d.ts.map