commit: 96a236ed28812a287bbaff6dcbfcf1f4991463a9
parent afb9c0aa99848d4d1d3f0601fcb9b6fe8225a7d9
Author: Henry Jameson <me@hjkos.com>
Date: Wed, 12 Feb 2025 15:45:46 +0200
themes3 optimization
Diffstat:
4 files changed, 48 insertions(+), 23 deletions(-)
diff --git a/src/components/button_unstyled.style.js b/src/components/button_unstyled.style.js
@@ -2,6 +2,7 @@ export default {
name: 'ButtonUnstyled',
selector: '.button-unstyled',
notEditable: true,
+ transparent: true,
states: {
toggled: '.toggled',
disabled: ':disabled',
diff --git a/src/components/rich_content/rich_content.style.js b/src/components/rich_content/rich_content.style.js
@@ -2,6 +2,7 @@ export default {
name: 'RichContent',
selector: '.RichContent',
notEditable: true,
+ transparent: true,
validInnerComponents: [
'Text',
'FunText',
diff --git a/src/components/root.style.js b/src/components/root.style.js
@@ -2,27 +2,6 @@ export default {
name: 'Root',
selector: ':root',
notEditable: true,
- validInnerComponents: [
- // These are purely for --parent--text et such to work
- 'Text',
- 'Link',
- 'Border',
-
- 'Underlay',
- 'Modals',
- 'Popover',
- 'TopBar',
- 'Scrollbar',
- 'ScrollbarElement',
- 'MobileDrawer',
- 'Alert',
- 'Button' // mobile post button
- ],
- validInnerComponentsLite: [
- 'Underlay',
- 'Scrollbar',
- 'ScrollbarElement'
- ],
defaultRules: [
{
directives: {
diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js
@@ -32,6 +32,7 @@ const components = {
Link: null,
Icon: null,
Border: null,
+ PanelHeader: null,
Panel: null,
Chat: null,
ChatMessage: null
@@ -151,6 +152,25 @@ componentsContext.keys().forEach(key => {
}
components[component.name] = component
})
+Object.keys(components).forEach(key => {
+ if (key === 'Root') return
+ components.Root.validInnerComponents = components.Root.validInnerComponents || []
+ components.Root.validInnerComponents.push(key)
+})
+
+
+Object.keys(components).forEach(key => {
+ const component = components[key]
+ const { validInnerComponents = [] } = component
+ validInnerComponents.forEach(inner => {
+ const child = components[inner]
+ component.possibleChildren = component.possibleChildren || []
+ component.possibleChildren.push(child)
+ child.possibleParents = child.possibleParents || []
+ child.possibleParents.push(component)
+ })
+})
+
const engineChecksum = sum(components)
@@ -244,7 +264,21 @@ export const init = ({
}
const virtualComponents = new Set(Object.values(components).filter(c => c.virtual).map(c => c.name))
+ const transparentComponents = new Set(Object.values(components).filter(c => c.transparent).map(c => c.name))
const nonEditableComponents = new Set(Object.values(components).filter(c => c.notEditable).map(c => c.name))
+ const extraCompileComponents = new Set([])
+
+ Object.values(components).forEach(component => {
+ const relevantRules = ruleset.filter(r => r.component === component.name)
+ const backgrounds = relevantRules.map(r => r.directives.background).filter(x => x)
+ const opacities = relevantRules.map(r => r.directives.opacity).filter(x => x)
+ if (
+ backgrounds.some(x => x.match(/--parent/)) ||
+ opacities.some(x => x != null && x < 1))
+ {
+ extraCompileComponents.add(component.name)
+ }
+ })
const processCombination = (combination) => {
try {
@@ -473,11 +507,21 @@ export const init = ({
let validInnerComponents
if (editMode) {
const temp = (component.validInnerComponentsLite || component.validInnerComponents || [])
- validInnerComponents = temp.filter(c => virtualComponents.has(c) && !nonEditableComponents.has(c))
+ validInnerComponents = temp
+ .filter(c => virtualComponents.has(c) && !nonEditableComponents.has(c))
} else if (liteMode) {
validInnerComponents = (component.validInnerComponentsLite || component.validInnerComponents || [])
- } else {
+ } else if (component.name === 'Root') {
validInnerComponents = component.validInnerComponents || []
+ } else {
+ validInnerComponents = component
+ .validInnerComponents
+ ?.filter(
+ c => virtualComponents.has(c)
+ || transparentComponents.has(c)
+ || extraCompileComponents.has(c)
+ )
+ || []
}
// Normalizing states and variants to always include "normal"