@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,40 @@
1
+ import type { TCloseReason } from '@soxa-ui/core';
2
+ /** Опции привязки плагина оверлея к открытости владельца. */
3
+ export interface IOverlayOpenOptions {
4
+ /**
5
+ * Свойство инстанса, которым выражена открытость.
6
+ *
7
+ * `null` отключает привязку: плагин не узнаёт об открытии и не закрывает
8
+ * владельца. По умолчанию `open` — так открытость называют и `TPopover`,
9
+ * и `TSelect`. У модального окна открытость — `visible`: оно само и есть
10
+ * слой.
11
+ */
12
+ property?: string | null;
13
+ /** Событие, по которому плагин перечитывает открытость. */
14
+ event?: string;
15
+ }
16
+ /**
17
+ * Открытость владельца глазами плагина оверлея: прочитать, записать и
18
+ * отвязаться.
19
+ */
20
+ export interface IOverlayOpenState {
21
+ /** Whether the configured property is open and the owner is visible. */
22
+ read(): boolean;
23
+ /**
24
+ * Записать открытость владельцу. Так оверлей закрывает сам себя, когда
25
+ * закрытие — не решение пользователя: Tab увёл фокус из панели Popover.
26
+ */
27
+ write(value: boolean): void;
28
+ /**
29
+ * Пользователь закрывает владельца — нажатием мимо или Escape. Владельца,
30
+ * который принимает запрос (`requestClose`), плагин закрывает запросом с
31
+ * причиной: закрыться ли, решает он сам. Остальных — записью, как `write`.
32
+ */
33
+ close(reason: TCloseReason): void;
34
+ /**
35
+ * Снять подписку на открытость с шины владельца: `onChange` привязки
36
+ * больше не зовётся. Плагин зовёт это в `destroy()` — владелец переживает
37
+ * плагин, когда приложение передаёт свой `ctrl`.
38
+ */
39
+ unbind(): void;
40
+ }
@@ -0,0 +1,24 @@
1
+ import type { IPagination, TPaginationCollection } from '@soxa-ui/core';
2
+ import type { IPluginContext } from '../../base';
3
+ import { TCollectionElements } from '../collection';
4
+ /**
5
+ * Кнопка текущей страницы — страницы с ключом значения пагинации среди
6
+ * страниц коллекции, пока её узел в документе. `null` — страницы значения в
7
+ * коллекции нет (ключ без страницы) или её узла нет в документе.
8
+ *
9
+ * Текущая — по ключу, а не по активации: расширение `pagination` слушает того
10
+ * же владельца и пересобирает окно и активацию, бывает, позже того, кто
11
+ * спрашивает. Кнопка — первая `button` в узле страницы: корень страницы —
12
+ * место в списке (`li`), а кнопкой является строка внутри.
13
+ *
14
+ * Одна на фокус со стрелки, погасшей у края (`TPaginationFocusPlugin`), и
15
+ * узел фокуса пагинации (`currentPageOf`): текущую оба ищут одним правилом.
16
+ */
17
+ export declare function currentButtonOf(owner: IPagination, engine: TPaginationCollection | null, elements: TCollectionElements | null): HTMLButtonElement | null;
18
+ /**
19
+ * Узел фокуса Pagination (`focusTarget` плагина действия) — кнопка текущей
20
+ * страницы: корень пагинации — `nav`, ориентир без своей остановки, а
21
+ * остановки у неё — стрелки и страницы, и место пользователя в ряду —
22
+ * текущая. `null` — текущей страницы нет в коллекции или в документе.
23
+ */
24
+ export declare function currentPageOf(_root: Element, ctx: IPluginContext): Element | null;
@@ -0,0 +1,34 @@
1
+ import { TCollectionElements } from "../collection/collection-elements.plugin.js";
2
+ //#region src/custom/pagination/current.ts
3
+ /**
4
+ * Кнопка текущей страницы — страницы с ключом значения пагинации среди
5
+ * страниц коллекции, пока её узел в документе. `null` — страницы значения в
6
+ * коллекции нет (ключ без страницы) или её узла нет в документе.
7
+ *
8
+ * Текущая — по ключу, а не по активации: расширение `pagination` слушает того
9
+ * же владельца и пересобирает окно и активацию, бывает, позже того, кто
10
+ * спрашивает. Кнопка — первая `button` в узле страницы: корень страницы —
11
+ * место в списке (`li`), а кнопкой является строка внутри.
12
+ *
13
+ * Одна на фокус со стрелки, погасшей у края (`TPaginationFocusPlugin`), и
14
+ * узел фокуса пагинации (`currentPageOf`): текущую оба ищут одним правилом.
15
+ */
16
+ function currentButtonOf(owner, engine, elements) {
17
+ const page = engine?.extensions.batch.items.find((item) => item.value === owner.value);
18
+ const element = page ? elements?.getElementByItem(page) : null;
19
+ return element?.isConnected ? element.querySelector("button") : null;
20
+ }
21
+ /**
22
+ * Узел фокуса Pagination (`focusTarget` плагина действия) — кнопка текущей
23
+ * страницы: корень пагинации — `nav`, ориентир без своей остановки, а
24
+ * остановки у неё — стрелки и страницы, и место пользователя в ряду —
25
+ * текущая. `null` — текущей страницы нет в коллекции или в документе.
26
+ */
27
+ function currentPageOf(_root, ctx) {
28
+ const owner = ctx.getInstance();
29
+ const elements = ctx.get(TCollectionElements) ?? null;
30
+ const engine = elements?.engine ?? null;
31
+ return owner ? currentButtonOf(owner, engine, elements) : null;
32
+ }
33
+ //#endregion
34
+ export { currentButtonOf, currentPageOf };
@@ -0,0 +1,57 @@
1
+ import type { IPagination } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TPaginationFocusPluginEvents } from './types';
5
+ /**
6
+ * TPaginationFocusPlugin — фокус со стрелки, погасшей под ним у края, — на
7
+ * текущую страницу.
8
+ *
9
+ * Стрелки — нативные кнопки. Листая с клавиатуры до первой или последней
10
+ * страницы, пользователь выключает стрелку, на которой стоит фокус, а
11
+ * выключенная кнопка фокус теряет: браузер сбрасывает его в начало документа,
12
+ * и пользователь клавиатуры и скринридера теряет место. Плагин переводит фокус
13
+ * на кнопку текущей страницы — как календарь отдаёт его остановке сетки,
14
+ * когда кнопка листания погасла у края, и как React Aria.
15
+ *
16
+ * **Синхронно, в том же событии.** Решает геттер (`prevDisabled`,
17
+ * `nextDisabled`), а не атрибут: плагин слушает поводы, от которых зависит
18
+ * выключенность стрелок, — `change:value`, `change:total`, `change:pageSize`,
19
+ * `change:pages`, — и уводит фокус раньше, чем разметка выключит стрелку, так
20
+ * что браузеру чинить уже нечего. `focusout`, наблюдатель за атрибутом и
21
+ * ожидание перерисовки опоздали бы: к их моменту фокус уже в начале
22
+ * документа. `change:disabled` плагин не слушает: у выключенной пагинации
23
+ * остановок нет — фокус переносить некуда, — а включение стрелку не гасит.
24
+ *
25
+ * **Текущая — по ключу**: страница с ключом `value` пагинации среди страниц
26
+ * коллекции, а не активная. Расширение `pagination` слушает того же
27
+ * владельца и пересобирает окно и активацию, бывает, уже после плагина — тогда
28
+ * активной была бы ещё прежняя страница. Ключ от порядка подписок не зависит:
29
+ * стрелка гаснет, когда текущая — первая или последняя, а они в окне всегда,
30
+ * так что страница уже в коллекции и её узел нарисован. Цена: плагин, который
31
+ * слышит смену раньше расширения, не видит отмены перехода в
32
+ * `item:activate:before` — значение вернулось к прежнему, стрелка снова
33
+ * включена, а фокус остаётся на крайней странице, куда листали.
34
+ *
35
+ * Фокус остаётся, где был, когда переносить его некуда: пагинация выключена,
36
+ * страницы значения нет в коллекции (ключ без страницы) или её узла нет в
37
+ * документе — страница только вошла в окно (`middleCount` 0, а данные
38
+ * сменились под фокусом). Узла страницы плагин не ждёт: стрелкой до края узел
39
+ * текущей есть всегда.
40
+ *
41
+ * Стрелки находят по классам владельца (`classes.resolve`) и только внутри
42
+ * его корня, кнопку текущей — по реестру узлов коллекции (`currentButtonOf`,
43
+ * тем же правилом, что узел фокуса пагинации).
44
+ */
45
+ export declare class TPaginationFocusPlugin extends TBasePlugin<IPagination, TPaginationFocusPluginEvents> {
46
+ private _owner;
47
+ /** Корень пагинации: свои стрелки — только внутри него. */
48
+ private _root;
49
+ private _elements;
50
+ private _engine;
51
+ install(ctx: IPluginContext): void;
52
+ destroy(): void;
53
+ /** Стрелка под фокусом погасла — фокус на кнопку текущей страницы. */
54
+ private readonly _onChange;
55
+ /** Стрелка своего корня, в которой стоит фокус; фокус не на стрелке — `undefined`. */
56
+ private _arrowUnderFocus;
57
+ }
@@ -0,0 +1,106 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TCollectionBundlesPlugin } from "../../collection/bundles.plugin.js";
3
+ import { TElementPlugin } from "../../element/element.plugin.js";
4
+ import { TCollectionElements } from "../../collection/collection-elements.plugin.js";
5
+ import { currentButtonOf } from "../current.js";
6
+ //#region src/custom/pagination/focus/focus.plugin.ts
7
+ /** Стрелки — по частям разметки владельца (`__prev`, `__next`). */
8
+ var ARROWS = ["prev", "next"];
9
+ /** Погасла ли стрелка — по геттеру пагинации, а не по атрибуту разметки. */
10
+ var ARROW_OFF = {
11
+ prev: (owner) => owner.prevDisabled,
12
+ next: (owner) => owner.nextDisabled
13
+ };
14
+ /**
15
+ * TPaginationFocusPlugin — фокус со стрелки, погасшей под ним у края, — на
16
+ * текущую страницу.
17
+ *
18
+ * Стрелки — нативные кнопки. Листая с клавиатуры до первой или последней
19
+ * страницы, пользователь выключает стрелку, на которой стоит фокус, а
20
+ * выключенная кнопка фокус теряет: браузер сбрасывает его в начало документа,
21
+ * и пользователь клавиатуры и скринридера теряет место. Плагин переводит фокус
22
+ * на кнопку текущей страницы — как календарь отдаёт его остановке сетки,
23
+ * когда кнопка листания погасла у края, и как React Aria.
24
+ *
25
+ * **Синхронно, в том же событии.** Решает геттер (`prevDisabled`,
26
+ * `nextDisabled`), а не атрибут: плагин слушает поводы, от которых зависит
27
+ * выключенность стрелок, — `change:value`, `change:total`, `change:pageSize`,
28
+ * `change:pages`, — и уводит фокус раньше, чем разметка выключит стрелку, так
29
+ * что браузеру чинить уже нечего. `focusout`, наблюдатель за атрибутом и
30
+ * ожидание перерисовки опоздали бы: к их моменту фокус уже в начале
31
+ * документа. `change:disabled` плагин не слушает: у выключенной пагинации
32
+ * остановок нет — фокус переносить некуда, — а включение стрелку не гасит.
33
+ *
34
+ * **Текущая — по ключу**: страница с ключом `value` пагинации среди страниц
35
+ * коллекции, а не активная. Расширение `pagination` слушает того же
36
+ * владельца и пересобирает окно и активацию, бывает, уже после плагина — тогда
37
+ * активной была бы ещё прежняя страница. Ключ от порядка подписок не зависит:
38
+ * стрелка гаснет, когда текущая — первая или последняя, а они в окне всегда,
39
+ * так что страница уже в коллекции и её узел нарисован. Цена: плагин, который
40
+ * слышит смену раньше расширения, не видит отмены перехода в
41
+ * `item:activate:before` — значение вернулось к прежнему, стрелка снова
42
+ * включена, а фокус остаётся на крайней странице, куда листали.
43
+ *
44
+ * Фокус остаётся, где был, когда переносить его некуда: пагинация выключена,
45
+ * страницы значения нет в коллекции (ключ без страницы) или её узла нет в
46
+ * документе — страница только вошла в окно (`middleCount` 0, а данные
47
+ * сменились под фокусом). Узла страницы плагин не ждёт: стрелкой до края узел
48
+ * текущей есть всегда.
49
+ *
50
+ * Стрелки находят по классам владельца (`classes.resolve`) и только внутри
51
+ * его корня, кнопку текущей — по реестру узлов коллекции (`currentButtonOf`,
52
+ * тем же правилом, что узел фокуса пагинации).
53
+ */
54
+ var TPaginationFocusPlugin = class extends TBasePlugin {
55
+ _owner = null;
56
+ /** Корень пагинации: свои стрелки — только внутри него. */
57
+ _root = null;
58
+ _elements = null;
59
+ _engine = null;
60
+ install(ctx) {
61
+ super.install(ctx);
62
+ this._owner = ctx.getInstance() ?? null;
63
+ this._elements = ctx.get(TCollectionElements) ?? null;
64
+ const elementPlugin = ctx.get(TElementPlugin);
65
+ elementPlugin?.events.on("ready", (element) => {
66
+ this._root = element;
67
+ });
68
+ elementPlugin?.events.on("removed", () => {
69
+ this._root = null;
70
+ });
71
+ ctx.get(TCollectionBundlesPlugin)?.events.on("engine:bound", (engine) => {
72
+ this._engine = engine;
73
+ });
74
+ const events = this._owner?.events;
75
+ this._listenTo(events, "change:value", this._onChange);
76
+ this._listenTo(events, "change:total", this._onChange);
77
+ this._listenTo(events, "change:pageSize", this._onChange);
78
+ this._listenTo(events, "change:pages", this._onChange);
79
+ }
80
+ destroy() {
81
+ this._owner = null;
82
+ this._root = null;
83
+ this._elements = null;
84
+ this._engine = null;
85
+ super.destroy();
86
+ }
87
+ /** Стрелка под фокусом погасла — фокус на кнопку текущей страницы. */
88
+ _onChange = () => {
89
+ const owner = this._owner;
90
+ const root = this._root;
91
+ if (!owner || !root || owner.disabled) return;
92
+ const arrow = this._arrowUnderFocus(owner, root);
93
+ if (arrow && ARROW_OFF[arrow](owner)) currentButtonOf(owner, this._engine, this._elements)?.focus();
94
+ };
95
+ /** Стрелка своего корня, в которой стоит фокус; фокус не на стрелке — `undefined`. */
96
+ _arrowUnderFocus(owner, root) {
97
+ const active = root.ownerDocument.activeElement;
98
+ if (!active) return void 0;
99
+ return ARROWS.find((arrow) => {
100
+ const button = active.closest(owner.classes.resolve(`__${arrow}`, { point: true }));
101
+ return button !== null && root.contains(button);
102
+ });
103
+ }
104
+ };
105
+ //#endregion
106
+ export { TPaginationFocusPlugin };
@@ -0,0 +1,2 @@
1
+ export { TPaginationFocusPlugin } from './focus.plugin';
2
+ export type { TPaginationFocusPluginEvents } from './types';
@@ -0,0 +1,8 @@
1
+ import type { TPluginEvents } from '../../../base';
2
+ /**
3
+ * Своих событий у плагина нет: куда ушёл фокус, сообщает DOM, а листание —
4
+ * значение пагинации.
5
+ */
6
+ export type TPaginationFocusPluginEvents = TPluginEvents;
7
+ /** Стрелка пагинации — часть разметки владельца `__prev` или `__next`. */
8
+ export type TPaginationArrow = 'prev' | 'next';
@@ -0,0 +1,3 @@
1
+ export * from './focus';
2
+ export * from './names';
3
+ export { currentPageOf } from './current';
@@ -0,0 +1 @@
1
+ export * from './names.plugin';
@@ -0,0 +1,15 @@
1
+ import type { IPagination } from '@soxa-ui/core';
2
+ import { TNamesPlugin } from '../../../locale/names.plugin';
3
+ import type { TTranslations } from '../../../locale/types';
4
+ /**
5
+ * TPaginationNamesPlugin — имена стрелок пагинации от локали: в `prevAria` и
6
+ * `nextAria`. Стрелка без текста для скринридера безымянна.
7
+ *
8
+ * Имени ряду плагин не пишет: что листают — таблицу, ленту, результаты
9
+ * поиска, — знает только приложение, и `nav` называет оно (`aria_label`,
10
+ * `aria_labelledBy`). Имя из локали рядом с ними дало бы одному имени два
11
+ * входа. Страницы называет их текст — номер или текст страницы.
12
+ */
13
+ export declare class TPaginationNamesPlugin extends TNamesPlugin<IPagination> {
14
+ protected _name(owner: IPagination, translations: TTranslations): void;
15
+ }
@@ -0,0 +1,19 @@
1
+ import { TNamesPlugin } from "../../../locale/names.plugin.js";
2
+ //#region src/custom/pagination/names/names.plugin.ts
3
+ /**
4
+ * TPaginationNamesPlugin — имена стрелок пагинации от локали: в `prevAria` и
5
+ * `nextAria`. Стрелка без текста для скринридера безымянна.
6
+ *
7
+ * Имени ряду плагин не пишет: что листают — таблицу, ленту, результаты
8
+ * поиска, — знает только приложение, и `nav` называет оно (`aria_label`,
9
+ * `aria_labelledBy`). Имя из локали рядом с ними дало бы одному имени два
10
+ * входа. Страницы называет их текст — номер или текст страницы.
11
+ */
12
+ var TPaginationNamesPlugin = class extends TNamesPlugin {
13
+ _name(owner, translations) {
14
+ owner.prevAria.add("aria-label", translations.pagination.prev);
15
+ owner.nextAria.add("aria-label", translations.pagination.next);
16
+ }
17
+ };
18
+ //#endregion
19
+ export { TPaginationNamesPlugin };
@@ -0,0 +1,69 @@
1
+ import type { IPluginContext } from '../../../base';
2
+ import { TOverlayFocusPlugin } from '../../overlay/focus';
3
+ import type { IOverlayOpenOptions } from '../../overlay/types';
4
+ import type { TPopoverFocusPluginEvents } from './types';
5
+ /**
6
+ * TPopoverFocusPlugin — модель фокуса Popover, немодального диалога APG.
7
+ *
8
+ * Всё, что у оверлеев общее — запомнить, откуда открыли, увести фокус в
9
+ * панель кадром позже, вернуть его при закрытии, закрыть по Escape и
10
+ * погасить его `preventDefault`, — лежит в `TOverlayFocusPlugin`. Здесь
11
+ * остаётся то, чем немодальный оверлей отличается от модального: Tab,
12
+ * запасной возврат фокуса и закрытие без возврата.
13
+ *
14
+ * **Нажатие и уход фокуса мимо фокус не возвращают**: страница за панелью
15
+ * рабочая, и пользователь уже там, куда нажал. Об этом плагин узнаёт
16
+ * событием `dismiss` у `TDismissPlugin` — оно приходит до закрытия. У
17
+ * модального оверлея наоборот: страница за ним недоступна, и фокус
18
+ * возвращается при любом закрытии.
19
+ *
20
+ * **Tab** ведёт себя так, будто панель стоит в документе сразу за
21
+ * триггером, хотя телепортирована в конец `body`:
22
+ * - Tab с последней остановки корня при открытой панели — в панель;
23
+ * - Tab с последней остановки панели — к первой остановке после корня, и
24
+ * поповер закрывается без возврата фокуса. Если после корня остановок нет —
25
+ * закрывается так же, а Tab не гасится;
26
+ * - Shift+Tab с первой остановки панели или с неё самой — на триггер, панель
27
+ * остаётся открытой.
28
+ *
29
+ * **Возврат фокуса**, когда запомненный элемент пропал, — на первую остановку
30
+ * корня, то есть на триггер: у немодального оверлея он всегда рядом.
31
+ *
32
+ * Панель внутри контейнера (`contained`) не телепортирована и лежит в самом
33
+ * корне, сразу за триггером, — Tab в неё и из неё идёт по документу сам.
34
+ * Остановки триггера поэтому — остановки корня без остановок панели.
35
+ *
36
+ * Поповер немодальный: ловушки фокуса, `aria-modal` и `inert` нет, страница
37
+ * за панелью доступна.
38
+ *
39
+ * Наследнику со своим триггером остаются две точки: что считать остановками
40
+ * триггера (`_triggerStops`) и что делает Tab с последней остановки панели
41
+ * (`_tabOutOfPanel`). Так модель фокуса пункта меню с панелью берёт эти
42
+ * правила Tab целиком: её триггер — строка пункта, а куда фокусу уйти из
43
+ * панели, решает меню над пунктом.
44
+ */
45
+ export declare class TPopoverFocusPlugin<TEvents extends TPopoverFocusPluginEvents = TPopoverFocusPluginEvents> extends TOverlayFocusPlugin<TEvents> {
46
+ install(ctx: IPluginContext, options?: IOverlayOpenOptions): void;
47
+ /** Запомненный элемент пропал — фокус возвращается на триггер в корне. */
48
+ protected _returnCandidates(root: Element): readonly Element[];
49
+ /**
50
+ * Остановки триггера: откуда Tab ведёт в панель, куда Shift+Tab из неё
51
+ * возвращает и куда уходит фокус, когда запомненного элемента нет. У
52
+ * поповера это остановки корня, но не панели, когда она лежит в корне
53
+ * (`contained`). Наследник подставляет свой триггер.
54
+ */
55
+ protected _triggerStops(root: Element): Element[];
56
+ protected _onTab(event: KeyboardEvent): void;
57
+ /** Tab с последней остановки корня — в панель, как будто она стоит сразу за триггером. */
58
+ private _tabIntoPanel;
59
+ /** Shift+Tab с первой остановки панели или с неё самой — на триггер; панель остаётся открытой. */
60
+ private _tabBackFromPanel;
61
+ /** Tab с последней остановки панели или с неё самой, когда остановок нет, — наружу. */
62
+ private _tabForwardFromPanel;
63
+ /**
64
+ * Tab из панели наружу — к первой остановке после корня. Поповер
65
+ * закрывается без возврата фокуса: фокус уходит дальше по странице.
66
+ * Остановок после корня нет — Tab не гасится, фокус уводит браузер.
67
+ */
68
+ protected _tabOutOfPanel(event: KeyboardEvent, root: Element, panel: Element): void;
69
+ }
@@ -0,0 +1,107 @@
1
+ import { tabStops } from "../../../utils/tabStops.js";
2
+ import { tabStopsAfter } from "../../../utils/tabStopsAfter.js";
3
+ import { focusFirst } from "../../../utils/focusFirst.js";
4
+ import { TDismissPlugin } from "../../dismiss/dismiss.plugin.js";
5
+ import { TOverlayFocusPlugin } from "../../overlay/focus/focus.plugin.js";
6
+ //#region src/custom/popover/focus/focus.plugin.ts
7
+ /**
8
+ * TPopoverFocusPlugin — модель фокуса Popover, немодального диалога APG.
9
+ *
10
+ * Всё, что у оверлеев общее — запомнить, откуда открыли, увести фокус в
11
+ * панель кадром позже, вернуть его при закрытии, закрыть по Escape и
12
+ * погасить его `preventDefault`, — лежит в `TOverlayFocusPlugin`. Здесь
13
+ * остаётся то, чем немодальный оверлей отличается от модального: Tab,
14
+ * запасной возврат фокуса и закрытие без возврата.
15
+ *
16
+ * **Нажатие и уход фокуса мимо фокус не возвращают**: страница за панелью
17
+ * рабочая, и пользователь уже там, куда нажал. Об этом плагин узнаёт
18
+ * событием `dismiss` у `TDismissPlugin` — оно приходит до закрытия. У
19
+ * модального оверлея наоборот: страница за ним недоступна, и фокус
20
+ * возвращается при любом закрытии.
21
+ *
22
+ * **Tab** ведёт себя так, будто панель стоит в документе сразу за
23
+ * триггером, хотя телепортирована в конец `body`:
24
+ * - Tab с последней остановки корня при открытой панели — в панель;
25
+ * - Tab с последней остановки панели — к первой остановке после корня, и
26
+ * поповер закрывается без возврата фокуса. Если после корня остановок нет —
27
+ * закрывается так же, а Tab не гасится;
28
+ * - Shift+Tab с первой остановки панели или с неё самой — на триггер, панель
29
+ * остаётся открытой.
30
+ *
31
+ * **Возврат фокуса**, когда запомненный элемент пропал, — на первую остановку
32
+ * корня, то есть на триггер: у немодального оверлея он всегда рядом.
33
+ *
34
+ * Панель внутри контейнера (`contained`) не телепортирована и лежит в самом
35
+ * корне, сразу за триггером, — Tab в неё и из неё идёт по документу сам.
36
+ * Остановки триггера поэтому — остановки корня без остановок панели.
37
+ *
38
+ * Поповер немодальный: ловушки фокуса, `aria-modal` и `inert` нет, страница
39
+ * за панелью доступна.
40
+ *
41
+ * Наследнику со своим триггером остаются две точки: что считать остановками
42
+ * триггера (`_triggerStops`) и что делает Tab с последней остановки панели
43
+ * (`_tabOutOfPanel`). Так модель фокуса пункта меню с панелью берёт эти
44
+ * правила Tab целиком: её триггер — строка пункта, а куда фокусу уйти из
45
+ * панели, решает меню над пунктом.
46
+ */
47
+ var TPopoverFocusPlugin = class extends TOverlayFocusPlugin {
48
+ install(ctx, options) {
49
+ super.install(ctx, options);
50
+ ctx.get(TDismissPlugin)?.events.on("dismiss", () => {
51
+ this._restore = false;
52
+ });
53
+ }
54
+ /** Запомненный элемент пропал — фокус возвращается на триггер в корне. */
55
+ _returnCandidates(root) {
56
+ return this._triggerStops(root);
57
+ }
58
+ /**
59
+ * Остановки триггера: откуда Tab ведёт в панель, куда Shift+Tab из неё
60
+ * возвращает и куда уходит фокус, когда запомненного элемента нет. У
61
+ * поповера это остановки корня, но не панели, когда она лежит в корне
62
+ * (`contained`). Наследник подставляет свой триггер.
63
+ */
64
+ _triggerStops(root) {
65
+ const panel = this._dismiss?.findPanel() ?? this._panel;
66
+ return tabStops(root).filter((stop) => !panel?.contains(stop));
67
+ }
68
+ _onTab(event) {
69
+ const root = this._root;
70
+ const panel = this._panel;
71
+ const active = root?.ownerDocument.activeElement;
72
+ if (!root || !panel || !active) return;
73
+ if (panel.contains(active)) {
74
+ if (event.shiftKey) this._tabBackFromPanel(event, root, panel, active);
75
+ else this._tabForwardFromPanel(event, root, panel, active);
76
+ return;
77
+ }
78
+ if (!event.shiftKey && root.contains(active)) this._tabIntoPanel(event, root, panel, active);
79
+ }
80
+ /** Tab с последней остановки корня — в панель, как будто она стоит сразу за триггером. */
81
+ _tabIntoPanel(event, root, panel, active) {
82
+ if (active !== this._triggerStops(root).at(-1)) return;
83
+ if (focusFirst([...tabStops(panel), panel])) event.preventDefault();
84
+ }
85
+ /** Shift+Tab с первой остановки панели или с неё самой — на триггер; панель остаётся открытой. */
86
+ _tabBackFromPanel(event, root, panel, active) {
87
+ if (active !== panel && active !== tabStops(panel)[0]) return;
88
+ if (focusFirst(this._triggerStops(root).reverse())) event.preventDefault();
89
+ }
90
+ /** Tab с последней остановки панели или с неё самой, когда остановок нет, — наружу. */
91
+ _tabForwardFromPanel(event, root, panel, active) {
92
+ if (active !== (tabStops(panel).at(-1) ?? panel)) return;
93
+ this._tabOutOfPanel(event, root, panel);
94
+ }
95
+ /**
96
+ * Tab из панели наружу — к первой остановке после корня. Поповер
97
+ * закрывается без возврата фокуса: фокус уходит дальше по странице.
98
+ * Остановок после корня нет — Tab не гасится, фокус уводит браузер.
99
+ */
100
+ _tabOutOfPanel(event, root, panel) {
101
+ this._restore = false;
102
+ this._close();
103
+ if (focusFirst(tabStopsAfter(root, panel))) event.preventDefault();
104
+ }
105
+ };
106
+ //#endregion
107
+ export { TPopoverFocusPlugin };
@@ -0,0 +1,2 @@
1
+ export { TPopoverFocusPlugin } from './focus.plugin';
2
+ export type { TPopoverFocusPluginEvents } from './types';
@@ -0,0 +1,2 @@
1
+ import type { TPluginEvents } from '../../../base';
2
+ export type TPopoverFocusPluginEvents = TPluginEvents;
@@ -0,0 +1,18 @@
1
+ import { TBasePlugin } from '../../../base';
2
+ import type { IPluginContext } from '../../../base';
3
+ /**
4
+ * TPopoverIdsPlugin — связка «триггер ↔ панель» поповера в документе.
5
+ *
6
+ * `id` панели — в `aria` поповера, который разметка раскладывает на панель, и
7
+ * ссылка на него `aria-controls` — в `triggerAria` триггера. Обе стороны
8
+ * пишутся здесь, от одного `id`: формула одна на обе.
9
+ *
10
+ * `id` — от монтирования (`createId`), а не от экземпляра: он нужен только
11
+ * документу, и на сервере и в браузере обязан совпасть. Пишется при
12
+ * установке, синхронно, — связка есть уже в первой (и серверной) отрисовке.
13
+ * `aria-controls` стоит и у закрытой панели: она всегда в документе,
14
+ * закрытие её только прячет.
15
+ */
16
+ export declare class TPopoverIdsPlugin extends TBasePlugin {
17
+ install(ctx: IPluginContext): void;
18
+ }
@@ -0,0 +1,27 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ //#region src/custom/popover/ids/ids.plugin.ts
3
+ /**
4
+ * TPopoverIdsPlugin — связка «триггер ↔ панель» поповера в документе.
5
+ *
6
+ * `id` панели — в `aria` поповера, который разметка раскладывает на панель, и
7
+ * ссылка на него `aria-controls` — в `triggerAria` триггера. Обе стороны
8
+ * пишутся здесь, от одного `id`: формула одна на обе.
9
+ *
10
+ * `id` — от монтирования (`createId`), а не от экземпляра: он нужен только
11
+ * документу, и на сервере и в браузере обязан совпасть. Пишется при
12
+ * установке, синхронно, — связка есть уже в первой (и серверной) отрисовке.
13
+ * `aria-controls` стоит и у закрытой панели: она всегда в документе,
14
+ * закрытие её только прячет.
15
+ */
16
+ var TPopoverIdsPlugin = class extends TBasePlugin {
17
+ install(ctx) {
18
+ super.install(ctx);
19
+ const popover = ctx.getInstance();
20
+ if (!popover) return;
21
+ const panelId = ctx.createId("panel");
22
+ popover.aria.add("id", panelId);
23
+ popover.triggerAria.add("aria-controls", panelId);
24
+ }
25
+ };
26
+ //#endregion
27
+ export { TPopoverIdsPlugin };
@@ -0,0 +1 @@
1
+ export * from './ids.plugin';
@@ -0,0 +1,4 @@
1
+ export * from './pointer';
2
+ export * from './focus';
3
+ export * from './ids';
4
+ export * from './names';
@@ -0,0 +1 @@
1
+ export * from './names.plugin';
@@ -0,0 +1,7 @@
1
+ import type { IPopover } from '@soxa-ui/core';
2
+ import { TNamesPlugin } from '../../../locale/names.plugin';
3
+ import type { TTranslations } from '../../../locale/types';
4
+ /** TPopoverNamesPlugin — имя кнопки закрытия поповера от локали: в `closeAria`. */
5
+ export declare class TPopoverNamesPlugin extends TNamesPlugin<IPopover> {
6
+ protected _name(owner: IPopover, translations: TTranslations): void;
7
+ }
@@ -0,0 +1,10 @@
1
+ import { TNamesPlugin } from "../../../locale/names.plugin.js";
2
+ //#region src/custom/popover/names/names.plugin.ts
3
+ /** TPopoverNamesPlugin — имя кнопки закрытия поповера от локали: в `closeAria`. */
4
+ var TPopoverNamesPlugin = class extends TNamesPlugin {
5
+ _name(owner, translations) {
6
+ owner.closeAria.add("aria-label", translations.popover.close);
7
+ }
8
+ };
9
+ //#endregion
10
+ export { TPopoverNamesPlugin };
@@ -0,0 +1,2 @@
1
+ export { TPopoverPointerPlugin } from './pointer.plugin';
2
+ export type { TPopoverPointerPluginEvents } from './types';