smbls 0.8.32 → 0.8.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "UI Library built on Scratch and DOMQL",
4
4
  "private": false,
5
5
  "author": "symbo.ls",
6
- "version": "0.8.32",
6
+ "version": "0.8.33",
7
7
  "repository": "https://github.com/symbo-ls/smbls",
8
8
  "main": "src/index.js",
9
9
  "files": [
package/src/Link.js CHANGED
@@ -7,7 +7,7 @@ export const Link = {
7
7
  proto: [Shape, Text],
8
8
  tag: 'a',
9
9
  props: {
10
- theme: 'link',
10
+ // theme: 'link',
11
11
  aria: {},
12
12
  fontWeight: 'bold',
13
13
  textDecoration: 'none'
package/src/Media.js CHANGED
@@ -3,69 +3,85 @@
3
3
  import { merge, isArray } from '@domql/utils'
4
4
  import { CASES as CONFIG_CASES, MEDIA as CONFIG_MEDIA, getTheme } from '@symbo.ls/scratch'
5
5
 
6
- const convertPropsToClass = (subProps, lib, element) => {
6
+ // const keySetters = {
7
+ // '@': (props, result, element, isSubtree) => {
8
+ // if (isSubtree) result.media = {}
9
+ // return applyMediaProps(props, result.media, element)
10
+ // },
11
+ // ':': (props, result, element, isSubtree) => {
12
+ // if (isSubtree) result.selector = {}
13
+ // return applySelectorProps(props, result.selector, element)
14
+ // },
15
+ // $: (props, result, element, isSubtree) => {
16
+ // if (isSubtree) result.case = {}
17
+ // return applyCaseProps(props, result.case, element)
18
+ // }
19
+ // }
20
+
21
+ // const keySetters = {
22
+ // '@': (props, result, element) => applyMediaProps(props, result.media, element),
23
+ // ':': (props, result, element) => applySelectorProps(props, result.selector, element),
24
+ // $: (props, result, element) => applyCaseProps(props, result.case, element)
25
+ // }
26
+
27
+ const keySetters = {
28
+ '@': (key, props, result, element, isSubtree) => applyMediaProps(key, props, isSubtree ? result : result.media, element),
29
+ ':': (key, props, result, element, isSubtree) => applySelectorProps(key, props, isSubtree ? result : result.selector, element),
30
+ $: (key, props, result, element, isSubtree) => applyCaseProps(key, props, isSubtree ? result : result.case, element),
31
+ '.': (key, props, result, element, isSubtree) => applyCaseProps(key, props, isSubtree ? result : result.case, element)
32
+ }
33
+
34
+ const execClass = (key, props, result, element) => {
7
35
  const { class: className } = element
8
- const subPropsClassname = {}
36
+ const classnameExec = className[key]
9
37
 
10
- for (const prop in subProps) {
11
- // if (prop.slice(0, 1) === ':') {
12
- // applySelectorProps(prop, lib, element)
13
- // continue
14
- // }
38
+ if (typeof classnameExec !== 'function') return
15
39
 
16
- const classnameExec = className[prop]
17
- if (typeof classnameExec !== 'function') continue
40
+ let classExec = classnameExec({ props })
41
+ if (isArray(classExec)) {
42
+ classExec = classExec.reduce((a, c) => merge(a, c), {})
43
+ }
18
44
 
19
- let classExec = classnameExec({ props: subProps })
20
- if (isArray(classExec)) {
21
- classExec = classExec.reduce((a, c) => merge(a, c), {})
22
- }
45
+ for (const finalProp in classExec) {
46
+ result[finalProp] = classExec[finalProp]
47
+ }
48
+ }
23
49
 
24
- for (const finalProp in classExec) {
25
- subPropsClassname[finalProp] = classExec[finalProp]
50
+ const convertPropsToClass = (props, result, element) => {
51
+ const propsClassObj = {}
52
+
53
+ for (const key in props) {
54
+ const setter = keySetters[key.slice(0, 1)]
55
+ if (setter) {
56
+ setter(key, props[key], propsClassObj, element, true)
57
+ continue
58
+ } else {
59
+ execClass(key, props, propsClassObj, element)
26
60
  }
27
61
  }
28
62
 
29
- // console.group(subProps)
30
- // console.log(subPropsClassname)
31
- // console.log(lib)
32
- // console.log(className)
33
- // console.groupEnd(subProps)
34
-
35
- return subPropsClassname
63
+ return propsClassObj
36
64
  }
37
65
 
38
- const applyMediaProps = (key, lib, element) => {
39
- const { props } = element
66
+ const applyMediaProps = (key, props, result, element) => {
40
67
  const mediaName = CONFIG_MEDIA[key.slice(1)]
41
68
  const mediaKey = `@media screen and ${mediaName}`
42
- const mediaProps = props[key]
43
- lib.media[mediaKey] = convertPropsToClass(mediaProps, lib, element)
69
+ result[mediaKey] = convertPropsToClass(props, result, element)
44
70
  }
45
71
 
46
- const applySelectorProps = (key, lib, element) => {
47
- const { props } = element
72
+ const applySelectorProps = (key, props, result, element) => {
48
73
  const selectorKey = `&${key}`
49
- const selectorProps = props[key]
50
- lib.selector[selectorKey] = convertPropsToClass(selectorProps, lib, element)
74
+ result[selectorKey] = convertPropsToClass(props, result, element)
51
75
  }
52
76
 
53
- const applyCaseProps = (key, lib, element) => {
54
- const { props } = element
77
+ const applyCaseProps = (key, props, result, element) => {
55
78
  const caseKey = key.slice(1)
56
- if (!CONFIG_CASES[caseKey]) return
57
- const caseProps = props[key]
58
- merge(lib.case, convertPropsToClass(caseProps, lib, element))
79
+ if (!(CONFIG_CASES[caseKey] || element.props[caseKey])) return
80
+ merge(result, convertPropsToClass(props, result, element))
59
81
  }
60
82
 
61
- const keySetters = {
62
- '@': applyMediaProps,
63
- ':': applySelectorProps,
64
- $: applyCaseProps
65
- }
66
-
67
- const init = (el, s) => {
68
- const { props, class: className } = el
83
+ const init = (element, s) => {
84
+ const { props, class: className } = element
69
85
 
70
86
  const CLASS_NAMES = {
71
87
  media: {},
@@ -75,7 +91,7 @@ const init = (el, s) => {
75
91
 
76
92
  for (const key in props) {
77
93
  const setter = keySetters[key.slice(0, 1)]
78
- if (setter) setter(key, CLASS_NAMES, el)
94
+ if (setter) setter(key, props[key], CLASS_NAMES, element)
79
95
  }
80
96
 
81
97
  merge(className, CLASS_NAMES)
@@ -89,7 +105,6 @@ export const initUpdate = el => {
89
105
  // FORCE STATE UPDATE:
90
106
  const { props, class: className } = el
91
107
  const rootState = el.__root ? el.__root.state : el.state
92
- console.log(props)
93
108
  if (el.key !== 'app') return
94
109
 
95
110
  if (props.theme) {