1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2023 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport m from 'mithril'; 16*6dbdd20aSAndroid Build Coastguard Worker 17*6dbdd20aSAndroid Build Coastguard Worker// GridLayout is a container that arranges elements into a two-column grid when 18*6dbdd20aSAndroid Build Coastguard Worker// the screen is wide, and a single column when the screen is narrow. 19*6dbdd20aSAndroid Build Coastguard Worker// Consider the following layout (where A, B, C, and D are arbitrary components) 20*6dbdd20aSAndroid Build Coastguard Worker// m(GridLayout, A, B, C, D) 21*6dbdd20aSAndroid Build Coastguard Worker// 22*6dbdd20aSAndroid Build Coastguard Worker// On a wide screen we get: 23*6dbdd20aSAndroid Build Coastguard Worker// ┌─────────┐ ┌─────────┐ 24*6dbdd20aSAndroid Build Coastguard Worker// │ A │ │ B │ 25*6dbdd20aSAndroid Build Coastguard Worker// │ │ └─────────┘ 26*6dbdd20aSAndroid Build Coastguard Worker// │ │ 27*6dbdd20aSAndroid Build Coastguard Worker// └─────────┘ 28*6dbdd20aSAndroid Build Coastguard Worker// ┌─────────┐ ┌─────────┐ 29*6dbdd20aSAndroid Build Coastguard Worker// │ C │ │ D │ 30*6dbdd20aSAndroid Build Coastguard Worker// │ │ │ │ 31*6dbdd20aSAndroid Build Coastguard Worker// │ │ └─────────┘ 32*6dbdd20aSAndroid Build Coastguard Worker// └─────────┘ 33*6dbdd20aSAndroid Build Coastguard Worker// 34*6dbdd20aSAndroid Build Coastguard Worker// And on a narrow screen we get: 35*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 36*6dbdd20aSAndroid Build Coastguard Worker// │ A │ 37*6dbdd20aSAndroid Build Coastguard Worker// │ │ 38*6dbdd20aSAndroid Build Coastguard Worker// │ │ 39*6dbdd20aSAndroid Build Coastguard Worker// └─────┘ 40*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 41*6dbdd20aSAndroid Build Coastguard Worker// │ B │ 42*6dbdd20aSAndroid Build Coastguard Worker// └────-┘ 43*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 44*6dbdd20aSAndroid Build Coastguard Worker// │ C │ 45*6dbdd20aSAndroid Build Coastguard Worker// │ │ 46*6dbdd20aSAndroid Build Coastguard Worker// │ │ 47*6dbdd20aSAndroid Build Coastguard Worker// └─────┘ 48*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 49*6dbdd20aSAndroid Build Coastguard Worker// │ D │ 50*6dbdd20aSAndroid Build Coastguard Worker// │ │ 51*6dbdd20aSAndroid Build Coastguard Worker// └─────┘ 52*6dbdd20aSAndroid Build Coastguard Workerexport class GridLayout implements m.ClassComponent { 53*6dbdd20aSAndroid Build Coastguard Worker view({children}: m.Vnode) { 54*6dbdd20aSAndroid Build Coastguard Worker return m('div.pf-grid-layout', children); 55*6dbdd20aSAndroid Build Coastguard Worker } 56*6dbdd20aSAndroid Build Coastguard Worker} 57*6dbdd20aSAndroid Build Coastguard Worker 58*6dbdd20aSAndroid Build Coastguard Worker// ColumnLayouts can be used inside a GridLayout to group elements together 59*6dbdd20aSAndroid Build Coastguard Worker// vertically and to acheive a more aesthetically pleasing vertical spacing of 60*6dbdd20aSAndroid Build Coastguard Worker// elements in the same column. 61*6dbdd20aSAndroid Build Coastguard Worker// Consider the same example from above but instead the elements are placed 62*6dbdd20aSAndroid Build Coastguard Worker// inside columns. 63*6dbdd20aSAndroid Build Coastguard Worker// m(GridLayout, m(Column, A, C), m(Column, B, D)) 64*6dbdd20aSAndroid Build Coastguard Worker// 65*6dbdd20aSAndroid Build Coastguard Worker// On a wide screen we get: 66*6dbdd20aSAndroid Build Coastguard Worker// ┌─────────┐ ┌─────────┐ 67*6dbdd20aSAndroid Build Coastguard Worker// │ A │ │ B │ 68*6dbdd20aSAndroid Build Coastguard Worker// │ │ └─────────┘ 69*6dbdd20aSAndroid Build Coastguard Worker// │ │ ┌─────────┐ <- This gap has disappeared 70*6dbdd20aSAndroid Build Coastguard Worker// └─────────┘ │ D │ 71*6dbdd20aSAndroid Build Coastguard Worker// ┌─────────┐ │ │ 72*6dbdd20aSAndroid Build Coastguard Worker// │ C │ └─────────┘ 73*6dbdd20aSAndroid Build Coastguard Worker// │ │ 74*6dbdd20aSAndroid Build Coastguard Worker// │ │ 75*6dbdd20aSAndroid Build Coastguard Worker// └─────────┘ 76*6dbdd20aSAndroid Build Coastguard Worker// 77*6dbdd20aSAndroid Build Coastguard Worker// And on a narrow screen we get: 78*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 79*6dbdd20aSAndroid Build Coastguard Worker// │ A │ 80*6dbdd20aSAndroid Build Coastguard Worker// │ │ 81*6dbdd20aSAndroid Build Coastguard Worker// │ │ 82*6dbdd20aSAndroid Build Coastguard Worker// └─────┘ 83*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 84*6dbdd20aSAndroid Build Coastguard Worker// │ C │ 85*6dbdd20aSAndroid Build Coastguard Worker// │ │ 86*6dbdd20aSAndroid Build Coastguard Worker// │ │ 87*6dbdd20aSAndroid Build Coastguard Worker// └─────┘ 88*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 89*6dbdd20aSAndroid Build Coastguard Worker// │ B │ 90*6dbdd20aSAndroid Build Coastguard Worker// └────-┘ 91*6dbdd20aSAndroid Build Coastguard Worker// ┌─────┐ 92*6dbdd20aSAndroid Build Coastguard Worker// │ D │ 93*6dbdd20aSAndroid Build Coastguard Worker// │ │ 94*6dbdd20aSAndroid Build Coastguard Worker// └─────┘ 95*6dbdd20aSAndroid Build Coastguard Worker// 96*6dbdd20aSAndroid Build Coastguard Worker// The gap between column elements are the same size as the gaps in the grid 97*6dbdd20aSAndroid Build Coastguard Worker// layout, so we get keep spacing between all elements in the grid. 98*6dbdd20aSAndroid Build Coastguard Workerexport class GridLayoutColumn implements m.ClassComponent { 99*6dbdd20aSAndroid Build Coastguard Worker view({children}: m.Vnode) { 100*6dbdd20aSAndroid Build Coastguard Worker return m('div.pf-grid-layout-column', children); 101*6dbdd20aSAndroid Build Coastguard Worker } 102*6dbdd20aSAndroid Build Coastguard Worker} 103