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.
 
 
 

153 lines
3.4 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 pb-menu md:pb-0 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. 'px-8 box-border w-full max-w-[calc(var(--base-width)*2)] mx-auto md:max-w-none',
  58. className,
  59. )}
  60. ref={ref}
  61. >
  62. {children}
  63. </div>
  64. ));
  65. SidebarContentContainer.displayName = 'SidebarMainContainer';
  66. export interface SidebarMenuItemIconProps extends React.HTMLProps<HTMLSpanElement> {}
  67. export const SidebarMenuItemIcon = React.forwardRef<HTMLSpanElement, SidebarMenuItemIconProps>(({
  68. children,
  69. className,
  70. ...etcProps
  71. }, ref) => (
  72. <span
  73. {...etcProps}
  74. className={clsx(
  75. 'block md:w-menu md:h-menu md:flex md:justify-center md:items-center',
  76. className,
  77. )}
  78. ref={ref}
  79. >
  80. {children}
  81. </span>
  82. ));
  83. SidebarMenuItemIcon.displayName = 'SidebarMenuItemIcon';
  84. export const SidebarMenuContainer = React.forwardRef<HTMLSpanElement, SidebarMainContainerProps>(({
  85. children,
  86. className,
  87. ...etcProps
  88. }, ref) => (
  89. <span
  90. {...etcProps}
  91. className={clsx(
  92. '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',
  93. className,
  94. )}
  95. ref={ref}
  96. >
  97. {children}
  98. </span>
  99. ));
  100. SidebarMenuContainer.displayName = 'SidebarMenuContainer';
  101. export const MoreSidebarMenuItemIcon = React.forwardRef<HTMLSpanElement, SidebarMenuItemIconProps>(({
  102. children,
  103. className,
  104. ...etcProps
  105. }, ref) => (
  106. <span
  107. {...etcProps}
  108. className={clsx(
  109. 'block mr-4 md:w-menu md:h-menu md:flex md:justify-center md:items-center md:mr-0',
  110. className,
  111. )}
  112. ref={ref}
  113. >
  114. {children}
  115. </span>
  116. ));
  117. MoreSidebarMenuItemIcon.displayName = 'MoreSidebarMenuItemIcon';
  118. export const MoreSidebarMenuContainer = React.forwardRef<HTMLSpanElement, SidebarMainContainerProps>(({
  119. children,
  120. className,
  121. ...etcProps
  122. }, ref) => (
  123. <span
  124. {...etcProps}
  125. className={clsx(
  126. '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',
  127. className,
  128. )}
  129. ref={ref}
  130. >
  131. {children}
  132. </span>
  133. ));
  134. MoreSidebarMenuContainer.displayName = 'MoreSidebarMenuContainer';