@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,35 @@
1
+ import { TBasePlugin } from '../../../base';
2
+ import type { IPluginContext } from '../../../base';
3
+ import type { TPopoverPointerPluginEvents } from './types';
4
+ /**
5
+ * TPopoverPointerPlugin — клик по триггеру Popover переключает панель.
6
+ *
7
+ * Слушает корень: в нём лежит только триггер (слот `trigger`), поэтому клик
8
+ * по корню — это клик по триггеру, чем бы потребитель его ни нарисовал. Клик
9
+ * из Enter и пробела на `<button>` браузер делает сам, так что клавиатура
10
+ * триггера приходит сюда тем же путём.
11
+ *
12
+ * По открытому триггеру клик закрывает панель без мигания: корень — внутри
13
+ * владельца, и `pointerdown` перед кликом `TDismissPlugin` мимо не считает.
14
+ * Будь триггер снаружи, нажатие закрыло бы панель, а клик открыл бы снова.
15
+ *
16
+ * Панель внутри контейнера (`contained`) не телепортирована и лежит в самом
17
+ * корне: нажатие в ней всплывает до корня, но это не нажатие по триггеру.
18
+ * Панель плагин узнаёт у `TDismissPlugin`, по пометке владельцем.
19
+ *
20
+ * Внутри ли панели нажатие, решает путь события, а не цель: нажатие может
21
+ * сменить содержимое панели (выбор года в календаре пересобирает список под
22
+ * месяцы), и фреймворк перерисует его между обработчиками того же клика. До
23
+ * корня клик дойдёт с целью, которой в панели уже нет, а путь собран при
24
+ * отправке и панель в нём остаётся.
25
+ */
26
+ export declare class TPopoverPointerPlugin extends TBasePlugin<any, TPopoverPointerPluginEvents> {
27
+ private _owner;
28
+ private _dismiss;
29
+ /** Узел нужен только под слушатель клика — отсюда и тип. */
30
+ private _element;
31
+ install(ctx: IPluginContext): void;
32
+ destroy(): void;
33
+ private _unlisten;
34
+ private readonly _onClick;
35
+ }
@@ -0,0 +1,65 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TElementPlugin } from "../../element/element.plugin.js";
3
+ import { TDismissPlugin } from "../../dismiss/dismiss.plugin.js";
4
+ //#region src/custom/popover/pointer/pointer.plugin.ts
5
+ /**
6
+ * TPopoverPointerPlugin — клик по триггеру Popover переключает панель.
7
+ *
8
+ * Слушает корень: в нём лежит только триггер (слот `trigger`), поэтому клик
9
+ * по корню — это клик по триггеру, чем бы потребитель его ни нарисовал. Клик
10
+ * из Enter и пробела на `<button>` браузер делает сам, так что клавиатура
11
+ * триггера приходит сюда тем же путём.
12
+ *
13
+ * По открытому триггеру клик закрывает панель без мигания: корень — внутри
14
+ * владельца, и `pointerdown` перед кликом `TDismissPlugin` мимо не считает.
15
+ * Будь триггер снаружи, нажатие закрыло бы панель, а клик открыл бы снова.
16
+ *
17
+ * Панель внутри контейнера (`contained`) не телепортирована и лежит в самом
18
+ * корне: нажатие в ней всплывает до корня, но это не нажатие по триггеру.
19
+ * Панель плагин узнаёт у `TDismissPlugin`, по пометке владельцем.
20
+ *
21
+ * Внутри ли панели нажатие, решает путь события, а не цель: нажатие может
22
+ * сменить содержимое панели (выбор года в календаре пересобирает список под
23
+ * месяцы), и фреймворк перерисует его между обработчиками того же клика. До
24
+ * корня клик дойдёт с целью, которой в панели уже нет, а путь собран при
25
+ * отправке и панель в нём остаётся.
26
+ */
27
+ var TPopoverPointerPlugin = class extends TBasePlugin {
28
+ _owner = null;
29
+ _dismiss = null;
30
+ /** Узел нужен только под слушатель клика — отсюда и тип. */
31
+ _element = null;
32
+ install(ctx) {
33
+ super.install(ctx);
34
+ this._owner = ctx.getInstance();
35
+ this._dismiss = ctx.get(TDismissPlugin) ?? null;
36
+ const elementPlugin = ctx.get(TElementPlugin);
37
+ elementPlugin?.events.on("ready", (element) => {
38
+ this._element = element;
39
+ this._element.addEventListener("click", this._onClick);
40
+ });
41
+ elementPlugin?.events.on("removed", () => {
42
+ this._unlisten();
43
+ this._element = null;
44
+ });
45
+ }
46
+ destroy() {
47
+ this._unlisten();
48
+ this._element = null;
49
+ this._owner = null;
50
+ this._dismiss = null;
51
+ super.destroy();
52
+ }
53
+ _unlisten() {
54
+ this._element?.removeEventListener("click", this._onClick);
55
+ }
56
+ _onClick = (event) => {
57
+ const owner = this._owner;
58
+ const panel = this._dismiss?.findPanel();
59
+ if (!owner) return;
60
+ if (panel && event.composedPath().includes(panel)) return;
61
+ owner.open = !owner.open;
62
+ };
63
+ };
64
+ //#endregion
65
+ export { TPopoverPointerPlugin };
@@ -0,0 +1,2 @@
1
+ import type { TPluginEvents } from '../../../base';
2
+ export type TPopoverPointerPluginEvents = TPluginEvents;
@@ -0,0 +1,45 @@
1
+ import { TBasePlugin } from '../../../base';
2
+ import type { IPluginContext } from '../../../base';
3
+ /**
4
+ * TRadioGroupCheckedPlugin — отметка полей группы по модели после выбора
5
+ * пользователя.
6
+ *
7
+ * Браузер отмечает нажатое радио и снимает отметку с соседа ещё до клика, а
8
+ * коллекция вправе выбор не принять: его отменил подписчик
9
+ * `item:activate:before`. Модель тогда не сменилась, и разметка поля не
10
+ * перерисует: и Vue, и React пишут `checked` в узел только на смену своего
11
+ * значения. Без этой записи на экране осталось бы отмеченным нажатое радио,
12
+ * а в модели — прежнее или ничего, и повторный клик по нажатому не выбрал бы
13
+ * ничего: отмеченному радио браузер `change` не шлёт.
14
+ *
15
+ * Поэтому после каждого `change` в группе плагин пишет `checked` каждому радио
16
+ * коллекции — по его активности. Плагин группы, а не радио: соседу, с которого
17
+ * браузер снял отметку, `change` не приходит, и вернуть её может только тот,
18
+ * кто видит все радио. Слушатель — на корне, в фазе всплытия: выбор
19
+ * пользователя коллекции отдаёт разметка радио — Vue на `change` самого поля,
20
+ * React ещё на `click`, — и до корня `change` доходит, когда модель уже
21
+ * решила.
22
+ *
23
+ * Пишется и отметка, совпавшая с узлом. React узнаёт отметку поля только по
24
+ * записи свойства и по ней решает, сменил ли клик отметку, прежде чем отдать
25
+ * `onChange` (см. `NativeInput` адаптера React). А нажатому радио отметку
26
+ * снимает и браузер — когда плагин возвращает её соседу, стоящему раньше:
27
+ * узел уже совпал с моделью, но React помнит отметку, увиденную на клике, и
28
+ * без записи повторный клик по этому радио `onChange` не дал бы.
29
+ *
30
+ * Радио — из коллекции группы (`engine:bound`), его узел — у реестра узлов
31
+ * (`TCollectionElements`), поле — по общему правилу полей (`fieldOf`) в
32
+ * узле. Радио без узла пропускается: поля, которое надо вернуть, у него нет.
33
+ */
34
+ export declare class TRadioGroupCheckedPlugin extends TBasePlugin {
35
+ /** Корень группы: на нём слушатель. */
36
+ private _root;
37
+ private _elements;
38
+ private _engine;
39
+ install(ctx: IPluginContext): void;
40
+ destroy(): void;
41
+ private _attach;
42
+ private _detach;
43
+ /** Каждое поле группы — по активности его радио в коллекции. */
44
+ private readonly _onChange;
45
+ }
@@ -0,0 +1,81 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TCollectionBundlesPlugin } from "../../collection/bundles.plugin.js";
3
+ import { TElementPlugin } from "../../element/element.plugin.js";
4
+ import { TCollectionElements } from "../../collection/collection-elements.plugin.js";
5
+ import { fieldOf } from "../../input/field.js";
6
+ //#region src/custom/radio-group/checked/checked.plugin.ts
7
+ /**
8
+ * TRadioGroupCheckedPlugin — отметка полей группы по модели после выбора
9
+ * пользователя.
10
+ *
11
+ * Браузер отмечает нажатое радио и снимает отметку с соседа ещё до клика, а
12
+ * коллекция вправе выбор не принять: его отменил подписчик
13
+ * `item:activate:before`. Модель тогда не сменилась, и разметка поля не
14
+ * перерисует: и Vue, и React пишут `checked` в узел только на смену своего
15
+ * значения. Без этой записи на экране осталось бы отмеченным нажатое радио,
16
+ * а в модели — прежнее или ничего, и повторный клик по нажатому не выбрал бы
17
+ * ничего: отмеченному радио браузер `change` не шлёт.
18
+ *
19
+ * Поэтому после каждого `change` в группе плагин пишет `checked` каждому радио
20
+ * коллекции — по его активности. Плагин группы, а не радио: соседу, с которого
21
+ * браузер снял отметку, `change` не приходит, и вернуть её может только тот,
22
+ * кто видит все радио. Слушатель — на корне, в фазе всплытия: выбор
23
+ * пользователя коллекции отдаёт разметка радио — Vue на `change` самого поля,
24
+ * React ещё на `click`, — и до корня `change` доходит, когда модель уже
25
+ * решила.
26
+ *
27
+ * Пишется и отметка, совпавшая с узлом. React узнаёт отметку поля только по
28
+ * записи свойства и по ней решает, сменил ли клик отметку, прежде чем отдать
29
+ * `onChange` (см. `NativeInput` адаптера React). А нажатому радио отметку
30
+ * снимает и браузер — когда плагин возвращает её соседу, стоящему раньше:
31
+ * узел уже совпал с моделью, но React помнит отметку, увиденную на клике, и
32
+ * без записи повторный клик по этому радио `onChange` не дал бы.
33
+ *
34
+ * Радио — из коллекции группы (`engine:bound`), его узел — у реестра узлов
35
+ * (`TCollectionElements`), поле — по общему правилу полей (`fieldOf`) в
36
+ * узле. Радио без узла пропускается: поля, которое надо вернуть, у него нет.
37
+ */
38
+ var TRadioGroupCheckedPlugin = class extends TBasePlugin {
39
+ /** Корень группы: на нём слушатель. */
40
+ _root = null;
41
+ _elements = null;
42
+ _engine = null;
43
+ install(ctx) {
44
+ super.install(ctx);
45
+ this._elements = ctx.get(TCollectionElements) ?? null;
46
+ const elementPlugin = ctx.get(TElementPlugin);
47
+ elementPlugin?.events.on("ready", (element) => this._attach(element));
48
+ elementPlugin?.events.on("removed", () => this._detach());
49
+ ctx.get(TCollectionBundlesPlugin)?.events.on("engine:bound", (engine) => {
50
+ this._engine = engine;
51
+ });
52
+ }
53
+ destroy() {
54
+ this._detach();
55
+ this._elements = null;
56
+ this._engine = null;
57
+ super.destroy();
58
+ }
59
+ _attach(root) {
60
+ this._detach();
61
+ this._root = root;
62
+ root.addEventListener("change", this._onChange);
63
+ }
64
+ _detach() {
65
+ this._root?.removeEventListener("change", this._onChange);
66
+ this._root = null;
67
+ }
68
+ /** Каждое поле группы — по активности его радио в коллекции. */
69
+ _onChange = () => {
70
+ const engine = this._engine;
71
+ if (!engine) return;
72
+ const activation = engine.extensions.activation;
73
+ for (const item of engine.extensions.batch.items) {
74
+ const element = this._elements?.getElementByItem(item);
75
+ const field = element ? fieldOf(element) : null;
76
+ if (field instanceof HTMLInputElement) field.checked = activation.isActive(item);
77
+ }
78
+ };
79
+ };
80
+ //#endregion
81
+ export { TRadioGroupCheckedPlugin };
@@ -0,0 +1 @@
1
+ export * from './checked.plugin';
@@ -0,0 +1,3 @@
1
+ export * from './name';
2
+ export * from './checked';
3
+ export { radioStopOf } from './stop';
@@ -0,0 +1 @@
1
+ export * from './name.plugin';
@@ -0,0 +1,21 @@
1
+ import { TBasePlugin } from '../../../base';
2
+ import type { IPluginContext } from '../../../base';
3
+ /**
4
+ * TRadioGroupNamePlugin — общий `name` радио группы.
5
+ *
6
+ * Без общего `name` браузер не соберёт нативные радио в группу: не будет ни
7
+ * стрелок, ни одной остановки Tab, ни снятия отметки с соседа. Поэтому имя —
8
+ * механизм документа, а не значение группы: ядро держит только `name`, который
9
+ * задал потребитель (он же уходит в форму), а раздаёт имя радио этот плагин.
10
+ * Группе без своего имени он даёт `id` её монтирования (`createId`): он один на
11
+ * сервере и в браузере, и две безымянные группы на странице не сольются.
12
+ *
13
+ * Радио плагин узнаёт из коллекции группы (`engine:bound`) и пишет имя каждому:
14
+ * сразу, на смену состава (`change:items`) и на смену имени группы
15
+ * (`change:name`). Запись того же имени радио гасит сам. Движок привязывается
16
+ * при сборке, до первой отрисовки, — радио из данных получают имя уже в
17
+ * серверной разметке.
18
+ */
19
+ export declare class TRadioGroupNamePlugin extends TBasePlugin {
20
+ install(ctx: IPluginContext): void;
21
+ }
@@ -0,0 +1,39 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TCollectionBundlesPlugin } from "../../collection/bundles.plugin.js";
3
+ //#region src/custom/radio-group/name/name.plugin.ts
4
+ /**
5
+ * TRadioGroupNamePlugin — общий `name` радио группы.
6
+ *
7
+ * Без общего `name` браузер не соберёт нативные радио в группу: не будет ни
8
+ * стрелок, ни одной остановки Tab, ни снятия отметки с соседа. Поэтому имя —
9
+ * механизм документа, а не значение группы: ядро держит только `name`, который
10
+ * задал потребитель (он же уходит в форму), а раздаёт имя радио этот плагин.
11
+ * Группе без своего имени он даёт `id` её монтирования (`createId`): он один на
12
+ * сервере и в браузере, и две безымянные группы на странице не сольются.
13
+ *
14
+ * Радио плагин узнаёт из коллекции группы (`engine:bound`) и пишет имя каждому:
15
+ * сразу, на смену состава (`change:items`) и на смену имени группы
16
+ * (`change:name`). Запись того же имени радио гасит сам. Движок привязывается
17
+ * при сборке, до первой отрисовки, — радио из данных получают имя уже в
18
+ * серверной разметке.
19
+ */
20
+ var TRadioGroupNamePlugin = class extends TBasePlugin {
21
+ install(ctx) {
22
+ super.install(ctx);
23
+ const group = ctx.getInstance();
24
+ if (!group) return;
25
+ const unnamed = ctx.createId("group");
26
+ const name = (item) => {
27
+ item.name = group.name || unnamed;
28
+ };
29
+ ctx.get(TCollectionBundlesPlugin)?.events.on("engine:bound", (engine) => {
30
+ const radios = engine.extensions.batch;
31
+ const nameAll = () => radios.items.forEach(name);
32
+ nameAll();
33
+ this._listenTo(engine.extensions.plain.events, "change:items", nameAll);
34
+ this._listenTo(group.events, "change:name", nameAll);
35
+ });
36
+ }
37
+ };
38
+ //#endregion
39
+ export { TRadioGroupNamePlugin };
@@ -0,0 +1,17 @@
1
+ import type { IPluginContext } from '../../base';
2
+ /**
3
+ * Остановка группы радио — узел фокуса RadioGroup (`focusTarget` плагина
4
+ * действия): поле отмеченного радио, а без отметки — первого, на которое можно
5
+ * перейти. Туда же ведёт Tab: остановку группы по общему `name` выбирает
6
+ * браузер, и она одна.
7
+ *
8
+ * Отмеченное радио берётся по модели — активному в коллекции, — а не по
9
+ * `checked` поля: в такте смены значения разметка ещё старая, и фокус ушёл бы
10
+ * на прежнее радио. Отмеченное выключено или скрыто — фокус оно не примет, и
11
+ * остановка — первое, на которое можно перейти, как у табов. Поле — правилом
12
+ * узла фокуса радио (`fieldOf`), по узлу радио из реестра узлов коллекции.
13
+ *
14
+ * `null` — радио, на которые можно перейти, нет, или узла радио нет в
15
+ * документе.
16
+ */
17
+ export declare function radioStopOf(_root: Element, ctx: IPluginContext): Element | null;
@@ -0,0 +1,30 @@
1
+ import { TCollectionElements } from "../collection/collection-elements.plugin.js";
2
+ import { isReachable } from "../collection/reachable.js";
3
+ import { fieldOf } from "../input/field.js";
4
+ import { activationOf, batchOf } from "@soxa-ui/core";
5
+ //#region src/custom/radio-group/stop.ts
6
+ /**
7
+ * Остановка группы радио — узел фокуса RadioGroup (`focusTarget` плагина
8
+ * действия): поле отмеченного радио, а без отметки — первого, на которое можно
9
+ * перейти. Туда же ведёт Tab: остановку группы по общему `name` выбирает
10
+ * браузер, и она одна.
11
+ *
12
+ * Отмеченное радио берётся по модели — активному в коллекции, — а не по
13
+ * `checked` поля: в такте смены значения разметка ещё старая, и фокус ушёл бы
14
+ * на прежнее радио. Отмеченное выключено или скрыто — фокус оно не примет, и
15
+ * остановка — первое, на которое можно перейти, как у табов. Поле — правилом
16
+ * узла фокуса радио (`fieldOf`), по узлу радио из реестра узлов коллекции.
17
+ *
18
+ * `null` — радио, на которые можно перейти, нет, или узла радио нет в
19
+ * документе.
20
+ */
21
+ function radioStopOf(_root, ctx) {
22
+ const elements = ctx.get(TCollectionElements) ?? null;
23
+ const engine = elements?.engine ?? null;
24
+ const checked = activationOf(engine)?.activeItem;
25
+ const radio = checked && isReachable(checked) ? checked : batchOf(engine)?.shown.find(isReachable);
26
+ const node = radio ? elements?.getElementByItem(radio) : null;
27
+ return node ? fieldOf(node) : null;
28
+ }
29
+ //#endregion
30
+ export { radioStopOf };
@@ -0,0 +1,36 @@
1
+ import type { IRating } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TRatingHoverPluginEvents } from './types';
5
+ /**
6
+ * TRatingHoverPlugin — наведение на оценку: предпросмотр той оценки, которую
7
+ * поставит нажатие под указателем.
8
+ *
9
+ * Операция над DOM — здесь, значение — у владельца. Плагин переводит точку
10
+ * указателя в долю ряда по коробке дорожки — тем же счётом, что указатель
11
+ * перетаскивания (`slideDirection`, `fractionAt`): в RTL ряд растёт справа, —
12
+ * и зовёт `hover` владельца. Какую оценку показать, решает владелец: он
13
+ * округляет долю к шагу так же, как нажатие, и не показывает предпросмотра,
14
+ * когда оценку менять нельзя.
15
+ *
16
+ * Слушает корень, как указатель перетаскивания: нажатие ловит он же, и
17
+ * предпросмотр показывает ровно то, что поставит нажатие в этой точке.
18
+ *
19
+ * Наведение — не касание: палец над звездой — это уже нажатие, а
20
+ * предпросмотр после него остался бы висеть. Указатель ушёл с корня или
21
+ * корня не стало — предпросмотра нет.
22
+ */
23
+ export declare class TRatingHoverPlugin extends TBasePlugin<IRating, TRatingHoverPluginEvents> {
24
+ private _owner;
25
+ private _root;
26
+ install(ctx: IPluginContext, options?: unknown): void;
27
+ destroy(): void;
28
+ private _attach;
29
+ /**
30
+ * Снять слушатели — и предпросмотр: у оценки без узла указателя над
31
+ * звёздами нет, а свой `ctrl` переживает размонтирование.
32
+ */
33
+ private _detach;
34
+ private readonly _onPointerMove;
35
+ private readonly _onPointerLeave;
36
+ }
@@ -0,0 +1,71 @@
1
+ import { TBasePlugin } from "../../../base/base.class.js";
2
+ import { TElementPlugin } from "../../element/element.plugin.js";
3
+ import { fractionAt, slideDirection } from "../../slide/direction.js";
4
+ import { trackOf } from "../../slide/parts.js";
5
+ //#region src/custom/rating/hover/hover.plugin.ts
6
+ /**
7
+ * TRatingHoverPlugin — наведение на оценку: предпросмотр той оценки, которую
8
+ * поставит нажатие под указателем.
9
+ *
10
+ * Операция над DOM — здесь, значение — у владельца. Плагин переводит точку
11
+ * указателя в долю ряда по коробке дорожки — тем же счётом, что указатель
12
+ * перетаскивания (`slideDirection`, `fractionAt`): в RTL ряд растёт справа, —
13
+ * и зовёт `hover` владельца. Какую оценку показать, решает владелец: он
14
+ * округляет долю к шагу так же, как нажатие, и не показывает предпросмотра,
15
+ * когда оценку менять нельзя.
16
+ *
17
+ * Слушает корень, как указатель перетаскивания: нажатие ловит он же, и
18
+ * предпросмотр показывает ровно то, что поставит нажатие в этой точке.
19
+ *
20
+ * Наведение — не касание: палец над звездой — это уже нажатие, а
21
+ * предпросмотр после него остался бы висеть. Указатель ушёл с корня или
22
+ * корня не стало — предпросмотра нет.
23
+ */
24
+ var TRatingHoverPlugin = class extends TBasePlugin {
25
+ _owner = null;
26
+ _root = null;
27
+ install(ctx, options) {
28
+ super.install(ctx, options);
29
+ this._owner = ctx.getInstance();
30
+ const element = ctx.get(TElementPlugin);
31
+ element?.events.on("ready", (node) => this._attach(node));
32
+ element?.events.on("removed", () => this._detach());
33
+ }
34
+ destroy() {
35
+ this._detach();
36
+ this._owner = null;
37
+ super.destroy();
38
+ }
39
+ _attach(root) {
40
+ this._detach();
41
+ this._root = root;
42
+ const target = root;
43
+ target.addEventListener("pointermove", this._onPointerMove);
44
+ target.addEventListener("pointerleave", this._onPointerLeave);
45
+ }
46
+ /**
47
+ * Снять слушатели — и предпросмотр: у оценки без узла указателя над
48
+ * звёздами нет, а свой `ctrl` переживает размонтирование.
49
+ */
50
+ _detach() {
51
+ const target = this._root;
52
+ if (!target) return;
53
+ target.removeEventListener("pointermove", this._onPointerMove);
54
+ target.removeEventListener("pointerleave", this._onPointerLeave);
55
+ this._root = null;
56
+ this._owner?.hover(void 0);
57
+ }
58
+ _onPointerMove = (event) => {
59
+ const owner = this._owner;
60
+ const root = this._root;
61
+ if (!owner || !root || event.pointerType === "touch") return;
62
+ const track = trackOf(owner, root);
63
+ if (!track) return;
64
+ owner.hover(fractionAt(slideDirection(owner, root), track.getBoundingClientRect(), event));
65
+ };
66
+ _onPointerLeave = () => {
67
+ this._owner?.hover(void 0);
68
+ };
69
+ };
70
+ //#endregion
71
+ export { TRatingHoverPlugin };
@@ -0,0 +1,2 @@
1
+ export { TRatingHoverPlugin } from './hover.plugin';
2
+ export type { TRatingHoverPluginEvents } from './types';
@@ -0,0 +1,7 @@
1
+ import type { TPluginEvents } from '../../../base';
2
+ /**
3
+ * Своих событий у плагина нет: предпросмотр виден через владельца — его
4
+ * `preview` и `change:preview` сообщает он. Второй путь к тому же факту через
5
+ * события плагина разошёлся бы с первым.
6
+ */
7
+ export type TRatingHoverPluginEvents = TPluginEvents;
@@ -0,0 +1,3 @@
1
+ export * from './hover';
2
+ export * from './names';
3
+ export * from './validity';
@@ -0,0 +1 @@
1
+ export * from './names.plugin';
@@ -0,0 +1,25 @@
1
+ import type { IRating } from '@soxa-ui/core';
2
+ import { TNamesPlugin } from '../../../locale/names.plugin';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TTranslations } from '../../../locale/types';
5
+ /**
6
+ * TRatingNamesPlugin — как звучит оценка: `aria-valuetext` поля от локали,
7
+ * «4 из 5».
8
+ *
9
+ * Число поле объявило бы и само, но без наибольшей оценки скринридер не
10
+ * скажет, много это или мало. Строка — шаблон локали (`rating.value`), числа
11
+ * в ней — по тегу локали: «3,5 из 5», а не «3.5 из 5». Звёзд в строке нет:
12
+ * значок оценки меняет слот.
13
+ *
14
+ * Пишет в `aria` владельца — набор поля — при установке, на смену локали, на
15
+ * смену оценки и числа звёзд. Предпросмотр наведением строку не меняет:
16
+ * скринридер объявляет значение, а не то, что под указателем.
17
+ */
18
+ export declare class TRatingNamesPlugin extends TNamesPlugin<IRating> {
19
+ /** Источник локали набора — за тегом для чисел: строки база отдаёт сама */
20
+ private _locale;
21
+ install(ctx: IPluginContext, options?: unknown): void;
22
+ destroy(): void;
23
+ protected _name(owner: IRating, translations: TTranslations): void;
24
+ protected _watch(owner: IRating, name: () => void): void;
25
+ }
@@ -0,0 +1,45 @@
1
+ import { TNamesPlugin } from "../../../locale/names.plugin.js";
2
+ //#region src/custom/rating/names/names.plugin.ts
3
+ /**
4
+ * Строка значения: шаблон из локали, на месте `{value}` — оценка, на месте
5
+ * `{max}` — наибольшая. Порядок слов у каждого языка свой, поэтому места в
6
+ * шаблоне, а не склейка.
7
+ */
8
+ function valueText(template, value, max) {
9
+ return template.split("{value}").join(value).split("{max}").join(max);
10
+ }
11
+ /**
12
+ * TRatingNamesPlugin — как звучит оценка: `aria-valuetext` поля от локали,
13
+ * «4 из 5».
14
+ *
15
+ * Число поле объявило бы и само, но без наибольшей оценки скринридер не
16
+ * скажет, много это или мало. Строка — шаблон локали (`rating.value`), числа
17
+ * в ней — по тегу локали: «3,5 из 5», а не «3.5 из 5». Звёзд в строке нет:
18
+ * значок оценки меняет слот.
19
+ *
20
+ * Пишет в `aria` владельца — набор поля — при установке, на смену локали, на
21
+ * смену оценки и числа звёзд. Предпросмотр наведением строку не меняет:
22
+ * скринридер объявляет значение, а не то, что под указателем.
23
+ */
24
+ var TRatingNamesPlugin = class extends TNamesPlugin {
25
+ /** Источник локали набора — за тегом для чисел: строки база отдаёт сама */
26
+ _locale = null;
27
+ install(ctx, options) {
28
+ this._locale = ctx.locale;
29
+ super.install(ctx, options);
30
+ }
31
+ destroy() {
32
+ this._locale = null;
33
+ super.destroy();
34
+ }
35
+ _name(owner, translations) {
36
+ const tag = this._locale?.locale.tag;
37
+ owner.aria.add("aria-valuetext", valueText(translations.rating.value, owner.value.toLocaleString(tag), owner.max.toLocaleString(tag)));
38
+ }
39
+ _watch(owner, name) {
40
+ this._listenTo(owner.events, "change:value", name);
41
+ this._listenTo(owner.events, "change:max", name);
42
+ }
43
+ };
44
+ //#endregion
45
+ export { TRatingNamesPlugin };
@@ -0,0 +1,2 @@
1
+ export { TRatingValidityPlugin } from './validity.plugin';
2
+ export type { TRatingValidityPluginEvents } from './types';
@@ -0,0 +1,7 @@
1
+ import type { TPluginEvents } from '../../../base';
2
+ /**
3
+ * Своих событий у плагина нет: ошибку обязательной оценки сообщает поле — его
4
+ * `validity`, `invalid` при отправке формы и `:user-invalid`, — а о её
5
+ * причинах, оценке и обязательности, сообщает владелец.
6
+ */
7
+ export type TRatingValidityPluginEvents = TPluginEvents;
@@ -0,0 +1,48 @@
1
+ import type { IRating } from '@soxa-ui/core';
2
+ import { TBasePlugin } from '../../../base';
3
+ import type { IPluginContext } from '../../../base';
4
+ import type { TRatingValidityPluginEvents } from './types';
5
+ /**
6
+ * TRatingValidityPlugin — обязательная оценка: пока её нет, форма не
7
+ * отправляется.
8
+ *
9
+ * 0 у оценки значит «оценки нет», и обязательная оценка с 0 — то же, что
10
+ * пустое поле с `required`. Но поле оценки — `input[type=range]`: ни
11
+ * `required`, ни состояния «пусто» у него нет, у ползунка значение есть
12
+ * всегда. Поэтому ошибку полю ставит плагин — `setCustomValidity` со строкой
13
+ * локали `rating.required`, пока оценка обязательна, не только для показа и
14
+ * равна 0, — и снимает, когда условие ушло. Остальное делает браузер, как с
15
+ * любым неверным полем: не отправляет форму, ставит фокус на поле и
16
+ * показывает сообщение, а `disabled` из проверки исключает сам.
17
+ *
18
+ * Только для показа (`readonly`) ошибки нет, как у нативного поля `readonly`:
19
+ * его браузер тоже не проверяет. Свойства «неверно» у ядра нет: когда
20
+ * показывать ошибку, решает браузер, — до первой отправки нетронутая оценка
21
+ * не горит, — и тема красит её по `:user-invalid` поля.
22
+ *
23
+ * Пересчёт — на появление узла, смену оценки, обязательности, режима только
24
+ * для показа и локали. Без узла плагин ничего не делает: сборка идёт и на
25
+ * сервере, а поле, которому ставить ошибку, появится с `ready`. Отпустил узел
26
+ * или снят сам — ошибку с поля снимает: ставил её он.
27
+ */
28
+ export declare class TRatingValidityPlugin extends TBasePlugin<IRating, TRatingValidityPluginEvents> {
29
+ private _owner;
30
+ /** Источник локали набора — за строкой ошибки на её языке */
31
+ private _locale;
32
+ /** Корень оценки, пока узел объявлен: поле плагин находит в нём */
33
+ private _root;
34
+ install(ctx: IPluginContext, options?: unknown): void;
35
+ destroy(): void;
36
+ private _attach;
37
+ private _detach;
38
+ /** Ошибка полю — по текущей оценке; оценки нет только у обязательной. */
39
+ private _sync;
40
+ /**
41
+ * Обязательной оценки нет: она равна 0 и её можно поставить. Только для
42
+ * показа её не ставят вовсе, и спрашивать её с пользователя нечего.
43
+ */
44
+ private _missing;
45
+ private _message;
46
+ /** Поле — у единственной ручки оценки, её `input`; узла нет — и поля нет. */
47
+ private _field;
48
+ }