Layout scaffolding for Web apps.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

68 行
1.3 KiB

  1. import * as React from 'react';
  2. import {LayoutArgs, Span, widgets} from '@tesseract-design/viewfinder-base';
  3. export type TopBarProps = Omit<React.HTMLProps<HTMLDivElement>, 'span'> & {
  4. span?: Span,
  5. brand?: React.ReactNode,
  6. menuLink?: React.ReactNode,
  7. userLink?: React.ReactNode,
  8. }
  9. export const TopBar = React.forwardRef<HTMLDivElement, TopBarProps>(({
  10. span = Span.NORMAL,
  11. brand,
  12. menuLink,
  13. userLink,
  14. children,
  15. ...etcProps
  16. }, ref) => {
  17. const args: LayoutArgs = {
  18. span,
  19. mainSidebarOpen: false,
  20. auxiliaryItemsShown: false,
  21. };
  22. return (
  23. <div className={widgets.TopBar.Base()}>
  24. <div
  25. {...etcProps}
  26. ref={ref}
  27. >
  28. <div className={widgets.TopBar.Container(args)}>
  29. {
  30. Boolean(brand as unknown)
  31. && (
  32. <div>
  33. {brand}
  34. </div>
  35. )
  36. }
  37. <div className={widgets.TopBar.CenterContainer()}>
  38. {children}
  39. </div>
  40. <div className={widgets.TopBar.ActionContainer()}>
  41. {
  42. Boolean(menuLink as unknown)
  43. && (
  44. <div className={widgets.TopBar.MenuLinkContainer()}>
  45. {menuLink}
  46. </div>
  47. )
  48. }
  49. {
  50. Boolean(userLink as unknown)
  51. && (
  52. <div className={widgets.TopBar.LinkContainer()}>
  53. {userLink}
  54. </div>
  55. )
  56. }
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. )
  62. })
  63. TopBar.displayName = 'TopBar';