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.
 
 
 

74 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. {sidebarBaseWidget}
  17. <div
  18. {...etcProps}
  19. ref={ref}
  20. data-viewfinder="main"
  21. className={clsx(
  22. 'box-border md:pl-[calc(50%-(var(--base-width)*0.5))]',
  23. className,
  24. )}
  25. >
  26. {children}
  27. </div>
  28. </>
  29. ));
  30. export interface ContentContainerProps extends React.HTMLProps<HTMLDivElement> {}
  31. export const MainContentContainer = React.forwardRef<HTMLDivElement, ContentContainerProps>(({
  32. children,
  33. className,
  34. ...etcProps
  35. }, ref) => (
  36. <div
  37. {...etcProps}
  38. className={clsx(
  39. 'px-8 box-border w-full max-w-[calc(var(--base-width)*2)] mx-auto md:ml-0',
  40. className,
  41. )}
  42. ref={ref}
  43. >
  44. {children}
  45. </div>
  46. ));
  47. MainContentContainer.displayName = 'MainContentContainer'
  48. export interface SidebarMainContainerProps extends React.HTMLProps<HTMLDivElement> {}
  49. export const SidebarContentContainer = React.forwardRef<HTMLDivElement, SidebarMainContainerProps>(({
  50. children,
  51. className,
  52. ...etcProps
  53. }, ref) => (
  54. <div
  55. {...etcProps}
  56. className={clsx(
  57. 'w-full mx-auto px-8 box-border max-w-[calc(var(--base-width)*2)] md:w-[var(--base-width)] md:mr-0',
  58. className,
  59. )}
  60. ref={ref}
  61. >
  62. {children}
  63. </div>
  64. ));
  65. SidebarContentContainer.displayName = 'SidebarMainContainer';