@tcn/ui 0.16.0 → 0.18.0

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 (437) hide show
  1. package/dist/actions/index.d.ts +0 -1
  2. package/dist/actions/index.d.ts.map +1 -1
  3. package/dist/actions/index.js +6 -8
  4. package/dist/actions/index.js.map +1 -1
  5. package/dist/card.css +1 -0
  6. package/dist/column.css +1 -1
  7. package/dist/containers.css +1 -1
  8. package/dist/containers.module-BmICKsOK.js +5 -0
  9. package/dist/containers.module-BmICKsOK.js.map +1 -0
  10. package/dist/draggable.css +1 -1
  11. package/dist/draggable.module-DFYR5n3n.js +5 -0
  12. package/dist/draggable.module-DFYR5n3n.js.map +1 -0
  13. package/dist/field_set.css +1 -1
  14. package/dist/field_set.module-BpJTFCi4.js +5 -0
  15. package/dist/field_set.module-BpJTFCi4.js.map +1 -0
  16. package/dist/form/field/field.js +17 -13
  17. package/dist/form/field/field.js.map +1 -1
  18. package/dist/form/field_set/field_set.d.ts +6 -10
  19. package/dist/form/field_set/field_set.d.ts.map +1 -1
  20. package/dist/form/field_set/field_set.js +33 -61
  21. package/dist/form/field_set/field_set.js.map +1 -1
  22. package/dist/form/field_set/legend.d.ts +20 -0
  23. package/dist/form/field_set/legend.d.ts.map +1 -0
  24. package/dist/form/field_set/legend.js +28 -0
  25. package/dist/form/field_set/legend.js.map +1 -0
  26. package/dist/form/index.d.ts +2 -1
  27. package/dist/form/index.d.ts.map +1 -1
  28. package/dist/form/index.js +24 -22
  29. package/dist/form/index.js.map +1 -1
  30. package/dist/inputs/color_input/color_input.js +2 -3
  31. package/dist/inputs/color_input/color_input.js.map +1 -1
  32. package/dist/inputs/color_input/color_picker.js +11 -7
  33. package/dist/inputs/color_input/color_picker.js.map +1 -1
  34. package/dist/inputs/combo_box/combo_box.js +24 -20
  35. package/dist/inputs/combo_box/combo_box.js.map +1 -1
  36. package/dist/inputs/date_picker/date_picker.js +19 -15
  37. package/dist/inputs/date_picker/date_picker.js.map +1 -1
  38. package/dist/inputs/date_picker/date_picker_header.d.ts.map +1 -1
  39. package/dist/inputs/date_picker/date_picker_header.js +15 -14
  40. package/dist/inputs/date_picker/date_picker_header.js.map +1 -1
  41. package/dist/inputs/date_picker/date_picker_input.js +26 -23
  42. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  43. package/dist/inputs/date_picker/date_picker_time_selector.js +2 -3
  44. package/dist/inputs/date_picker/date_picker_time_selector.js.map +1 -1
  45. package/dist/inputs/date_picker/date_picker_year_input.js +2 -3
  46. package/dist/inputs/date_picker/date_picker_year_input.js.map +1 -1
  47. package/dist/inputs/date_picker/date_picker_year_selector.js +24 -21
  48. package/dist/inputs/date_picker/date_picker_year_selector.js.map +1 -1
  49. package/dist/inputs/mask_input/key_capture_input.js +35 -31
  50. package/dist/inputs/mask_input/key_capture_input.js.map +1 -1
  51. package/dist/inputs/mask_input/mask_input.js +18 -14
  52. package/dist/inputs/mask_input/mask_input.js.map +1 -1
  53. package/dist/inputs/multiselect/multiselect.js +28 -24
  54. package/dist/inputs/multiselect/multiselect.js.map +1 -1
  55. package/dist/inputs/multiselect/multiselect_inline_values.d.ts.map +1 -1
  56. package/dist/inputs/multiselect/multiselect_inline_values.js +15 -15
  57. package/dist/inputs/multiselect/multiselect_inline_values.js.map +1 -1
  58. package/dist/inputs/multiselect/multiselect_values.js +16 -17
  59. package/dist/inputs/multiselect/multiselect_values.js.map +1 -1
  60. package/dist/inputs/phone_number_input/phone_number_context.js +13 -9
  61. package/dist/inputs/phone_number_input/phone_number_context.js.map +1 -1
  62. package/dist/inputs/phone_number_input/phone_number_input_adapter.js +2 -3
  63. package/dist/inputs/phone_number_input/phone_number_input_adapter.js.map +1 -1
  64. package/dist/inputs/phone_number_input/sip_input.js +8 -9
  65. package/dist/inputs/phone_number_input/sip_input.js.map +1 -1
  66. package/dist/inputs/select/select.js +11 -8
  67. package/dist/inputs/select/select.js.map +1 -1
  68. package/dist/inputs/slider/slider.js +28 -24
  69. package/dist/inputs/slider/slider.js.map +1 -1
  70. package/dist/inputs/suggestions/suggestion_list.js +11 -8
  71. package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
  72. package/dist/inputs/switch/switch.js +29 -25
  73. package/dist/inputs/switch/switch.js.map +1 -1
  74. package/dist/inputs/unit_input/unit_input.js +21 -17
  75. package/dist/inputs/unit_input/unit_input.js.map +1 -1
  76. package/dist/layouts/containers/columns/columns.d.ts +6 -1
  77. package/dist/layouts/containers/columns/columns.d.ts.map +1 -1
  78. package/dist/layouts/containers/columns/columns.js +30 -7
  79. package/dist/layouts/containers/columns/columns.js.map +1 -1
  80. package/dist/layouts/containers/rail.d.ts +2 -5
  81. package/dist/layouts/containers/rail.d.ts.map +1 -1
  82. package/dist/layouts/containers/rail.js +17 -55
  83. package/dist/layouts/containers/rail.js.map +1 -1
  84. package/dist/layouts/containers/rows/index.d.ts +3 -0
  85. package/dist/layouts/containers/rows/index.d.ts.map +1 -0
  86. package/dist/layouts/containers/rows/index.js +7 -0
  87. package/dist/layouts/containers/rows/index.js.map +1 -0
  88. package/dist/layouts/containers/rows/row.d.ts +6 -0
  89. package/dist/layouts/containers/rows/row.d.ts.map +1 -0
  90. package/dist/layouts/containers/rows/row.js +20 -0
  91. package/dist/layouts/containers/rows/row.js.map +1 -0
  92. package/dist/layouts/containers/rows/rows.d.ts +11 -0
  93. package/dist/layouts/containers/rows/rows.d.ts.map +1 -0
  94. package/dist/layouts/containers/rows/rows.js +34 -0
  95. package/dist/layouts/containers/rows/rows.js.map +1 -0
  96. package/dist/layouts/containers/scaffold.d.ts +2 -5
  97. package/dist/layouts/containers/scaffold.d.ts.map +1 -1
  98. package/dist/layouts/containers/scaffold.js +17 -55
  99. package/dist/layouts/containers/scaffold.js.map +1 -1
  100. package/dist/layouts/index.d.ts +2 -0
  101. package/dist/layouts/index.d.ts.map +1 -1
  102. package/dist/layouts/index.js +26 -22
  103. package/dist/layouts/index.js.map +1 -1
  104. package/dist/mobile/inputs/date_picker/mobile_date_picker_header.js +11 -7
  105. package/dist/mobile/inputs/date_picker/mobile_date_picker_header.js.map +1 -1
  106. package/dist/mobile/inputs/date_picker/mobile_date_picker_input.js +11 -7
  107. package/dist/mobile/inputs/date_picker/mobile_date_picker_input.js.map +1 -1
  108. package/dist/mobile/inputs/date_picker/mobile_date_picker_year_selector.js +14 -10
  109. package/dist/mobile/inputs/date_picker/mobile_date_picker_year_selector.js.map +1 -1
  110. package/dist/multiselect_values.css +1 -1
  111. package/dist/navigation/tabs/state/link/tab_link.js +15 -11
  112. package/dist/navigation/tabs/state/link/tab_link.js.map +1 -1
  113. package/dist/overlay/frame/frame.d.ts.map +1 -1
  114. package/dist/overlay/frame/frame.js +117 -76
  115. package/dist/overlay/frame/frame.js.map +1 -1
  116. package/dist/overlay/menu/menu.js +21 -17
  117. package/dist/overlay/menu/menu.js.map +1 -1
  118. package/dist/overlay/popper/base/dismissal_decorator.js +3 -3
  119. package/dist/overlay/popper/base/dismissal_decorator.js.map +1 -1
  120. package/dist/overlay/popper/context_popper.js +14 -10
  121. package/dist/overlay/popper/context_popper.js.map +1 -1
  122. package/dist/overlay/popper/element_popper.js +15 -11
  123. package/dist/overlay/popper/element_popper.js.map +1 -1
  124. package/dist/overlay/popper/legacy/popper.js +32 -28
  125. package/dist/overlay/popper/legacy/popper.js.map +1 -1
  126. package/dist/overlay/popper/preview_popper.js +16 -12
  127. package/dist/overlay/popper/preview_popper.js.map +1 -1
  128. package/dist/overlay/tethered/tethered.js +17 -13
  129. package/dist/overlay/tethered/tethered.js.map +1 -1
  130. package/dist/resizable.css +1 -0
  131. package/dist/resizable.module-ur5FBfxo.js +5 -0
  132. package/dist/resizable.module-ur5FBfxo.js.map +1 -0
  133. package/dist/resize_handle.css +1 -0
  134. package/dist/row.css +1 -0
  135. package/dist/stacks/box/box.d.ts +14 -0
  136. package/dist/stacks/box/box.d.ts.map +1 -1
  137. package/dist/stacks/box/box.js +104 -102
  138. package/dist/stacks/box/box.js.map +1 -1
  139. package/dist/stacks/box/detect_resize_bounds.d.ts +1 -0
  140. package/dist/stacks/box/detect_resize_bounds.d.ts.map +1 -1
  141. package/dist/stacks/box/detect_resize_bounds.js +22 -20
  142. package/dist/stacks/box/detect_resize_bounds.js.map +1 -1
  143. package/dist/stacks/box/end_resize_handle.js +5 -5
  144. package/dist/stacks/box/end_resize_handle.js.map +1 -1
  145. package/dist/stacks/box/resize_handlers.d.ts.map +1 -1
  146. package/dist/stacks/box/resize_handlers.js +12 -12
  147. package/dist/stacks/box/resize_handlers.js.map +1 -1
  148. package/dist/stacks/box/start_resize_handle.js +7 -7
  149. package/dist/stacks/box/start_resize_handle.js.map +1 -1
  150. package/dist/stacks/box/types.d.ts +3 -2
  151. package/dist/stacks/box/types.d.ts.map +1 -1
  152. package/dist/stacks/h_collapsible_box.js +24 -20
  153. package/dist/stacks/h_collapsible_box.js.map +1 -1
  154. package/dist/stacks/v_collapsible_box.js +26 -22
  155. package/dist/stacks/v_collapsible_box.js.map +1 -1
  156. package/dist/surfaces/alert/alert.js +7 -8
  157. package/dist/surfaces/alert/alert.js.map +1 -1
  158. package/dist/surfaces/card/card.d.ts.map +1 -1
  159. package/dist/surfaces/card/card.js +14 -6
  160. package/dist/surfaces/card/card.js.map +1 -1
  161. package/dist/surfaces/pop_confirm/pop_confirm.js +4 -2
  162. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -1
  163. package/dist/test-setup.d.ts +2 -0
  164. package/dist/test-setup.d.ts.map +1 -0
  165. package/dist/test-setup.js +10 -0
  166. package/dist/test-setup.js.map +1 -0
  167. package/dist/themes/stories/button_showcase.d.ts.map +1 -1
  168. package/dist/themes/stories/controls_fieldset.d.ts.map +1 -1
  169. package/dist/themes/stories/menu_showcase.d.ts.map +1 -1
  170. package/dist/themes/theme.d.ts.map +1 -1
  171. package/dist/themes/theme.js +17 -22
  172. package/dist/themes/theme.js.map +1 -1
  173. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  174. package/dist/themes/themes/ergo/ergo_theme.d.ts.map +1 -1
  175. package/dist/themes/themes/ergo/ergo_theme.js +653 -431
  176. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  177. package/dist/themes/themes/ergo/parts/actions.css +1 -0
  178. package/dist/themes/themes/ergo/parts/base.css +1 -0
  179. package/dist/themes/themes/ergo/parts/form.css +1 -0
  180. package/dist/themes/themes/ergo/parts/inputs.css +1 -0
  181. package/dist/themes/themes/ergo/parts/navigation.css +1 -0
  182. package/dist/themes/themes/windows_98/windows_98.css +1 -1
  183. package/dist/themes/themes/windows_98/windows_98_theme.js +32 -43
  184. package/dist/themes/themes/windows_98/windows_98_theme.js.map +1 -1
  185. package/dist/utils/decorators/clone_with_decorator.d.ts +21 -0
  186. package/dist/utils/decorators/clone_with_decorator.d.ts.map +1 -0
  187. package/dist/utils/decorators/clone_with_decorator.js +16 -0
  188. package/dist/utils/decorators/clone_with_decorator.js.map +1 -0
  189. package/dist/utils/decorators/draggable/context.d.ts.map +1 -0
  190. package/dist/utils/decorators/draggable/context.js.map +1 -0
  191. package/dist/utils/{dnd/handle.d.ts → decorators/draggable/drag_handle.d.ts} +1 -1
  192. package/dist/utils/decorators/draggable/drag_handle.d.ts.map +1 -0
  193. package/dist/utils/{dnd/handle.js → decorators/draggable/drag_handle.js} +2 -2
  194. package/dist/utils/decorators/draggable/drag_handle.js.map +1 -0
  195. package/dist/utils/decorators/draggable/draggable.d.ts.map +1 -0
  196. package/dist/utils/{dnd → decorators}/draggable/draggable.js +3 -3
  197. package/dist/utils/decorators/draggable/draggable.js.map +1 -0
  198. package/dist/utils/decorators/draggable/index.d.ts +11 -0
  199. package/dist/utils/decorators/draggable/index.d.ts.map +1 -0
  200. package/dist/utils/decorators/draggable/index.js +14 -0
  201. package/dist/utils/decorators/draggable/index.js.map +1 -0
  202. package/dist/utils/{dnd → decorators/draggable}/types.d.ts +1 -1
  203. package/dist/utils/decorators/draggable/types.d.ts.map +1 -0
  204. package/dist/utils/{dnd/hooks → decorators/draggable}/use_drag_container.d.ts +2 -2
  205. package/dist/utils/decorators/draggable/use_drag_container.d.ts.map +1 -0
  206. package/dist/utils/decorators/draggable/use_drag_container.js.map +1 -0
  207. package/dist/utils/decorators/draggable/use_draggable.d.ts.map +1 -0
  208. package/dist/utils/decorators/draggable/use_draggable.js.map +1 -0
  209. package/dist/utils/decorators/index.d.ts +3 -0
  210. package/dist/utils/decorators/index.d.ts.map +1 -0
  211. package/dist/utils/decorators/index.js +27 -0
  212. package/dist/utils/decorators/index.js.map +1 -0
  213. package/dist/utils/decorators/resizable/context.d.ts +4 -0
  214. package/dist/utils/decorators/resizable/context.d.ts.map +1 -0
  215. package/dist/utils/decorators/resizable/context.js +10 -0
  216. package/dist/utils/decorators/resizable/context.js.map +1 -0
  217. package/dist/utils/decorators/resizable/handle_config.d.ts +32 -0
  218. package/dist/utils/decorators/resizable/handle_config.d.ts.map +1 -0
  219. package/dist/utils/decorators/resizable/handle_config.js +62 -0
  220. package/dist/utils/decorators/resizable/handle_config.js.map +1 -0
  221. package/dist/utils/decorators/resizable/index.d.ts +10 -0
  222. package/dist/utils/decorators/resizable/index.d.ts.map +1 -0
  223. package/dist/utils/decorators/resizable/index.js +16 -0
  224. package/dist/utils/decorators/resizable/index.js.map +1 -0
  225. package/dist/utils/decorators/resizable/resizable.d.ts +11 -0
  226. package/dist/utils/decorators/resizable/resizable.d.ts.map +1 -0
  227. package/dist/utils/decorators/resizable/resizable.js +52 -0
  228. package/dist/utils/decorators/resizable/resizable.js.map +1 -0
  229. package/dist/utils/decorators/resizable/resize_handle.d.ts +7 -0
  230. package/dist/utils/decorators/resizable/resize_handle.d.ts.map +1 -0
  231. package/dist/utils/decorators/resizable/resize_handle.js +100 -0
  232. package/dist/utils/decorators/resizable/resize_handle.js.map +1 -0
  233. package/dist/utils/decorators/resizable/resize_strategy.d.ts +47 -0
  234. package/dist/utils/decorators/resizable/resize_strategy.d.ts.map +1 -0
  235. package/dist/utils/decorators/resizable/resize_strategy.js +108 -0
  236. package/dist/utils/decorators/resizable/resize_strategy.js.map +1 -0
  237. package/dist/utils/decorators/resizable/types.d.ts +28 -0
  238. package/dist/utils/decorators/resizable/types.d.ts.map +1 -0
  239. package/dist/utils/decorators/resizable/types.js +2 -0
  240. package/dist/utils/decorators/resizable/types.js.map +1 -0
  241. package/dist/utils/hooks/labelled_by_context.d.ts +21 -0
  242. package/dist/utils/hooks/labelled_by_context.d.ts.map +1 -0
  243. package/dist/utils/hooks/labelled_by_context.js +12 -0
  244. package/dist/utils/hooks/labelled_by_context.js.map +1 -0
  245. package/dist/utils/index.d.ts +8 -7
  246. package/dist/utils/index.d.ts.map +1 -1
  247. package/dist/utils/index.js +45 -28
  248. package/dist/utils/index.js.map +1 -1
  249. package/dist/utils/listeners/click_away_listener.d.ts.map +1 -0
  250. package/dist/utils/{click_away_listener.js → listeners/click_away_listener.js} +1 -1
  251. package/dist/utils/listeners/click_away_listener.js.map +1 -0
  252. package/dist/utils/listeners/focus_redirect.d.ts.map +1 -0
  253. package/dist/utils/listeners/focus_redirect.js.map +1 -0
  254. package/dist/utils/listeners/index.d.ts +4 -0
  255. package/dist/utils/listeners/index.d.ts.map +1 -0
  256. package/dist/utils/listeners/index.js +10 -0
  257. package/dist/utils/listeners/index.js.map +1 -0
  258. package/dist/utils/listeners/mouse_leave_region.d.ts.map +1 -0
  259. package/dist/utils/listeners/mouse_leave_region.js.map +1 -0
  260. package/dist/utils/listeners/scroll_away_listener.d.ts.map +1 -0
  261. package/dist/utils/{scroll_away_listener.js → listeners/scroll_away_listener.js} +1 -1
  262. package/dist/utils/listeners/scroll_away_listener.js.map +1 -0
  263. package/dist/utils/system/index.d.ts +2 -0
  264. package/dist/utils/system/index.d.ts.map +1 -0
  265. package/dist/utils/system/index.js +2 -0
  266. package/dist/utils/system/index.js.map +1 -0
  267. package/dist/utils/system/variations.d.ts.map +1 -0
  268. package/dist/utils/system/variations.js +2 -0
  269. package/dist/utils/system/variations.js.map +1 -0
  270. package/dist/utils/types/sides.d.ts +3 -0
  271. package/dist/utils/types/sides.d.ts.map +1 -0
  272. package/package.json +3 -9
  273. package/src/actions/button/__stories__/button_group.stories.tsx +23 -24
  274. package/src/actions/index.ts +0 -1
  275. package/src/form/field/field.stories.tsx +2 -2
  276. package/src/form/field/h_field/h_field.stories.tsx +1 -1
  277. package/src/form/field/v_field/v_field.stories.tsx +1 -1
  278. package/src/form/field_set/field_set.module.css +0 -14
  279. package/src/form/field_set/field_set.stories.tsx +101 -1
  280. package/src/form/field_set/field_set.tsx +43 -57
  281. package/src/form/field_set/legend.tsx +44 -0
  282. package/src/form/index.ts +6 -1
  283. package/src/inputs/date_picker/date_picker_header.tsx +7 -5
  284. package/src/inputs/date_picker/date_picker_year_selector.tsx +5 -5
  285. package/src/inputs/multiselect/multiselect_inline_values.tsx +4 -3
  286. package/src/inputs/multiselect/multiselect_values.module.css +1 -0
  287. package/src/inputs/multiselect/multiselect_values.tsx +4 -4
  288. package/src/layouts/__stories__/columns.stories.tsx +31 -0
  289. package/src/layouts/__stories__/composed.stories.tsx +77 -8
  290. package/src/layouts/__stories__/rows.stories.tsx +77 -0
  291. package/src/layouts/__stories__/utils.tsx +2 -84
  292. package/src/layouts/containers/columns/column.module.css +3 -2
  293. package/src/layouts/containers/columns/columns.tsx +29 -3
  294. package/src/layouts/containers/containers.module.css +27 -29
  295. package/src/layouts/containers/rail.tsx +9 -51
  296. package/src/layouts/containers/rows/index.ts +2 -0
  297. package/src/layouts/containers/rows/row.module.css +15 -0
  298. package/src/layouts/containers/rows/row.tsx +22 -0
  299. package/src/layouts/containers/rows/rows.tsx +42 -0
  300. package/src/layouts/containers/scaffold.tsx +9 -49
  301. package/src/layouts/index.ts +2 -0
  302. package/src/overlay/frame/frame.stories.tsx +2 -1
  303. package/src/overlay/frame/frame.tsx +68 -20
  304. package/src/overlay/popper/base/dismissal_decorator.tsx +3 -3
  305. package/src/overlay/slide/slide.stories.tsx +1 -1
  306. package/src/stacks/box/box.tsx +29 -4
  307. package/src/stacks/box/detect_resize_bounds.ts +5 -1
  308. package/src/stacks/box/end_resize_handle.tsx +1 -1
  309. package/src/stacks/box/resize_handlers.ts +1 -1
  310. package/src/stacks/box/start_resize_handle.tsx +1 -1
  311. package/src/stacks/box/types.ts +3 -2
  312. package/src/stacks/collapsible_box.stories.tsx +5 -5
  313. package/src/stacks/demo.stories.tsx +7 -7
  314. package/src/surfaces/card/card.module.css +5 -0
  315. package/src/surfaces/card/card.stories.tsx +66 -8
  316. package/src/surfaces/card/card.tsx +6 -2
  317. package/src/surfaces/page/page.stories.tsx +84 -4
  318. package/src/surfaces/panel/__stories__/panel.stories.tsx +84 -9
  319. package/src/surfaces/window/window.stories.tsx +1 -1
  320. package/src/test-setup.ts +11 -0
  321. package/src/themes/stories/button_showcase.tsx +3 -1
  322. package/src/themes/stories/controls_fieldset.tsx +3 -1
  323. package/src/themes/stories/menu_showcase.tsx +3 -1
  324. package/src/themes/theme.tsx +6 -16
  325. package/src/themes/themes/ergo/INTERACTIVE.md +89 -0
  326. package/src/themes/themes/ergo/ROADMAP.md +116 -0
  327. package/src/themes/themes/ergo/ergo_theme.css +219 -734
  328. package/src/themes/themes/ergo/ergo_theme.ts +15 -1
  329. package/src/themes/themes/ergo/parts/actions.css +287 -0
  330. package/src/themes/themes/ergo/parts/base.css +62 -0
  331. package/src/themes/themes/ergo/parts/form.css +23 -0
  332. package/src/themes/themes/ergo/parts/inputs.css +252 -0
  333. package/src/themes/themes/ergo/parts/navigation.css +104 -0
  334. package/src/themes/themes/windows_98/windows_98.css +32 -43
  335. package/src/tokens/chip/chip.stories.tsx +5 -5
  336. package/src/utils/decorators/DECORATOR_PATTERN.md +86 -0
  337. package/src/utils/decorators/clone_with_decorator.ts +47 -0
  338. package/src/utils/{dnd → decorators/draggable}/__stories__/draggable.stories.tsx +7 -7
  339. package/src/utils/{dnd → decorators/draggable}/__stories__/use_draggable.stories.tsx +2 -2
  340. package/src/utils/{dnd/handle.tsx → decorators/draggable/drag_handle.tsx} +1 -1
  341. package/src/utils/{dnd → decorators}/draggable/draggable.tsx +2 -2
  342. package/src/utils/decorators/draggable/index.ts +15 -0
  343. package/src/utils/{dnd → decorators/draggable}/types.ts +1 -1
  344. package/src/utils/{dnd/hooks → decorators/draggable}/use_drag_container.ts +2 -2
  345. package/src/utils/decorators/index.ts +2 -0
  346. package/src/utils/decorators/resizable/__stories__/resizable.stories.tsx +214 -0
  347. package/src/utils/decorators/resizable/__stories__/resizable_stories.module.css +47 -0
  348. package/src/utils/decorators/resizable/__tests__/handle_config.test.ts +191 -0
  349. package/src/utils/decorators/resizable/__tests__/resize_strategy.test.ts +163 -0
  350. package/src/utils/decorators/resizable/context.ts +9 -0
  351. package/src/utils/decorators/resizable/handle_config.ts +118 -0
  352. package/src/utils/decorators/resizable/index.ts +37 -0
  353. package/src/utils/decorators/resizable/resizable.module.css +5 -0
  354. package/src/utils/decorators/resizable/resizable.tsx +97 -0
  355. package/src/utils/decorators/resizable/resize_handle.module.css +106 -0
  356. package/src/utils/decorators/resizable/resize_handle.tsx +165 -0
  357. package/src/utils/decorators/resizable/resize_strategy.ts +190 -0
  358. package/src/utils/decorators/resizable/types.ts +58 -0
  359. package/src/utils/hooks/labelled_by_context.ts +27 -0
  360. package/src/utils/index.ts +9 -7
  361. package/src/utils/{click_away_listener.tsx → listeners/click_away_listener.tsx} +1 -1
  362. package/src/utils/listeners/index.ts +3 -0
  363. package/src/utils/{scroll_away_listener.tsx → listeners/scroll_away_listener.tsx} +1 -1
  364. package/src/utils/system/index.ts +1 -0
  365. package/src/utils/types/sides.ts +2 -0
  366. package/dist/actions/button/slim_button/slim_button.d.ts +0 -9
  367. package/dist/actions/button/slim_button/slim_button.d.ts.map +0 -1
  368. package/dist/actions/button/slim_button/slim_button.js +0 -18
  369. package/dist/actions/button/slim_button/slim_button.js.map +0 -1
  370. package/dist/containers.module-DlGySre0.js +0 -5
  371. package/dist/containers.module-DlGySre0.js.map +0 -1
  372. package/dist/draggable.module-BgelQsuJ.js +0 -5
  373. package/dist/draggable.module-BgelQsuJ.js.map +0 -1
  374. package/dist/frame.css +0 -1
  375. package/dist/left_resize_handle.css +0 -1
  376. package/dist/right_resize_handle.css +0 -1
  377. package/dist/slim_button.css +0 -1
  378. package/dist/stacks/box/left_resize_handle.d.ts +0 -4
  379. package/dist/stacks/box/left_resize_handle.d.ts.map +0 -1
  380. package/dist/stacks/box/left_resize_handle.js +0 -36
  381. package/dist/stacks/box/left_resize_handle.js.map +0 -1
  382. package/dist/stacks/box/right_resize_handle.d.ts +0 -4
  383. package/dist/stacks/box/right_resize_handle.d.ts.map +0 -1
  384. package/dist/stacks/box/right_resize_handle.js +0 -36
  385. package/dist/stacks/box/right_resize_handle.js.map +0 -1
  386. package/dist/utils/click_away_listener.d.ts.map +0 -1
  387. package/dist/utils/click_away_listener.js.map +0 -1
  388. package/dist/utils/dnd/context.d.ts.map +0 -1
  389. package/dist/utils/dnd/context.js.map +0 -1
  390. package/dist/utils/dnd/draggable/draggable.d.ts.map +0 -1
  391. package/dist/utils/dnd/draggable/draggable.js.map +0 -1
  392. package/dist/utils/dnd/handle.d.ts.map +0 -1
  393. package/dist/utils/dnd/handle.js.map +0 -1
  394. package/dist/utils/dnd/hooks/use_drag_container.d.ts.map +0 -1
  395. package/dist/utils/dnd/hooks/use_drag_container.js.map +0 -1
  396. package/dist/utils/dnd/hooks/use_draggable.d.ts.map +0 -1
  397. package/dist/utils/dnd/hooks/use_draggable.js.map +0 -1
  398. package/dist/utils/dnd/types.d.ts.map +0 -1
  399. package/dist/utils/focus_redirect.d.ts.map +0 -1
  400. package/dist/utils/focus_redirect.js.map +0 -1
  401. package/dist/utils/mouse_leave_region.d.ts.map +0 -1
  402. package/dist/utils/mouse_leave_region.js.map +0 -1
  403. package/dist/utils/scroll_away_listener.d.ts.map +0 -1
  404. package/dist/utils/scroll_away_listener.js.map +0 -1
  405. package/dist/utils/types/variations.d.ts.map +0 -1
  406. package/src/actions/button/__stories__/slim_button.stories.tsx +0 -274
  407. package/src/actions/button/slim_button/slim_button.module.css +0 -9
  408. package/src/actions/button/slim_button/slim_button.tsx +0 -26
  409. package/src/overlay/frame/frame.module.css +0 -5
  410. package/src/stacks/box/left_resize_handle.module.css +0 -12
  411. package/src/stacks/box/left_resize_handle.tsx +0 -39
  412. package/src/stacks/box/right_resize_handle.module.css +0 -12
  413. package/src/stacks/box/right_resize_handle.tsx +0 -38
  414. /package/dist/utils/{dnd → decorators/draggable}/context.d.ts +0 -0
  415. /package/dist/utils/{dnd → decorators/draggable}/context.js +0 -0
  416. /package/dist/utils/{dnd → decorators}/draggable/draggable.d.ts +0 -0
  417. /package/dist/utils/{dnd → decorators/draggable}/types.js +0 -0
  418. /package/dist/utils/{dnd → decorators/draggable}/types.js.map +0 -0
  419. /package/dist/utils/{dnd/hooks → decorators/draggable}/use_drag_container.js +0 -0
  420. /package/dist/utils/{dnd/hooks → decorators/draggable}/use_draggable.d.ts +0 -0
  421. /package/dist/utils/{dnd/hooks → decorators/draggable}/use_draggable.js +0 -0
  422. /package/dist/utils/{click_away_listener.d.ts → listeners/click_away_listener.d.ts} +0 -0
  423. /package/dist/utils/{focus_redirect.d.ts → listeners/focus_redirect.d.ts} +0 -0
  424. /package/dist/utils/{focus_redirect.js → listeners/focus_redirect.js} +0 -0
  425. /package/dist/utils/{mouse_leave_region.d.ts → listeners/mouse_leave_region.d.ts} +0 -0
  426. /package/dist/utils/{mouse_leave_region.js → listeners/mouse_leave_region.js} +0 -0
  427. /package/dist/utils/{scroll_away_listener.d.ts → listeners/scroll_away_listener.d.ts} +0 -0
  428. /package/dist/utils/{types → system}/variations.d.ts +0 -0
  429. /package/src/utils/{dnd → decorators/draggable}/__stories__/draggable_stories.module.css +0 -0
  430. /package/src/utils/{dnd → decorators/draggable}/context.ts +0 -0
  431. /package/src/utils/{dnd → decorators}/draggable/draggable.module.css +0 -0
  432. /package/src/utils/{dnd/hooks → decorators/draggable}/use_draggable.ts +0 -0
  433. /package/src/utils/{click_away_listener.stories.tsx → listeners/click_away_listener.stories.tsx} +0 -0
  434. /package/src/utils/{focus_redirect.tsx → listeners/focus_redirect.tsx} +0 -0
  435. /package/src/utils/{mouse_leave_region.tsx → listeners/mouse_leave_region.tsx} +0 -0
  436. /package/src/utils/{scroll_away_listener.stories.tsx → listeners/scroll_away_listener.stories.tsx} +0 -0
  437. /package/src/utils/{types → system}/variations.ts +0 -0
@@ -0,0 +1,10 @@
1
+ export { Resizable } from './resizable.js';
2
+ export type { ResizableProps } from './resizable.js';
3
+ export { ResizeHandle } from './resize_handle.js';
4
+ export type { ResizeHandleProps } from './resize_handle.js';
5
+ export { useResizable } from './context.js';
6
+ export { getHandleConfig, resolveDirection, resolveHandleConfig, computeResizeState, } from './handle_config.js';
7
+ export { ResizeHandleStrategy } from './resize_strategy.js';
8
+ export type { StartResizeParams, HorizontalResizeResult, VerticalResizeResult, ResizeResult, EndResizeResult, } from './resize_strategy.js';
9
+ export type { ResizeHandlePosition, HandleConfig, AxisConfig, ResizableContextValue, ResolvedAxisConfig, ResolvedHandleConfig, OnWidthResize, OnWidthResizeEnd, OnHeightResize, OnHeightResizeEnd, WidthResizeOrigin, HeightResizeOrigin, } from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/decorators/resizable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Resizable as r } from "./resizable.js";
2
+ import { ResizeHandle as i } from "./resize_handle.js";
3
+ import { useResizable as l } from "./context.js";
4
+ import { computeResizeState as f, getHandleConfig as n, resolveDirection as m, resolveHandleConfig as p } from "./handle_config.js";
5
+ import { ResizeHandleStrategy as z } from "./resize_strategy.js";
6
+ export {
7
+ r as Resizable,
8
+ i as ResizeHandle,
9
+ z as ResizeHandleStrategy,
10
+ f as computeResizeState,
11
+ n as getHandleConfig,
12
+ m as resolveDirection,
13
+ p as resolveHandleConfig,
14
+ l as useResizable
15
+ };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ import { OnWidthResize, OnWidthResizeEnd, OnHeightResize, OnHeightResizeEnd } from './types.js';
3
+ export interface ResizableProps {
4
+ children: React.ReactNode;
5
+ onWidthResize?: OnWidthResize;
6
+ onWidthResizeEnd?: OnWidthResizeEnd;
7
+ onHeightResize?: OnHeightResize;
8
+ onHeightResizeEnd?: OnHeightResizeEnd;
9
+ }
10
+ export declare function Resizable({ children, onWidthResize, onWidthResizeEnd, onHeightResize, onHeightResizeEnd, }: ResizableProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=resizable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable.d.ts","sourceRoot":"","sources":["../../../../src/utils/decorators/resizable/resizable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAI/C,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAwBD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,GAClB,EAAE,cAAc,2CA+ChB"}
@@ -0,0 +1,52 @@
1
+ import { jsx as c } from "react/jsx-runtime";
2
+ import o, { useRef as b, useMemo as R } from "react";
3
+ import { clsx as g } from "clsx";
4
+ import { useForkRef as x } from "../../hooks/use_fork_ref.js";
5
+ import { ResizableContext as u } from "./context.js";
6
+ import { s as v } from "../../../resizable.module-ur5FBfxo.js";
7
+ function m(e) {
8
+ if (!o.isValidElement(e)) return !1;
9
+ const r = e.type;
10
+ return typeof r == "string" ? !0 : typeof r == "function" || typeof r == "object" ? r.displayName !== "ResizeHandle" : !1;
11
+ }
12
+ function C(e) {
13
+ return o.isValidElement(e) && !m(e);
14
+ }
15
+ function P({
16
+ children: e,
17
+ onWidthResize: r,
18
+ onWidthResizeEnd: s,
19
+ onHeightResize: n,
20
+ onHeightResizeEnd: a
21
+ }) {
22
+ const l = b(null), f = o.Children.toArray(e), t = f.find(m), p = f.filter(C), i = R(
23
+ () => ({
24
+ targetRef: l,
25
+ onWidthResize: r,
26
+ onWidthResizeEnd: s,
27
+ onHeightResize: n,
28
+ onHeightResizeEnd: a
29
+ }),
30
+ [r, s, n, a]
31
+ ), d = x(l, t?.props.ref);
32
+ if (!t)
33
+ return /* @__PURE__ */ c(u.Provider, { value: i, children: e });
34
+ const y = o.cloneElement(
35
+ t,
36
+ {
37
+ ref: d,
38
+ className: g(
39
+ t.props.className,
40
+ v["resizable-target"],
41
+ "tcn-resizable-target"
42
+ )
43
+ },
44
+ t.props.children,
45
+ ...p
46
+ );
47
+ return /* @__PURE__ */ c(u.Provider, { value: i, children: y });
48
+ }
49
+ export {
50
+ P as Resizable
51
+ };
52
+ //# sourceMappingURL=resizable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizable.js","sources":["../../../../src/utils/decorators/resizable/resizable.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { clsx } from 'clsx';\nimport { useForkRef } from '../../hooks/use_fork_ref.js';\nimport { ResizableContext } from './context.js';\nimport type {\n OnWidthResize,\n OnWidthResizeEnd,\n OnHeightResize,\n OnHeightResizeEnd,\n ResizableContextValue,\n} from './types.js';\nimport styles from './resizable.module.css';\n\nexport interface ResizableProps {\n children: React.ReactNode;\n onWidthResize?: OnWidthResize;\n onWidthResizeEnd?: OnWidthResizeEnd;\n onHeightResize?: OnHeightResize;\n onHeightResizeEnd?: OnHeightResizeEnd;\n}\n\ninterface ResizableTargetProps {\n className?: string;\n children?: React.ReactNode;\n ref?: React.Ref<HTMLElement>;\n}\n\ntype ResizableTarget = React.ReactElement<ResizableTargetProps>;\n\nfunction isResizableTarget(child: React.ReactNode): child is ResizableTarget {\n if (!React.isValidElement(child)) return false;\n const type = child.type;\n if (typeof type === 'string') return true;\n if (typeof type === 'function' || typeof type === 'object') {\n return (type as { displayName?: string }).displayName !== 'ResizeHandle';\n }\n return false;\n}\n\nfunction isResizeHandle(child: React.ReactNode): boolean {\n return React.isValidElement(child) && !isResizableTarget(child);\n}\n\nexport function Resizable({\n children,\n onWidthResize,\n onWidthResizeEnd,\n onHeightResize,\n onHeightResizeEnd,\n}: ResizableProps) {\n const targetRef = useRef<HTMLElement | null>(null);\n\n const childArray = React.Children.toArray(children);\n const targetChild = childArray.find(isResizableTarget);\n const handleChildren = childArray.filter(isResizeHandle);\n\n const contextValue = useMemo<ResizableContextValue>(\n () => ({\n targetRef,\n onWidthResize,\n onWidthResizeEnd,\n onHeightResize,\n onHeightResizeEnd,\n }),\n [onWidthResize, onWidthResizeEnd, onHeightResize, onHeightResizeEnd]\n );\n\n const forkedRef = useForkRef(targetRef, targetChild?.props.ref);\n\n if (!targetChild) {\n return (\n <ResizableContext.Provider value={contextValue}>\n {children}\n </ResizableContext.Provider>\n );\n }\n\n const clonedTarget = React.cloneElement(\n targetChild,\n {\n ref: forkedRef,\n className: clsx(\n targetChild.props.className,\n styles['resizable-target'],\n 'tcn-resizable-target'\n ),\n },\n targetChild.props.children,\n ...handleChildren\n );\n\n return (\n <ResizableContext.Provider value={contextValue}>\n {clonedTarget}\n </ResizableContext.Provider>\n );\n}\n"],"names":["isResizableTarget","child","React","type","isResizeHandle","Resizable","children","onWidthResize","onWidthResizeEnd","onHeightResize","onHeightResizeEnd","targetRef","useRef","childArray","targetChild","handleChildren","contextValue","useMemo","forkedRef","useForkRef","ResizableContext","clonedTarget","clsx","styles"],"mappings":";;;;;;AA6BA,SAASA,EAAkBC,GAAkD;AAC3E,MAAI,CAACC,EAAM,eAAeD,CAAK,EAAG,QAAO;AACzC,QAAME,IAAOF,EAAM;AACnB,SAAI,OAAOE,KAAS,WAAiB,KACjC,OAAOA,KAAS,cAAc,OAAOA,KAAS,WACxCA,EAAkC,gBAAgB,iBAErD;AACT;AAEA,SAASC,EAAeH,GAAiC;AACvD,SAAOC,EAAM,eAAeD,CAAK,KAAK,CAACD,EAAkBC,CAAK;AAChE;AAEO,SAASI,EAAU;AAAA,EACxB,UAAAC;AAAA,EACA,eAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AACF,GAAmB;AACjB,QAAMC,IAAYC,EAA2B,IAAI,GAE3CC,IAAaX,EAAM,SAAS,QAAQI,CAAQ,GAC5CQ,IAAcD,EAAW,KAAKb,CAAiB,GAC/Ce,IAAiBF,EAAW,OAAOT,CAAc,GAEjDY,IAAeC;AAAA,IACnB,OAAO;AAAA,MACL,WAAAN;AAAA,MACA,eAAAJ;AAAA,MACA,kBAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,mBAAAC;AAAA,IAAA;AAAA,IAEF,CAACH,GAAeC,GAAkBC,GAAgBC,CAAiB;AAAA,EAAA,GAG/DQ,IAAYC,EAAWR,GAAWG,GAAa,MAAM,GAAG;AAE9D,MAAI,CAACA;AACH,6BACGM,EAAiB,UAAjB,EAA0B,OAAOJ,GAC/B,UAAAV,GACH;AAIJ,QAAMe,IAAenB,EAAM;AAAA,IACzBY;AAAA,IACA;AAAA,MACE,KAAKI;AAAA,MACL,WAAWI;AAAA,QACTR,EAAY,MAAM;AAAA,QAClBS,EAAO,kBAAkB;AAAA,QACzB;AAAA,MAAA;AAAA,IACF;AAAA,IAEFT,EAAY,MAAM;AAAA,IAClB,GAAGC;AAAA,EAAA;AAGL,2BACGK,EAAiB,UAAjB,EAA0B,OAAOJ,GAC/B,UAAAK,GACH;AAEJ;"}
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ import { ResizeHandlePosition } from './types.js';
3
+ export interface ResizeHandleProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ position: ResizeHandlePosition;
5
+ }
6
+ export declare const ResizeHandle: React.ForwardRefExoticComponent<ResizeHandleProps & React.RefAttributes<HTMLDivElement>>;
7
+ //# sourceMappingURL=resize_handle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize_handle.d.ts","sourceRoot":"","sources":["../../../../src/utils/decorators/resizable/resize_handle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC7E,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,eAAO,MAAM,YAAY,0FAqJxB,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { jsx as b } from "react/jsx-runtime";
2
+ import { forwardRef as H, useMemo as E } from "react";
3
+ import { clsx as L } from "clsx";
4
+ import { useResizable as $ } from "./context.js";
5
+ import { getHandleConfig as A } from "./handle_config.js";
6
+ import { ResizeHandleStrategy as C } from "./resize_strategy.js";
7
+ import { detectResizeBounds as p } from "../../../stacks/box/detect_resize_bounds.js";
8
+ import '../../../resize_handle.css';const F = "_resize-handle_5b556d5", M = { "resize-handle": F }, W = H(
9
+ function({ position: o, className: w, ...v }, f) {
10
+ const {
11
+ targetRef: D,
12
+ onWidthResize: m,
13
+ onWidthResizeEnd: S,
14
+ onHeightResize: u,
15
+ onHeightResizeEnd: R
16
+ } = $(), h = A(o), x = h.horizontal && h.vertical ? "corner" : h.horizontal ? "horizontal" : "vertical", a = E(() => new C(o), [o]), y = (r) => {
17
+ const n = D.current;
18
+ if (n == null) return;
19
+ const l = n.getBoundingClientRect();
20
+ a.startResize({
21
+ rectangle: {
22
+ dimensions: {
23
+ width: l.width,
24
+ height: l.height
25
+ },
26
+ position: {
27
+ x: r.clientX,
28
+ y: r.clientY
29
+ }
30
+ },
31
+ languageDirection: window.getComputedStyle(n).direction
32
+ });
33
+ let z = 0;
34
+ const g = (i) => {
35
+ i.stopPropagation(), i.preventDefault(), cancelAnimationFrame(z), z = requestAnimationFrame(() => {
36
+ const e = a.resize({ x: i.clientX, y: i.clientY });
37
+ let s = l.width, d = l.height;
38
+ if (e.horizontal) {
39
+ const t = p({
40
+ element: n,
41
+ axis: "width",
42
+ nextSize: e.horizontal.newSize
43
+ });
44
+ t.clamped ? t.clampedSize !== null && t.clampedSize !== s && (s = t.clampedSize, n.style.width = `${t.clampedSize}px`, m?.({
45
+ width: t.clampedSize,
46
+ origin: e.horizontal.origin,
47
+ totalDelta: e.horizontal.totalDelta,
48
+ currentDelta: e.horizontal.currentDelta
49
+ })) : (s = e.horizontal.newSize, n.style.width = `${e.horizontal.newSize}px`, m?.({
50
+ width: e.horizontal.newSize,
51
+ origin: e.horizontal.origin,
52
+ totalDelta: e.horizontal.totalDelta,
53
+ currentDelta: e.horizontal.currentDelta
54
+ }));
55
+ }
56
+ if (e.vertical) {
57
+ const t = p({
58
+ element: n,
59
+ axis: "height",
60
+ nextSize: e.vertical.newSize
61
+ });
62
+ t.clamped ? t.clampedSize !== null && t.clampedSize !== d && (d = t.clampedSize, n.style.height = `${t.clampedSize}px`, u?.({
63
+ height: t.clampedSize,
64
+ origin: e.vertical.origin,
65
+ totalDelta: e.vertical.totalDelta,
66
+ currentDelta: e.vertical.currentDelta
67
+ })) : (d = e.vertical.newSize, n.style.height = `${e.vertical.newSize}px`, u?.({
68
+ height: e.vertical.newSize,
69
+ origin: e.vertical.origin,
70
+ totalDelta: e.vertical.totalDelta,
71
+ currentDelta: e.vertical.currentDelta
72
+ }));
73
+ }
74
+ a.commitResize({ width: s, height: d });
75
+ });
76
+ }, c = () => {
77
+ cancelAnimationFrame(z), document.body.removeEventListener("mousemove", g), document.body.removeEventListener("mouseup", c), window.removeEventListener("blur", c);
78
+ const i = a.endResize();
79
+ i.horizontal && S?.(i.horizontal.width, i.horizontal.origin), i.vertical && R?.(i.vertical.height, i.vertical.origin);
80
+ };
81
+ document.body.addEventListener("mousemove", g), document.body.addEventListener("mouseup", c), window.addEventListener("blur", c), r.stopPropagation(), r.preventDefault();
82
+ };
83
+ return /* @__PURE__ */ b(
84
+ "div",
85
+ {
86
+ ref: f,
87
+ className: L(M["resize-handle"], "tcn-resize-handle", w),
88
+ "data-position": o,
89
+ "data-axis": x,
90
+ onMouseDown: y,
91
+ ...v
92
+ }
93
+ );
94
+ }
95
+ );
96
+ W.displayName = "ResizeHandle";
97
+ export {
98
+ W as ResizeHandle
99
+ };
100
+ //# sourceMappingURL=resize_handle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize_handle.js","sources":["../../../../src/utils/decorators/resizable/resize_handle.tsx"],"sourcesContent":["import React, { forwardRef, useMemo } from 'react';\nimport { clsx } from 'clsx';\nimport { useResizable } from './context.js';\nimport { getHandleConfig } from './handle_config.js';\nimport { ResizeHandleStrategy } from './resize_strategy.js';\nimport { detectResizeBounds } from '../../../stacks/box/detect_resize_bounds.js';\nimport type { ResizeHandlePosition } from './types.js';\nimport styles from './resize_handle.module.css';\n\nexport interface ResizeHandleProps extends React.HTMLAttributes<HTMLDivElement> {\n position: ResizeHandlePosition;\n}\n\nexport const ResizeHandle = forwardRef<HTMLDivElement, ResizeHandleProps>(\n function ResizeHandle({ position, className, ...rest }, ref) {\n const {\n targetRef,\n onWidthResize,\n onWidthResizeEnd,\n onHeightResize,\n onHeightResizeEnd,\n } = useResizable();\n\n const config = getHandleConfig(position);\n const axis =\n config.horizontal && config.vertical\n ? 'corner'\n : config.horizontal\n ? 'horizontal'\n : 'vertical';\n\n const strategy = useMemo(() => new ResizeHandleStrategy(position), [position]);\n\n const handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n const target = targetRef.current;\n if (target == null) return;\n\n const rect = target.getBoundingClientRect();\n strategy.startResize({\n rectangle: {\n dimensions: {\n width: rect.width,\n height: rect.height,\n },\n position: {\n x: event.clientX,\n y: event.clientY,\n },\n },\n languageDirection: window.getComputedStyle(target).direction,\n });\n\n let frameId = 0;\n\n const drag = (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n cancelAnimationFrame(frameId);\n frameId = requestAnimationFrame(() => {\n const result = strategy.resize({ x: e.clientX, y: e.clientY });\n\n let appliedWidth = rect.width;\n let appliedHeight = rect.height;\n\n if (result.horizontal) {\n const bounds = detectResizeBounds({\n element: target,\n axis: 'width',\n nextSize: result.horizontal.newSize,\n });\n if (!bounds.clamped) {\n appliedWidth = result.horizontal.newSize;\n target.style.width = `${result.horizontal.newSize}px`;\n onWidthResize?.({\n width: result.horizontal.newSize,\n origin: result.horizontal.origin,\n totalDelta: result.horizontal.totalDelta,\n currentDelta: result.horizontal.currentDelta,\n });\n } else if (\n bounds.clampedSize !== null &&\n bounds.clampedSize !== appliedWidth\n ) {\n appliedWidth = bounds.clampedSize;\n target.style.width = `${bounds.clampedSize}px`;\n onWidthResize?.({\n width: bounds.clampedSize,\n origin: result.horizontal.origin,\n totalDelta: result.horizontal.totalDelta,\n currentDelta: result.horizontal.currentDelta,\n });\n }\n }\n\n if (result.vertical) {\n const bounds = detectResizeBounds({\n element: target,\n axis: 'height',\n nextSize: result.vertical.newSize,\n });\n if (!bounds.clamped) {\n appliedHeight = result.vertical.newSize;\n target.style.height = `${result.vertical.newSize}px`;\n onHeightResize?.({\n height: result.vertical.newSize,\n origin: result.vertical.origin,\n totalDelta: result.vertical.totalDelta,\n currentDelta: result.vertical.currentDelta,\n });\n } else if (\n bounds.clampedSize !== null &&\n bounds.clampedSize !== appliedHeight\n ) {\n appliedHeight = bounds.clampedSize;\n target.style.height = `${bounds.clampedSize}px`;\n onHeightResize?.({\n height: bounds.clampedSize,\n origin: result.vertical.origin,\n totalDelta: result.vertical.totalDelta,\n currentDelta: result.vertical.currentDelta,\n });\n }\n }\n\n strategy.commitResize({ width: appliedWidth, height: appliedHeight });\n });\n };\n\n const endDrag = () => {\n cancelAnimationFrame(frameId);\n document.body.removeEventListener('mousemove', drag);\n document.body.removeEventListener('mouseup', endDrag);\n window.removeEventListener('blur', endDrag);\n\n const result = strategy.endResize();\n if (result.horizontal) {\n onWidthResizeEnd?.(result.horizontal.width, result.horizontal.origin);\n }\n if (result.vertical) {\n onHeightResizeEnd?.(result.vertical.height, result.vertical.origin);\n }\n };\n\n document.body.addEventListener('mousemove', drag);\n document.body.addEventListener('mouseup', endDrag);\n window.addEventListener('blur', endDrag);\n event.stopPropagation();\n event.preventDefault();\n };\n\n return (\n <div\n ref={ref}\n className={clsx(styles['resize-handle'], 'tcn-resize-handle', className)}\n data-position={position}\n data-axis={axis}\n onMouseDown={handleMouseDown}\n {...rest}\n />\n );\n }\n);\n\nResizeHandle.displayName = 'ResizeHandle';\n"],"names":["ResizeHandle","forwardRef","position","className","rest","ref","targetRef","onWidthResize","onWidthResizeEnd","onHeightResize","onHeightResizeEnd","useResizable","config","getHandleConfig","axis","strategy","useMemo","ResizeHandleStrategy","handleMouseDown","event","target","rect","frameId","drag","e","result","appliedWidth","appliedHeight","bounds","detectResizeBounds","endDrag","jsx","clsx","styles"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { ResizeHandlePosition, WidthResizeOrigin, HeightResizeOrigin } from './types.js';
2
+ import { Dimensions, Position, Rectangle } from '../../types/dimensions.js';
3
+ export interface StartResizeParams {
4
+ rectangle: Rectangle;
5
+ languageDirection: string;
6
+ }
7
+ export interface AxisResizeResult {
8
+ newSize: number;
9
+ totalDelta: number;
10
+ currentDelta: number;
11
+ }
12
+ export interface HorizontalResizeResult extends AxisResizeResult {
13
+ origin: WidthResizeOrigin;
14
+ }
15
+ export interface VerticalResizeResult extends AxisResizeResult {
16
+ origin: HeightResizeOrigin;
17
+ }
18
+ export interface ResizeResult {
19
+ horizontal?: HorizontalResizeResult;
20
+ vertical?: VerticalResizeResult;
21
+ }
22
+ export interface EndResizeResult {
23
+ horizontal?: {
24
+ width: number;
25
+ origin: WidthResizeOrigin;
26
+ };
27
+ vertical?: {
28
+ height: number;
29
+ origin: HeightResizeOrigin;
30
+ };
31
+ }
32
+ /**
33
+ * Flow:
34
+ * 1. adapter calls startResize() with rect/coords from DOM
35
+ * 2. adapter calls resize() on each mousemove with coord
36
+ * 3. adapter checks bounds (DOM), applies style, then calls commitResize()
37
+ * 4. adapter calls endResize() on mouseup to get final state
38
+ */
39
+ export declare class ResizeHandleStrategy {
40
+ private handlers;
41
+ constructor(position: ResizeHandlePosition);
42
+ startResize(params: StartResizeParams): void;
43
+ resize(position: Position): ResizeResult;
44
+ commitResize(dimensions: Dimensions): void;
45
+ endResize(): EndResizeResult;
46
+ }
47
+ //# sourceMappingURL=resize_strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize_strategy.d.ts","sourceRoot":"","sources":["../../../../src/utils/decorators/resizable/resize_strategy.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEjF,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC1D,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAE,CAAC;CAC3D;AA6GD;;;;;;GAMG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAsB;gBAE1B,QAAQ,EAAE,oBAAoB;IAW1C,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAM5C,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY;IAIxC,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAM1C,SAAS,IAAI,eAAe;CAG7B"}
@@ -0,0 +1,108 @@
1
+ import { getHandleConfig as s, resolveDirection as n, computeResizeState as o } from "./handle_config.js";
2
+ class r {
3
+ constructor(i) {
4
+ this.axisConfig = i;
5
+ }
6
+ direction = 1;
7
+ startSize = 0;
8
+ startCoord = 0;
9
+ currentSize = 0;
10
+ get origin() {
11
+ return this.axisConfig.origin;
12
+ }
13
+ get size() {
14
+ return this.currentSize;
15
+ }
16
+ start(i, t) {
17
+ this.direction = n(
18
+ t,
19
+ this.axisConfig.invert,
20
+ this.axisConfig.disableDirection
21
+ ), this.startSize = this.extractSize(i.dimensions), this.startCoord = this.extractCoord(i.position), this.currentSize = this.startSize;
22
+ }
23
+ resize(i) {
24
+ return o(
25
+ this.startSize,
26
+ this.startCoord,
27
+ this.extractCoord(i),
28
+ this.direction,
29
+ this.currentSize
30
+ );
31
+ }
32
+ commit(i) {
33
+ this.currentSize = this.extractSize(i);
34
+ }
35
+ }
36
+ class a extends r {
37
+ extractSize(i) {
38
+ return i.width;
39
+ }
40
+ extractCoord(i) {
41
+ return i.x;
42
+ }
43
+ applyResize(i) {
44
+ return {
45
+ horizontal: {
46
+ ...this.resize(i),
47
+ origin: this.origin
48
+ }
49
+ };
50
+ }
51
+ applyEnd() {
52
+ return {
53
+ horizontal: {
54
+ width: this.size,
55
+ origin: this.origin
56
+ }
57
+ };
58
+ }
59
+ }
60
+ class h extends r {
61
+ extractSize(i) {
62
+ return i.height;
63
+ }
64
+ extractCoord(i) {
65
+ return i.y;
66
+ }
67
+ applyResize(i) {
68
+ return {
69
+ vertical: {
70
+ ...this.resize(i),
71
+ origin: this.origin
72
+ }
73
+ };
74
+ }
75
+ applyEnd() {
76
+ return {
77
+ vertical: {
78
+ height: this.size,
79
+ origin: this.origin
80
+ }
81
+ };
82
+ }
83
+ }
84
+ class l {
85
+ handlers;
86
+ constructor(i) {
87
+ const t = s(i);
88
+ this.handlers = [], t.horizontal && this.handlers.push(new a(t.horizontal)), t.vertical && this.handlers.push(new h(t.vertical));
89
+ }
90
+ startResize(i) {
91
+ for (const t of this.handlers)
92
+ t.start(i.rectangle, i.languageDirection);
93
+ }
94
+ resize(i) {
95
+ return Object.assign({}, ...this.handlers.map((t) => t.applyResize(i)));
96
+ }
97
+ commitResize(i) {
98
+ for (const t of this.handlers)
99
+ t.commit(i);
100
+ }
101
+ endResize() {
102
+ return Object.assign({}, ...this.handlers.map((i) => i.applyEnd()));
103
+ }
104
+ }
105
+ export {
106
+ l as ResizeHandleStrategy
107
+ };
108
+ //# sourceMappingURL=resize_strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize_strategy.js","sources":["../../../../src/utils/decorators/resizable/resize_strategy.ts"],"sourcesContent":["import {\n getHandleConfig,\n resolveDirection,\n computeResizeState,\n} from './handle_config.js';\nimport type {\n AxisConfig,\n ResizeHandlePosition,\n WidthResizeOrigin,\n HeightResizeOrigin,\n} from './types.js';\nimport type { Dimensions, Position, Rectangle } from '../../types/dimensions.js';\n\nexport interface StartResizeParams {\n rectangle: Rectangle;\n languageDirection: string;\n}\n\nexport interface AxisResizeResult {\n newSize: number;\n totalDelta: number;\n currentDelta: number;\n}\n\nexport interface HorizontalResizeResult extends AxisResizeResult {\n origin: WidthResizeOrigin;\n}\n\nexport interface VerticalResizeResult extends AxisResizeResult {\n origin: HeightResizeOrigin;\n}\n\nexport interface ResizeResult {\n horizontal?: HorizontalResizeResult;\n vertical?: VerticalResizeResult;\n}\n\nexport interface EndResizeResult {\n horizontal?: { width: number; origin: WidthResizeOrigin };\n vertical?: { height: number; origin: HeightResizeOrigin };\n}\n\n/**\n * Single-axis resize handler. Pure — no DOM, no React.\n * Subclasses extract the correct axis from uniform args.\n */\nabstract class AxisResizeHandler {\n protected direction = 1;\n protected startSize = 0;\n protected startCoord = 0;\n protected currentSize = 0;\n\n constructor(protected axisConfig: AxisConfig) {}\n\n get origin() {\n return this.axisConfig.origin;\n }\n\n get size() {\n return this.currentSize;\n }\n\n protected abstract extractSize(dimensions: Dimensions): number;\n protected abstract extractCoord(coord: Position): number;\n abstract applyResize(coord: Position): Partial<ResizeResult>;\n abstract applyEnd(): Partial<EndResizeResult>;\n\n start(rect: Rectangle, languageDirection: string) {\n this.direction = resolveDirection(\n languageDirection,\n this.axisConfig.invert,\n this.axisConfig.disableDirection\n );\n this.startSize = this.extractSize(rect.dimensions);\n this.startCoord = this.extractCoord(rect.position);\n this.currentSize = this.startSize;\n }\n\n resize(coord: Position): AxisResizeResult {\n return computeResizeState(\n this.startSize,\n this.startCoord,\n this.extractCoord(coord),\n this.direction,\n this.currentSize\n );\n }\n\n commit(dimensions: Dimensions) {\n this.currentSize = this.extractSize(dimensions);\n }\n}\n\nclass HorizontalAxisResizeHandler extends AxisResizeHandler {\n protected extractSize(dimensions: Dimensions) {\n return dimensions.width;\n }\n\n protected extractCoord(coord: Position) {\n return coord.x;\n }\n\n applyResize(coord: Position): Partial<ResizeResult> {\n return {\n horizontal: {\n ...this.resize(coord),\n origin: this.origin as WidthResizeOrigin,\n },\n };\n }\n\n applyEnd(): Partial<EndResizeResult> {\n return {\n horizontal: {\n width: this.size,\n origin: this.origin as WidthResizeOrigin,\n },\n };\n }\n}\n\nclass VerticalAxisResizeHandler extends AxisResizeHandler {\n protected extractSize(dimensions: Dimensions) {\n return dimensions.height;\n }\n\n protected extractCoord(coord: Position) {\n return coord.y;\n }\n\n applyResize(coord: Position): Partial<ResizeResult> {\n return {\n vertical: {\n ...this.resize(coord),\n origin: this.origin as HeightResizeOrigin,\n },\n };\n }\n\n applyEnd(): Partial<EndResizeResult> {\n return {\n vertical: {\n height: this.size,\n origin: this.origin as HeightResizeOrigin,\n },\n };\n }\n}\n\n/**\n * Flow:\n * 1. adapter calls startResize() with rect/coords from DOM\n * 2. adapter calls resize() on each mousemove with coord\n * 3. adapter checks bounds (DOM), applies style, then calls commitResize()\n * 4. adapter calls endResize() on mouseup to get final state\n */\nexport class ResizeHandleStrategy {\n private handlers: AxisResizeHandler[];\n\n constructor(position: ResizeHandlePosition) {\n const config = getHandleConfig(position);\n this.handlers = [];\n if (config.horizontal) {\n this.handlers.push(new HorizontalAxisResizeHandler(config.horizontal));\n }\n if (config.vertical) {\n this.handlers.push(new VerticalAxisResizeHandler(config.vertical));\n }\n }\n\n startResize(params: StartResizeParams): void {\n for (const handler of this.handlers) {\n handler.start(params.rectangle, params.languageDirection);\n }\n }\n\n resize(position: Position): ResizeResult {\n return Object.assign({}, ...this.handlers.map(h => h.applyResize(position)));\n }\n\n commitResize(dimensions: Dimensions): void {\n for (const handler of this.handlers) {\n handler.commit(dimensions);\n }\n }\n\n endResize(): EndResizeResult {\n return Object.assign({}, ...this.handlers.map(h => h.applyEnd()));\n }\n}\n"],"names":["AxisResizeHandler","axisConfig","rect","languageDirection","resolveDirection","coord","computeResizeState","dimensions","HorizontalAxisResizeHandler","VerticalAxisResizeHandler","ResizeHandleStrategy","position","config","getHandleConfig","params","handler","h"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { OnWidthResize, OnWidthResizeEnd, OnHeightResize, OnHeightResizeEnd, WidthResizeOrigin, HeightResizeOrigin } from '../../../stacks/box/types.js';
2
+ export type { OnWidthResize, OnWidthResizeEnd, OnHeightResize, OnHeightResizeEnd, WidthResizeOrigin, HeightResizeOrigin, };
3
+ export type ResizeHandlePosition = 'top' | 'bottom' | 'start' | 'end' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';
4
+ export interface AxisConfig {
5
+ origin: WidthResizeOrigin | HeightResizeOrigin;
6
+ invert: boolean;
7
+ disableDirection: boolean;
8
+ }
9
+ export interface HandleConfig {
10
+ horizontal?: AxisConfig;
11
+ vertical?: AxisConfig;
12
+ }
13
+ export interface ResolvedAxisConfig {
14
+ origin: WidthResizeOrigin | HeightResizeOrigin;
15
+ direction: number;
16
+ }
17
+ export interface ResolvedHandleConfig {
18
+ horizontal?: ResolvedAxisConfig;
19
+ vertical?: ResolvedAxisConfig;
20
+ }
21
+ export interface ResizableContextValue {
22
+ targetRef: React.RefObject<HTMLElement | null>;
23
+ onWidthResize?: OnWidthResize;
24
+ onWidthResizeEnd?: OnWidthResizeEnd;
25
+ onHeightResize?: OnHeightResize;
26
+ onHeightResizeEnd?: OnHeightResizeEnd;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/decorators/resizable/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAE5B,KAAK,GACL,QAAQ,GACR,OAAO,GACP,KAAK,GAEL,WAAW,GACX,SAAS,GACT,cAAc,GACd,YAAY,CAAC;AAEjB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ export interface LabelledByContextValue {
2
+ labelId: string;
3
+ }
4
+ /**
5
+ * Context for wiring aria-labelledby between a parent container and a child
6
+ * label element.
7
+ */
8
+ export declare const LabelledByContext: import('react').Context<LabelledByContextValue | null>;
9
+ export declare const useLabelledBy: () => LabelledByContextValue | null;
10
+ /**
11
+ * Derives a stable label ID for aria-labelledby wiring.
12
+ *
13
+ * - If `ariaLabelledBy` is provided, it takes precedence (full override).
14
+ * - If `id` is provided, the label ID is deterministic (`${id}-legend`).
15
+ * - Otherwise, falls back to React's `useId()`.
16
+ */
17
+ export declare function useLabelledById(id?: string, ariaLabelledBy?: string): {
18
+ baseId: string;
19
+ labelId: string;
20
+ };
21
+ //# sourceMappingURL=labelled_by_context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labelled_by_context.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/labelled_by_context.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,wDAAqD,CAAC;AAEpF,eAAO,MAAM,aAAa,qCAAsC,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;;;EAKnE"}
@@ -0,0 +1,12 @@
1
+ import { createContext as s, useId as d, useContext as c } from "react";
2
+ const a = s(null), u = () => c(a);
3
+ function b(t, n) {
4
+ const o = d(), e = t ?? o, l = n || `${e}-legend`;
5
+ return { baseId: e, labelId: l };
6
+ }
7
+ export {
8
+ a as LabelledByContext,
9
+ u as useLabelledBy,
10
+ b as useLabelledById
11
+ };
12
+ //# sourceMappingURL=labelled_by_context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labelled_by_context.js","sources":["../../../src/utils/hooks/labelled_by_context.ts"],"sourcesContent":["import { createContext, useContext, useId } from 'react';\n\nexport interface LabelledByContextValue {\n labelId: string;\n}\n\n/**\n * Context for wiring aria-labelledby between a parent container and a child\n * label element.\n */\nexport const LabelledByContext = createContext<LabelledByContextValue | null>(null);\n\nexport const useLabelledBy = () => useContext(LabelledByContext);\n\n/**\n * Derives a stable label ID for aria-labelledby wiring.\n *\n * - If `ariaLabelledBy` is provided, it takes precedence (full override).\n * - If `id` is provided, the label ID is deterministic (`${id}-legend`).\n * - Otherwise, falls back to React's `useId()`.\n */\nexport function useLabelledById(id?: string, ariaLabelledBy?: string) {\n const reactId = useId();\n const baseId = id ?? reactId;\n const labelId = ariaLabelledBy || `${baseId}-legend`;\n return { baseId, labelId };\n}\n"],"names":["LabelledByContext","createContext","useLabelledBy","useContext","useLabelledById","id","ariaLabelledBy","reactId","useId","baseId","labelId"],"mappings":";AAUO,MAAMA,IAAoBC,EAA6C,IAAI,GAErEC,IAAgB,MAAMC,EAAWH,CAAiB;AASxD,SAASI,EAAgBC,GAAaC,GAAyB;AACpE,QAAMC,IAAUC,EAAA,GACVC,IAASJ,KAAME,GACfG,IAAUJ,KAAkB,GAAGG,CAAM;AAC3C,SAAO,EAAE,QAAAA,GAAQ,SAAAC,EAAA;AACnB;"}
@@ -1,11 +1,10 @@
1
- export * from './click_away_listener.js';
2
- export * from './focus_redirect.js';
3
- export * from './scroll_away_listener.js';
4
- export * from './dnd/hooks/use_draggable.js';
1
+ export * from './listeners/index.js';
2
+ export * from './decorators/draggable/use_draggable.js';
5
3
  export * from './hooks/make_context_hook.js';
6
4
  export * from './hooks/use_fork_ref.js';
7
5
  export * from './hooks/use_resize_observer.js';
8
6
  export * from './hooks/use_media_query.js';
7
+ export * from './hooks/labelled_by_context.js';
9
8
  export * from './default_value.js';
10
9
  export * from './calendar/calendar_date.js';
11
10
  export * from './calendar/calendar_dates_generator.js';
@@ -13,7 +12,9 @@ export * from './calendar/get_days_of_week.js';
13
12
  export * from './calendar/get_months_of_year.js';
14
13
  export * from './calendar/month.js';
15
14
  export * from './types/dimensions.js';
16
- export * from './types/variations.js';
17
- export * from './dnd/draggable/draggable.js';
18
- export * from './dnd/handle.js';
15
+ export * from './types/sides.js';
16
+ export * from './system/index.js';
17
+ export * from './decorators/draggable/draggable.js';
18
+ export * from './decorators/draggable/drag_handle.js';
19
+ export * from './decorators/resizable/index.js';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AAErC,cAAc,yCAAyC,CAAC;AACxD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAE/C,cAAc,oBAAoB,CAAC;AAEnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wCAAwC,CAAC;AACvD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AAEpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAElC,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,iCAAiC,CAAC"}
@@ -1,35 +1,52 @@
1
- import { ClickAwayListener as o, isEventWithinElement as t } from "./click_away_listener.js";
2
- import { FocusRedirect as a } from "./focus_redirect.js";
3
- import { ScrollAwayListener as x } from "./scroll_away_listener.js";
4
- import { useDraggable as s } from "./dnd/hooks/use_draggable.js";
1
+ import { ClickAwayListener as o, isEventWithinElement as t } from "./listeners/click_away_listener.js";
2
+ import { FocusRedirect as f } from "./listeners/focus_redirect.js";
3
+ import { ScrollAwayListener as m } from "./listeners/scroll_away_listener.js";
4
+ import { useDraggable as x } from "./decorators/draggable/use_draggable.js";
5
5
  import { makeContextHook as i } from "./hooks/make_context_hook.js";
6
- import { useForkRef as l } from "./hooks/use_fork_ref.js";
7
- import { TriggerConfig as d, useResizeObserver as k } from "./hooks/use_resize_observer.js";
8
- import { useMediaQuery as c } from "./hooks/use_media_query.js";
9
- import { defaultValue as C } from "./default_value.js";
10
- import { CalendarDatesGenerator as h } from "./calendar/calendar_dates_generator.js";
11
- import { getDaysOfWeek as O } from "./calendar/get_days_of_week.js";
12
- import { getMonthsOfYear as v } from "./calendar/get_months_of_year.js";
13
- import { Month as A } from "./calendar/month.js";
14
- import { Draggable as F } from "./dnd/draggable/draggable.js";
15
- import { DragHandle as L } from "./dnd/handle.js";
6
+ import { useForkRef as g } from "./hooks/use_fork_ref.js";
7
+ import { TriggerConfig as u, useResizeObserver as b } from "./hooks/use_resize_observer.js";
8
+ import { useMediaQuery as R } from "./hooks/use_media_query.js";
9
+ import { LabelledByContext as c, useLabelledBy as z, useLabelledById as D } from "./hooks/labelled_by_context.js";
10
+ import { defaultValue as k } from "./default_value.js";
11
+ import { CalendarDatesGenerator as v } from "./calendar/calendar_dates_generator.js";
12
+ import { getDaysOfWeek as B } from "./calendar/get_days_of_week.js";
13
+ import { getMonthsOfYear as O } from "./calendar/get_months_of_year.js";
14
+ import { Month as w } from "./calendar/month.js";
15
+ import { Draggable as E } from "./decorators/draggable/draggable.js";
16
+ import { DragHandle as W } from "./decorators/draggable/drag_handle.js";
17
+ import { Resizable as I } from "./decorators/resizable/resizable.js";
18
+ import { ResizeHandle as T } from "./decorators/resizable/resize_handle.js";
19
+ import { useResizable as Y } from "./decorators/resizable/context.js";
20
+ import { computeResizeState as q, getHandleConfig as J, resolveDirection as K, resolveHandleConfig as N } from "./decorators/resizable/handle_config.js";
21
+ import { ResizeHandleStrategy as U } from "./decorators/resizable/resize_strategy.js";
16
22
  export {
17
- h as CalendarDatesGenerator,
23
+ v as CalendarDatesGenerator,
18
24
  o as ClickAwayListener,
19
- L as DragHandle,
20
- F as Draggable,
21
- a as FocusRedirect,
22
- A as Month,
23
- x as ScrollAwayListener,
24
- d as TriggerConfig,
25
- C as defaultValue,
26
- O as getDaysOfWeek,
27
- v as getMonthsOfYear,
25
+ W as DragHandle,
26
+ E as Draggable,
27
+ f as FocusRedirect,
28
+ c as LabelledByContext,
29
+ w as Month,
30
+ I as Resizable,
31
+ T as ResizeHandle,
32
+ U as ResizeHandleStrategy,
33
+ m as ScrollAwayListener,
34
+ u as TriggerConfig,
35
+ q as computeResizeState,
36
+ k as defaultValue,
37
+ B as getDaysOfWeek,
38
+ J as getHandleConfig,
39
+ O as getMonthsOfYear,
28
40
  t as isEventWithinElement,
29
41
  i as makeContextHook,
30
- s as useDraggable,
31
- l as useForkRef,
32
- c as useMediaQuery,
33
- k as useResizeObserver
42
+ K as resolveDirection,
43
+ N as resolveHandleConfig,
44
+ x as useDraggable,
45
+ g as useForkRef,
46
+ z as useLabelledBy,
47
+ D as useLabelledById,
48
+ R as useMediaQuery,
49
+ Y as useResizable,
50
+ b as useResizeObserver
34
51
  };
35
52
  //# sourceMappingURL=index.js.map