aboutsummaryrefslogtreecommitdiff
path: root/src/services/theme_data/theme_data_3.service.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/theme_data/theme_data_3.service.js')
-rw-r--r--src/services/theme_data/theme_data_3.service.js62
1 files changed, 50 insertions, 12 deletions
diff --git a/src/services/theme_data/theme_data_3.service.js b/src/services/theme_data/theme_data_3.service.js
index 3a6fd552..39a9998d 100644
--- a/src/services/theme_data/theme_data_3.service.js
+++ b/src/services/theme_data/theme_data_3.service.js
@@ -14,7 +14,7 @@ const components = {
}
// This gives you an array of arrays of all possible unique (i.e. order-insensitive) combinations
-const getAllPossibleCombinations = (array) => {
+export const getAllPossibleCombinations = (array) => {
const combos = [array.map(x => [x])]
for (let comboSize = 2; comboSize <= array.length; comboSize++) {
const previous = combos[combos.length - 1]
@@ -30,15 +30,52 @@ const getAllPossibleCombinations = (array) => {
return combos.reduce((acc, x) => [...acc, ...x], [])
}
-export const init = () => {
+export const ruleToSelector = (rule) => {
+ const component = components[rule.component]
+ const { states, variants, selector } = component
+
+ const applicableStates = (rule.state.filter(x => x !== 'normal') || []).map(state => states[state])
+
+ const applicableVariantName = (rule.variant || 'normal')
+ let applicableVariant = ''
+ if (applicableVariantName !== 'normal') {
+ applicableVariant = variants[applicableVariantName]
+ }
+
+ const selectors = [selector, applicableVariant, ...applicableStates]
+ .toSorted((a, b) => {
+ if (a.startsWith(':')) return 1
+ else return -1
+ })
+ .join('')
+
+ if (rule.parent) {
+ return ruleToSelector(rule.parent) + ' ' + selectors
+ }
+ return selectors
+}
+
+export const init = (ruleset) => {
const rootName = root.name
const rules = []
+ const rulesByComponent = {}
+
+ const addRule = (rule) => {
+ rules.push(rule)
+ rulesByComponent[rule.component] = rulesByComponent[rule.component] || []
+ rulesByComponent.push(rule)
+ }
+
+ ruleset.forEach(rule => {
+
+ })
const processInnerComponent = (component, parent) => {
const {
- validInnerComponents,
+ validInnerComponents = [],
states: originalStates = {},
- variants: originalVariants = {}
+ variants: originalVariants = {},
+ name
} = component
const states = { normal: '', ...originalStates }
@@ -51,16 +88,17 @@ export const init = () => {
}).reduce((acc, x) => [...acc, ...x], [])
stateVariantCombination.forEach(combination => {
- rules.push(({
- parent,
- component: component.name,
- state: combination.state,
- variant: combination.variant
- }))
-
- innerComponents.forEach(innerComponent => processInnerComponent(innerComponent, combination))
+ // addRule(({
+ // parent,
+ // component: component.name,
+ // state: combination.state,
+ // variant: combination.variant
+ // }))
+
+ innerComponents.forEach(innerComponent => processInnerComponent(innerComponent, { parent, component: name, ...combination }))
})
}
processInnerComponent(components[rootName])
+ return rules
}