@soxa-ui/plugins 0.0.0-stage → 0.3.0-beta.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 (630) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -2
  3. package/dist/base/base.class.d.ts +54 -0
  4. package/dist/base/base.class.js +69 -0
  5. package/dist/base/bundle.class.d.ts +25 -0
  6. package/dist/base/bundle.class.js +68 -0
  7. package/dist/base/index.d.ts +3 -0
  8. package/dist/base/types.d.ts +147 -0
  9. package/dist/custom/accordion/header.d.ts +19 -0
  10. package/dist/custom/accordion/header.js +38 -0
  11. package/dist/custom/accordion/index.d.ts +2 -0
  12. package/dist/custom/accordion/item-ids/index.d.ts +1 -0
  13. package/dist/custom/accordion/item-ids/item-ids.plugin.d.ts +24 -0
  14. package/dist/custom/accordion/item-ids/item-ids.plugin.js +44 -0
  15. package/dist/custom/action/action.plugin.d.ts +178 -0
  16. package/dist/custom/action/action.plugin.js +339 -0
  17. package/dist/custom/action/index.d.ts +2 -0
  18. package/dist/custom/action/types.d.ts +65 -0
  19. package/dist/custom/calendar/ids/ids.plugin.d.ts +25 -0
  20. package/dist/custom/calendar/ids/ids.plugin.js +44 -0
  21. package/dist/custom/calendar/ids/index.d.ts +1 -0
  22. package/dist/custom/calendar/index.d.ts +5 -0
  23. package/dist/custom/calendar/keyboard/index.d.ts +2 -0
  24. package/dist/custom/calendar/keyboard/keyboard.plugin.d.ts +114 -0
  25. package/dist/custom/calendar/keyboard/keyboard.plugin.js +249 -0
  26. package/dist/custom/calendar/keyboard/types.d.ts +16 -0
  27. package/dist/custom/calendar/names/index.d.ts +1 -0
  28. package/dist/custom/calendar/names/names.plugin.d.ts +24 -0
  29. package/dist/custom/calendar/names/names.plugin.js +45 -0
  30. package/dist/custom/calendar/parts.d.ts +58 -0
  31. package/dist/custom/calendar/parts.js +119 -0
  32. package/dist/custom/calendar/pointer/index.d.ts +2 -0
  33. package/dist/custom/calendar/pointer/pointer.plugin.d.ts +58 -0
  34. package/dist/custom/calendar/pointer/pointer.plugin.js +144 -0
  35. package/dist/custom/calendar/pointer/types.d.ts +6 -0
  36. package/dist/custom/calendar/stop.d.ts +20 -0
  37. package/dist/custom/calendar/stop.js +32 -0
  38. package/dist/custom/calendar/types.d.ts +16 -0
  39. package/dist/custom/clearable/index.d.ts +1 -0
  40. package/dist/custom/clearable/names/index.d.ts +1 -0
  41. package/dist/custom/clearable/names/names.plugin.d.ts +24 -0
  42. package/dist/custom/clearable/names/names.plugin.js +29 -0
  43. package/dist/custom/collection/bundles.plugin.d.ts +55 -0
  44. package/dist/custom/collection/bundles.plugin.js +100 -0
  45. package/dist/custom/collection/collection-bundles-access.plugin.d.ts +29 -0
  46. package/dist/custom/collection/collection-bundles-access.plugin.js +44 -0
  47. package/dist/custom/collection/collection-elements.plugin.d.ts +55 -0
  48. package/dist/custom/collection/collection-elements.plugin.js +100 -0
  49. package/dist/custom/collection/index.d.ts +4 -0
  50. package/dist/custom/collection/leaving-focus.d.ts +119 -0
  51. package/dist/custom/collection/leaving-focus.js +164 -0
  52. package/dist/custom/collection/reachable.d.ts +14 -0
  53. package/dist/custom/collection/reachable.js +18 -0
  54. package/dist/custom/collection/types.d.ts +14 -0
  55. package/dist/custom/component-view/aria.plugin.d.ts +102 -0
  56. package/dist/custom/component-view/aria.plugin.js +190 -0
  57. package/dist/custom/component-view/index.d.ts +2 -0
  58. package/dist/custom/component-view/types.d.ts +62 -0
  59. package/dist/custom/date-input/clipboard/clipboard.plugin.d.ts +41 -0
  60. package/dist/custom/date-input/clipboard/clipboard.plugin.js +98 -0
  61. package/dist/custom/date-input/clipboard/index.d.ts +2 -0
  62. package/dist/custom/date-input/clipboard/types.d.ts +6 -0
  63. package/dist/custom/date-input/ids/ids.plugin.d.ts +21 -0
  64. package/dist/custom/date-input/ids/ids.plugin.js +28 -0
  65. package/dist/custom/date-input/ids/index.d.ts +1 -0
  66. package/dist/custom/date-input/index.d.ts +6 -0
  67. package/dist/custom/date-input/keyboard/index.d.ts +2 -0
  68. package/dist/custom/date-input/keyboard/keyboard.plugin.d.ts +54 -0
  69. package/dist/custom/date-input/keyboard/keyboard.plugin.js +154 -0
  70. package/dist/custom/date-input/keyboard/types.d.ts +9 -0
  71. package/dist/custom/date-input/parts.d.ts +49 -0
  72. package/dist/custom/date-input/parts.js +127 -0
  73. package/dist/custom/date-input/pointer/index.d.ts +2 -0
  74. package/dist/custom/date-input/pointer/pointer.plugin.d.ts +51 -0
  75. package/dist/custom/date-input/pointer/pointer.plugin.js +141 -0
  76. package/dist/custom/date-input/pointer/types.d.ts +6 -0
  77. package/dist/custom/date-input/touch/index.d.ts +2 -0
  78. package/dist/custom/date-input/touch/touch.plugin.d.ts +100 -0
  79. package/dist/custom/date-input/touch/touch.plugin.js +276 -0
  80. package/dist/custom/date-input/touch/types.d.ts +6 -0
  81. package/dist/custom/date-input/types.d.ts +6 -0
  82. package/dist/custom/date-picker/field.d.ts +20 -0
  83. package/dist/custom/date-picker/field.js +27 -0
  84. package/dist/custom/date-picker/focus/focus.plugin.d.ts +56 -0
  85. package/dist/custom/date-picker/focus/focus.plugin.js +81 -0
  86. package/dist/custom/date-picker/focus/index.d.ts +2 -0
  87. package/dist/custom/date-picker/focus/types.d.ts +3 -0
  88. package/dist/custom/date-picker/ids/ids.plugin.d.ts +19 -0
  89. package/dist/custom/date-picker/ids/ids.plugin.js +28 -0
  90. package/dist/custom/date-picker/ids/index.d.ts +1 -0
  91. package/dist/custom/date-picker/index.d.ts +5 -0
  92. package/dist/custom/date-picker/names/index.d.ts +2 -0
  93. package/dist/custom/date-picker/names/names.plugin.d.ts +33 -0
  94. package/dist/custom/date-picker/names/names.plugin.js +80 -0
  95. package/dist/custom/date-picker/names/types.d.ts +12 -0
  96. package/dist/custom/date-picker/trigger/index.d.ts +2 -0
  97. package/dist/custom/date-picker/trigger/trigger.plugin.d.ts +37 -0
  98. package/dist/custom/date-picker/trigger/trigger.plugin.js +69 -0
  99. package/dist/custom/date-picker/trigger/types.d.ts +3 -0
  100. package/dist/custom/dialog/ids/ids.plugin.d.ts +15 -0
  101. package/dist/custom/dialog/ids/ids.plugin.js +28 -0
  102. package/dist/custom/dialog/ids/index.d.ts +1 -0
  103. package/dist/custom/dialog/index.d.ts +3 -0
  104. package/dist/custom/dialog/layout/index.d.ts +3 -0
  105. package/dist/custom/dialog/layout/layout.plugin.d.ts +42 -0
  106. package/dist/custom/dialog/layout/layout.plugin.js +78 -0
  107. package/dist/custom/dialog/layout/offset-event.d.ts +35 -0
  108. package/dist/custom/dialog/layout/offset-event.js +44 -0
  109. package/dist/custom/dialog/layout/types.d.ts +12 -0
  110. package/dist/custom/dialog/names/index.d.ts +1 -0
  111. package/dist/custom/dialog/names/names.plugin.d.ts +13 -0
  112. package/dist/custom/dialog/names/names.plugin.js +17 -0
  113. package/dist/custom/dismiss/dismiss.plugin.d.ts +174 -0
  114. package/dist/custom/dismiss/dismiss.plugin.js +287 -0
  115. package/dist/custom/dismiss/index.d.ts +2 -0
  116. package/dist/custom/dismiss/types.d.ts +59 -0
  117. package/dist/custom/drag-and-drop/drag.plugin.d.ts +87 -0
  118. package/dist/custom/drag-and-drop/drag.plugin.js +310 -0
  119. package/dist/custom/drag-and-drop/index.d.ts +2 -0
  120. package/dist/custom/drag-and-drop/types.d.ts +13 -0
  121. package/dist/custom/drawer/index.d.ts +1 -0
  122. package/dist/custom/drawer/layout/index.d.ts +2 -0
  123. package/dist/custom/drawer/layout/layout.plugin.d.ts +17 -0
  124. package/dist/custom/drawer/layout/layout.plugin.js +22 -0
  125. package/dist/custom/drawer/layout/types.d.ts +3 -0
  126. package/dist/custom/element/element.plugin.d.ts +35 -0
  127. package/dist/custom/element/element.plugin.js +58 -0
  128. package/dist/custom/element/index.d.ts +2 -0
  129. package/dist/custom/element/types.d.ts +18 -0
  130. package/dist/custom/field/ids/ids.plugin.d.ts +64 -0
  131. package/dist/custom/field/ids/ids.plugin.js +126 -0
  132. package/dist/custom/field/ids/index.d.ts +2 -0
  133. package/dist/custom/field/ids/types.d.ts +28 -0
  134. package/dist/custom/field/index.d.ts +1 -0
  135. package/dist/custom/frame/anchor/anchor.plugin.d.ts +483 -0
  136. package/dist/custom/frame/anchor/anchor.plugin.js +820 -0
  137. package/dist/custom/frame/anchor/index.d.ts +2 -0
  138. package/dist/custom/frame/anchor/types.d.ts +83 -0
  139. package/dist/custom/frame/index.d.ts +2 -0
  140. package/dist/custom/frame/layout/index.d.ts +2 -0
  141. package/dist/custom/frame/layout/layout.plugin.d.ts +24 -0
  142. package/dist/custom/frame/layout/layout.plugin.js +65 -0
  143. package/dist/custom/frame/layout/types.d.ts +5 -0
  144. package/dist/custom/icon/index.d.ts +2 -0
  145. package/dist/custom/icon/layout.plugin.d.ts +21 -0
  146. package/dist/custom/icon/layout.plugin.js +51 -0
  147. package/dist/custom/icon/types.d.ts +5 -0
  148. package/dist/custom/id/id.plugin.d.ts +32 -0
  149. package/dist/custom/id/id.plugin.js +42 -0
  150. package/dist/custom/id/index.d.ts +2 -0
  151. package/dist/custom/id/types.d.ts +6 -0
  152. package/dist/custom/index.d.ts +42 -0
  153. package/dist/custom/input/field.d.ts +16 -0
  154. package/dist/custom/input/field.js +27 -0
  155. package/dist/custom/input/index.d.ts +3 -0
  156. package/dist/custom/input/input.plugin.d.ts +12 -0
  157. package/dist/custom/input/input.plugin.js +46 -0
  158. package/dist/custom/input/types.d.ts +2 -0
  159. package/dist/custom/input-bool/index.d.ts +2 -0
  160. package/dist/custom/input-bool/input-bool.plugin.d.ts +30 -0
  161. package/dist/custom/input-bool/input-bool.plugin.js +77 -0
  162. package/dist/custom/input-bool/types.d.ts +5 -0
  163. package/dist/custom/input-control/index.d.ts +2 -0
  164. package/dist/custom/input-control/input-control.plugin.d.ts +12 -0
  165. package/dist/custom/input-control/input-control.plugin.js +40 -0
  166. package/dist/custom/input-control/types.d.ts +2 -0
  167. package/dist/custom/item-group/ids/ids.plugin.d.ts +19 -0
  168. package/dist/custom/item-group/ids/ids.plugin.js +32 -0
  169. package/dist/custom/item-group/ids/index.d.ts +1 -0
  170. package/dist/custom/item-group/index.d.ts +1 -0
  171. package/dist/custom/label/index.d.ts +1 -0
  172. package/dist/custom/label/nested-warn/index.d.ts +1 -0
  173. package/dist/custom/label/nested-warn/nested-warn.plugin.d.ts +21 -0
  174. package/dist/custom/label/nested-warn/nested-warn.plugin.js +41 -0
  175. package/dist/custom/list/height/height.plugin.d.ts +129 -0
  176. package/dist/custom/list/height/height.plugin.js +272 -0
  177. package/dist/custom/list/height/index.d.ts +2 -0
  178. package/dist/custom/list/height/types.d.ts +10 -0
  179. package/dist/custom/list/index.d.ts +7 -0
  180. package/dist/custom/list/item/index.d.ts +2 -0
  181. package/dist/custom/list/item/item.plugin.d.ts +25 -0
  182. package/dist/custom/list/item/item.plugin.js +46 -0
  183. package/dist/custom/list/item/types.d.ts +5 -0
  184. package/dist/custom/list/keyboard/index.d.ts +2 -0
  185. package/dist/custom/list/keyboard/keyboard.plugin.d.ts +133 -0
  186. package/dist/custom/list/keyboard/keyboard.plugin.js +199 -0
  187. package/dist/custom/list/keyboard/types.d.ts +3 -0
  188. package/dist/custom/list/navigation/index.d.ts +2 -0
  189. package/dist/custom/list/navigation/navigation.plugin.d.ts +262 -0
  190. package/dist/custom/list/navigation/navigation.plugin.js +402 -0
  191. package/dist/custom/list/navigation/types.d.ts +25 -0
  192. package/dist/custom/list/newly-selected.d.ts +17 -0
  193. package/dist/custom/list/newly-selected.js +22 -0
  194. package/dist/custom/list/option-ids/index.d.ts +1 -0
  195. package/dist/custom/list/option-ids/option-ids.plugin.d.ts +29 -0
  196. package/dist/custom/list/option-ids/option-ids.plugin.js +43 -0
  197. package/dist/custom/list/row.d.ts +50 -0
  198. package/dist/custom/list/row.js +99 -0
  199. package/dist/custom/list/scroll/index.d.ts +2 -0
  200. package/dist/custom/list/scroll/scroll.plugin.d.ts +132 -0
  201. package/dist/custom/list/scroll/scroll.plugin.js +286 -0
  202. package/dist/custom/list/scroll/types.d.ts +21 -0
  203. package/dist/custom/list/typeahead.d.ts +53 -0
  204. package/dist/custom/list/typeahead.js +58 -0
  205. package/dist/custom/menu/focus/focus.plugin.d.ts +61 -0
  206. package/dist/custom/menu/focus/focus.plugin.js +105 -0
  207. package/dist/custom/menu/focus/index.d.ts +2 -0
  208. package/dist/custom/menu/focus/types.d.ts +2 -0
  209. package/dist/custom/menu/hover/hover.plugin.d.ts +99 -0
  210. package/dist/custom/menu/hover/hover.plugin.js +235 -0
  211. package/dist/custom/menu/hover/index.d.ts +2 -0
  212. package/dist/custom/menu/hover/types.d.ts +2 -0
  213. package/dist/custom/menu/ids/ids.plugin.d.ts +29 -0
  214. package/dist/custom/menu/ids/ids.plugin.js +46 -0
  215. package/dist/custom/menu/ids/index.d.ts +1 -0
  216. package/dist/custom/menu/index.d.ts +11 -0
  217. package/dist/custom/menu/keyboard/index.d.ts +2 -0
  218. package/dist/custom/menu/keyboard/keyboard.plugin.d.ts +41 -0
  219. package/dist/custom/menu/keyboard/keyboard.plugin.js +68 -0
  220. package/dist/custom/menu/keyboard/types.d.ts +2 -0
  221. package/dist/custom/menu/navigation/index.d.ts +2 -0
  222. package/dist/custom/menu/navigation/navigation.plugin.d.ts +116 -0
  223. package/dist/custom/menu/navigation/navigation.plugin.js +222 -0
  224. package/dist/custom/menu/navigation/types.d.ts +2 -0
  225. package/dist/custom/menu/nested-layer.d.ts +13 -0
  226. package/dist/custom/menu/nested-layer.js +20 -0
  227. package/dist/custom/menu/pointer/index.d.ts +2 -0
  228. package/dist/custom/menu/pointer/pointer.plugin.d.ts +45 -0
  229. package/dist/custom/menu/pointer/pointer.plugin.js +95 -0
  230. package/dist/custom/menu/pointer/strategies/context.strategy.d.ts +70 -0
  231. package/dist/custom/menu/pointer/strategies/context.strategy.js +170 -0
  232. package/dist/custom/menu/pointer/strategies/index.d.ts +3 -0
  233. package/dist/custom/menu/pointer/strategies/press.strategy.d.ts +23 -0
  234. package/dist/custom/menu/pointer/strategies/press.strategy.js +33 -0
  235. package/dist/custom/menu/pointer/strategies/types.d.ts +49 -0
  236. package/dist/custom/menu/pointer/types.d.ts +2 -0
  237. package/dist/custom/menu/popover-item-focus/focus.plugin.d.ts +54 -0
  238. package/dist/custom/menu/popover-item-focus/focus.plugin.js +70 -0
  239. package/dist/custom/menu/popover-item-focus/index.d.ts +2 -0
  240. package/dist/custom/menu/popover-item-focus/types.d.ts +10 -0
  241. package/dist/custom/menu/popover-item-keyboard/index.d.ts +2 -0
  242. package/dist/custom/menu/popover-item-keyboard/keyboard.plugin.d.ts +43 -0
  243. package/dist/custom/menu/popover-item-keyboard/keyboard.plugin.js +79 -0
  244. package/dist/custom/menu/popover-item-keyboard/types.d.ts +2 -0
  245. package/dist/custom/menu/popup-ids/ids.plugin.d.ts +27 -0
  246. package/dist/custom/menu/popup-ids/ids.plugin.js +47 -0
  247. package/dist/custom/menu/popup-ids/index.d.ts +1 -0
  248. package/dist/custom/menu/submenu-focus/focus.plugin.d.ts +53 -0
  249. package/dist/custom/menu/submenu-focus/focus.plugin.js +84 -0
  250. package/dist/custom/menu/submenu-focus/index.d.ts +2 -0
  251. package/dist/custom/menu/submenu-focus/types.d.ts +10 -0
  252. package/dist/custom/menu/submenu-keyboard/index.d.ts +2 -0
  253. package/dist/custom/menu/submenu-keyboard/keyboard.plugin.d.ts +43 -0
  254. package/dist/custom/menu/submenu-keyboard/keyboard.plugin.js +74 -0
  255. package/dist/custom/menu/submenu-keyboard/types.d.ts +2 -0
  256. package/dist/custom/number-input/index.d.ts +5 -0
  257. package/dist/custom/number-input/keyboard/index.d.ts +2 -0
  258. package/dist/custom/number-input/keyboard/keyboard.plugin.d.ts +36 -0
  259. package/dist/custom/number-input/keyboard/keyboard.plugin.js +80 -0
  260. package/dist/custom/number-input/keyboard/types.d.ts +3 -0
  261. package/dist/custom/number-input/names/index.d.ts +1 -0
  262. package/dist/custom/number-input/names/names.plugin.d.ts +17 -0
  263. package/dist/custom/number-input/names/names.plugin.js +24 -0
  264. package/dist/custom/number-input/parts.d.ts +21 -0
  265. package/dist/custom/number-input/parts.js +39 -0
  266. package/dist/custom/number-input/stepper/index.d.ts +2 -0
  267. package/dist/custom/number-input/stepper/stepper.plugin.d.ts +59 -0
  268. package/dist/custom/number-input/stepper/stepper.plugin.js +166 -0
  269. package/dist/custom/number-input/stepper/types.d.ts +19 -0
  270. package/dist/custom/number-input/touch/index.d.ts +2 -0
  271. package/dist/custom/number-input/touch/touch.plugin.d.ts +25 -0
  272. package/dist/custom/number-input/touch/touch.plugin.js +53 -0
  273. package/dist/custom/number-input/touch/types.d.ts +3 -0
  274. package/dist/custom/number-input/types.d.ts +8 -0
  275. package/dist/custom/number-input/typing/index.d.ts +2 -0
  276. package/dist/custom/number-input/typing/types.d.ts +6 -0
  277. package/dist/custom/number-input/typing/typing.plugin.d.ts +47 -0
  278. package/dist/custom/number-input/typing/typing.plugin.js +149 -0
  279. package/dist/custom/overlay/focus/focus.plugin.d.ts +150 -0
  280. package/dist/custom/overlay/focus/focus.plugin.js +242 -0
  281. package/dist/custom/overlay/focus/index.d.ts +1 -0
  282. package/dist/custom/overlay/hide-outside/hide-outside.plugin.d.ts +84 -0
  283. package/dist/custom/overlay/hide-outside/hide-outside.plugin.js +187 -0
  284. package/dist/custom/overlay/hide-outside/index.d.ts +2 -0
  285. package/dist/custom/overlay/hide-outside/marks.d.ts +19 -0
  286. package/dist/custom/overlay/hide-outside/marks.js +43 -0
  287. package/dist/custom/overlay/hide-outside/types.d.ts +17 -0
  288. package/dist/custom/overlay/index.d.ts +9 -0
  289. package/dist/custom/overlay/modal-focus/index.d.ts +1 -0
  290. package/dist/custom/overlay/modal-focus/modal-focus.plugin.d.ts +72 -0
  291. package/dist/custom/overlay/modal-focus/modal-focus.plugin.js +109 -0
  292. package/dist/custom/overlay/modal-ids/index.d.ts +1 -0
  293. package/dist/custom/overlay/modal-ids/modal-ids.plugin.d.ts +21 -0
  294. package/dist/custom/overlay/modal-ids/modal-ids.plugin.js +30 -0
  295. package/dist/custom/overlay/modal-layout/index.d.ts +2 -0
  296. package/dist/custom/overlay/modal-layout/modal-layout.plugin.d.ts +66 -0
  297. package/dist/custom/overlay/modal-layout/modal-layout.plugin.js +119 -0
  298. package/dist/custom/overlay/modal-layout/types.d.ts +13 -0
  299. package/dist/custom/overlay/modal-names/index.d.ts +1 -0
  300. package/dist/custom/overlay/modal-names/modal-names.plugin.d.ts +14 -0
  301. package/dist/custom/overlay/modal-names/modal-names.plugin.js +17 -0
  302. package/dist/custom/overlay/open-state.d.ts +12 -0
  303. package/dist/custom/overlay/open-state.js +42 -0
  304. package/dist/custom/overlay/scroll-lock/index.d.ts +2 -0
  305. package/dist/custom/overlay/scroll-lock/lock.d.ts +17 -0
  306. package/dist/custom/overlay/scroll-lock/lock.js +83 -0
  307. package/dist/custom/overlay/scroll-lock/scroll-lock.plugin.d.ts +78 -0
  308. package/dist/custom/overlay/scroll-lock/scroll-lock.plugin.js +134 -0
  309. package/dist/custom/overlay/scroll-lock/types.d.ts +17 -0
  310. package/dist/custom/overlay/swipe/index.d.ts +2 -0
  311. package/dist/custom/overlay/swipe/swipe.plugin.d.ts +150 -0
  312. package/dist/custom/overlay/swipe/swipe.plugin.js +432 -0
  313. package/dist/custom/overlay/swipe/types.d.ts +62 -0
  314. package/dist/custom/overlay/types.d.ts +40 -0
  315. package/dist/custom/pagination/current.d.ts +24 -0
  316. package/dist/custom/pagination/current.js +34 -0
  317. package/dist/custom/pagination/focus/focus.plugin.d.ts +57 -0
  318. package/dist/custom/pagination/focus/focus.plugin.js +106 -0
  319. package/dist/custom/pagination/focus/index.d.ts +2 -0
  320. package/dist/custom/pagination/focus/types.d.ts +8 -0
  321. package/dist/custom/pagination/index.d.ts +3 -0
  322. package/dist/custom/pagination/names/index.d.ts +1 -0
  323. package/dist/custom/pagination/names/names.plugin.d.ts +15 -0
  324. package/dist/custom/pagination/names/names.plugin.js +19 -0
  325. package/dist/custom/popover/focus/focus.plugin.d.ts +69 -0
  326. package/dist/custom/popover/focus/focus.plugin.js +107 -0
  327. package/dist/custom/popover/focus/index.d.ts +2 -0
  328. package/dist/custom/popover/focus/types.d.ts +2 -0
  329. package/dist/custom/popover/ids/ids.plugin.d.ts +18 -0
  330. package/dist/custom/popover/ids/ids.plugin.js +27 -0
  331. package/dist/custom/popover/ids/index.d.ts +1 -0
  332. package/dist/custom/popover/index.d.ts +4 -0
  333. package/dist/custom/popover/names/index.d.ts +1 -0
  334. package/dist/custom/popover/names/names.plugin.d.ts +7 -0
  335. package/dist/custom/popover/names/names.plugin.js +10 -0
  336. package/dist/custom/popover/pointer/index.d.ts +2 -0
  337. package/dist/custom/popover/pointer/pointer.plugin.d.ts +35 -0
  338. package/dist/custom/popover/pointer/pointer.plugin.js +65 -0
  339. package/dist/custom/popover/pointer/types.d.ts +2 -0
  340. package/dist/custom/radio-group/checked/checked.plugin.d.ts +45 -0
  341. package/dist/custom/radio-group/checked/checked.plugin.js +81 -0
  342. package/dist/custom/radio-group/checked/index.d.ts +1 -0
  343. package/dist/custom/radio-group/index.d.ts +3 -0
  344. package/dist/custom/radio-group/name/index.d.ts +1 -0
  345. package/dist/custom/radio-group/name/name.plugin.d.ts +21 -0
  346. package/dist/custom/radio-group/name/name.plugin.js +39 -0
  347. package/dist/custom/radio-group/stop.d.ts +17 -0
  348. package/dist/custom/radio-group/stop.js +30 -0
  349. package/dist/custom/rating/hover/hover.plugin.d.ts +36 -0
  350. package/dist/custom/rating/hover/hover.plugin.js +71 -0
  351. package/dist/custom/rating/hover/index.d.ts +2 -0
  352. package/dist/custom/rating/hover/types.d.ts +7 -0
  353. package/dist/custom/rating/index.d.ts +3 -0
  354. package/dist/custom/rating/names/index.d.ts +1 -0
  355. package/dist/custom/rating/names/names.plugin.d.ts +25 -0
  356. package/dist/custom/rating/names/names.plugin.js +45 -0
  357. package/dist/custom/rating/validity/index.d.ts +2 -0
  358. package/dist/custom/rating/validity/types.d.ts +7 -0
  359. package/dist/custom/rating/validity/validity.plugin.d.ts +48 -0
  360. package/dist/custom/rating/validity/validity.plugin.js +91 -0
  361. package/dist/custom/ready/index.d.ts +1 -0
  362. package/dist/custom/ready/ready.plugin.d.ts +14 -0
  363. package/dist/custom/ready/ready.plugin.js +28 -0
  364. package/dist/custom/scroller/index.d.ts +2 -0
  365. package/dist/custom/scroller/names/index.d.ts +1 -0
  366. package/dist/custom/scroller/names/names.plugin.d.ts +11 -0
  367. package/dist/custom/scroller/names/names.plugin.js +15 -0
  368. package/dist/custom/scroller/viewport/edges.d.ts +34 -0
  369. package/dist/custom/scroller/viewport/edges.js +29 -0
  370. package/dist/custom/scroller/viewport/focus.d.ts +39 -0
  371. package/dist/custom/scroller/viewport/focus.js +61 -0
  372. package/dist/custom/scroller/viewport/index.d.ts +6 -0
  373. package/dist/custom/scroller/viewport/stop.d.ts +24 -0
  374. package/dist/custom/scroller/viewport/stop.js +34 -0
  375. package/dist/custom/scroller/viewport/types.d.ts +31 -0
  376. package/dist/custom/scroller/viewport/viewport.plugin.d.ts +163 -0
  377. package/dist/custom/scroller/viewport/viewport.plugin.js +352 -0
  378. package/dist/custom/select/backspace/backspace.plugin.d.ts +50 -0
  379. package/dist/custom/select/backspace/backspace.plugin.js +125 -0
  380. package/dist/custom/select/backspace/index.d.ts +2 -0
  381. package/dist/custom/select/backspace/types.d.ts +2 -0
  382. package/dist/custom/select/editable/editable.plugin.d.ts +193 -0
  383. package/dist/custom/select/editable/editable.plugin.js +347 -0
  384. package/dist/custom/select/editable/index.d.ts +2 -0
  385. package/dist/custom/select/editable/types.d.ts +6 -0
  386. package/dist/custom/select/ids/ids.plugin.d.ts +22 -0
  387. package/dist/custom/select/ids/ids.plugin.js +31 -0
  388. package/dist/custom/select/ids/index.d.ts +1 -0
  389. package/dist/custom/select/index.d.ts +5 -0
  390. package/dist/custom/select/keyboard/index.d.ts +2 -0
  391. package/dist/custom/select/keyboard/keyboard.plugin.d.ts +125 -0
  392. package/dist/custom/select/keyboard/keyboard.plugin.js +205 -0
  393. package/dist/custom/select/keyboard/strategies/base.strategy.d.ts +37 -0
  394. package/dist/custom/select/keyboard/strategies/base.strategy.js +81 -0
  395. package/dist/custom/select/keyboard/strategies/editable.strategy.d.ts +16 -0
  396. package/dist/custom/select/keyboard/strategies/editable.strategy.js +20 -0
  397. package/dist/custom/select/keyboard/strategies/index.d.ts +4 -0
  398. package/dist/custom/select/keyboard/strategies/select-only.strategy.d.ts +13 -0
  399. package/dist/custom/select/keyboard/strategies/select-only.strategy.js +59 -0
  400. package/dist/custom/select/keyboard/strategies/types.d.ts +29 -0
  401. package/dist/custom/select/keyboard/types.d.ts +18 -0
  402. package/dist/custom/select/pointer/index.d.ts +2 -0
  403. package/dist/custom/select/pointer/pointer.plugin.d.ts +59 -0
  404. package/dist/custom/select/pointer/pointer.plugin.js +104 -0
  405. package/dist/custom/select/pointer/types.d.ts +2 -0
  406. package/dist/custom/skeleton/index.d.ts +2 -0
  407. package/dist/custom/skeleton/layout.plugin.d.ts +18 -0
  408. package/dist/custom/skeleton/layout.plugin.js +47 -0
  409. package/dist/custom/skeleton/types.d.ts +5 -0
  410. package/dist/custom/slide/direction.d.ts +30 -0
  411. package/dist/custom/slide/direction.js +75 -0
  412. package/dist/custom/slide/index.d.ts +4 -0
  413. package/dist/custom/slide/keyboard/index.d.ts +2 -0
  414. package/dist/custom/slide/keyboard/keyboard.plugin.d.ts +46 -0
  415. package/dist/custom/slide/keyboard/keyboard.plugin.js +106 -0
  416. package/dist/custom/slide/keyboard/types.d.ts +6 -0
  417. package/dist/custom/slide/parts.d.ts +7 -0
  418. package/dist/custom/slide/parts.js +26 -0
  419. package/dist/custom/slide/pointer/index.d.ts +2 -0
  420. package/dist/custom/slide/pointer/pointer.plugin.d.ts +100 -0
  421. package/dist/custom/slide/pointer/pointer.plugin.js +268 -0
  422. package/dist/custom/slide/pointer/strategies/base.strategy.d.ts +16 -0
  423. package/dist/custom/slide/pointer/strategies/base.strategy.js +23 -0
  424. package/dist/custom/slide/pointer/strategies/hold.strategy.d.ts +28 -0
  425. package/dist/custom/slide/pointer/strategies/hold.strategy.js +48 -0
  426. package/dist/custom/slide/pointer/strategies/index.d.ts +7 -0
  427. package/dist/custom/slide/pointer/strategies/magnet.strategy.d.ts +11 -0
  428. package/dist/custom/slide/pointer/strategies/magnet.strategy.js +17 -0
  429. package/dist/custom/slide/pointer/strategies/none.strategy.d.ts +7 -0
  430. package/dist/custom/slide/pointer/strategies/none.strategy.js +9 -0
  431. package/dist/custom/slide/pointer/strategies/plateau.strategy.d.ts +24 -0
  432. package/dist/custom/slide/pointer/strategies/plateau.strategy.js +81 -0
  433. package/dist/custom/slide/pointer/strategies/points.d.ts +16 -0
  434. package/dist/custom/slide/pointer/strategies/points.js +32 -0
  435. package/dist/custom/slide/pointer/strategies/settle.strategy.d.ts +11 -0
  436. package/dist/custom/slide/pointer/strategies/settle.strategy.js +17 -0
  437. package/dist/custom/slide/pointer/strategies/types.d.ts +57 -0
  438. package/dist/custom/slide/pointer/types.d.ts +46 -0
  439. package/dist/custom/slide/types.d.ts +14 -0
  440. package/dist/custom/table/column-ids/column-ids.plugin.d.ts +26 -0
  441. package/dist/custom/table/column-ids/column-ids.plugin.js +36 -0
  442. package/dist/custom/table/column-ids/index.d.ts +1 -0
  443. package/dist/custom/table/column-names/column-names.plugin.d.ts +18 -0
  444. package/dist/custom/table/column-names/column-names.plugin.js +24 -0
  445. package/dist/custom/table/column-names/index.d.ts +1 -0
  446. package/dist/custom/table/column-reorder/column-reorder.plugin.d.ts +169 -0
  447. package/dist/custom/table/column-reorder/column-reorder.plugin.js +465 -0
  448. package/dist/custom/table/column-reorder/index.d.ts +2 -0
  449. package/dist/custom/table/column-reorder/types.d.ts +81 -0
  450. package/dist/custom/table/column-resize/column-resize.plugin.d.ts +96 -0
  451. package/dist/custom/table/column-resize/column-resize.plugin.js +271 -0
  452. package/dist/custom/table/column-resize/index.d.ts +2 -0
  453. package/dist/custom/table/column-resize/types.d.ts +38 -0
  454. package/dist/custom/table/grid/grid.plugin.d.ts +119 -0
  455. package/dist/custom/table/grid/grid.plugin.js +356 -0
  456. package/dist/custom/table/grid/index.d.ts +2 -0
  457. package/dist/custom/table/grid/types.d.ts +22 -0
  458. package/dist/custom/table/index.d.ts +8 -0
  459. package/dist/custom/table/layout/index.d.ts +2 -0
  460. package/dist/custom/table/layout/layout.plugin.d.ts +52 -0
  461. package/dist/custom/table/layout/layout.plugin.js +122 -0
  462. package/dist/custom/table/layout/types.d.ts +7 -0
  463. package/dist/custom/table/names/index.d.ts +2 -0
  464. package/dist/custom/table/names/names.plugin.d.ts +18 -0
  465. package/dist/custom/table/names/names.plugin.js +31 -0
  466. package/dist/custom/table/names/types.d.ts +6 -0
  467. package/dist/custom/table/row-ids/index.d.ts +1 -0
  468. package/dist/custom/table/row-ids/row-ids.plugin.d.ts +21 -0
  469. package/dist/custom/table/row-ids/row-ids.plugin.js +28 -0
  470. package/dist/custom/tabs/active-tab/active-tab.plugin.d.ts +42 -0
  471. package/dist/custom/tabs/active-tab/active-tab.plugin.js +103 -0
  472. package/dist/custom/tabs/active-tab/index.d.ts +2 -0
  473. package/dist/custom/tabs/active-tab/types.d.ts +17 -0
  474. package/dist/custom/tabs/content-warn/content-warn.plugin.d.ts +21 -0
  475. package/dist/custom/tabs/content-warn/content-warn.plugin.js +41 -0
  476. package/dist/custom/tabs/content-warn/index.d.ts +1 -0
  477. package/dist/custom/tabs/index.d.ts +7 -0
  478. package/dist/custom/tabs/item-ids/index.d.ts +1 -0
  479. package/dist/custom/tabs/item-ids/item-ids.plugin.d.ts +60 -0
  480. package/dist/custom/tabs/item-ids/item-ids.plugin.js +94 -0
  481. package/dist/custom/tabs/item-names/index.d.ts +1 -0
  482. package/dist/custom/tabs/item-names/item-names.plugin.d.ts +17 -0
  483. package/dist/custom/tabs/item-names/item-names.plugin.js +23 -0
  484. package/dist/custom/tabs/keyboard/index.d.ts +2 -0
  485. package/dist/custom/tabs/keyboard/keyboard.plugin.d.ts +105 -0
  486. package/dist/custom/tabs/keyboard/keyboard.plugin.js +206 -0
  487. package/dist/custom/tabs/keyboard/types.d.ts +6 -0
  488. package/dist/custom/tabs/layout/index.d.ts +2 -0
  489. package/dist/custom/tabs/layout/layout.plugin.d.ts +37 -0
  490. package/dist/custom/tabs/layout/layout.plugin.js +81 -0
  491. package/dist/custom/tabs/layout/types.d.ts +4 -0
  492. package/dist/custom/tabs/parts.d.ts +15 -0
  493. package/dist/custom/tabs/parts.js +21 -0
  494. package/dist/custom/tabs/tab.d.ts +29 -0
  495. package/dist/custom/tabs/tab.js +44 -0
  496. package/dist/custom/tags/index.d.ts +4 -0
  497. package/dist/custom/tags/item-names/index.d.ts +1 -0
  498. package/dist/custom/tags/item-names/item-names.plugin.d.ts +12 -0
  499. package/dist/custom/tags/item-names/item-names.plugin.js +18 -0
  500. package/dist/custom/tags/keyboard/index.d.ts +2 -0
  501. package/dist/custom/tags/keyboard/keyboard.plugin.d.ts +133 -0
  502. package/dist/custom/tags/keyboard/keyboard.plugin.js +253 -0
  503. package/dist/custom/tags/keyboard/types.d.ts +6 -0
  504. package/dist/custom/tags/scroll/index.d.ts +2 -0
  505. package/dist/custom/tags/scroll/scroll.plugin.d.ts +68 -0
  506. package/dist/custom/tags/scroll/scroll.plugin.js +120 -0
  507. package/dist/custom/tags/scroll/types.d.ts +6 -0
  508. package/dist/custom/tags/tag.d.ts +41 -0
  509. package/dist/custom/tags/tag.js +66 -0
  510. package/dist/custom/textarea/autoresize/autoresize.plugin.d.ts +70 -0
  511. package/dist/custom/textarea/autoresize/autoresize.plugin.js +176 -0
  512. package/dist/custom/textarea/autoresize/index.d.ts +2 -0
  513. package/dist/custom/textarea/autoresize/types.d.ts +6 -0
  514. package/dist/custom/textarea/ids/ids.plugin.d.ts +26 -0
  515. package/dist/custom/textarea/ids/ids.plugin.js +44 -0
  516. package/dist/custom/textarea/ids/index.d.ts +1 -0
  517. package/dist/custom/textarea/index.d.ts +3 -0
  518. package/dist/custom/textarea/names/index.d.ts +2 -0
  519. package/dist/custom/textarea/names/names.plugin.d.ts +33 -0
  520. package/dist/custom/textarea/names/names.plugin.js +65 -0
  521. package/dist/custom/textarea/names/types.d.ts +8 -0
  522. package/dist/custom/toasts/cascade/cascade.plugin.d.ts +81 -0
  523. package/dist/custom/toasts/cascade/cascade.plugin.js +214 -0
  524. package/dist/custom/toasts/cascade/index.d.ts +2 -0
  525. package/dist/custom/toasts/cascade/types.d.ts +15 -0
  526. package/dist/custom/toasts/index.d.ts +7 -0
  527. package/dist/custom/toasts/item-names/index.d.ts +1 -0
  528. package/dist/custom/toasts/item-names/item-names.plugin.d.ts +12 -0
  529. package/dist/custom/toasts/item-names/item-names.plugin.js +18 -0
  530. package/dist/custom/toasts/keyboard/index.d.ts +2 -0
  531. package/dist/custom/toasts/keyboard/keyboard.plugin.d.ts +57 -0
  532. package/dist/custom/toasts/keyboard/keyboard.plugin.js +136 -0
  533. package/dist/custom/toasts/keyboard/types.d.ts +6 -0
  534. package/dist/custom/toasts/layout/index.d.ts +2 -0
  535. package/dist/custom/toasts/layout/layout.plugin.d.ts +23 -0
  536. package/dist/custom/toasts/layout/layout.plugin.js +39 -0
  537. package/dist/custom/toasts/layout/types.d.ts +5 -0
  538. package/dist/custom/toasts/names/index.d.ts +1 -0
  539. package/dist/custom/toasts/names/names.plugin.d.ts +10 -0
  540. package/dist/custom/toasts/names/names.plugin.js +13 -0
  541. package/dist/custom/toasts/removal/index.d.ts +2 -0
  542. package/dist/custom/toasts/removal/removal.plugin.d.ts +35 -0
  543. package/dist/custom/toasts/removal/removal.plugin.js +69 -0
  544. package/dist/custom/toasts/removal/types.d.ts +6 -0
  545. package/dist/custom/toasts/timer/index.d.ts +2 -0
  546. package/dist/custom/toasts/timer/timer.plugin.d.ts +71 -0
  547. package/dist/custom/toasts/timer/timer.plugin.js +213 -0
  548. package/dist/custom/toasts/timer/types.d.ts +15 -0
  549. package/dist/custom/tooltip/ids/ids.plugin.d.ts +22 -0
  550. package/dist/custom/tooltip/ids/ids.plugin.js +42 -0
  551. package/dist/custom/tooltip/ids/index.d.ts +1 -0
  552. package/dist/custom/tooltip/index.d.ts +2 -0
  553. package/dist/custom/tooltip/trigger/document-state.d.ts +42 -0
  554. package/dist/custom/tooltip/trigger/document-state.js +50 -0
  555. package/dist/custom/tooltip/trigger/index.d.ts +2 -0
  556. package/dist/custom/tooltip/trigger/trigger.plugin.d.ts +133 -0
  557. package/dist/custom/tooltip/trigger/trigger.plugin.js +271 -0
  558. package/dist/custom/tooltip/trigger/types.d.ts +20 -0
  559. package/dist/custom/virtual/index.d.ts +2 -0
  560. package/dist/custom/virtual/types.d.ts +6 -0
  561. package/dist/custom/virtual/virtual.plugin.d.ts +126 -0
  562. package/dist/custom/virtual/virtual.plugin.js +311 -0
  563. package/dist/index.d.ts +7 -0
  564. package/dist/index.js +149 -0
  565. package/dist/locale/index.d.ts +6 -0
  566. package/dist/locale/locale.d.ts +38 -0
  567. package/dist/locale/locale.js +93 -0
  568. package/dist/locale/locale.plugin.d.ts +26 -0
  569. package/dist/locale/locale.plugin.js +35 -0
  570. package/dist/locale/locales/ar.d.ts +5 -0
  571. package/dist/locale/locales/ar.js +59 -0
  572. package/dist/locale/locales/en.d.ts +7 -0
  573. package/dist/locale/locales/en.js +61 -0
  574. package/dist/locale/locales/es.d.ts +2 -0
  575. package/dist/locale/locales/es.js +56 -0
  576. package/dist/locale/locales/fr.d.ts +2 -0
  577. package/dist/locale/locales/fr.js +56 -0
  578. package/dist/locale/locales/index.d.ts +6 -0
  579. package/dist/locale/locales/ru.d.ts +2 -0
  580. package/dist/locale/locales/ru.js +56 -0
  581. package/dist/locale/locales/zh.d.ts +2 -0
  582. package/dist/locale/locales/zh.js +56 -0
  583. package/dist/locale/names.plugin.d.ts +32 -0
  584. package/dist/locale/names.plugin.js +39 -0
  585. package/dist/locale/source.class.d.ts +22 -0
  586. package/dist/locale/source.class.js +32 -0
  587. package/dist/locale/types.d.ts +197 -0
  588. package/dist/motion/index.d.ts +2 -0
  589. package/dist/motion/motion.d.ts +28 -0
  590. package/dist/motion/motion.js +67 -0
  591. package/dist/motion/types.d.ts +14 -0
  592. package/dist/utils/afterTransitions.d.ts +49 -0
  593. package/dist/utils/afterTransitions.js +79 -0
  594. package/dist/utils/focusFirst.d.ts +13 -0
  595. package/dist/utils/focusFirst.js +24 -0
  596. package/dist/utils/graceArea.d.ts +21 -0
  597. package/dist/utils/graceArea.js +66 -0
  598. package/dist/utils/index.d.ts +18 -0
  599. package/dist/utils/isAboveLayer.d.ts +14 -0
  600. package/dist/utils/isAboveLayer.js +24 -0
  601. package/dist/utils/isAppleTouch.d.ts +10 -0
  602. package/dist/utils/isAppleTouch.js +17 -0
  603. package/dist/utils/isFocusableElement.d.ts +8 -0
  604. package/dist/utils/isFocusableElement.js +13 -0
  605. package/dist/utils/isMeasurableElement.d.ts +11 -0
  606. package/dist/utils/isMeasurableElement.js +16 -0
  607. package/dist/utils/isPrintableKey.d.ts +7 -0
  608. package/dist/utils/isPrintableKey.js +12 -0
  609. package/dist/utils/layerOf.d.ts +12 -0
  610. package/dist/utils/layerOf.js +21 -0
  611. package/dist/utils/nearestShift.d.ts +19 -0
  612. package/dist/utils/nearestShift.js +58 -0
  613. package/dist/utils/positionOrigin.d.ts +34 -0
  614. package/dist/utils/positionOrigin.js +71 -0
  615. package/dist/utils/scrollParent.d.ts +12 -0
  616. package/dist/utils/scrollParent.js +23 -0
  617. package/dist/utils/scrollWindow.d.ts +27 -0
  618. package/dist/utils/scrollWindow.js +50 -0
  619. package/dist/utils/tabStops.d.ts +44 -0
  620. package/dist/utils/tabStops.js +102 -0
  621. package/dist/utils/tabStopsAfter.d.ts +10 -0
  622. package/dist/utils/tabStopsAfter.js +16 -0
  623. package/dist/utils/tabStopsBefore.d.ts +11 -0
  624. package/dist/utils/tabStopsBefore.js +17 -0
  625. package/dist/utils/toCssValue.d.ts +8 -0
  626. package/dist/utils/toCssValue.js +17 -0
  627. package/dist/utils/trapTab.d.ts +16 -0
  628. package/dist/utils/trapTab.js +36 -0
  629. package/dist/utils/types.d.ts +64 -0
  630. package/package.json +43 -4
@@ -0,0 +1,100 @@
1
+ import type { ISlidable } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { ISlidePointerPluginOptions, TSlidePointerPluginEvents } from './types';
5
+ /**
6
+ * TSlidePointerPlugin — указатель перетаскивания: нажатие, протяжка и
7
+ * отпускание мыши, пальца и пера.
8
+ *
9
+ * Операции над DOM — здесь, значение — у владельца: плагин переводит точку
10
+ * указателя в долю хода по коробке дорожки и зовёт команды `ISlidable`
11
+ * (`grab`, `press`, `drag`, `release`, `settle`). Какую ручку вести, куда её
12
+ * поставить и когда слать `commit`, решает владелец. О ползунке плагин не
13
+ * знает — только контракт, поэтому его возьмёт и следующий компонент с
14
+ * перетаскиванием.
15
+ *
16
+ * Слушает корень, а не дорожку: полоса ручек, отступы под ореол и подписи
17
+ * меток — тоже цель для пальца, а долю плагин всё равно считает по коробке
18
+ * дорожки. Нажатие на ручке начинает жест с неё (значение не прыгает), мимо
19
+ * ручек — ставит туда ближайшую.
20
+ *
21
+ * **Щелчок к меткам** — стратегия на режим владельца (`snap`, `strategies/`).
22
+ * Стратегию выбирает подписка на `change:snap`, а не проверка режима в
23
+ * обработчике, и жест держит ту, с которой начался. Стратегия видит ручку:
24
+ * куда та встала бы без щелчка и куда ей встать. Радиус щелчка владелец
25
+ * держит в px, в долю хода его переводит длина дорожки.
26
+ *
27
+ * Своих действий у нажатия нет (`preventDefault`): ни выделения текста, ни
28
+ * своего фокуса браузера. Фокус получает поле той ручки, которую ведёт жест, —
29
+ * так клавиши продолжают с того места, где отпустили указатель.
30
+ *
31
+ * `click`, которым кончается жест, тоже гасится. Внутри подписи `Label` он
32
+ * запустил бы её действие — фокус на первое поле подписи, даже если тянули
33
+ * вторую ручку. С захватом указателя этот `click` приходит в корень, где бы
34
+ * его ни отпустили.
35
+ */
36
+ export declare class TSlidePointerPlugin extends TBasePlugin<ISlidable, TSlidePointerPluginEvents> {
37
+ private _owner;
38
+ private _root;
39
+ private _gesture;
40
+ /** Жест кончился отпусканием: следующий `click` корня — его, а не пользователя */
41
+ private _swallowClick;
42
+ /** Класс стратегии щелчка для следующего жеста — по режиму владельца */
43
+ private _snapStrategy;
44
+ private _holdDelay;
45
+ /** Конец стоянки ручки на метке: стратегии снова нужна ручка, хотя указатель стоит */
46
+ private _wakeTimer;
47
+ install(ctx: IPluginContext, options?: ISlidePointerPluginOptions): void;
48
+ destroy(): void;
49
+ private readonly _onSnapChange;
50
+ private _attach;
51
+ private _detach;
52
+ private readonly _onPointerDown;
53
+ /**
54
+ * Нажали на ручку: жест с неё. Ручка не двигается, и стратегия начинает
55
+ * с того места, где она стоит.
56
+ */
57
+ private _grab;
58
+ /**
59
+ * Нажали мимо ручек: ближайшая встаёт туда, куда её ставит щелчок, — в
60
+ * точку нажатия или на метку рядом с ней.
61
+ */
62
+ private _press;
63
+ /** Стратегия щелчка на жест: точки — метки владельца, радиус — доля длины дорожки. */
64
+ private _snapFor;
65
+ private readonly _onPointerMove;
66
+ /**
67
+ * Повести ручку за указателем жеста — через стратегию щелчка.
68
+ *
69
+ * Ядро ведёт ручку за указателем со смещением захвата, поэтому место от
70
+ * щелчка уходит ему поправкой к указателю: доля, при которой ручка встанет
71
+ * туда, куда её поставил щелчок. Без щелчка поправка — ноль, и ядро
72
+ * получает указатель как есть: «ещё не двигали» оно узнаёт по точному
73
+ * равенству с точкой нажатия. Щелчок оставил ручку на том же месте —
74
+ * сообщать нечего.
75
+ */
76
+ private _follow;
77
+ /** Стоянка на метке кончается — стратегии снова нужна ручка, хотя указатель стоит. */
78
+ private _scheduleWake;
79
+ private readonly _onWake;
80
+ private _cancelWake;
81
+ private readonly _onPointerUp;
82
+ private readonly _onClick;
83
+ /**
84
+ * Закончить жест: отпустили, браузер отнял указатель или корень ушёл.
85
+ * Стратегия решает, довести ли ручку: доводку владелец делает сам, уже без
86
+ * перетаскивания (`settle`).
87
+ */
88
+ private _end;
89
+ /**
90
+ * Фокус — полю ведомой ручки. Без прокрутки: страница не должна прыгать к
91
+ * ручке, которую пользователь и так держит.
92
+ *
93
+ * И без кольца (`focusVisible: false`). Фокус ставит скрипт, а видимость
94
+ * такого фокуса браузер берёт у прошлого: пришёл тот не от мыши — свежая
95
+ * страница, Tab, — и нажатие мышью включило бы `:focus-visible` поля, а с
96
+ * ним кольцо ручки и подсказку `auto`. Их держит только фокус с
97
+ * клавиатуры.
98
+ */
99
+ private _focusActive;
100
+ }
@@ -0,0 +1,268 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TElementPlugin } from "../../element/element.plugin.js";
3
+ import { fractionAt, lengthAlong, slideDirection } from "../direction.js";
4
+ import { fieldOf, thumbsOf, trackOf } from "../parts.js";
5
+ import { TNoneSnapStrategy } from "./strategies/none.strategy.js";
6
+ import { TMagnetSnapStrategy } from "./strategies/magnet.strategy.js";
7
+ import { TPlateauSnapStrategy } from "./strategies/plateau.strategy.js";
8
+ import { TSettleSnapStrategy } from "./strategies/settle.strategy.js";
9
+ import { THoldSnapStrategy } from "./strategies/hold.strategy.js";
10
+ //#region src/custom/slide/pointer/pointer.plugin.ts
11
+ /** Стратегия на каждый режим щелчка: режим выбирает класс, а не ветку в жесте. */
12
+ var SNAP_STRATEGIES = {
13
+ none: TNoneSnapStrategy,
14
+ magnet: TMagnetSnapStrategy,
15
+ plateau: TPlateauSnapStrategy,
16
+ settle: TSettleSnapStrategy,
17
+ hold: THoldSnapStrategy
18
+ };
19
+ /** Стоянка ручки на метке в режиме `hold`, мс, — пока опция не задана. */
20
+ var HOLD_DELAY = 250;
21
+ /**
22
+ * Где ручка жеста была бы без щелчка: сдвинута от своего места при нажатии на
23
+ * столько же, на сколько указатель.
24
+ */
25
+ function unsnapped(gesture) {
26
+ return gesture.anchor + (gesture.at - gesture.origin);
27
+ }
28
+ /**
29
+ * TSlidePointerPlugin — указатель перетаскивания: нажатие, протяжка и
30
+ * отпускание мыши, пальца и пера.
31
+ *
32
+ * Операции над DOM — здесь, значение — у владельца: плагин переводит точку
33
+ * указателя в долю хода по коробке дорожки и зовёт команды `ISlidable`
34
+ * (`grab`, `press`, `drag`, `release`, `settle`). Какую ручку вести, куда её
35
+ * поставить и когда слать `commit`, решает владелец. О ползунке плагин не
36
+ * знает — только контракт, поэтому его возьмёт и следующий компонент с
37
+ * перетаскиванием.
38
+ *
39
+ * Слушает корень, а не дорожку: полоса ручек, отступы под ореол и подписи
40
+ * меток — тоже цель для пальца, а долю плагин всё равно считает по коробке
41
+ * дорожки. Нажатие на ручке начинает жест с неё (значение не прыгает), мимо
42
+ * ручек — ставит туда ближайшую.
43
+ *
44
+ * **Щелчок к меткам** — стратегия на режим владельца (`snap`, `strategies/`).
45
+ * Стратегию выбирает подписка на `change:snap`, а не проверка режима в
46
+ * обработчике, и жест держит ту, с которой начался. Стратегия видит ручку:
47
+ * куда та встала бы без щелчка и куда ей встать. Радиус щелчка владелец
48
+ * держит в px, в долю хода его переводит длина дорожки.
49
+ *
50
+ * Своих действий у нажатия нет (`preventDefault`): ни выделения текста, ни
51
+ * своего фокуса браузера. Фокус получает поле той ручки, которую ведёт жест, —
52
+ * так клавиши продолжают с того места, где отпустили указатель.
53
+ *
54
+ * `click`, которым кончается жест, тоже гасится. Внутри подписи `Label` он
55
+ * запустил бы её действие — фокус на первое поле подписи, даже если тянули
56
+ * вторую ручку. С захватом указателя этот `click` приходит в корень, где бы
57
+ * его ни отпустили.
58
+ */
59
+ var TSlidePointerPlugin = class extends TBasePlugin {
60
+ _owner = null;
61
+ _root = null;
62
+ _gesture = null;
63
+ /** Жест кончился отпусканием: следующий `click` корня — его, а не пользователя */
64
+ _swallowClick = false;
65
+ /** Класс стратегии щелчка для следующего жеста — по режиму владельца */
66
+ _snapStrategy = TNoneSnapStrategy;
67
+ _holdDelay = HOLD_DELAY;
68
+ /** Конец стоянки ручки на метке: стратегии снова нужна ручка, хотя указатель стоит */
69
+ _wakeTimer = null;
70
+ install(ctx, options) {
71
+ super.install(ctx, options);
72
+ this._holdDelay = options?.holdDelay ?? this._holdDelay;
73
+ this._owner = ctx.getInstance();
74
+ const element = ctx.get(TElementPlugin);
75
+ element?.events.on("ready", (node) => this._attach(node));
76
+ element?.events.on("removed", () => this._detach());
77
+ this._snapStrategy = SNAP_STRATEGIES[this._owner?.snap ?? "none"];
78
+ this._owner?.events.on("change:snap", this._onSnapChange);
79
+ }
80
+ destroy() {
81
+ this._detach();
82
+ this._owner?.events.off("change:snap", this._onSnapChange);
83
+ this._owner = null;
84
+ super.destroy();
85
+ }
86
+ _onSnapChange = ({ newValue: snap }) => {
87
+ this._snapStrategy = SNAP_STRATEGIES[snap];
88
+ };
89
+ _attach(root) {
90
+ this._detach();
91
+ this._root = root;
92
+ const target = root;
93
+ target.addEventListener("pointerdown", this._onPointerDown);
94
+ target.addEventListener("pointermove", this._onPointerMove);
95
+ target.addEventListener("pointerup", this._onPointerUp);
96
+ target.addEventListener("pointercancel", this._onPointerUp);
97
+ target.addEventListener("lostpointercapture", this._onPointerUp);
98
+ target.addEventListener("click", this._onClick);
99
+ }
100
+ _detach() {
101
+ this._end();
102
+ const target = this._root;
103
+ target?.removeEventListener("pointerdown", this._onPointerDown);
104
+ target?.removeEventListener("pointermove", this._onPointerMove);
105
+ target?.removeEventListener("pointerup", this._onPointerUp);
106
+ target?.removeEventListener("pointercancel", this._onPointerUp);
107
+ target?.removeEventListener("lostpointercapture", this._onPointerUp);
108
+ target?.removeEventListener("click", this._onClick);
109
+ this._root = null;
110
+ this._swallowClick = false;
111
+ }
112
+ _onPointerDown = (event) => {
113
+ const owner = this._owner;
114
+ const root = this._root;
115
+ if (!owner || !root || this._gesture || event.button !== 0) return;
116
+ const track = trackOf(owner, root);
117
+ if (!track) return;
118
+ const direction = slideDirection(owner, root);
119
+ const box = track.getBoundingClientRect();
120
+ const fraction = fractionAt(direction, box, event);
121
+ const thumb = thumbsOf(owner, track).findIndex((node) => event.target instanceof Node && node.contains(event.target));
122
+ const start = {
123
+ pointer: event.pointerId,
124
+ track,
125
+ direction,
126
+ origin: fraction
127
+ };
128
+ const gesture = thumb >= 0 ? this._grab(owner, thumb, start, box) : this._press(owner, start, box);
129
+ if (!gesture) return;
130
+ event.preventDefault();
131
+ this._gesture = gesture;
132
+ this._swallowClick = false;
133
+ this._scheduleWake(gesture.snap.wakeAt);
134
+ if ("setPointerCapture" in root) root.setPointerCapture(event.pointerId);
135
+ this._focusActive();
136
+ };
137
+ /**
138
+ * Нажали на ручку: жест с неё. Ручка не двигается, и стратегия начинает
139
+ * с того места, где она стоит.
140
+ */
141
+ _grab(owner, thumb, start, box) {
142
+ if (!owner.grab(thumb, start.origin)) return null;
143
+ const anchor = owner.fractions[thumb];
144
+ const snap = this._snapFor(owner, start.direction, box, anchor);
145
+ return {
146
+ ...start,
147
+ snap,
148
+ anchor,
149
+ at: start.origin,
150
+ placed: anchor
151
+ };
152
+ }
153
+ /**
154
+ * Нажали мимо ручек: ближайшая встаёт туда, куда её ставит щелчок, — в
155
+ * точку нажатия или на метку рядом с ней.
156
+ */
157
+ _press(owner, start, box) {
158
+ const anchor = start.origin;
159
+ const snap = this._snapFor(owner, start.direction, box, anchor);
160
+ const placed = snap.follow(anchor, performance.now());
161
+ if (!owner.press(placed)) return null;
162
+ return {
163
+ ...start,
164
+ snap,
165
+ anchor,
166
+ at: start.origin,
167
+ placed
168
+ };
169
+ }
170
+ /** Стратегия щелчка на жест: точки — метки владельца, радиус — доля длины дорожки. */
171
+ _snapFor(owner, direction, box, anchor) {
172
+ const length = lengthAlong(direction, box);
173
+ return new this._snapStrategy({
174
+ points: owner.snapPoints,
175
+ radius: length > 0 ? owner.snapRadius / length : 0,
176
+ anchor,
177
+ holdDelay: this._holdDelay
178
+ });
179
+ }
180
+ _onPointerMove = (event) => {
181
+ const gesture = this._gesture;
182
+ if (!gesture || event.pointerId !== gesture.pointer) return;
183
+ gesture.at = fractionAt(gesture.direction, gesture.track.getBoundingClientRect(), event);
184
+ this._follow(gesture);
185
+ };
186
+ /**
187
+ * Повести ручку за указателем жеста — через стратегию щелчка.
188
+ *
189
+ * Ядро ведёт ручку за указателем со смещением захвата, поэтому место от
190
+ * щелчка уходит ему поправкой к указателю: доля, при которой ручка встанет
191
+ * туда, куда её поставил щелчок. Без щелчка поправка — ноль, и ядро
192
+ * получает указатель как есть: «ещё не двигали» оно узнаёт по точному
193
+ * равенству с точкой нажатия. Щелчок оставил ручку на том же месте —
194
+ * сообщать нечего.
195
+ */
196
+ _follow(gesture) {
197
+ const target = unsnapped(gesture);
198
+ const placed = gesture.snap.follow(target, performance.now());
199
+ this._scheduleWake(gesture.snap.wakeAt);
200
+ if (placed === gesture.placed) return;
201
+ gesture.placed = placed;
202
+ this._owner?.drag(gesture.at + (placed - target));
203
+ this._focusActive();
204
+ }
205
+ /** Стоянка на метке кончается — стратегии снова нужна ручка, хотя указатель стоит. */
206
+ _scheduleWake(at) {
207
+ this._cancelWake();
208
+ if (at === void 0) return;
209
+ this._wakeTimer = setTimeout(this._onWake, Math.max(0, at - performance.now()));
210
+ }
211
+ _onWake = () => {
212
+ this._wakeTimer = null;
213
+ if (this._gesture) this._follow(this._gesture);
214
+ };
215
+ _cancelWake() {
216
+ if (this._wakeTimer === null) return;
217
+ clearTimeout(this._wakeTimer);
218
+ this._wakeTimer = null;
219
+ }
220
+ _onPointerUp = (event) => {
221
+ const gesture = this._gesture;
222
+ if (!gesture || event.pointerId !== gesture.pointer) return;
223
+ this._swallowClick = event.type === "pointerup";
224
+ this._end();
225
+ };
226
+ _onClick = (event) => {
227
+ if (!this._swallowClick) return;
228
+ this._swallowClick = false;
229
+ event.preventDefault();
230
+ };
231
+ /**
232
+ * Закончить жест: отпустили, браузер отнял указатель или корень ушёл.
233
+ * Стратегия решает, довести ли ручку: доводку владелец делает сам, уже без
234
+ * перетаскивания (`settle`).
235
+ */
236
+ _end() {
237
+ const gesture = this._gesture;
238
+ if (!gesture) return;
239
+ this._gesture = null;
240
+ this._cancelWake();
241
+ const settle = gesture.snap.release(unsnapped(gesture));
242
+ if (settle === void 0) this._owner?.release();
243
+ else this._owner?.settle(settle);
244
+ }
245
+ /**
246
+ * Фокус — полю ведомой ручки. Без прокрутки: страница не должна прыгать к
247
+ * ручке, которую пользователь и так держит.
248
+ *
249
+ * И без кольца (`focusVisible: false`). Фокус ставит скрипт, а видимость
250
+ * такого фокуса браузер берёт у прошлого: пришёл тот не от мыши — свежая
251
+ * страница, Tab, — и нажатие мышью включило бы `:focus-visible` поля, а с
252
+ * ним кольцо ручки и подсказку `auto`. Их держит только фокус с
253
+ * клавиатуры.
254
+ */
255
+ _focusActive() {
256
+ const owner = this._owner;
257
+ const gesture = this._gesture;
258
+ const index = owner?.activeThumb;
259
+ if (!owner || !gesture || index === void 0) return;
260
+ const field = fieldOf(thumbsOf(owner, gesture.track)[index]);
261
+ if (field && field.ownerDocument.activeElement !== field) field.focus({
262
+ preventScroll: true,
263
+ focusVisible: false
264
+ });
265
+ }
266
+ };
267
+ //#endregion
268
+ export { TSlidePointerPlugin };
@@ -0,0 +1,16 @@
1
+ import type { ISlideSnapStrategy, TSlideSnapContext } from './types';
2
+ /**
3
+ * TSlideSnapStrategy — общая часть стратегий щелчка: ручка идёт за
4
+ * указателем, отпущенная остаётся, где её отпустили, и ждать нечего.
5
+ *
6
+ * Режим — наследник, который меняет одно из трёх: веток по режиму здесь нет.
7
+ * Наследник без изменений — режим `none` (`TNoneSnapStrategy`).
8
+ */
9
+ export declare abstract class TSlideSnapStrategy implements ISlideSnapStrategy {
10
+ protected readonly _points: readonly number[];
11
+ protected readonly _radius: number;
12
+ constructor({ points, radius }: TSlideSnapContext);
13
+ get wakeAt(): number | undefined;
14
+ follow(target: number, _now: number): number;
15
+ release(_target: number): number | undefined;
16
+ }
@@ -0,0 +1,23 @@
1
+ //#region src/custom/slide/pointer/strategies/base.strategy.ts
2
+ /**
3
+ * TSlideSnapStrategy — общая часть стратегий щелчка: ручка идёт за
4
+ * указателем, отпущенная остаётся, где её отпустили, и ждать нечего.
5
+ *
6
+ * Режим — наследник, который меняет одно из трёх: веток по режиму здесь нет.
7
+ * Наследник без изменений — режим `none` (`TNoneSnapStrategy`).
8
+ */
9
+ var TSlideSnapStrategy = class {
10
+ _points;
11
+ _radius;
12
+ constructor({ points, radius }) {
13
+ this._points = points;
14
+ this._radius = radius > 0 ? radius : 0;
15
+ }
16
+ get wakeAt() {}
17
+ follow(target, _now) {
18
+ return target;
19
+ }
20
+ release(_target) {}
21
+ };
22
+ //#endregion
23
+ export { TSlideSnapStrategy };
@@ -0,0 +1,28 @@
1
+ import { TSlideSnapStrategy } from './base.strategy';
2
+ import type { TSlideSnapContext } from './types';
3
+ /**
4
+ * THoldSnapStrategy — задержка (`hold`): ручка, которая прошла или достигла
5
+ * метки, стоит на ней `holdDelay` мс и потом догоняет указатель. Отпустили,
6
+ * пока стоит, — ручка осталась на метке.
7
+ *
8
+ * Время стратегия получает с каждым шагом (`now`), а не заводит таймер сама:
9
+ * когда стоянка кончится, она сообщает (`wakeAt`), и плагин зовёт её снова,
10
+ * хотя указатель стоит. Пока ручка стоит, другие метки на пути не держат:
11
+ * догнав указатель, она проходит их без остановки.
12
+ *
13
+ * Путь — ручки, а за краями хода её нет: указатель за краем дорожки держит
14
+ * её на краю. Поэтому путь прижат к ходу — метку на краю ручка, вернувшаяся
15
+ * из-за края, покидает, а не пересекает снова.
16
+ */
17
+ export declare class THoldSnapStrategy extends TSlideSnapStrategy {
18
+ private readonly _delay;
19
+ /**
20
+ * Где ручка была бы без щелчка шагом раньше, в пределах хода, — от неё
21
+ * виден путь через метку
22
+ */
23
+ private _last;
24
+ private _stop;
25
+ constructor(context: TSlideSnapContext);
26
+ get wakeAt(): number | undefined;
27
+ follow(target: number, now: number): number;
28
+ }
@@ -0,0 +1,48 @@
1
+ import { TSlideSnapStrategy } from "./base.strategy.js";
2
+ import { crossedPoint, withinTravel } from "./points.js";
3
+ //#region src/custom/slide/pointer/strategies/hold.strategy.ts
4
+ /**
5
+ * THoldSnapStrategy — задержка (`hold`): ручка, которая прошла или достигла
6
+ * метки, стоит на ней `holdDelay` мс и потом догоняет указатель. Отпустили,
7
+ * пока стоит, — ручка осталась на метке.
8
+ *
9
+ * Время стратегия получает с каждым шагом (`now`), а не заводит таймер сама:
10
+ * когда стоянка кончится, она сообщает (`wakeAt`), и плагин зовёт её снова,
11
+ * хотя указатель стоит. Пока ручка стоит, другие метки на пути не держат:
12
+ * догнав указатель, она проходит их без остановки.
13
+ *
14
+ * Путь — ручки, а за краями хода её нет: указатель за краем дорожки держит
15
+ * её на краю. Поэтому путь прижат к ходу — метку на краю ручка, вернувшаяся
16
+ * из-за края, покидает, а не пересекает снова.
17
+ */
18
+ var THoldSnapStrategy = class extends TSlideSnapStrategy {
19
+ _delay;
20
+ /**
21
+ * Где ручка была бы без щелчка шагом раньше, в пределах хода, — от неё
22
+ * виден путь через метку
23
+ */
24
+ _last;
25
+ _stop = void 0;
26
+ constructor(context) {
27
+ super(context);
28
+ this._delay = context.holdDelay;
29
+ this._last = withinTravel(context.anchor);
30
+ }
31
+ get wakeAt() {
32
+ return this._stop?.until;
33
+ }
34
+ follow(target, now) {
35
+ const from = this._last;
36
+ const to = withinTravel(target);
37
+ this._last = to;
38
+ if (this._stop && now < this._stop.until) return this._stop.point;
39
+ const point = crossedPoint(this._points, from, to);
40
+ this._stop = point === void 0 ? void 0 : {
41
+ point,
42
+ until: now + this._delay
43
+ };
44
+ return point ?? target;
45
+ }
46
+ };
47
+ //#endregion
48
+ export { THoldSnapStrategy };
@@ -0,0 +1,7 @@
1
+ export { TSlideSnapStrategy } from './base.strategy';
2
+ export { TNoneSnapStrategy } from './none.strategy';
3
+ export { TMagnetSnapStrategy } from './magnet.strategy';
4
+ export { TPlateauSnapStrategy } from './plateau.strategy';
5
+ export { TSettleSnapStrategy } from './settle.strategy';
6
+ export { THoldSnapStrategy } from './hold.strategy';
7
+ export type { ISlideSnapStrategy, TSlideSnapContext, TSlideSnapStrategyCtor, TPlateauKnot, THoldStop, } from './types';
@@ -0,0 +1,11 @@
1
+ import { TSlideSnapStrategy } from './base.strategy';
2
+ /**
3
+ * TMagnetSnapStrategy — притяжение (`magnet`): в радиусе метки ручка стоит на
4
+ * ней, за радиусом идёт за указателем.
5
+ *
6
+ * Так же притягивает и нажатие мимо ручек: нажали рядом с меткой — ручка
7
+ * встала на метку.
8
+ */
9
+ export declare class TMagnetSnapStrategy extends TSlideSnapStrategy {
10
+ follow(target: number): number;
11
+ }
@@ -0,0 +1,17 @@
1
+ import { TSlideSnapStrategy } from "./base.strategy.js";
2
+ import { nearestPoint } from "./points.js";
3
+ //#region src/custom/slide/pointer/strategies/magnet.strategy.ts
4
+ /**
5
+ * TMagnetSnapStrategy — притяжение (`magnet`): в радиусе метки ручка стоит на
6
+ * ней, за радиусом идёт за указателем.
7
+ *
8
+ * Так же притягивает и нажатие мимо ручек: нажали рядом с меткой — ручка
9
+ * встала на метку.
10
+ */
11
+ var TMagnetSnapStrategy = class extends TSlideSnapStrategy {
12
+ follow(target) {
13
+ return nearestPoint(this._points, target, this._radius) ?? target;
14
+ }
15
+ };
16
+ //#endregion
17
+ export { TMagnetSnapStrategy };
@@ -0,0 +1,7 @@
1
+ import { TSlideSnapStrategy } from './base.strategy';
2
+ /**
3
+ * TNoneSnapStrategy — щелчка нет (`none`): ручка идёт за указателем, метки
4
+ * её не притягивают. Всё нужное уже в общей части.
5
+ */
6
+ export declare class TNoneSnapStrategy extends TSlideSnapStrategy {
7
+ }
@@ -0,0 +1,9 @@
1
+ import { TSlideSnapStrategy } from "./base.strategy.js";
2
+ //#region src/custom/slide/pointer/strategies/none.strategy.ts
3
+ /**
4
+ * TNoneSnapStrategy — щелчка нет (`none`): ручка идёт за указателем, метки
5
+ * её не притягивают. Всё нужное уже в общей части.
6
+ */
7
+ var TNoneSnapStrategy = class extends TSlideSnapStrategy {};
8
+ //#endregion
9
+ export { TNoneSnapStrategy };
@@ -0,0 +1,24 @@
1
+ import { TSlideSnapStrategy } from './base.strategy';
2
+ import type { TSlideSnapContext } from './types';
3
+ /**
4
+ * TPlateauSnapStrategy — плато (`plateau`): метка занимает два радиуса хода
5
+ * указателя, и всё это время ручка стоит на ней. Промежутки между метками
6
+ * сжаты — там ручка идёт чуть быстрее указателя, — и недостижимых значений
7
+ * нет: уйти с метки — протащить указатель за плато.
8
+ *
9
+ * Перевод — ломаная (`TPlateauKnot`): на плато ручка стоит, между плато идёт
10
+ * по прямой, края хода остаются краями. С каждой стороны метки плато не
11
+ * шире радиуса и не больше четверти промежутка до соседней метки — половины
12
+ * до края хода: между плато остаётся хотя бы половина промежутка, и ручка там
13
+ * быстрее указателя не больше чем вдвое.
14
+ *
15
+ * Ручка, которую взяли вне плато, стоит на месте: её место — лишний узел
16
+ * ломаной (`anchor`), и промежуток сжат по обе стороны от него. Иначе первое
17
+ * же движение перенесло бы ручку туда, где её место на сжатой шкале. Взятая
18
+ * на плато встаёт на его метку.
19
+ */
20
+ export declare class TPlateauSnapStrategy extends TSlideSnapStrategy {
21
+ private readonly _knots;
22
+ constructor(context: TSlideSnapContext);
23
+ follow(target: number): number;
24
+ }
@@ -0,0 +1,81 @@
1
+ import { TSlideSnapStrategy } from "./base.strategy.js";
2
+ import { withinTravel } from "./points.js";
3
+ //#region src/custom/slide/pointer/strategies/plateau.strategy.ts
4
+ /**
5
+ * TPlateauSnapStrategy — плато (`plateau`): метка занимает два радиуса хода
6
+ * указателя, и всё это время ручка стоит на ней. Промежутки между метками
7
+ * сжаты — там ручка идёт чуть быстрее указателя, — и недостижимых значений
8
+ * нет: уйти с метки — протащить указатель за плато.
9
+ *
10
+ * Перевод — ломаная (`TPlateauKnot`): на плато ручка стоит, между плато идёт
11
+ * по прямой, края хода остаются краями. С каждой стороны метки плато не
12
+ * шире радиуса и не больше четверти промежутка до соседней метки — половины
13
+ * до края хода: между плато остаётся хотя бы половина промежутка, и ручка там
14
+ * быстрее указателя не больше чем вдвое.
15
+ *
16
+ * Ручка, которую взяли вне плато, стоит на месте: её место — лишний узел
17
+ * ломаной (`anchor`), и промежуток сжат по обе стороны от него. Иначе первое
18
+ * же движение перенесло бы ручку туда, где её место на сжатой шкале. Взятая
19
+ * на плато встаёт на его метку.
20
+ */
21
+ var TPlateauSnapStrategy = class extends TSlideSnapStrategy {
22
+ _knots;
23
+ constructor(context) {
24
+ super(context);
25
+ this._knots = anchored(plateau(this._points, this._radius), context.anchor);
26
+ }
27
+ follow(target) {
28
+ return along(this._knots, target);
29
+ }
30
+ };
31
+ /**
32
+ * Ломаная плато: края хода и по два узла на метку — начало и конец её плато.
33
+ * Узел, который не дальше предыдущего, пропущен: метка на краю хода и нулевой
34
+ * радиус дают узел поверх соседнего с тем же «встаёт».
35
+ */
36
+ function plateau(points, radius) {
37
+ const last = points.length - 1;
38
+ const knots = [];
39
+ const add = (knot) => {
40
+ const previous = knots.at(-1);
41
+ if (!previous || knot[0] > previous[0]) knots.push(knot);
42
+ };
43
+ add([0, 0]);
44
+ points.forEach((point, index) => {
45
+ const before = index > 0 ? (point - points[index - 1]) / 4 : point / 2;
46
+ const after = index < last ? (points[index + 1] - point) / 4 : (1 - point) / 2;
47
+ add([point - Math.min(radius, before), point]);
48
+ add([point + Math.min(radius, after), point]);
49
+ });
50
+ add([1, 1]);
51
+ return knots;
52
+ }
53
+ /**
54
+ * Ломаная с узлом в якоре — там, где ручка стоит в начале жеста. Якорь на
55
+ * плато или в узле ничего не добавляет: на плато ручка и так встаёт на метку,
56
+ * а узел уже на своём месте.
57
+ */
58
+ function anchored(knots, anchor) {
59
+ const index = knots.findIndex(([target]) => target >= anchor);
60
+ if (index <= 0 || knots[index][0] === anchor) return knots;
61
+ if (knots[index - 1][1] === knots[index][1]) return knots;
62
+ return [
63
+ ...knots.slice(0, index),
64
+ [anchor, anchor],
65
+ ...knots.slice(index)
66
+ ];
67
+ }
68
+ /**
69
+ * Где встаёт ручка, которая без щелчка была бы в `target`: по ломаной, за
70
+ * краями хода — край. В узле — ровно его «встаёт»: якорь отдаётся как есть.
71
+ */
72
+ function along(knots, target) {
73
+ const at = withinTravel(target);
74
+ let index = 0;
75
+ while (index < knots.length - 2 && knots[index + 1][0] <= at) index++;
76
+ const [fromTarget, fromPlaced] = knots[index];
77
+ const [toTarget, toPlaced] = knots[index + 1];
78
+ return fromPlaced + (at - fromTarget) * (toPlaced - fromPlaced) / (toTarget - fromTarget);
79
+ }
80
+ //#endregion
81
+ export { TPlateauSnapStrategy };