summaryrefslogtreecommitdiff
path: root/docs/themes/customize.md
blob: 763333d96e6f4f08262db16d58ea63e72c747fd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# How to customize
Customization of the application requires knowledge of Sass and CSS. It also
will require becoming familiar with the Bootstrap and Bootstrap-Vue component
libraries. This section outlines the global options and variables that can be
removed or updated to meet organizational brand guidelines.

## Environment specific builds
Any organization can create a build that meets their branding and other
customization needs. This includes customization of the state store, routing,
application navigation, and theming.

### Configuring environment specific builds
The complete instructions can be found in the `env` directory in a file called
env.md or by viewing the [Configuring environment specific builds
page](./env.md)

## Bootstrap Sass Options
The Bootstrap Sass options are global styling toggles. The naming convention for
these built-in variables is `enabled-*`.

### $enable-rounded
This option enables or disables the border-radius styles on various components.

- Set to `false` to remove rounded corners on all container elements and buttons

### $enable-validation-icons
This option enables or disables background-image icons within textual inputs and
some custom forms for validation states.

- Set to `false` due to inability to style icons using CSS

### More information
- [View all the Bootstrap Sass
  Options](https://getbootstrap.com/docs/4.2/getting-started/theming/#sass-options)

## Bootstrap Sass Variables
These are global variables that Bootstrap defines in the
`/node_modules/bootstrap/scss/variables.scss` helper file. Adding a variable
listed in this file to the `/src/assets/styles/bmc/helpers/_variables.scss` file
will override the Bootstrap defined value.

### $transition-base
This variable sets the base CSS transition style throughout the application.
- Set to `all $duration--moderate-02 $standard-easing--productive`

### $transition-fade
This variable sets the transition when showing and hiding elements.

- Set to `opacity $duration--moderate-01 $standard-easing--productive`

### $transition-collapse
This variable sets the CSS transitions throughout the application when expanding
and collapsing elements.

- Set to `height $duration--slow-01 $standard-easing--expressive`

### More Information
- [Carbon Design System Motion
  Guidelines](https://www.carbondesignsystem.com/guidelines/motion/basics/)
- [Including Animation In Your Design
  System](https://www.smashingmagazine.com/2019/02/animation-design-system/)

## OpenBMC Custom Sass Options

### $responsive-layout-bp
This variable determines when the primary navigation is hidden and when the
hamburger menu is displayed. The breakpoint is defined using a Bootstrap
function that only accepts a key from the Bootstrap `$grid-breakpoints` map.

- xs - Navigation is always displayed
- sm - Navigation displayed when the viewport is greater than 576px
- md - Navigation displayed when the viewport is greater than 768px
- lg - Navigation displayed when the viewport is greater than 992px
- xl - Navigation displayed when the viewport is less than 1200px

#### Responsive Resources
- [Bootstrap responsive
  breakpoints](https://getbootstrap.com/docs/4.0/layout/overview/#responsive-breakpoints)
- [Bootstrap Sass
  Mixins](https://getbootstrap.com/docs/4.0/layout/overview/#responsive-breakpoints)
- [Customizing the Bootstrap
  Grid](https://getbootstrap.com/docs/4.0/layout/overview/#responsive-breakpoints)

### $header-height
This variable determines the height of the OpenBMC Web UI header element.

- Default value: 56px

### $navigation-width
This variable determines the width of the primary navigation menu when expanded.

- Default value: 300px

### $container-bgd
This option sets the background of page containers. Changing the value of this
variable will change the background color for the following elements:
-  Login page
- Primary navigation section
- Quick links section on the overview page

#### Value
- Default value: $gray-200

### $primary-nav-hover
The semantic naming of this variable identifies its purpose. This color should
always be slightly darker than the `$container-bgd` value.

- Default value: $gray-300

## Updating Colors
Supporting a different color palette is a simple process. The default color
palette is supported using the Sass variables outlined in the color guidelines
and color maps outlined in the theme's overview.  The following sections provide
directions to update the settings to meet your organization's needs.

### Color
The OpenBMC Web UI uses Sass variables and maps to build its layout and
components. Bootstrap variables and maps use the `!default` flag to allow for
overrides. There are three Sass maps created to establish the color palette.
These include the `color` map, `theme-color` map, and `gray` map. These maps are
used by Bootstrap to build the application's CSS stylesheets.

#### All Colors
The OpenBMC Web UI custom colors are available as Sass variables and a Sass map
in `/src/assets/styles/bmc/helpers/_variables.scss`. The OpenBMC theme only
requires a subset of the colors to create the look and feel of the application.
Adding, removing, or updating the color variables and map is how the application
color palette can be customized. Using these variables outside of the helper
files is discouraged to avoid tightly coupling the OpenBMC Web UI theme to
specific colors.

The `color` map is not as important as the `theme-color` map. A tight-coupling
of the Sass variable name to the color name makes it hard to use the `color` map
keys for customization. Using these keys in Sass stylesheets or single-file
components is discouraged.

#### Theme Colors
The theme color variables and the `theme-color` map consist of a subset of the
color variables. This smaller color palette creates a scheme that is not
dependent on specific colors like blue or green. Several of the Bootstrap
`theme-color` map keys are required to generate the CSS styles. The OpenBMC Web
UI `theme-color` map has the same keys as the Bootstrap `theme-color` map with
custom values.

The `theme-color` map is used heavily throughout the application. The
Bootstrap-Vue components `variant` prop also utilizes the `theme-color` map.
This map is the key to customizing the application's color palette. Take a look
at the [color guidelines](/guide/guidelines/colors) to better understand default
theme-colors map.

#### Gray Colors
The gray color palette contains nine shades of gray that range from light to
dark. Bootstrap sets a default gray color value for each color variable from
100-900 in increments of one hundred, for example, `$gray-100`, `$gray-200`,
`$gray-300` through `gray-900`. Bootstrap does not create a color map for any of
the colors except gray. The Bootstrap documentation indicates that adding color
maps for all the default colors is scheduled to be delivered in a future patch.
The OpenBMC Web UI color theme overrides all shades of the Bootstrap default
gray variable values.

[Learn more about Bootstrap
colors](https://getbootstrap.com/docs/4.0/getting-started/theming/#color)

### Bootstrap Color Functions
- `color('<color map key>)`
- `theme-color('<theme color map key>)`
- `gray('<gray color palette key'>)`


#### Example
```SCSS
.some-selector {
  color: color("blue");
  background: theme-color("light");
  border: 1px solid gray("900")
}
```

[Learn more about using Bootstrap
functions](https://getbootstrap.com/docs/4.0/getting-started/theming/#functions)
## Adding a logo
The updated page header can include a small logo. The guidelines for adding a
logo and the suggested logo dimensions are currently in progress. It may be
challenging to meet all organization brand guidelines due to the minimal height
of the page header. The company logo might be able to be set in the primary
navigation, but a design supporting that option will be the focus of future
design work.