bevy_feathers 0.20.0

A collection of UI widgets for building editors and utilities in Bevy
Documentation
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
//! Design tokens used by Feathers themes.
//!
//! The term "design token" is commonly used in UX design to mean the smallest unit of a theme,
//! similar in concept to a CSS variable. Each token represents an assignment of a color or
//! value to a specific visual aspect of a widget, such as background or border.

use crate::theme::ThemeToken;

/// Window background
pub const WINDOW_BG: ThemeToken = ThemeToken::new_static("feathers.window.bg");

/// Focus ring
pub const FOCUS_RING: ThemeToken = ThemeToken::new_static("feathers.focus.ring");

/// Regular text
pub const TEXT_MAIN: ThemeToken = ThemeToken::new_static("feathers.text.main");
/// Dim text
pub const TEXT_DIM: ThemeToken = ThemeToken::new_static("feathers.text.dim");

// Normal buttons

/// Regular button background
pub const BUTTON_BG: ThemeToken = ThemeToken::new_static("feathers.button.bg");
/// Regular button background (hovered)
pub const BUTTON_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.button.bg.hover");
/// Regular button background (disabled)
pub const BUTTON_BG_DISABLED: ThemeToken = ThemeToken::new_static("feathers.button.bg.disabled");
/// Regular button background (pressed)
pub const BUTTON_BG_PRESSED: ThemeToken = ThemeToken::new_static("feathers.button.bg.pressed");
/// Regular button text
pub const BUTTON_TEXT: ThemeToken = ThemeToken::new_static("feathers.button.txt");
/// Regular button text (disabled)
pub const BUTTON_TEXT_DISABLED: ThemeToken = ThemeToken::new_static("feathers.button.txt.disabled");

// Primary ("default") buttons

/// Primary button background
pub const BUTTON_PRIMARY_BG: ThemeToken = ThemeToken::new_static("feathers.button.primary.bg");
/// Primary button background (hovered)
pub const BUTTON_PRIMARY_BG_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.button.primary.bg.hover");
/// Primary button background (disabled)
pub const BUTTON_PRIMARY_BG_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.button.primary.bg.disabled");
/// Primary button background (pressed)
pub const BUTTON_PRIMARY_BG_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.button.primary.bg.pressed");
/// Primary button text
pub const BUTTON_PRIMARY_TEXT: ThemeToken = ThemeToken::new_static("feathers.button.primary.txt");
/// Primary button text (disabled)
pub const BUTTON_PRIMARY_TEXT_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.button.primary.txt.disabled");

// Plain buttons (transparent background)

/// Plain button background
pub const BUTTON_PLAIN_BG: ThemeToken = ThemeToken::new_static("feathers.button.plain.bg");
/// Plain button background (hovered)
pub const BUTTON_PLAIN_BG_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.button.plain.bg.hover");
/// Plain button background (disabled)
pub const BUTTON_PLAIN_BG_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.button.plain.bg.disabled");
/// Plain button background (pressed)
pub const BUTTON_PLAIN_BG_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.button.plain.bg.pressed");

// Slider

/// Background for slider
pub const SLIDER_BG: ThemeToken = ThemeToken::new_static("feathers.slider.bg");
/// Background for slider (hovered)
pub const SLIDER_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.slider.bg.hover");
/// Background for slider (pressed)
pub const SLIDER_BG_PRESSED: ThemeToken = ThemeToken::new_static("feathers.slider.bg.pressed");
/// Background for slider (disabled)
pub const SLIDER_BG_DISABLED: ThemeToken = ThemeToken::new_static("feathers.slider.bg.disabled");
/// Fill color for slider
pub const SLIDER_BAR: ThemeToken = ThemeToken::new_static("feathers.slider.bar");
/// Fill color for slider (hovered)
pub const SLIDER_BAR_HOVER: ThemeToken = ThemeToken::new_static("feathers.slider.bar.hover");
/// Fill color for slider (pressed)
pub const SLIDER_BAR_PRESSED: ThemeToken = ThemeToken::new_static("feathers.slider.bar.pressed");
/// Fill color for slider (disabled)
pub const SLIDER_BAR_DISABLED: ThemeToken = ThemeToken::new_static("feathers.slider.bar.disabled");
/// Background for slider text
pub const SLIDER_TEXT: ThemeToken = ThemeToken::new_static("feathers.slider.text");
/// Background for slider text (disabled)
pub const SLIDER_TEXT_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.slider.text.disabled");

// Scrollbar

/// Background for scrollbar
pub const SCROLLBAR_BG: ThemeToken = ThemeToken::new_static("feathers.scrollbar.bg");
/// Background for scrollbar moving bar
pub const SCROLLBAR_THUMB: ThemeToken = ThemeToken::new_static("feathers.scrollbar.thumb");
/// Background for scrollbar moving bar (hovered)
pub const SCROLLBAR_THUMB_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.scrollbar.thumb.hover");

// Checkbox

/// Checkbox background around the checkmark
pub const CHECKBOX_BG: ThemeToken = ThemeToken::new_static("feathers.checkbox.bg");
/// Checkbox background around the checkmark (hovered)
pub const CHECKBOX_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.checkbox.bg.hover");
/// Checkbox background around the checkmark (pressed)
pub const CHECKBOX_BG_PRESSED: ThemeToken = ThemeToken::new_static("feathers.checkbox.bg.pressed");
/// Checkbox border around the checkmark (disabled)
pub const CHECKBOX_BG_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.bg.disabled");
/// Checkbox background around the checkmark (checked)
pub const CHECKBOX_BG_CHECKED: ThemeToken = ThemeToken::new_static("feathers.checkbox.bg.checked");
/// Checkbox background around the checkmark (checked+hover)
pub const CHECKBOX_BG_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.bg.checked.hover");
/// Checkbox background around the checkmark (checked+pressed)
pub const CHECKBOX_BG_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.bg.checked.pressed");
/// Checkbox border around the checkmark (checked+disabled)
pub const CHECKBOX_BG_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.bg.checked.disabled");
/// Checkbox border around the checkmark
pub const CHECKBOX_BORDER: ThemeToken = ThemeToken::new_static("feathers.checkbox.border");
/// Checkbox border around the checkmark (hovered)
pub const CHECKBOX_BORDER_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.hover");
/// Checkbox border around the checkmark (pressed)
pub const CHECKBOX_BORDER_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.pressed");
/// Checkbox border around the checkmark (disabled)
pub const CHECKBOX_BORDER_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.disabled");
/// Checkbox border around the checkmark (checked)
pub const CHECKBOX_BORDER_CHECKED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.checked");
/// Checkbox border around the checkmark (checked+hovered)
pub const CHECKBOX_BORDER_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.checked.hover");
/// Checkbox border around the checkmark (checked+pressed)
pub const CHECKBOX_BORDER_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.checked.pressed");
/// Checkbox border around the checkmark (checked+disabled)
pub const CHECKBOX_BORDER_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.border.checked.disabled");
/// Checkbox check mark
pub const CHECKBOX_MARK: ThemeToken = ThemeToken::new_static("feathers.checkbox.mark");
/// Checkbox check mark (disabled)
pub const CHECKBOX_MARK_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.mark.disabled");
/// Checkbox label text
pub const CHECKBOX_TEXT: ThemeToken = ThemeToken::new_static("feathers.checkbox.text");
/// Checkbox label text (disabled)
pub const CHECKBOX_TEXT_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.checkbox.text.disabled");

// Radio button

/// Background of the radio button
pub const RADIO_BG: ThemeToken = ThemeToken::new_static("feathers.radio.bg");
/// Background of the radio button (hovered)
pub const RADIO_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.radio.bg.hover");
/// Background of the radio button (pressed)
pub const RADIO_BG_PRESSED: ThemeToken = ThemeToken::new_static("feathers.radio.bg.pressed");
/// Background of the radio button (disabled)
pub const RADIO_BG_DISABLED: ThemeToken = ThemeToken::new_static("feathers.radio.bg.disabled");
/// Background of the radio button (checked)
pub const RADIO_BG_CHECKED: ThemeToken = ThemeToken::new_static("feathers.radio.bg.checked");
/// Background of the radio button (checked+hovered)
pub const RADIO_BG_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.radio.bg.checked.hover");
/// Background of the radio button (checked+pressed)
pub const RADIO_BG_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.radio.bg.checked.pressed");
/// Background of the radio button (checked+disabled)
pub const RADIO_BG_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.radio.bg.checked.disabled");
/// Border around the radio button
pub const RADIO_BORDER: ThemeToken = ThemeToken::new_static("feathers.radio.border");
/// Border around the radio button (hovered)
pub const RADIO_BORDER_HOVER: ThemeToken = ThemeToken::new_static("feathers.radio.border.hover");
/// Border around the radio button (pressed)
pub const RADIO_BORDER_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.radio.border.pressed");
/// Border around the radio button (disabled)
pub const RADIO_BORDER_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.radio.border.disabled");
/// Border around the radio button (checked)
pub const RADIO_BORDER_CHECKED: ThemeToken =
    ThemeToken::new_static("feathers.radio.border.checked");
/// Border around the radio button (checked+hovered)
pub const RADIO_BORDER_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.radio.border.checked.hover");
/// Border around the radio button (checked+pressed)
pub const RADIO_BORDER_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.radio.border.checked.pressed");
/// Border around the radio button (checked+disabled)
pub const RADIO_BORDER_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.radio.border.checked.disabled");
/// Radio check mark
pub const RADIO_MARK: ThemeToken = ThemeToken::new_static("feathers.radio.mark");
/// Radio check mark (hovered)
pub const RADIO_MARK_HOVER: ThemeToken = ThemeToken::new_static("feathers.radio.mark.hover");
/// Radio check mark (pressed)
pub const RADIO_MARK_PRESSED: ThemeToken = ThemeToken::new_static("feathers.radio.mark.pressed");
/// Radio check mark (disabled)
pub const RADIO_MARK_DISABLED: ThemeToken = ThemeToken::new_static("feathers.radio.mark.disabled");
/// Radio label text
pub const RADIO_TEXT: ThemeToken = ThemeToken::new_static("feathers.radio.text");
/// Radio label text (disabled)
pub const RADIO_TEXT_DISABLED: ThemeToken = ThemeToken::new_static("feathers.radio.text.disabled");

// Toggle Switch

/// Switch background around the switch
pub const SWITCH_BG: ThemeToken = ThemeToken::new_static("feathers.switch.bg");
/// Switch background around the switch (hovered)
pub const SWITCH_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.switch.bg.hover");
/// Switch background around the switch (pressed)
pub const SWITCH_BG_PRESSED: ThemeToken = ThemeToken::new_static("feathers.switch.bg.pressed");
/// Switch background around the switch (disabled)
pub const SWITCH_BG_DISABLED: ThemeToken = ThemeToken::new_static("feathers.switch.bg.disabled");
/// Switch background around the switch (checked)
pub const SWITCH_BG_CHECKED: ThemeToken = ThemeToken::new_static("feathers.switch.bg.checked");
/// Switch background around the switch (checked+hover)
pub const SWITCH_BG_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.switch.bg.checked.hover");
/// Switch background around the switch (checked+pressed)
pub const SWITCH_BG_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.bg.checked.pressed");
/// Switch background around the switch (checked+disabled)
pub const SWITCH_BG_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.bg.checked.disabled");
/// Switch border around the switch
pub const SWITCH_BORDER: ThemeToken = ThemeToken::new_static("feathers.switch.border");
/// Switch border around the switch (hovered)
pub const SWITCH_BORDER_HOVER: ThemeToken = ThemeToken::new_static("feathers.switch.border.hover");
/// Switch border around the switch (pressed)
pub const SWITCH_BORDER_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.border.hover.pressed");
/// Switch border around the switch (disabled)
pub const SWITCH_BORDER_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.border.disabled");
/// Switch border around the switch (checked)
pub const SWITCH_BORDER_CHECKED: ThemeToken =
    ThemeToken::new_static("feathers.switch.border.checked");
/// Switch border around the switch (checked+hovered)
pub const SWITCH_BORDER_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.switch.border.checked.hover");
/// Switch border around the switch (checked+pressed)
pub const SWITCH_BORDER_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.border.checked.pressed");
/// Switch border around the switch (checked+disabled)
pub const SWITCH_BORDER_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.border.checked.disabled");
/// Switch slide background
pub const SWITCH_SLIDE_BG: ThemeToken = ThemeToken::new_static("feathers.switch.slide.bg");
/// Switch slide background (hovered)
pub const SWITCH_SLIDE_BG_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.hover");
/// Switch slide background (pressed)
pub const SWITCH_SLIDE_BG_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.pressed");
/// Switch slide background (disabled)
pub const SWITCH_SLIDE_BG_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.disabled");
/// Switch slide background (checked)
pub const SWITCH_SLIDE_BG_CHECKED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.checked");
/// Switch slide background (checked+hovered)
pub const SWITCH_SLIDE_BG_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.checked.hover");
/// Switch slide background (checked+pressed)
pub const SWITCH_SLIDE_BG_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.checked.pressed");
/// Switch slide background (checked+disabled)
pub const SWITCH_SLIDE_BG_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.bg.checked.disabled");

/// Switch slide border
pub const SWITCH_SLIDE_BORDER: ThemeToken = ThemeToken::new_static("feathers.switch.slide.border");
/// Switch slide border (hovered)
pub const SWITCH_SLIDE_BORDER_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.hover");
/// Switch slide border (pressed)
pub const SWITCH_SLIDE_BORDER_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.pressed");
/// Switch slide border (disabled)
pub const SWITCH_SLIDE_BORDER_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.disabled");
/// Switch slide border (checked)
pub const SWITCH_SLIDE_BORDER_CHECKED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.checked");
/// Switch slide border (checked+hovered)
pub const SWITCH_SLIDE_BORDER_CHECKED_HOVER: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.checked.hover");
/// Switch slide border (checked+pressed)
pub const SWITCH_SLIDE_BORDER_CHECKED_PRESSED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.checked.pressed");
/// Switch slide border (checked+disabled)
pub const SWITCH_SLIDE_BORDER_CHECKED_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.switch.slide.border.checked.disabled");

// Color Plane

/// Color plane frame background
pub const COLOR_PLANE_BG: ThemeToken = ThemeToken::new_static("feathers.colorplane.bg");

// Menus

/// Menu background
pub const MENU_BG: ThemeToken = ThemeToken::new_static("feathers.menu.bg");
/// Menu border
pub const MENU_BORDER: ThemeToken = ThemeToken::new_static("feathers.menu.border");
/// Menu item
pub const MENUITEM_BG: ThemeToken = ThemeToken::new_static("feathers.menuitem.bg");
/// Menu item hovered
pub const MENUITEM_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.menuitem.bg.hover");
/// Menu item pressed
pub const MENUITEM_BG_PRESSED: ThemeToken = ThemeToken::new_static("feathers.menuitem.bg.pressed");
/// Menu item focused
pub const MENUITEM_BG_FOCUSED: ThemeToken = ThemeToken::new_static("feathers.menuitem.bg.focused");
/// Menu item text
pub const MENUITEM_TEXT: ThemeToken = ThemeToken::new_static("feathers.menuitem.text");
/// Menu item text (disabled)
pub const MENUITEM_TEXT_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.menuitem.text.disabled");

// Text Input

/// Background for text input
pub const TEXT_INPUT_BG: ThemeToken = ThemeToken::new_static("feathers.textinput.bg");
/// Text color for text input
pub const TEXT_INPUT_TEXT: ThemeToken = ThemeToken::new_static("feathers.textinput.text");
/// Text color for text input (disabled)
pub const TEXT_INPUT_TEXT_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.textinput.text.disabled");
/// Cursor color for text input
pub const TEXT_INPUT_CURSOR: ThemeToken = ThemeToken::new_static("feathers.textinput.cursor");
/// Selection color for text input
pub const TEXT_INPUT_SELECTION: ThemeToken = ThemeToken::new_static("feathers.textinput.selection");
/// Selection color for unfocused text input
pub const TEXT_INPUT_SELECTION_UNFOCUSED: ThemeToken =
    ThemeToken::new_static("feathers.textinput.selection.unfocused");
/// Background color for label text
pub const TEXT_INPUT_LABEL_BG: ThemeToken = ThemeToken::new_static("feathers.textinput.label.bg");
/// Sigil color for X
pub const TEXT_INPUT_X_AXIS: ThemeToken = ThemeToken::new_static("feathers.textinput.axis.x");
/// Sigil color for Y
pub const TEXT_INPUT_Y_AXIS: ThemeToken = ThemeToken::new_static("feathers.textinput.axis.y");
/// Sigil color for Z
pub const TEXT_INPUT_Z_AXIS: ThemeToken = ThemeToken::new_static("feathers.textinput.axis.z");
/// Sigil color for W
pub const TEXT_INPUT_W_AXIS: ThemeToken = ThemeToken::new_static("feathers.textinput.axis.w");

// Pane

/// Pane header background
pub const PANE_HEADER_BG: ThemeToken = ThemeToken::new_static("feathers.pane.header.bg");
/// Pane header border
pub const PANE_HEADER_BORDER: ThemeToken = ThemeToken::new_static("feathers.pane.header.border");
/// Pane header text color
pub const PANE_HEADER_TEXT: ThemeToken = ThemeToken::new_static("feathers.pane.header.text");
/// Pane header divider color
pub const PANE_HEADER_DIVIDER: ThemeToken = ThemeToken::new_static("feathers.pane.header.divider");
/// Pane body background
pub const PANE_BODY_BG: ThemeToken = ThemeToken::new_static("feathers.pane.body.bg");

// Subpane

/// Subpane background
pub const SUBPANE_HEADER_BG: ThemeToken = ThemeToken::new_static("feathers.subpane.header.bg");
/// Subpane header border
pub const SUBPANE_HEADER_BORDER: ThemeToken =
    ThemeToken::new_static("feathers.subpane.header.border");
/// Subpane header text color
pub const SUBPANE_HEADER_TEXT: ThemeToken = ThemeToken::new_static("feathers.subpane.header.text");
/// Subpane body background
pub const SUBPANE_BODY_BG: ThemeToken = ThemeToken::new_static("feathers.subpane.body.bg");
/// Subpane body border
pub const SUBPANE_BODY_BORDER: ThemeToken = ThemeToken::new_static("feathers.subpane.body.border");

// Group

/// Group background
pub const GROUP_BG: ThemeToken = ThemeToken::new_static("feathers.group.bg");
/// Group header border
pub const GROUP_BORDER: ThemeToken = ThemeToken::new_static("feathers.group.border");
/// Group header text color
pub const GROUP_HEADER_TEXT: ThemeToken = ThemeToken::new_static("feathers.group.header.text");

// Listview

/// Listview row background
pub const LISTROW_BG: ThemeToken = ThemeToken::new_static("feathers.listrow.bg");
/// Listview row background (hovered)
pub const LISTROW_BG_HOVER: ThemeToken = ThemeToken::new_static("feathers.listrow.bg.hover");
/// Listview row background (selected)
pub const LISTROW_BG_SELECTED: ThemeToken = ThemeToken::new_static("feathers.listrow.bg.selected");
/// Listview row text
pub const LISTROW_TEXT: ThemeToken = ThemeToken::new_static("feathers.listrow.text");
/// Listview row text (disabled)
pub const LISTROW_TEXT_DISABLED: ThemeToken =
    ThemeToken::new_static("feathers.listrow.text.disabled");

// Modal Dialog

/// Dialog background
pub const DIALOG_BG: ThemeToken = ThemeToken::new_static("feathers.dialog.bg");
/// Dialog border
pub const DIALOG_BORDER: ThemeToken = ThemeToken::new_static("feathers.dialog.border");
/// Dialog header background
pub const DIALOG_HEADER_BG: ThemeToken = ThemeToken::new_static("feathers.dialog.header.bg");
/// Dialog text
pub const DIALOG_TEXT: ThemeToken = ThemeToken::new_static("feathers.dialog.text");
/// Dialog header text
pub const DIALOG_HEADER_TEXT: ThemeToken = ThemeToken::new_static("feathers.dialog.header.text");

/// Semantic tokens.
///
/// Terms:
/// * **Surface** - the background color of a container
/// * **Fill** - the fill color of a control, such as a button
/// * **Item** - a list item or menu item
pub mod semantic {
    use crate::theme::SemanticToken;

    // Surfaces

    /// Base layer of window
    pub const SURFACE_WINDOW: SemanticToken = SemanticToken::new_static("surface.window");
    /// Fill for pane body
    pub const SURFACE_PANE_BODY: SemanticToken = SemanticToken::new_static("surface.pane.body");
    /// Fill for pane header
    pub const SURFACE_PANE_HEADER: SemanticToken = SemanticToken::new_static("surface.pane.header");
    /// Fill for subpane body
    pub const SURFACE_SUBPANE_BODY: SemanticToken =
        SemanticToken::new_static("surface.subpane.body");
    /// Fill for subpane header
    pub const SURFACE_SUBPANE_HEADER: SemanticToken =
        SemanticToken::new_static("surface.subpane.header");
    /// Fill for group
    pub const SURFACE_GROUP: SemanticToken = SemanticToken::new_static("surface.group");
    /// Fill for dialog
    pub const SURFACE_DIALOG: SemanticToken = SemanticToken::new_static("surface.dialog");
    /// Fill for menu
    pub const SURFACE_MENU: SemanticToken = SemanticToken::new_static("surface.menu");

    // Borders

    /// Default border
    pub const BORDER_DEFAULT: SemanticToken = SemanticToken::new_static("border.default");

    // Text

    /// Labels on neutral surfaces
    pub const TEXT_DEFAULT: SemanticToken = SemanticToken::new_static("text.default");
    /// Secondary / dim labels
    pub const TEXT_DIM: SemanticToken = SemanticToken::new_static("text.dim");
    /// Text on accent or saturated fills
    pub const TEXT_ON_ACCENT: SemanticToken = SemanticToken::new_static("text.onAccent");
    /// Disabled text
    pub const TEXT_DISABLED: SemanticToken = SemanticToken::new_static("text.disabled");

    // Fill: 4 tiers of prominence: ACCENT, SOLID, ITEM and FIELD

    /// Accent fill - used for primary buttons, checked states
    pub const FILL_ACCENT_DEFAULT: SemanticToken = SemanticToken::new_static("fill.accent.default");
    /// Accent when hovered
    pub const FILL_ACCENT_HOVER: SemanticToken = SemanticToken::new_static("fill.accent.hover");
    /// Accent when pressed
    pub const FILL_ACCENT_PRESSED: SemanticToken = SemanticToken::new_static("fill.accent.pressed");
    /// Accent when disabled
    pub const FILL_ACCENT_DISABLED: SemanticToken =
        SemanticToken::new_static("fill.accent.disabled");

    /// Default fill - buttons
    pub const FILL_SOLID_DEFAULT: SemanticToken = SemanticToken::new_static("fill.solid.default");
    /// Fill when hovered
    pub const FILL_SOLID_HOVER: SemanticToken = SemanticToken::new_static("fill.solid.hover");
    /// Fill when pressed
    pub const FILL_SOLID_PRESSED: SemanticToken = SemanticToken::new_static("fill.solid.pressed");
    /// Fill when disabled
    pub const FILL_SOLID_DISABLED: SemanticToken = SemanticToken::new_static("fill.solid.disabled");

    /// Item fill - list items, menus, plain buttons. This is normally transparent (which also
    /// means no disabled color).
    pub const FILL_ITEM_DEFAULT: SemanticToken = SemanticToken::new_static("fill.item.default");
    /// Fill when hovered
    pub const FILL_ITEM_HOVER: SemanticToken = SemanticToken::new_static("fill.item.hover");
    /// Fill when pressed
    pub const FILL_ITEM_PRESSED: SemanticToken = SemanticToken::new_static("fill.item.pressed");

    /// Field fill - text inputs
    pub const FILL_FIELD_DEFAULT: SemanticToken = SemanticToken::new_static("fill.field.default");
    /// Field when hovered
    pub const FILL_FIELD_HOVER: SemanticToken = SemanticToken::new_static("fill.field.hover");
    /// Field when pressed
    pub const FILL_FIELD_PRESSED: SemanticToken = SemanticToken::new_static("fill.field.pressed");

    /// Transparent fill (plain buttons)
    pub const FILL_NONE: SemanticToken = SemanticToken::new_static("fill.none");

    // Decorations

    /// X-Axis
    pub const AXIS_X: SemanticToken = SemanticToken::new_static("axis.x");
    /// Y-Axis
    pub const AXIS_Y: SemanticToken = SemanticToken::new_static("axis.y");
    /// Z-Axis
    pub const AXIS_Z: SemanticToken = SemanticToken::new_static("axis.z");
    /// Z-Axis
    pub const AXIS_W: SemanticToken = SemanticToken::new_static("axis.w");
    /// Focus ring
    pub const FOCUS_RING: SemanticToken = SemanticToken::new_static("focus.ring");
}