smbls 0.8.32 → 0.8.35

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.35",
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,70 @@
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
+ '@': (key, props, result, element, isSubtree) => applyMediaProps(key, props, isSubtree ? result : result.media, element),
8
+ ':': (key, props, result, element, isSubtree) => applySelectorProps(key, props, isSubtree ? result : result.selector, element),
9
+ $: (key, props, result, element, isSubtree) => applyCaseProps(key, props, isSubtree ? result : result.case, element),
10
+ '.': (key, props, result, element, isSubtree) => applyConditionalCaseProps(key, props, isSubtree ? result : result.case, element)
11
+ }
12
+
13
+ const execClass = (key, props, result, element) => {
7
14
  const { class: className } = element
8
- const subPropsClassname = {}
15
+ const classnameExec = className[key]
9
16
 
10
- for (const prop in subProps) {
11
- // if (prop.slice(0, 1) === ':') {
12
- // applySelectorProps(prop, lib, element)
13
- // continue
14
- // }
17
+ if (typeof classnameExec !== 'function') return
15
18
 
16
- const classnameExec = className[prop]
17
- if (typeof classnameExec !== 'function') continue
19
+ let classExec = classnameExec({ props })
20
+ if (isArray(classExec)) {
21
+ classExec = classExec.reduce((a, c) => merge(a, c), {})
22
+ }
18
23
 
19
- let classExec = classnameExec({ props: subProps })
20
- if (isArray(classExec)) {
21
- classExec = classExec.reduce((a, c) => merge(a, c), {})
22
- }
24
+ for (const finalProp in classExec) {
25
+ result[finalProp] = classExec[finalProp]
26
+ }
27
+ }
23
28
 
24
- for (const finalProp in classExec) {
25
- subPropsClassname[finalProp] = classExec[finalProp]
29
+ const convertPropsToClass = (props, result, element) => {
30
+ const propsClassObj = {}
31
+
32
+ for (const key in props) {
33
+ const setter = keySetters[key.slice(0, 1)]
34
+ if (setter) {
35
+ setter(key, props[key], propsClassObj, element, true)
36
+ continue
37
+ } else {
38
+ execClass(key, props, propsClassObj, element)
26
39
  }
27
40
  }
28
41
 
29
- // console.group(subProps)
30
- // console.log(subPropsClassname)
31
- // console.log(lib)
32
- // console.log(className)
33
- // console.groupEnd(subProps)
34
-
35
- return subPropsClassname
42
+ return propsClassObj
36
43
  }
37
44
 
38
- const applyMediaProps = (key, lib, element) => {
39
- const { props } = element
45
+ const applyMediaProps = (key, props, result, element) => {
40
46
  const mediaName = CONFIG_MEDIA[key.slice(1)]
41
47
  const mediaKey = `@media screen and ${mediaName}`
42
- const mediaProps = props[key]
43
- lib.media[mediaKey] = convertPropsToClass(mediaProps, lib, element)
48
+ result[mediaKey] = convertPropsToClass(props, result, element)
44
49
  }
45
50
 
46
- const applySelectorProps = (key, lib, element) => {
47
- const { props } = element
51
+ const applySelectorProps = (key, props, result, element) => {
48
52
  const selectorKey = `&${key}`
49
- const selectorProps = props[key]
50
- lib.selector[selectorKey] = convertPropsToClass(selectorProps, lib, element)
53
+ result[selectorKey] = convertPropsToClass(props, result, element)
51
54
  }
52
55
 
53
- const applyCaseProps = (key, lib, element) => {
54
- const { props } = element
56
+ const applyCaseProps = (key, props, result, element) => {
55
57
  const caseKey = key.slice(1)
56
58
  if (!CONFIG_CASES[caseKey]) return
57
- const caseProps = props[key]
58
- merge(lib.case, convertPropsToClass(caseProps, lib, element))
59
+ merge(result, convertPropsToClass(props, result, element))
59
60
  }
60
61
 
61
- const keySetters = {
62
- '@': applyMediaProps,
63
- ':': applySelectorProps,
64
- $: applyCaseProps
62
+ const applyConditionalCaseProps = (key, props, result, element) => {
63
+ const caseKey = key.slice(1)
64
+ if (!element.props[caseKey]) return // remove classname if not here
65
+ merge(result, convertPropsToClass(props, result, element))
65
66
  }
66
67
 
67
- const init = (el, s) => {
68
- const { props, class: className } = el
68
+ const init = (element, s) => {
69
+ const { props, class: className } = element
69
70
 
70
71
  const CLASS_NAMES = {
71
72
  media: {},
@@ -75,7 +76,7 @@ const init = (el, s) => {
75
76
 
76
77
  for (const key in props) {
77
78
  const setter = keySetters[key.slice(0, 1)]
78
- if (setter) setter(key, CLASS_NAMES, el)
79
+ if (setter) setter(key, props[key], CLASS_NAMES, element)
79
80
  }
80
81
 
81
82
  merge(className, CLASS_NAMES)
@@ -89,7 +90,6 @@ export const initUpdate = el => {
89
90
  // FORCE STATE UPDATE:
90
91
  const { props, class: className } = el
91
92
  const rootState = el.__root ? el.__root.state : el.state
92
- console.log(props)
93
93
  if (el.key !== 'app') return
94
94
 
95
95
  if (props.theme) {