@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,126 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ //#region src/custom/field/ids/ids.plugin.ts
3
+ /** Ссылок нет: ни одна часть не рисуется. */
4
+ var NO_LINKS = {};
5
+ /**
6
+ * TFieldIdsPlugin — связки поля формы в документе: подпись, подсказка и ошибка
7
+ * с контролом.
8
+ *
9
+ * `id` частей — в их наборы (`labelAria`, `helperAria`, `errorAria`), от
10
+ * монтирования поля (`createId`), а не от экземпляра: они нужны только
11
+ * документу, и на сервере и в браузере обязаны совпасть. Пишутся при
12
+ * установке, синхронно, — связка есть уже в первой (и серверной) отрисовке.
13
+ *
14
+ * **Ссылки контрола на части** (`links`) плагин считает, а пишет их в `aria`
15
+ * контрола связка поля с контролом — через его `TAriaPlugin`: часть
16
+ * подписи — пока подпись рисуется, справка — та, что видна: ошибка, а без неё
17
+ * подсказка. Сменилась видимая часть — `change:links`.
18
+ *
19
+ * **`for` подписи** — `<id монтирования>-control` (`controlId`): этот же `id`
20
+ * labelable-контрол без своего получает от связки своим `id`, и подпись
21
+ * называет его и передаёт ему клик с первой отрисовки. Принятый контрол
22
+ * сообщает о себе (`bindControl`): `for` ведёт на его `id`, а у группы
23
+ * (DateInput, DatePicker, RadioGroup) `for` снят — её подпись называет
24
+ * ссылкой `aria-labelledby`. Снятый контрол (`unbindControl`) возвращает
25
+ * `for` к `controlId`. Контрол у поля один: связку берёт первый.
26
+ */
27
+ var TFieldIdsPlugin = class extends TBasePlugin {
28
+ _field = null;
29
+ _labelId = "";
30
+ _helperId = "";
31
+ _errorId = "";
32
+ _controlId = "";
33
+ _links = NO_LINKS;
34
+ _control = null;
35
+ install(ctx) {
36
+ super.install(ctx);
37
+ const field = ctx.getInstance();
38
+ if (!field) return;
39
+ this._field = field;
40
+ this._labelId = ctx.createId("label");
41
+ this._helperId = ctx.createId("helper");
42
+ this._errorId = ctx.createId("error");
43
+ this._controlId = ctx.createId("control");
44
+ field.labelAria.add("id", this._labelId);
45
+ field.helperAria.add("id", this._helperId);
46
+ field.errorAria.add("id", this._errorId);
47
+ this._syncFor();
48
+ this._links = this._linksOf(field);
49
+ const relink = () => this._relink(field);
50
+ this._listenTo(field.events, "change:label", relink);
51
+ this._listenTo(field.events, "change:helper", relink);
52
+ this._listenTo(field.events, "change:error", relink);
53
+ this._listenTo(field.events, "change:invalid", relink);
54
+ }
55
+ /**
56
+ * `id` поля контрола от поля: его получает labelable-контрол без своего
57
+ * `id`, на него ведёт `for` подписи.
58
+ */
59
+ get controlId() {
60
+ return this._controlId;
61
+ }
62
+ /** Ссылки контрола на видимые части. Новый объект на каждую смену. */
63
+ get links() {
64
+ return this._links;
65
+ }
66
+ /** Занята ли связка: контрол у поля один. */
67
+ get bound() {
68
+ return this._control !== null;
69
+ }
70
+ /**
71
+ * Контрол приняли — `for` подписи по нему. Зовёт связка и на смену `id`
72
+ * контрола.
73
+ */
74
+ bindControl(control) {
75
+ this._control = control;
76
+ this._syncFor();
77
+ }
78
+ /** Контрол сняли: связка свободна, `for` — снова на `controlId`. */
79
+ unbindControl() {
80
+ this._control = null;
81
+ this._syncFor();
82
+ }
83
+ destroy() {
84
+ this._field = null;
85
+ this._control = null;
86
+ this._links = NO_LINKS;
87
+ super.destroy();
88
+ }
89
+ _syncFor() {
90
+ this._field?.labelAria.add("for", this._forOf(this._control));
91
+ }
92
+ /**
93
+ * `for` подписи: свой `id` поля контрола или `controlId`; у группы — нет:
94
+ * `for` называет только labelable-элемент.
95
+ */
96
+ _forOf(control) {
97
+ if (control === null) return this._controlId;
98
+ if (!control.labelable) return null;
99
+ return control.id ?? this._controlId;
100
+ }
101
+ _relink(field) {
102
+ const oldLinks = this.links;
103
+ const links = this._linksOf(field);
104
+ const current = this._links;
105
+ if (links.labelledBy === current.labelledBy && links.describedBy === current.describedBy) return;
106
+ this._links = links;
107
+ this.events.emit("change:links", {
108
+ newValue: links,
109
+ oldValue: oldLinks
110
+ });
111
+ }
112
+ /** Ссылки — на части, которые рисуются: подпись с текстом и видимую справку. */
113
+ _linksOf(field) {
114
+ return {
115
+ labelledBy: field.label !== "" ? this._labelId : void 0,
116
+ describedBy: this._describedByOf(field)
117
+ };
118
+ }
119
+ /** Видимая справка: ошибка, а без неё — подсказка. */
120
+ _describedByOf(field) {
121
+ if (field.errorRendered) return this._errorId;
122
+ if (field.helperRendered) return this._helperId;
123
+ }
124
+ };
125
+ //#endregion
126
+ export { TFieldIdsPlugin };
@@ -0,0 +1,2 @@
1
+ export * from './ids.plugin';
2
+ export type { IFieldControlInfo, IFieldLinks, TFieldIdsPluginEvents } from './types';
@@ -0,0 +1,28 @@
1
+ import type { TValuePayload } from '@soxa-ui/core';
2
+ import type { TPluginEvents } from '../../../base';
3
+ /**
4
+ * Ссылки контрола на части поля — то, что поле даёт `aria` своего контрола.
5
+ *
6
+ * Пары «есть / нет»: части без текста в разметке нет, и ссылки на неё нет
7
+ * тоже — иначе контрол ссылался бы на `id`, которого в документе нет.
8
+ */
9
+ export interface IFieldLinks {
10
+ /** `id` подписи — пока она рисуется (задан её текст) */
11
+ readonly labelledBy?: string;
12
+ /** `id` видимой справки: ошибки, а без неё — подсказки */
13
+ readonly describedBy?: string;
14
+ }
15
+ /**
16
+ * Что контрол сообщает о себе полю, когда его приняли: по этому плагин решает
17
+ * `for` подписи.
18
+ */
19
+ export interface IFieldControlInfo {
20
+ /** `id` поля контрола — свой или заданный полем; у контрола без `id` — `undefined` */
21
+ readonly id: string | undefined;
22
+ /** Labelable ли элемент с `aria`: группу `for` подписи не называет */
23
+ readonly labelable: boolean;
24
+ }
25
+ export type TFieldIdsPluginEvents = TPluginEvents & {
26
+ /** change:links — ссылки контрола на части сменились: появилась, пропала или сменилась часть */
27
+ 'change:links': (payload: TValuePayload<IFieldLinks>) => void;
28
+ };
@@ -0,0 +1 @@
1
+ export * from './ids';
@@ -0,0 +1,483 @@
1
+ import type { TDefaultValues } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TPoint } from '../../../utils';
5
+ import type { IAnchorPluginOptions, IAnchorPluginProps, TAnchorPluginEvents, TFramePlacement } from './types';
6
+ /**
7
+ * Атрибут фактической стороны панели после flip: плагин пишет его в `dataset`
8
+ * Frame. Читают его тема и плагин жеста (`TSwipePlugin`): панель у триггера
9
+ * уходит жестом от него, а под ним она или над ним, знает только её узел.
10
+ *
11
+ * Имя с префиксом `data-`: по нему читают узел, а `dataset` принимает имя с
12
+ * префиксом как есть.
13
+ */
14
+ export declare const ANCHOR_PLACEMENT_ATTRIBUTE = "data-placement";
15
+ /**
16
+ * TAnchorPlugin — привязка Frame к чужому элементу.
17
+ *
18
+ * Общий слой для всего, что открывается у чего-то: выпадающий список Select,
19
+ * меню у кнопки, поповер, подсказка. Сам ничего не рисует — вычисляет
20
+ * координаты и пишет их во Frame (`x`, `y`, при `matchWidth` ещё `width`).
21
+ * Дальше их раскладывает `TFrameLayoutPlugin`, как любые другие координаты.
22
+ *
23
+ * Разделение не формальное: раскладка отвечает за собственные пропсы Frame,
24
+ * привязка — за слежение за посторонним элементом. Смешивать их значит
25
+ * заводить в одном плагине два повода меняться.
26
+ *
27
+ * **Место считается, пока панель на экране** — показана или ещё гаснет.
28
+ * Закрытые панели у полей — списки Select, подсказки, меню, календари
29
+ * DatePicker — стоят на странице десятками, и каждая на каждом кадре
30
+ * прокрутки меряла бы свой якорь и писала бы во Frame новые координаты.
31
+ * Поэтому якорь плагин запоминает сразу, а слежение за ним (`_subscribe`)
32
+ * заводит показ Frame, у Frame, созданного видимым, — назначение якоря.
33
+ * Снимает его конец закрытия: когда корень доиграл переходы закрытия
34
+ * (`afterTransitions`), — гаснущая и уходящая жестом панель идёт за полем до
35
+ * конца. Новый показ ожидание отменяет. Снятие места — якоря, когда точки нет,
36
+ * и точки, когда нет якоря, — и `destroy()` снимают слежение сразу, снятый
37
+ * корень — тоже: панели на экране нет, и ждать её перехода незачем, — а новый
38
+ * корень показанной панели слежение возвращает.
39
+ * Вне слежения место не считает ничто — ни прокрутка, ни наблюдатель панели,
40
+ * ни сеттеры, — на любой стороне, сбоку тоже: показ считает его заново.
41
+ * Открытость плагин ведёт сам, по `show` и `hide` своего Frame, а не
42
+ * адаптер: якорь только у открытой панели развёл бы это правило по шести
43
+ * адаптерам.
44
+ *
45
+ * `placement` — сторона и выравнивание по якорю: `-start` — по началу, `-end` —
46
+ * по концу, без суффикса — по центру. Стороны блока, `top` и `bottom`, ставят
47
+ * панель над якорем или под ним, и выравнивание идёт вдоль строки. Стороны
48
+ * строки, `start` и `end`, ставят её у начала или конца строки якоря, и
49
+ * выравнивание идёт вдоль якоря по вертикали: `-start` — верхние края вровень,
50
+ * `-end` — нижние. Поверх этого выбора плагин сам решает две вещи:
51
+ * **flip** — если панель не влезает с выбранной стороны (сверху и снизу — по
52
+ * высоте, сбоку — по ширине), а с противоположной места больше, показывает её
53
+ * там; **shift** — сдвигает панель вдоль якоря, чтобы она не вылезала за край:
54
+ * у верха и низа — `x`, у боковой — `y`. Границей обоим служит видимая область
55
+ * окна, без классической полосы прокрутки (см. `_viewport`). Оба работают
56
+ * внутри тех же вариантов `placement`: flip переключает только сторону, на той
57
+ * же оси, — выравнивание, центр в том числе, остаётся, — а shift не меняет
58
+ * `placement` и только ограничивает координату. Flip выключается свойством
59
+ * `flip` (по умолчанию включён): панель остаётся на стороне потребителя, даже
60
+ * если там не влезает. Shift от него не зависит.
61
+ *
62
+ * Боковая панель сверх того прижимается к краям окна и по `x`: не влезла ни с
63
+ * одной стороны (узкий экран, широкое содержимое вроде календаря) — накрывает
64
+ * якорь, но видна целиком. У верха и низа этот случай закрывает потолок высоты
65
+ * панели в теме, а потолка ширины у произвольного содержимого нет.
66
+ *
67
+ * У flip есть память. Правило выше только выбирает сторону (`_chooseSide`), а
68
+ * открытая панель свою держит (`_holdSide`): пока на ней влезает — стоит, не
69
+ * влезла — переходит на противоположную, только если влезает там, не влезает
70
+ * нигде — стоит. Правило без памяти скакало: одна и та же граница «снизу
71
+ * влезает» и уводила панель наверх, и возвращала её вниз. На телефоне палец
72
+ * двигает страницу по пикселю туда и обратно, адресная строка браузера
73
+ * прячется и выезжает, и поле всё время стоит на этой границе, а на коротком
74
+ * экране, где панель не влезает нигде, сторона менялась на каждом переходе
75
+ * поля через середину экрана. Так же поступает CSS Anchor Positioning — держит
76
+ * последний удачный вариант. Сбоку правило и память те же, только место
77
+ * меряется по ширине: границу «сбоку влезает» якорь переходит при прокрутке
78
+ * вбок и смене ширины окна. Сторону забывают показ Frame, смена `placement` и
79
+ * `flip`, смена и снятие якоря и `contained`, и следующий расчёт выбирает её
80
+ * заново. Закрытие её не забывает: гаснущая панель держит сторону, как
81
+ * открытая.
82
+ *
83
+ * `RTL` (`getComputedStyle(anchor).direction`) разворачивает ось строки. У
84
+ * верха и низа — выравнивание: в RTL `-start` выравнивает панель по правому
85
+ * краю якоря, `-end` — по левому. У боковой — сторону: в RTL `start` справа
86
+ * от якоря, `end` — слева. Центр и выравнивание боковой панели по вертикали
87
+ * от направления не зависят.
88
+ *
89
+ * Фактическая сторона после flip уходит теме через `data-placement` на самом
90
+ * Frame (`frame.dataset`) — она не всегда совпадает с тем, что задал
91
+ * потребитель в `placement`. Выравнивание в ней — потребителя, а сторона
92
+ * логическая и в RTL: `end-start`, перенесённый flip-ом, — `start-start`.
93
+ *
94
+ * `position` панели у якоря выбирает плагин (`_choosePosition`), как пишет
95
+ * её `x` и `y`: `absolute`, а у якоря, который стоит в окне, — `fixed`.
96
+ * Панель `fixed` прокрутку страницы не замечает, и сдвинуть её за полем
97
+ * может только пересчёт по `scroll`. На телефоне страницу прокручивает
98
+ * композитор, а `scroll` приходит в JS кадром позже: поле уже уехало, панель
99
+ * кадр стоит и догоняет — дрожит на каждом кадре прокрутки. Ни кадр
100
+ * (`requestAnimationFrame`), ни память стороны этого не снимают. Панель
101
+ * `absolute` лежит в документе, и окно браузер прокручивает вместе с ней и
102
+ * полем, без JS, — так у PrimeVue. Якорь в окне (`fixed` или `sticky` к
103
+ * окну, `isPinnedToViewport`) прокрутка окна не двигает, и панель `absolute`
104
+ * отставала бы от него наоборот — у него `fixed`. Выбирают заново показ Frame
105
+ * и смена якоря у показанной панели.
106
+ *
107
+ * Внутренняя прокрутка — граница, а не недоделка. Поле в своём прокручиваемом
108
+ * блоке, а панель в `body`: её отставание на кадр снимет только CSS Anchor
109
+ * Positioning, где место считает браузер, — или `target` панели в самом
110
+ * блоке, и тогда она едет вместе с ним.
111
+ *
112
+ * **Точка** (`point`) — место вместо якоря: контекстное меню встаёт у места
113
+ * вызова, а не у области, в которой его вызвали. Точка главнее якоря, пока
114
+ * задана, — иначе выбирать, к чему привязать панель, пришлось бы шаблону, —
115
+ * а снятая возвращает панель к якорю. Это прямоугольник нулевого размера в
116
+ * координатах окна, и расчёт у него тот же: стороны, flip, shift, RTL
117
+ * (направление — якоря, без него — самой панели) и `data-placement`, и
118
+ * считается он так же, пока панель на экране: у закрытой точка только
119
+ * запоминается. Своего у точки три вещи: панель `fixed` — точка стоит в окне,
120
+ * как якорь в `fixed`-шапке; пересчёт только на смену размера окна —
121
+ * прокрутка и размер чужого элемента точку не двигают, и наблюдателя якоря у
122
+ * неё нет; `matchWidth` не действует — ширины у точки нет. Новая точка, как
123
+ * новый якорь, выбирает сторону заново.
124
+ *
125
+ * Считается всё в координатах окна (`getBoundingClientRect()`), а во Frame
126
+ * уходит от угла блока, от которого браузер отсчитывает `left`/`top` панели
127
+ * (`positionOriginOf`): у `absolute` в `body` это начало документа, в
128
+ * позиционированном предке — его угол с прокруткой, у `fixed` — окно или
129
+ * предок с трансформацией. Панель внутри контейнера (`contained`) якорь не
130
+ * двигает: её место в контейнере решает тема, и стороны у неё нет —
131
+ * `data-placement` снимается.
132
+ *
133
+ * По той же причине оба наблюдателя (`ResizeObserver`) смотрят border-box:
134
+ * наблюдать надо ровно то, что меряем. Умолчание `content-box` пропустило бы
135
+ * смену одной рамки или паддинга — толщина рамки по состоянию, паддинг по
136
+ * размеру, — и координаты держались бы устаревшими до ближайшего
137
+ * scroll/resize окна.
138
+ */
139
+ export declare class TAnchorPlugin extends TBasePlugin<any, TAnchorPluginEvents> {
140
+ /**
141
+ * Умолчания пропов плагина. Из них стартуют поля плагина, и их же
142
+ * `definePlugin` кладёт в декларации пропов: значение живёт в одном месте.
143
+ * `flip: true` в приватном поле адаптер не увидел бы и отдал бы Frame без
144
+ * `anchor_flip` своё `false`.
145
+ *
146
+ * `anchor: null` — «панель ни к чему не привязана». Якорь не опция, его
147
+ * задаёт только разметка, но умолчание объявлено и ему: снятый из разметки
148
+ * проп связка возвращает к умолчанию декларации, и без него панель
149
+ * оставалась бы привязанной к прежнему элементу. Так же `point: null` —
150
+ * «точки нет, панель у якоря».
151
+ */
152
+ static defaultValues: TDefaultValues<IAnchorPluginProps, 'anchor' | 'point' | 'placement' | 'matchWidth' | 'flip' | 'offset'>;
153
+ private _frame;
154
+ private _element;
155
+ /** Якорю нужны только `getBoundingClientRect()` и `parentElement` — хватает `Element`. */
156
+ private _anchor;
157
+ /** Точка в координатах окна — главнее якоря, пока задана. */
158
+ private _point;
159
+ private _placement;
160
+ private _matchWidth;
161
+ private _flip;
162
+ private _offset;
163
+ private _cleanups;
164
+ private _panelObserver;
165
+ /**
166
+ * Кадр, в котором вернётся наблюдение панели, снятое на уведомление якоря
167
+ * (см. `_onAnchorResize`); `null` — возвращать нечего.
168
+ */
169
+ private _panelResumeFrame;
170
+ /** Сторона, реально отданная во Frame — по ней решаем, менялся ли `data-placement`. */
171
+ private _actualPlacement;
172
+ /**
173
+ * Сторона, которую держит панель (см. `_holdSide`); `null` — держать
174
+ * нечего, и сторону выбирает `_chooseSide`. Она всегда на оси выбора
175
+ * потребителя: смена `placement` память забывает.
176
+ *
177
+ * Запоминает её только расчёт с разложенной панелью — высотой больше нуля.
178
+ * На `show` закрытая панель ещё не разложена (`display: none`), а нулевой
179
+ * размер влезает с любой стороны: запомненная по нему сторона держалась бы
180
+ * на первом настоящем измерении вместо выбора. Поэтому `_actualPlacement`
181
+ * памятью не служит — его пишет любой расчёт. Признак раскладки — высота и
182
+ * у боковой панели, которой место меряют по ширине: ширину при
183
+ * `matchWidth` даёт якорь и до раскладки, а высоту знает только узел.
184
+ */
185
+ private _heldSide;
186
+ /**
187
+ * Слежение идёт: панель показана или ещё гаснет (см. описание класса). Вне
188
+ * слежения у плагина нет подписок на якорь, и место он не считает.
189
+ */
190
+ private _following;
191
+ /** Отмена ожидания конца перехода закрытия; `null` — плагин не ждёт. */
192
+ private _stopWaiting;
193
+ install(ctx: IPluginContext, options?: IAnchorPluginOptions): void;
194
+ /**
195
+ * Назначает якорь. У закрытой панели якорь только запоминается: место
196
+ * посчитает показ.
197
+ */
198
+ setAnchor(element: Element): void;
199
+ removeAnchor(): void;
200
+ get anchor(): Element | null;
201
+ /**
202
+ * Точка в координатах окна, у которой встаёт панель, — главнее якоря,
203
+ * пока задана (см. описание класса). Значение: сверяется по координатам, и
204
+ * та же точка ничего не пересчитывает. У закрытой панели только
205
+ * запоминается, как якорь.
206
+ */
207
+ get point(): TPoint | null;
208
+ set point(value: TPoint | null);
209
+ get placement(): TFramePlacement;
210
+ set placement(value: TFramePlacement);
211
+ get matchWidth(): boolean;
212
+ set matchWidth(value: boolean);
213
+ get flip(): boolean;
214
+ set flip(value: boolean);
215
+ get offset(): number;
216
+ set offset(value: number);
217
+ destroy(): void;
218
+ /**
219
+ * Место панели сменилось — якорь или точка. Сторону следующий расчёт
220
+ * выбирает заново: прошлую выбрали у другого места. Места не осталось —
221
+ * панель ни к чему не привязана: подписок нет, и стороны, которую видит
222
+ * тема, тоже. У закрытой панели место только запоминается — посчитает его
223
+ * показ, — у показанной `position`, подписки и координаты — по новому
224
+ * месту.
225
+ */
226
+ private _onPlaceChange;
227
+ /**
228
+ * Прямоугольник места панели в координатах окна: у точки — нулевого
229
+ * размера, иначе якоря. Нет ни того, ни другого — `null`.
230
+ */
231
+ private _placeRect;
232
+ /**
233
+ * Письмо справа налево — у якоря, а у точки без якоря — у самой панели:
234
+ * начало у точки там же, откуда идёт строка вокруг неё.
235
+ */
236
+ private get _rtl();
237
+ /**
238
+ * Тянуть ширину панели есть по чему, только пока место — якорь: ширины у
239
+ * точки нет, и `matchWidth` с ней панель не сжимает.
240
+ */
241
+ private get _matchesWidth();
242
+ /**
243
+ * Считает координаты и кладёт их во Frame.
244
+ *
245
+ * Вне слежения не считает ничего, на какой бы стороне ни стояла панель:
246
+ * закрытой панели место не нужно, его посчитает показ (см. описание
247
+ * класса).
248
+ *
249
+ * Расчёт выбирает сторона после flip. Над якорем и под ним `x` идёт от
250
+ * выравнивания по строке (`_resolveX`), а `y` — от стороны. Сбоку наоборот:
251
+ * `x` — от стороны (`_inlineX`), `y` — от выравнивания по вертикали
252
+ * (`_inlineY`). Место — якорь или точка (`_placeRect`).
253
+ *
254
+ * При `matchWidth` ширину панели для `x` и shift даёт якорь (см.
255
+ * `_panelSize`), а не записанный во Frame `width`: до DOM он доедет только
256
+ * после рендера адаптера.
257
+ */
258
+ private _update;
259
+ /**
260
+ * `position` панели: `fixed` у точки и у якоря, который стоит в окне, иначе
261
+ * `absolute` (см. описание класса). Точка — в координатах окна и стоит в
262
+ * нём, как якорь в `fixed`-шапке.
263
+ *
264
+ * Выбранное держится до следующего показа или смены места. Стили предков
265
+ * якоря на каждом `scroll` не перечитываем: шапка, которая стала `fixed`
266
+ * при открытой панели, — редкость, а обход предков со стилями на каждом
267
+ * кадре прокрутки обошёлся бы всем.
268
+ */
269
+ private _choosePosition;
270
+ /**
271
+ * Выравнивание из выбора потребителя — конец значения: суффикс `-start` или
272
+ * `-end`, а значение без суффикса (`top`, `bottom`, `start`, `end`) — центр.
273
+ * Суффикс — с дефисом: значение `start` — сторона с центром, а не
274
+ * выравнивание по началу.
275
+ */
276
+ private get _alignment();
277
+ /**
278
+ * Размер видимой области — граница и для flip, и для shift.
279
+ *
280
+ * Берём `window.visualViewport`: он знает область без классической полосы
281
+ * прокрутки, а `innerWidth`/`innerHeight` считают полосу своей, и панель у
282
+ * самого края окна уезжала под неё полоской примерно в 15px. Тот же выбор
283
+ * границы у Floating UI для стратегии `fixed`, на которой только и работает
284
+ * привязка.
285
+ *
286
+ * Объекта нет (jsdom, старые браузеры) — остаётся окно.
287
+ * `document.documentElement.clientWidth` не берём: в jsdom он нулевой, и
288
+ * юнит-тесты панелей пришлось бы подпирать.
289
+ *
290
+ * Смещение видимой области при pinch-zoom (`offsetLeft`/`offsetTop`) не
291
+ * учитываем — координаты панели отсчитываются от окна. Это осознанная
292
+ * граница, а не недоделка: сдвинутую лупой область пришлось бы учитывать и
293
+ * в `y`, и в подписке на её собственные scroll/resize.
294
+ */
295
+ private get _viewport();
296
+ /**
297
+ * Сторона с учётом flip — на оси выбора потребителя.
298
+ *
299
+ * Выбор потребителя в `_placement` не перетирается — flip живёт только
300
+ * здесь, в вычислении фактической стороны. С выключенным `flip` сторона
301
+ * потребителя отдаётся сразу, и память не участвует. Иначе панель держит
302
+ * запомненную сторону (`_holdSide`), а пока держать нечего, сторону
303
+ * выбирает правило (`_chooseSide`). Запоминает её только расчёт с
304
+ * разложенной панелью (см. `_heldSide`).
305
+ *
306
+ * Правило у обеих осей одно, разная только мера: над якорем и под ним
307
+ * панели нужна её высота, сбоку — ширина, и там и там с отступом от якоря.
308
+ */
309
+ private _resolveSide;
310
+ /**
311
+ * Сторона из выбора потребителя. Её называет начало значения, а не
312
+ * префикс с дефисом: у центра суффикса нет, и `top` по префиксу `top-`
313
+ * уехал бы вниз.
314
+ */
315
+ private get _wantedSide();
316
+ /**
317
+ * Выбор стороны — у панели, которая стороны ещё не держит.
318
+ *
319
+ * Сторона потребителя, а если на ней панель не влезает в видимую область,
320
+ * а на противоположной места больше, — противоположная. Не влезает
321
+ * нигде — остаёмся на стороне потребителя.
322
+ */
323
+ private _chooseSide;
324
+ /**
325
+ * Удержание стороны: панель стоит на ней, пока там влезает. Не влезла —
326
+ * переходит на противоположную, только если влезает там; не влезает
327
+ * нигде — остаётся.
328
+ *
329
+ * Правило выбора для этого не годится: граница у него одна — «на стороне
330
+ * потребителя влезает», а когда не влезает нигде, — середина экрана, — и
331
+ * поле, которое стоит на ней, переводило бы панель туда и обратно на
332
+ * каждом пикселе прокрутки. У удержания границы две — «здесь перестала
333
+ * влезать» и «там влезает», — и между ними панель стоит, где стоит. Запас
334
+ * между границами — не подобранное число пикселей, а вся полоса, где
335
+ * панель влезает с обеих сторон или ни с одной.
336
+ */
337
+ private _holdSide;
338
+ /**
339
+ * Место в видимой области с этой стороны якоря: над ним (`top`) и под ним
340
+ * (`bottom`) — по высоте, у начала и конца строки (`start`, `end`) — по
341
+ * ширине, слева или справа по направлению письма.
342
+ */
343
+ private _spaceAt;
344
+ /**
345
+ * Левый край панели над якорем или под ним — с учётом выравнивания, RTL и
346
+ * shift.
347
+ *
348
+ * После выравнивания (`_alignX`) `x` сдвигается внутрь видимой области по
349
+ * горизонтали, чтобы панель не вылезала ни слева, ни справа — если панель
350
+ * шире области, прижимается к левому краю. Центр сдвигается так же, как
351
+ * начало и конец: у края окна панель перестаёт стоять по центру якоря, но
352
+ * остаётся видна целиком.
353
+ */
354
+ private _resolveX;
355
+ /**
356
+ * Левый край панели по выравниванию, до shift.
357
+ *
358
+ * Центр — середина якоря минус половина панели, от направления он не
359
+ * зависит. Начало и конец логические: в LTR `start` — левый край якоря,
360
+ * `end` — правый, в RTL наоборот.
361
+ */
362
+ private _alignX;
363
+ /**
364
+ * Левый край боковой панели: слева от якоря или справа по стороне и
365
+ * направлению письма, с зазором `offset`, — и прижатый к видимой области.
366
+ *
367
+ * Прижим по `x` у боковой панели — сверх shift: не влезла ни с одной
368
+ * стороны, и flip её не спас, — накрывает якорь, но видна целиком (см.
369
+ * описание класса). Шире области — прижимается к левому краю, как панель
370
+ * над якорем и под ним.
371
+ */
372
+ private _inlineX;
373
+ /**
374
+ * Верхний край боковой панели по выравниванию — и shift: `y` сдвигается
375
+ * внутрь видимой области по вертикали, чтобы панель не вылезала ни сверху,
376
+ * ни снизу; выше области — прижимается к верхнему краю.
377
+ */
378
+ private _inlineY;
379
+ /**
380
+ * Верхний край боковой панели по выравниванию, до shift: `start` — верхние
381
+ * края панели и якоря вровень, `end` — нижние, центр — середина к
382
+ * середине. Ось вертикальная, и от направления письма выравнивание не
383
+ * зависит.
384
+ */
385
+ private _alignY;
386
+ /** Пишет фактическую сторону во Frame, только если она изменилась. */
387
+ private _applyPlacement;
388
+ /**
389
+ * Размер панели. Нужен для выравнивания по правому краю и по центру, для
390
+ * показа сверху и слева, для flip и для shift — везде координата
391
+ * отсчитывается от размера панели, а не только от якоря.
392
+ *
393
+ * Берём `getBoundingClientRect()`, а не `offsetWidth`/`offsetHeight`:
394
+ * оба нулевые, пока `v-show` держит панель на `display: none`, но
395
+ * `getBoundingClientRect()` пересчитывается уже на первом кадре после
396
+ * того, как её сняли — раньше на это полагаться было нельзя, теперь за
397
+ * этим кадром следит `ResizeObserver`.
398
+ *
399
+ * При `matchWidth` ширина берётся из якоря, а не из DOM: во Frame она уже
400
+ * записана, но узел получит её только после рендера адаптера, а панели ещё
401
+ * может не быть вовсе. Поэтому список под полем не зависит от того,
402
+ * отрисовалась ли панель, и с `*-end` не мигает по устаревшей ширине.
403
+ * Высоту якорь не знает — она всегда из DOM.
404
+ */
405
+ private _panelSize;
406
+ /**
407
+ * Заводит слежение: показ Frame, у Frame, созданного видимым, —
408
+ * назначение якоря (см. описание класса). Ожидание конца закрытия
409
+ * отменяется: панель снова открыта.
410
+ */
411
+ private _follow;
412
+ /** Снимает слежение сразу — вместе с ожиданием конца закрытия, если оно шло. */
413
+ private _unfollow;
414
+ /**
415
+ * Закрытие снимает слежение, когда корень доиграет переходы закрытия:
416
+ * гаснущая и уходящая жестом панель ещё на экране и идёт за полем до
417
+ * конца. Снятое прямо на `hide`, слежение оставило бы её стоять, пока поле
418
+ * уезжает. Корня нет — ждать нечего, и слежение снимается сразу.
419
+ */
420
+ private _unfollowAfterTransitions;
421
+ /** Отменяет ожидание конца закрытия. */
422
+ private _stopWaitingTransitions;
423
+ /**
424
+ * Следит за тем, что двигает место панели.
425
+ *
426
+ * У якоря — скролл его предков, ресайз окна и изменение размера самого
427
+ * якоря (без скролла — например, у него пропал соседний тег). Scroll и
428
+ * resize пересчитывают координаты сразу, уведомление наблюдателя якоря —
429
+ * через `_onAnchorResize`. Каждый слушатель снимается по своей ссылке на
430
+ * элемент: одна переменная цикла, захваченная всеми замыканиями, к моменту
431
+ * очистки была бы уже `null`, и слушатели остались бы висеть.
432
+ *
433
+ * У точки — только ресайз окна: точка в координатах окна, прокрутка и
434
+ * размер чужого элемента её не двигают, а у края окна по-другому решаются
435
+ * flip и shift. Якорь, оставшийся под точкой, не наблюдается: точка
436
+ * главнее.
437
+ *
438
+ * Подписки живут только при слежении (`_follow`, смена места у показанной
439
+ * панели): у закрытой панели их нет вовсе. Прежние снимаются первыми, и
440
+ * повторный показ второго набора не заводит.
441
+ */
442
+ private _subscribe;
443
+ /** Слушатель окна — с отпиской в общем списке подписок. */
444
+ private _listenWindow;
445
+ private _unsubscribe;
446
+ /**
447
+ * Пересчёт по уведомлению наблюдателя якоря — с паузой в наблюдении панели.
448
+ *
449
+ * Колбэк `ResizeObserver` выполняется внутри шага наблюдения кадра, и
450
+ * записанные здесь `x`, `y` и `width` адаптер успевает отрисовать тут же, в
451
+ * микрозадаче после колбэка. При `matchWidth` от этого в том же шаге
452
+ * меняется размер панели. Панель телепортирована и в DOM лежит мельче
453
+ * якоря, а после уведомления якоря браузер в этом шаге доставляет только
454
+ * уведомления узлов глубже него. Уведомление панели пропускается: на
455
+ * `window` уходит `error` («ResizeObserver loop completed with undelivered
456
+ * notifications»), который получают трекеры ошибок у потребителя, а позиция
457
+ * по новому размеру панели запаздывает на кадр.
458
+ *
459
+ * Поэтому наблюдение панели снимается до пересчёта и возвращается следующим
460
+ * кадром — приём `autoUpdate` из Floating UI. Вернувшееся наблюдение само
461
+ * присылает текущий размер: если от новой ширины выросла высота (перенос
462
+ * текста у панели сверху), `y` поправится по нему. Возвращать микрозадачей
463
+ * нельзя: она попадёт в тот же шаг, и уведомление снова пропустится.
464
+ *
465
+ * Пауза только у якоря. Колбэк панели ничего не приостанавливает:
466
+ * `observe()` сразу присылает уведомление, и пауза на нём зациклилась бы.
467
+ * Scroll и resize окна, сеттеры и `show` выполняются вне шага наблюдения, им
468
+ * пауза не нужна.
469
+ */
470
+ private _onAnchorResize;
471
+ /**
472
+ * Снимает наблюдение панели до следующего кадра.
473
+ *
474
+ * Возврат один: повторное уведомление до кадра второго не заводит, иначе
475
+ * отмена застала бы только последний. Отменяют возврат `removed`, новый
476
+ * `ready` и `destroy` — то, что убирает или меняет саму панель. Снятие якоря
477
+ * и конец закрытия (`removeAnchor`, `_unsubscribe`) его не отменяют: панель
478
+ * осталась, и без возврата за её размером никто бы не следил.
479
+ */
480
+ private _pausePanel;
481
+ /** Отменяет отложенный возврат наблюдения панели. */
482
+ private _cancelPanelResume;
483
+ }