@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
@@ -1,504 +1,16 @@
1
1
  @layer tcn-theme {
2
- /* ===== CSS VARIABLES ===== */
2
+ /* ===== DIVIDER ===== */
3
3
 
4
- .tcn-theme-root {
5
- font-family: var(--font-family);
6
- color: var(--font-color);
7
- /* TODO: move to system */
8
- --action: var(--ergo-primary);
9
- --on-action: var(--ergo-white);
10
- --material: var(--ergo-white);
11
- --on-material: var(--ergo-accent-blue);
12
- }
13
-
14
- /* ===== Actions ===== */
15
-
16
- .tcn-interactive {
17
- cursor: pointer;
18
- user-select: none;
19
- transition:
20
- transform 0.1s,
21
- background 0.1s,
22
- color 0.1s;
23
-
24
- --ink: var(--on-material);
25
- --act: var(--action);
26
- --mat: var(--material);
27
-
28
- --act-down: color-mix(in srgb, var(--mat), black 12%);
29
- --act-raised: color-mix(in srgb, var(--mat), var(--act) 12%);
30
- --act-focus: color-mix(in srgb, var(--mat), var(--act) 16%);
31
- --act-drag: color-mix(in srgb, var(--mat), var(--act) 24%);
32
-
33
- background: var(--mat);
34
- color: var(--ink);
35
- transition:
36
- background 0.1s,
37
- color 0.1s;
38
-
39
- &:focus-visible,
40
- &[data-focus-visible] {
41
- background: var(--act-focus);
42
- outline: 2px solid var(--ergo-primary);
43
- outline-offset: 2px;
44
- }
45
-
46
- &:hover,
47
- &[data-hover] {
48
- background: var(--act-raised);
49
- }
50
-
51
- &:active,
52
- &[data-active] {
53
- background: var(--act-down);
54
- }
55
-
56
- &[data-is-disabled="true"] {
57
- pointer-events: none;
58
- }
59
- }
60
-
61
- /* ===== Base Button =====
62
- * Shared between Button and Toggle.
63
- * Primarily manages button dimensions and sizing ratios.
64
- */
65
- .tcn-base-button {
66
- --btn-size-base: 26px;
67
- --btn-pad-base: 12px;
68
-
69
- --btn-pad-delta: 4px;
70
- --btn-size-delta: 4px;
71
- --btn-font-size-delta: 2px;
72
- --btn-step: 1;
73
-
74
- /* Increase size and pad by 4px for each size "step" from medium */
75
- --btn-pad: calc(var(--btn-pad-base) + var(--btn-pad-delta) * var(--btn-step));
76
- --btn-size: calc(var(--btn-size-base) + var(--btn-size-delta) * var(--btn-step));
77
-
78
- border-radius: var(--ergo-shape-radius-medium);
79
- min-height: var(--btn-size);
80
- padding: var(--padding-small) var(--btn-pad);
81
-
82
- &[data-size="sm"] {
83
- --btn-step: -1;
84
- }
85
- &[data-size="md"] {
86
- --btn-step: 0;
87
- }
88
- &[data-size="lg"] {
89
- --btn-step: 1;
90
- }
91
-
92
- &[data-is-utility="true"] {
93
- height: auto;
94
- width: auto;
95
- min-width: var(--btn-size);
96
- padding: 0;
97
-
98
- /* Icon is 75% of the button size but minimum of 2px to account for border and 1px offset */
99
- --util-ratio: 0.75;
100
- --btn-size-base: 18px;
101
-
102
- font-size: calc(var(--font-size) + var(--btn-font-size-delta) * var(--btn-step));
103
- .tcn-icon {
104
- min-height: min(2px, calc(var(--btn-size) * var(--util-ratio)));
105
- min-width: min(2px, calc(var(--btn-size) * var(--util-ratio)));
106
- }
107
- }
108
- }
109
-
110
- /* ===== Button =====
111
- * Manages Hierarchy and Severity.
112
- */
113
- .tcn-button {
114
- --btn-primary: var(--action);
115
- --btn-on-primary: var(--on-action);
116
- --btn-variant: var(--on-material);
117
-
118
- &[data-severity="dangerous"] {
119
- --btn-primary: var(--action-severity-dangerous);
120
- --btn-variant: var(--ergo-status-red-dark);
121
- }
122
- &[data-severity="cautious"] {
123
- --btn-primary: var(--action-severity-cautious);
124
- --btn-on-primary: var(--ergo-accent-blue);
125
- --btn-variant: var(--ergo-status-yellow-dark);
126
- }
127
- &[data-severity="suggested"] {
128
- --btn-primary: var(--action-severity-suggested);
129
- --btn-variant: var(--ergo-status-blue-dark);
130
- }
131
- &[data-severity="encouraged"] {
132
- --btn-primary: var(--action-severity-encouraged);
133
- --btn-variant: var(--ergo-status-green-dark);
134
- }
135
-
136
- &[data-hierarchy="primary"] {
137
- --act: var(--ergo-white);
138
- --ink: var(--tcn-button-text-color, var(--btn-on-primary));
139
- --mat: var(--tcn-button-color, var(--btn-primary));
140
- &[data-is-disabled="true"] {
141
- --ink: var(--ergo-white);
142
- --mat: var(--ergo-grey-light);
143
- }
144
- }
145
-
146
- &[data-hierarchy="secondary"],
147
- &[data-hierarchy="tertiary"] {
148
- --act: var(--tcn-button-color, var(--btn-variant));
149
- --ink: var(--tcn-button-color, var(--btn-variant));
150
- &[data-is-disabled="true"] {
151
- --ink: var(--ergo-grey-light);
152
- }
153
- }
154
-
155
- /* Decorations */
156
- &[data-hierarchy="tertiary"]:hover {
157
- text-decoration: underline;
158
- text-decoration-color: var(--ink);
159
- text-decoration-thickness: 1px;
160
- text-underline-offset: 4px;
161
- }
162
-
163
- &[data-hierarchy="tertiary"] {
164
- border: 1px solid transparent;
165
- }
166
-
167
- &[data-hierarchy="secondary"] {
168
- border: 1px solid var(--ink);
169
- }
170
-
171
- &[data-hierarchy="primary"] {
172
- border: 1px solid var(--mat);
173
- }
174
-
175
- transition:
176
- box-shadow 0.1s,
177
- transform 0.1s;
178
-
179
- &:hover,
180
- &[data-hover] {
181
- transform: translateY(-1px);
182
- box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.12);
183
-
184
- /* Increases the clickable area by 2px on hover to avoid click events not firing due to the button transform y - or slight mouse wiggles */
185
- :not(.tcn-select) {
186
- &::before,
187
- &::after {
188
- content: "";
189
- position: absolute;
190
- left: 0;
191
- right: 0;
192
- height: 4px;
193
- }
194
-
195
- &::before {
196
- top: -2px;
197
- }
198
-
199
- &::after {
200
- bottom: -2px;
201
- }
202
- }
203
- }
204
-
205
- &:active,
206
- &[data-active] {
207
- transform: translateY(1px);
208
- box-shadow: inset 0 2px 2px 0 rgba(0, 0, 0, 0.12);
209
- }
210
- }
211
-
212
- /* @deprecated - use Button with utility prop instead */
213
- .tcn-slim-button {
214
- height: auto;
215
- width: auto;
216
- padding: 0;
217
-
218
- &[data-size="sm"] {
219
- min-height: 12px;
220
- min-width: 12px;
221
- padding: 0;
222
- .tcn-icon {
223
- min-height: 10px;
224
- min-width: 10px;
225
- }
226
- }
227
- &[data-size="md"] {
228
- min-height: 18px;
229
- min-width: 18px;
230
- padding: 0;
231
- .tcn-icon {
232
- min-height: 14px;
233
- min-width: 14px;
234
- }
235
- }
236
-
237
- &[data-size="lg"] {
238
- min-height: 24px;
239
- min-width: 24px;
240
- padding: 0;
241
- .tcn-icon {
242
- min-height: 20px;
243
- min-width: 20px;
244
- }
245
- }
246
- }
247
-
248
- .tcn-button[data-size].tcn-select {
249
- padding-inline-end: 26px;
250
- }
251
-
252
- /* Toggle */
253
- .tcn-toggle {
254
- --tgl-false: var(--ergo-accent-blue);
255
- --tgl-true: var(--ergo-accent-blue);
256
- --on-tgl-true: var(--ergo-white);
257
-
258
- --ink: var(--tcn-button-color, var(--tgl-false));
259
- --act: var(--tcn-button-color, var(--tgl-false));
260
- &[data-is-disabled="true"] {
261
- --ink: var(--ergo-grey-light);
262
- }
263
- &[data-is-selected="true"] {
264
- --mat: var(--tcn-button-color, var(--tgl-true));
265
- --ink: var(--tcn-button-text-color, var(--ergo-white));
266
- --act: var(--ergo-white);
267
- &[data-is-disabled="true"] {
268
- --ink: var(--ergo-white);
269
- --mat: var(--ergo-grey-light);
270
- }
271
- }
272
- }
273
-
274
- .tcn-fab {
275
- border-radius: 50%;
276
- }
277
-
278
- .tcn-mobile-button {
279
- --btn-size-base: 44px;
280
- --btn-pad-base: 16px;
281
- --btn-size-delta: 8px;
282
- --btn-pad-delta: 4px;
283
-
284
- font-size: calc(16px * var(--scalar, 1));
285
- }
286
-
287
- .tcn-mobile-button[data-size="sm"] {
288
- --btn-size-base: 36px;
289
- }
290
-
291
- .tcn-mobile-button[data-size="lg"] {
292
- --btn-size-base: 52px;
293
- }
294
-
295
- .tcn-button-group .tcn-button-group-button.tcn-mobile-button {
296
- --btn-size-base: 44px;
297
- --btn-pad-base: 16px;
298
- --btn-size-delta: 8px;
299
- --btn-pad-delta: 4px;
300
-
301
- font-size: calc(16px * var(--scalar, 1));
302
- }
303
-
304
- .tcn-button-group {
305
- .tcn-button-group-button:hover,
306
- .tcn-button-group-button:active {
307
- transform: none;
308
- }
309
-
310
- .tcn-button-group-button {
311
- border-radius: 0;
312
- }
313
- .tcn-button-group-button:first-child {
314
- border-start-start-radius: var(--ergo-shape-radius-medium);
315
- border-end-start-radius: var(--ergo-shape-radius-medium);
316
- }
317
- .tcn-button-group-button:last-child {
318
- border-start-end-radius: var(--ergo-shape-radius-medium);
319
- border-end-end-radius: var(--ergo-shape-radius-medium);
320
- }
321
- .tcn-button-group-button[data-hierarchy="tertiary"] {
322
- border: 0;
323
- }
324
- .tcn-button-group-button[data-hierarchy="tertiary"]:not(:last-child) {
325
- border-right: 1px solid var(--on-mat-faint);
326
- }
327
- .tcn-button-group-button[data-hierarchy="tertiary"]:not(:first-child) {
328
- border-left: 1px solid var(--on-mat-faint);
329
- }
330
- .tcn-button-group-button[data-hierarchy="primary"]:not(:last-child) {
331
- border-right: 1px solid var(--act-down);
332
- }
333
- .tcn-button-group-button[data-hierarchy="primary"]:not(:first-child) {
334
- border-left: 1px solid var(--act-down);
335
- }
336
- }
337
-
338
- .tcn-select-group {
339
- .tcn-select-group-option:hover,
340
- .tcn-select-group-option:active {
341
- transform: none;
342
- }
343
-
344
- .tcn-select-group-option[data-hierarchy="secondary"] {
345
- color: var(--act);
346
- border-color: var(--act);
347
- }
348
-
349
- .tcn-select-group-option[data-hierarchy="secondary"]:hover {
350
- background: var(--act-faint);
351
- }
352
-
353
- .tcn-select-group-option[data-hierarchy="secondary"]:active {
354
- background: var(--act-down);
355
- color: var(--on-act);
356
- }
357
-
358
- .tcn-select-group-option[data-hierarchy="secondary"][data-is-disabled="true"] {
359
- color: var(--ergo-material-disabled-outline);
360
- border: 1px solid var(--ergo-material-disabled-outline);
361
- }
362
-
363
- .tcn-select-group-option[data-hierarchy="primary"][data-is-disabled="true"] {
364
- background: var(--ergo-material-disabled-outline);
365
- color: white;
366
- border: 1px solid var(--ergo-material-disabled-outline);
367
- }
368
-
369
- .tcn-select-group-option {
370
- border-radius: 0;
371
- }
372
- .tcn-select-group-option:first-child {
373
- border-top-left-radius: var(--ergo-shape-radius-medium);
374
- border-bottom-left-radius: var(--ergo-shape-radius-medium);
375
- }
376
- .tcn-select-group-option:last-child {
377
- border-top-right-radius: var(--ergo-shape-radius-medium);
378
- border-bottom-right-radius: var(--ergo-shape-radius-medium);
379
- }
380
- }
381
-
382
- /* ===== Tabs ===== */
383
- .tcn-tabs-bar {
384
- .tcn-tabs-list {
385
- .tcn-tab-item {
386
- min-height: 24px;
387
- padding: 0px var(--padding-medium);
388
- text-decoration: none;
389
- text-overflow: ellipsis;
390
- overflow: hidden;
391
- white-space: nowrap;
392
- }
393
- }
394
- }
395
-
396
- /* Default */
397
- .tcn-tabs-bar[data-variant="default"] {
398
- .tcn-tabs-list {
399
- .tcn-tab-item {
400
- box-sizing: border-box;
401
- border: none;
402
- padding: 0px var(--padding-medium);
403
- border-radius: 0;
404
- }
405
- .tcn-tab-item[data-is-selected="true"] {
406
- --mat: var(--tcn-button-color, var(--material));
407
- --ink: var(--tcn-button-text-color, var(--ergo-primary));
408
- --act: var(--ergo-primary);
409
- }
410
-
411
- .tcn-tab-item:focus-visible {
412
- z-index: 2;
413
- }
414
- /* Hover Indicator */
415
- .tcn-tab-item[data-is-selected="false"]:hover::after,
416
- .tcn-tab-item[data-is-selected="false"]:focus-visible::after {
417
- content: "";
418
- display: block;
419
- position: absolute;
420
- left: 0;
421
- right: 0;
422
- bottom: 0px;
423
- height: 1px;
424
- background: var(--ergo-accent-blue);
425
- pointer-events: none;
426
- width: 100%;
427
- z-index: 3;
428
- }
429
-
430
- /* Indicator */
431
- &::after {
432
- content: "";
433
- position: absolute;
434
- bottom: -1px;
435
- left: 0;
436
- min-height: 2px;
437
- transform: translateX(var(--tabs-active-rectangle-position-x, 0));
438
- width: var(--tabs-active-rectangle-width, 0);
439
- background: var(--ergo-primary);
440
- pointer-events: none;
441
- border-bottom-left-radius: 2px;
442
- border-bottom-right-radius: 2px;
443
- transition:
444
- transform 300ms ease-in-out,
445
- width 300ms ease-in-out;
446
- will-change: transform, width;
447
- z-index: 2;
448
- }
449
- }
450
-
451
- /* Rail */
452
- &::before {
453
- content: "";
454
- position: absolute;
455
- bottom: 0px;
456
- left: 0;
457
- width: 100%;
458
- height: 1px;
459
- background: var(--ergo-material-divider);
460
- pointer-events: none;
461
- z-index: 1;
462
- }
463
- }
464
-
465
- /* Inline */
466
- .tcn-tabs-bar[data-variant="inline"] {
467
- font-size: 12px;
468
- min-width: min-content;
469
- width: auto;
470
- flex-grow: 0;
471
- border-radius: 6px;
472
- border: 1px solid var(--on-material);
473
- padding: 2px;
474
-
475
- .tcn-tabs-list {
476
- height: 20px;
477
- gap: var(--ergo-spacing-xs);
478
- .tcn-tab-item {
479
- border-radius: var(--ergo-shape-radius-medium);
480
- min-height: 20px;
481
- }
482
- }
483
- }
484
-
485
- /* ===== MATERIAL ===== */
486
-
487
- .material {
488
- background-color: var(--material);
489
- color: var(--on-material);
490
- }
491
-
492
- /* Divider: use material-line; emphasis variants for strong/faint */
4
+ /* Divider: use ergo-material-divider token; emphasis variants for strong/faint */
493
5
  .tcn-divider-line,
494
6
  .tcn-divider-line[data-emphasis="normal"] {
495
- background: var(--material-line);
7
+ background: var(--ergo-material-divider, #aaa);
496
8
  }
497
9
  .tcn-divider-line[data-emphasis="strong"] {
498
- background: color-mix(in srgb, var(--material-line) 80%, black 20%);
10
+ background: color-mix(in srgb, var(--ergo-material-divider, #aaa) 80%, black 20%);
499
11
  }
500
12
  .tcn-divider-line[data-emphasis="faint"] {
501
- background: color-mix(in srgb, var(--material-line) 80%, white 20%);
13
+ background: color-mix(in srgb, var(--ergo-material-divider, #aaa) 80%, white 20%);
502
14
  }
503
15
 
504
16
  /* ===== SURFACES ===== */
@@ -634,20 +146,19 @@
634
146
  .tcn-scaffold {
635
147
  --scaffold-divide-footer: var(--divide-footer, 1);
636
148
  --scaffold-divide-header: var(--divide-header, 1);
637
- --pad-inline: var(--padding-large);
149
+ /* Since Scaffold now acts as body too - there is no pad inline default - each outer container should set it */
150
+ /* --pad-inline: var(--padding-large); */
638
151
 
639
152
  /* Border appears on nested scaffold/rail when it follows header or utility-bar */
640
- :where(.tcn-header) + :where(.tcn-scaffold),
641
- :where(.tcn-header) + :where(.tcn-rail),
642
- :where(.tcn-utility-bar) + :where(.tcn-scaffold),
643
- :where(.tcn-utility-bar) + :where(.tcn-rail) {
644
- border-top: calc(var(--scaffold-divide-header) * 1px) solid
153
+ :where(.tcn-header) {
154
+ border-bottom: calc(var(--scaffold-divide-header) * 1px) solid
645
155
  var(--ergo-material-border);
646
156
  }
157
+ :where(.tcn-utility-bar) {
158
+ border-bottom: 1px solid var(--ergo-material-border);
159
+ }
647
160
 
648
- /* Border appears on footer when it follows scaffold/rail */
649
- :where(.tcn-scaffold) + :where(.tcn-footer),
650
- :where(.tcn-rail) + :where(.tcn-footer) {
161
+ :where(.tcn-footer) {
651
162
  border-top: calc(var(--scaffold-divide-footer) * 1px) solid
652
163
  var(--ergo-material-border);
653
164
  }
@@ -657,10 +168,19 @@
657
168
  background-color: rgba(0, 0, 0, 0.5);
658
169
  }
659
170
 
171
+ :where(.tcn-frame) {
172
+ --resize-offset: -6px;
173
+ }
174
+
175
+ .tcn-frame > .tcn-scaffold {
176
+ overflow: hidden;
177
+ }
178
+
660
179
  /* PAGE: */
661
180
  .tcn-page {
662
181
  --divide-header: 0;
663
182
  --divide-footer: 0;
183
+ --pad-inline: var(--padding-large);
664
184
  --material: var(--background-color-tertiary);
665
185
  background-color: var(--material);
666
186
  }
@@ -668,10 +188,10 @@
668
188
  /* MODAL: */
669
189
  .tcn-modal {
670
190
  --divide-header: 0;
191
+ --pad-inline: var(--padding-large);
671
192
  box-shadow: 0px 4px 34px 0px #00000096;
672
193
  border-radius: var(--ergo-shape-radius-medium);
673
194
  background-color: var(--background-color-primary);
674
- overflow: hidden;
675
195
  border: 1px solid var(--ergo-material-border);
676
196
 
677
197
  :where(.tcn-header) {
@@ -691,9 +211,9 @@
691
211
  /* DRAWER: */
692
212
  .tcn-drawer {
693
213
  --divide-header: 0;
214
+ --pad-inline: var(--padding-large);
694
215
  box-shadow: 0px 4px 34px 0px #00000096;
695
216
  background-color: var(--background-color-primary);
696
- overflow: hidden;
697
217
 
698
218
  :where(.tcn-header) {
699
219
  --material: var(--ergo-material-overlay);
@@ -713,9 +233,9 @@
713
233
  .tcn-window {
714
234
  box-shadow: 0px 4px 34px 0px #00000096;
715
235
  --divide-header: 0;
236
+ --pad-inline: var(--padding-large);
716
237
  border-radius: var(--ergo-shape-radius-medium);
717
238
  background-color: var(--background-color-primary);
718
- overflow: hidden;
719
239
  border: 2px solid white;
720
240
 
721
241
  :where(.tcn-header) {
@@ -737,7 +257,7 @@
737
257
  --tether-pad-size: 16px;
738
258
  --pad-inline: var(--padding-medium);
739
259
 
740
- .tcn-pop-confirm-scaffold > .tcn-scaffold-stack {
260
+ .tcn-pop-confirm-scaffold {
741
261
  border-radius: var(--ergo-shape-radius-medium);
742
262
  box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.4);
743
263
  background-color: var(--background-color-primary);
@@ -794,6 +314,7 @@
794
314
  .tcn-panel {
795
315
  --divide-header: 1;
796
316
  --divide-footer: 1;
317
+ --pad-inline: var(--padding-large);
797
318
  --material: var(--background-color-primary);
798
319
  background-color: var(--material);
799
320
  border-radius: var(--ergo-shape-radius-medium);
@@ -808,6 +329,7 @@
808
329
  .tcn-aside {
809
330
  --divide-header: 1;
810
331
  --divide-footer: 1;
332
+ --pad-inline: var(--padding-large);
811
333
 
812
334
  --material: var(--background-color-secondary);
813
335
  background-color: var(--material);
@@ -855,13 +377,6 @@
855
377
  :where(.tcn-utility-bar) {
856
378
  min-height: var(--ergo-sizing-bar-sm);
857
379
  }
858
-
859
- :where(.tcn-scaffold-stack) > :where(.tcn-scaffold) > :where(.tcn-scaffold-stack),
860
- :where(.tcn-scaffold-stack) > :where(.tcn-rail) > :where(.tcn-rail-stack),
861
- :where(.tcn-rail-stack) > :where(.tcn-scaffold) > :where(.tcn-scaffold-stack),
862
- :where(.tcn-rail-stack) > :where(.tcn-rail) > :where(.tcn-rail-stack) {
863
- padding-inline: var(--padding-medium);
864
- }
865
380
  }
866
381
 
867
382
  /* Columns: */
@@ -870,6 +385,7 @@
870
385
  padding: var(--padding-large);
871
386
 
872
387
  :where(.tcn-column) {
388
+ gap: var(--gap-medium);
873
389
  border-right: 1px solid var(--ergo-material-border);
874
390
  padding-inline-end: var(--padding-medium);
875
391
  }
@@ -880,16 +396,54 @@
880
396
  }
881
397
  }
882
398
 
399
+ /* Resize handle offsets */
400
+ :where(.tcn-rail.tcn-columns) {
401
+ --resize-offset: calc(-1 * var(--padding-medium));
402
+ }
403
+
404
+ :where(.tcn-rail):not(.tcn-columns) {
405
+ --resize-offset: 0px;
406
+ }
407
+
883
408
  .tcn-page {
884
409
  :where(.tcn-columns) {
885
410
  padding: var(--padding-medium);
886
411
 
887
- :where(.tcn-column):not(:last-child) {
412
+ :where(.tcn-column) {
413
+ gap: var(--gap-medium);
414
+ }
415
+
416
+ > .tcn-column:not(:last-child) {
888
417
  padding-inline-end: var(--padding-medium);
889
418
  }
890
419
  }
891
420
  }
892
421
 
422
+ /* Rows: */
423
+ .tcn-panel,
424
+ .tcn-card {
425
+ :where(.tcn-rows) {
426
+ :where(.tcn-row):not(:last-child) {
427
+ border-bottom: 1px solid var(--ergo-material-border);
428
+ padding-block-end: var(--padding-medium);
429
+ }
430
+
431
+ :where(.tcn-row):not(:first-child) {
432
+ padding-block-start: var(--padding-medium);
433
+ }
434
+ }
435
+ }
436
+
437
+ .tcn-page {
438
+ :where(.tcn-rows) {
439
+ padding: var(--padding-medium);
440
+
441
+ :where(.tcn-row):not(:last-child) {
442
+ padding-block-end: var(--padding-medium);
443
+ }
444
+ }
445
+ }
446
+
893
447
  /* SECTION */
894
448
  .tcn-section {
895
449
  --max-section-depth: 4;
@@ -938,7 +492,7 @@
938
492
  padding-inline-end: var(--pad-inline, var(--padding-medium));
939
493
  }
940
494
 
941
- .tcn-scaffold-stack > .tcn-detail {
495
+ .tcn-scaffold > .tcn-detail {
942
496
  padding-inline: var(--pad-inline, var(--padding-medium));
943
497
  }
944
498
 
@@ -1140,287 +694,218 @@
1140
694
  }
1141
695
  }
1142
696
 
1143
- /* ===== INPUTS ===== */
1144
- .tcn-entry,
1145
- .tcn-control {
1146
- --act: var(--action);
1147
- --mat: var(--material);
1148
- --act-raised: color-mix(in srgb, var(--mat), var(--act) 12%);
697
+ /* ===== TYPOGRAPHY ===== */
1149
698
 
1150
- font-size: var(--ergo-text-size-input);
1151
- border: 1px solid var(--ergo-grey);
1152
- box-sizing: border-box;
1153
- min-height: var(--ergo-sizing-action-md);
1154
- border-radius: var(--ergo-shape-radius-medium);
1155
- padding-inline: 4px;
699
+ .tcn-body-text[data-emphasis="faint"],
700
+ .tcn-headline[data-emphasis="faint"],
701
+ .tcn-subheadline[data-emphasis="faint"],
702
+ .tcn-callout[data-emphasis="faint"],
703
+ .tcn-footnote[data-emphasis="faint"],
704
+ .tcn-caption[data-emphasis="faint"],
705
+ .tcn-title[data-emphasis="faint"] {
706
+ color: color-mix(in srgb, var(--font-color) 70%, transparent);
1156
707
  }
1157
708
 
1158
- .tcn-radio-label,
1159
- .tcn-select-selected-label {
1160
- font-size: var(--ergo-text-size-input);
1161
- }
1162
-
1163
- .tcn-control[data-is-disabled="false"]:hover {
1164
- background: var(--act-raised);
709
+ /* Datum/Tokens */
710
+ .tcn-chip {
711
+ --action: var(--ergo-primary);
712
+ --accent-color: var(--ergo-primary);
1165
713
  }
1166
714
 
1167
- .tcn-control:focus-within {
1168
- outline: 2px solid var(--ergo-primary);
1169
- outline-offset: 2px;
715
+ .tcn-datum[data-emphasis="normal"] {
716
+ --datum-font-color: var(--on-material);
1170
717
  }
1171
718
 
1172
- .tcn-control:focus {
1173
- border: 1px solid var(--act);
719
+ .tcn-datum[data-emphasis="strong"] {
720
+ --datum-font-weight: 700;
1174
721
  }
1175
722
 
1176
- .tcn-control::placeholder {
1177
- color: var(--ergo-grey);
723
+ .tcn-datum[data-emphasis="faint"] {
724
+ --datum-font-color: color-mix(in srgb, var(--on-material), transparent 12%);
1178
725
  }
1179
726
 
1180
- .tcn-control[data-is-disabled="true"] {
1181
- cursor: not-allowed;
1182
- background: var(--ergo-material-disabled-outline);
1183
- color: var(--ergo-text-color-disabled-outline);
727
+ .tcn-datum[data-severity="dangerous"] {
728
+ --datum-font-color: var(--ergo-status-red);
1184
729
  }
1185
730
 
1186
- .tcn-control[data-is-disabled="true"]::placeholder {
1187
- color: var(--ergo-text-color-disabled-outline);
731
+ .tcn-datum[data-severity="cautious"] {
732
+ --datum-font-color: var(--ergo-status-yellow);
1188
733
  }
1189
734
 
1190
- .tcn-control {
1191
- display: flex;
1192
- justify-content: center;
1193
- gap: var(--gap-small);
735
+ .tcn-datum[data-severity="suggested"] {
736
+ --datum-font-color: var(--ergo-status-blue);
1194
737
  }
1195
738
 
1196
- .tcn-control-row {
1197
- min-height: 22px;
1198
- height: auto;
1199
- align-items: center;
1200
- gap: var(--gap-small);
1201
- padding-block: 2px;
739
+ .tcn-datum[data-severity="encouraged"] {
740
+ --datum-font-color: var(--ergo-status-green);
1202
741
  }
1203
742
 
1204
- .tcn-control-row > .tcn-icon {
1205
- color: var(--ergo-grey);
743
+ .tcn-key {
744
+ --accent-color: var(--action);
745
+ font-size: 14px;
746
+ color: var(--datum-font-color);
747
+ font-weight: var(--datum-font-weight, 400);
1206
748
  }
1207
749
 
1208
- .tcn-control .tcn-entry {
1209
- border: none;
1210
- background: transparent;
1211
- padding: 0;
1212
- min-height: unset;
1213
- border-radius: 0;
1214
- height: 100%;
1215
- flex-grow: 1;
1216
-
1217
- &:hover,
1218
- &:active,
1219
- &:focus-visible,
1220
- &:focus {
1221
- outline: none;
1222
- border: none;
1223
- background: transparent;
1224
- }
1225
- }
750
+ .tcn-value {
751
+ font-size: 12px;
1226
752
 
1227
- .tcn-input {
1228
- height: auto;
753
+ color: var(--datum-font-color);
754
+ font-weight: var(--datum-font-weight, 400);
1229
755
  }
1230
756
 
1231
- .tcn-textarea,
1232
- .tcn-input {
1233
- cursor: text;
757
+ .tcn-term > .tcn-key,
758
+ .tcn-term > .tcn-value {
759
+ max-width: 50%;
1234
760
  }
1235
761
 
1236
- .tcn-control-set {
1237
- border-radius: var(--ergo-shape-radius-medium);
1238
-
1239
- &:focus-within {
1240
- outline: 2px solid var(--ergo-primary);
1241
- outline-offset: 2px;
1242
- }
1243
-
1244
- .tcn-control-set-item {
1245
- z-index: 1;
1246
- border-radius: 0;
1247
- height: auto;
1248
- min-height: var(--ergo-sizing-action-md);
1249
- padding-block: 0;
1250
- &:focus,
1251
- &:focus-visible {
1252
- z-index: 3;
1253
- outline: none;
1254
- }
1255
- }
1256
-
1257
- .tcn-control-set-item:first-child {
1258
- border-top-left-radius: var(--ergo-shape-radius-medium);
1259
- border-bottom-left-radius: var(--ergo-shape-radius-medium);
1260
- }
1261
-
1262
- .tcn-control-set-item:not(:last-child) {
1263
- margin-right: -1px;
1264
- }
1265
-
1266
- .tcn-control-set-item:last-child {
1267
- border-top-right-radius: var(--ergo-shape-radius-medium);
1268
- border-bottom-right-radius: var(--ergo-shape-radius-medium);
1269
- }
1270
-
1271
- .tcn-select,
1272
- .tcn-button,
1273
- .tcn-button[data-hierarchy] {
1274
- border: 1px solid var(--ergo-grey);
1275
- height: auto;
1276
- min-height: var(--ergo-sizing-action-md);
1277
- min-width: var(--ergo-sizing-action-md);
1278
- box-sizing: border-box;
1279
- &:hover,
1280
- &[data-hover] {
1281
- transform: none;
1282
- }
1283
- }
1284
-
1285
- .tcn-button.tcn-select,
1286
- .tcn-button[data-hierarchy].tcn-select {
1287
- border-color: var(--ergo-grey);
1288
- }
1289
-
1290
- .tcn-select:focus-visible,
1291
- .tcn-button:focus-visible,
1292
- .tcn-button[data-hierarchy]:focus-visible {
1293
- border-color: var(--ergo-primary);
762
+ .tcn-value {
763
+ :where(.tcn-chip) {
764
+ --action: var(--ergo-accent-blue);
765
+ --accent-color: var(--ergo-accent-blue);
1294
766
  }
1295
767
  }
1296
768
 
1297
- .tcn-slider[data-is-disabled="true"] {
1298
- &::-webkit-slider-runnable-track {
1299
- background: var(--ergo-grey-light);
1300
- }
769
+ /* ===== Resize Handle ===== */
1301
770
 
1302
- &::-webkit-slider-thumb {
1303
- background-color: var(--ergo-white);
1304
- border: 1px solid var(--ergo-grey-light);
1305
- }
771
+ /* Edge indicators: centered pill chip */
772
+ .tcn-resize-handle[data-axis="horizontal"] {
773
+ width: 8px;
1306
774
  }
1307
775
 
1308
- .tcn-checkbox {
1309
- --checkbox-color: var(--action, var(--ergo-primary));
1310
-
1311
- border-color: var(--checkbox-color);
1312
-
1313
- &:focus-visible,
1314
- &:focus {
1315
- outline: 2px solid var(--checkbox-color);
1316
- outline-offset: 2px;
1317
- }
1318
-
1319
- &[data-is-disabled="true"] {
1320
- cursor: not-allowed;
1321
- border-color: var(--ergo-material-disabled-outline);
1322
- }
776
+ .tcn-resize-handle[data-axis="vertical"] {
777
+ height: 8px;
778
+ }
1323
779
 
1324
- &[data-checked="true"] {
1325
- background-color: var(--checkbox-color);
1326
- }
780
+ .tcn-resize-handle[data-axis="horizontal"]::after,
781
+ .tcn-resize-handle[data-axis="vertical"]::after {
782
+ content: "";
783
+ position: absolute;
784
+ border-radius: var(--ergo-shape-radius-medium);
785
+ background-color: var(--ergo-grey-light);
786
+ pointer-events: none;
787
+ transition: background-color 0.3s;
788
+ top: 50%;
789
+ left: 50%;
790
+ transform: translate(-50%, -50%);
791
+ }
1327
792
 
1328
- &[data-checked="true"][data-is-disabled="true"] {
1329
- background-color: var(--ergo-grey-light);
1330
- }
793
+ .tcn-resize-handle[data-axis="horizontal"]::after {
794
+ width: 4px;
795
+ height: 16px;
796
+ }
1331
797
 
1332
- &[data-checked="false"][data-is-disabled="true"] {
1333
- background: var(--material);
1334
- border-color: var(--ergo-grey-light);
1335
- color: var(--ergo-grey-light);
1336
- }
798
+ .tcn-resize-handle[data-axis="vertical"]::after {
799
+ width: 16px;
800
+ height: 4px;
801
+ }
1337
802
 
1338
- &[data-is-disabled="false"]:active {
1339
- background-color: var(--checkbox-color);
1340
- }
803
+ /* Corner L-shape indicator */
804
+ .tcn-resize-handle[data-axis="corner"]::after {
805
+ content: "";
806
+ position: absolute;
807
+ width: 8px;
808
+ height: 8px;
809
+ border-style: solid;
810
+ border-color: var(--ergo-grey-light);
811
+ border-width: 0;
812
+ pointer-events: none;
813
+ transition: border-color 0.15s;
1341
814
  }
1342
815
 
1343
- .tcn-switch-wrapper[data-focused="true"][data-is-checked="false"],
1344
- .tcn-switch-wrapper[data-focused="true"][data-is-checked="true"] {
1345
- outline: 2px solid var(--ergo-primary);
1346
- outline-offset: 2px;
1347
- }
1348
-
1349
- /* Quick fix to use some of the default module styles.*/
1350
- .tcn-input,
1351
- .tcn-select,
1352
- .tcn-slider,
1353
- .tcn-textarea,
1354
- .tcn-checkbox,
1355
- .tcn-switch-wrapper,
1356
- .tcn-date-picker,
1357
- .tcn-date-picker-year-selector,
1358
- .tcn-radio,
1359
- .tcn-date-picker-input,
1360
- .tcn-mobile-date-picker,
1361
- .tcn-mobile-date-picker-year-selector,
1362
- .tcn-suggestion-list-search-input,
1363
- .tcn-suggestion-list {
1364
- --accent-color: var(--ergo-primary);
816
+ /* Physical corners */
817
+ .tcn-resize-handle[data-position="top-left"]::after {
818
+ top: 0;
819
+ left: 0;
820
+ border-top-width: 4px;
821
+ border-left-width: 4px;
1365
822
  }
1366
823
 
1367
- /* Datum/Tokens */
1368
- .tcn-chip {
1369
- --action: var(--ergo-primary);
1370
- --accent-color: var(--ergo-primary);
824
+ .tcn-resize-handle[data-position="top-right"]::after {
825
+ top: 0;
826
+ right: 0;
827
+ border-top-width: 4px;
828
+ border-right-width: 4px;
1371
829
  }
1372
830
 
1373
- .tcn-datum[data-emphasis="normal"] {
1374
- --datum-font-color: var(--on-material);
831
+ .tcn-resize-handle[data-position="bottom-left"]::after {
832
+ bottom: 0;
833
+ left: 0;
834
+ border-bottom-width: 4px;
835
+ border-left-width: 4px;
1375
836
  }
1376
837
 
1377
- .tcn-datum[data-emphasis="strong"] {
1378
- --datum-font-weight: 700;
838
+ .tcn-resize-handle[data-position="bottom-right"]::after {
839
+ bottom: 0;
840
+ right: 0;
841
+ border-bottom-width: 4px;
842
+ border-right-width: 4px;
1379
843
  }
1380
844
 
1381
- .tcn-datum[data-emphasis="faint"] {
1382
- --datum-font-color: color-mix(in srgb, var(--on-material), transparent 12%);
845
+ /* Logical corners (RTL-aware) */
846
+ .tcn-resize-handle[data-position="top-start"]:dir(ltr)::after {
847
+ top: 0;
848
+ left: 0;
849
+ border-top-width: 4px;
850
+ border-left-width: 4px;
1383
851
  }
1384
852
 
1385
- .tcn-datum[data-severity="dangerous"] {
1386
- --datum-font-color: var(--ergo-status-red);
853
+ .tcn-resize-handle[data-position="top-start"]:dir(rtl)::after {
854
+ top: 0;
855
+ right: 0;
856
+ border-top-width: 4px;
857
+ border-right-width: 4px;
1387
858
  }
1388
859
 
1389
- .tcn-datum[data-severity="cautious"] {
1390
- --datum-font-color: var(--ergo-status-yellow);
860
+ .tcn-resize-handle[data-position="top-end"]:dir(ltr)::after {
861
+ top: 0;
862
+ right: 0;
863
+ border-top-width: 4px;
864
+ border-right-width: 4px;
1391
865
  }
1392
866
 
1393
- .tcn-datum[data-severity="suggested"] {
1394
- --datum-font-color: var(--ergo-status-blue);
867
+ .tcn-resize-handle[data-position="top-end"]:dir(rtl)::after {
868
+ top: 0;
869
+ left: 0;
870
+ border-top-width: 4px;
871
+ border-left-width: 4px;
1395
872
  }
1396
873
 
1397
- .tcn-datum[data-severity="encouraged"] {
1398
- --datum-font-color: var(--ergo-status-green);
874
+ .tcn-resize-handle[data-position="bottom-start"]:dir(ltr)::after {
875
+ bottom: 0;
876
+ left: 0;
877
+ border-bottom-width: 4px;
878
+ border-left-width: 4px;
1399
879
  }
1400
880
 
1401
- .tcn-key {
1402
- --accent-color: var(--action);
1403
- font-size: 14px;
1404
- color: var(--datum-font-color);
1405
- font-weight: var(--datum-font-weight, 400);
881
+ .tcn-resize-handle[data-position="bottom-start"]:dir(rtl)::after {
882
+ bottom: 0;
883
+ right: 0;
884
+ border-bottom-width: 4px;
885
+ border-right-width: 4px;
1406
886
  }
1407
887
 
1408
- .tcn-value {
1409
- font-size: 12px;
888
+ .tcn-resize-handle[data-position="bottom-end"]:dir(ltr)::after {
889
+ bottom: 0;
890
+ right: 0;
891
+ border-bottom-width: 4px;
892
+ border-right-width: 4px;
893
+ }
1410
894
 
1411
- color: var(--datum-font-color);
1412
- font-weight: var(--datum-font-weight, 400);
895
+ .tcn-resize-handle[data-position="bottom-end"]:dir(rtl)::after {
896
+ bottom: 0;
897
+ left: 0;
898
+ border-bottom-width: 4px;
899
+ border-left-width: 4px;
1413
900
  }
1414
901
 
1415
- .tcn-term > .tcn-key,
1416
- .tcn-term > .tcn-value {
1417
- max-width: 50%;
902
+ /* Hover */
903
+ .tcn-resize-handle[data-axis="horizontal"]:hover::after,
904
+ .tcn-resize-handle[data-axis="vertical"]:hover::after {
905
+ background-color: var(--ergo-grey-dark);
1418
906
  }
1419
907
 
1420
- .tcn-value {
1421
- :where(.tcn-chip) {
1422
- --action: var(--ergo-accent-blue);
1423
- --accent-color: var(--ergo-accent-blue);
1424
- }
908
+ .tcn-resize-handle:hover::after {
909
+ border-color: var(--ergo-grey-dark);
1425
910
  }
1426
911
  }