Layout scaffolding for Web apps.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

77 lines
1.6 KiB

  1. import * as React from 'react';
  2. import clsx from 'clsx';
  3. export interface RootProps extends React.HTMLProps<HTMLDivElement> {
  4. sidebarBaseWidget?: React.ReactNode;
  5. topBarWidget?: React.ReactNode;
  6. }
  7. export const Root = React.forwardRef<HTMLDivElement, RootProps>(({
  8. children,
  9. topBarWidget,
  10. sidebarBaseWidget,
  11. className,
  12. ...etcProps
  13. }, ref) => (
  14. <>
  15. {topBarWidget}
  16. <div
  17. {...etcProps}
  18. ref={ref}
  19. data-viewfinder="main"
  20. className={clsx(
  21. 'box-border md:pr-[calc(50%-(var(--base-width)*0.5))]',
  22. className,
  23. )}
  24. >
  25. {children}
  26. </div>
  27. {sidebarBaseWidget}
  28. </>
  29. ))
  30. Root.displayName = 'Root';
  31. export interface ContentContainerProps extends React.HTMLProps<HTMLDivElement> {}
  32. export const MainContentContainer = React.forwardRef<HTMLDivElement, ContentContainerProps>(({
  33. children,
  34. className,
  35. ...etcProps
  36. }, ref) => (
  37. <div
  38. {...etcProps}
  39. className={clsx(
  40. 'px-8 box-border w-full max-w-[calc(var(--base-width)*2)] mx-auto md:mr-0',
  41. className,
  42. )}
  43. ref={ref}
  44. >
  45. {children}
  46. </div>
  47. ));
  48. MainContentContainer.displayName = 'MainContentContainer';
  49. export interface SidebarMainContainerProps extends React.HTMLProps<HTMLDivElement> {}
  50. export const SidebarContentContainer = React.forwardRef<HTMLDivElement, SidebarMainContainerProps>(({
  51. children,
  52. className,
  53. ...etcProps
  54. }, ref) => (
  55. <div
  56. {...etcProps}
  57. className={clsx(
  58. 'px-8 box-border w-full max-w-[calc(var(--base-width)*2)] mx-auto md:ml-0 md:w-[var(--base-width)]',
  59. className,
  60. )}
  61. ref={ref}
  62. >
  63. {children}
  64. </div>
  65. ));
  66. SidebarContentContainer.displayName = 'SidebarMainContainer';