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.
 
 
 

381 lines
7.1 KiB

  1. import { css } from '@tesseract-design/goofy-goober';
  2. import {LayoutArgs} from '../common';
  3. export const ContentBase = () => css.cx(
  4. css`
  5. box-sizing: border-box;
  6. padding-bottom: var(--size-menu, 4rem);
  7. `,
  8. css.media('(min-width: 1080px)')(
  9. css`
  10. padding-left: calc(50% - var(--base-width) * 0.5);
  11. padding-bottom: 0;
  12. `,
  13. ),
  14. )
  15. export const SidebarBase = () => css.cx(
  16. css`
  17. box-sizing: border-box;
  18. overflow: hidden;
  19. display: contents;
  20. left: calc(var(--base-width) * -1);
  21. `,
  22. css.media('(min-width: 1080px)')(
  23. css`
  24. position: fixed;
  25. top: 0;
  26. left: 0;
  27. width: calc(50% - var(--base-width) * 0.5);
  28. height: 100%;
  29. display: block;
  30. `,
  31. ),
  32. )
  33. export const SidebarMain = ({
  34. mainSidebarOpen,
  35. }: LayoutArgs) => css.cx(
  36. css`
  37. box-sizing: border-box;
  38. position: fixed;
  39. top: 0;
  40. width: 100%;
  41. height: 100%;
  42. padding-top: inherit;
  43. padding-bottom: var(--size-menu, 4rem);
  44. z-index: 2;
  45. background-color: var(--color-background, white);
  46. > * {
  47. display: block;
  48. width: 100%;
  49. height: 100%;
  50. background-color: var(--color-background, white);
  51. }
  52. `,
  53. css.dynamic({
  54. right: mainSidebarOpen ? 0 : '100%',
  55. }),
  56. css.media('(min-width: 1080px)')(
  57. css`
  58. position: absolute;
  59. right: 0;
  60. width: calc(var(--base-width) - var(--size-menu, 4rem));
  61. margin-left: 0;
  62. padding-bottom: 0;
  63. `,
  64. ),
  65. )
  66. export const SidebarMainOverflow = () => css.cx(
  67. css`
  68. width: 100%;
  69. height: 100%;
  70. overflow: auto; /* overflow: overlay */
  71. scrollbar-width: none;
  72. position: relative;
  73. z-index: 1;
  74. ::-webkit-scrollbar {
  75. display: none;
  76. }
  77. `
  78. )
  79. export const SidebarMenu = () => css.cx(
  80. css`
  81. box-sizing: border-box;
  82. overflow: auto; /* overflow: overlay */
  83. scrollbar-width: none;
  84. ::-webkit-scrollbar {
  85. display: none;
  86. }
  87. position: fixed;
  88. bottom: 0;
  89. left: 0;
  90. width: 100%;
  91. height: var(--size-menu, 4rem);
  92. z-index: 1;
  93. background-color: var(--color-background, white);
  94. > * {
  95. display: block;
  96. width: 100%;
  97. height: 100%;
  98. background-color: var(--color-background, white);
  99. }
  100. `,
  101. css.media('(min-width: 1080px)')(
  102. css`
  103. top: 0;
  104. margin-left: auto;
  105. position: absolute;
  106. height: 100%;
  107. padding-top: inherit;
  108. overflow: auto;
  109. z-index: auto;
  110. `,
  111. ),
  112. );
  113. export const SidebarMenuSize = () => css.cx(
  114. css`
  115. display: flex;
  116. width: 100%;
  117. height: 100%;
  118. max-width: calc(var(--base-width) * 2);
  119. margin: 0 auto;
  120. position: relative;
  121. z-index: 1;
  122. `,
  123. css.media('(min-width: 1080px)')(
  124. css`
  125. max-width: none;
  126. margin-right: 0;
  127. flex-direction: column;
  128. justify-content: space-between;
  129. align-items: flex-end;
  130. `,
  131. ),
  132. );
  133. export const SidebarMenuGroup = () => css.cx(
  134. css`
  135. display: contents;
  136. `,
  137. css.media('(min-width: 1080px)')(
  138. css`
  139. width: 100%;
  140. display: block;
  141. `,
  142. ),
  143. );
  144. export const MoreItems = ({
  145. auxiliaryItemsShown,
  146. }: LayoutArgs) => css.cx(
  147. css`
  148. position: fixed;
  149. top: 0;
  150. width: 100%;
  151. height: 100%;
  152. padding-top: var(--height-topbar, 4rem);
  153. padding-bottom: var(--size-menu, 4rem);
  154. z-index: -1;
  155. box-sizing: border-box;
  156. `,
  157. css.dynamic({
  158. left: auxiliaryItemsShown ? 0 : '-100%',
  159. }),
  160. css.media('(min-width: 1080px)')(
  161. css`
  162. display: contents;
  163. `,
  164. ),
  165. );
  166. export const MoreItemsScroll = () => css.cx(
  167. css`
  168. width: 100%;
  169. height: 100%;
  170. overflow: auto;
  171. background-color: var(--color-background, white);
  172. `,
  173. css.media('(min-width: 1080px)')(
  174. css`
  175. display: contents;
  176. `,
  177. ),
  178. );
  179. export const MorePrimarySidebarMenuGroup = () => css.cx(
  180. css`
  181. display: contents;
  182. `,
  183. css.media('(min-width: 1080px)')(
  184. css`
  185. width: 100%;
  186. display: block;
  187. flex: auto;
  188. `,
  189. ),
  190. );
  191. export const MoreSecondarySidebarMenuGroup = () => css.cx(
  192. css`
  193. display: contents;
  194. `,
  195. css.media('(min-width: 1080px)')(
  196. css`
  197. width: 100%;
  198. display: block;
  199. order: 4;
  200. `,
  201. ),
  202. );
  203. export const SidebarMenuItem = () => css.cx(
  204. css`
  205. width: 0;
  206. flex: auto;
  207. height: var(--size-menu, 4rem);
  208. > * {
  209. height: 100%;
  210. display: flex;
  211. align-items: center;
  212. text-decoration: none;
  213. width: 100%;
  214. }
  215. `,
  216. css.media('(min-width: 1080px)')(
  217. css`
  218. width: auto !important;
  219. flex: 0 1 auto;
  220. > * {
  221. height: auto;
  222. }
  223. `
  224. ),
  225. );
  226. export const MoreSidebarMenuItem = () => css.cx(
  227. css`
  228. height: var(--size-menu, 4rem);
  229. display: block;
  230. > * {
  231. height: 100%;
  232. display: flex;
  233. align-items: center;
  234. text-decoration: none;
  235. width: 100%;
  236. }
  237. `,
  238. css.media('(min-width: 1080px)')(
  239. css`
  240. width: auto !important;
  241. flex: 0 1 auto;
  242. `,
  243. ),
  244. );
  245. export const MoreToggleSidebarMenuItem = () => css.cx(
  246. css`
  247. width: 0;
  248. flex: auto;
  249. height: var(--size-menu, 4rem);
  250. > * {
  251. height: 100%;
  252. display: flex;
  253. align-items: center;
  254. text-decoration: none;
  255. width: 100%;
  256. }
  257. `,
  258. css.media('(min-width: 1080px)')(
  259. css`
  260. display: none;
  261. `,
  262. ),
  263. );
  264. export const SidebarMenuItemIcon = () => css.cx(
  265. css`
  266. display: block;
  267. `,
  268. css.media('(min-width: 1080px)')(
  269. css`
  270. width: var(--size-menu, 4rem);
  271. height: var(--size-menu, 4rem);
  272. display: grid;
  273. place-content: center;
  274. `,
  275. ),
  276. );
  277. export const MoreSidebarMenuItemIcon = () => css.cx(
  278. css`
  279. margin-right: 1rem;
  280. display: block;
  281. `,
  282. css.media('(min-width: 1080px)')(
  283. css`
  284. width: var(--size-menu, 4rem);
  285. height: var(--size-menu, 4rem);
  286. display: grid;
  287. place-content: center;
  288. margin-right: 0;
  289. `,
  290. ),
  291. );
  292. export const SidebarMenuContainer = () => css.cx(
  293. css`
  294. box-sizing: border-box;
  295. display: grid;
  296. place-content: center;
  297. width: 100%;
  298. text-align: center;
  299. `,
  300. css.media('(min-width: 1080px)')(
  301. css`
  302. display: flex;
  303. justify-content: flex-start;
  304. align-items: center;
  305. margin-left: auto;
  306. padding-right: 1rem;
  307. text-align: left;
  308. box-sizing: border-box;
  309. width: var(--base-width);
  310. `,
  311. ),
  312. )
  313. export const MoreSidebarMenuContainer = () => css.cx(
  314. css`
  315. display: flex;
  316. justify-content: flex-start;
  317. align-items: center;
  318. width: calc(var(--base-width) * 2);
  319. margin: 0 auto;
  320. padding: 0 1rem;
  321. text-align: left;
  322. box-sizing: border-box;
  323. `,
  324. css.media('(min-width: 1080px)')(
  325. css`
  326. margin-right: 0;
  327. width: var(--base-width);
  328. padding-left: 0;
  329. `,
  330. ),
  331. );
  332. export const ContentContainer = () => css.cx(
  333. css`
  334. padding: 0 1rem;
  335. box-sizing: border-box;
  336. width: 100%;
  337. max-width: calc(var(--base-width) * 2);
  338. margin-right: auto;
  339. margin-left: auto;
  340. `,
  341. css.media('(min-width: 1080px)')(
  342. css`
  343. margin-left: 0;
  344. `,
  345. ),
  346. );
  347. export const SidebarMainContainer = () => css.cx(
  348. css`
  349. padding: 0 1rem;
  350. box-sizing: border-box;
  351. width: 100%;
  352. max-width: calc(var(--base-width) * 2);
  353. margin: 0 auto;
  354. `,
  355. css.media('(min-width: 1080px)')(
  356. css`
  357. max-width: none;
  358. `,
  359. ),
  360. );