@soxa-ui/react 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 (456) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +253 -2
  3. package/dist/adapter/common/aria.d.ts +6 -0
  4. package/dist/adapter/common/aria.js +22 -0
  5. package/dist/adapter/common/icon.d.ts +9 -0
  6. package/dist/adapter/common/icon.js +22 -0
  7. package/dist/adapter/common/index.d.ts +6 -0
  8. package/dist/adapter/common/naming.d.ts +6 -0
  9. package/dist/adapter/common/naming.js +8 -0
  10. package/dist/adapter/common/profile.d.ts +3 -0
  11. package/dist/adapter/common/profile.js +8 -0
  12. package/dist/adapter/common/root.d.ts +67 -0
  13. package/dist/adapter/common/root.js +83 -0
  14. package/dist/adapter/common/slots.d.ts +15 -0
  15. package/dist/adapter/common/slots.js +23 -0
  16. package/dist/adapter/elevator/Elevate.d.ts +16 -0
  17. package/dist/adapter/elevator/Elevate.js +22 -0
  18. package/dist/adapter/elevator/elevator.class.d.ts +14 -0
  19. package/dist/adapter/elevator/elevator.class.js +23 -0
  20. package/dist/adapter/elevator/index.d.ts +3 -0
  21. package/dist/adapter/elevator/layer.d.ts +6 -0
  22. package/dist/adapter/elevator/layer.js +5 -0
  23. package/dist/adapter/elevator/scope.class.d.ts +19 -0
  24. package/dist/adapter/elevator/scope.class.js +31 -0
  25. package/dist/adapter/index.d.ts +5 -0
  26. package/dist/adapter/locale/LocaleProvider.d.ts +19 -0
  27. package/dist/adapter/locale/LocaleProvider.js +29 -0
  28. package/dist/adapter/locale/context.d.ts +3 -0
  29. package/dist/adapter/locale/context.js +7 -0
  30. package/dist/adapter/locale/index.d.ts +2 -0
  31. package/dist/adapter/runtime/NativeInput.d.ts +24 -0
  32. package/dist/adapter/runtime/NativeInput.js +40 -0
  33. package/dist/adapter/runtime/NativeTextarea.d.ts +10 -0
  34. package/dist/adapter/runtime/NativeTextarea.js +24 -0
  35. package/dist/adapter/runtime/Teleport.d.ts +14 -0
  36. package/dist/adapter/runtime/Teleport.js +82 -0
  37. package/dist/adapter/runtime/accepting.d.ts +10 -0
  38. package/dist/adapter/runtime/accepting.js +18 -0
  39. package/dist/adapter/runtime/click-action.class.d.ts +14 -0
  40. package/dist/adapter/runtime/click-action.class.js +26 -0
  41. package/dist/adapter/runtime/drafts.class.d.ts +24 -0
  42. package/dist/adapter/runtime/drafts.class.js +41 -0
  43. package/dist/adapter/runtime/event-callbacks.class.d.ts +29 -0
  44. package/dist/adapter/runtime/event-callbacks.class.js +44 -0
  45. package/dist/adapter/runtime/index.d.ts +16 -0
  46. package/dist/adapter/runtime/root-ref.class.d.ts +39 -0
  47. package/dist/adapter/runtime/root-ref.class.js +86 -0
  48. package/dist/adapter/runtime/stable-snapshot.class.d.ts +20 -0
  49. package/dist/adapter/runtime/stable-snapshot.class.js +43 -0
  50. package/dist/adapter/runtime/useAdapter.d.ts +39 -0
  51. package/dist/adapter/runtime/useAdapter.js +78 -0
  52. package/dist/adapter/runtime/useAdapterContext.d.ts +22 -0
  53. package/dist/adapter/runtime/useAdapterContext.js +128 -0
  54. package/dist/adapter/runtime/useClickAction.d.ts +6 -0
  55. package/dist/adapter/runtime/useClickAction.js +16 -0
  56. package/dist/adapter/runtime/useComponent.d.ts +15 -0
  57. package/dist/adapter/runtime/useComponent.js +13 -0
  58. package/dist/adapter/runtime/useRootElement.d.ts +6 -0
  59. package/dist/adapter/runtime/useRootElement.js +13 -0
  60. package/dist/adapter/runtime/withRenderBoundary.d.ts +7 -0
  61. package/dist/adapter/runtime/withRenderBoundary.js +13 -0
  62. package/dist/adapter/toasts/index.d.ts +3 -0
  63. package/dist/adapter/toasts/render.d.ts +6 -0
  64. package/dist/adapter/toasts/render.js +17 -0
  65. package/dist/adapter/toasts/types.d.ts +6 -0
  66. package/dist/adapter/toasts/useToasts.d.ts +8 -0
  67. package/dist/adapter/toasts/useToasts.js +19 -0
  68. package/dist/components/accordion/Accordion.d.ts +14 -0
  69. package/dist/components/accordion/Accordion.js +40 -0
  70. package/dist/components/accordion/base.component.d.ts +6 -0
  71. package/dist/components/accordion/index.d.ts +6 -0
  72. package/dist/components/accordion/index.js +7 -0
  73. package/dist/components/accordion/item/Item.d.ts +6 -0
  74. package/dist/components/accordion/item/Item.js +68 -0
  75. package/dist/components/accordion/item/base.component.d.ts +9 -0
  76. package/dist/components/accordion/item/index.d.ts +2 -0
  77. package/dist/components/accordion/item/setup.component.d.ts +17 -0
  78. package/dist/components/accordion/item/setup.component.js +23 -0
  79. package/dist/components/accordion/setup.component.d.ts +15 -0
  80. package/dist/components/accordion/setup.component.js +26 -0
  81. package/dist/components/button/Button.d.ts +15 -0
  82. package/dist/components/button/Button.js +38 -0
  83. package/dist/components/button/base.component.d.ts +7 -0
  84. package/dist/components/button/index.d.ts +2 -0
  85. package/dist/components/button/setup.component.d.ts +22 -0
  86. package/dist/components/button/setup.component.js +12 -0
  87. package/dist/components/calendar/Calendar.d.ts +7 -0
  88. package/dist/components/calendar/Calendar.js +190 -0
  89. package/dist/components/calendar/base.component.d.ts +7 -0
  90. package/dist/components/calendar/index.d.ts +7 -0
  91. package/dist/components/calendar/index.js +8 -0
  92. package/dist/components/calendar/item/Item.d.ts +3 -0
  93. package/dist/components/calendar/item/Item.js +26 -0
  94. package/dist/components/calendar/item/base.component.d.ts +7 -0
  95. package/dist/components/calendar/item/index.d.ts +2 -0
  96. package/dist/components/calendar/item/setup.component.d.ts +13 -0
  97. package/dist/components/calendar/item/setup.component.js +20 -0
  98. package/dist/components/calendar/setup.component.d.ts +15 -0
  99. package/dist/components/calendar/setup.component.js +26 -0
  100. package/dist/components/check-box/CheckBox.d.ts +4 -0
  101. package/dist/components/check-box/CheckBox.js +49 -0
  102. package/dist/components/check-box/base.component.d.ts +7 -0
  103. package/dist/components/check-box/index.d.ts +2 -0
  104. package/dist/components/check-box/setup.component.d.ts +27 -0
  105. package/dist/components/check-box/setup.component.js +13 -0
  106. package/dist/components/component/base.component.d.ts +5 -0
  107. package/dist/components/component/index.d.ts +1 -0
  108. package/dist/components/component-view/ComponentView.d.ts +4 -0
  109. package/dist/components/component-view/ComponentView.js +22 -0
  110. package/dist/components/component-view/base.component.d.ts +5 -0
  111. package/dist/components/component-view/index.d.ts +2 -0
  112. package/dist/components/component-view/setup.component.d.ts +9 -0
  113. package/dist/components/component-view/setup.component.js +12 -0
  114. package/dist/components/control/base.component.d.ts +5 -0
  115. package/dist/components/control/index.d.ts +1 -0
  116. package/dist/components/control/setup.component.d.ts +22 -0
  117. package/dist/components/date-input/DateInput.d.ts +4 -0
  118. package/dist/components/date-input/DateInput.js +88 -0
  119. package/dist/components/date-input/base.component.d.ts +6 -0
  120. package/dist/components/date-input/index.d.ts +2 -0
  121. package/dist/components/date-input/setup.component.d.ts +27 -0
  122. package/dist/components/date-input/setup.component.js +13 -0
  123. package/dist/components/date-picker/DatePicker.d.ts +9 -0
  124. package/dist/components/date-picker/DatePicker.js +148 -0
  125. package/dist/components/date-picker/base.component.d.ts +6 -0
  126. package/dist/components/date-picker/index.d.ts +2 -0
  127. package/dist/components/date-picker/setup.component.d.ts +60 -0
  128. package/dist/components/date-picker/setup.component.js +26 -0
  129. package/dist/components/dialog/Dialog.d.ts +7 -0
  130. package/dist/components/dialog/Dialog.js +88 -0
  131. package/dist/components/dialog/base.component.d.ts +6 -0
  132. package/dist/components/dialog/index.d.ts +2 -0
  133. package/dist/components/dialog/setup.component.d.ts +29 -0
  134. package/dist/components/dialog/setup.component.js +12 -0
  135. package/dist/components/drag-and-drop/DragAndDrop.d.ts +4 -0
  136. package/dist/components/drag-and-drop/DragAndDrop.js +16 -0
  137. package/dist/components/drag-and-drop/base.component.d.ts +6 -0
  138. package/dist/components/drag-and-drop/index.d.ts +2 -0
  139. package/dist/components/drag-and-drop/setup.component.d.ts +6 -0
  140. package/dist/components/drag-and-drop/setup.component.js +12 -0
  141. package/dist/components/drawer/Drawer.d.ts +7 -0
  142. package/dist/components/drawer/Drawer.js +75 -0
  143. package/dist/components/drawer/base.component.d.ts +6 -0
  144. package/dist/components/drawer/index.d.ts +2 -0
  145. package/dist/components/drawer/setup.component.d.ts +29 -0
  146. package/dist/components/drawer/setup.component.js +12 -0
  147. package/dist/components/field/Field.d.ts +4 -0
  148. package/dist/components/field/Field.js +58 -0
  149. package/dist/components/field/base.component.d.ts +5 -0
  150. package/dist/components/field/index.d.ts +2 -0
  151. package/dist/components/field/setup.component.d.ts +10 -0
  152. package/dist/components/field/setup.component.js +13 -0
  153. package/dist/components/frame/Frame.d.ts +7 -0
  154. package/dist/components/frame/Frame.js +30 -0
  155. package/dist/components/frame/base.component.d.ts +5 -0
  156. package/dist/components/frame/index.d.ts +2 -0
  157. package/dist/components/frame/setup.component.d.ts +33 -0
  158. package/dist/components/frame/setup.component.js +12 -0
  159. package/dist/components/icon/Icon.d.ts +7 -0
  160. package/dist/components/icon/Icon.js +17 -0
  161. package/dist/components/icon/base.component.d.ts +5 -0
  162. package/dist/components/icon/index.d.ts +2 -0
  163. package/dist/components/icon/setup.component.d.ts +19 -0
  164. package/dist/components/icon/setup.component.js +12 -0
  165. package/dist/components/index.d.ts +43 -0
  166. package/dist/components/input/Input.d.ts +4 -0
  167. package/dist/components/input/Input.js +65 -0
  168. package/dist/components/input/base.component.d.ts +7 -0
  169. package/dist/components/input/index.d.ts +2 -0
  170. package/dist/components/input/setup.component.d.ts +27 -0
  171. package/dist/components/input/setup.component.js +13 -0
  172. package/dist/components/input-control/base.component.d.ts +6 -0
  173. package/dist/components/input-control/index.d.ts +1 -0
  174. package/dist/components/input-control/setup.component.d.ts +26 -0
  175. package/dist/components/interactive/base.component.d.ts +5 -0
  176. package/dist/components/interactive/index.d.ts +1 -0
  177. package/dist/components/interactive/setup.component.d.ts +9 -0
  178. package/dist/components/item-row/ItemRow.d.ts +13 -0
  179. package/dist/components/item-row/ItemRow.js +19 -0
  180. package/dist/components/item-row/index.d.ts +2 -0
  181. package/dist/components/item-row/setup.component.d.ts +22 -0
  182. package/dist/components/item-row/setup.component.js +12 -0
  183. package/dist/components/label/Label.d.ts +7 -0
  184. package/dist/components/label/Label.js +31 -0
  185. package/dist/components/label/base.component.d.ts +5 -0
  186. package/dist/components/label/index.d.ts +2 -0
  187. package/dist/components/label/setup.component.d.ts +9 -0
  188. package/dist/components/label/setup.component.js +12 -0
  189. package/dist/components/list-box/ListBox.d.ts +8 -0
  190. package/dist/components/list-box/ListBox.js +67 -0
  191. package/dist/components/list-box/base.component.d.ts +9 -0
  192. package/dist/components/list-box/group/Group.d.ts +7 -0
  193. package/dist/components/list-box/group/Group.js +34 -0
  194. package/dist/components/list-box/group/base.component.d.ts +6 -0
  195. package/dist/components/list-box/group/index.d.ts +2 -0
  196. package/dist/components/list-box/group/setup.component.d.ts +9 -0
  197. package/dist/components/list-box/group/setup.component.js +12 -0
  198. package/dist/components/list-box/index.d.ts +9 -0
  199. package/dist/components/list-box/index.js +11 -0
  200. package/dist/components/list-box/item/Item.d.ts +6 -0
  201. package/dist/components/list-box/item/Item.js +57 -0
  202. package/dist/components/list-box/item/base.component.d.ts +8 -0
  203. package/dist/components/list-box/item/index.d.ts +2 -0
  204. package/dist/components/list-box/item/setup.component.d.ts +19 -0
  205. package/dist/components/list-box/item/setup.component.js +23 -0
  206. package/dist/components/list-box/setup.component.d.ts +15 -0
  207. package/dist/components/list-box/setup.component.js +26 -0
  208. package/dist/components/menu/Menu.d.ts +7 -0
  209. package/dist/components/menu/Menu.js +47 -0
  210. package/dist/components/menu/base.component.d.ts +6 -0
  211. package/dist/components/menu/checkbox-item/CheckboxItem.d.ts +6 -0
  212. package/dist/components/menu/checkbox-item/CheckboxItem.js +61 -0
  213. package/dist/components/menu/checkbox-item/base.component.d.ts +8 -0
  214. package/dist/components/menu/checkbox-item/index.d.ts +2 -0
  215. package/dist/components/menu/checkbox-item/setup.component.d.ts +17 -0
  216. package/dist/components/menu/checkbox-item/setup.component.js +23 -0
  217. package/dist/components/menu/group/Group.d.ts +4 -0
  218. package/dist/components/menu/group/Group.js +31 -0
  219. package/dist/components/menu/group/base.component.d.ts +6 -0
  220. package/dist/components/menu/group/index.d.ts +2 -0
  221. package/dist/components/menu/group/setup.component.d.ts +9 -0
  222. package/dist/components/menu/group/setup.component.js +12 -0
  223. package/dist/components/menu/index.d.ts +23 -0
  224. package/dist/components/menu/index.js +23 -0
  225. package/dist/components/menu/item/Item.d.ts +3 -0
  226. package/dist/components/menu/item/Item.js +42 -0
  227. package/dist/components/menu/item/base.component.d.ts +8 -0
  228. package/dist/components/menu/item/index.d.ts +2 -0
  229. package/dist/components/menu/item/setup.component.d.ts +17 -0
  230. package/dist/components/menu/item/setup.component.js +23 -0
  231. package/dist/components/menu/popover-item/PopoverItem.d.ts +6 -0
  232. package/dist/components/menu/popover-item/PopoverItem.js +72 -0
  233. package/dist/components/menu/popover-item/base.component.d.ts +8 -0
  234. package/dist/components/menu/popover-item/index.d.ts +2 -0
  235. package/dist/components/menu/popover-item/setup.component.d.ts +24 -0
  236. package/dist/components/menu/popover-item/setup.component.js +26 -0
  237. package/dist/components/menu/radio-group/RadioGroup.d.ts +4 -0
  238. package/dist/components/menu/radio-group/RadioGroup.js +31 -0
  239. package/dist/components/menu/radio-group/base.component.d.ts +5 -0
  240. package/dist/components/menu/radio-group/index.d.ts +2 -0
  241. package/dist/components/menu/radio-group/setup.component.d.ts +9 -0
  242. package/dist/components/menu/radio-group/setup.component.js +12 -0
  243. package/dist/components/menu/radio-item/RadioItem.d.ts +3 -0
  244. package/dist/components/menu/radio-item/RadioItem.js +50 -0
  245. package/dist/components/menu/radio-item/base.component.d.ts +9 -0
  246. package/dist/components/menu/radio-item/index.d.ts +2 -0
  247. package/dist/components/menu/radio-item/setup.component.d.ts +17 -0
  248. package/dist/components/menu/radio-item/setup.component.js +23 -0
  249. package/dist/components/menu/separator/Separator.d.ts +4 -0
  250. package/dist/components/menu/separator/Separator.js +18 -0
  251. package/dist/components/menu/separator/base.component.d.ts +5 -0
  252. package/dist/components/menu/separator/index.d.ts +2 -0
  253. package/dist/components/menu/separator/setup.component.d.ts +9 -0
  254. package/dist/components/menu/separator/setup.component.js +12 -0
  255. package/dist/components/menu/setup.component.d.ts +16 -0
  256. package/dist/components/menu/setup.component.js +29 -0
  257. package/dist/components/menu/submenu/Submenu.d.ts +22 -0
  258. package/dist/components/menu/submenu/Submenu.js +117 -0
  259. package/dist/components/menu/submenu/base.component.d.ts +9 -0
  260. package/dist/components/menu/submenu/index.d.ts +2 -0
  261. package/dist/components/menu/submenu/setup.component.d.ts +25 -0
  262. package/dist/components/menu/submenu/setup.component.js +37 -0
  263. package/dist/components/number-input/NumberInput.d.ts +4 -0
  264. package/dist/components/number-input/NumberInput.js +108 -0
  265. package/dist/components/number-input/base.component.d.ts +7 -0
  266. package/dist/components/number-input/index.d.ts +2 -0
  267. package/dist/components/number-input/setup.component.d.ts +27 -0
  268. package/dist/components/number-input/setup.component.js +13 -0
  269. package/dist/components/pagination/Pagination.d.ts +7 -0
  270. package/dist/components/pagination/Pagination.js +80 -0
  271. package/dist/components/pagination/base.component.d.ts +6 -0
  272. package/dist/components/pagination/index.d.ts +2 -0
  273. package/dist/components/pagination/item/Item.d.ts +3 -0
  274. package/dist/components/pagination/item/Item.js +34 -0
  275. package/dist/components/pagination/item/base.component.d.ts +5 -0
  276. package/dist/components/pagination/item/index.d.ts +2 -0
  277. package/dist/components/pagination/item/setup.component.d.ts +11 -0
  278. package/dist/components/pagination/item/setup.component.js +23 -0
  279. package/dist/components/pagination/setup.component.d.ts +15 -0
  280. package/dist/components/pagination/setup.component.js +26 -0
  281. package/dist/components/popover/Popover.d.ts +7 -0
  282. package/dist/components/popover/Popover.js +68 -0
  283. package/dist/components/popover/base.component.d.ts +6 -0
  284. package/dist/components/popover/index.d.ts +2 -0
  285. package/dist/components/popover/setup.component.d.ts +34 -0
  286. package/dist/components/popover/setup.component.js +17 -0
  287. package/dist/components/progress-linear/ProgressLinear.d.ts +7 -0
  288. package/dist/components/progress-linear/ProgressLinear.js +24 -0
  289. package/dist/components/progress-linear/base.component.d.ts +5 -0
  290. package/dist/components/progress-linear/index.d.ts +2 -0
  291. package/dist/components/progress-linear/setup.component.d.ts +17 -0
  292. package/dist/components/progress-linear/setup.component.js +12 -0
  293. package/dist/components/progress-spinner/ProgressSpinner.d.ts +7 -0
  294. package/dist/components/progress-spinner/ProgressSpinner.js +50 -0
  295. package/dist/components/progress-spinner/base.component.d.ts +5 -0
  296. package/dist/components/progress-spinner/index.d.ts +2 -0
  297. package/dist/components/progress-spinner/setup.component.d.ts +17 -0
  298. package/dist/components/progress-spinner/setup.component.js +12 -0
  299. package/dist/components/radio-group/RadioGroup.d.ts +4 -0
  300. package/dist/components/radio-group/RadioGroup.js +30 -0
  301. package/dist/components/radio-group/base.component.d.ts +7 -0
  302. package/dist/components/radio-group/index.d.ts +7 -0
  303. package/dist/components/radio-group/index.js +8 -0
  304. package/dist/components/radio-group/item/Item.d.ts +3 -0
  305. package/dist/components/radio-group/item/Item.js +46 -0
  306. package/dist/components/radio-group/item/base.component.d.ts +9 -0
  307. package/dist/components/radio-group/item/index.d.ts +2 -0
  308. package/dist/components/radio-group/item/setup.component.d.ts +42 -0
  309. package/dist/components/radio-group/item/setup.component.js +30 -0
  310. package/dist/components/radio-group/setup.component.d.ts +16 -0
  311. package/dist/components/radio-group/setup.component.js +27 -0
  312. package/dist/components/rating/Rating.d.ts +4 -0
  313. package/dist/components/rating/Rating.js +55 -0
  314. package/dist/components/rating/base.component.d.ts +6 -0
  315. package/dist/components/rating/index.d.ts +2 -0
  316. package/dist/components/rating/setup.component.d.ts +27 -0
  317. package/dist/components/rating/setup.component.js +13 -0
  318. package/dist/components/scroller/Scroller.d.ts +7 -0
  319. package/dist/components/scroller/Scroller.js +64 -0
  320. package/dist/components/scroller/base.component.d.ts +6 -0
  321. package/dist/components/scroller/index.d.ts +2 -0
  322. package/dist/components/scroller/setup.component.d.ts +22 -0
  323. package/dist/components/scroller/setup.component.js +12 -0
  324. package/dist/components/select/Select.d.ts +7 -0
  325. package/dist/components/select/Select.js +116 -0
  326. package/dist/components/select/base.component.d.ts +8 -0
  327. package/dist/components/select/group/Group.d.ts +7 -0
  328. package/dist/components/select/group/Group.js +34 -0
  329. package/dist/components/select/group/base.component.d.ts +6 -0
  330. package/dist/components/select/group/index.d.ts +2 -0
  331. package/dist/components/select/group/setup.component.d.ts +9 -0
  332. package/dist/components/select/group/setup.component.js +12 -0
  333. package/dist/components/select/index.d.ts +9 -0
  334. package/dist/components/select/index.js +11 -0
  335. package/dist/components/select/item/Item.d.ts +6 -0
  336. package/dist/components/select/item/Item.js +58 -0
  337. package/dist/components/select/item/base.component.d.ts +8 -0
  338. package/dist/components/select/item/index.d.ts +2 -0
  339. package/dist/components/select/item/setup.component.d.ts +19 -0
  340. package/dist/components/select/item/setup.component.js +23 -0
  341. package/dist/components/select/setup.component.d.ts +27 -0
  342. package/dist/components/select/setup.component.js +30 -0
  343. package/dist/components/skeleton/Skeleton.d.ts +4 -0
  344. package/dist/components/skeleton/Skeleton.js +23 -0
  345. package/dist/components/skeleton/base.component.d.ts +5 -0
  346. package/dist/components/skeleton/index.d.ts +2 -0
  347. package/dist/components/skeleton/setup.component.d.ts +11 -0
  348. package/dist/components/skeleton/setup.component.js +12 -0
  349. package/dist/components/slider/Slider.d.ts +4 -0
  350. package/dist/components/slider/Slider.js +72 -0
  351. package/dist/components/slider/base.component.d.ts +6 -0
  352. package/dist/components/slider/index.d.ts +2 -0
  353. package/dist/components/slider/setup.component.d.ts +23 -0
  354. package/dist/components/slider/setup.component.js +13 -0
  355. package/dist/components/stylable/base.component.d.ts +5 -0
  356. package/dist/components/stylable/index.d.ts +1 -0
  357. package/dist/components/stylable/setup.component.d.ts +9 -0
  358. package/dist/components/switch/Switch.d.ts +4 -0
  359. package/dist/components/switch/Switch.js +42 -0
  360. package/dist/components/switch/base.component.d.ts +7 -0
  361. package/dist/components/switch/index.d.ts +2 -0
  362. package/dist/components/switch/setup.component.d.ts +27 -0
  363. package/dist/components/switch/setup.component.js +13 -0
  364. package/dist/components/table/Table.d.ts +9 -0
  365. package/dist/components/table/Table.js +83 -0
  366. package/dist/components/table/base.component.d.ts +7 -0
  367. package/dist/components/table/column/Column.d.ts +7 -0
  368. package/dist/components/table/column/Column.js +66 -0
  369. package/dist/components/table/column/base.component.d.ts +6 -0
  370. package/dist/components/table/column/index.d.ts +2 -0
  371. package/dist/components/table/column/setup.component.d.ts +19 -0
  372. package/dist/components/table/column/setup.component.js +16 -0
  373. package/dist/components/table/index.d.ts +9 -0
  374. package/dist/components/table/index.js +11 -0
  375. package/dist/components/table/row/Cells.d.ts +14 -0
  376. package/dist/components/table/row/Cells.js +29 -0
  377. package/dist/components/table/row/Row.d.ts +6 -0
  378. package/dist/components/table/row/Row.js +43 -0
  379. package/dist/components/table/row/base.component.d.ts +7 -0
  380. package/dist/components/table/row/index.d.ts +2 -0
  381. package/dist/components/table/row/setup.component.d.ts +11 -0
  382. package/dist/components/table/row/setup.component.js +23 -0
  383. package/dist/components/table/setup.component.d.ts +18 -0
  384. package/dist/components/table/setup.component.js +27 -0
  385. package/dist/components/tabs/Tabs.d.ts +9 -0
  386. package/dist/components/tabs/Tabs.js +53 -0
  387. package/dist/components/tabs/base.component.d.ts +9 -0
  388. package/dist/components/tabs/content/Content.d.ts +4 -0
  389. package/dist/components/tabs/content/Content.js +18 -0
  390. package/dist/components/tabs/content/base.component.d.ts +7 -0
  391. package/dist/components/tabs/content/index.d.ts +2 -0
  392. package/dist/components/tabs/content/setup.component.d.ts +17 -0
  393. package/dist/components/tabs/content/setup.component.js +20 -0
  394. package/dist/components/tabs/index.d.ts +9 -0
  395. package/dist/components/tabs/index.js +11 -0
  396. package/dist/components/tabs/item/Item.d.ts +6 -0
  397. package/dist/components/tabs/item/Item.js +64 -0
  398. package/dist/components/tabs/item/base.component.d.ts +9 -0
  399. package/dist/components/tabs/item/index.d.ts +2 -0
  400. package/dist/components/tabs/item/setup.component.d.ts +17 -0
  401. package/dist/components/tabs/item/setup.component.js +23 -0
  402. package/dist/components/tabs/setup.component.d.ts +15 -0
  403. package/dist/components/tabs/setup.component.js +26 -0
  404. package/dist/components/tags/Tags.d.ts +7 -0
  405. package/dist/components/tags/Tags.js +36 -0
  406. package/dist/components/tags/base.component.d.ts +6 -0
  407. package/dist/components/tags/index.d.ts +6 -0
  408. package/dist/components/tags/index.js +7 -0
  409. package/dist/components/tags/item/Item.d.ts +6 -0
  410. package/dist/components/tags/item/Item.js +63 -0
  411. package/dist/components/tags/item/base.component.d.ts +8 -0
  412. package/dist/components/tags/item/index.d.ts +2 -0
  413. package/dist/components/tags/item/setup.component.d.ts +15 -0
  414. package/dist/components/tags/item/setup.component.js +23 -0
  415. package/dist/components/tags/setup.component.d.ts +15 -0
  416. package/dist/components/tags/setup.component.js +26 -0
  417. package/dist/components/textable/base.component.d.ts +5 -0
  418. package/dist/components/textable/index.d.ts +1 -0
  419. package/dist/components/textable/setup.component.d.ts +22 -0
  420. package/dist/components/textarea/Textarea.d.ts +4 -0
  421. package/dist/components/textarea/Textarea.js +35 -0
  422. package/dist/components/textarea/base.component.d.ts +7 -0
  423. package/dist/components/textarea/index.d.ts +2 -0
  424. package/dist/components/textarea/setup.component.d.ts +29 -0
  425. package/dist/components/textarea/setup.component.js +13 -0
  426. package/dist/components/toasts/Toasts.d.ts +7 -0
  427. package/dist/components/toasts/Toasts.js +43 -0
  428. package/dist/components/toasts/base.component.d.ts +7 -0
  429. package/dist/components/toasts/index.d.ts +2 -0
  430. package/dist/components/toasts/item/Item.d.ts +3 -0
  431. package/dist/components/toasts/item/Item.js +88 -0
  432. package/dist/components/toasts/item/base.component.d.ts +6 -0
  433. package/dist/components/toasts/item/index.d.ts +2 -0
  434. package/dist/components/toasts/item/setup.component.d.ts +13 -0
  435. package/dist/components/toasts/item/setup.component.js +20 -0
  436. package/dist/components/toasts/setup.component.d.ts +13 -0
  437. package/dist/components/toasts/setup.component.js +26 -0
  438. package/dist/components/tooltip/Tooltip.d.ts +4 -0
  439. package/dist/components/tooltip/Tooltip.js +34 -0
  440. package/dist/components/tooltip/base.component.d.ts +6 -0
  441. package/dist/components/tooltip/index.d.ts +2 -0
  442. package/dist/components/tooltip/setup.component.d.ts +26 -0
  443. package/dist/components/tooltip/setup.component.js +17 -0
  444. package/dist/components/value-control/base.component.d.ts +6 -0
  445. package/dist/components/value-control/index.d.ts +1 -0
  446. package/dist/components/value-control/setup.component.d.ts +22 -0
  447. package/dist/components/virtual/Virtual.d.ts +4 -0
  448. package/dist/components/virtual/Virtual.js +16 -0
  449. package/dist/components/virtual/base.component.d.ts +6 -0
  450. package/dist/components/virtual/index.d.ts +2 -0
  451. package/dist/components/virtual/setup.component.d.ts +6 -0
  452. package/dist/components/virtual/setup.component.js +12 -0
  453. package/dist/index.d.ts +10 -0
  454. package/dist/index.js +60 -0
  455. package/dist/types.d.ts +25 -0
  456. package/package.json +60 -4
@@ -0,0 +1,86 @@
1
+ //#region src/adapter/runtime/root-ref.class.ts
2
+ var unsubscribed = () => {};
3
+ function isConsumerRef(value) {
4
+ return typeof value === "function" || typeof value === "object" && value !== null && "current" in value;
5
+ }
6
+ /** `ref` потребителя из пропсов: в React 19 это обычный проп. */
7
+ function consumerRefOf(props) {
8
+ const ref = Reflect.get(props, "ref");
9
+ return isConsumerRef(ref) ? ref : void 0;
10
+ }
11
+ /** Отдать узел `ref` так, как отдал бы React, и вернуть, как его отпустить. */
12
+ function give(ref, node) {
13
+ if (typeof ref === "function") {
14
+ const cleanup = ref(node);
15
+ return typeof cleanup === "function" ? cleanup : () => ref(null);
16
+ }
17
+ ref.current = node;
18
+ return () => {
19
+ ref.current = null;
20
+ };
21
+ }
22
+ var TRootRef = class {
23
+ /** Контекст корня; уничтожен — `null`, и ref больше ничего не делает. */
24
+ _context;
25
+ _node = null;
26
+ /** `ref` потребителя последнего коммита. */
27
+ _consumer = void 0;
28
+ _given = null;
29
+ /** Заводятся с первым подписчиком — у большинства компонентов их нет. */
30
+ _listeners = null;
31
+ constructor(adapter) {
32
+ this._context = adapter;
33
+ adapter.events.listen((event) => {
34
+ if (event === "destroy") this._destroy();
35
+ });
36
+ }
37
+ /** Ref корня: привязка к `TElementPlugin`, затем тот же узел — `ref` потребителя. */
38
+ attach = (element) => {
39
+ if (!this._context) return;
40
+ const changed = element !== this._node;
41
+ this._context.bindElement(element);
42
+ this._node = element;
43
+ this.sync();
44
+ if (changed) this._listeners?.forEach((listener) => listener());
45
+ };
46
+ subscribe = (listener) => {
47
+ if (!this._context) return unsubscribed;
48
+ this._listeners ??= /* @__PURE__ */ new Set();
49
+ this._listeners.add(listener);
50
+ return () => {
51
+ this._listeners?.delete(listener);
52
+ };
53
+ };
54
+ getSnapshot = () => this._node;
55
+ /** Ref корня внутри обёртки: только привязка — `ref` потребителя получает обёртка. */
56
+ bind = (element) => {
57
+ this._context?.bindElement(element);
58
+ };
59
+ /** `ref` потребителя коммита — раньше, чем React привяжет ref узлов. */
60
+ consume(ref) {
61
+ if (this._context) this._consumer = ref;
62
+ }
63
+ /** Сменился узел или `ref` потребителя: прежнему — отпустить, новому — отдать. */
64
+ sync() {
65
+ const node = this._node;
66
+ const ref = this._consumer;
67
+ const given = this._given;
68
+ if (given && given.ref === ref && given.node === node) return;
69
+ this._given = null;
70
+ given?.release();
71
+ if (node && ref) this._given = {
72
+ ref,
73
+ node,
74
+ release: give(ref, node)
75
+ };
76
+ }
77
+ _destroy() {
78
+ this._context = null;
79
+ this._node = null;
80
+ this._consumer = void 0;
81
+ this._listeners = null;
82
+ this.sync();
83
+ }
84
+ };
85
+ //#endregion
86
+ export { TRootRef, consumerRefOf };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * TStableSnapshot — снимок связки, где значение, не сменившееся по
3
+ * содержимому, остаётся прежним объектом. AGENTS.md (React), «Связка и
4
+ * состояние».
5
+ *
6
+ * Он же отдаёт `useSyncExternalStore` подписку на состояние: обоим нужны
7
+ * функции без `this`, а у состояния обмена это методы — привязывает их тот,
8
+ * кому они нужны так.
9
+ */
10
+ import type { TStateSnapshot, TStateStore } from '@soxa-ui/setup';
11
+ export declare class TStableSnapshot {
12
+ private readonly _state;
13
+ /** Снимок связки, из которого собран `_snapshot`. */
14
+ private _source;
15
+ private _snapshot;
16
+ constructor(_state: Pick<TStateStore, 'getSnapshot' | 'subscribe'>);
17
+ readonly subscribe: (onChange: () => void) => (() => void);
18
+ readonly getSnapshot: () => TStateSnapshot;
19
+ private _settle;
20
+ }
@@ -0,0 +1,43 @@
1
+ //#region src/adapter/runtime/stable-snapshot.class.ts
2
+ function isPlain(value) {
3
+ if (typeof value !== "object" || value === null) return false;
4
+ const proto = Object.getPrototypeOf(value);
5
+ return proto === Object.prototype || proto === null;
6
+ }
7
+ /** Простые объекты и массивы — вглубь, остальное — по идентичности. */
8
+ function sameContent(a, b) {
9
+ if (Object.is(a, b)) return true;
10
+ if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((item, index) => sameContent(item, b[index]));
11
+ if (Array.isArray(a) || Array.isArray(b) || !isPlain(a) || !isPlain(b)) return false;
12
+ const keys = Object.keys(a);
13
+ return keys.length === Object.keys(b).length && keys.every((key) => key in b && sameContent(Reflect.get(a, key), Reflect.get(b, key)));
14
+ }
15
+ var TStableSnapshot = class {
16
+ _state;
17
+ /** Снимок связки, из которого собран `_snapshot`. */
18
+ _source = null;
19
+ _snapshot = null;
20
+ constructor(_state) {
21
+ this._state = _state;
22
+ }
23
+ subscribe = (onChange) => this._state.subscribe(onChange);
24
+ getSnapshot = () => {
25
+ const source = this._state.getSnapshot();
26
+ if (source === this._source && this._snapshot) return this._snapshot;
27
+ this._source = source;
28
+ this._snapshot = this._snapshot ? this._settle(this._snapshot, source) : source;
29
+ return this._snapshot;
30
+ };
31
+ _settle(previous, next) {
32
+ let changed = false;
33
+ const entries = Object.entries(next).map(([name, value]) => {
34
+ const kept = previous[name];
35
+ if (name in previous && sameContent(kept, value)) return [name, kept];
36
+ changed = true;
37
+ return [name, value];
38
+ });
39
+ return changed ? Object.freeze(Object.fromEntries(entries)) : previous;
40
+ }
41
+ };
42
+ //#endregion
43
+ export { TStableSnapshot };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * useAdapter — связка adapter-context с React через обмен `adapter.connect()`:
3
+ * состояние — внешнее хранилище `useSyncExternalStore`, входы — эффектом,
4
+ * события — колбэкам-пропсам, корень — `TRootRef`.
5
+ * AGENTS.md (React), «Связка и состояние».
6
+ */
7
+ import type { IAdapterContext, IComponentContract, TAdapterState } from '@soxa-ui/setup';
8
+ import type { IPluginBundle } from '@soxa-ui/plugins';
9
+ import { type TRootSource } from './root-ref.class';
10
+ export type TBinding<C extends IComponentContract = IComponentContract, TProps extends object = object> = {
11
+ ctrl: C['instance'];
12
+ plugins: IPluginBundle | null;
13
+ /** Ref корня: привязка к `TElementPlugin`, и тот же узел — `ref` потребителя. */
14
+ ref: (el: Element | null) => void;
15
+ /** Ref корня внутри обёртки (`toWrappedRootProps`): только привязка. */
16
+ bindRef: (el: Element | null) => void;
17
+ /** Корень значением — для `useRootElement`. */
18
+ root: TRootSource;
19
+ /** Пропсы, которые компонент не съел: уходят атрибутами в DOM. */
20
+ forwardProps: Partial<TProps>;
21
+ state: TAdapterState<C>;
22
+ };
23
+ /** Связка, к которой добавляют фасад: компонента или уже с фасадом. */
24
+ type TOwnerBinding<TProps extends object> = {
25
+ forwardProps: Partial<TProps>;
26
+ state: object;
27
+ };
28
+ /** Связка `TOwner` вместе с фасадом коллекции `F`: состояние обоих. */
29
+ export type TCollectionBinding<TOwner extends TOwnerBinding<TProps>, F extends IComponentContract, TProps extends object> = Omit<TOwner, 'state'> & {
30
+ state: TOwner['state'] & TAdapterState<F>;
31
+ };
32
+ export declare function useAdapter<C extends IComponentContract, TProps extends object>(adapter: IAdapterContext<C>, props: TProps): TBinding<C, TProps>;
33
+ /**
34
+ * Связка компонента вместе с фасадом его коллекции. `ctrl` и корень —
35
+ * компонента; фасад добавляет своё состояние и отбирает свои имена из того,
36
+ * что компонент не съел.
37
+ */
38
+ export declare function useCollectionAdapter<TOwner extends TOwnerBinding<TProps>, F extends IComponentContract, TProps extends object>(owner: TOwner, facade: IAdapterContext<F>, props: TProps): TCollectionBinding<TOwner, F, TProps>;
39
+ export {};
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { ReactProfile } from "../common/profile.js";
3
+ import { TEventCallbacks } from "./event-callbacks.class.js";
4
+ import { TRootRef, consumerRefOf } from "./root-ref.class.js";
5
+ import { TStableSnapshot } from "./stable-snapshot.class.js";
6
+ import { toInstanceState } from "@soxa-ui/setup";
7
+ import { useEffect, useInsertionEffect, useLayoutEffect, useMemo, useReducer, useSyncExternalStore } from "react";
8
+ //#region src/adapter/runtime/useAdapter.ts
9
+ /**
10
+ * useAdapter — связка adapter-context с React через обмен `adapter.connect()`:
11
+ * состояние — внешнее хранилище `useSyncExternalStore`, входы — эффектом,
12
+ * события — колбэкам-пропсам, корень — `TRootRef`.
13
+ * AGENTS.md (React), «Связка и состояние».
14
+ */
15
+ function bind(adapter) {
16
+ const binding = adapter.connect(ReactProfile);
17
+ return {
18
+ adapter,
19
+ binding,
20
+ snapshot: new TStableSnapshot(binding.state),
21
+ callbacks: new TEventCallbacks(adapter)
22
+ };
23
+ }
24
+ function rebind(_, adapter) {
25
+ return bind(adapter);
26
+ }
27
+ /** Общее у компонента и фасада: состояние, входы и события. */
28
+ function useExchange(adapter, props) {
29
+ const [store, dispatch] = useReducer(rebind, adapter, bind);
30
+ if (store.adapter !== adapter) dispatch(adapter);
31
+ const { binding, snapshot, callbacks } = store;
32
+ const state = useSyncExternalStore(snapshot.subscribe, snapshot.getSnapshot, snapshot.getSnapshot);
33
+ useEffect(() => {
34
+ binding.inputs.full(props);
35
+ }, [props, binding]);
36
+ callbacks.update(props);
37
+ useLayoutEffect(() => callbacks.listen(binding), [binding, callbacks]);
38
+ return {
39
+ binding,
40
+ state
41
+ };
42
+ }
43
+ function useAdapter(adapter, props) {
44
+ const { binding, state } = useExchange(adapter, props);
45
+ const root = useMemo(() => new TRootRef(adapter), [adapter]);
46
+ const consumer = consumerRefOf(props);
47
+ useInsertionEffect(() => root.consume(consumer), [root, consumer]);
48
+ useLayoutEffect(() => root.sync(), [root, consumer]);
49
+ const forwardProps = useMemo(() => binding.forward(props), [props, binding]);
50
+ return {
51
+ ctrl: adapter.instance,
52
+ plugins: adapter.bundle,
53
+ ref: root.attach,
54
+ bindRef: root.bind,
55
+ root,
56
+ forwardProps,
57
+ state: toInstanceState(state)
58
+ };
59
+ }
60
+ /**
61
+ * Связка компонента вместе с фасадом его коллекции. `ctrl` и корень —
62
+ * компонента; фасад добавляет своё состояние и отбирает свои имена из того,
63
+ * что компонент не съел.
64
+ */
65
+ function useCollectionAdapter(owner, facade, props) {
66
+ const { binding, state } = useExchange(facade, props);
67
+ const forwardProps = useMemo(() => binding.forward(owner.forwardProps), [owner.forwardProps, binding]);
68
+ return {
69
+ ...owner,
70
+ forwardProps,
71
+ state: {
72
+ ...owner.state,
73
+ ...toInstanceState(state)
74
+ }
75
+ };
76
+ }
77
+ //#endregion
78
+ export { useAdapter, useCollectionAdapter };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * useAdapterContext — keeps the component's contexts between renders and owns
3
+ * their whole life: assembly on the first render, acceptance at the commit,
4
+ * reassembly when the effect is set up again, destruction in its cleanup. The
5
+ * first moment of the teardown, `detach`, is the layout cleanup of the
6
+ * consumer's subscription (`TEventCallbacks.release`). AGENTS.md (React),
7
+ * «Срок жизни контекста».
8
+ */
9
+ import { createAdapterContext } from '@soxa-ui/setup';
10
+ import type { IAdapterContext, TElevatorFactory } from '@soxa-ui/setup';
11
+ import { type TElevatorLayer } from '../elevator/layer';
12
+ /** The context assembly the hook gives the factory: the signature of `createAdapterContext`. */
13
+ export type TCreateAdapterContext = typeof createAdapterContext;
14
+ /** What the factory assembles: the component's context, or several (its own and the facade's). */
15
+ export type TAdapterContexts = IAdapterContext | readonly IAdapterContext[];
16
+ export type TAssembly<T extends TAdapterContexts> = {
17
+ /** Exactly what the factory returned. */
18
+ readonly contexts: T;
19
+ /** The layer: the parent's plus what the assembly put down. Children get it via `Elevate`. */
20
+ readonly layer: TElevatorLayer;
21
+ };
22
+ export declare function useAdapterContext<T extends TAdapterContexts>(factory: (create: TCreateAdapterContext, elevator: TElevatorFactory) => T): TAssembly<T>;
@@ -0,0 +1,128 @@
1
+ "use client";
2
+ import { accepting } from "./accepting.js";
3
+ import { ElevatorContext } from "../elevator/layer.js";
4
+ import { LocaleContext } from "../locale/context.js";
5
+ import { TReactElevatorScope } from "../elevator/scope.class.js";
6
+ import { TDrafts } from "./drafts.class.js";
7
+ import { createAdapterContext } from "@soxa-ui/setup";
8
+ import { useContext, useEffect, useEffectEvent, useId, useMemo, useReducer, useRef } from "react";
9
+ //#region src/adapter/runtime/useAdapterContext.ts
10
+ /**
11
+ * useAdapterContext — keeps the component's contexts between renders and owns
12
+ * their whole life: assembly on the first render, acceptance at the commit,
13
+ * reassembly when the effect is set up again, destruction in its cleanup. The
14
+ * first moment of the teardown, `detach`, is the layout cleanup of the
15
+ * consumer's subscription (`TEventCallbacks.release`). AGENTS.md (React),
16
+ * «Срок жизни контекста».
17
+ */
18
+ var nextVersion = (version) => version + 1;
19
+ /** Assemblies React has not accepted yet, shared by all components. */
20
+ var drafts = new TDrafts();
21
+ function isList(contexts) {
22
+ return Array.isArray(contexts);
23
+ }
24
+ function listOf(contexts) {
25
+ return isList(contexts) ? contexts : [contexts];
26
+ }
27
+ /** In assembly order: the facade is assembled on the owner's bundle and accepted after it. */
28
+ function attachAll(contexts) {
29
+ for (const context of listOf(contexts)) context.attach();
30
+ }
31
+ /** All before any is destroyed: the component's consumer hears nothing of its facade leaving. */
32
+ function detachAll(contexts) {
33
+ for (const context of listOf(contexts)) context.detach();
34
+ }
35
+ /** Detached, then in reverse order: the facade goes before the owner. */
36
+ function destroyAll(contexts) {
37
+ detachAll(contexts);
38
+ for (const context of [...listOf(contexts)].reverse()) context.destroy();
39
+ }
40
+ /**
41
+ * The assembly the hook holds: the contexts, the elevator and what they took
42
+ * from outside. The effect's cleanup is the `destroy` arrow: AGENTS.md
43
+ * (React), «Функции дольше рендера — в классах».
44
+ */
45
+ var TBuilt = class {
46
+ contexts;
47
+ scope;
48
+ held;
49
+ _destroyed = false;
50
+ /**
51
+ * @param contexts exactly what the factory returned
52
+ * @param scope the elevator the contexts are assembled on
53
+ * @param held `ctrl` and the collection engine that came from outside
54
+ */
55
+ constructor(contexts, scope, held) {
56
+ this.contexts = contexts;
57
+ this.scope = scope;
58
+ this.held = held;
59
+ }
60
+ get destroyed() {
61
+ return this._destroyed;
62
+ }
63
+ /**
64
+ * The consumers of the contexts being accepted hear nothing of what the
65
+ * acceptance writes (an item entering its collection): that is the
66
+ * starting state, as in the other adapters, where the consumer starts
67
+ * listening after the acceptance. React accepts in a passive effect, after
68
+ * the consumer started listening in a layout effect (before the first
69
+ * paint, so `ready` of `TElementPlugin` is not lost), and accepts the
70
+ * children before the owner, whose consumer has to hear them enter.
71
+ */
72
+ accept() {
73
+ drafts.accept(this.held);
74
+ accepting(this.contexts, () => attachAll(this.contexts));
75
+ }
76
+ destroy = () => {
77
+ destroyAll(this.contexts);
78
+ this._destroyed = true;
79
+ };
80
+ };
81
+ function useAdapterContext(factory) {
82
+ const mountId = useId();
83
+ const locale = useContext(LocaleContext);
84
+ const parent = useContext(ElevatorContext);
85
+ const ref = useRef(null);
86
+ const settled = useRef(null);
87
+ const [, rerender] = useReducer(nextVersion, 0);
88
+ const assemble = (layer) => {
89
+ const scope = new TReactElevatorScope(layer);
90
+ const held = [];
91
+ let id = mountId;
92
+ const create = (descriptor, options, config) => {
93
+ const taken = drafts.take(options);
94
+ held.push(...taken.held);
95
+ id = taken.mountId ?? id;
96
+ return createAdapterContext(descriptor, {
97
+ mountId: id,
98
+ locale,
99
+ ...options
100
+ }, config);
101
+ };
102
+ const built = new TBuilt(factory(create, scope.elevator), scope, held);
103
+ drafts.add(held, built.destroy, id);
104
+ return built;
105
+ };
106
+ const rebuild = useEffectEvent(() => assemble(parent));
107
+ if (!ref.current) ref.current = assemble(parent);
108
+ const built = ref.current;
109
+ const source = built.scope.isStale(parent) ? parent : settled.current;
110
+ useEffect(() => {
111
+ settled.current = source;
112
+ if (ref.current?.destroyed) {
113
+ ref.current = rebuild();
114
+ rerender();
115
+ }
116
+ const current = ref.current;
117
+ if (!current) return;
118
+ current.accept();
119
+ return current.destroy;
120
+ }, [source]);
121
+ const layer = useMemo(() => built.scope.layerOver(parent), [built, parent]);
122
+ return {
123
+ contexts: built.contexts,
124
+ layer
125
+ };
126
+ }
127
+ //#endregion
128
+ export { useAdapterContext };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * useClickAction — the action of a part on a click (activate a tab, choose an
3
+ * option, close a panel): a ref for the part's node.
4
+ * AGENTS.md (React), «Клик части».
5
+ */
6
+ export declare function useClickAction(action: (event: Event) => void): (node: Element | null) => void;
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { TClickAction } from "./click-action.class.js";
3
+ import { useState } from "react";
4
+ //#region src/adapter/runtime/useClickAction.ts
5
+ /**
6
+ * useClickAction — the action of a part on a click (activate a tab, choose an
7
+ * option, close a panel): a ref for the part's node.
8
+ * AGENTS.md (React), «Клик части».
9
+ */
10
+ function useClickAction(action) {
11
+ const [click] = useState(() => new TClickAction());
12
+ click.update(action);
13
+ return click.ref;
14
+ }
15
+ //#endregion
16
+ export { useClickAction };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * useComponent — сборка компонента с одним контекстом: держит его
3
+ * `useAdapterContext` и связывает `useAdapter`. Фабрика собирает контекст в
4
+ * месте вызова (`create(XDescriptor(), …)`, расширения — `.use(...)`): там
5
+ * выводится тип связки. Слой лифта — `layer`, детям его отдаёт `Elevate`.
6
+ */
7
+ import type { IAdapterContext, IComponentContract, TElevatorFactory } from '@soxa-ui/setup';
8
+ import type { TElevatorLayer } from '../elevator/layer';
9
+ import { type TBinding } from './useAdapter';
10
+ import { type TCreateAdapterContext } from './useAdapterContext';
11
+ export type TComponentBinding<C extends IComponentContract, TProps extends object> = TBinding<C, TProps> & {
12
+ /** Слой лифта компонента: родительский и то, что опустили расширения. */
13
+ layer: TElevatorLayer;
14
+ };
15
+ export declare function useComponent<C extends IComponentContract, TProps extends object>(factory: (create: TCreateAdapterContext, elevator: TElevatorFactory) => IAdapterContext<C>, props: TProps): TComponentBinding<C, TProps>;
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { useAdapter } from "./useAdapter.js";
3
+ import { useAdapterContext } from "./useAdapterContext.js";
4
+ //#region src/adapter/runtime/useComponent.ts
5
+ function useComponent(factory, props) {
6
+ const { contexts, layer } = useAdapterContext(factory);
7
+ return {
8
+ ...useAdapter(contexts, props),
9
+ layer
10
+ };
11
+ }
12
+ //#endregion
13
+ export { useComponent };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * useRootElement — корень компонента значением рендера: `null` на сервере и до
3
+ * коммита, узел — после. AGENTS.md (React), «Корень и `ref` потребителя».
4
+ */
5
+ import type { TRootSource } from './root-ref.class';
6
+ export declare function useRootElement(source: TRootSource): Element | null;
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { useSyncExternalStore } from "react";
3
+ //#region src/adapter/runtime/useRootElement.ts
4
+ /**
5
+ * useRootElement — корень компонента значением рендера: `null` на сервере и до
6
+ * коммита, узел — после. AGENTS.md (React), «Корень и `ref` потребителя».
7
+ */
8
+ var onServer = () => null;
9
+ function useRootElement(source) {
10
+ return useSyncExternalStore(source.subscribe, source.getSnapshot, onServer);
11
+ }
12
+ //#endregion
13
+ export { useRootElement };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * withRenderBoundary — граница перерисовки (`memo`): родитель перерисовывает
3
+ * компонент, только когда сменился проп по идентичности. AGENTS.md (React),
4
+ * «Связка и состояние».
5
+ */
6
+ import type { FunctionComponent, NamedExoticComponent } from 'react';
7
+ export declare function withRenderBoundary<TProps extends object>(component: FunctionComponent<TProps>): NamedExoticComponent<TProps>;
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ import { memo } from "react";
3
+ //#region src/adapter/runtime/withRenderBoundary.ts
4
+ /**
5
+ * withRenderBoundary — граница перерисовки (`memo`): родитель перерисовывает
6
+ * компонент, только когда сменился проп по идентичности. AGENTS.md (React),
7
+ * «Связка и состояние».
8
+ */
9
+ function withRenderBoundary(component) {
10
+ return memo(component);
11
+ }
12
+ //#endregion
13
+ export { withRenderBoundary };
@@ -0,0 +1,3 @@
1
+ export { useToasts } from './useToasts';
2
+ export { isToastRender } from './render';
3
+ export type { TToastRender } from './types';
@@ -0,0 +1,6 @@
1
+ import type { TToastRender } from './types';
2
+ /**
3
+ * Своё содержимое тоста — компонент React, а не готовый элемент и не строка:
4
+ * проп `toast` тост отдаёт ему сам. AGENTS.md (React), «Локаль и тосты».
5
+ */
6
+ export declare function isToastRender(value: unknown): value is TToastRender;
@@ -0,0 +1,17 @@
1
+ //#region src/adapter/toasts/render.ts
2
+ /** Метки объектов-компонентов React (`memo`, `forwardRef`, `lazy`) — протокол React, как у `react-is`. */
3
+ var COMPONENT_OBJECTS = /* @__PURE__ */ new Set([
4
+ Symbol.for("react.memo"),
5
+ Symbol.for("react.forward_ref"),
6
+ Symbol.for("react.lazy")
7
+ ]);
8
+ /**
9
+ * Своё содержимое тоста — компонент React, а не готовый элемент и не строка:
10
+ * проп `toast` тост отдаёт ему сам. AGENTS.md (React), «Локаль и тосты».
11
+ */
12
+ function isToastRender(value) {
13
+ if (typeof value === "function") return true;
14
+ return typeof value === "object" && value !== null && "$$typeof" in value && COMPONENT_OBJECTS.has(value.$$typeof);
15
+ }
16
+ //#endregion
17
+ export { isToastRender };
@@ -0,0 +1,6 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { IToastsItem } from '@soxa-ui/core';
3
+ /** Своё содержимое тоста (`render`): компонент React с пропом `toast`. */
4
+ export type TToastRender = ComponentType<{
5
+ toast: IToastsItem;
6
+ }>;
@@ -0,0 +1,8 @@
1
+ import type { IToastsApi } from '@soxa-ui/core';
2
+ import type { TToastRender } from './types';
3
+ /**
4
+ * API тостов ближайшего `<Toasts>` выше по дереву: `const { show } = useToasts()`.
5
+ * Пересобранный менеджер — новый API, поэтому `show` — в зависимостях
6
+ * эффекта. AGENTS.md (React), «Локаль и тосты».
7
+ */
8
+ export declare function useToasts(): IToastsApi<TToastRender>;
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { ElevatorContext } from "../elevator/layer.js";
3
+ import { TReactElevatorScope } from "../elevator/scope.class.js";
4
+ import { TOASTS_ELEVATOR } from "@soxa-ui/setup";
5
+ import { useContext } from "react";
6
+ //#region src/adapter/toasts/useToasts.ts
7
+ /**
8
+ * API тостов ближайшего `<Toasts>` выше по дереву: `const { show } = useToasts()`.
9
+ * Пересобранный менеджер — новый API, поэтому `show` — в зависимостях
10
+ * эффекта. AGENTS.md (React), «Локаль и тосты».
11
+ */
12
+ function useToasts() {
13
+ const layer = useContext(ElevatorContext);
14
+ const api = new TReactElevatorScope(layer).elevator(TOASTS_ELEVATOR).up();
15
+ if (!api) throw new Error("useToasts(): выше по дереву нет <Toasts>. Оберните приложение менеджером: <Toasts><App /></Toasts>");
16
+ return api;
17
+ }
18
+ //#endregion
19
+ export { useToasts };
@@ -0,0 +1,14 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { AccordionProps } from './base.component';
3
+ /**
4
+ * Accordion — the set of expanding sections; section slots — AGENTS.md
5
+ * (React), «Слоты».
6
+ *
7
+ * The item slots go to each section as the owner's own props, not already
8
+ * called: calling one here would build a new React element on every redraw
9
+ * of the owner, defeating the section's render boundary regardless of it —
10
+ * `memo` sees a new `children`/prop reference and redraws anyway. The
11
+ * section calls them itself, with its own `ctrl` in their scope, the item
12
+ * identity it already carries as a stable prop (AGENTS.md, Pitfalls).
13
+ */
14
+ export declare function Accordion(props: AccordionProps): ReactElement | null;
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { toRootProps } from "../../adapter/common/root.js";
3
+ import { hasSlot, renderSlot } from "../../adapter/common/slots.js";
4
+ import { Elevate } from "../../adapter/elevator/Elevate.js";
5
+ import { AccordionItem } from "./item/Item.js";
6
+ import { useSetupAccordion } from "./setup.component.js";
7
+ import { jsx } from "react/jsx-runtime";
8
+ //#region src/components/accordion/Accordion.tsx
9
+ /**
10
+ * Accordion — the set of expanding sections; section slots — AGENTS.md
11
+ * (React), «Слоты».
12
+ *
13
+ * The item slots go to each section as the owner's own props, not already
14
+ * called: calling one here would build a new React element on every redraw
15
+ * of the owner, defeating the section's render boundary regardless of it —
16
+ * `memo` sees a new `children`/prop reference and redraws anyway. The
17
+ * section calls them itself, with its own `ctrl` in their scope, the item
18
+ * identity it already carries as a stable prop (AGENTS.md, Pitfalls).
19
+ */
20
+ function Accordion(props) {
21
+ const { ref, forwardProps, state, layer } = useSetupAccordion(props);
22
+ const { rendered, shown, attrs } = state;
23
+ if (!rendered) return null;
24
+ return /* @__PURE__ */ jsx("div", {
25
+ ...toRootProps(ref, state, [attrs], forwardProps),
26
+ children: /* @__PURE__ */ jsx(Elevate, {
27
+ layer,
28
+ children: hasSlot(props.children) ? renderSlot(props.children) : shown?.map((item) => /* @__PURE__ */ jsx(AccordionItem, {
29
+ ctrl: item,
30
+ "arrow-icon": props["item-arrow-icon"],
31
+ leading: props["item-leading"],
32
+ header: props.item,
33
+ trailing: props["item-trailing"],
34
+ children: props["item-content"]
35
+ }, item.uid))
36
+ })
37
+ });
38
+ }
39
+ //#endregion
40
+ export { Accordion };
@@ -0,0 +1,6 @@
1
+ import type { IAccordion } from '@soxa-ui/core';
2
+ import type { AccordionCollectionDescriptor, AccordionDescriptor } from '@soxa-ui/setup';
3
+ import type { EventProps, UseDomProps } from '../../types';
4
+ /** События Accordion — свои и фасада коллекции. */
5
+ export type AccordionEventProps = EventProps<typeof AccordionDescriptor> & EventProps<typeof AccordionCollectionDescriptor>;
6
+ export type AccordionProps = UseDomProps<typeof AccordionDescriptor, IAccordion, AccordionEventProps>;