pleroma-fe/src/components/button.style.js

123 lines
4.2 KiB
JavaScript
Raw Normal View History

2024-01-18 12:35:25 +00:00
export default {
2024-02-09 17:37:22 +00:00
name: 'Button', // Name of the component
selector: '.button-default', // CSS selector/prefix
2024-02-11 21:11:28 +00:00
// outOfTreeSelector: '' // out-of-tree selector is used when other components are laid over it but it's not part of the tree, see Underlay component
// States, system witll calculate ALL possible combinations of those and prepend "normal" to them + standalone "normal" state
2024-01-18 12:35:25 +00:00
states: {
2024-02-11 21:11:28 +00:00
// States are a bit expensive - the amount of combinations generated is about (1/6)n^3+n, so adding more state increased number of combination by an order of magnitude!
// All states inherit from "normal" state, there is no other inheirtance, i.e. hover+disabled only inherits from "normal", not from hover nor disabled.
// However, cascading still works, so resulting state will be result of merging of all relevant states/variants
// normal: '' // normal state is implicitly added, it is always included
toggled: '.toggled',
focused: ':focus-visible',
pressed: ':focus:active',
hover: ':hover:not(:disabled)',
disabled: ':disabled'
2024-01-18 12:35:25 +00:00
},
2024-02-11 21:11:28 +00:00
// Variants are mutually exclusive, each component implicitly has "normal" variant, and all other variants inherit from it.
2024-01-18 12:35:25 +00:00
variants: {
2024-02-11 21:11:28 +00:00
// Variants save on computation time since adding new variant just adds one more "set".
// normal: '', // you can override normal variant, it will be appenended to the main class
danger: '.danger'
2024-02-11 21:11:28 +00:00
// Overall the compuation difficulty is N*((1/6)M^3+M) where M is number of distinct states and N is number of variants.
// This (currently) is further multipled by number of places where component can exist.
2024-01-18 12:35:25 +00:00
},
editor: {
2024-09-26 19:31:28 +00:00
aspect: '2 / 1'
},
2024-02-11 21:11:28 +00:00
// This lists all other components that can possibly exist within one. Recursion is currently not supported (and probably won't be supported ever).
2024-01-18 12:35:25 +00:00
validInnerComponents: [
'Text',
'Icon'
],
2024-02-11 21:11:28 +00:00
// Default rules, used as "default theme", essentially.
defaultRules: [
2024-02-21 20:18:56 +00:00
{
component: 'Root',
directives: {
2024-10-06 11:10:19 +00:00
'--buttonDefaultHoverGlow': 'shadow | 0 0 4 --text / 0.5',
'--buttonDefaultFocusGlow': 'shadow | 0 0 4 4 --link / 0.5',
'--buttonDefaultShadow': 'shadow | 0 0 2 #000000',
'--buttonDefaultBevel': 'shadow | $borderSide(#FFFFFF top 0.2 2), $borderSide(#000000 bottom 0.2 2)',
'--buttonPressedBevel': 'shadow | $borderSide(#FFFFFF bottom 0.2 2), $borderSide(#000000 top 0.2 2)'
2024-02-21 20:18:56 +00:00
}
},
{
2024-02-11 21:11:28 +00:00
// component: 'Button', // no need to specify components every time unless you're specifying how other component should look
// like within it
directives: {
background: '--fg',
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultShadow', '--buttonDefaultBevel'],
2024-02-13 00:09:43 +00:00
roundness: 3
2024-02-08 16:18:01 +00:00
}
},
{
state: ['hover'],
directives: {
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultHoverGlow', '--buttonDefaultBevel']
}
},
{
state: ['focused'],
directives: {
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultFocusGlow', '--buttonDefaultBevel']
}
},
{
state: ['pressed'],
directives: {
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultShadow', '--buttonPressedBevel']
}
},
2024-09-30 21:42:33 +00:00
{
state: ['pressed', 'hover'],
2024-09-30 21:42:33 +00:00
directives: {
2024-10-06 11:10:19 +00:00
shadow: ['--buttonPressedBevel', '--buttonDefaultHoverGlow']
2024-09-30 21:42:33 +00:00
}
},
{
state: ['toggled'],
directives: {
2024-03-06 22:28:16 +00:00
background: '--inheritedBackground,-14.2',
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultShadow', '--buttonPressedBevel']
}
},
{
state: ['toggled', 'hover'],
directives: {
2024-03-06 22:28:16 +00:00
background: '--inheritedBackground,-14.2',
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultHoverGlow', '--buttonPressedBevel']
}
},
{
state: ['disabled'],
directives: {
background: '$blend(--inheritedBackground 0.25 --parent)',
2024-10-06 11:10:19 +00:00
shadow: ['--buttonDefaultBevel']
}
},
{
component: 'Text',
parent: {
component: 'Button',
state: ['disabled']
},
directives: {
textOpacity: 0.25,
textOpacityMode: 'blend'
}
2024-09-12 09:46:47 +00:00
},
{
component: 'Icon',
parent: {
component: 'Button',
state: ['disabled']
},
directives: {
textOpacity: 0.25,
textOpacityMode: 'blend'
}
}
2024-01-18 12:35:25 +00:00
]
}