@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,187 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TElementPlugin } from "../../element/element.plugin.js";
3
+ import { isAboveLayer } from "../../../utils/isAboveLayer.js";
4
+ import { bindOverlayOpen } from "../open-state.js";
5
+ import { TDismissPlugin } from "../../dismiss/dismiss.plugin.js";
6
+ import { markHidden, unmarkHidden } from "./marks.js";
7
+ import { FRAME_LAYER_ATTRIBUTE } from "@soxa-ui/core";
8
+ //#region src/custom/overlay/hide-outside/hide-outside.plugin.ts
9
+ /**
10
+ * Поводы пересчитать набор: состав поддерева `body` и номера слоёв. Свой
11
+ * атрибут (`aria-hidden`) в фильтр не входит — запись пометок наблюдателя не
12
+ * будит.
13
+ */
14
+ var OBSERVED = {
15
+ childList: true,
16
+ subtree: true,
17
+ attributes: true,
18
+ attributeFilter: [FRAME_LAYER_ATTRIBUTE]
19
+ };
20
+ /**
21
+ * THideOutsidePlugin — пока владелец открыт, фон под ним спрятан от
22
+ * скринридера.
23
+ *
24
+ * Вторая половина модальности. Фокус в модальной панели держит
25
+ * `TModalFocusPlugin`, но скринридер читает страницу и без фокуса — режимом
26
+ * чтения, стрелками. APG требует, чтобы фон модального окна был для него
27
+ * недоступен: `aria-modal="true"` на панели (его пишет ядро окна в свой
28
+ * `aria`) закрывает это только у современных скринридеров, а режим чтения
29
+ * браузера и старые AT уважают лишь пометку на самих узлах фона.
30
+ *
31
+ * **Пометка — `aria-hidden="true"`, а не `inert`.** `inert` отнимает у фона
32
+ * ещё и фокус, а фокусом владеет модель фокуса: при закрытии она сразу
33
+ * возвращает его в фон, и пока фон `inert`, `focus()` молча не срабатывает.
34
+ * Работа зависела бы от того, какой из двух плагинов раньше узнал о
35
+ * закрытии. Здесь — только то, что видит скринридер.
36
+ *
37
+ * **Что остаётся доступным.** Панель — узел с пометкой владельцем
38
+ * (`TDismissPlugin.findPanel()`), а без неё корень: у модального окна корень
39
+ * телепортирован целиком (то же правило, что у `TModalFocusPlugin`). И
40
+ * слои, открытые поверх панели: список Select в окне — тоже панель в `body`,
41
+ * соседка окна, а не его потомок. Слой выше — по номеру слоя `TLayer`
42
+ * (`data-layer`) и тем же правилом, по которому `TDismissPlugin` считает
43
+ * нажатие в такой список нажатием внутри (`isAboveLayer`): панель, в которую
44
+ * можно нажать, не должна быть немой.
45
+ *
46
+ * **Что прячется** — соседи оставленных узлов и соседи их предков вплоть до
47
+ * `body`. Вверх, а не только дети `body`: `TFrame` телепортируют и глубже
48
+ * (`target`), и тогда соседи панели внутри своего контейнера — тоже фон.
49
+ *
50
+ * **Набор пересчитывается, а не снимается при открытии.** Скрытый `TFrame`
51
+ * лежит в `body` уже смонтированным, а номер слоя пишет только показ, и
52
+ * скрытие его не снимает: у скрытой панели номера нет или он остался от
53
+ * прошлого показа. Список Select, открытый из окна, получает номер выше уже
54
+ * при открытом окне. Поэтому, пока фон спрятан, `MutationObserver` на `body`
55
+ * следит за составом поддерева и за `data-layer`: панель и её слой читаются
56
+ * на каждом пересчёте заново, а в DOM пишется только разница.
57
+ *
58
+ * **Слоёв бывает несколько** — окно поверх окна прячет и нижнее вместе с
59
+ * фоном, — поэтому пометка у узла одна на всех, со счётчиком (`marks.ts`):
60
+ * закрытие одного окна не снимает пометок другого, в каком бы порядке их ни
61
+ * закрывали, а последнее снятие возвращает то `aria-hidden`, что было у узла
62
+ * до первой пометки. Свои пометки плагин снимает при закрытии, при
63
+ * размонтировании корня и в `destroy()`.
64
+ *
65
+ * Открытость плагин ведёт сам — по свойству владельца (`property`, по
66
+ * умолчанию `open`), как `TScrollLockPlugin`; вручную — `enabled` при
67
+ * `property: null`. Документ берётся у корня, а не из `globalThis`:
68
+ * компонент живёт и в `iframe`.
69
+ *
70
+ * Чего плагин не делает: `aria-modal` пишет в свой набор ядро окна — это
71
+ * значение, а не операция; исключений для живых областей нет — фон
72
+ * прячется целиком, как у нативного `<dialog>`.
73
+ */
74
+ var THideOutsidePlugin = class THideOutsidePlugin extends TBasePlugin {
75
+ /** Умолчания опций, объявленных пропами, — см. `TDismissPlugin.defaultValues`. */
76
+ static defaultValues = { enabled: false };
77
+ _open = null;
78
+ _dismiss = null;
79
+ _element = null;
80
+ _enabled = THideOutsidePlugin.defaultValues.enabled;
81
+ /** `body` под наблюдением; `null` — фон не спрятан. */
82
+ _body = null;
83
+ _observer = null;
84
+ /** Узлы, которые пометил этот плагин: снимает он ровно их. */
85
+ _hidden = /* @__PURE__ */ new Set();
86
+ install(ctx, options) {
87
+ super.install(ctx, options);
88
+ this._dismiss = ctx.get(TDismissPlugin) ?? null;
89
+ const elementPlugin = ctx.get(TElementPlugin);
90
+ elementPlugin?.events.on("ready", (element) => {
91
+ this._element = element;
92
+ this._sync();
93
+ });
94
+ elementPlugin?.events.on("removed", () => {
95
+ this._element = null;
96
+ this._sync();
97
+ });
98
+ this._enabled = options?.enabled ?? this._enabled;
99
+ this._open = bindOverlayOpen(ctx, options, (open) => {
100
+ this.enabled = open;
101
+ });
102
+ if (this._open) this.enabled = this._open.read();
103
+ this._sync();
104
+ }
105
+ /**
106
+ * Спрятан ли фон. Владелец взводит это открытием; своё значение плагин
107
+ * держит и без корня — фон спрячется, как только корень объявят.
108
+ */
109
+ get enabled() {
110
+ return this._enabled;
111
+ }
112
+ set enabled(value) {
113
+ const oldEnabled = this.enabled;
114
+ if (this._enabled === value) return;
115
+ this._enabled = value;
116
+ this._sync();
117
+ this.events.emit("change:enabled", {
118
+ newValue: value,
119
+ oldValue: oldEnabled
120
+ });
121
+ }
122
+ destroy() {
123
+ this._enabled = false;
124
+ this._sync();
125
+ this._observer = null;
126
+ this._element = null;
127
+ this._dismiss = null;
128
+ this._open?.unbind();
129
+ this._open = null;
130
+ super.destroy();
131
+ }
132
+ /** Фон спрятан ровно тогда, когда владелец открыт и корень объявлен. */
133
+ _sync() {
134
+ const body = this._enabled ? this._element?.ownerDocument.body ?? null : null;
135
+ if (body !== this._body) {
136
+ this._observer?.disconnect();
137
+ this._body = body;
138
+ if (body) {
139
+ this._observer ??= new MutationObserver(this._refresh);
140
+ this._observer.observe(body, OBSERVED);
141
+ }
142
+ }
143
+ this._refresh();
144
+ }
145
+ /** Пересчитать, что спрятать, и записать в DOM только разницу. */
146
+ _refresh = () => {
147
+ const next = this._body && this._element ? this._outside(this._body, this._element) : /* @__PURE__ */ new Set();
148
+ for (const node of this._hidden) {
149
+ if (next.has(node)) continue;
150
+ unmarkHidden(node);
151
+ this._hidden.delete(node);
152
+ }
153
+ for (const node of next) {
154
+ if (this._hidden.has(node)) continue;
155
+ markHidden(node);
156
+ this._hidden.add(node);
157
+ }
158
+ };
159
+ /** Фон панели: всё в `body`, кроме неё и слоёв выше неё. */
160
+ _outside(body, root) {
161
+ const panel = this._dismiss?.findPanel() ?? root;
162
+ if (panel === body || !body.contains(panel)) return /* @__PURE__ */ new Set();
163
+ return siblingsOutside(body, [panel, ...[...body.querySelectorAll(`[${FRAME_LAYER_ATTRIBUTE}]`)].filter((node) => isAboveLayer(node, panel))]);
164
+ }
165
+ };
166
+ /**
167
+ * Соседи оставленных узлов и их предков вплоть до `body` — то, что прячется,
168
+ * чтобы доступными остались только они. Все оставленные лежат внутри `body`.
169
+ *
170
+ * Узел внутри другого оставленного отдельно не считается: он доступен вместе
171
+ * с ним, и соседей внутри своего не прячет. Иначе слой, телепортированный в
172
+ * панель окна, спрятал бы её содержимое.
173
+ */
174
+ function siblingsOutside(body, keep) {
175
+ const kept = keep.filter((node) => !keep.some((other) => other !== node && other.contains(node)));
176
+ /** Оставленные узлы и их предки ниже `body`: их самих не прячем. */
177
+ const path = /* @__PURE__ */ new Set();
178
+ for (const node of kept) for (let current = node; current && current !== body; current = current.parentElement) path.add(current);
179
+ const hidden = /* @__PURE__ */ new Set();
180
+ for (const parent of [body, ...path]) {
181
+ if (kept.includes(parent)) continue;
182
+ for (const child of parent.children) if (!path.has(child)) hidden.add(child);
183
+ }
184
+ return hidden;
185
+ }
186
+ //#endregion
187
+ export { THideOutsidePlugin };
@@ -0,0 +1,2 @@
1
+ export { THideOutsidePlugin } from './hide-outside.plugin';
2
+ export type { IHideOutsidePluginOptions, THideOutsidePluginEvents } from './types';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Пометки «спрятано от скринридера» со счётчиком на узел.
3
+ *
4
+ * Модальных слоёв бывает несколько — окно, из него второе окно, — и каждый
5
+ * прячет фон сам. Узел страницы под обоими помечен дважды, и закрытие
6
+ * верхнего не должно открыть его, пока нижний ещё открыт. Флагом у плагина
7
+ * этого не выразить: плагин, снимая свою пометку, затёр бы чужую. Поэтому
8
+ * пометка у узла одна на всех, у неё счётчик, и `aria-hidden` возвращается,
9
+ * когда её снял последний.
10
+ *
11
+ * Возвращается **то значение, что было до первой пометки**, а не пустое:
12
+ * `aria-hidden` страница могла поставить и сама — в том числе `"false"`.
13
+ *
14
+ * Тот же приём, что у замка прокрутки (`../scroll-lock/lock.ts`).
15
+ */
16
+ /** Спрятать узел. Первая пометка пишет атрибут, остальные считаются. */
17
+ export declare function markHidden(node: Element): void;
18
+ /** Снять пометку. Атрибут вернётся, когда её снимет последний слой. */
19
+ export declare function unmarkHidden(node: Element): void;
@@ -0,0 +1,43 @@
1
+ //#region src/custom/overlay/hide-outside/marks.ts
2
+ /**
3
+ * Пометки «спрятано от скринридера» со счётчиком на узел.
4
+ *
5
+ * Модальных слоёв бывает несколько — окно, из него второе окно, — и каждый
6
+ * прячет фон сам. Узел страницы под обоими помечен дважды, и закрытие
7
+ * верхнего не должно открыть его, пока нижний ещё открыт. Флагом у плагина
8
+ * этого не выразить: плагин, снимая свою пометку, затёр бы чужую. Поэтому
9
+ * пометка у узла одна на всех, у неё счётчик, и `aria-hidden` возвращается,
10
+ * когда её снял последний.
11
+ *
12
+ * Возвращается **то значение, что было до первой пометки**, а не пустое:
13
+ * `aria-hidden` страница могла поставить и сама — в том числе `"false"`.
14
+ *
15
+ * Тот же приём, что у замка прокрутки (`../scroll-lock/lock.ts`).
16
+ */
17
+ var ATTRIBUTE = "aria-hidden";
18
+ var MARKS = /* @__PURE__ */ new WeakMap();
19
+ /** Спрятать узел. Первая пометка пишет атрибут, остальные считаются. */
20
+ function markHidden(node) {
21
+ const mark = MARKS.get(node);
22
+ if (mark) {
23
+ mark.count += 1;
24
+ return;
25
+ }
26
+ MARKS.set(node, {
27
+ count: 1,
28
+ value: node.getAttribute(ATTRIBUTE)
29
+ });
30
+ node.setAttribute(ATTRIBUTE, "true");
31
+ }
32
+ /** Снять пометку. Атрибут вернётся, когда её снимет последний слой. */
33
+ function unmarkHidden(node) {
34
+ const mark = MARKS.get(node);
35
+ if (!mark) return;
36
+ mark.count -= 1;
37
+ if (mark.count > 0) return;
38
+ MARKS.delete(node);
39
+ if (mark.value === null) node.removeAttribute(ATTRIBUTE);
40
+ else node.setAttribute(ATTRIBUTE, mark.value);
41
+ }
42
+ //#endregion
43
+ export { markHidden, unmarkHidden };
@@ -0,0 +1,17 @@
1
+ import type { TValuePayload } from '@soxa-ui/core';
2
+ import type { TPluginEvents } from '../../../base';
3
+ import type { IOverlayOpenOptions } from '../types';
4
+ export interface IHideOutsidePluginOptions extends IOverlayOpenOptions {
5
+ /**
6
+ * Спрятан ли фон сразу после установки.
7
+ *
8
+ * Обычно этого не задают: плагин сам следит за открытостью владельца
9
+ * (`property`). Но, как и у `TScrollLockPlugin`, пометку можно вести и
10
+ * вручную — `property: null` и запись в `enabled`.
11
+ */
12
+ enabled?: boolean;
13
+ }
14
+ export type THideOutsidePluginEvents = TPluginEvents & {
15
+ /** change:enabled */
16
+ 'change:enabled': (payload: TValuePayload<boolean>) => void;
17
+ };
@@ -0,0 +1,9 @@
1
+ export * from './focus';
2
+ export * from './hide-outside';
3
+ export * from './modal-focus';
4
+ export * from './modal-ids';
5
+ export * from './modal-layout';
6
+ export * from './scroll-lock';
7
+ export * from './swipe';
8
+ export type { IOverlayOpenOptions, IOverlayOpenState } from './types';
9
+ export * from './modal-names';
@@ -0,0 +1 @@
1
+ export { TModalFocusPlugin } from './modal-focus.plugin';
@@ -0,0 +1,72 @@
1
+ import type { IPluginContext } from '../../../base';
2
+ import { TOverlayFocusPlugin } from '../focus';
3
+ import type { IOverlayOpenOptions } from '../types';
4
+ /**
5
+ * TModalFocusPlugin — модель фокуса модального оверлея: диалога, выезжающей
6
+ * панели, всего, что перехватывает работу со страницей.
7
+ *
8
+ * Общее с немодальным — запомнить, откуда открыли, увести фокус в панель,
9
+ * вернуть при закрытии, закрыться по Escape — берёт у `TOverlayFocusPlugin`.
10
+ * Своего здесь три вещи, и все следуют из модальности:
11
+ *
12
+ * **Tab замкнут в панели.** С последней остановки он ведёт на первую, а
13
+ * Shift+Tab с первой — на последнюю. Панели без единой остановки внутри
14
+ * держат фокус на ней самой (`tabindex="-1"`), и Tab с неё никуда не уводит:
15
+ * модальное окно тем и модально, что выйти из него можно только закрыв.
16
+ * Порядок остановок внутри панели ведёт браузер — плагин вмешивается только
17
+ * на краях. Ловушка — общая утилита `trapTab`: ею же замыкает Tab панель
18
+ * DatePicker.
19
+ *
20
+ * **Возвращать фокус некуда, кроме запомненного элемента.** Триггера у
21
+ * модального окна не бывает: открыть его может и кнопка на другом конце
22
+ * страницы, и код без всякого нажатия. Поэтому запасного `_returnCandidates`
23
+ * у него нет: пропал запомненный элемент — фокус остаётся там, где его
24
+ * оставил браузер.
25
+ *
26
+ * **Нажатие мимо фокус не забирает.** Фокус возвращается при любом
27
+ * закрытии, и нажатием мимо тоже: страница за окном недоступна, и
28
+ * пользователь не «уже там, куда нажал», как у немодального. Но окно
29
+ * закрывается ещё на нажатии (`pointerdown`), а фокус переносит действие по
30
+ * умолчанию у `mousedown`, который приходит следом: нажатие по подложке
31
+ * унесло бы возвращённый фокус на `body`. А если окно не закрылось
32
+ * (`dismissible: false`), фокус ушёл бы с окна, и Tab с `body` повёл бы на
33
+ * страницу за ним. Поэтому на `dismiss` плагин гасит действие по умолчанию у
34
+ * `mousedown` этого нажатия: у самого события, если нажатие решил он (перо
35
+ * графического планшета), иначе — у ближайшего следующего. Ожидание снимают
36
+ * `click` и `pointercancel`: нажатие кончилось без `mousedown`.
37
+ *
38
+ * Панель — узел с пометкой владельца (`TDismissPlugin.ownerAttribute`), а
39
+ * если пометки нет или `TDismissPlugin` не поставлен, панель и есть корень:
40
+ * у модального окна корень телепортирован целиком, и держать в странице
41
+ * нечего. Тогда и слушатель клавиш на нём один.
42
+ *
43
+ * Чего плагин не делает: `aria-modal` пишет в свой набор ядро компонента —
44
+ * это значение, а не операция; фон от скринридера не прячет — это
45
+ * `THideOutsidePlugin` (пометкой `aria-hidden`, а не `inert`: при закрытии
46
+ * модель фокуса возвращает фокус в фон, и под `inert` он бы не вернулся);
47
+ * прокрутку не запирает — это `TScrollLockPlugin`.
48
+ */
49
+ export declare class TModalFocusPlugin extends TOverlayFocusPlugin {
50
+ /** Документ, где плагин ждёт `mousedown` нажатия мимо; `null` — не ждёт. */
51
+ private _pressDocument;
52
+ install(ctx: IPluginContext, options?: IOverlayOpenOptions): void;
53
+ destroy(): void;
54
+ /** У модального оверлея панель и есть корень: телепортирован он целиком. */
55
+ protected _panelFallback(root: Element): Element | null;
56
+ /** Tab по кругу внутри панели; за её пределы фокус не выходит (`trapTab`). */
57
+ protected _onTab(event: KeyboardEvent): void;
58
+ /**
59
+ * Нажатие мимо: погасить `mousedown`, который унёс бы фокус (см. шапку).
60
+ * Уход фокуса мимо (`focusin`) гасить нечем — фокус уже ушёл, а модальному
61
+ * окну `focusOutside` и не ставят: фокус из него не уходит.
62
+ */
63
+ private _keepFocus;
64
+ /**
65
+ * Ждать `mousedown` этого нажатия. Слушатели — на документе в фазе
66
+ * перехвата, как у `TDismissPlugin`: подложку и то, что под ней, плагин не
67
+ * знает, а до документа событие не остановит никто.
68
+ */
69
+ private _waitMouseDown;
70
+ private readonly _onMouseDown;
71
+ private readonly _stopWaiting;
72
+ }
@@ -0,0 +1,109 @@
1
+ import { trapTab } from "../../../utils/trapTab.js";
2
+ import { TDismissPlugin } from "../../dismiss/dismiss.plugin.js";
3
+ import { TOverlayFocusPlugin } from "../focus/focus.plugin.js";
4
+ //#region src/custom/overlay/modal-focus/modal-focus.plugin.ts
5
+ /** Что снимает ожидание `mousedown` нажатия мимо: оно кончилось без него. */
6
+ var PRESS_END = ["click", "pointercancel"];
7
+ /**
8
+ * TModalFocusPlugin — модель фокуса модального оверлея: диалога, выезжающей
9
+ * панели, всего, что перехватывает работу со страницей.
10
+ *
11
+ * Общее с немодальным — запомнить, откуда открыли, увести фокус в панель,
12
+ * вернуть при закрытии, закрыться по Escape — берёт у `TOverlayFocusPlugin`.
13
+ * Своего здесь три вещи, и все следуют из модальности:
14
+ *
15
+ * **Tab замкнут в панели.** С последней остановки он ведёт на первую, а
16
+ * Shift+Tab с первой — на последнюю. Панели без единой остановки внутри
17
+ * держат фокус на ней самой (`tabindex="-1"`), и Tab с неё никуда не уводит:
18
+ * модальное окно тем и модально, что выйти из него можно только закрыв.
19
+ * Порядок остановок внутри панели ведёт браузер — плагин вмешивается только
20
+ * на краях. Ловушка — общая утилита `trapTab`: ею же замыкает Tab панель
21
+ * DatePicker.
22
+ *
23
+ * **Возвращать фокус некуда, кроме запомненного элемента.** Триггера у
24
+ * модального окна не бывает: открыть его может и кнопка на другом конце
25
+ * страницы, и код без всякого нажатия. Поэтому запасного `_returnCandidates`
26
+ * у него нет: пропал запомненный элемент — фокус остаётся там, где его
27
+ * оставил браузер.
28
+ *
29
+ * **Нажатие мимо фокус не забирает.** Фокус возвращается при любом
30
+ * закрытии, и нажатием мимо тоже: страница за окном недоступна, и
31
+ * пользователь не «уже там, куда нажал», как у немодального. Но окно
32
+ * закрывается ещё на нажатии (`pointerdown`), а фокус переносит действие по
33
+ * умолчанию у `mousedown`, который приходит следом: нажатие по подложке
34
+ * унесло бы возвращённый фокус на `body`. А если окно не закрылось
35
+ * (`dismissible: false`), фокус ушёл бы с окна, и Tab с `body` повёл бы на
36
+ * страницу за ним. Поэтому на `dismiss` плагин гасит действие по умолчанию у
37
+ * `mousedown` этого нажатия: у самого события, если нажатие решил он (перо
38
+ * графического планшета), иначе — у ближайшего следующего. Ожидание снимают
39
+ * `click` и `pointercancel`: нажатие кончилось без `mousedown`.
40
+ *
41
+ * Панель — узел с пометкой владельца (`TDismissPlugin.ownerAttribute`), а
42
+ * если пометки нет или `TDismissPlugin` не поставлен, панель и есть корень:
43
+ * у модального окна корень телепортирован целиком, и держать в странице
44
+ * нечего. Тогда и слушатель клавиш на нём один.
45
+ *
46
+ * Чего плагин не делает: `aria-modal` пишет в свой набор ядро компонента —
47
+ * это значение, а не операция; фон от скринридера не прячет — это
48
+ * `THideOutsidePlugin` (пометкой `aria-hidden`, а не `inert`: при закрытии
49
+ * модель фокуса возвращает фокус в фон, и под `inert` он бы не вернулся);
50
+ * прокрутку не запирает — это `TScrollLockPlugin`.
51
+ */
52
+ var TModalFocusPlugin = class extends TOverlayFocusPlugin {
53
+ /** Документ, где плагин ждёт `mousedown` нажатия мимо; `null` — не ждёт. */
54
+ _pressDocument = null;
55
+ install(ctx, options) {
56
+ super.install(ctx, options);
57
+ ctx.get(TDismissPlugin)?.events.on("dismiss", (event) => this._keepFocus(event));
58
+ }
59
+ destroy() {
60
+ this._stopWaiting();
61
+ super.destroy();
62
+ }
63
+ /** У модального оверлея панель и есть корень: телепортирован он целиком. */
64
+ _panelFallback(root) {
65
+ return root;
66
+ }
67
+ /** Tab по кругу внутри панели; за её пределы фокус не выходит (`trapTab`). */
68
+ _onTab(event) {
69
+ if (this._panel) trapTab(event, this._panel);
70
+ }
71
+ /**
72
+ * Нажатие мимо: погасить `mousedown`, который унёс бы фокус (см. шапку).
73
+ * Уход фокуса мимо (`focusin`) гасить нечем — фокус уже ушёл, а модальному
74
+ * окну `focusOutside` и не ставят: фокус из него не уходит.
75
+ */
76
+ _keepFocus(event) {
77
+ if (event.type === "mousedown") {
78
+ event.preventDefault();
79
+ return;
80
+ }
81
+ if (event.type === "focusin") return;
82
+ const doc = this._root?.ownerDocument;
83
+ if (doc) this._waitMouseDown(doc);
84
+ }
85
+ /**
86
+ * Ждать `mousedown` этого нажатия. Слушатели — на документе в фазе
87
+ * перехвата, как у `TDismissPlugin`: подложку и то, что под ней, плагин не
88
+ * знает, а до документа событие не остановит никто.
89
+ */
90
+ _waitMouseDown(doc) {
91
+ this._stopWaiting();
92
+ doc.addEventListener("mousedown", this._onMouseDown, true);
93
+ for (const type of PRESS_END) doc.addEventListener(type, this._stopWaiting, true);
94
+ this._pressDocument = doc;
95
+ }
96
+ _onMouseDown = (event) => {
97
+ event.preventDefault();
98
+ this._stopWaiting();
99
+ };
100
+ _stopWaiting = () => {
101
+ const doc = this._pressDocument;
102
+ if (!doc) return;
103
+ doc.removeEventListener("mousedown", this._onMouseDown, true);
104
+ for (const type of PRESS_END) doc.removeEventListener(type, this._stopWaiting, true);
105
+ this._pressDocument = null;
106
+ };
107
+ };
108
+ //#endregion
109
+ export { TModalFocusPlugin };
@@ -0,0 +1 @@
1
+ export * from './modal-ids.plugin';
@@ -0,0 +1,21 @@
1
+ import { TBasePlugin } from '../../../base';
2
+ import type { IPluginContext } from '../../../base';
3
+ /**
4
+ * TModalIdsPlugin — имя модального слоя в документе: панель называет её
5
+ * заголовок.
6
+ *
7
+ * `id` заголовка — в `titleAria`, который разметка раскладывает на заголовок,
8
+ * и ссылка на него `aria-labelledby` — в `aria` панели. Обе стороны пишутся
9
+ * здесь, от одного `id`. Ссылка стоит всегда: заголовок рисуется всегда.
10
+ *
11
+ * Общая часть окна и выезжающей панели — как и вся модальность
12
+ * (`TModalLayer`). Своё сверх неё у окна — тело предупреждения
13
+ * (`TDialogIdsPlugin`).
14
+ *
15
+ * `id` — от монтирования (`createId`), а не от экземпляра: он нужен только
16
+ * документу, и на сервере и в браузере обязан совпасть. Пишется при
17
+ * установке, синхронно, — имя есть уже в первой (и серверной) отрисовке.
18
+ */
19
+ export declare class TModalIdsPlugin extends TBasePlugin {
20
+ install(ctx: IPluginContext): void;
21
+ }
@@ -0,0 +1,30 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ //#region src/custom/overlay/modal-ids/modal-ids.plugin.ts
3
+ /**
4
+ * TModalIdsPlugin — имя модального слоя в документе: панель называет её
5
+ * заголовок.
6
+ *
7
+ * `id` заголовка — в `titleAria`, который разметка раскладывает на заголовок,
8
+ * и ссылка на него `aria-labelledby` — в `aria` панели. Обе стороны пишутся
9
+ * здесь, от одного `id`. Ссылка стоит всегда: заголовок рисуется всегда.
10
+ *
11
+ * Общая часть окна и выезжающей панели — как и вся модальность
12
+ * (`TModalLayer`). Своё сверх неё у окна — тело предупреждения
13
+ * (`TDialogIdsPlugin`).
14
+ *
15
+ * `id` — от монтирования (`createId`), а не от экземпляра: он нужен только
16
+ * документу, и на сервере и в браузере обязан совпасть. Пишется при
17
+ * установке, синхронно, — имя есть уже в первой (и серверной) отрисовке.
18
+ */
19
+ var TModalIdsPlugin = class extends TBasePlugin {
20
+ install(ctx) {
21
+ super.install(ctx);
22
+ const layer = ctx.getInstance();
23
+ if (!layer) return;
24
+ const titleId = ctx.createId("title");
25
+ layer.titleAria.add("id", titleId);
26
+ layer.aria.add("aria-labelledby", titleId);
27
+ }
28
+ };
29
+ //#endregion
30
+ export { TModalIdsPlugin };
@@ -0,0 +1,2 @@
1
+ export { TModalLayoutPlugin } from './modal-layout.plugin';
2
+ export type { TModalLayoutPluginEvents, TModalLayoutVariables } from './types';
@@ -0,0 +1,66 @@
1
+ import type { TEventSink } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TModalLayoutPluginEvents, TModalLayoutVariables } from './types';
5
+ /**
6
+ * Раскладка модального слоя — общая часть окна и выезжающей панели: слой и
7
+ * размер в объекты стилей для разметки.
8
+ *
9
+ * Модальный слой ничего не меряет и координат не считает: место, край,
10
+ * разворот и анимацию раскладывает тема по модификаторам и `data-*`. Плагину
11
+ * остаются значения, которые в класс не уложить:
12
+ *
13
+ * - `styles` — панели: `z-index` слоя, размер и свои переменные наследника
14
+ * (`_panelVariables`: у окна — отступы от краёв экрана). Переменными, а не
15
+ * инлайном `width` и `height`: инлайн перебил бы тему, а у неё потолок
16
+ * размера по экрану и развёрнутое окно. Незаданный размер переменной не
17
+ * даёт вовсе — тогда действует умолчание темы (`var(--so-dialog-width, …)`);
18
+ * - `backdropStyles` — подложке: тот же `z-index`. Подложка стоит в DOM
19
+ * раньше панели, и панель рисуется поверх неё просто порядком.
20
+ *
21
+ * Имена переменных у каждого компонента свои — их читает CSS его блока
22
+ * (`--so-dialog-width`, `--so-drawer-width`), — поэтому база абстрактна: наследник
23
+ * называет их (`_variables`), а считает всё база. Второй копии расчёта у
24
+ * окна и панели нет.
25
+ *
26
+ * Считает при установке и на смену ширины, высоты и слоя; на смену своих
27
+ * значений наследник зовёт тот же пересчёт (`_updateStyles`). Объекты
28
+ * заменяются целиком, а не мутируются: геттер отдаёт ссылку наружу, и без
29
+ * смены идентичности адаптер не увидит изменения. `change:styles` — только
30
+ * когда стили сменились по содержимому: повод пересчёта не всегда их меняет.
31
+ *
32
+ * Дженерик по карте событий — для наследника со своими событиями
33
+ * (`offset:before` у окна); свои события база шлёт через `_sink`.
34
+ */
35
+ export declare abstract class TModalLayoutPlugin<TEvents extends TModalLayoutPluginEvents = TModalLayoutPluginEvents> extends TBasePlugin<any, TEvents> {
36
+ /** Переменные размера, которые читает тема этого компонента. */
37
+ protected abstract readonly _variables: TModalLayoutVariables;
38
+ private _styles;
39
+ private _backdropStyles;
40
+ private _owner;
41
+ install(ctx: IPluginContext): void;
42
+ /** Стили панели: `z-index` слоя, переменные размера и свои переменные наследника. */
43
+ get styles(): Record<string, string | number>;
44
+ /** Стили подложки: тот же `z-index`, что у панели. */
45
+ get backdropStyles(): Record<string, string | number>;
46
+ destroy(): void;
47
+ /**
48
+ * Эмит собственных событий раскладки — без приведения `this.events` к
49
+ * конкретной карте (см. `TEventSink` в `@soxa-ui/core`): карта — дженерик,
50
+ * а `change:styles` и `change:backdropStyles` объявлены здесь.
51
+ */
52
+ protected get _sink(): TEventSink<TModalLayoutPluginEvents>;
53
+ /**
54
+ * Свои переменные панели сверх размера: имя переменной → CSS-значение.
55
+ * Их читает каждый пересчёт стилей, начиная с установки, поэтому то, из
56
+ * чего они строятся, наследник обязан знать уже тогда. По умолчанию своих
57
+ * нет.
58
+ */
59
+ protected _panelVariables(): Record<string, string>;
60
+ /**
61
+ * Пересчитать стили панели. Наследник зовёт его на смену значений, из
62
+ * которых строит `_panelVariables`.
63
+ */
64
+ protected _updateStyles(): void;
65
+ private _updateBackdropStyles;
66
+ }