2024-02-22 17:24:26 +00:00
|
|
|
import { convert } from 'chromatism'
|
2024-02-07 13:53:34 +00:00
|
|
|
import allKeys from './theme2_keys'
|
|
|
|
|
|
|
|
// keys that are meant to be used globally, i.e. what's the rest of the theme is based upon.
|
2024-02-19 18:47:27 +00:00
|
|
|
export const basePaletteKeys = new Set([
|
2024-02-07 13:53:34 +00:00
|
|
|
'bg',
|
|
|
|
'fg',
|
|
|
|
'text',
|
|
|
|
'link',
|
|
|
|
'accent',
|
|
|
|
|
|
|
|
'cBlue',
|
|
|
|
'cRed',
|
|
|
|
'cGreen',
|
|
|
|
'cOrange'
|
|
|
|
])
|
|
|
|
|
2024-02-22 16:04:28 +00:00
|
|
|
export const fontsKeys = new Set([
|
|
|
|
'interface',
|
|
|
|
'input',
|
|
|
|
'post',
|
|
|
|
'postCode'
|
|
|
|
])
|
|
|
|
|
2024-02-22 12:36:56 +00:00
|
|
|
export const opacityKeys = new Set([
|
|
|
|
'alert',
|
|
|
|
'alertPopup',
|
|
|
|
'bg',
|
|
|
|
'border',
|
|
|
|
'btn',
|
|
|
|
'faint',
|
|
|
|
'input',
|
|
|
|
'panel',
|
|
|
|
'popover',
|
|
|
|
'profileTint',
|
|
|
|
'underlay'
|
|
|
|
])
|
|
|
|
|
2024-02-19 18:47:27 +00:00
|
|
|
export const shadowsKeys = new Set([
|
|
|
|
'panel',
|
|
|
|
'topBar',
|
|
|
|
'popup',
|
|
|
|
'avatar',
|
|
|
|
'avatarStatus',
|
|
|
|
'panelHeader',
|
|
|
|
'button',
|
|
|
|
'buttonHover',
|
|
|
|
'buttonPressed',
|
|
|
|
'input'
|
|
|
|
])
|
|
|
|
|
2024-02-19 23:05:17 +00:00
|
|
|
export const radiiKeys = new Set([
|
|
|
|
'btn',
|
|
|
|
'input',
|
2024-02-21 11:10:11 +00:00
|
|
|
'checkbox',
|
2024-02-19 23:05:17 +00:00
|
|
|
'panel',
|
|
|
|
'avatar',
|
|
|
|
'avatarAlt',
|
|
|
|
'tooltip',
|
|
|
|
'attachment',
|
|
|
|
'chatMessage'
|
|
|
|
])
|
|
|
|
|
2024-02-07 13:53:34 +00:00
|
|
|
// Keys that are not available in editor and never meant to be edited
|
2024-02-19 18:47:27 +00:00
|
|
|
export const hiddenKeys = new Set([
|
2024-02-07 13:53:34 +00:00
|
|
|
'profileBg',
|
|
|
|
'profileTint'
|
|
|
|
])
|
|
|
|
|
2024-02-19 18:47:27 +00:00
|
|
|
export const extendedBasePrefixes = [
|
2024-02-07 13:53:34 +00:00
|
|
|
'border',
|
|
|
|
'icon',
|
|
|
|
'highlight',
|
|
|
|
'lightText',
|
|
|
|
|
|
|
|
'popover',
|
|
|
|
|
|
|
|
'panel',
|
|
|
|
'topBar',
|
2024-02-21 22:02:24 +00:00
|
|
|
'tab',
|
2024-02-07 13:53:34 +00:00
|
|
|
'btn',
|
|
|
|
'input',
|
|
|
|
'selectedMenu',
|
|
|
|
|
|
|
|
'alert',
|
2024-02-19 23:05:17 +00:00
|
|
|
'alertPopup',
|
2024-02-07 13:53:34 +00:00
|
|
|
'badge',
|
|
|
|
|
|
|
|
'post',
|
|
|
|
'selectedPost', // wrong nomenclature
|
|
|
|
'poll',
|
|
|
|
|
|
|
|
'chatBg',
|
2024-02-19 23:05:17 +00:00
|
|
|
'chatMessage'
|
2024-02-07 13:53:34 +00:00
|
|
|
]
|
2024-02-19 23:05:17 +00:00
|
|
|
export const nonComponentPrefixes = new Set([
|
|
|
|
'border',
|
|
|
|
'icon',
|
|
|
|
'highlight',
|
|
|
|
'lightText',
|
|
|
|
'chatBg'
|
|
|
|
])
|
2024-02-07 13:53:34 +00:00
|
|
|
|
2024-02-19 23:05:17 +00:00
|
|
|
export const extendedBaseKeys = Object.fromEntries(
|
|
|
|
extendedBasePrefixes.map(prefix => [
|
|
|
|
prefix,
|
|
|
|
allKeys.filter(k => {
|
|
|
|
if (prefix === 'alert') {
|
|
|
|
return k.startsWith(prefix) && !k.startsWith('alertPopup')
|
|
|
|
}
|
|
|
|
return k.startsWith(prefix)
|
|
|
|
})
|
|
|
|
])
|
|
|
|
)
|
2024-02-07 13:53:34 +00:00
|
|
|
|
|
|
|
// Keysets that are only really used intermideately, i.e. to generate other colors
|
2024-02-19 18:47:27 +00:00
|
|
|
export const temporary = new Set([
|
2024-02-19 23:05:17 +00:00
|
|
|
'',
|
2024-02-07 13:53:34 +00:00
|
|
|
'highlight'
|
|
|
|
])
|
|
|
|
|
2024-02-19 18:47:27 +00:00
|
|
|
export const temporaryColors = {}
|
|
|
|
|
|
|
|
export const convertTheme2To3 = (data) => {
|
2024-02-21 20:18:56 +00:00
|
|
|
data.colors.accent = data.colors.accent || data.colors.link
|
|
|
|
data.colors.link = data.colors.link || data.colors.accent
|
2024-02-19 18:47:27 +00:00
|
|
|
const generateRoot = () => {
|
|
|
|
const directives = {}
|
2024-02-22 17:24:26 +00:00
|
|
|
basePaletteKeys.forEach(key => { directives['--' + key] = 'color | ' + convert(data.colors[key]).hex })
|
2024-02-19 18:47:27 +00:00
|
|
|
return {
|
|
|
|
component: 'Root',
|
|
|
|
directives
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-22 12:36:56 +00:00
|
|
|
const convertOpacity = () => {
|
|
|
|
const newRules = []
|
2024-02-22 17:14:54 +00:00
|
|
|
Object.keys(data.opacity || {}).forEach(key => {
|
2024-02-22 12:36:56 +00:00
|
|
|
if (!opacityKeys.has(key) || data.opacity[key] === undefined) return null
|
|
|
|
const originalOpacity = data.opacity[key]
|
2024-06-21 21:45:46 +00:00
|
|
|
const rule = { source: '2to3' }
|
2024-02-22 12:36:56 +00:00
|
|
|
|
|
|
|
switch (key) {
|
|
|
|
case 'alert':
|
|
|
|
rule.component = 'Alert'
|
|
|
|
break
|
|
|
|
case 'alertPopup':
|
|
|
|
rule.component = 'Alert'
|
|
|
|
rule.parent = { component: 'Popover' }
|
|
|
|
break
|
|
|
|
case 'bg':
|
|
|
|
rule.component = 'Panel'
|
|
|
|
break
|
|
|
|
case 'border':
|
|
|
|
rule.component = 'Border'
|
|
|
|
break
|
|
|
|
case 'btn':
|
|
|
|
rule.component = 'Button'
|
|
|
|
break
|
|
|
|
case 'faint':
|
|
|
|
rule.component = 'Text'
|
|
|
|
rule.state = ['faint']
|
|
|
|
break
|
|
|
|
case 'input':
|
|
|
|
rule.component = 'Input'
|
|
|
|
break
|
|
|
|
case 'panel':
|
|
|
|
rule.component = 'PanelHeader'
|
|
|
|
break
|
|
|
|
case 'popover':
|
|
|
|
rule.component = 'Popover'
|
|
|
|
break
|
|
|
|
case 'profileTint':
|
|
|
|
return null
|
|
|
|
case 'underlay':
|
|
|
|
rule.component = 'Underlay'
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (key) {
|
|
|
|
case 'alert':
|
|
|
|
case 'alertPopup':
|
|
|
|
case 'bg':
|
|
|
|
case 'btn':
|
|
|
|
case 'input':
|
|
|
|
case 'panel':
|
|
|
|
case 'popover':
|
|
|
|
case 'underlay':
|
|
|
|
rule.directives = { opacity: originalOpacity }
|
|
|
|
break
|
|
|
|
case 'faint':
|
|
|
|
case 'border':
|
|
|
|
rule.directives = { textOpacity: originalOpacity }
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
newRules.push(rule)
|
|
|
|
|
|
|
|
if (rule.component === 'Button') {
|
|
|
|
newRules.push({ ...rule, component: 'ScrollbarElement' })
|
|
|
|
newRules.push({ ...rule, component: 'Tab' })
|
2024-02-28 20:56:15 +00:00
|
|
|
newRules.push({ ...rule, component: 'Tab', state: ['active'], directives: { opacity: 0 } })
|
2024-02-22 12:36:56 +00:00
|
|
|
}
|
2024-03-04 16:24:29 +00:00
|
|
|
if (rule.component === 'Panel') {
|
|
|
|
newRules.push({ ...rule, component: 'Post' })
|
|
|
|
}
|
2024-02-22 12:36:56 +00:00
|
|
|
})
|
|
|
|
return newRules
|
|
|
|
}
|
|
|
|
|
2024-02-19 23:05:17 +00:00
|
|
|
const convertRadii = () => {
|
|
|
|
const newRules = []
|
2024-02-22 17:14:54 +00:00
|
|
|
Object.keys(data.radii || {}).forEach(key => {
|
2024-02-21 20:18:56 +00:00
|
|
|
if (!radiiKeys.has(key) || data.radii[key] === undefined) return null
|
2024-02-19 23:05:17 +00:00
|
|
|
const originalRadius = data.radii[key]
|
2024-06-21 21:45:46 +00:00
|
|
|
const rule = { source: '2to3' }
|
2024-02-19 23:05:17 +00:00
|
|
|
|
|
|
|
switch (key) {
|
|
|
|
case 'btn':
|
|
|
|
rule.component = 'Button'
|
|
|
|
break
|
2024-02-21 22:02:24 +00:00
|
|
|
case 'tab':
|
|
|
|
rule.component = 'Tab'
|
|
|
|
break
|
2024-02-19 23:05:17 +00:00
|
|
|
case 'input':
|
|
|
|
rule.component = 'Input'
|
|
|
|
break
|
2024-02-21 11:10:11 +00:00
|
|
|
case 'checkbox':
|
|
|
|
rule.component = 'Input'
|
|
|
|
rule.variant = 'checkbox'
|
|
|
|
break
|
2024-02-19 23:05:17 +00:00
|
|
|
case 'panel':
|
|
|
|
rule.component = 'Panel'
|
|
|
|
break
|
|
|
|
case 'avatar':
|
|
|
|
rule.component = 'Avatar'
|
|
|
|
break
|
|
|
|
case 'avatarAlt':
|
|
|
|
rule.component = 'Avatar'
|
|
|
|
rule.variant = 'compact'
|
|
|
|
break
|
|
|
|
case 'tooltip':
|
|
|
|
rule.component = 'Popover'
|
|
|
|
break
|
|
|
|
case 'attachment':
|
|
|
|
rule.component = 'Attachment'
|
|
|
|
break
|
|
|
|
case 'ChatMessage':
|
|
|
|
rule.component = 'Button'
|
|
|
|
break
|
|
|
|
}
|
|
|
|
rule.directives = {
|
|
|
|
roundness: originalRadius
|
|
|
|
}
|
|
|
|
newRules.push(rule)
|
2024-02-21 20:18:56 +00:00
|
|
|
if (rule.component === 'Button') {
|
|
|
|
newRules.push({ ...rule, component: 'ScrollbarElement' })
|
2024-02-21 22:02:24 +00:00
|
|
|
newRules.push({ ...rule, component: 'Tab' })
|
2024-02-21 20:18:56 +00:00
|
|
|
}
|
2024-02-19 23:05:17 +00:00
|
|
|
})
|
|
|
|
return newRules
|
|
|
|
}
|
|
|
|
|
2024-02-22 16:04:28 +00:00
|
|
|
const convertFonts = () => {
|
|
|
|
const newRules = []
|
2024-02-22 17:14:54 +00:00
|
|
|
Object.keys(data.fonts || {}).forEach(key => {
|
2024-02-22 16:04:28 +00:00
|
|
|
if (!fontsKeys.has(key)) return
|
|
|
|
const originalFont = data.fonts[key].family
|
2024-06-21 21:45:46 +00:00
|
|
|
const rule = { source: '2to3' }
|
2024-02-22 16:04:28 +00:00
|
|
|
|
|
|
|
switch (key) {
|
|
|
|
case 'interface':
|
|
|
|
case 'postCode':
|
|
|
|
rule.component = 'Root'
|
|
|
|
break
|
|
|
|
case 'input':
|
|
|
|
rule.component = 'Input'
|
|
|
|
break
|
|
|
|
case 'post':
|
|
|
|
rule.component = 'RichContent'
|
|
|
|
break
|
|
|
|
}
|
|
|
|
switch (key) {
|
|
|
|
case 'interface':
|
|
|
|
case 'input':
|
|
|
|
case 'post':
|
|
|
|
rule.directives = { '--font': 'generic | ' + originalFont }
|
|
|
|
break
|
|
|
|
case 'postCode':
|
|
|
|
rule.directives = { '--monoFont': 'generic | ' + originalFont }
|
|
|
|
newRules.push({ ...rule, component: 'RichContent' })
|
|
|
|
break
|
|
|
|
}
|
|
|
|
newRules.push(rule)
|
|
|
|
})
|
|
|
|
return newRules
|
|
|
|
}
|
2024-02-19 18:47:27 +00:00
|
|
|
const convertShadows = () => {
|
|
|
|
const newRules = []
|
2024-02-22 17:14:54 +00:00
|
|
|
Object.keys(data.shadows || {}).forEach(key => {
|
2024-02-21 20:18:56 +00:00
|
|
|
if (!shadowsKeys.has(key)) return
|
2024-02-19 18:47:27 +00:00
|
|
|
const originalShadow = data.shadows[key]
|
2024-06-21 21:45:46 +00:00
|
|
|
const rule = { source: '2to3' }
|
2024-02-19 18:47:27 +00:00
|
|
|
|
|
|
|
switch (key) {
|
|
|
|
case 'panel':
|
|
|
|
rule.component = 'Panel'
|
|
|
|
break
|
|
|
|
case 'topBar':
|
|
|
|
rule.component = 'TopBar'
|
|
|
|
break
|
|
|
|
case 'popup':
|
|
|
|
rule.component = 'Popover'
|
|
|
|
break
|
|
|
|
case 'avatar':
|
|
|
|
rule.component = 'Avatar'
|
|
|
|
break
|
|
|
|
case 'avatarStatus':
|
|
|
|
rule.component = 'Avatar'
|
|
|
|
rule.parent = { component: 'Post' }
|
|
|
|
break
|
|
|
|
case 'panelHeader':
|
|
|
|
rule.component = 'PanelHeader'
|
|
|
|
break
|
|
|
|
case 'button':
|
|
|
|
rule.component = 'Button'
|
|
|
|
break
|
|
|
|
case 'buttonHover':
|
|
|
|
rule.component = 'Button'
|
|
|
|
rule.state = ['hover']
|
|
|
|
break
|
|
|
|
case 'buttonPressed':
|
|
|
|
rule.component = 'Button'
|
|
|
|
rule.state = ['pressed']
|
|
|
|
break
|
|
|
|
case 'input':
|
|
|
|
rule.component = 'Input'
|
|
|
|
break
|
|
|
|
}
|
|
|
|
rule.directives = {
|
|
|
|
shadow: originalShadow
|
|
|
|
}
|
|
|
|
newRules.push(rule)
|
2024-02-21 23:10:24 +00:00
|
|
|
if (key === 'topBar') {
|
|
|
|
newRules.push({ ...rule, component: 'PanelHeader', parent: { component: 'MobileDrawer' } })
|
|
|
|
}
|
2024-02-21 10:33:33 +00:00
|
|
|
if (key === 'avatarStatus') {
|
|
|
|
newRules.push({ ...rule, parent: { component: 'Notification' } })
|
|
|
|
}
|
|
|
|
if (key === 'buttonPressed') {
|
|
|
|
newRules.push({ ...rule, state: ['toggled'] })
|
2024-02-28 11:10:42 +00:00
|
|
|
newRules.push({ ...rule, state: ['toggled', 'focus'] })
|
|
|
|
newRules.push({ ...rule, state: ['pressed', 'focus'] })
|
|
|
|
}
|
|
|
|
if (key === 'buttonHover') {
|
|
|
|
newRules.push({ ...rule, state: ['toggled', 'hover'] })
|
|
|
|
newRules.push({ ...rule, state: ['pressed', 'hover'] })
|
|
|
|
newRules.push({ ...rule, state: ['toggled', 'focus', 'hover'] })
|
|
|
|
newRules.push({ ...rule, state: ['pressed', 'focus', 'hover'] })
|
2024-02-21 10:33:33 +00:00
|
|
|
}
|
2024-02-21 20:18:56 +00:00
|
|
|
|
|
|
|
if (rule.component === 'Button') {
|
|
|
|
newRules.push({ ...rule, component: 'ScrollbarElement' })
|
2024-02-21 22:02:24 +00:00
|
|
|
newRules.push({ ...rule, component: 'Tab' })
|
2024-02-21 20:18:56 +00:00
|
|
|
}
|
2024-02-19 18:47:27 +00:00
|
|
|
})
|
|
|
|
return newRules
|
|
|
|
}
|
|
|
|
|
2024-02-19 23:05:17 +00:00
|
|
|
const extendedRules = Object.entries(extendedBaseKeys).map(([prefix, keys]) => {
|
|
|
|
if (nonComponentPrefixes.has(prefix)) return null
|
2024-06-21 21:45:46 +00:00
|
|
|
const rule = { source: '2to3' }
|
2024-02-19 23:05:17 +00:00
|
|
|
if (prefix === 'alertPopup') {
|
|
|
|
rule.component = 'Alert'
|
|
|
|
rule.parent = { component: 'Popover' }
|
|
|
|
} else if (prefix === 'selectedPost') {
|
|
|
|
rule.component = 'Post'
|
|
|
|
rule.state = ['selected']
|
|
|
|
} else if (prefix === 'selectedMenu') {
|
|
|
|
rule.component = 'MenuItem'
|
|
|
|
rule.state = ['hover']
|
|
|
|
} else if (prefix === 'chatMessageIncoming') {
|
|
|
|
rule.component = 'ChatMessage'
|
|
|
|
} else if (prefix === 'chatMessageOutgoing') {
|
|
|
|
rule.component = 'ChatMessage'
|
|
|
|
rule.variant = 'outgoing'
|
|
|
|
} else if (prefix === 'panel') {
|
|
|
|
rule.component = 'PanelHeader'
|
2024-02-19 23:18:21 +00:00
|
|
|
} else if (prefix === 'topBar') {
|
2024-02-19 23:05:17 +00:00
|
|
|
rule.component = 'TopBar'
|
|
|
|
} else if (prefix === 'chatMessage') {
|
|
|
|
rule.component = 'ChatMessage'
|
|
|
|
} else if (prefix === 'poll') {
|
|
|
|
rule.component = 'PollGraph'
|
2024-02-21 20:18:56 +00:00
|
|
|
} else if (prefix === 'btn') {
|
|
|
|
rule.component = 'Button'
|
2024-02-19 23:05:17 +00:00
|
|
|
} else {
|
|
|
|
rule.component = prefix[0].toUpperCase() + prefix.slice(1).toLowerCase()
|
|
|
|
}
|
|
|
|
return keys.map((key) => {
|
2024-02-21 20:18:56 +00:00
|
|
|
if (!data.colors[key]) return null
|
2024-02-19 23:05:17 +00:00
|
|
|
const leftoverKey = key.replace(prefix, '')
|
|
|
|
const parts = (leftoverKey || 'Bg').match(/[A-Z][a-z]*/g)
|
|
|
|
const last = parts.slice(-1)[0]
|
2024-06-21 21:45:46 +00:00
|
|
|
let newRule = { source: '2to3', directives: {} }
|
2024-02-19 23:05:17 +00:00
|
|
|
let variantArray = []
|
|
|
|
|
|
|
|
switch (last) {
|
|
|
|
case 'Text':
|
|
|
|
case 'Faint': // typo
|
|
|
|
case 'Link':
|
|
|
|
case 'Icon':
|
|
|
|
case 'Greentext':
|
|
|
|
case 'Cyantext':
|
|
|
|
case 'Border':
|
|
|
|
newRule.parent = rule
|
|
|
|
newRule.directives.textColor = data.colors[key]
|
2024-02-19 23:18:21 +00:00
|
|
|
newRule.directives.textAuto = 'no-auto'
|
2024-02-19 23:05:17 +00:00
|
|
|
variantArray = parts.slice(0, -1)
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
newRule = { ...rule, directives: {} }
|
|
|
|
newRule.directives.background = data.colors[key]
|
|
|
|
variantArray = parts
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
if (last === 'Text' || last === 'Link') {
|
|
|
|
const secondLast = parts.slice(-2)[0]
|
|
|
|
if (secondLast === 'Light') {
|
|
|
|
return null // unsupported
|
|
|
|
} else if (secondLast === 'Faint') {
|
|
|
|
newRule.state = ['faint']
|
|
|
|
variantArray = parts.slice(0, -2)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (last) {
|
|
|
|
case 'Text':
|
|
|
|
case 'Link':
|
|
|
|
case 'Icon':
|
|
|
|
case 'Border':
|
|
|
|
newRule.component = last
|
|
|
|
break
|
|
|
|
case 'Greentext':
|
|
|
|
case 'Cyantext':
|
|
|
|
newRule.component = 'FunText'
|
|
|
|
newRule.variant = last.toLowerCase()
|
|
|
|
break
|
|
|
|
case 'Faint':
|
|
|
|
newRule.component = 'Text'
|
|
|
|
newRule.state = ['faint']
|
|
|
|
break
|
|
|
|
}
|
|
|
|
|
|
|
|
variantArray = variantArray.filter(x => x !== 'Bg')
|
|
|
|
|
|
|
|
if (last === 'Link' && prefix === 'selectedPost') {
|
|
|
|
// selectedPost has typo - duplicate 'Post'
|
|
|
|
variantArray = variantArray.filter(x => x !== 'Post')
|
|
|
|
}
|
|
|
|
|
|
|
|
if (prefix === 'popover' && variantArray[0] === 'Post') {
|
|
|
|
newRule.component = 'Post'
|
2024-06-21 21:45:46 +00:00
|
|
|
newRule.parent = { source: '2to3hack', component: 'Popover' }
|
2024-02-19 23:05:17 +00:00
|
|
|
variantArray = variantArray.filter(x => x !== 'Post')
|
|
|
|
}
|
|
|
|
|
|
|
|
if (prefix === 'selectedMenu' && variantArray[0] === 'Popover') {
|
2024-06-21 21:45:46 +00:00
|
|
|
newRule.parent = { source: '2to3hack', component: 'Popover' }
|
2024-02-19 23:05:17 +00:00
|
|
|
variantArray = variantArray.filter(x => x !== 'Popover')
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (prefix) {
|
|
|
|
case 'btn':
|
|
|
|
case 'input':
|
|
|
|
case 'alert': {
|
|
|
|
const hasPanel = variantArray.find(x => x === 'Panel')
|
|
|
|
if (hasPanel) {
|
2024-06-21 21:45:46 +00:00
|
|
|
newRule.parent = { source: '2to3hack', component: 'PanelHeader', parent: newRule.parent }
|
2024-02-19 23:05:17 +00:00
|
|
|
variantArray = variantArray.filter(x => x !== 'Panel')
|
|
|
|
}
|
|
|
|
const hasTop = variantArray.find(x => x === 'Top') // TopBar
|
|
|
|
if (hasTop) {
|
2024-06-21 21:45:46 +00:00
|
|
|
newRule.parent = { source: '2to3hack', component: 'TopBar', parent: newRule.parent }
|
2024-02-19 23:05:17 +00:00
|
|
|
variantArray = variantArray.filter(x => x !== 'Top' && x !== 'Bar')
|
|
|
|
}
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (variantArray.length > 0) {
|
|
|
|
if (prefix === 'btn') {
|
|
|
|
newRule.state = variantArray.map(x => x.toLowerCase())
|
|
|
|
} else {
|
|
|
|
newRule.variant = variantArray[0].toLowerCase()
|
|
|
|
}
|
|
|
|
}
|
2024-02-21 20:18:56 +00:00
|
|
|
|
2024-02-21 23:10:24 +00:00
|
|
|
if (newRule.component === 'Panel') {
|
|
|
|
return [newRule, { ...newRule, component: 'MobileDrawer' }]
|
|
|
|
} else if (newRule.component === 'Button') {
|
2024-02-28 11:10:42 +00:00
|
|
|
const rules = [
|
|
|
|
newRule,
|
|
|
|
{ ...newRule, component: 'Tab' },
|
|
|
|
{ ...newRule, component: 'ScrollbarElement' }
|
|
|
|
]
|
|
|
|
if (newRule.state?.indexOf('toggled') >= 0) {
|
|
|
|
rules.push({ ...newRule, state: [...newRule.state, 'focused'] })
|
|
|
|
rules.push({ ...newRule, state: [...newRule.state, 'hover'] })
|
|
|
|
rules.push({ ...newRule, state: [...newRule.state, 'hover', 'focused'] })
|
|
|
|
}
|
|
|
|
if (newRule.state?.indexOf('hover') >= 0) {
|
|
|
|
rules.push({ ...newRule, state: [...newRule.state, 'focused'] })
|
|
|
|
}
|
|
|
|
return rules
|
2024-03-04 17:10:23 +00:00
|
|
|
} else if (newRule.component === 'Badge') {
|
|
|
|
if (newRule.variant === 'notification') {
|
|
|
|
return [newRule, { component: 'Root', directives: { '--badgeNotification': 'color | ' + newRule.directives.background } }]
|
2024-04-04 09:30:51 +00:00
|
|
|
} else if (newRule.variant === 'neutral') {
|
|
|
|
return [{ ...newRule, variant: 'normal' }]
|
2024-03-04 17:10:23 +00:00
|
|
|
} else {
|
|
|
|
return [newRule]
|
|
|
|
}
|
2024-02-21 23:10:24 +00:00
|
|
|
} else if (newRule.component === 'TopBar') {
|
|
|
|
return [newRule, { ...newRule, parent: { component: 'MobileDrawer' }, component: 'PanelHeader' }]
|
2024-02-21 20:18:56 +00:00
|
|
|
} else {
|
|
|
|
return [newRule]
|
|
|
|
}
|
2024-02-19 23:05:17 +00:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2024-02-21 20:18:56 +00:00
|
|
|
const flatExtRules = extendedRules.filter(x => x).reduce((acc, x) => [...acc, ...x], []).filter(x => x).reduce((acc, x) => [...acc, ...x], [])
|
2024-02-19 23:05:17 +00:00
|
|
|
|
2024-02-22 16:04:28 +00:00
|
|
|
return [generateRoot(), ...convertShadows(), ...convertRadii(), ...convertOpacity(), ...convertFonts(), ...flatExtRules]
|
2024-02-19 18:47:27 +00:00
|
|
|
}
|