blob: c18ef16a5a8ca5e6e6353c9133bdea9942647392 [file] [log] [blame]
// Copyright (C) 2023 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import m from 'mithril';
// GridLayout is a container that arranges elements into a two-column grid when
// the screen is wide, and a single column when the screen is narrow.
// Consider the following layout (where A, B, C, and D are arbitrary components)
// m(GridLayout, A, B, C, D)
//
// On a wide screen we get:
// ┌─────────┐ ┌─────────┐
// │ A │ │ B │
// │ │ └─────────┘
// │ │
// └─────────┘
// ┌─────────┐ ┌─────────┐
// │ C │ │ D │
// │ │ │ │
// │ │ └─────────┘
// └─────────┘
//
// And on a narrow screen we get:
// ┌─────┐
// │ A │
// │ │
// │ │
// └─────┘
// ┌─────┐
// │ B │
// └────-┘
// ┌─────┐
// │ C │
// │ │
// │ │
// └─────┘
// ┌─────┐
// │ D │
// │ │
// └─────┘
export class GridLayout implements m.ClassComponent {
view({children}: m.Vnode) {
return m('div.pf-grid-layout', children);
}
}
// ColumnLayouts can be used inside a GridLayout to group elements together
// vertically and to acheive a more aesthetically pleasing vertical spacing of
// elements in the same column.
// Consider the same example from above but instead the elements are placed
// inside columns.
// m(GridLayout, m(Column, A, C), m(Column, B, D))
//
// On a wide screen we get:
// ┌─────────┐ ┌─────────┐
// │ A │ │ B │
// │ │ └─────────┘
// │ │ ┌─────────┐ <- This gap has disappeared
// └─────────┘ │ D │
// ┌─────────┐ │ │
// │ C │ └─────────┘
// │ │
// │ │
// └─────────┘
//
// And on a narrow screen we get:
// ┌─────┐
// │ A │
// │ │
// │ │
// └─────┘
// ┌─────┐
// │ C │
// │ │
// │ │
// └─────┘
// ┌─────┐
// │ B │
// └────-┘
// ┌─────┐
// │ D │
// │ │
// └─────┘
//
// The gap between column elements are the same size as the gaps in the grid
// layout, so we get keep spacing between all elements in the grid.
export class GridLayoutColumn implements m.ClassComponent {
view({children}: m.Vnode) {
return m('div.pf-grid-layout-column', children);
}
}