From c34590c43983711152a843a2e36b991a5fe3bcdf Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 7 Feb 2024 15:53:34 +0200 Subject: update, should inherit stuff properly now. --- src/services/theme_data/theme2_to_theme3.js | 58 +++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/services/theme_data/theme2_to_theme3.js (limited to 'src/services/theme_data/theme2_to_theme3.js') diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js new file mode 100644 index 00000000..5ac87beb --- /dev/null +++ b/src/services/theme_data/theme2_to_theme3.js @@ -0,0 +1,58 @@ +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. +const basePaletteKeys = new Set([ + 'bg', + 'fg', + 'text', + 'link', + 'accent', + + 'cBlue', + 'cRed', + 'cGreen', + 'cOrange' +]) + +// Keys that are not available in editor and never meant to be edited +const hiddenKeys = new Set([ + 'profileBg', + 'profileTint' +]) + +const extendedBasePrefixes = [ + 'border', + 'icon', + 'highlight', + 'lightText', + + 'popover', + + 'panel', + 'topBar', + 'tab', + 'btn', + 'input', + 'selectedMenu', + + 'alert', + 'badge', + + 'post', + 'selectedPost', // wrong nomenclature + 'poll', + + 'chatBg', + 'chatMessageIncoming', + 'chatMessageOutgoing' +] + +const extendedBaseKeys = Object.fromEntries(extendedBasePrefixes.map(prefix => [prefix, allKeys.filter(k => k.startsWith(prefix))])) + +// Keysets that are only really used intermideately, i.e. to generate other colors +const temporary = new Set([ + 'border', + 'highlight' +]) + +const temporaryColors = {} -- cgit v1.2.3-70-g09d2 From 0285efadbb10ed68940a2aef2f320fbf65f841c9 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Mon, 19 Feb 2024 20:47:27 +0200 Subject: independence from themes3, converter/backwards compat WIP --- src/services/style_setter/style_setter.js | 19 +++--- src/services/theme_data/theme2_to_theme3.js | 87 +++++++++++++++++++++++-- src/services/theme_data/theme_data_3.service.js | 23 ++++--- 3 files changed, 106 insertions(+), 23 deletions(-) (limited to 'src/services/theme_data/theme2_to_theme3.js') diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 95d1b6c4..0c8e503d 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -2,6 +2,7 @@ import { convert } from 'chromatism' import { rgb2hex, hex2rgb, rgba2css, getCssColor, relativeLuminance } from '../color_convert/color_convert.js' import { getColors, computeDynamicColor, getOpacitySlot } from '../theme_data/theme_data.service.js' import { init } from '../theme_data/theme_data_3.service.js' +import { convertTheme2To3 } from '../theme_data/theme2_to_theme3.js' import { getCssRules } from '../theme_data/css_utils.js' import { sampleRules @@ -10,10 +11,12 @@ import { defaultState } from '../../modules/config.js' export const applyTheme = (input) => { const t0 = performance.now() - const { rules, t3b } = generatePreset(input) + const { rules, theme } = generatePreset(input) + console.log(rules, theme) const t1 = performance.now() console.log('Themes 2 initialization took ' + (t1 - t0) + 'ms') - const themes3 = init(sampleRules, t3b) + const extraRules = convertTheme2To3(theme) + const themes3 = init([...sampleRules, ...extraRules]) const t2 = performance.now() console.log('Themes 3 initialization took ' + (t2 - t1) + 'ms') const head = document.head @@ -26,7 +29,7 @@ export const applyTheme = (input) => { styleSheet.toString() styleSheet.insertRule(`:root { ${rules.fonts} }`, 'index-max') - getCssRules(themes3.eager, t3b).forEach(rule => { + getCssRules(themes3.eager, themes3.staticVars).forEach(rule => { // Hack to support multiple selectors on same component if (rule.match(/::-webkit-scrollbar-button/)) { const parts = rule.split(/[{}]/g) @@ -45,7 +48,7 @@ export const applyTheme = (input) => { }) body.classList.remove('hidden') themes3.lazy.then(lazyRules => { - getCssRules(lazyRules, t3b).forEach(rule => { + getCssRules(lazyRules, themes3.staticVars).forEach(rule => { styleSheet.insertRule(rule, 'index-max') }) const t3 = performance.now() @@ -358,7 +361,7 @@ export const generateShadows = (input, colors) => { } } -export const composePreset = (colors, radii, shadows, fonts, t3b) => { +export const composePreset = (colors, radii, shadows, fonts) => { return { rules: { ...shadows.rules, @@ -371,8 +374,7 @@ export const composePreset = (colors, radii, shadows, fonts, t3b) => { ...colors.theme, ...radii.theme, ...fonts.theme - }, - t3b + } } } @@ -382,8 +384,7 @@ export const generatePreset = (input) => { colors, generateRadii(input), generateShadows(input, colors.theme.colors, colors.mod), - generateFonts(input), - colors.theme.colors + generateFonts(input) ) } diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 5ac87beb..0bc3b82d 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -1,7 +1,7 @@ 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. -const basePaletteKeys = new Set([ +export const basePaletteKeys = new Set([ 'bg', 'fg', 'text', @@ -14,13 +14,26 @@ const basePaletteKeys = new Set([ 'cOrange' ]) +export const shadowsKeys = new Set([ + 'panel', + 'topBar', + 'popup', + 'avatar', + 'avatarStatus', + 'panelHeader', + 'button', + 'buttonHover', + 'buttonPressed', + 'input' +]) + // Keys that are not available in editor and never meant to be edited -const hiddenKeys = new Set([ +export const hiddenKeys = new Set([ 'profileBg', 'profileTint' ]) -const extendedBasePrefixes = [ +export const extendedBasePrefixes = [ 'border', 'icon', 'highlight', @@ -47,12 +60,74 @@ const extendedBasePrefixes = [ 'chatMessageOutgoing' ] -const extendedBaseKeys = Object.fromEntries(extendedBasePrefixes.map(prefix => [prefix, allKeys.filter(k => k.startsWith(prefix))])) +export const extendedBaseKeys = Object.fromEntries(extendedBasePrefixes.map(prefix => [prefix, allKeys.filter(k => k.startsWith(prefix))])) // Keysets that are only really used intermideately, i.e. to generate other colors -const temporary = new Set([ +export const temporary = new Set([ 'border', 'highlight' ]) -const temporaryColors = {} +export const temporaryColors = {} + +export const convertTheme2To3 = (data) => { + const generateRoot = () => { + const directives = {} + basePaletteKeys.forEach(key => { directives['--' + key] = 'color | ' + data.colors[key] }) + return { + component: 'Root', + directives + } + } + + const convertShadows = () => { + const newRules = [] + shadowsKeys.forEach(key => { + const originalShadow = data.shadows[key] + const rule = {} + + 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) + }) + return newRules + } + + return [generateRoot(), ...convertShadows()] +} diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js index c4dfdc4c..8196415b 100644 --- a/src/services/theme_data/theme_data_3.service.js +++ b/src/services/theme_data/theme_data_3.service.js @@ -119,7 +119,8 @@ componentsContext.keys().forEach(key => { const ruleToSelector = genericRuleToSelector(components) -export const init = (extraRuleset, palette) => { +export const init = (extraRuleset) => { + const staticVars = {} const stacked = {} const computed = {} @@ -287,7 +288,7 @@ export const init = (extraRuleset, palette) => { dynamicVars.inheritedBackground = lowerLevelBackground dynamicVars.stacked = convert(stacked[lowerLevelSelector]).rgb - const intendedTextColor = convert(findColor(inheritedTextColor, dynamicVars, palette)).rgb + const intendedTextColor = convert(findColor(inheritedTextColor, dynamicVars, staticVars)).rgb const textColor = newTextRule.directives.textAuto === 'no-auto' ? intendedTextColor : getTextColor( @@ -354,7 +355,7 @@ export const init = (extraRuleset, palette) => { dynamicVars.inheritedBackground = inheritedBackground - const rgb = convert(findColor(computedDirectives.background, dynamicVars, palette)).rgb + const rgb = convert(findColor(computedDirectives.background, dynamicVars, staticVars)).rgb if (!stacked[selector]) { let blend @@ -376,7 +377,7 @@ export const init = (extraRuleset, palette) => { let targetShadow if (typeof shadow === 'string') { if (shadow.startsWith('$')) { - targetShadow = process(shadow, shadowFunctions, findColor, dynamicVars, palette) + targetShadow = process(shadow, shadowFunctions, findColor, dynamicVars, staticVars) } } else { targetShadow = shadow @@ -384,7 +385,7 @@ export const init = (extraRuleset, palette) => { return { ...targetShadow, - color: findColor(targetShadow.color, dynamicVars, palette) + color: findColor(targetShadow.color, dynamicVars, staticVars) } }) } @@ -404,8 +405,13 @@ export const init = (extraRuleset, palette) => { dynamicSlots.forEach(([k, v]) => { const [type, value] = v.split('|').map(x => x.trim()) // woah, Extreme! switch (type) { - case 'color': - dynamicVars[k] = findColor(value, dynamicVars, palette) + case 'color': { + const color = findColor(value, dynamicVars, staticVars) + dynamicVars[k] = color + if (component.name === 'Root') { + staticVars[k.substring(2)] = color + } + } } }) @@ -456,6 +462,7 @@ export const init = (extraRuleset, palette) => { return { lazy: lazyExec, - eager: eagerRules + eager: eagerRules, + staticVars } } -- cgit v1.2.3-70-g09d2 From 2172529dd06cb03be6341b3ae5cb2a74187e8e03 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 20 Feb 2024 01:05:17 +0200 Subject: backwards compat WORKING --- src/services/style_setter/style_setter.js | 6 +- src/services/theme_data/theme2_to_theme3.js | 218 +++++++++++++++++++++++++++- 2 files changed, 214 insertions(+), 10 deletions(-) (limited to 'src/services/theme_data/theme2_to_theme3.js') diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 0c8e503d..14521994 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -4,9 +4,6 @@ import { getColors, computeDynamicColor, getOpacitySlot } from '../theme_data/th import { init } from '../theme_data/theme_data_3.service.js' import { convertTheme2To3 } from '../theme_data/theme2_to_theme3.js' import { getCssRules } from '../theme_data/css_utils.js' -import { - sampleRules -} from 'src/services/theme_data/pleromafe.t3.js' import { defaultState } from '../../modules/config.js' export const applyTheme = (input) => { @@ -16,7 +13,8 @@ export const applyTheme = (input) => { const t1 = performance.now() console.log('Themes 2 initialization took ' + (t1 - t0) + 'ms') const extraRules = convertTheme2To3(theme) - const themes3 = init([...sampleRules, ...extraRules]) + console.log(extraRules) + const themes3 = init(extraRules) const t2 = performance.now() console.log('Themes 3 initialization took ' + (t2 - t1) + 'ms') const head = document.head diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 0bc3b82d..7155875f 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -27,6 +27,18 @@ export const shadowsKeys = new Set([ 'input' ]) +export const radiiKeys = new Set([ + 'btn', + 'input', + // 'checkbox', + 'panel', + 'avatar', + 'avatarAlt', + 'tooltip', + 'attachment', + 'chatMessage' +]) + // Keys that are not available in editor and never meant to be edited export const hiddenKeys = new Set([ 'profileBg', @@ -43,12 +55,13 @@ export const extendedBasePrefixes = [ 'panel', 'topBar', - 'tab', + // 'tab', // TODO: not implemented yet 'btn', 'input', 'selectedMenu', 'alert', + 'alertPopup', 'badge', 'post', @@ -56,15 +69,31 @@ export const extendedBasePrefixes = [ 'poll', 'chatBg', - 'chatMessageIncoming', - 'chatMessageOutgoing' + 'chatMessage' ] +export const nonComponentPrefixes = new Set([ + 'border', + 'icon', + 'highlight', + 'lightText', + 'chatBg' +]) -export const extendedBaseKeys = Object.fromEntries(extendedBasePrefixes.map(prefix => [prefix, allKeys.filter(k => k.startsWith(prefix))])) +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) + }) + ]) +) // Keysets that are only really used intermideately, i.e. to generate other colors export const temporary = new Set([ - 'border', + '', 'highlight' ]) @@ -80,6 +109,51 @@ export const convertTheme2To3 = (data) => { } } + const convertRadii = () => { + const newRules = [] + radiiKeys.forEach(key => { + const originalRadius = data.radii[key] + const rule = {} + + switch (key) { + case 'btn': + rule.component = 'Button' + break + case 'input': + rule.component = 'Input' + break + // TODO: missing feature? + // case 'checkbox': + // rule.component = 'Input' + // break + 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) + }) + return newRules + } + const convertShadows = () => { const newRules = [] shadowsKeys.forEach(key => { @@ -129,5 +203,137 @@ export const convertTheme2To3 = (data) => { return newRules } - return [generateRoot(), ...convertShadows()] + const extendedRules = Object.entries(extendedBaseKeys).map(([prefix, keys]) => { + if (nonComponentPrefixes.has(prefix)) return null + const rule = {} + 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' + } else if (prefix === 'topbar') { + rule.component = 'TopBar' + } else if (prefix === 'chatMessage') { + rule.component = 'ChatMessage' + } else if (prefix === 'poll') { + rule.component = 'PollGraph' + } else { + rule.component = prefix[0].toUpperCase() + prefix.slice(1).toLowerCase() + } + return keys.map((key) => { + const leftoverKey = key.replace(prefix, '') + const parts = (leftoverKey || 'Bg').match(/[A-Z][a-z]*/g) + const last = parts.slice(-1)[0] + let newRule = { directives: {} } + 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] + 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' + newRule.parent = { component: 'Popover' } + variantArray = variantArray.filter(x => x !== 'Post') + } + + if (prefix === 'selectedMenu' && variantArray[0] === 'Popover') { + newRule.parent = { component: 'Popover' } + variantArray = variantArray.filter(x => x !== 'Popover') + } + + switch (prefix) { + case 'btn': + case 'input': + case 'alert': { + const hasPanel = variantArray.find(x => x === 'Panel') + if (hasPanel) { + rule.parent = { component: 'PanelHeader' } + variantArray = variantArray.filter(x => x !== 'Panel') + } + const hasTop = variantArray.find(x => x === 'Top') // TopBar + if (hasTop) { + rule.parent = { component: 'TopBar' } + 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() + } + } + console.log(key, newRule) + return newRule + }) + }) + + const flatExtRules = extendedRules.filter(x => x).reduce((acc, x) => [...acc, ...x], []).filter(x => x) + + return [generateRoot(), ...convertShadows(), ...convertRadii(), ...flatExtRules] } -- cgit v1.2.3-70-g09d2 From c3e6e7c61de8fcf9cdeeeac6479d8a00a9b47b3a Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Tue, 20 Feb 2024 01:18:21 +0200 Subject: improvements to backcompat + fixes to topbar --- src/components/top_bar.style.js | 10 +++++++++- src/services/style_setter/style_setter.js | 1 - src/services/theme_data/theme2_to_theme3.js | 3 ++- top_bar.style.js | 23 ----------------------- 4 files changed, 11 insertions(+), 26 deletions(-) delete mode 100644 top_bar.style.js (limited to 'src/services/theme_data/theme2_to_theme3.js') diff --git a/src/components/top_bar.style.js b/src/components/top_bar.style.js index c02fecf1..46b3fb56 100644 --- a/src/components/top_bar.style.js +++ b/src/components/top_bar.style.js @@ -13,7 +13,15 @@ export default { defaultRules: [ { directives: { - background: '--fg' + background: '--fg', + shadow: [{ + x: 0, + y: 0, + blur: 4, + spread: 0, + color: '#000000', + alpha: 0.6 + }] } } ] diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 14521994..587e6a45 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -13,7 +13,6 @@ export const applyTheme = (input) => { const t1 = performance.now() console.log('Themes 2 initialization took ' + (t1 - t0) + 'ms') const extraRules = convertTheme2To3(theme) - console.log(extraRules) const themes3 = init(extraRules) const t2 = performance.now() console.log('Themes 3 initialization took ' + (t2 - t1) + 'ms') diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 7155875f..3d9ede49 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -222,7 +222,7 @@ export const convertTheme2To3 = (data) => { rule.variant = 'outgoing' } else if (prefix === 'panel') { rule.component = 'PanelHeader' - } else if (prefix === 'topbar') { + } else if (prefix === 'topBar') { rule.component = 'TopBar' } else if (prefix === 'chatMessage') { rule.component = 'ChatMessage' @@ -248,6 +248,7 @@ export const convertTheme2To3 = (data) => { case 'Border': newRule.parent = rule newRule.directives.textColor = data.colors[key] + newRule.directives.textAuto = 'no-auto' variantArray = parts.slice(0, -1) break default: diff --git a/top_bar.style.js b/top_bar.style.js deleted file mode 100644 index 4def18a3..00000000 --- a/top_bar.style.js +++ /dev/null @@ -1,23 +0,0 @@ -export default { - name: 'TopBar', - selector: 'nav', - validInnerComponents: [ - 'Link', - 'Text', - 'Icon' - ], - defaultRules: [ - { - directives: { - shadow: [{ - x: 0, - y: 0, - blur: 4, - spread: 0, - color: '#000000', - alpha: 0.6 - }] - } - } - ] -} -- cgit v1.2.3-70-g09d2 From 900eb34186d6e80af95ea9120c7452b36b1c0f47 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 21 Feb 2024 12:33:33 +0200 Subject: improve backwards compat for avatar shadows --- src/services/theme_data/theme2_to_theme3.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/services/theme_data/theme2_to_theme3.js') diff --git a/src/services/theme_data/theme2_to_theme3.js b/src/services/theme_data/theme2_to_theme3.js index 3d9ede49..48ab96ff 100644 --- a/src/services/theme_data/theme2_to_theme3.js +++ b/src/services/theme_data/theme2_to_theme3.js @@ -199,6 +199,12 @@ export const convertTheme2To3 = (data) => { shadow: originalShadow } newRules.push(rule) + if (key === 'avatarStatus') { + newRules.push({ ...rule, parent: { component: 'Notification' } }) + } + if (key === 'buttonPressed') { + newRules.push({ ...rule, state: ['toggled'] }) + } }) return newRules } -- cgit v1.2.3-70-g09d2 From f609aaba0c9a7c4d3c3d579a2a0021ecd5fc4028 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Wed, 21 Feb 2024 13:10:11 +0200 Subject: improve checkbox styles --- src/components/checkbox/checkbox.vue | 5 ++--- src/components/font_control/font_control.vue | 2 +- src/components/input.style.js | 10 ++++++++++ src/components/poll/poll.vue | 4 ++-- src/components/range_input/range_input.vue | 2 +- src/components/shadow_control/shadow_control.vue | 2 +- src/services/theme_data/theme2_to_theme3.js | 10 +++++----- 7 files changed, 22 insertions(+), 13 deletions(-) (limited to 'src/services/theme_data/theme2_to_theme3.js') diff --git a/src/components/checkbox/checkbox.vue b/src/components/checkbox/checkbox.vue index 9739c08b..eac79199 100644 --- a/src/components/checkbox/checkbox.vue +++ b/src/components/checkbox/checkbox.vue @@ -12,7 +12,7 @@ @change="$emit('update:modelValue', $event.target.checked)" > @@ -82,8 +82,7 @@ export default { transition: color 200ms; width: 1.1em; height: 1.1em; - border-radius: $fallback--checkboxRadius; - border-radius: var(--checkboxRadius, $fallback--checkboxRadius); + border-radius: var(--roundness); box-shadow: var(--shadow); background-color: var(--background); vertical-align: top; diff --git a/src/components/font_control/font_control.vue b/src/components/font_control/font_control.vue index b90fba56..d5e63578 100644 --- a/src/components/font_control/font_control.vue +++ b/src/components/font_control/font_control.vue @@ -14,7 +14,7 @@ v-if="typeof fallback !== 'undefined'" :id="name + '-o'" :aria-labelledby="name + '-label'" - class="input opt exlcude-disabled visible-for-screenreader-only" + class="input -checkbox opt exlcude-disabled visible-for-screenreader-only" type="checkbox" :checked="present" @change="$emit('update:modelValue', typeof modelValue === 'undefined' ? fallback : undefined)" diff --git a/src/components/input.style.js b/src/components/input.style.js index 985d5412..b1c9f3db 100644 --- a/src/components/input.style.js +++ b/src/components/input.style.js @@ -12,6 +12,10 @@ const hoverGlow = { export default { name: 'Input', selector: '.input', + variant: { + checkbox: '.-checkbox', + radio: '.-radio' + }, states: { disabled: ':disabled', hover: ':hover:not(:disabled)', @@ -21,6 +25,12 @@ export default { 'Text' ], defaultRules: [ + { + variant: 'checkbox', + directives: { + roundness: 1 + } + }, { directives: { background: '--fg, -5', diff --git a/src/components/poll/poll.vue b/src/components/poll/poll.vue index 087822e1..57ec879a 100644 --- a/src/components/poll/poll.vue +++ b/src/components/poll/poll.vue @@ -43,7 +43,7 @@ @@ -52,7 +52,7 @@ type="radio" :disabled="loading" :value="index" - class="input" + class="input -radio" >