Class: ActiveMail::Tokens
- Inherits:
-
Object
- Object
- ActiveMail::Tokens
show all
- Extended by:
- T::Sig
- Defined in:
- lib/activemail/tokens.rb,
lib/activemail/tokens/button_style.rb,
lib/activemail/tokens/scss_serializer.rb
Defined Under Namespace
Modules: ScssSerializer
Classes: ButtonStyle
Constant Summary
collapse
- TokenMap =
T.type_alias { T::Hash[Symbol, String] }
- DEFAULT_COLORS =
T.let(
{
primary: '#2a9d8f',
secondary: '#264653',
text: '#1a1a1a',
background: '#ffffff',
muted: '#6b7280',
border: '#e5e7eb',
button_text: '#ffffff'
}.freeze,
TokenMap
)
- SYSTEM_FONT_STACK =
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif'
- DEFAULT_FONTS =
T.let(
{
body: SYSTEM_FONT_STACK,
heading: SYSTEM_FONT_STACK
}.freeze,
TokenMap
)
- DEFAULT_SPACINGS =
T.let(
{
xs: '4px',
sm: '8px',
md: '16px',
lg: '24px',
xl: '40px'
}.freeze,
TokenMap
)
- DEFAULT_RADII =
T.let(
{
button: '4px',
box: '4px'
}.freeze,
TokenMap
)
- GROUPS =
Open/Closed: adding a group here is the only change needed to wire it everywhere.
T.let(
{
color: DEFAULT_COLORS,
font: DEFAULT_FONTS,
spacing: DEFAULT_SPACINGS,
radius: DEFAULT_RADII
}.freeze,
T::Hash[Symbol, TokenMap]
)
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Tokens
Returns a new instance of Tokens.
68
69
70
|
# File 'lib/activemail/tokens.rb', line 68
def initialize
@stores = T.let(GROUPS.transform_values(&:dup), T::Hash[Symbol, TokenMap])
end
|
Instance Method Details
127
128
129
|
# File 'lib/activemail/tokens.rb', line 127
def button_style(variant)
ButtonStyle.from(self, variant)
end
|
#color(name, value = nil) ⇒ Object
73
74
75
|
# File 'lib/activemail/tokens.rb', line 73
def color(name, value = nil)
access(:color, name, value)
end
|
#color!(name) ⇒ Object
94
95
96
|
# File 'lib/activemail/tokens.rb', line 94
def color!(name)
fetch!(:color, name)
end
|
#font(name, value = nil) ⇒ Object
78
79
80
|
# File 'lib/activemail/tokens.rb', line 78
def font(name, value = nil)
access(:font, name, value)
end
|
#font!(name) ⇒ Object
99
100
101
|
# File 'lib/activemail/tokens.rb', line 99
def font!(name)
fetch!(:font, name)
end
|
#load(**groups) ⇒ Object
120
121
122
123
124
|
# File 'lib/activemail/tokens.rb', line 120
def load(**groups)
groups.each do |group, values|
values.each { |name, value| access(group, name, value) }
end
end
|
#radius(name, value = nil) ⇒ Object
88
89
90
|
# File 'lib/activemail/tokens.rb', line 88
def radius(name, value = nil)
access(:radius, name, value)
end
|
#radius!(name) ⇒ Object
109
110
111
|
# File 'lib/activemail/tokens.rb', line 109
def radius!(name)
fetch!(:radius, name)
end
|
#spacing(name, value = nil) ⇒ Object
83
84
85
|
# File 'lib/activemail/tokens.rb', line 83
def spacing(name, value = nil)
access(:spacing, name, value)
end
|
#spacing!(name) ⇒ Object
104
105
106
|
# File 'lib/activemail/tokens.rb', line 104
def spacing!(name)
fetch!(:spacing, name)
end
|
#to_h ⇒ Object
115
116
117
|
# File 'lib/activemail/tokens.rb', line 115
def to_h
@stores.transform_values { |store| store.dup.freeze }.freeze
end
|
#to_scss ⇒ Object
132
133
134
|
# File 'lib/activemail/tokens.rb', line 132
def to_scss
ScssSerializer.call(@stores)
end
|