@symbo.ls/preview 2.7.16 → 2.7.18

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
@@ -2,7 +2,7 @@
2
2
  "name": "@symbo.ls/preview",
3
3
  "description": "",
4
4
  "author": "symbo.ls",
5
- "version": "2.7.16",
5
+ "version": "2.7.18",
6
6
  "main": "src/app.js",
7
7
  "scripts": {
8
8
  "link:all": "yarn link smbls domql css-in-props @symbo.ls/icons @symbo.ls/config @symbo.ls/components @symbo.ls/scratch @symbo.ls/playground @symbo.ls/utils @symbo.ls/init @symbo.ls/config-default @domql/router @domql/utils @domql/router",
@@ -53,6 +53,7 @@ const propertyNumber = {
53
53
 
54
54
  const componentProperties = {
55
55
  extend: Flex,
56
+ state: 'properties',
56
57
  props: {
57
58
  padding: 'Z2 A',
58
59
  flow: 'column',
@@ -60,7 +61,7 @@ const componentProperties = {
60
61
  background: 'gray1'
61
62
  },
62
63
  childExtend: propertyNumber,
63
- $setStateCollection: ({ state }) => state.properties
64
+ $setStateCollection: ({ state }) => state.parse()
64
65
  }
65
66
 
66
67
  export const DesignComponent = {
@@ -1,7 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  import { router } from '@domql/router'
4
- import { HeaderSignup, HeaderOfMember, HeaderInitial } from '@symbo.ls/components'
4
+ import { HeaderSignup, HeaderOfMember } from '@symbo.ls/components'
5
+ import { getCookie } from 'domql/packages/cookie'
5
6
 
6
7
  export const Header = {
7
8
  props: {
@@ -17,16 +18,27 @@ export const Header = {
17
18
  }
18
19
  }
19
20
 
21
+ // '/': HeaderSignup, // HeaderInitial,
22
+ // '/init': HeaderInitial, // HeaderInitial,
23
+
20
24
  let cacheToken
21
25
  export const HeaderOnRouter = {
22
26
  extend: Header,
23
27
  props: { width: '100%' },
24
28
 
25
29
  define: { routes: param => param },
26
- routes: {
27
- '/': HeaderSignup, // HeaderInitial,
28
- '/init': HeaderInitial, // HeaderInitial,
29
- '/*': HeaderOfMember
30
+ routes: ({ state }) => {
31
+ const appKey = getCookie('appKey')
32
+ if (appKey || state.appKey) {
33
+ return {
34
+ '/*': HeaderOfMember
35
+ }
36
+ } else {
37
+ return {
38
+ '/*': HeaderSignup
39
+
40
+ }
41
+ }
30
42
  },
31
43
 
32
44
  on: {
@@ -14,9 +14,13 @@ const IconItem = {
14
14
  flexAlign: 'center center',
15
15
  href: '/icons/edit-icon/' + state.value,
16
16
  theme: 'tertiary',
17
+ transitionProperty: 'transform, opacity, border-radius',
17
18
  icon: {
18
19
  fontSize: 'C2',
19
20
  name: state.value
21
+ },
22
+ ':hover': {
23
+ round: '0'
20
24
  }
21
25
  }),
22
26
 
@@ -0,0 +1,59 @@
1
+ 'use strict'
2
+
3
+ import { Flex, Grid } from '@symbo.ls/components'
4
+
5
+ import { fieldsGridProps } from './fieldsGridProps'
6
+
7
+ const fields = {
8
+ extend: Grid,
9
+
10
+ InputField_email: {
11
+ gridColumn: 'span 2',
12
+ title: { text: 'Your Email' }
13
+ },
14
+
15
+ InputField_username: {
16
+ title: { text: 'Your Username' }
17
+ },
18
+
19
+ SelectField2_role: {
20
+ title: { text: 'Your role' }
21
+ },
22
+
23
+ PasswordField: {
24
+ title: { text: 'Change Password' }
25
+ },
26
+
27
+ PasswordField_repeat: {
28
+ title: { opacity: '0' }
29
+ }
30
+ }
31
+
32
+ const props = {
33
+ boxSize: '100% 100%',
34
+ flow: 'column',
35
+ title: {
36
+ text: 'Your personal account',
37
+ padding: '- - C2 -'
38
+ },
39
+ fields: {
40
+ ...fieldsGridProps
41
+ },
42
+ button: {
43
+ text: 'Update',
44
+ padding: 'Z1 C1',
45
+ fontSize: 'Z2',
46
+ margin: 'auto - - -',
47
+ width: 'fit-content'
48
+ }
49
+ }
50
+
51
+ export const PersonalAccount = {
52
+ extend: Flex,
53
+ props,
54
+
55
+ title: {},
56
+ fields,
57
+
58
+ ContinueButton: {}
59
+ }
@@ -4,17 +4,13 @@ import { Flex } from '@symbo.ls/components'
4
4
  import icon from '../Init/Personalize/icon'
5
5
  import fields from '../Init/Personalize/fields'
6
6
 
7
- export const projectAccount = {
7
+ export const ProjectAccount = {
8
8
  extend: Flex,
9
9
  props: {
10
10
  flow: 'column',
11
11
  height: '100%'
12
12
  },
13
13
 
14
- class: {
15
- show: (element, state) => state.activePersonalAccount
16
- },
17
-
18
14
  SectionHeader: {
19
15
  title: ({ state }) => 'Settings for ' + state.projectName,
20
16
  p: 'Some settings will be stored only in this device.'
@@ -29,7 +25,7 @@ export const projectAccount = {
29
25
  },
30
26
 
31
27
  Flex: {
32
- props: { gap: 'C1' },
28
+ props: { gap: 'C1', align: 'flex-start' },
33
29
 
34
30
  icon,
35
31
  fields
@@ -1,20 +1,23 @@
1
1
  'use strict'
2
2
 
3
+ import { router } from '@domql/router'
3
4
  import { Flex, IconButton, Link, SquareButton } from '@symbo.ls/components'
4
5
 
5
- import { personalAccount } from './personalAccount'
6
- import { projectAccount } from './projectAccount'
6
+ import { PersonalAccount } from './Personal'
7
+ import { ProjectAccount } from './Project'
7
8
 
8
9
  const ProjectButton = {
9
- extend: [SquareButton],
10
- props: { theme: 'transparent' },
11
- User: {
12
- props: ({ state }) => ({
10
+ extend: [Link, SquareButton],
11
+ props: ({ state }) => ({
12
+ theme: 'transparent',
13
+ href: '/account/' + state.key.split('.')[0],
14
+ User: {
13
15
  round: '100%',
14
16
  src: state.icon && state.icon.src,
15
17
  title: state.projectName
16
- })
17
- },
18
+ }
19
+ }),
20
+ User: {},
18
21
  on: {
19
22
  click: (event, el, s) => {
20
23
  const { id, name } = s.parse()
@@ -23,7 +26,7 @@ const ProjectButton = {
23
26
  projectId: id,
24
27
  activeProject: el.key
25
28
  })
26
- s.update({ activePersonalAccount: false })
29
+ Link.on.click(event, el, s)
27
30
  }
28
31
  }
29
32
  }
@@ -54,13 +57,8 @@ const sidebar = {
54
57
  Flex: {
55
58
  extend: Flex,
56
59
  profile: {
57
- extend: [IconButton],
58
- props: { icon: 'openSource' },
59
- on: {
60
- click: (event, element, state) => {
61
- state.update({ activePersonalAccount: true })
62
- }
63
- }
60
+ extend: [Link, IconButton],
61
+ props: { icon: 'human', href: '/account' }
64
62
  },
65
63
 
66
64
  projects: {
@@ -102,8 +100,18 @@ export const Account = {
102
100
  props,
103
101
 
104
102
  sidebar,
105
- content: {
106
- personalAccount,
107
- projectAccount
103
+
104
+ define: { routes: param => param },
105
+ routes: {
106
+ '/': PersonalAccount,
107
+ '/*': ProjectAccount
108
+ },
109
+
110
+ on: {
111
+ render: element => {
112
+ const { pathname, hash } = window.location
113
+ const url = pathname + hash
114
+ router(element, url, {})
115
+ }
108
116
  }
109
117
  }
@@ -3,6 +3,8 @@
3
3
  import { GlobalThemeTemplate, Flex, SectionHeader, Link, ClickableItem } from '@symbo.ls/components'
4
4
 
5
5
  export default {
6
+ state: 'THEME',
7
+
6
8
  header: {
7
9
  extend: SectionHeader,
8
10
  state: {
@@ -6,6 +6,7 @@ import themes from './themes'
6
6
 
7
7
  export const Color = {
8
8
  key: 'colors',
9
+ state: 'PROJECT_SYSTEM',
9
10
 
10
11
  props: { gap: 'A' },
11
12
 
@@ -3,13 +3,15 @@
3
3
  import { SectionHeader, ColorTemplate, Flex } from '@symbo.ls/components'
4
4
 
5
5
  const mapColors = (el, s) => {
6
- const { COLOR } = s.__projectSystem
7
- if (!COLOR) return
6
+ const COLOR = s.parse()
7
+ console.log(s)
8
8
  const colorKeys = Object.keys(COLOR)
9
9
  return colorKeys.map(v => ({ key: v, value: COLOR[v] }))
10
10
  }
11
11
 
12
12
  export default {
13
+ state: 'COLOR',
14
+
13
15
  header: {
14
16
  extend: SectionHeader,
15
17
  state: {
@@ -22,7 +24,7 @@ export default {
22
24
  }
23
25
  },
24
26
 
25
- content: {
27
+ cnt: {
26
28
  extend: Flex,
27
29
  props: {
28
30
  flow: 'row wrap',
@@ -3,13 +3,15 @@
3
3
  import { ThemeTemplate, SectionHeader, Grid } from '@symbo.ls/components'
4
4
 
5
5
  const mapThemes = (el, s) => {
6
- const { THEME } = s.__projectSystem
7
- if (!THEME) return
6
+ const THEME = s.parse()
7
+ console.log(s)
8
8
  const themeKeys = Object.keys(THEME)
9
9
  return themeKeys.map(v => ({ ...THEME[v], key: v }))
10
10
  }
11
11
 
12
12
  export default {
13
+ state: 'THEME',
14
+
13
15
  header: {
14
16
  extend: SectionHeader,
15
17
  state: {
@@ -22,7 +24,7 @@ export default {
22
24
  }
23
25
  },
24
26
 
25
- content: {
27
+ cnt: {
26
28
  extend: Grid,
27
29
  props: {
28
30
  columns: 'repeat(5, 1fr)',
@@ -31,6 +33,6 @@ export default {
31
33
  },
32
34
 
33
35
  childExtend: ThemeTemplate,
34
- $setStateCollection: (el, s) => mapThemes(el, s)
36
+ $setStateCollection: mapThemes
35
37
  }
36
38
  }
@@ -13,7 +13,7 @@ export default {
13
13
 
14
14
  props: {
15
15
  align: 'stretch space-between',
16
- margin: 'C1 -Z1',
16
+ margin: '-A -Z1 B',
17
17
  gap: 'B1'
18
18
  },
19
19
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { Flex } from '@symbo.ls/components'
4
4
 
5
- import banners from './banners' // eslint-disable-line no-unused-vars
5
+ import banners from './banners'
6
6
  import summary from './summary'
7
7
  import quickstart from './quickstart'
8
8
 
@@ -16,7 +16,7 @@ export const DesignSystemDashboard = {
16
16
  p: { text: 'Create your Design System guidelines' }
17
17
  },
18
18
 
19
- // banners,
19
+ banners,
20
20
  summary,
21
21
  quickstart
22
22
  }
@@ -26,7 +26,6 @@ export default {
26
26
 
27
27
  Flex: {
28
28
  props: {
29
- // display: 'inline-flex',
30
29
  gap: 'D1',
31
30
  align: 'flex-start space-between',
32
31
  childProps: {
@@ -43,7 +42,7 @@ export default {
43
42
  Terminal: {
44
43
  note: { text: 'Install Symbols to your project' },
45
44
  props: {
46
- command: { text: 'npm i smbls -g' }
45
+ command: { text: 'npm i smbls --save' }
47
46
  }
48
47
  }
49
48
  },
@@ -63,12 +62,11 @@ export default {
63
62
  extend: 'QuickStartCode',
64
63
  QuickStartNumber: { text: '3' },
65
64
  Code: {
65
+ props: {},
66
66
  note: { text: 'Create .symbolsrc.js file in your project and insert your Symbols key' },
67
- props: ({ state }) => ({
68
- code: {
69
- text: `{ "key": "${state.appKey}" }`
70
- }
71
- })
67
+ code: {
68
+ text: ({ state }) => `{ "key": "${state.appKey}" }`
69
+ }
72
70
  }
73
71
  },
74
72
 
@@ -1,10 +1,7 @@
1
1
  'use strict'
2
2
 
3
- export default ({ parent }) => {
4
- const { state } = parent
5
- const { __projectSystem } = state
6
-
7
- if (!__projectSystem) return
3
+ export const applySummaryCollection = (el, s) => {
4
+ if (!s) return
8
5
  const {
9
6
  COLOR,
10
7
  THEME,
@@ -16,130 +13,130 @@ export default ({ parent }) => {
16
13
  TIMING,
17
14
  MEDIA,
18
15
  DEVICES
19
- } = __projectSystem
16
+ } = s
17
+
18
+ if (!COLOR) return
20
19
 
21
- return {
22
- data: [{
23
- icon: 'colorOutline',
24
- href: '/colors',
25
- iconTheme: 'theme',
26
- title: 'colors',
27
- paragraph: 'Colorize styles manually',
28
- iconBackground: 'red',
29
- properties: [{
30
- property: 'Colors',
31
- value: COLOR && Object.keys(COLOR).length
32
- }, {
33
- property: 'Themes',
34
- value: THEME && Object.keys(THEME).length
35
- }]
20
+ return [{
21
+ icon: 'colorOutline',
22
+ href: '/colors',
23
+ iconTheme: 'theme',
24
+ title: 'colors',
25
+ paragraph: 'Colorize styles manually',
26
+ iconBackground: 'red',
27
+ properties: [{
28
+ property: 'Colors',
29
+ value: COLOR && Object.keys(COLOR).length
30
+ }, {
31
+ property: 'Themes',
32
+ value: THEME && Object.keys(THEME).length
33
+ }]
34
+ }, {
35
+ icon: 'typographyOutline',
36
+ href: '/typography',
37
+ iconTheme: 'typography',
38
+ title: 'typography',
39
+ paragraph: 'style a typed material',
40
+ properties: [{
41
+ property: 'Base size',
42
+ value: TYPOGRAPHY && TYPOGRAPHY.base + 'px'
43
+ }, {
44
+ property: 'Ratio',
45
+ value: TYPOGRAPHY && TYPOGRAPHY.ratio
46
+ }, {
47
+ property: 'Styles',
48
+ value: TYPOGRAPHY && TYPOGRAPHY.styles && Object.keys(TYPOGRAPHY.styles).length
49
+ }, {
50
+ property: 'Fonts',
51
+ value: FONT && Object.keys(FONT).length
52
+ }, {
53
+ property: 'Families',
54
+ value: FONT_FAMILY && Object.keys(FONT_FAMILY).length - 1
55
+ }]
56
+ }, {
57
+ icon: 'spaceOutline',
58
+ href: '/space',
59
+ iconTheme: 'space',
60
+ title: 'Spacing',
61
+ paragraph: 'Manage properties of a size',
62
+ properties: [{
63
+ property: 'Ratio',
64
+ value: SPACING && SPACING.ratio
65
+ }, {
66
+ property: 'Templates',
67
+ value: 'TBA'
68
+ }]
69
+ }, {
70
+ icon: 'shape',
71
+ href: '/shape',
72
+ iconTheme: 'shape',
73
+ title: 'shapes',
74
+ paragraph: 'Design an outline to a chosen component',
75
+ properties: [{
76
+ property: 'HTML',
77
+ value: '32'
78
+ }, {
79
+ property: 'SVG',
80
+ value: 'TBA'
81
+ }]
82
+ }, {
83
+ icon: 'iconsOutline',
84
+ href: '/icons',
85
+ iconTheme: 'color',
86
+ title: 'Icons',
87
+ paragraph: 'Label a role of subject with glyphs',
88
+ properties: [{
89
+ property: 'All',
90
+ value: ICONS && Object.keys(ICONS).length
36
91
  }, {
37
- icon: 'typographyOutline',
38
- href: '/typography',
39
- iconTheme: 'typography',
40
- title: 'typography',
41
- paragraph: 'style a typed material',
42
- properties: [{
43
- property: 'Base size',
44
- value: TYPOGRAPHY && TYPOGRAPHY.base + 'px'
45
- }, {
46
- property: 'Ratio',
47
- value: TYPOGRAPHY && TYPOGRAPHY.ratio
48
- }, {
49
- property: 'Styles',
50
- value: TYPOGRAPHY && TYPOGRAPHY.styles && Object.keys(TYPOGRAPHY.styles).length
51
- }, {
52
- property: 'Fonts',
53
- value: FONT && Object.keys(FONT).length
54
- }, {
55
- property: 'Families',
56
- value: FONT_FAMILY && Object.keys(FONT_FAMILY).length - 1
57
- }]
92
+ property: 'Linear',
93
+ value: ICONS && Object.keys(ICONS).filter(v => v.includes('Outline')).length
58
94
  }, {
59
- icon: 'spaceOutline',
60
- href: '/space',
61
- iconTheme: 'space',
62
- title: 'Spacing',
63
- paragraph: 'Manage properties of a size',
64
- properties: [{
65
- property: 'Ratio',
66
- value: SPACING && SPACING.ratio
67
- }, {
68
- property: 'Templates',
69
- value: 'TBA'
70
- }]
95
+ property: 'Colored',
96
+ value: ICONS && Object.keys(ICONS).filter(v => v.includes('Colored')).length
97
+ }]
98
+ }, {
99
+ icon: 'clock',
100
+ href: '/timing',
101
+ iconTheme: 'icons',
102
+ title: 'Timing',
103
+ paragraph: 'Tokens for transitions and animations',
104
+ properties: [{
105
+ property: 'Timing base',
106
+ value: TIMING && TIMING.base + 'ms'
71
107
  }, {
72
- icon: 'shape',
73
- href: '/shape',
74
- iconTheme: 'shape',
75
- title: 'shapes',
76
- paragraph: 'Design an outline to a chosen component',
77
- properties: [{
78
- property: 'HTML',
79
- value: '32'
80
- }, {
81
- property: 'SVG',
82
- value: 'TBA'
83
- }]
108
+ property: 'Ratio',
109
+ value: TIMING && TIMING.ratio
84
110
  }, {
85
- icon: 'iconsOutline',
86
- href: '/icons',
87
- iconTheme: 'color',
88
- title: 'Icons',
89
- paragraph: 'Label a role of subject with glyphs',
90
- properties: [{
91
- property: 'All',
92
- value: ICONS && Object.keys(ICONS).length
93
- }, {
94
- property: 'Linear',
95
- value: ICONS && Object.keys(ICONS).filter(v => v.includes('Outline')).length
96
- }, {
97
- property: 'Colored',
98
- value: ICONS && Object.keys(ICONS).filter(v => v.includes('Colored')).length
99
- }]
111
+ property: 'Transitions',
112
+ value: 'TBA'
100
113
  }, {
101
- icon: 'clock',
102
- href: '/timing',
103
- iconTheme: 'icons',
104
- title: 'Timing',
105
- paragraph: 'Tokens for transitions and animations',
106
- properties: [{
107
- property: 'Timing base',
108
- value: TIMING && TIMING.base + 'ms'
109
- }, {
110
- property: 'Ratio',
111
- value: TIMING && TIMING.ratio
112
- }, {
113
- property: 'Transitions',
114
- value: 'TBA'
115
- }, {
116
- property: 'Animations',
117
- value: 'TBA'
118
- }]
114
+ property: 'Animations',
115
+ value: 'TBA'
116
+ }]
117
+ }, {
118
+ icon: 'deviceMobileOutline',
119
+ href: '/media-query',
120
+ title: 'Breakpoints',
121
+ paragraph: 'Label a role of subject with glyphs',
122
+ properties: [{
123
+ property: 'Breakpoints',
124
+ value: MEDIA && Object.keys(MEDIA).length
119
125
  }, {
120
- icon: 'deviceMobileOutline',
121
- href: '/media-query',
122
- title: 'Breakpoints',
123
- paragraph: 'Label a role of subject with glyphs',
124
- properties: [{
125
- property: 'Breakpoints',
126
- value: MEDIA && Object.keys(MEDIA).length
127
- }, {
128
- property: 'Screens',
129
- value: DEVICES && Object.keys(DEVICES).length
130
- }]
126
+ property: 'Screens',
127
+ value: DEVICES && Object.keys(DEVICES).length
128
+ }]
129
+ }, {
130
+ icon: 'threeDots',
131
+ href: '/sequence',
132
+ title: 'Sequence',
133
+ paragraph: 'The mapping system of generative sizing units',
134
+ properties: [{
135
+ property: 'Breakpoints',
136
+ value: '8'
131
137
  }, {
132
- icon: 'threeDots',
133
- href: '/sequence',
134
- title: 'Sequence',
135
- paragraph: 'The mapping system of generative sizing units',
136
- properties: [{
137
- property: 'Breakpoints',
138
- value: '8'
139
- }, {
140
- property: 'Screens',
141
- value: '3'
142
- }]
138
+ property: 'Screens',
139
+ value: '3'
143
140
  }]
144
- }
141
+ }]
145
142
  }
@@ -3,9 +3,11 @@
3
3
  import { ClickableItem, Link } from '@symbo.ls/components'
4
4
  import { DesignComponent } from '../../../components'
5
5
 
6
- import state from './state'
6
+ import { applySummaryCollection } from './state'
7
+
8
+ export const cnt = {
9
+ state: 'summary',
7
10
 
8
- export const content = {
9
11
  props: {
10
12
  margin: '- -Z',
11
13
  columns: '15rem',
@@ -14,7 +16,8 @@ export const content = {
14
16
 
15
17
  childExtend: {
16
18
  extend: [Link, ClickableItem, DesignComponent],
17
- props: () => ({
19
+ state: true,
20
+ props: ({ state }) => ({
18
21
  maxWidth: 'none',
19
22
  width: '100%',
20
23
  margin: '- - B1',
@@ -23,7 +26,7 @@ export const content = {
23
26
  })
24
27
  },
25
28
 
26
- $setStateCollection: ({ state }) => state.data
29
+ $setPropsCollection: (el, s) => s.parse()
27
30
  }
28
31
 
29
32
  export default {
@@ -31,12 +34,19 @@ export default {
31
34
  margin: '- - C1'
32
35
  },
33
36
 
34
- state,
37
+ state: 'PROJECT_SYSTEM',
35
38
 
36
39
  SectionHeader: {
37
40
  title: 'Design System takeaways',
38
41
  p: 'Your tokens in the system at a glance'
39
42
  },
40
43
 
41
- content
44
+ cnt,
45
+
46
+ on: {
47
+ initUpdate: (el, s) => {
48
+ if (s.summary) return
49
+ s.summary = applySummaryCollection(el, s)
50
+ }
51
+ }
42
52
  }
@@ -6,14 +6,18 @@ import { UploadImage } from '../../../components'
6
6
 
7
7
  export default {
8
8
  extend: UploadImage,
9
- props: {
9
+ props: ({ state }) => ({
10
+ position: 'relative',
11
+
10
12
  title: { text: 'Project icon' },
13
+
11
14
  element: {
12
15
  flow: 'column',
13
16
  position: 'relative',
14
17
  width: 'fit-content',
15
18
  padding: 'A',
16
19
  gap: '0',
20
+ opacity: !!state.icon,
17
21
 
18
22
  p: {
19
23
  text: 'Drag and drop or click',
@@ -21,25 +25,10 @@ export default {
21
25
  textAlign: 'center'
22
26
  }
23
27
  }
24
- },
28
+ }),
29
+
25
30
  title: {},
26
31
  element: {
27
- User: {
28
- extend: User,
29
- props: ({ state }) => ({
30
- position: 'absolute',
31
- fontSize: 'H',
32
- top: '50%',
33
- left: '50%',
34
- transform: 'translate3d(-50%, -50%, 1px)',
35
- src: state.icon && state.icon.src,
36
- key: state.projectName,
37
- transition: 'C defaultBezier opacity',
38
- opacity: (state.icon && state.icon.src) ? '1' : '0',
39
- pointerEvents: 'none'
40
- })
41
- },
42
-
43
32
  input: {
44
33
  on: {
45
34
  change: (ev, el, s) => {
@@ -68,5 +57,20 @@ export default {
68
57
  }
69
58
  }
70
59
  }
60
+ },
61
+
62
+ User: {
63
+ extend: User,
64
+ props: ({ state }) => ({
65
+ position: 'absolute',
66
+ fontSize: 'H',
67
+ bottom: 'Y',
68
+ left: 'Y1',
69
+ src: state.icon && state.icon.src,
70
+ key: state.projectName,
71
+ transition: 'C defaultBezier opacity',
72
+ opacity: (state.icon && state.icon.src) ? '1' : '0',
73
+ pointerEvents: 'none'
74
+ })
71
75
  }
72
76
  }
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- import { ButtonTitle, Flex } from '@symbo.ls/components'
3
+ import { ButtonTitle, Grid } from '@symbo.ls/components'
4
4
 
5
5
  export const columnTitleButton = {
6
6
  extend: ButtonTitle,
@@ -20,10 +20,17 @@ export const columnTitleButton = {
20
20
  }
21
21
 
22
22
  export const buttonTitlesGrid = {
23
- extend: Flex,
23
+ extend: Grid,
24
24
  props: {
25
- justifyContent: 'space-between',
26
- padding: 'B2 E1 - -'
25
+ justiyItems: 'start',
26
+ padding: 'B2 - - -',
27
+ columns: 'repeat(4, auto)',
28
+ gap: 'B2+W1',
29
+ width: 'fit-content',
30
+ justifyItems: 'start',
31
+ '@tabletL': { columns: 'repeat(3, auto)' },
32
+ '@tabletM': { columns: 'repeat(2, auto)' },
33
+ childProps: { width: 'F+Z1' }
27
34
  },
28
35
 
29
36
  childExtend: {
@@ -6,7 +6,6 @@ import {
6
6
  Flex,
7
7
  SectionHeader,
8
8
  AccessibilityCheck,
9
- SceneThemingBar,
10
9
  Pseudo,
11
10
  CommonField
12
11
  } from '@symbo.ls/components'
@@ -16,9 +15,6 @@ import preview from './preview'
16
15
  import { buttonsHeader } from './buttonsHeader'
17
16
  import { selectsGrid } from './selectsGrid'
18
17
  import { buttonTitlesGrid, columnTitleButton } from './buttonTitlesGrid'
19
- // import { themingTools } from './themingTools'
20
- // import { interactivity } from './interactivity'
21
- // import { friendTheme } from './friendTheme'
22
18
 
23
19
  import style from './style'
24
20
 
@@ -29,7 +25,6 @@ const ThemeNameField = {
29
25
 
30
26
  props: ({ state }) => ({
31
27
  gap: '0',
32
-
33
28
  title: {
34
29
  text: 'Name the theme',
35
30
  fontSize: 'Z'
@@ -44,10 +39,10 @@ const ThemeNameField = {
44
39
  round: '0',
45
40
  textTransform: 'capitalize',
46
41
 
47
- border: 'dashed, gray5',
42
+ border: 'dashed, gray3',
48
43
  borderWidth: '0 0 1px',
49
44
 
50
- text: (el, s) => s.themeName,
45
+ text: state.themeName,
51
46
 
52
47
  ':empty::before': {
53
48
  content: '"You name it"',
@@ -143,6 +138,17 @@ export const Theme = {
143
138
  extend: PageTemplate,
144
139
 
145
140
  style,
141
+ props: {
142
+ padding: '- D2 - -',
143
+ boxSizing: 'border-box',
144
+ '@screenL': { fontSize: '20px' },
145
+ '@screenM': { fontSize: '17px' },
146
+ '@screenS': { fontSize: 'A' },
147
+ style: {
148
+ paddingLeft: '0',
149
+ '@media only screen and (min-width: 1920px)': { fontSize: '22px' }
150
+ }
151
+ },
146
152
 
147
153
  state: {
148
154
  sceneTheme: 'dark',
@@ -172,31 +178,37 @@ export const Theme = {
172
178
  header: {
173
179
  extend: SectionHeader,
174
180
  props: {
175
- margin: '0 0 B2',
181
+ margin: '0 - B2 0',
176
182
  justifyContent: 'space-between'
183
+ // border: '2px solid purple'
177
184
  },
178
185
  heading: null,
179
186
  ThemeNameField,
180
187
  nav: null,
181
- buttons: { extend: buttonsHeader }
188
+ buttons: { extend: buttonsHeader },
189
+ SceneThemingBar: {}
182
190
  },
183
191
 
184
192
  cnt: {
185
193
  extend: Flex,
186
- props: { gap: 'D' },
194
+ props: { gap: 'C2', padding: '0' },
187
195
 
188
196
  preview,
189
197
 
190
198
  colorEdit: {
191
199
  props: {
200
+ flex: '1',
192
201
  gap: '',
193
202
  flexFlow: 'column'
203
+ // border: '5px solid red'
194
204
  },
195
205
 
196
206
  colors: {
197
207
  props: {
198
208
  padding: '- - C1 -',
199
- style: { borderBottom: '.5px solid rgba(255, 255, 255, .3)' }
209
+ border: 'solid, gray2',
210
+ borderWidth: '0 0 1px 0'
211
+ // style: { borderBottom: '.5px solid rgba(255, 255, 255, .1)' }
200
212
  },
201
213
  selectsGrid,
202
214
  buttonTitlesGrid
@@ -205,7 +217,8 @@ export const Theme = {
205
217
  onHover: {
206
218
  extend: CommonField,
207
219
  props: {
208
- style: { borderBottom: '.5px solid rgba(255, 255, 255, .3)' },
220
+ border: 'solid, gray2',
221
+ borderWidth: '0 0 1px 0',
209
222
  gap: 'B2',
210
223
  padding: 'B - C1 -',
211
224
  title: {
@@ -248,10 +261,6 @@ export const Theme = {
248
261
  title: {},
249
262
  iconBox: {}
250
263
  }
251
-
252
- // themingTools
253
- // interactivity,
254
- // friendTheme
255
264
  }
256
265
  },
257
266
 
@@ -261,6 +270,4 @@ export const Theme = {
261
270
  padding: 'E 0 F'
262
271
  }
263
272
  }
264
-
265
- // footer
266
273
  }
@@ -5,20 +5,27 @@ import { CommonField, ColorSelect, Grid } from '@symbo.ls/components'
5
5
  export const selectsGrid = {
6
6
  extend: Grid,
7
7
  props: {
8
- columns: 'repeat(4, 1fr)',
9
- gap: 'C'
8
+ columns: 'repeat(4, auto)',
9
+ style: { width: 'fit-content' },
10
+ gap: 'B2+W1',
11
+ justifyItems: 'start',
12
+ '@tabletL': { columns: 'repeat(3, auto)' },
13
+ '@tabletM': { columns: 'repeat(2, auto)' }
10
14
  },
11
15
 
12
16
  childExtend: {
13
17
  extend: CommonField,
18
+ tag: 'div',
14
19
  props: (el, s) => ({
15
- width: 'fit-content',
20
+ width: 'F+Z',
16
21
  title: {
17
22
  text: s.title,
18
23
  fontSize: 'Z'
19
24
  },
20
25
  element: {
21
- width: 'F+Z1',
26
+ width: '100%',
27
+ height: 'B2+W',
28
+ padding: '0 W1 0 Z1',
22
29
  title: {
23
30
  box: {
24
31
  background: s.color,
@@ -28,6 +35,13 @@ export const selectsGrid = {
28
35
  text: s.name,
29
36
  fontSize: 'Z1'
30
37
  }
38
+ },
39
+ buttons: {
40
+ gap: 'W',
41
+ childProps: {
42
+ boxSize: 'fit-content',
43
+ padding: 'W1+W1'
44
+ }
31
45
  }
32
46
  }
33
47
  }),
@@ -24,6 +24,7 @@ export const styleColorTones = {
24
24
  export default {
25
25
  display: 'flex',
26
26
  flexFlow: 'column',
27
+
27
28
  'header > nav a:hover': {
28
29
  background: 'rgba(255, 255, 255, .08)',
29
30
  opacity: 1,
@@ -52,12 +52,13 @@ const isTag = v => HTML_TAGS.root.indexOf(v) > -1 || HTML_TAGS.body.indexOf(v) >
52
52
  const isHelper = v => v.slice(0, 1) === '.'
53
53
 
54
54
  const getCollectionFromArray = (arr, s) => {
55
- const { __projectSystem } = s
56
- const { TYPOGRAPHY } = __projectSystem
57
- if (!TYPOGRAPHY) return
55
+ const TYPOGRAPHY = s.parse()
58
56
  const styles = TYPOGRAPHY.styles || {}
57
+
58
+ if (!s.sequence) return {}
59
+
59
60
  return arr.map((v, k) => {
60
- const result = getTypeStyle(v, __projectSystem)
61
+ const result = getTypeStyle(v, s.parent.parse())
61
62
  return {
62
63
  key: v,
63
64
  value: {
@@ -102,10 +103,8 @@ export const tagsCollection = (el, s) => {
102
103
  }
103
104
 
104
105
  export const helpersCollection = (el, s) => {
105
- const { __projectSystem } = s
106
- const { TYPOGRAPHY } = __projectSystem
107
- if (!TYPOGRAPHY) return
108
- const { styles } = TYPOGRAPHY
106
+ const TYPOGRAPHY = s.parse()
107
+ const styles = TYPOGRAPHY.styles || {}
109
108
 
110
109
  const HELPERS = Object.keys(styles)
111
110
  .filter(v => v.slice(0, 1) === '.')
@@ -66,14 +66,14 @@ export default {
66
66
  text: '<p>'
67
67
  }
68
68
  }
69
- },
69
+ },
70
70
  code: {
71
71
  props: {
72
72
  title: {
73
73
  text: '<code>'
74
74
  }
75
75
  }
76
- },
76
+ },
77
77
  pre: {
78
78
  props: {
79
79
  title: {
@@ -109,16 +109,5 @@ export default {
109
109
  props: { icon: 'arrowAngleMirroringVertical' }
110
110
  }]
111
111
  }
112
- },
113
-
114
- on: {
115
- init: (el, s) => {
116
- const { TYPOGRAPHY } = s.__projectSystem
117
- if (!TYPOGRAPHY) return
118
- const { styles } = TYPOGRAPHY
119
- if (styles) {
120
- s.update({ styles }, { preventUpdate: true })
121
- } else TYPOGRAPHY.styles = {}
122
- }
123
112
  }
124
113
  }
@@ -1,14 +1,12 @@
1
1
  'use strict'
2
2
 
3
- import state from './state'
4
-
5
3
  import typeScale from './typeScale'
6
4
  import documentStyles from './documentStyles'
7
5
  import stylesHelpers from './stylesHelpers'
8
6
  import { mapSequence, sortSequence } from '@symbo.ls/components'
9
7
 
10
8
  export const Typography = {
11
- state,
9
+ state: 'PROJECT_SYSTEM',
12
10
 
13
11
  SectionHeader: {
14
12
  margin: '0 0 C',
@@ -16,28 +14,56 @@ export const Typography = {
16
14
  p: 'A general configuration of type properties on the document.'
17
15
  },
18
16
 
19
- SlidersWithResponsive: {},
17
+ cnt: {
18
+ state: 'TYPOGRAPHY',
19
+
20
+ SlidersWithResponsive: {},
21
+
22
+ line: { extend: 'Line' },
23
+
24
+ documentStyles,
25
+ line1: { extend: 'Line' },
20
26
 
21
- line: { extend: 'Line' },
27
+ stylesHelpers,
28
+ line2: { extend: 'Line' },
22
29
 
23
- documentStyles,
24
- line1: { extend: 'Line' },
30
+ typeScale,
25
31
 
26
- stylesHelpers,
27
- line2: { extend: 'Line' },
32
+ on: {
33
+ stateCreated: (el, s) => {
34
+ s.update({
35
+ base: s.base || 16,
36
+ ratio: s.ratio || 1.125,
37
+ range: s.range || [-3, +8],
38
+ subsequence: s.subsequence || true,
39
+ styles: s.styles || {},
40
+ h1Matches: s.h1Matches || +6,
41
+ scales: {},
42
+ sequence: {},
43
+ vars: {},
44
+ type: 'demo-font-size',
45
+ sampleText: 'Today is a big day for our tribe. The year ends.'
46
+ }, {
47
+ preventUpdate: true,
48
+ preventUpdateListener: true
49
+ })
28
50
 
29
- typeScale,
51
+ if (s.base && s.range) mapSequence(s, sortSequence)
52
+ },
53
+ stateUpdated: (el, s, changes) => {
54
+ const { base, ratio, range, subsequence, h1Matches } = changes
30
55
 
31
- on: {
32
- init: (el, s) => {
33
- mapSequence(s, sortSequence)
34
- },
35
- stateUpdated: (el, s, changes) => {
36
- s.projectSystemUpdate({
37
- TYPOGRAPHY: changes
38
- }, {
39
- preventUpdate: true
40
- })
56
+ s.update({
57
+ base,
58
+ ratio,
59
+ range,
60
+ subsequence,
61
+ h1Matches
62
+ }, {
63
+ preventUpdate: true,
64
+ preventUpdateListener: true
65
+ })
66
+ }
41
67
  }
42
68
  }
43
69
  }
@@ -74,9 +74,10 @@ export default {
74
74
  extend: TypeScaleSequence,
75
75
  $setStateCollection: (el) => {
76
76
  const { state } = el
77
- state.sequence = {}
78
- el.removeContent()
79
- return mapSequence(state, sortSequence)
77
+ // return state.sequence
78
+ // state.sequence = {}
79
+ // el.removeContent()
80
+ if (state.base && state.range) { return mapSequence(state, sortSequence) }
80
81
  }
81
82
  },
82
83
 
@@ -1,73 +0,0 @@
1
- 'use strict'
2
-
3
- import { Flex, InputField, Grid, ContinueButton, PasswordField, SelectField2 } from '@symbo.ls/components'
4
-
5
- import { fieldsGridProps } from './fieldsGridProps'
6
-
7
- const fields = {
8
- extend: Grid,
9
- ...[
10
- {
11
- extend: InputField,
12
- props: {
13
- gridColumn: 'span 2',
14
- title: { text: 'Your Email' }
15
- }
16
- },
17
-
18
- {
19
- extend: InputField,
20
- props: { title: { text: 'Your Username' } }
21
- },
22
-
23
- {
24
- extend: SelectField2,
25
- props: { title: { text: 'Your role' } }
26
- },
27
-
28
- {
29
- extend: PasswordField,
30
- props: { title: { text: 'Change Password' } }
31
- },
32
-
33
- {
34
- extend: PasswordField,
35
- props: { title: { opacity: '0' } }
36
- }
37
- ]
38
-
39
- }
40
-
41
- const props = {
42
- boxSize: '100% 100%',
43
- flow: 'column',
44
- title: {
45
- text: 'Your personal account',
46
- padding: '- - C2 -'
47
- },
48
- fields: {
49
- ...fieldsGridProps
50
- },
51
- button: {
52
- text: 'Update',
53
- padding: 'Z1 C1',
54
- fontSize: 'Z2',
55
- margin: 'auto - - -',
56
- width: 'fit-content'
57
- }
58
- }
59
-
60
- export const personalAccount = {
61
- props,
62
- extend: Flex,
63
-
64
- class: {
65
- show: (element, state) => state.activePersonalAccount
66
- ? { display: 'flex' }
67
- : { display: 'none' }
68
- },
69
-
70
- title: {},
71
- fields,
72
- button: { extend: ContinueButton }
73
- }
@@ -1,18 +0,0 @@
1
- 'use strict'
2
-
3
- export default ({ parent }) => {
4
- const rootState = parent.state
5
- const typography = rootState.__projectSystem.TYPOGRAPHY || {}
6
- return {
7
- base: typography.base || 16,
8
- ratio: typography.ratio || 1.125,
9
- range: typography.range || [-3, +8],
10
- subsequence: typography.subsequence || true,
11
- h1Matches: +6,
12
- scales: {},
13
- sequence: {},
14
- vars: {},
15
- type: 'demo-font-size',
16
- sampleText: 'Today is a big day for our tribe. The year ends.'
17
- }
18
- }