@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,91 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TElementPlugin } from "../../element/element.plugin.js";
3
+ import { fieldOf, thumbsOf, trackOf } from "../../slide/parts.js";
4
+ //#region src/custom/rating/validity/validity.plugin.ts
5
+ /**
6
+ * TRatingValidityPlugin — обязательная оценка: пока её нет, форма не
7
+ * отправляется.
8
+ *
9
+ * 0 у оценки значит «оценки нет», и обязательная оценка с 0 — то же, что
10
+ * пустое поле с `required`. Но поле оценки — `input[type=range]`: ни
11
+ * `required`, ни состояния «пусто» у него нет, у ползунка значение есть
12
+ * всегда. Поэтому ошибку полю ставит плагин — `setCustomValidity` со строкой
13
+ * локали `rating.required`, пока оценка обязательна, не только для показа и
14
+ * равна 0, — и снимает, когда условие ушло. Остальное делает браузер, как с
15
+ * любым неверным полем: не отправляет форму, ставит фокус на поле и
16
+ * показывает сообщение, а `disabled` из проверки исключает сам.
17
+ *
18
+ * Только для показа (`readonly`) ошибки нет, как у нативного поля `readonly`:
19
+ * его браузер тоже не проверяет. Свойства «неверно» у ядра нет: когда
20
+ * показывать ошибку, решает браузер, — до первой отправки нетронутая оценка
21
+ * не горит, — и тема красит её по `:user-invalid` поля.
22
+ *
23
+ * Пересчёт — на появление узла, смену оценки, обязательности, режима только
24
+ * для показа и локали. Без узла плагин ничего не делает: сборка идёт и на
25
+ * сервере, а поле, которому ставить ошибку, появится с `ready`. Отпустил узел
26
+ * или снят сам — ошибку с поля снимает: ставил её он.
27
+ */
28
+ var TRatingValidityPlugin = class extends TBasePlugin {
29
+ _owner = null;
30
+ /** Источник локали набора — за строкой ошибки на её языке */
31
+ _locale = null;
32
+ /** Корень оценки, пока узел объявлен: поле плагин находит в нём */
33
+ _root = null;
34
+ install(ctx, options) {
35
+ super.install(ctx, options);
36
+ const owner = ctx.getInstance();
37
+ if (!owner) return;
38
+ this._owner = owner;
39
+ this._locale = ctx.locale;
40
+ const element = ctx.get(TElementPlugin);
41
+ element?.events.on("ready", (root) => this._attach(root));
42
+ element?.events.on("removed", () => this._detach());
43
+ const sync = () => this._sync();
44
+ this._listenTo(owner.events, "change:value", sync);
45
+ this._listenTo(owner.events, "change:required", sync);
46
+ this._listenTo(owner.events, "change:readonly", sync);
47
+ this._listenTo(ctx.locale.events, "change", sync);
48
+ }
49
+ destroy() {
50
+ this._detach();
51
+ this._owner = null;
52
+ this._locale = null;
53
+ super.destroy();
54
+ }
55
+ _attach(root) {
56
+ this._detach();
57
+ this._root = root;
58
+ this._sync();
59
+ }
60
+ _detach() {
61
+ this._field()?.setCustomValidity("");
62
+ this._root = null;
63
+ }
64
+ /** Ошибка полю — по текущей оценке; оценки нет только у обязательной. */
65
+ _sync() {
66
+ const owner = this._owner;
67
+ const field = this._field();
68
+ if (!owner || !field) return;
69
+ field.setCustomValidity(this._missing(owner) ? this._message() : "");
70
+ }
71
+ /**
72
+ * Обязательной оценки нет: она равна 0 и её можно поставить. Только для
73
+ * показа её не ставят вовсе, и спрашивать её с пользователя нечего.
74
+ */
75
+ _missing(owner) {
76
+ return owner.required && !owner.readonly && owner.value === 0;
77
+ }
78
+ _message() {
79
+ return this._locale?.locale.translations.rating.required ?? "";
80
+ }
81
+ /** Поле — у единственной ручки оценки, её `input`; узла нет — и поля нет. */
82
+ _field() {
83
+ const owner = this._owner;
84
+ const root = this._root;
85
+ if (!owner || !root) return null;
86
+ const track = trackOf(owner, root);
87
+ return track ? fieldOf(thumbsOf(owner, track)[0]) : null;
88
+ }
89
+ };
90
+ //#endregion
91
+ export { TRatingValidityPlugin };
@@ -0,0 +1 @@
1
+ export { TReadyPlugin } from './ready.plugin';
@@ -0,0 +1,14 @@
1
+ import { TBasePlugin } from '../../base';
2
+ import type { IPluginContext } from '../../base';
3
+ /**
4
+ * Reports component availability through IComponentView.ready: the instance
5
+ * exists and its root DOM element has been announced by TElementPlugin.
6
+ * Sets true on element ready and false on removal, including replacement.
7
+ *
8
+ * This is an availability signal, not a barrier for other plugins' DOM
9
+ * handlers or asynchronous work. The instance itself exists before the root.
10
+ * TLayer uses the same flag to expose its stack position while available.
11
+ */
12
+ export declare class TReadyPlugin extends TBasePlugin {
13
+ install(ctx: IPluginContext): void;
14
+ }
@@ -0,0 +1,28 @@
1
+ import { TBasePlugin } from "../../base/base.class.js";
2
+ import { TElementPlugin } from "../element/element.plugin.js";
3
+ //#region src/custom/ready/ready.plugin.ts
4
+ /**
5
+ * Reports component availability through IComponentView.ready: the instance
6
+ * exists and its root DOM element has been announced by TElementPlugin.
7
+ * Sets true on element ready and false on removal, including replacement.
8
+ *
9
+ * This is an availability signal, not a barrier for other plugins' DOM
10
+ * handlers or asynchronous work. The instance itself exists before the root.
11
+ * TLayer uses the same flag to expose its stack position while available.
12
+ */
13
+ var TReadyPlugin = class extends TBasePlugin {
14
+ install(ctx) {
15
+ super.install(ctx);
16
+ const elementPlugin = ctx.get(TElementPlugin);
17
+ elementPlugin?.events.on("ready", () => {
18
+ const instance = ctx.getInstance();
19
+ if (instance) instance.ready = true;
20
+ });
21
+ elementPlugin?.events.on("removed", () => {
22
+ const instance = ctx.getInstance();
23
+ if (instance) instance.ready = false;
24
+ });
25
+ }
26
+ };
27
+ //#endregion
28
+ export { TReadyPlugin };
@@ -0,0 +1,2 @@
1
+ export * from './viewport';
2
+ export * from './names';
@@ -0,0 +1 @@
1
+ export * from './names.plugin';
@@ -0,0 +1,11 @@
1
+ import type { IScroller } from '@soxa-ui/core';
2
+ import { TNamesPlugin } from '../../../locale/names.plugin';
3
+ import type { TTranslations } from '../../../locale/types';
4
+ /**
5
+ * TScrollerNamesPlugin — имена кнопок листания ленты от локали: в
6
+ * `prevAria` и `nextAria`. Кнопка со стрелкой без имени для скринридера
7
+ * безымянна.
8
+ */
9
+ export declare class TScrollerNamesPlugin extends TNamesPlugin<IScroller> {
10
+ protected _name(owner: IScroller, translations: TTranslations): void;
11
+ }
@@ -0,0 +1,15 @@
1
+ import { TNamesPlugin } from "../../../locale/names.plugin.js";
2
+ //#region src/custom/scroller/names/names.plugin.ts
3
+ /**
4
+ * TScrollerNamesPlugin — имена кнопок листания ленты от локали: в
5
+ * `prevAria` и `nextAria`. Кнопка со стрелкой без имени для скринридера
6
+ * безымянна.
7
+ */
8
+ var TScrollerNamesPlugin = class extends TNamesPlugin {
9
+ _name(owner, translations) {
10
+ owner.prevAria.add("aria-label", translations.scroller.prev);
11
+ owner.nextAria.add("aria-label", translations.scroller.next);
12
+ }
13
+ };
14
+ //#endregion
15
+ export { TScrollerNamesPlugin };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Края ленты — чистая функция, без DOM.
3
+ *
4
+ * Весь счёт здесь, а плагин рядом только читает у вьюпорта три числа. Отсюда
5
+ * и проверяемость: дробные ширины, зум и RTL проверяются числами, а не
6
+ * настоящей раскладкой.
7
+ */
8
+ /** Три числа, которые вьюпорт знает о себе сам. */
9
+ export type TEdgesOptions = {
10
+ /**
11
+ * Положение ленты в системе координат браузера.
12
+ *
13
+ * В RTL оно отрицательное: начало строки — правый край, и от него лента
14
+ * уезжает влево. Поэтому знак здесь не значим, значим модуль — расстояние
15
+ * от логического начала.
16
+ */
17
+ scrollLeft: number;
18
+ /** Видимая ширина вьюпорта — она же шаг листания. */
19
+ clientWidth: number;
20
+ /** Полная ширина содержимого. */
21
+ scrollWidth: number;
22
+ };
23
+ /** Есть ли куда листать в каждую сторону. */
24
+ export type TScrollerEdges = {
25
+ canPrev: boolean;
26
+ canNext: boolean;
27
+ };
28
+ /**
29
+ * Края ленты по замеру вьюпорта.
30
+ *
31
+ * Нулевая видимая ширина — это «раскладки ещё нет», а не «листать некуда»:
32
+ * до первой раскладки все три числа нули, и «вперёд» нечему включать.
33
+ */
34
+ export declare function resolveEdges({ scrollLeft, clientWidth, scrollWidth, }: TEdgesOptions): TScrollerEdges;
@@ -0,0 +1,29 @@
1
+ //#region src/custom/scroller/viewport/edges.ts
2
+ /**
3
+ * Допуск в пиксель.
4
+ *
5
+ * `scrollLeft + clientWidth === scrollWidth` на дробных ширинах и при зуме не
6
+ * сходится: браузер округляет `clientWidth` и `scrollWidth` до целых, а
7
+ * `scrollLeft` отдаёт дробным. Без допуска кнопка «вперёд» на самом краю не
8
+ * гасла бы, а лента доезжала бы до «ещё чуть-чуть» без движения.
9
+ */
10
+ var TOLERANCE = 1;
11
+ /**
12
+ * Края ленты по замеру вьюпорта.
13
+ *
14
+ * Нулевая видимая ширина — это «раскладки ещё нет», а не «листать некуда»:
15
+ * до первой раскладки все три числа нули, и «вперёд» нечему включать.
16
+ */
17
+ function resolveEdges({ scrollLeft, clientWidth, scrollWidth }) {
18
+ if (clientWidth <= 0) return {
19
+ canPrev: false,
20
+ canNext: false
21
+ };
22
+ const offset = Math.abs(scrollLeft);
23
+ return {
24
+ canPrev: offset > TOLERANCE,
25
+ canNext: offset + clientWidth < scrollWidth - TOLERANCE
26
+ };
27
+ }
28
+ //#endregion
29
+ export { resolveEdges };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Доводка элемента под фокусом в окно снапа ленты — чистая функция, без DOM.
3
+ *
4
+ * Плагин рядом только читает у вьюпорта окно снапа и два прямоугольника, а
5
+ * весь счёт здесь. Отсюда и проверяемость, как у `edges.ts`: RTL, субпиксели и
6
+ * элемент шире окна проверяются числами, а не настоящей раскладкой.
7
+ *
8
+ * Своё у ленты здесь только снап. Проверку «уже в окне» и элемент ленты шире
9
+ * окна она берёт у общей доводки (`nearestShift`), которой пользуется и ряд
10
+ * тегов `scroll`.
11
+ */
12
+ import type { TFocusShiftOptions } from './types';
13
+ /**
14
+ * На сколько сдвинуть ленту, чтобы элемент под фокусом встал в окно снапа, —
15
+ * или `null`, если он уже там.
16
+ *
17
+ * С ним в окно встаёт и элемент ленты, в котором он лежит: снап выравнивает
18
+ * элементы, и единица листания — элемент, а не его часть под фокусом. Не
19
+ * шире окна — целиком, и «уже в окне» значит «в окне весь элемент ленты».
20
+ * Оставь лента его у края, докрутку до конца окна — фокусом браузера или
21
+ * чужим `scrollIntoView` — снап вернул бы к соседней точке, и элемент так и
22
+ * остался бы у края. А у тега кольцо фокуса рисует пилюля, и крестик без
23
+ * подписи не скажет, какой тег он закроет.
24
+ *
25
+ * Сдвиг ведёт к точке снапа элемента ленты, а не просто к краю окна: снап
26
+ * действует и на программную прокрутку и вернул бы ленту к соседней точке.
27
+ * Элемент ленты не шире окна — точка одна: его начало у начала окна, и сам
28
+ * он тогда в окне целиком. Шире окна — точка снапа любое положение, где он
29
+ * накрывает окно (так их считает и сам снап), а «уже в окне» смотрит по
30
+ * одному элементу под фокусом: целиком элемент ленты в окно не встанет. Из
31
+ * таких положений берётся ближайшее, при котором элемент под фокусом в окне:
32
+ * с одним «начало к началу» крестик в конце длинного тега остался бы за
33
+ * краем.
34
+ *
35
+ * Элемент под фокусом шире окна в него не встанет ни при каком сдвиге и
36
+ * доводится до ближайшего положения, где накрывает окно: больше окна от него
37
+ * всё равно не увидеть.
38
+ */
39
+ export declare function resolveFocusShift({ snapport, focused, item, rtl, }: TFocusShiftOptions): number | null;
@@ -0,0 +1,61 @@
1
+ import { nearestShift } from "../../../utils/nearestShift.js";
2
+ //#region src/custom/scroller/viewport/focus.ts
3
+ /**
4
+ * Доводка элемента под фокусом в окно снапа ленты — чистая функция, без DOM.
5
+ *
6
+ * Плагин рядом только читает у вьюпорта окно снапа и два прямоугольника, а
7
+ * весь счёт здесь. Отсюда и проверяемость, как у `edges.ts`: RTL, субпиксели и
8
+ * элемент шире окна проверяются числами, а не настоящей раскладкой.
9
+ *
10
+ * Своё у ленты здесь только снап. Проверку «уже в окне» и элемент ленты шире
11
+ * окна она берёт у общей доводки (`nearestShift`), которой пользуется и ряд
12
+ * тегов `scroll`.
13
+ */
14
+ var width = (span) => span.right - span.left;
15
+ /**
16
+ * На сколько сдвинуть ленту, чтобы элемент под фокусом встал в окно снапа, —
17
+ * или `null`, если он уже там.
18
+ *
19
+ * С ним в окно встаёт и элемент ленты, в котором он лежит: снап выравнивает
20
+ * элементы, и единица листания — элемент, а не его часть под фокусом. Не
21
+ * шире окна — целиком, и «уже в окне» значит «в окне весь элемент ленты».
22
+ * Оставь лента его у края, докрутку до конца окна — фокусом браузера или
23
+ * чужим `scrollIntoView` — снап вернул бы к соседней точке, и элемент так и
24
+ * остался бы у края. А у тега кольцо фокуса рисует пилюля, и крестик без
25
+ * подписи не скажет, какой тег он закроет.
26
+ *
27
+ * Сдвиг ведёт к точке снапа элемента ленты, а не просто к краю окна: снап
28
+ * действует и на программную прокрутку и вернул бы ленту к соседней точке.
29
+ * Элемент ленты не шире окна — точка одна: его начало у начала окна, и сам
30
+ * он тогда в окне целиком. Шире окна — точка снапа любое положение, где он
31
+ * накрывает окно (так их считает и сам снап), а «уже в окне» смотрит по
32
+ * одному элементу под фокусом: целиком элемент ленты в окно не встанет. Из
33
+ * таких положений берётся ближайшее, при котором элемент под фокусом в окне:
34
+ * с одним «начало к началу» крестик в конце длинного тега остался бы за
35
+ * краем.
36
+ *
37
+ * Элемент под фокусом шире окна в него не встанет ни при каком сдвиге и
38
+ * доводится до ближайшего положения, где накрывает окно: больше окна от него
39
+ * всё равно не увидеть.
40
+ */
41
+ function resolveFocusShift({ snapport, focused, item, rtl }) {
42
+ if (width(item) <= width(snapport)) {
43
+ if (nearestShift({
44
+ scrollWindow: snapport,
45
+ focused,
46
+ item
47
+ }) === null) return null;
48
+ return rtl ? item.right - snapport.right : item.left - snapport.left;
49
+ }
50
+ if (nearestShift({
51
+ scrollWindow: snapport,
52
+ focused
53
+ }) === null) return null;
54
+ return nearestShift({
55
+ scrollWindow: snapport,
56
+ focused,
57
+ item
58
+ });
59
+ }
60
+ //#endregion
61
+ export { resolveFocusShift };
@@ -0,0 +1,6 @@
1
+ export { TScrollerViewportPlugin } from './viewport.plugin';
2
+ export { resolveEdges } from './edges';
3
+ export type { TEdgesOptions, TScrollerEdges } from './edges';
4
+ export { resolveFocusShift } from './focus';
5
+ export type { TFocusShiftOptions, TInlineSpan, TScrollerViewportPluginEvents } from './types';
6
+ export { viewportStopOf } from './stop';
@@ -0,0 +1,24 @@
1
+ import type { IScroller } from '@soxa-ui/core';
2
+ import type { IPluginContext } from '../../../base';
3
+ /**
4
+ * Вьюпорт ленты — `__viewport` в корне: по классу владельца
5
+ * (`classes.resolve`), а не строкой. Первый в корне — свой: вьюпорт вложенной
6
+ * ленты лежит внутри своего. `null` — вьюпорта в корне нет.
7
+ *
8
+ * Один на вьюпорт ленты (`TScrollerViewportPlugin`) и узел фокуса ленты
9
+ * (`viewportStopOf`).
10
+ */
11
+ export declare function viewportOf(owner: IScroller, root: Element): Element | null;
12
+ /**
13
+ * Остановка ленты — узел фокуса Scroller (`focusTarget` плагина действия):
14
+ * запись `focused = true` ставит фокус туда же, куда ведёт Tab, а не на кнопку
15
+ * «назад» перед вьюпортом.
16
+ *
17
+ * Остановку решают так же, как её ставит лента: вьюпорт — сам остановка, пока
18
+ * своих остановок внутри нет, а листать есть куда (`viewportTabIndex` ядра,
19
+ * по замеру `TScrollerViewportPlugin`), — тогда фокус на нём. Иначе — первая
20
+ * остановка внутри вьюпорта: элемент содержимого.
21
+ *
22
+ * `null` — остановок у ленты нет: внутри ни одной, а листать некуда.
23
+ */
24
+ export declare function viewportStopOf(root: Element, ctx: IPluginContext): Element | null;
@@ -0,0 +1,34 @@
1
+ import { tabStops } from "../../../utils/tabStops.js";
2
+ //#region src/custom/scroller/viewport/stop.ts
3
+ /**
4
+ * Вьюпорт ленты — `__viewport` в корне: по классу владельца
5
+ * (`classes.resolve`), а не строкой. Первый в корне — свой: вьюпорт вложенной
6
+ * ленты лежит внутри своего. `null` — вьюпорта в корне нет.
7
+ *
8
+ * Один на вьюпорт ленты (`TScrollerViewportPlugin`) и узел фокуса ленты
9
+ * (`viewportStopOf`).
10
+ */
11
+ function viewportOf(owner, root) {
12
+ return root.querySelector(owner.classes.resolve("__viewport", { point: true }));
13
+ }
14
+ /**
15
+ * Остановка ленты — узел фокуса Scroller (`focusTarget` плагина действия):
16
+ * запись `focused = true` ставит фокус туда же, куда ведёт Tab, а не на кнопку
17
+ * «назад» перед вьюпортом.
18
+ *
19
+ * Остановку решают так же, как её ставит лента: вьюпорт — сам остановка, пока
20
+ * своих остановок внутри нет, а листать есть куда (`viewportTabIndex` ядра,
21
+ * по замеру `TScrollerViewportPlugin`), — тогда фокус на нём. Иначе — первая
22
+ * остановка внутри вьюпорта: элемент содержимого.
23
+ *
24
+ * `null` — остановок у ленты нет: внутри ни одной, а листать некуда.
25
+ */
26
+ function viewportStopOf(root, ctx) {
27
+ const owner = ctx.getInstance();
28
+ const viewport = owner ? viewportOf(owner, root) : null;
29
+ if (!owner || !viewport) return null;
30
+ if (owner.viewportTabIndex !== void 0) return viewport;
31
+ return tabStops(viewport)[0] ?? null;
32
+ }
33
+ //#endregion
34
+ export { viewportOf, viewportStopOf };
@@ -0,0 +1,31 @@
1
+ import type { TPluginEvents } from '../../../base';
2
+ import type { TInlineSpan } from '../../../utils';
3
+ /**
4
+ * Своих событий у плагина нет: результат замера виден через инстанс —
5
+ * `canPrev`/`canNext` и `data-can-*` отдаёт ядро, оно же сообщает об их
6
+ * смене. Второй путь к тому же факту, через события плагина, разошёлся бы
7
+ * с первым.
8
+ */
9
+ export type TScrollerViewportPluginEvents = TPluginEvents;
10
+ /**
11
+ * Отрезок по строке — общий тип доводки (`utils`). Наружу его отдаёт лента:
12
+ * им описаны опции `resolveFocusShift`.
13
+ */
14
+ export type { TInlineSpan };
15
+ /** Что плагин намерил, когда фокус пришёл в ленту, — всё отрезками по строке. */
16
+ export type TFocusShiftOptions = {
17
+ /**
18
+ * Окно снапа — паддинг-бокс вьюпорта без `scroll-padding` с каждой
19
+ * стороны. Тема делает его чистой частью ленты, между подсказками у краёв.
20
+ */
21
+ snapport: TInlineSpan;
22
+ /** Элемент под фокусом. */
23
+ focused: TInlineSpan;
24
+ /**
25
+ * Элемент ленты, в котором он лежит, — прямой ребёнок вьюпорта. Точки
26
+ * снапа тема ставит на них: `scroll-snap-align: start`.
27
+ */
28
+ item: TInlineSpan;
29
+ /** Письмо справа налево: начало строки — правый край. */
30
+ rtl: boolean;
31
+ };
@@ -0,0 +1,163 @@
1
+ import type { IScroller } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TScrollerViewportPluginEvents } from './types';
5
+ /**
6
+ * TScrollerViewportPlugin — вьюпорт ленты: замер краёв, само листание,
7
+ * доводка элемента под фокусом в окно снапа и фокус кнопки, выключенной у
8
+ * края.
9
+ *
10
+ * Плагин, а не расширение или разметка: и то, и другое здесь — операции над
11
+ * DOM. Где сейчас лента, сколько у неё содержимого и есть ли внутри свои
12
+ * остановки Tab, знает только живой узел; результат уходит в ядро одним
13
+ * вызовом (`IScroller.notifyViewport`) — тем же приёмом, каким клавиатура
14
+ * тегов сообщает тег под фокусом (`notifyFocus`).
15
+ *
16
+ * Клики по кнопкам плагин ловит сам, слушателем на корне, и зовёт команды
17
+ * ядра (приём `TSelectPointerPlugin` → `owner.toggleOpen()`). В разметке
18
+ * обработчиков нет: связка «нажали ⇄ листаем» повторялась бы в каждом из
19
+ * шести адаптеров.
20
+ *
21
+ * Поводов пересчитать четыре — размер вьюпорта, размер его детей, смена
22
+ * состава и прокрутка, — и все они сводятся в **один проход раз в кадр**.
23
+ * Писать в DOM прямо из колбэка наблюдателя нельзя: петля
24
+ * `ResizeObserver loop completed with undelivered notifications` роняет
25
+ * браузерный прогон (сторож `playground/vue/browser/setup.ts`).
26
+ *
27
+ * **Фокус.** Элемент под фокусом браузер докручивает, только если тот целиком
28
+ * ушёл из окна снапа, а частично видимый оставляет на месте — у края, под
29
+ * подсказкой темы. Поэтому по `focusin` плагин доводит элемент в окно сам
30
+ * (счёт — `resolveFocusShift`). Окно — паддинг-бокс вьюпорта без
31
+ * `scroll-padding`: ширину подсказки знает только тема, и она же делает окно
32
+ * чистой частью ленты. Замер окна и доводка без снапа — общие с рядом тегов
33
+ * `scroll` (`scrollWindowOf`, `nearestShift`). Три решения:
34
+ * - только фокус с клавиатуры (`:focus-visible`). Фокус от нажатия мышью
35
+ * браузер сам не докручивает, и правильно: сдвинься лента между нажатием и
36
+ * отпусканием, под указателем оказался бы другой элемент, и `click` не
37
+ * дошёл бы;
38
+ * - сдвиг синхронный, прямо в обработчике, и мгновенный (`instant`). Фокус
39
+ * браузер докручивает и сам, тоже мгновенно: после `focus()` — сразу за
40
+ * `focusin`, и плавную анимацию он бы перебил, а после нашего сдвига ему уже
41
+ * нечего делать. При переходе Tab он докручивает ещё до `focusin`, и
42
+ * элемент, целиком ушедший из окна, плагин застаёт уже в окне;
43
+ * - в окно встаёт элемент ленты (прямой ребёнок вьюпорта), а не только
44
+ * элемент под фокусом: не шире окна — целиком, к своей точке снапа; шире —
45
+ * к ближайшей точке, где он накрывает окно, а элемент под фокусом в окне.
46
+ * Элемент — потому что снап выравнивает элементы, а не их части: докрутку
47
+ * до конца окна (фокусом браузера или чужим `scrollIntoView`) он вернул бы
48
+ * к соседней точке, и элемент остался бы у края, — а крестик тега без
49
+ * подписи не скажет, какой тег он закроет. Точка — потому что снап
50
+ * действует и на программную прокрутку; ближайшая — потому что с одним
51
+ * «начало к началу» крестик в конце длинного тега остался бы за краем.
52
+ *
53
+ * **Фокус у края.** Когда лента доезжает до края, кнопка этой стороны
54
+ * выключается нативным `disabled`, и если фокус был на ней, браузер
55
+ * сбрасывает его на страницу: пользователь клавиатуры и скринридера теряет
56
+ * место и кольцо фокуса. Поэтому плагин отдаёт такой фокус кнопке напротив.
57
+ * Край, от которого ушли, к этому моменту уже открыт: пользователь остаётся у
58
+ * ленты, и прокрутка не меняется. Отдаёт кадром позже: в одном замере один
59
+ * край закрывается, а другой открывается, и кнопку напротив включает только
60
+ * перерисовка адаптера. Фокус, который за этот кадр увели на другой элемент,
61
+ * плагин не трогает, а у выключенной ленты отдать его некому.
62
+ *
63
+ * Не режим `Button` «выключена, но фокусируема» (`aria-disabled` вместо
64
+ * нативного `disabled`): это новая поверхность общего компонента ради правила
65
+ * фокуса одной ленты. И не элемент ленты: остановка ряда тегов бывает за
66
+ * краем, и фокус на ней прокрутил бы ленту обратно.
67
+ */
68
+ export declare class TScrollerViewportPlugin extends TBasePlugin<IScroller, TScrollerViewportPluginEvents> {
69
+ private _owner;
70
+ private _root;
71
+ private _viewport;
72
+ private _resize;
73
+ private _mutation;
74
+ private _frame;
75
+ /** Кадр, в котором фокус уйдёт от выключенной кнопки к кнопке напротив. */
76
+ private _handoverFrame;
77
+ /**
78
+ * Узлы под наблюдением размера — вьюпорт и его прямые дети.
79
+ *
80
+ * Список, а не «отключить и наблюдать заново каждый проход»: свежая
81
+ * подписка `ResizeObserver` сразу шлёт уведомление, и переподписка на
82
+ * каждом проходе гоняла бы проход по кругу кадр за кадром. Здесь новый
83
+ * узел даёт одно лишнее уведомление, а следующий проход состава уже не
84
+ * меняет.
85
+ */
86
+ private readonly _observed;
87
+ install(ctx: IPluginContext): void;
88
+ destroy(): void;
89
+ /** Корень сменился — вместе с ним переезжают вьюпорт, слушатели и наблюдатели. */
90
+ private _bind;
91
+ private _listen;
92
+ private _unlisten;
93
+ /** Снимает наблюдение размеров: узлы старого корня нас больше не касаются. */
94
+ private _disconnect;
95
+ /** Проход — раз в кадр: подряд идущие поводы схлопываются в один замер. */
96
+ private readonly _onSchedule;
97
+ private _schedule;
98
+ private _cancel;
99
+ /**
100
+ * Под наблюдением вьюпорт и его прямые дети: лента меняет края и когда ей
101
+ * самой сменили ширину, и когда вырос любой элемент внутри.
102
+ *
103
+ * `border-box`: у вьюпорта есть паддинг (запас под кольцо фокуса
104
+ * содержимого), и `content-box` пропустил бы его смену вместе со сменой
105
+ * размера.
106
+ */
107
+ private _observe;
108
+ /** Три числа вьюпорта плюс остановки Tab внутри — весь замер ленты. */
109
+ private _measure;
110
+ /**
111
+ * Шаг — видимая ширина вьюпорта, то есть страница; до границы элемента
112
+ * страницу доводит снап темы, и границы элементов считать не нужно —
113
+ * в этом и была ставка на слот вместо коллекции.
114
+ *
115
+ * Знак — по вычисленному направлению письма: в RTL начало строки справа,
116
+ * и «вперёд» уводит ленту влево.
117
+ *
118
+ * Листает плавно, если движение не убрано (`smoothScrollBehavior`): по
119
+ * умолчанию — пока система о движении не просила, а режим движения
120
+ * библиотеки может задать приложение. Плавность — в вызове, а не проп
121
+ * ядра: из трёх значений `TScrollBehavior` у ленты осмысленны два, и
122
+ * третье было бы мёртвым значением в перечислении. Правило темы с этим не
123
+ * спорит — `scroll-behavior` она не объявляет.
124
+ */
125
+ private _scroll;
126
+ /**
127
+ * Нажатие по кнопке ленты. Кнопки стоят снаружи вьюпорта, поэтому чужая
128
+ * лента внутри содержимого своими кнопками нашу не двигает: её кнопки
129
+ * лежат в нашем вьюпорте.
130
+ */
131
+ private readonly _onClick;
132
+ /**
133
+ * Фокус с клавиатуры пришёл в ленту — довести элемент под ним в окно
134
+ * снапа (почему так — в описании плагина).
135
+ *
136
+ * Сам вьюпорт — остановка Tab ленты без своих остановок: он и есть окно, и
137
+ * доводить его некуда.
138
+ */
139
+ private readonly _onFocusIn;
140
+ /**
141
+ * Край закрылся. Если фокус на кнопке этого края, её выключит перерисовка,
142
+ * и браузер сбросит фокус на страницу, — кадром позже его заберёт кнопка
143
+ * напротив (почему так — в описании плагина).
144
+ */
145
+ private _onEdgeClosed;
146
+ /**
147
+ * Отдать фокус кнопке напротив, если у него не осталось места.
148
+ *
149
+ * Без места он в двух случаях: браузер сбросил его на страницу или оставил
150
+ * на выключенной кнопке. Если же край за кадр открылся снова, кнопка жива,
151
+ * и фокус на ней остаётся.
152
+ */
153
+ private _handOver;
154
+ private _cancelHandover;
155
+ /**
156
+ * Кнопка этой ленты, а не первая по селектору: у вложенной ленты кнопки с
157
+ * тем же классом, и лежат они в нашем вьюпорте.
158
+ */
159
+ private _button;
160
+ private _owns;
161
+ /** Селектор части — из классов инстанса, а не строкой в плагине. */
162
+ private _selector;
163
+ }