96 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Vue
		
	
	
	
| <template>
 | |
|     <div class="sites">
 | |
|         <ul class="nolist tiles">
 | |
|             <li
 | |
|                 v-for="site in sites"
 | |
|                 :key="`site-${site.id}`"
 | |
|                 class="site"
 | |
|             >
 | |
|                 <SiteTile :site="site" />
 | |
|             </li>
 | |
|         </ul>
 | |
|     </div>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| import SiteTile from '../tile/site.vue';
 | |
| 
 | |
| export default {
 | |
|     components: {
 | |
|         SiteTile,
 | |
|     },
 | |
|     props: {
 | |
|         network: {
 | |
|             type: Object,
 | |
|             default: null,
 | |
|         },
 | |
|         sites: {
 | |
|             type: Array,
 | |
|             default: () => [],
 | |
|         },
 | |
|     },
 | |
| };
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
| @import 'theme';
 | |
| 
 | |
| .sites {
 | |
|     overflow: hidden;
 | |
|     display: flex;
 | |
|     flex-grow: 1;
 | |
| 
 | |
|     &.compact:not(.expanded) {
 | |
|         flex-direction: row;
 | |
| 
 | |
|         .tiles {
 | |
|             display: flex;
 | |
|             overflow-x: auto;
 | |
|         }
 | |
| 
 | |
|         .tile {
 | |
|             width: 15rem;
 | |
|             margin: 0 1rem 0 0;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     &.expanded {
 | |
|         .tiles {
 | |
|             grid-template-columns: repeat(auto-fit, minmax(15rem, .5fr));
 | |
|         }
 | |
| 
 | |
|         &.compact .tiles {
 | |
|             padding: 0 1rem 1rem 1rem;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| .tiles {
 | |
|     display: grid;
 | |
|     grid-gap: 0 1rem;
 | |
|     flex-grow: 1;
 | |
|     padding: 1rem;
 | |
|     grid-template-columns: 1fr;
 | |
|     grid-template-rows: min-content;
 | |
|     overflow-y: auto;
 | |
|     scrollbar-color: $highlight-weak $profile;
 | |
| }
 | |
| 
 | |
| .site {
 | |
|     /* vertical grid-gap not compatible with bottom padding on scrolling containers */
 | |
|     margin: 0 0 1rem 0;
 | |
| }
 | |
| 
 | |
| @media(max-width: $breakpoint3) {
 | |
|     .sites.expanded .tiles {
 | |
|         grid-template-columns: repeat(auto-fit, minmax(12rem, .5fr));
 | |
|     }
 | |
| }
 | |
| 
 | |
| @media(max-width: $breakpoint0) {
 | |
|     .sites.expanded .tiles {
 | |
|         grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
 | |
|     }
 | |
| }
 | |
| </style>
 |