@tcn/ui 0.1.1 → 0.3.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 (317) hide show
  1. package/README.md +38 -3
  2. package/dist/divider.module-FptFV0PX.js +5 -0
  3. package/dist/divider.module-FptFV0PX.js.map +1 -0
  4. package/dist/draggable.css +1 -0
  5. package/dist/feedback/progress/progress_bar.js +1 -1
  6. package/dist/form/field/common/field_description.js +1 -1
  7. package/dist/form/field/common/field_error.js +1 -1
  8. package/dist/form/field/common/field_label.js +1 -1
  9. package/dist/form/field/field.js +1 -1
  10. package/dist/frame.css +1 -0
  11. package/dist/inputs/color_input/color_input.js +1 -1
  12. package/dist/inputs/color_input/color_input.js.map +1 -1
  13. package/dist/inputs/color_input/color_picker.js +1 -1
  14. package/dist/inputs/combo_box/combo_box.js +1 -1
  15. package/dist/inputs/date_picker/date_picker.js +1 -1
  16. package/dist/inputs/date_picker/date_picker_date.js +1 -1
  17. package/dist/inputs/date_picker/date_picker_day.js +1 -1
  18. package/dist/inputs/date_picker/date_picker_input.js +2 -2
  19. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  20. package/dist/inputs/date_picker/date_picker_time_selector.js +1 -1
  21. package/dist/inputs/date_picker/date_picker_year_input.js +1 -1
  22. package/dist/inputs/date_picker/date_picker_year_input.js.map +1 -1
  23. package/dist/inputs/date_picker/date_picker_year_selector.js +2 -2
  24. package/dist/inputs/mask_input/key_capture_input.js +1 -1
  25. package/dist/inputs/mask_input/mask_input.js +1 -1
  26. package/dist/inputs/multiselect/multiselect.js +1 -1
  27. package/dist/inputs/phone_number_input/phone_number_input.d.ts +2 -0
  28. package/dist/inputs/phone_number_input/phone_number_input.d.ts.map +1 -1
  29. package/dist/inputs/phone_number_input/phone_number_input.js +160 -154
  30. package/dist/inputs/phone_number_input/phone_number_input.js.map +1 -1
  31. package/dist/inputs/select/select.js +1 -1
  32. package/dist/inputs/slider/slider.js +1 -1
  33. package/dist/inputs/suggestions/suggestion_list.js +3 -3
  34. package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
  35. package/dist/inputs/switch/switch.js +1 -1
  36. package/dist/inputs/textarea/textarea.d.ts +2 -2
  37. package/dist/inputs/textarea/textarea.d.ts.map +1 -1
  38. package/dist/inputs/textarea/textarea.js.map +1 -1
  39. package/dist/inputs/unit_input/unit_input.js +1 -1
  40. package/dist/layouts/divider/divider.js +24 -23
  41. package/dist/layouts/divider/divider.js.map +1 -1
  42. package/dist/layouts/header/header.d.ts.map +1 -1
  43. package/dist/layouts/header/header.js.map +1 -1
  44. package/dist/layouts/index.d.ts +6 -5
  45. package/dist/layouts/index.d.ts.map +1 -1
  46. package/dist/layouts/index.js +28 -26
  47. package/dist/layouts/index.js.map +1 -1
  48. package/dist/layouts/scaffold/scaffold.d.ts +9 -0
  49. package/dist/layouts/scaffold/scaffold.d.ts.map +1 -0
  50. package/dist/layouts/scaffold/scaffold.js +55 -0
  51. package/dist/layouts/scaffold/scaffold.js.map +1 -0
  52. package/dist/modal.css +1 -1
  53. package/dist/overlay/frame/frame.d.ts +11 -0
  54. package/dist/overlay/frame/frame.d.ts.map +1 -0
  55. package/dist/overlay/frame/frame.js +35 -0
  56. package/dist/overlay/frame/frame.js.map +1 -0
  57. package/dist/overlay/index.d.ts +10 -2
  58. package/dist/overlay/index.d.ts.map +1 -1
  59. package/dist/overlay/index.js +22 -8
  60. package/dist/overlay/index.js.map +1 -1
  61. package/dist/overlay/menu/menu.d.ts +1 -1
  62. package/dist/overlay/menu/menu.d.ts.map +1 -1
  63. package/dist/overlay/menu/menu.js +2 -2
  64. package/dist/overlay/menu/menu.js.map +1 -1
  65. package/dist/overlay/popper/base/base_popper.d.ts +11 -0
  66. package/dist/overlay/popper/base/base_popper.d.ts.map +1 -0
  67. package/dist/overlay/popper/base/base_popper.js +27 -0
  68. package/dist/overlay/popper/base/base_popper.js.map +1 -0
  69. package/dist/overlay/popper/base/dismissal_decorator.d.ts +16 -0
  70. package/dist/overlay/popper/base/dismissal_decorator.d.ts.map +1 -0
  71. package/dist/overlay/popper/base/dismissal_decorator.js +69 -0
  72. package/dist/overlay/popper/base/dismissal_decorator.js.map +1 -0
  73. package/dist/overlay/popper/context_popper.d.ts +11 -0
  74. package/dist/overlay/popper/context_popper.d.ts.map +1 -0
  75. package/dist/overlay/popper/context_popper.js +33 -0
  76. package/dist/overlay/popper/context_popper.js.map +1 -0
  77. package/dist/overlay/popper/element_popper.d.ts +7 -0
  78. package/dist/overlay/popper/element_popper.d.ts.map +1 -0
  79. package/dist/overlay/popper/element_popper.js +33 -0
  80. package/dist/overlay/popper/element_popper.js.map +1 -0
  81. package/dist/overlay/popper/hooks/use_context_trigger.d.ts +7 -0
  82. package/dist/overlay/popper/hooks/use_context_trigger.d.ts.map +1 -0
  83. package/dist/overlay/popper/hooks/use_context_trigger.js +31 -0
  84. package/dist/overlay/popper/hooks/use_context_trigger.js.map +1 -0
  85. package/dist/overlay/popper/hooks/use_hover_trigger.d.ts +6 -0
  86. package/dist/overlay/popper/hooks/use_hover_trigger.d.ts.map +1 -0
  87. package/dist/overlay/popper/hooks/use_hover_trigger.js +17 -0
  88. package/dist/overlay/popper/hooks/use_hover_trigger.js.map +1 -0
  89. package/dist/overlay/popper/hooks/use_restore_focus.d.ts +2 -0
  90. package/dist/overlay/popper/hooks/use_restore_focus.d.ts.map +1 -0
  91. package/dist/overlay/popper/hooks/use_restore_focus.js +18 -0
  92. package/dist/overlay/popper/hooks/use_restore_focus.js.map +1 -0
  93. package/dist/overlay/popper/legacy/popper.d.ts.map +1 -0
  94. package/dist/overlay/popper/{popper.js → legacy/popper.js} +6 -6
  95. package/dist/overlay/popper/legacy/popper.js.map +1 -0
  96. package/dist/overlay/popper/preview_popper.d.ts +7 -0
  97. package/dist/overlay/popper/preview_popper.d.ts.map +1 -0
  98. package/dist/overlay/popper/preview_popper.js +46 -0
  99. package/dist/overlay/popper/preview_popper.js.map +1 -0
  100. package/dist/overlay/tethered/element_tethered.d.ts +8 -0
  101. package/dist/overlay/tethered/element_tethered.d.ts.map +1 -0
  102. package/dist/overlay/tethered/element_tethered.js +33 -0
  103. package/dist/overlay/tethered/element_tethered.js.map +1 -0
  104. package/dist/overlay/tethered/hooks/calculate_position.d.ts +19 -0
  105. package/dist/overlay/tethered/hooks/calculate_position.d.ts.map +1 -0
  106. package/dist/overlay/tethered/hooks/calculate_position.js +43 -0
  107. package/dist/overlay/tethered/hooks/calculate_position.js.map +1 -0
  108. package/dist/overlay/tethered/hooks/useTether.d.ts +19 -0
  109. package/dist/overlay/tethered/hooks/useTether.d.ts.map +1 -0
  110. package/dist/overlay/tethered/hooks/useTether.js +61 -0
  111. package/dist/overlay/tethered/hooks/useTether.js.map +1 -0
  112. package/dist/overlay/tethered/tethered.d.ts +20 -0
  113. package/dist/overlay/tethered/tethered.d.ts.map +1 -0
  114. package/dist/overlay/tethered/tethered.js +59 -0
  115. package/dist/overlay/tethered/tethered.js.map +1 -0
  116. package/dist/overlay/tethered/types.d.ts +3 -0
  117. package/dist/overlay/tethered/types.d.ts.map +1 -0
  118. package/dist/overlay/tethered/types.js +2 -0
  119. package/dist/overlay/tethered/types.js.map +1 -0
  120. package/dist/popper.css +1 -1
  121. package/dist/scaffold.css +1 -0
  122. package/dist/stacks/box/box.d.ts +1 -1
  123. package/dist/stacks/box/box.d.ts.map +1 -1
  124. package/dist/stacks/box/box.js +1 -1
  125. package/dist/stacks/box/box.js.map +1 -1
  126. package/dist/stacks/h_collapsible_box.js +1 -1
  127. package/dist/stacks/v_collapsible_box.js +1 -1
  128. package/dist/surfaces/card/card.d.ts +2 -2
  129. package/dist/surfaces/card/card.d.ts.map +1 -1
  130. package/dist/surfaces/card/card.js +7 -7
  131. package/dist/surfaces/card/card.js.map +1 -1
  132. package/dist/surfaces/index.d.ts +4 -2
  133. package/dist/surfaces/index.d.ts.map +1 -1
  134. package/dist/surfaces/index.js +26 -22
  135. package/dist/surfaces/index.js.map +1 -1
  136. package/dist/surfaces/modal/modal.d.ts +4 -3
  137. package/dist/surfaces/modal/modal.d.ts.map +1 -1
  138. package/dist/surfaces/modal/modal.js +12 -11
  139. package/dist/surfaces/modal/modal.js.map +1 -1
  140. package/dist/surfaces/panel/h_panel.js +23 -24
  141. package/dist/surfaces/panel/h_panel.js.map +1 -1
  142. package/dist/surfaces/panel/v_panel.d.ts +3 -7
  143. package/dist/surfaces/panel/v_panel.d.ts.map +1 -1
  144. package/dist/surfaces/panel/v_panel.js +12 -54
  145. package/dist/surfaces/panel/v_panel.js.map +1 -1
  146. package/dist/surfaces/pop_confirm/pop_confirm.d.ts +5 -0
  147. package/dist/surfaces/pop_confirm/pop_confirm.d.ts.map +1 -0
  148. package/dist/surfaces/pop_confirm/pop_confirm.js +37 -0
  149. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -0
  150. package/dist/surfaces/popconfirm/pop_confirm.d.ts +5 -0
  151. package/dist/surfaces/popconfirm/pop_confirm.d.ts.map +1 -0
  152. package/dist/surfaces/popconfirm/pop_confirm.js +13 -0
  153. package/dist/surfaces/popconfirm/pop_confirm.js.map +1 -0
  154. package/dist/surfaces/popover/popover.d.ts +1 -1
  155. package/dist/surfaces/popover/popover.d.ts.map +1 -1
  156. package/dist/surfaces/popover/popover.js +1 -1
  157. package/dist/surfaces/popover/popover.js.map +1 -1
  158. package/dist/surfaces/tooltip/tooltip.d.ts +10 -0
  159. package/dist/surfaces/tooltip/tooltip.d.ts.map +1 -0
  160. package/dist/surfaces/tooltip/tooltip.js +38 -0
  161. package/dist/surfaces/tooltip/tooltip.js.map +1 -0
  162. package/dist/surfaces/window/window.d.ts +4 -3
  163. package/dist/surfaces/window/window.d.ts.map +1 -1
  164. package/dist/surfaces/window/window.js +18 -6
  165. package/dist/surfaces/window/window.js.map +1 -1
  166. package/dist/tethered.css +1 -0
  167. package/dist/themes/themes/ergo/ergo_theme.js +166 -158
  168. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  169. package/dist/tooltip.css +1 -1
  170. package/dist/typography/title/title.d.ts +2 -1
  171. package/dist/typography/title/title.d.ts.map +1 -1
  172. package/dist/typography/title/title.js +23 -22
  173. package/dist/typography/title/title.js.map +1 -1
  174. package/dist/utility_bar.css +1 -1
  175. package/dist/utils/click_away_listener.d.ts +1 -0
  176. package/dist/utils/click_away_listener.d.ts.map +1 -1
  177. package/dist/utils/click_away_listener.js +2 -1
  178. package/dist/utils/click_away_listener.js.map +1 -1
  179. package/dist/utils/dnd/context.d.ts +4 -0
  180. package/dist/utils/dnd/context.d.ts.map +1 -0
  181. package/dist/utils/dnd/context.js +20 -0
  182. package/dist/utils/dnd/context.js.map +1 -0
  183. package/dist/utils/dnd/draggable/draggable.d.ts +7 -0
  184. package/dist/utils/dnd/draggable/draggable.d.ts.map +1 -0
  185. package/dist/utils/dnd/draggable/draggable.js +27 -0
  186. package/dist/utils/dnd/draggable/draggable.js.map +1 -0
  187. package/dist/utils/dnd/handle.d.ts +6 -0
  188. package/dist/utils/dnd/handle.d.ts.map +1 -0
  189. package/dist/utils/dnd/handle.js +22 -0
  190. package/dist/utils/dnd/handle.js.map +1 -0
  191. package/dist/utils/dnd/hooks/use_drag_container.d.ts +7 -0
  192. package/dist/utils/dnd/hooks/use_drag_container.d.ts.map +1 -0
  193. package/dist/utils/dnd/hooks/use_drag_container.js +30 -0
  194. package/dist/utils/dnd/hooks/use_drag_container.js.map +1 -0
  195. package/dist/utils/{hooks → dnd/hooks}/use_draggable.d.ts +3 -3
  196. package/dist/utils/dnd/hooks/use_draggable.d.ts.map +1 -0
  197. package/dist/utils/dnd/hooks/use_draggable.js +41 -0
  198. package/dist/utils/dnd/hooks/use_draggable.js.map +1 -0
  199. package/dist/utils/dnd/types.d.ts +10 -0
  200. package/dist/utils/dnd/types.d.ts.map +1 -0
  201. package/dist/utils/dnd/types.js +2 -0
  202. package/dist/utils/dnd/types.js.map +1 -0
  203. package/dist/utils/index.d.ts +6 -5
  204. package/dist/utils/index.d.ts.map +1 -1
  205. package/dist/utils/index.js +26 -23
  206. package/dist/utils/index.js.map +1 -1
  207. package/dist/utils/mouse_leave_region.d.ts +8 -0
  208. package/dist/utils/mouse_leave_region.d.ts.map +1 -0
  209. package/dist/utils/mouse_leave_region.js +26 -0
  210. package/dist/utils/mouse_leave_region.js.map +1 -0
  211. package/dist/utils/types/dimensions.d.ts +11 -1
  212. package/dist/utils/types/dimensions.d.ts.map +1 -1
  213. package/package.json +9 -3
  214. package/src/inputs/color_input/color_input.tsx +1 -1
  215. package/src/inputs/date_picker/date_picker_input.tsx +1 -1
  216. package/src/inputs/date_picker/date_picker_year_input.tsx +1 -1
  217. package/src/inputs/phone_number_input/phone_number_input.tsx +8 -0
  218. package/src/inputs/suggestions/suggestion_list.tsx +1 -1
  219. package/src/inputs/textarea/textarea.tsx +2 -2
  220. package/src/layouts/header/header.tsx +0 -1
  221. package/src/layouts/index.ts +7 -5
  222. package/src/layouts/scaffold/scaffold.module.css +5 -0
  223. package/src/layouts/scaffold/scaffold.tsx +60 -0
  224. package/src/layouts/utility_bar/utility_bar.module.css +0 -3
  225. package/src/overlay/frame/frame.module.css +5 -0
  226. package/src/overlay/frame/frame.stories.tsx +40 -0
  227. package/src/overlay/frame/frame.tsx +50 -0
  228. package/src/overlay/frame/frame_stories.module.css +14 -0
  229. package/src/overlay/index.ts +30 -2
  230. package/src/overlay/menu/menu.tsx +1 -1
  231. package/src/overlay/popper/__stories__/base_args.ts +75 -0
  232. package/src/overlay/popper/__stories__/context_popper.stories.tsx +77 -0
  233. package/src/overlay/popper/__stories__/element_popper.stories.tsx +80 -0
  234. package/src/overlay/popper/__stories__/preview_popper.stories.tsx +73 -0
  235. package/src/overlay/popper/base/base_popper.tsx +55 -0
  236. package/src/overlay/popper/base/dismissal_decorator.tsx +80 -0
  237. package/src/overlay/popper/context_popper.tsx +43 -0
  238. package/src/overlay/popper/element_popper.tsx +42 -0
  239. package/src/overlay/popper/hooks/use_context_trigger.ts +50 -0
  240. package/src/overlay/popper/hooks/use_hover_trigger.ts +24 -0
  241. package/src/overlay/popper/hooks/use_restore_focus.ts +16 -0
  242. package/src/overlay/popper/{popper.stories.tsx → legacy/popper.stories.tsx} +11 -5
  243. package/src/overlay/popper/{popper.tsx → legacy/popper.tsx} +3 -2
  244. package/src/overlay/popper/preview_popper.tsx +54 -0
  245. package/src/overlay/tethered/__stories__/element/element_tethered.stories.tsx +57 -0
  246. package/src/overlay/tethered/__stories__/element/element_tethered_stories.module.css +14 -0
  247. package/src/overlay/tethered/__stories__/shared/base_story_config.ts +52 -0
  248. package/src/overlay/tethered/__stories__/shared/components/sb_point.module.css +20 -0
  249. package/src/overlay/tethered/__stories__/shared/components/sb_point.tsx +34 -0
  250. package/src/overlay/tethered/__stories__/shared/components/sb_reference_points.tsx +54 -0
  251. package/src/overlay/tethered/__stories__/tethered/tethered.stories.tsx +90 -0
  252. package/src/overlay/tethered/__stories__/tethered/tethered_stories.module.css +25 -0
  253. package/src/overlay/tethered/element_tethered.tsx +62 -0
  254. package/src/overlay/tethered/hooks/calculate_position.ts +110 -0
  255. package/src/overlay/tethered/hooks/useTether.ts +85 -0
  256. package/src/overlay/tethered/tethered.module.css +8 -0
  257. package/src/overlay/tethered/tethered.tsx +72 -0
  258. package/src/overlay/tethered/types.ts +2 -0
  259. package/src/stacks/box/box.tsx +8 -2
  260. package/src/stacks/h_stack.stories.tsx +2 -2
  261. package/src/stacks/v_stack.stories.tsx +2 -2
  262. package/src/surfaces/card/card.stories.tsx +64 -0
  263. package/src/surfaces/card/card.tsx +4 -4
  264. package/src/surfaces/card/card_stories.module.css +13 -0
  265. package/src/surfaces/index.ts +4 -2
  266. package/src/surfaces/modal/__stories__/modal.stories.tsx +31 -28
  267. package/src/surfaces/modal/modal.module.css +2 -2
  268. package/src/surfaces/modal/modal.tsx +16 -11
  269. package/src/surfaces/panel/__stories__/panel.stories.tsx +1 -1
  270. package/src/surfaces/panel/v_panel.tsx +8 -53
  271. package/src/surfaces/pop_confirm/pop_confirm.stories.tsx +70 -0
  272. package/src/surfaces/pop_confirm/pop_confirm.tsx +30 -0
  273. package/src/surfaces/popconfirm/pop_confirm.tsx +18 -0
  274. package/src/surfaces/popover/popover.tsx +1 -1
  275. package/src/surfaces/tooltip/tooltip.stories.tsx +54 -0
  276. package/src/surfaces/tooltip/tooltip.tsx +59 -0
  277. package/src/surfaces/window/window.stories.tsx +51 -4
  278. package/src/surfaces/window/window.tsx +19 -7
  279. package/src/themes/themes/ergo/__stories__/components/tone_picker/sb_tone_picker.tsx +7 -9
  280. package/src/themes/themes/ergo/__stories__/material.stories.tsx +2 -6
  281. package/src/themes/themes/ergo/__stories__/sb_materials.module.css +29 -21
  282. package/src/themes/themes/ergo/ergo_theme.css +166 -158
  283. package/src/typography/title/title.tsx +22 -18
  284. package/src/utils/click_away_listener.tsx +1 -1
  285. package/src/utils/dnd/__stories__/draggable.stories.tsx +48 -0
  286. package/src/utils/dnd/__stories__/draggable_stories.module.css +21 -0
  287. package/src/utils/{__stories__ → dnd/__stories__}/use_draggable.stories.tsx +15 -10
  288. package/src/utils/dnd/context.ts +24 -0
  289. package/src/utils/dnd/draggable/draggable.module.css +8 -0
  290. package/src/utils/dnd/draggable/draggable.tsx +42 -0
  291. package/src/utils/dnd/handle.tsx +32 -0
  292. package/src/utils/dnd/hooks/use_drag_container.ts +42 -0
  293. package/src/utils/{hooks → dnd/hooks}/use_draggable.ts +23 -17
  294. package/src/utils/dnd/types.ts +6 -0
  295. package/src/utils/index.ts +7 -5
  296. package/src/utils/mouse_leave_region.tsx +38 -0
  297. package/src/utils/types/dimensions.ts +13 -1
  298. package/tsconfig.json +3 -0
  299. package/dist/overlay/popper/popper.d.ts.map +0 -1
  300. package/dist/overlay/popper/popper.js.map +0 -1
  301. package/dist/overlay/tooltip/tooltip.d.ts +0 -7
  302. package/dist/overlay/tooltip/tooltip.d.ts.map +0 -1
  303. package/dist/overlay/tooltip/tooltip.js +0 -20
  304. package/dist/overlay/tooltip/tooltip.js.map +0 -1
  305. package/dist/panel.module-DwGKncon.js +0 -5
  306. package/dist/panel.module-DwGKncon.js.map +0 -1
  307. package/dist/title.module-B16de2jd.js +0 -5
  308. package/dist/title.module-B16de2jd.js.map +0 -1
  309. package/dist/utils/hooks/use_draggable.d.ts.map +0 -1
  310. package/dist/utils/hooks/use_draggable.js +0 -30
  311. package/dist/utils/hooks/use_draggable.js.map +0 -1
  312. package/src/overlay/tooltip/tooltip.stories.tsx +0 -22
  313. package/src/overlay/tooltip/tooltip.tsx +0 -24
  314. /package/dist/{panel.css → h_panel.css} +0 -0
  315. /package/dist/overlay/popper/{popper.d.ts → legacy/popper.d.ts} +0 -0
  316. /package/src/overlay/popper/{popper.module.css → legacy/popper.module.css} +0 -0
  317. /package/src/{overlay → surfaces}/tooltip/tooltip.module.css +0 -0
@@ -24,34 +24,47 @@
24
24
  }
25
25
  }
26
26
 
27
+ :global(.tcn-surface) {
28
+ background: hsl(var(--material));
29
+ color: hsl(var(--on-material));
30
+ }
31
+
27
32
  :global(.tcn-card[data-tone="positive"]) {
28
- --material: var(--positive);
29
- --on-material: var(--white);
30
- --action: var(--white);
31
- --on-action: var(--positive);
33
+ :global(.tcn-header) {
34
+ --material: var(--positive);
35
+ --on-material: var(--white);
36
+ --action: var(--white);
37
+ --on-action: var(--positive);
38
+ }
32
39
  }
33
40
 
34
41
  :global(.tcn-card[data-tone="notice"]) {
35
- --material: var(--notice);
36
- --on-material: var(--white);
37
- --action: var(--white);
38
- --on-action: var(--notice);
42
+ :global(.tcn-header) {
43
+ --material: var(--notice);
44
+ --on-material: var(--white);
45
+ --action: var(--white);
46
+ --on-action: var(--notice);
47
+ }
39
48
  }
40
49
 
41
50
  /* :global(.tcn-card[data-tone="neutral"]) {} */
42
51
 
43
52
  :global(.tcn-card[data-tone="warning"]) {
44
- --material: var(--warning);
45
- --on-material: var(--navy);
46
- --action: var(--navy);
47
- --on-action: var(--white);
53
+ :global(.tcn-header) {
54
+ --material: var(--warning);
55
+ --on-material: var(--navy);
56
+ --action: var(--navy);
57
+ --on-action: var(--white);
58
+ }
48
59
  }
49
60
 
50
61
  :global(.tcn-card[data-tone="danger"]) {
51
- --material: var(--danger);
52
- --on-material: var(--white);
53
- --action: var(--white);
54
- --on-action: var(--danger);
62
+ :global(.tcn-header) {
63
+ --material: var(--danger);
64
+ --on-material: var(--white);
65
+ --action: var(--white);
66
+ --on-action: var(--danger);
67
+ }
55
68
  }
56
69
  }
57
70
 
@@ -103,8 +116,3 @@
103
116
  --material: var(--navy);
104
117
  --on-material: var(--white);
105
118
  }
106
-
107
- .surface {
108
- background: hsl(var(--material));
109
- color: hsl(var(--on-material));
110
- }
@@ -136,6 +136,14 @@ legend {
136
136
  /* ===== CSS VARIABLES ===== */
137
137
  :root {
138
138
  --scalar: 1;
139
+ --accent-color: #cd6b2c;
140
+
141
+ /* Typography */
142
+ --font-color: #395578;
143
+ --font-family: "Lato", sans-serif;
144
+ --font-size: 12px;
145
+
146
+ /* Spacing */
139
147
  --gap-small: 4px;
140
148
  --gap-medium: 8px;
141
149
  --gap-large: 16px;
@@ -144,6 +152,7 @@ legend {
144
152
  --padding-medium: 8px;
145
153
  --padding-large: 16px;
146
154
 
155
+ /* Status Colors */
147
156
  --status-color-disabled: #7f7f7f;
148
157
  --status-color-info: #008cff;
149
158
  --status-color-warning: #ffff00;
@@ -155,6 +164,12 @@ legend {
155
164
  --async-color-success: #00ff00;
156
165
  --async-color-failed: #ff0000;
157
166
 
167
+ /* Shape */
168
+ --shape-radius-small: 2px;
169
+ --shape-radius-medium: 4px;
170
+ --shape-radius-large: 8px;
171
+
172
+ /* Palette */
158
173
  --primary-color-faint: #c0c0c0;
159
174
  --primary-color: #008cff;
160
175
  --primary-color-strong: #008cff;
@@ -171,10 +186,6 @@ legend {
171
186
  --quaternary-color: #008cff;
172
187
  --quaternary-color-strong: #008cff;
173
188
 
174
- --font-color: #395578;
175
- --font-family: "Lato", sans-serif;
176
- --font-size: 12px;
177
-
178
189
  --background-color-primary: #ffffff;
179
190
  --background-color-secondary: #ffffff;
180
191
  --background-color-tertiary: #ffffff;
@@ -189,12 +200,7 @@ legend {
189
200
  --material-secondary-dark: 197 29.1% 40.4%;
190
201
  --material-tan: 33, 22%, 84%;
191
202
 
192
- --shape-radius-small: 2px;
193
- --shape-radius-medium: 4px;
194
- --shape-radius-large: 8px;
195
-
196
- --accent-color: #cd6b2c;
197
-
203
+ /* Default Material */
198
204
  --action: 23, 65%, 49%;
199
205
  --on-action: 0, 0%, 100%;
200
206
  --material: 0, 0%, 100%;
@@ -373,78 +379,30 @@ legend {
373
379
  }
374
380
  }
375
381
 
376
- /* ===== Materials ===== */
377
-
378
- /* White on Gray */
379
- .material-status-disabled {
380
- --action: 0, 0%, 100%;
381
- --on-action: 0, 0%, 49.8%;
382
- --material: 0, 0%, 49.8%;
383
- --on-material: 0, 0%, 100%;
384
- }
385
-
386
- /* White on Vivid Blue */
387
- .material-status-info {
388
- --action: 0, 0%, 100%;
389
- --on-action: 207, 100%, 50%;
390
- --material: 207, 100%, 50%;
391
- --on-material: 0, 0%, 100%;
392
- }
393
-
394
- /* Navy on Yellow */
395
- .material-status-warning {
396
- --action: 213, 35.6%, 34.7%;
397
- --on-action: 60, 100%, 50%;
398
- --material: 60, 100%, 50%;
399
- --on-material: 213, 35.6%, 34.7%;
400
- }
401
-
402
- /* White on Red */
403
- .material-status-error {
404
- --action: 0, 0%, 100%;
405
- --on-action: 0, 100%, 50%;
406
- --material: 0, 100%, 50%;
407
- --on-material: 0, 0%, 100%;
408
- }
409
-
410
- /* Navy on Light Grey */
411
- .material-async-initial {
412
- --action: 213, 35.6%, 34.7%;
413
- --on-action: 0, 0%, 75.3%;
414
- --material: 0, 0%, 75.3%;
415
- --on-material: 213, 35.6%, 34.7%;
416
- }
417
-
418
- /* White on Loading Blue */
419
- .material-async-pending {
420
- --action: 0, 0%, 100%;
421
- --on-action: 207, 100%, 50%;
422
- --material: 207, 100%, 50%;
423
- --on-material: 0, 0%, 100%;
382
+ .material {
383
+ background-color: hsl(var(--material));
384
+ color: hsl(var(--on-material));
424
385
  }
425
386
 
426
- /* White on Vivid Green */
427
- .material-async-success {
428
- --action: 0, 0%, 100%;
429
- --on-action: 120, 100%, 50%;
430
- --material: 120, 100%, 50%;
431
- --on-material: 0, 0%, 100%;
387
+ /* ===== SURFACES ===== */
388
+ .tcn-draggable[data-is-draggable="true"] {
389
+ .tcn-drag-handle {
390
+ cursor: move;
391
+ }
432
392
  }
433
393
 
434
- /* White on Red */
435
- .material-async-failed {
436
- --action: 0, 0%, 100%;
437
- --on-action: 0, 100%, 50%;
438
- --material: 0, 100%, 50%;
439
- --on-material: 0, 0%, 100%;
394
+ .tcn-frame[data-is-veil="true"] {
395
+ background-color: rgba(0, 0, 0, 0.5);
440
396
  }
441
397
 
442
- .material {
443
- background-color: hsl(var(--material));
444
- color: hsl(var(--on-material));
398
+ .tcn-tooltip {
399
+ background: rgba(57, 85, 120, 0.85);
400
+ box-shadow: 0px 4px 7px 0px rgba(65, 65, 65, 0.66);
401
+ color: rgba(255, 255, 255, 1);
402
+ border-radius: var(--shape-radius-medium);
403
+ padding: var(--padding-medium);
445
404
  }
446
405
 
447
- /* ===== SURFACES ===== */
448
406
  .tcn-list {
449
407
  gap: var(--gap-medium);
450
408
  .tcn-item {
@@ -454,19 +412,66 @@ legend {
454
412
  }
455
413
  }
456
414
 
457
- .tcn-veil {
415
+ /* Scaffold: */
416
+ .tcn-scaffold {
417
+ --scaffold-v-inset: var(--v-inset, var(--padding-large));
418
+ --scaffold-header-size: var(--header-size, 40px);
419
+ --scaffold-footer-size: var(--footer-size, 40px);
420
+ --scaffold-utility-bar-size: var(--utility-bar-size, 32px);
421
+ --scaffold-divide-footer: var(--divide-footer, 1);
422
+ --scaffold-divide-header: var(--divide-header, 1);
423
+
424
+ :where(.tcn-header) {
425
+ min-height: var(--scaffold-header-size);
426
+ padding: 0 var(--scaffold-v-inset);
427
+ gap: var(--gap-medium);
428
+ }
429
+
430
+ /* Border appears on body only when it follows header or utility-bar */
431
+ :where(.tcn-header) + :where(.tcn-body),
432
+ :where(.tcn-utility-bar) + :where(.tcn-body) {
433
+ border-top: calc(var(--scaffold-divide-header) * 1px) solid
434
+ var(--foreground-color-primary);
435
+ }
436
+
437
+ /* Border appears on footer only when it follows body and --scaffold-divide-footer is 1 */
438
+ :where(.tcn-body) + :where(.tcn-footer) {
439
+ border-top: calc(var(--scaffold-divide-footer) * 1px) solid
440
+ var(--foreground-color-primary);
441
+ }
442
+
443
+ :where(.tcn-utility-bar) {
444
+ min-height: var(--scaffold-utility-bar-size);
445
+ padding: 0 var(--scaffold-v-inset);
446
+ gap: var(--gap-medium);
447
+ }
448
+
449
+ :where(.tcn-body) {
450
+ padding: 0 var(--scaffold-v-inset);
451
+ gap: var(--gap-medium);
452
+ }
453
+
454
+ :where(.tcn-footer) {
455
+ gap: var(--gap-medium);
456
+ min-height: var(--scaffold-footer-size);
457
+ padding: 0 var(--scaffold-v-inset);
458
+ }
459
+ }
460
+
461
+ .tcn-frame-veil[data-is-veil="true"] {
458
462
  background-color: rgba(0, 0, 0, 0.5);
459
463
  }
460
464
 
461
- /* TODO: FIX Borders on modal header and footer -- when there are multiple header/footers */
462
465
  /* MODAL: */
463
466
  .tcn-modal {
464
- --v-inset: var(--padding-large);
465
- background-color: var(--background-color-primary);
466
- border-radius: var(--shape-radius-medium);
467
- /* TODO: This should be a variable */
468
- border: 1px solid rgba(170, 170, 170, 1);
469
- overflow: hidden;
467
+ --divide-header: 0;
468
+
469
+ :where(.tcn-scaffold) {
470
+ border-radius: var(--shape-radius-medium);
471
+ background-color: var(--background-color-primary);
472
+ overflow: hidden;
473
+ border: 1px solid var(--foreground-color-primary);
474
+ }
470
475
 
471
476
  :where(.tcn-typography) {
472
477
  color: inherit;
@@ -479,111 +484,114 @@ legend {
479
484
  --on-action: 0, 0%, 100%;
480
485
  background-color: hsl(var(--material));
481
486
  color: hsl(var(--on-material));
482
- min-height: 40px;
483
- padding: 0 var(--v-inset);
484
- gap: var(--gap-medium);
485
-
486
- :where(.tcn-divider) {
487
- padding: 4px 0;
488
- :where(.tcn-divider-line) {
489
- width: 1.5px;
490
- min-height: 18px;
491
- height: auto;
492
- }
493
- }
494
487
  }
495
488
 
496
489
  :where(.tcn-utility-bar) {
497
- min-height: 32px;
498
- border-bottom: 1px solid var(--foreground-color-primary);
499
- padding: 0 var(--v-inset);
500
-
501
- :where(.tcn-button) {
502
- padding: 0;
503
- min-width: 18px;
504
- min-height: 18px;
505
- }
490
+ --material: var(--material-secondary-dark);
491
+ --on-material: 0, 0%, 100%;
492
+ --action: var(--material-tan);
493
+ --on-action: 0, 0%, 100%;
494
+ background-color: hsl(var(--material));
495
+ color: hsl(var(--on-material));
506
496
  }
497
+ }
507
498
 
508
- :where(.tcn-body) {
509
- padding: 0 var(--v-inset);
510
- gap: var(--gap-medium);
511
- }
499
+ /* WINDOW: */
500
+ .tcn-window {
501
+ --divide-header: 0;
512
502
 
513
- :where(.tcn-footer) {
514
- gap: var(--gap-medium);
515
- min-height: 40px;
516
- border-top: 1px solid var(--foreground-color-primary);
517
- padding: 0 var(--v-inset);
503
+ :where(.tcn-scaffold) {
504
+ box-shadow: 0px 4px 34px 0px #00000096;
505
+ border-radius: var(--shape-radius-medium);
506
+ background-color: var(--background-color-primary);
507
+ overflow: hidden;
508
+ border: 2px solid white;
518
509
  }
519
- }
520
510
 
521
- /* PANEL */
522
- .tcn-panel {
523
- --v-inset: var(--padding-large);
524
- background-color: var(--background-color-primary);
525
- border-radius: var(--shape-radius-medium);
526
- overflow: hidden;
511
+ :where(.tcn-typography) {
512
+ color: inherit;
513
+ }
527
514
 
528
515
  :where(.tcn-header) {
529
- min-height: 40px;
530
- padding: 0 var(--v-inset);
531
- gap: var(--gap-medium);
516
+ --material: var(--material-secondary-dark);
517
+ --on-material: 0, 0%, 100%;
518
+ --action: var(--material-tan);
519
+ --on-action: 0, 0%, 100%;
520
+ background-color: hsl(var(--material));
521
+ color: hsl(var(--on-material));
522
+ }
532
523
 
533
- :where(.tcn-title) {
534
- font-weight: 700;
535
- }
536
-
537
- :where(.tcn-divider) {
538
- padding: 4px 0;
539
- :where(.tcn-divider-line) {
540
- width: 1.5px;
541
- min-height: 18px;
542
- height: auto;
543
- }
544
- }
524
+ :where(.tcn-utility-bar) {
525
+ --material: var(--material-secondary-dark);
526
+ --on-material: 0, 0%, 100%;
527
+ --action: var(--material-tan);
528
+ --on-action: 0, 0%, 100%;
529
+ background-color: hsl(var(--material));
530
+ color: hsl(var(--on-material));
545
531
  }
532
+ }
546
533
 
547
- /* Border appears on body only when it follows header or utility-bar */
548
- :where(.tcn-header) + :where(.tcn-body),
549
- :where(.tcn-utility-bar) + :where(.tcn-body) {
550
- border-top: 1px solid var(--foreground-color-primary);
534
+ .tcn-pop-confirm {
535
+ --divide-header: 0;
536
+ --v-inset: var(--padding-medium);
537
+
538
+ :where(.tcn-scaffold) {
539
+ box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.4);
540
+ border-radius: var(--shape-radius-medium);
541
+ background-color: var(--background-color-primary);
542
+ overflow: hidden;
551
543
  }
552
544
 
553
- /* Border appears on footer only when it follows body */
554
- :where(.tcn-body) + :where(.tcn-footer) {
555
- border-top: 1px solid var(--foreground-color-primary);
545
+ :where(.tcn-typography) {
546
+ color: inherit;
556
547
  }
557
548
 
558
- :where(.tcn-utility-bar) {
549
+ :where(.tcn-header) {
559
550
  min-height: 32px;
560
- padding: 0 var(--v-inset);
551
+ --material: var(--material-secondary-dark);
552
+ --on-material: 0, 0%, 100%;
553
+ --action: var(--material-tan);
554
+ --on-action: 0, 0%, 100%;
555
+ background-color: hsl(var(--material));
556
+ color: hsl(var(--on-material));
561
557
  }
562
558
 
563
- :where(.tcn-body) {
564
- padding: 0 var(--v-inset);
565
- gap: var(--gap-medium);
559
+ :where(.tcn-utility-bar) {
560
+ --material: var(--material-secondary-dark);
561
+ --on-material: 0, 0%, 100%;
562
+ --action: var(--material-tan);
563
+ --on-action: 0, 0%, 100%;
564
+ background-color: hsl(var(--material));
565
+ color: hsl(var(--on-material));
566
566
  }
567
+ }
567
568
 
568
- :where(.tcn-footer) {
569
- gap: var(--gap-medium);
570
- min-height: 40px;
571
- padding: 0 var(--v-inset);
572
- }
569
+ /* PANEL */
570
+ .tcn-panel {
571
+ background-color: var(--background-color-primary);
572
+ border-radius: var(--shape-radius-medium);
573
+ overflow: hidden;
573
574
  }
574
575
 
575
576
  /* Card */
576
577
  .tcn-card {
577
- padding: 0;
578
- gap: 0px;
579
- border: 1px solid var(--foreground-color-primary);
578
+ --header-size: 32px;
579
+ --footer-size: 32px;
580
+ --utility-bar-size: 24px;
581
+ --divide-header: 0;
582
+
583
+ background-color: var(--background-color-primary);
580
584
  border-radius: var(--shape-radius-medium);
585
+ border: 1px solid var(--foreground-color-primary);
581
586
  overflow: hidden;
587
+
582
588
  :where(.tcn-header) {
583
- /* TODO: Color header */
584
- min-height: 32px;
589
+ /* TODO: This should be a variable */
590
+ background-color: #ecf4fb;
585
591
  }
586
- :where(.tcn-body) {
587
- padding: var(--padding-medium) var(--v-inset);
592
+
593
+ :where(.tcn-utility-bar) {
594
+ /* TODO: This should be a variable */
595
+ background-color: #ecf4fb;
588
596
  }
589
597
  }
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { forwardRef } from 'react';
2
2
  import { clsx } from 'clsx';
3
3
  import type { WithDetailedHTMLProps } from '../../stacks/types/as.js';
4
4
  import type { Emphasis, Hierarchy, Size } from '../../utils/index.js';
@@ -21,22 +21,25 @@ export interface TitleOwnProps {
21
21
 
22
22
  export type TitleProps = WithDetailedHTMLProps<TitleOwnProps, 'h1' | 'h2' | 'h3'>;
23
23
 
24
- export function Title({
25
- size = 'md',
26
- emphasis = 'normal',
27
- hierarchy = 'primary',
28
- color,
29
- children,
30
- className,
31
- style = {},
32
- padStart,
33
- padEnd,
34
- padBottom,
35
- padTop,
36
- pad,
37
- selectable = true,
38
- as,
39
- }: TitleProps) {
24
+ export const Title = forwardRef<HTMLHeadingElement, TitleProps>(function Title(
25
+ {
26
+ size = 'md',
27
+ emphasis = 'normal',
28
+ hierarchy = 'primary',
29
+ color,
30
+ children,
31
+ className,
32
+ style = {},
33
+ padStart,
34
+ padEnd,
35
+ padBottom,
36
+ padTop,
37
+ pad,
38
+ selectable = true,
39
+ as,
40
+ },
41
+ ref
42
+ ) {
40
43
  let As: React.ElementType = as as React.ElementType;
41
44
 
42
45
  if (as == null) {
@@ -75,6 +78,7 @@ export function Title({
75
78
 
76
79
  return (
77
80
  <As
81
+ ref={ref}
78
82
  data-hierarchy={hierarchy}
79
83
  data-emphasis={emphasis}
80
84
  data-selectable={selectable}
@@ -85,4 +89,4 @@ export function Title({
85
89
  {children}
86
90
  </As>
87
91
  );
88
- }
92
+ });
@@ -19,7 +19,7 @@ const touchMap = {
19
19
  onTouchEnd: 'touchend',
20
20
  };
21
21
 
22
- function isEventWithinElement(
22
+ export function isEventWithinElement(
23
23
  event: MouseEvent | TouchEvent,
24
24
  node: HTMLElement | null,
25
25
  activated: boolean,
@@ -0,0 +1,48 @@
1
+ import { Draggable } from '../draggable/draggable.js';
2
+ import { VStack } from '../../../stacks/v_stack.js';
3
+ import { DragHandle } from '../handle.js';
4
+ import { Box } from '../../../stacks/box/box.js';
5
+ import { BodyText } from '../../../typography/index.js';
6
+ import styles from './draggable_stories.module.css';
7
+
8
+ export default {
9
+ title: 'Utils/Draggable',
10
+ component: Draggable,
11
+ tags: ['autodocs'],
12
+ };
13
+
14
+ export const DraggableStory = () => {
15
+ return (
16
+ <VStack minHeight="600px" height="100%" width="100%">
17
+ <Draggable>
18
+ <Box width="400px" height="300px" className={styles['handle-container']}>
19
+ <DragHandle>
20
+ <Box
21
+ className={styles.handle}
22
+ width="100px"
23
+ style={{
24
+ top: 50,
25
+ left: 100,
26
+ }}
27
+ >
28
+ <BodyText>Drag Handle</BodyText>
29
+ </Box>
30
+ </DragHandle>
31
+
32
+ <DragHandle>
33
+ <Box
34
+ className={styles.handle}
35
+ width="150px"
36
+ style={{
37
+ top: 200,
38
+ left: 50,
39
+ }}
40
+ >
41
+ <BodyText>Another Drag Handle</BodyText>
42
+ </Box>
43
+ </DragHandle>
44
+ </Box>
45
+ </Draggable>
46
+ </VStack>
47
+ );
48
+ };
@@ -0,0 +1,21 @@
1
+ .handle {
2
+ position: relative;
3
+ background: var(--accent-color);
4
+ color: white;
5
+ font-weight: bold;
6
+ border: 2px solid black;
7
+ padding: var(--padding-medium);
8
+ border-radius: var(--shape-radius-medium);
9
+ }
10
+
11
+ .handle-container {
12
+ background: #f7e9fe;
13
+ padding: var(--padding-medium);
14
+ border-radius: var(--shape-radius-large);
15
+ }
16
+
17
+ .handle-container[data-is-dragging="true"] {
18
+ box-shadow:
19
+ 0 4px 16px 0 rgba(25, 118, 210, 0.2),
20
+ 0 1.5px 4px 0 rgba(21, 101, 192, 0.15);
21
+ }