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.
 
 
 

122 lines
3.1 KiB

  1. import * as React from 'react';
  2. export interface RootProps extends React.HTMLProps<HTMLDivElement> {
  3. sidebarBaseWidget?: React.ReactNode;
  4. topBarWidget?: React.ReactNode;
  5. };
  6. export const Root = React.forwardRef<HTMLDivElement, RootProps>(({
  7. children,
  8. topBarWidget,
  9. sidebarBaseWidget,
  10. ...etcProps
  11. }, ref) => (
  12. <>
  13. {topBarWidget}
  14. {sidebarBaseWidget}
  15. <div
  16. {...etcProps}
  17. ref={ref}
  18. data-viewfinder="main"
  19. className="box-border pb-menu md:pb-0 md:pl-[calc(50%-(var(--base-width)*0.5))]"
  20. >
  21. {children}
  22. </div>
  23. </>
  24. ));
  25. export interface ContentContainerProps extends React.HTMLProps<HTMLDivElement> {}
  26. export const MainContentContainer = React.forwardRef<HTMLDivElement, ContentContainerProps>(({
  27. children,
  28. }, ref) => (
  29. <div
  30. className="px-8 box-border w-full max-w-[calc(var(--base-width)*2)] mx-auto md:ml-0"
  31. ref={ref}
  32. >
  33. {children}
  34. </div>
  35. ));
  36. MainContentContainer.displayName = 'MainContentContainer'
  37. export interface SidebarMainContainerProps extends React.HTMLProps<HTMLDivElement> {}
  38. export const SidebarContentContainer = React.forwardRef<HTMLDivElement, SidebarMainContainerProps>(({
  39. children,
  40. ...etcProps
  41. }, ref) => (
  42. <div
  43. {...etcProps}
  44. className="px-8 box-border w-full max-w-[calc(var(--base-width)*2)] mx-auto md:max-w-none"
  45. ref={ref}
  46. >
  47. {children}
  48. </div>
  49. ));
  50. SidebarContentContainer.displayName = 'SidebarMainContainer';
  51. export interface SidebarMenuItemIconProps extends React.HTMLProps<HTMLSpanElement> {}
  52. export const SidebarMenuItemIcon = React.forwardRef<HTMLSpanElement, SidebarMenuItemIconProps>(({
  53. children,
  54. ...etcProps
  55. }, ref) => (
  56. <span
  57. {...etcProps}
  58. className="block md:w-menu md:h-menu md:flex md:justify-center md:items-center"
  59. ref={ref}
  60. >
  61. {children}
  62. </span>
  63. ));
  64. SidebarMenuItemIcon.displayName = 'SidebarMenuItemIcon';
  65. export const SidebarMenuContainer = React.forwardRef<HTMLSpanElement, SidebarMainContainerProps>(({
  66. children,
  67. ...etcProps
  68. }, ref) => (
  69. <span
  70. {...etcProps}
  71. className="box-border flex flex-col justify-center items-center w-full text-center md:justify-start md:ml-auto md:text-left md:w-[var(--base-width)] md:flex-row"
  72. ref={ref}
  73. >
  74. {children}
  75. </span>
  76. ));
  77. SidebarMenuContainer.displayName = 'SidebarMenuContainer';
  78. export const MoreSidebarMenuItemIcon = React.forwardRef<HTMLSpanElement, SidebarMenuItemIconProps>(({
  79. children,
  80. ...etcProps
  81. }, ref) => (
  82. <span
  83. {...etcProps}
  84. className="block mr-4 md:w-menu md:h-menu md:flex md:justify-center md:items-center md:mr-0"
  85. ref={ref}
  86. >
  87. {children}
  88. </span>
  89. ));
  90. MoreSidebarMenuItemIcon.displayName = 'MoreSidebarMenuItemIcon';
  91. export const MoreSidebarMenuContainer = React.forwardRef<HTMLSpanElement, SidebarMainContainerProps>(({
  92. children,
  93. ...etcProps
  94. }, ref) => (
  95. <span
  96. {...etcProps}
  97. className="flex justify-start items-center w-[calc(var(--base-width)*2)] mx-auto px-8 text-left box-border md:mr-0 md:w-[var(--base-width)] md:pl-0"
  98. ref={ref}
  99. >
  100. {children}
  101. </span>
  102. ));
  103. MoreSidebarMenuContainer.displayName = 'MoreSidebarMenuContainer';