@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 @@
1
+ export { TMenuIdsPlugin } from './ids.plugin';
@@ -0,0 +1,11 @@
1
+ export * from './navigation';
2
+ export * from './keyboard';
3
+ export * from './pointer';
4
+ export * from './hover';
5
+ export * from './focus';
6
+ export * from './ids';
7
+ export * from './popup-ids';
8
+ export * from './submenu-keyboard';
9
+ export * from './submenu-focus';
10
+ export * from './popover-item-keyboard';
11
+ export * from './popover-item-focus';
@@ -0,0 +1,2 @@
1
+ export { TMenuKeyboardPlugin } from './keyboard.plugin';
2
+ export type { TMenuKeyboardPluginEvents } from './types';
@@ -0,0 +1,41 @@
1
+ import type { IPluginContext } from '../../../base';
2
+ import { TMenuNavigationPlugin } from '../navigation';
3
+ import type { TMenuKeyboardPluginEvents } from './types';
4
+ /**
5
+ * TMenuKeyboardPlugin — клавиатура меню по паттерну APG Menu Button.
6
+ *
7
+ * Панель — общая с подменю (`TMenuNavigationPlugin`): фокус идёт за
8
+ * подсветкой, ↑/↓, Home и End, набор по первым буквам. Своё у меню — корень,
9
+ * в котором только триггер: ↓, Enter и пробел открывают меню и подсвечивают
10
+ * первый пункт, ↑ — последний (APG). Клавиши гасятся `preventDefault`: иначе
11
+ * Enter и пробел нажали бы кнопку-триггер, а клик по ней переключил бы меню
12
+ * обратно. Это клавиши кнопки (`openOn: 'press'`); у контекстного меню в
13
+ * корне область, и её клавиши — её: стрелки ходят по её строкам, Enter
14
+ * нажимает её кнопки. Меню над ней открывает `contextmenu` — плагин
15
+ * открытия. Какие клавиши корня слушаются, выбирает подписка на смену
16
+ * способа, а не проверка в обработчике.
17
+ *
18
+ * Открытие на крайнем пункте (`openAt`) зовёт и плагин открытия: контекстное
19
+ * меню, вызванное клавишей, открывается на первом пункте, как кнопка с
20
+ * клавиатуры.
21
+ */
22
+ export declare class TMenuKeyboardPlugin extends TMenuNavigationPlugin<TMenuKeyboardPluginEvents> {
23
+ private _menu;
24
+ /**
25
+ * Клавиши корня по способу открытия: у кнопки — открыть меню, у области
26
+ * контекстного меню — никаких, её клавиши принадлежат ей.
27
+ */
28
+ private _rootKeys;
29
+ install(ctx: IPluginContext, options?: unknown): void;
30
+ destroy(): void;
31
+ /** Клавиши корня — по способу открытия (`_rootKeys`). */
32
+ protected onKeyDown(e: KeyboardEvent): void;
33
+ /**
34
+ * Клавиши корня по способу открытия: у кнопки — свои, у области
35
+ * контекстного меню — никаких. Подписка на смену способа, а не проверка в
36
+ * обработчике.
37
+ */
38
+ private _syncRootKeys;
39
+ /** Клавиши кнопки-триггера: открыть меню на крайнем пункте. */
40
+ private readonly _onTriggerKeyDown;
41
+ }
@@ -0,0 +1,68 @@
1
+ import { TMenuNavigationPlugin } from "../navigation/navigation.plugin.js";
2
+ //#region src/custom/menu/keyboard/keyboard.plugin.ts
3
+ /**
4
+ * TMenuKeyboardPlugin — клавиатура меню по паттерну APG Menu Button.
5
+ *
6
+ * Панель — общая с подменю (`TMenuNavigationPlugin`): фокус идёт за
7
+ * подсветкой, ↑/↓, Home и End, набор по первым буквам. Своё у меню — корень,
8
+ * в котором только триггер: ↓, Enter и пробел открывают меню и подсвечивают
9
+ * первый пункт, ↑ — последний (APG). Клавиши гасятся `preventDefault`: иначе
10
+ * Enter и пробел нажали бы кнопку-триггер, а клик по ней переключил бы меню
11
+ * обратно. Это клавиши кнопки (`openOn: 'press'`); у контекстного меню в
12
+ * корне область, и её клавиши — её: стрелки ходят по её строкам, Enter
13
+ * нажимает её кнопки. Меню над ней открывает `contextmenu` — плагин
14
+ * открытия. Какие клавиши корня слушаются, выбирает подписка на смену
15
+ * способа, а не проверка в обработчике.
16
+ *
17
+ * Открытие на крайнем пункте (`openAt`) зовёт и плагин открытия: контекстное
18
+ * меню, вызванное клавишей, открывается на первом пункте, как кнопка с
19
+ * клавиатуры.
20
+ */
21
+ var TMenuKeyboardPlugin = class extends TMenuNavigationPlugin {
22
+ _menu = null;
23
+ /**
24
+ * Клавиши корня по способу открытия: у кнопки — открыть меню, у области
25
+ * контекстного меню — никаких, её клавиши принадлежат ей.
26
+ */
27
+ _rootKeys = null;
28
+ install(ctx, options) {
29
+ super.install(ctx, options);
30
+ this._menu = ctx.getInstance() ?? null;
31
+ this._syncRootKeys();
32
+ this._listenTo(this._menu?.events, "change:openOn", () => this._syncRootKeys());
33
+ }
34
+ destroy() {
35
+ this._menu = null;
36
+ this._rootKeys = null;
37
+ super.destroy();
38
+ }
39
+ /** Клавиши корня — по способу открытия (`_rootKeys`). */
40
+ onKeyDown(e) {
41
+ this._rootKeys?.(e);
42
+ }
43
+ /**
44
+ * Клавиши корня по способу открытия: у кнопки — свои, у области
45
+ * контекстного меню — никаких. Подписка на смену способа, а не проверка в
46
+ * обработчике.
47
+ */
48
+ _syncRootKeys() {
49
+ this._rootKeys = this._menu?.openOn === "press" ? this._onTriggerKeyDown : null;
50
+ }
51
+ /** Клавиши кнопки-триггера: открыть меню на крайнем пункте. */
52
+ _onTriggerKeyDown = (e) => {
53
+ switch (e.key) {
54
+ case "ArrowDown":
55
+ case "Enter":
56
+ case " ":
57
+ e.preventDefault();
58
+ this.openAt("first");
59
+ return;
60
+ case "ArrowUp":
61
+ e.preventDefault();
62
+ this.openAt("last");
63
+ return;
64
+ }
65
+ };
66
+ };
67
+ //#endregion
68
+ export { TMenuKeyboardPlugin };
@@ -0,0 +1,2 @@
1
+ import type { TListNavigationPluginEvents } from '../../list/navigation';
2
+ export type TMenuKeyboardPluginEvents = TListNavigationPluginEvents;
@@ -0,0 +1,2 @@
1
+ export { TMenuNavigationPlugin } from './navigation.plugin';
2
+ export type { TMenuNavigationPluginEvents } from './types';
@@ -0,0 +1,116 @@
1
+ import type { IMenuOwner } from '@soxa-ui/core';
2
+ import type { IPluginContext } from '../../../base';
3
+ import { TDismissPlugin } from '../../dismiss';
4
+ import { TCollectionElements } from '../../collection';
5
+ import { TListNavigationPlugin } from '../../list/navigation';
6
+ import type { TListEdge } from '../../list/navigation';
7
+ import type { TMenuNavigationPluginEvents } from './types';
8
+ /**
9
+ * TMenuNavigationPlugin — клавиатура панели одного уровня меню: корня или
10
+ * подменю.
11
+ *
12
+ * Общая механика — привязка к коллекции, учёт подсветки, циклический сдвиг,
13
+ * пропуск недоступных пунктов — в `TListNavigationPlugin`, как у ListBox и
14
+ * Select. Своё у меню — модель фокуса: **фокус идёт за подсветкой**.
15
+ * Подсвеченный пункт держит DOM-фокус на своей строке (`tabindex="-1"` пишет
16
+ * коллекция), а без подсветки фокус на самой панели. Поэтому подсветка здесь
17
+ * и есть фокус: сменилась — фокус строке, снята у открытого меню — панели.
18
+ * Закрытие подсветку снимает, фокус не трогая: куда его вернуть, решает модель
19
+ * фокуса уровня.
20
+ *
21
+ * **Фокус ставится без прокрутки** (`preventScroll`), откуда бы ни пришла
22
+ * подсветка — от клавиш или от указателя. К подсвеченному пункту список
23
+ * докручивает `TListScrollPlugin` по событию подсветки, тем же правилом, что у
24
+ * ListBox и Select: ближайшим краем. Браузер, который докручивал к фокусу сам,
25
+ * делал это только за клавишами и по-своему, а открытие меню стрелкой вверх
26
+ * (фокус ставит модель фокуса, тоже без прокрутки) оставляло последний пункт
27
+ * за краем.
28
+ *
29
+ * Панель слушается, пока меню открыто, — её находит `TDismissPlugin` по
30
+ * пометке владельцем: панель телепортирована, и до корня её клавиши не
31
+ * всплывают. ↑/↓ — по кругу, Home и End — к крайним, буква — набор по первым
32
+ * буквам (`TTypeahead`); пробел — буква, только пока набор идёт. Клавишу
33
+ * панель берёт только с себя и со строк своих пунктов, как ListBox: клавиши
34
+ * содержимого слотов (поле в пункте) принадлежат им. Клавишу, которую уже
35
+ * обработали (`defaultPrevented`), панель не трогает: строка пункта с
36
+ * подменю гасит свои — стрелку к концу строки, Enter и пробел, — и своё
37
+ * подменю открывает сама (`TMenuSubmenuKeyboardPlugin`), а набор её пробела
38
+ * не перехватывает; строка пункта с панелью так же гасит стрелку к концу
39
+ * строки (`TMenuPopoverItemKeyboardPlugin`).
40
+ *
41
+ * Enter и пробел на строке не трогаются: строка — `Button` на `div`, и клик
42
+ * из них делает её `TActionPlugin`, как браузер у `<button>`. Нажатие пункта
43
+ * одно — клик по строке, и второго пути к нему нет. Escape и Tab — у модели
44
+ * фокуса.
45
+ *
46
+ * Что слушает корень и что ещё значат клавиши панели, решает наследник:
47
+ * у меню у кнопки корень — триггер (`TMenuKeyboardPlugin`), у подменю корень
48
+ * — его строка в меню над ним, а стрелка к началу строки в его панели
49
+ * закрывает уровень (`TMenuSubmenuKeyboardPlugin`).
50
+ *
51
+ * Наружу — открытие на крайнем пункте, подсветка пункта, её снятие и строка
52
+ * подсвеченного: открывает и подсвечивает пункт и указатель, а строку берёт
53
+ * модель фокуса — туда она ставит фокус при открытии.
54
+ */
55
+ export declare abstract class TMenuNavigationPlugin<TEvents extends TMenuNavigationPluginEvents = TMenuNavigationPluginEvents> extends TListNavigationPlugin<TEvents> {
56
+ /** Владелец пунктов — меню или пункт с подменю. */
57
+ protected _owner: IMenuOwner<any> | null;
58
+ protected _dismiss: TDismissPlugin | null;
59
+ protected _elements: TCollectionElements | null;
60
+ /** Панель со слушателем клавиш — пока меню открыто. */
61
+ private _panel;
62
+ private readonly _typeahead;
63
+ /** Frame that highlights the edge item once the panel's first opening has drawn the items. */
64
+ private _edgeFrame;
65
+ install(ctx: IPluginContext, options?: unknown): void;
66
+ destroy(): void;
67
+ /** Строка подсвеченного пункта; `null` — подсветки нет или пункта нет в документе. */
68
+ get highlightedRow(): Element | null;
69
+ /**
70
+ * Подсветить пункт — фокус его строке. Недоступный не подсвечивается.
71
+ *
72
+ * @returns подсвечен ли пункт
73
+ */
74
+ highlightItem(uid: string | number): boolean;
75
+ /** Снять подсветку: у открытого меню фокус уходит панели. */
76
+ unhighlight(): void;
77
+ /**
78
+ * Open the menu and highlight its edge item — focus goes to that item's
79
+ * row. This is how a key opens it: the button — ↓, Enter, Space and ↑, the
80
+ * context menu — its key and Shift+F10, a submenu — the arrow towards the
81
+ * end of the line, Enter and Space on its row.
82
+ *
83
+ * The panel's items are mounted with its first opening
84
+ * (`contentRendered`): on that opening the collection is still empty, and
85
+ * the adapter draws the items after this call. The edge is then
86
+ * highlighted on the next frame — every adapter has drawn them by then,
87
+ * and their rows are in the document. A closing before that frame cancels
88
+ * it.
89
+ */
90
+ openAt(edge: TListEdge): void;
91
+ /**
92
+ * Своя клавиша панели сверх общих — у подменю стрелка к началу строки.
93
+ * Обработал — `true`, и клавиша гасится здесь.
94
+ */
95
+ protected onPanelKey(_e: KeyboardEvent): boolean;
96
+ /** Справа налево ли панель: стрелки по строке — по её направлению. */
97
+ protected isRtl(): boolean;
98
+ /**
99
+ * Подсветка — фокус: подсвеченному пункту — его строке, без подсветки у
100
+ * открытого меню — панели. Без прокрутки: к пункту докручивает
101
+ * `TListScrollPlugin`. Строки нет в документе (панель ещё скрыта, её
102
+ * откроет следующий кадр) — фокус ставит модель фокуса при открытии.
103
+ */
104
+ protected onHighlightChanged(uid: string | number | null): void;
105
+ /** Панель открытого меню; закрытое фокус не получает. */
106
+ private _openPanel;
107
+ /** Слушать панель, пока меню открыто, — на её открытии и на объявлении корня. */
108
+ private _syncPanel;
109
+ private _cancelEdgeFrame;
110
+ private _unlistenPanel;
111
+ /** Клавиша панели — с неё самой или со строки показанного пункта. */
112
+ private _isOwnKey;
113
+ private readonly _onPanelKeyDown;
114
+ /** Буква набора: подсветка — на найденный пункт, нет такого — на месте. */
115
+ private _typeTo;
116
+ }
@@ -0,0 +1,222 @@
1
+ import { TElementPlugin } from "../../element/element.plugin.js";
2
+ import { TCollectionElements } from "../../collection/collection-elements.plugin.js";
3
+ import { isFocusableElement } from "../../../utils/isFocusableElement.js";
4
+ import { isPrintableKey } from "../../../utils/isPrintableKey.js";
5
+ import { rowOf } from "../../list/row.js";
6
+ import { TDismissPlugin } from "../../dismiss/dismiss.plugin.js";
7
+ import { TListNavigationPlugin } from "../../list/navigation/navigation.plugin.js";
8
+ import { TTypeahead, itemText } from "../../list/typeahead.js";
9
+ //#region src/custom/menu/navigation/navigation.plugin.ts
10
+ /**
11
+ * TMenuNavigationPlugin — клавиатура панели одного уровня меню: корня или
12
+ * подменю.
13
+ *
14
+ * Общая механика — привязка к коллекции, учёт подсветки, циклический сдвиг,
15
+ * пропуск недоступных пунктов — в `TListNavigationPlugin`, как у ListBox и
16
+ * Select. Своё у меню — модель фокуса: **фокус идёт за подсветкой**.
17
+ * Подсвеченный пункт держит DOM-фокус на своей строке (`tabindex="-1"` пишет
18
+ * коллекция), а без подсветки фокус на самой панели. Поэтому подсветка здесь
19
+ * и есть фокус: сменилась — фокус строке, снята у открытого меню — панели.
20
+ * Закрытие подсветку снимает, фокус не трогая: куда его вернуть, решает модель
21
+ * фокуса уровня.
22
+ *
23
+ * **Фокус ставится без прокрутки** (`preventScroll`), откуда бы ни пришла
24
+ * подсветка — от клавиш или от указателя. К подсвеченному пункту список
25
+ * докручивает `TListScrollPlugin` по событию подсветки, тем же правилом, что у
26
+ * ListBox и Select: ближайшим краем. Браузер, который докручивал к фокусу сам,
27
+ * делал это только за клавишами и по-своему, а открытие меню стрелкой вверх
28
+ * (фокус ставит модель фокуса, тоже без прокрутки) оставляло последний пункт
29
+ * за краем.
30
+ *
31
+ * Панель слушается, пока меню открыто, — её находит `TDismissPlugin` по
32
+ * пометке владельцем: панель телепортирована, и до корня её клавиши не
33
+ * всплывают. ↑/↓ — по кругу, Home и End — к крайним, буква — набор по первым
34
+ * буквам (`TTypeahead`); пробел — буква, только пока набор идёт. Клавишу
35
+ * панель берёт только с себя и со строк своих пунктов, как ListBox: клавиши
36
+ * содержимого слотов (поле в пункте) принадлежат им. Клавишу, которую уже
37
+ * обработали (`defaultPrevented`), панель не трогает: строка пункта с
38
+ * подменю гасит свои — стрелку к концу строки, Enter и пробел, — и своё
39
+ * подменю открывает сама (`TMenuSubmenuKeyboardPlugin`), а набор её пробела
40
+ * не перехватывает; строка пункта с панелью так же гасит стрелку к концу
41
+ * строки (`TMenuPopoverItemKeyboardPlugin`).
42
+ *
43
+ * Enter и пробел на строке не трогаются: строка — `Button` на `div`, и клик
44
+ * из них делает её `TActionPlugin`, как браузер у `<button>`. Нажатие пункта
45
+ * одно — клик по строке, и второго пути к нему нет. Escape и Tab — у модели
46
+ * фокуса.
47
+ *
48
+ * Что слушает корень и что ещё значат клавиши панели, решает наследник:
49
+ * у меню у кнопки корень — триггер (`TMenuKeyboardPlugin`), у подменю корень
50
+ * — его строка в меню над ним, а стрелка к началу строки в его панели
51
+ * закрывает уровень (`TMenuSubmenuKeyboardPlugin`).
52
+ *
53
+ * Наружу — открытие на крайнем пункте, подсветка пункта, её снятие и строка
54
+ * подсвеченного: открывает и подсвечивает пункт и указатель, а строку берёт
55
+ * модель фокуса — туда она ставит фокус при открытии.
56
+ */
57
+ var TMenuNavigationPlugin = class extends TListNavigationPlugin {
58
+ /** Владелец пунктов — меню или пункт с подменю. */
59
+ _owner = null;
60
+ _dismiss = null;
61
+ _elements = null;
62
+ /** Панель со слушателем клавиш — пока меню открыто. */
63
+ _panel = null;
64
+ _typeahead = new TTypeahead();
65
+ /** Frame that highlights the edge item once the panel's first opening has drawn the items. */
66
+ _edgeFrame = null;
67
+ install(ctx, options) {
68
+ super.install(ctx, options);
69
+ this._owner = ctx.getInstance() ?? null;
70
+ this._dismiss = ctx.get(TDismissPlugin) ?? null;
71
+ this._elements = ctx.get(TCollectionElements) ?? null;
72
+ const elementPlugin = ctx.get(TElementPlugin);
73
+ elementPlugin?.events.on("ready", () => this._syncPanel());
74
+ elementPlugin?.events.on("removed", () => this._unlistenPanel());
75
+ this._listenTo(this._owner?.events, "change:open", ({ newValue: open }) => {
76
+ this._syncPanel();
77
+ if (open) return;
78
+ this._cancelEdgeFrame();
79
+ this._typeahead.reset();
80
+ this.clearHighlight();
81
+ });
82
+ }
83
+ destroy() {
84
+ this._unlistenPanel();
85
+ this._cancelEdgeFrame();
86
+ this._owner = null;
87
+ this._dismiss = null;
88
+ this._elements = null;
89
+ super.destroy();
90
+ }
91
+ /** Строка подсвеченного пункта; `null` — подсветки нет или пункта нет в документе. */
92
+ get highlightedRow() {
93
+ return this._highlightedUid === null ? null : rowOf(this._elements, this._highlightedUid);
94
+ }
95
+ /**
96
+ * Подсветить пункт — фокус его строке. Недоступный не подсвечивается.
97
+ *
98
+ * @returns подсвечен ли пункт
99
+ */
100
+ highlightItem(uid) {
101
+ if (!this.itemByUid(uid)) return false;
102
+ this.highlight(uid);
103
+ return true;
104
+ }
105
+ /** Снять подсветку: у открытого меню фокус уходит панели. */
106
+ unhighlight() {
107
+ this.clearHighlight();
108
+ }
109
+ /**
110
+ * Open the menu and highlight its edge item — focus goes to that item's
111
+ * row. This is how a key opens it: the button — ↓, Enter, Space and ↑, the
112
+ * context menu — its key and Shift+F10, a submenu — the arrow towards the
113
+ * end of the line, Enter and Space on its row.
114
+ *
115
+ * The panel's items are mounted with its first opening
116
+ * (`contentRendered`): on that opening the collection is still empty, and
117
+ * the adapter draws the items after this call. The edge is then
118
+ * highlighted on the next frame — every adapter has drawn them by then,
119
+ * and their rows are in the document. A closing before that frame cancels
120
+ * it.
121
+ */
122
+ openAt(edge) {
123
+ const owner = this._owner;
124
+ if (!owner) return;
125
+ owner.open = true;
126
+ this._cancelEdgeFrame();
127
+ if (this.items().length > 0) {
128
+ this.highlightEdge(edge);
129
+ return;
130
+ }
131
+ this._edgeFrame = requestAnimationFrame(() => {
132
+ this._edgeFrame = null;
133
+ if (this._owner?.open) this.highlightEdge(edge);
134
+ });
135
+ }
136
+ /**
137
+ * Своя клавиша панели сверх общих — у подменю стрелка к началу строки.
138
+ * Обработал — `true`, и клавиша гасится здесь.
139
+ */
140
+ onPanelKey(_e) {
141
+ return false;
142
+ }
143
+ /** Справа налево ли панель: стрелки по строке — по её направлению. */
144
+ isRtl() {
145
+ const panel = this._openPanel();
146
+ return panel !== null && getComputedStyle(panel).direction === "rtl";
147
+ }
148
+ /**
149
+ * Подсветка — фокус: подсвеченному пункту — его строке, без подсветки у
150
+ * открытого меню — панели. Без прокрутки: к пункту докручивает
151
+ * `TListScrollPlugin`. Строки нет в документе (панель ещё скрыта, её
152
+ * откроет следующий кадр) — фокус ставит модель фокуса при открытии.
153
+ */
154
+ onHighlightChanged(uid) {
155
+ const target = uid === null ? this._openPanel() : rowOf(this._elements, uid);
156
+ if (isFocusableElement(target)) target.focus({ preventScroll: true });
157
+ }
158
+ /** Панель открытого меню; закрытое фокус не получает. */
159
+ _openPanel() {
160
+ return this._owner?.open ? this._dismiss?.findPanel() ?? null : null;
161
+ }
162
+ /** Слушать панель, пока меню открыто, — на её открытии и на объявлении корня. */
163
+ _syncPanel() {
164
+ const panel = this._openPanel();
165
+ if (panel === this._panel) return;
166
+ this._unlistenPanel();
167
+ if (!panel) return;
168
+ this._panel = panel;
169
+ panel.addEventListener("keydown", this._onPanelKeyDown);
170
+ }
171
+ _cancelEdgeFrame() {
172
+ if (this._edgeFrame === null) return;
173
+ cancelAnimationFrame(this._edgeFrame);
174
+ this._edgeFrame = null;
175
+ }
176
+ _unlistenPanel() {
177
+ this._panel?.removeEventListener("keydown", this._onPanelKeyDown);
178
+ this._panel = null;
179
+ }
180
+ /** Клавиша панели — с неё самой или со строки показанного пункта. */
181
+ _isOwnKey(e) {
182
+ if (e.target === e.currentTarget) return true;
183
+ return this.shown().some((item) => rowOf(this._elements, item.uid) === e.target);
184
+ }
185
+ _onPanelKeyDown = (e) => {
186
+ if (e.defaultPrevented || !this._isOwnKey(e)) return;
187
+ switch (e.key) {
188
+ case "ArrowDown":
189
+ e.preventDefault();
190
+ this.move(1);
191
+ return;
192
+ case "ArrowUp":
193
+ e.preventDefault();
194
+ this.move(-1);
195
+ return;
196
+ case "Home":
197
+ e.preventDefault();
198
+ this.highlightEdge("first");
199
+ return;
200
+ case "End":
201
+ e.preventDefault();
202
+ this.highlightEdge("last");
203
+ return;
204
+ }
205
+ if (this.onPanelKey(e)) {
206
+ e.preventDefault();
207
+ return;
208
+ }
209
+ if (e.key === " " && !this._typeahead.typing()) return;
210
+ if (!isPrintableKey(e)) return;
211
+ e.preventDefault();
212
+ this._typeTo(e.key);
213
+ };
214
+ /** Буква набора: подсветка — на найденный пункт, нет такого — на месте. */
215
+ _typeTo(char) {
216
+ const current = this._highlightedUid === null ? null : this.itemByUid(this._highlightedUid);
217
+ const match = this._typeahead.next(char, this.items(), current, itemText);
218
+ if (match) this.highlight(match.uid);
219
+ }
220
+ };
221
+ //#endregion
222
+ export { TMenuNavigationPlugin };
@@ -0,0 +1,2 @@
1
+ import type { TListNavigationPluginEvents } from '../../list/navigation';
2
+ export type TMenuNavigationPluginEvents = TListNavigationPluginEvents;
@@ -0,0 +1,13 @@
1
+ import type { TDismissPlugin } from '../dismiss';
2
+ /**
3
+ * Держит ли вложенный слой меню фокус — подменю или панель пункта с панелью:
4
+ * фокус в нём по правилу его `TDismissPlugin` (строка пункта, панель и слои
5
+ * над ней) или нигде.
6
+ *
7
+ * Модели фокуса таких слоёв по нему решают, возвращать ли фокус на строку
8
+ * пункта при закрытии (`_returnsFocus`). Слой, закрытый вместе с меню, фокус
9
+ * на строку спрятанной панели не тянет: меню уже вернуло его на триггер, — а
10
+ * подписчики открытости меню и слоя идут в любом порядке, и правило держит
11
+ * оба.
12
+ */
13
+ export declare function holdsFocus(root: Element, dismiss: TDismissPlugin | null): boolean;
@@ -0,0 +1,20 @@
1
+ //#region src/custom/menu/nested-layer.ts
2
+ /**
3
+ * Держит ли вложенный слой меню фокус — подменю или панель пункта с панелью:
4
+ * фокус в нём по правилу его `TDismissPlugin` (строка пункта, панель и слои
5
+ * над ней) или нигде.
6
+ *
7
+ * Модели фокуса таких слоёв по нему решают, возвращать ли фокус на строку
8
+ * пункта при закрытии (`_returnsFocus`). Слой, закрытый вместе с меню, фокус
9
+ * на строку спрятанной панели не тянет: меню уже вернуло его на триггер, — а
10
+ * подписчики открытости меню и слоя идут в любом порядке, и правило держит
11
+ * оба.
12
+ */
13
+ function holdsFocus(root, dismiss) {
14
+ const doc = root.ownerDocument;
15
+ const active = doc.activeElement;
16
+ if (!active || active === doc.body || active === doc.documentElement) return true;
17
+ return dismiss?.isInside(active) ?? false;
18
+ }
19
+ //#endregion
20
+ export { holdsFocus };
@@ -0,0 +1,2 @@
1
+ export { TMenuPointerPlugin } from './pointer.plugin';
2
+ export type { TMenuPointerPluginEvents } from './types';
@@ -0,0 +1,45 @@
1
+ import type { TMenuPoint } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { IMenuOpenHost } from './strategies';
5
+ import type { TMenuPointerPluginEvents } from './types';
6
+ /**
7
+ * TMenuPointerPlugin — открытие меню указателем.
8
+ *
9
+ * Открытие — стратегия по способу владельца (`openOn`, `strategies/`): у
10
+ * кнопки (`TMenuPressStrategy`) клик по корню переключает меню, у
11
+ * контекстного меню (`TMenuContextStrategy`) `contextmenu` и долгое касание
12
+ * над областью вызывают его у точки вызова (`point` владельца). Стратегию
13
+ * выбирает подписка на `change:openOn`, а не проверка в обработчике, и
14
+ * слушатели корня у каждого способа свои. Вызванное клавишей контекстное
15
+ * меню открывается на первом пункте — через клавиатуру меню, как кнопка с
16
+ * клавиатуры.
17
+ *
18
+ * Указатель в открытой панели — подсветка пунктов и подменю — у
19
+ * `TMenuHoverPlugin`: он общий у меню и подменю, а способ открытия есть
20
+ * только у меню.
21
+ */
22
+ export declare class TMenuPointerPlugin extends TBasePlugin<any, TMenuPointerPluginEvents> implements IMenuOpenHost {
23
+ private _owner;
24
+ private _keyboard;
25
+ /** Корень — под стратегию открытия. */
26
+ private _root;
27
+ /** Способ открытия на корне — по `openOn` владельца. */
28
+ private _strategy;
29
+ install(ctx: IPluginContext): void;
30
+ destroy(): void;
31
+ /** Открыто ли меню — для стратегий открытия. */
32
+ get isOpen(): boolean;
33
+ /** Переключить меню — нажатие кнопки. */
34
+ toggle(): void;
35
+ /**
36
+ * Вызвать меню у точки окна, открытое — переставить к ней: точку отдаёт
37
+ * якорю панели разметка. Вызвали клавишей — меню открывается на первом
38
+ * пункте, как кнопка с клавиатуры, указателем — фокус на панели.
39
+ */
40
+ invoke(point: TMenuPoint, byKeyboard: boolean): void;
41
+ /** Закрыть меню. */
42
+ close(): void;
43
+ /** Стратегия открытия — по способу владельца, на объявленном корне. */
44
+ private _syncStrategy;
45
+ }