neo.mjs 6.15.3 → 6.15.4
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/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/view/Viewport.mjs +73 -10
- package/apps/portal/view/ViewportModel.mjs +29 -0
- package/apps/portal/view/learn/MainContainer.mjs +7 -10
- package/apps/portal/view/learn/MainContainerController.mjs +1 -1
- package/apps/portal/view/learn/PageSectionsContainer.mjs +51 -0
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +2 -2
- package/resources/data/deck/learnneo/pages/2023-10-14T19-25-08-153Z.md +0 -2
- package/resources/data/deck/learnneo/pages/ComponentsAndContainers.md +44 -11
- package/resources/data/deck/learnneo/pages/Config.md +0 -2
- package/resources/data/deck/learnneo/pages/CustomComponents.md +45 -0
- package/resources/data/deck/learnneo/pages/DescribingTheUI.md +0 -2
- package/resources/data/deck/learnneo/pages/Earthquakes.md +0 -2
- package/resources/data/deck/learnneo/pages/Events.md +0 -2
- package/resources/data/deck/learnneo/pages/Extending.md +0 -1
- package/resources/data/deck/learnneo/pages/References.md +0 -2
- package/resources/data/deck/learnneo/pages/Setup.md +0 -2
- package/resources/data/deck/learnneo/tree.json +2 -2
- package/resources/scss/src/apps/portal/learn/ContentView.scss +25 -20
- package/resources/scss/src/apps/portal/learn/LivePreview.scss +27 -6
- package/resources/scss/src/apps/portal/learn/MainContainer.scss +3 -33
- package/resources/scss/src/apps/portal/learn/PageContainer.scss +8 -4
- package/resources/scss/src/apps/portal/learn/PageSectionsContainer.scss +14 -0
- package/resources/scss/src/apps/portal/learn/PageSectionsList.scss +5 -6
- package/resources/scss/src/component/wrapper/MonacoEditor.scss +3 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/component/Base.mjs +0 -1
- package/src/component/wrapper/MonacoEditor.mjs +5 -0
- package/src/core/Base.mjs +24 -4
- package/src/form/field/ComboBox.mjs +1 -0
- package/src/list/Base.mjs +12 -5
- package/src/main/addon/IntersectionObserver.mjs +29 -5
- package/src/main/addon/Navigator.mjs +207 -155
- package/apps/portal/view/learn/PageSectionsPanel.mjs +0 -59
- package/resources/scss/src/apps/portal/learn/PageSectionsPanel.scss +0 -40
package/apps/ServiceWorker.mjs
CHANGED
@@ -1,13 +1,23 @@
|
|
1
1
|
import BaseViewport from '../../../src/container/Viewport.mjs';
|
2
2
|
import Container from '../../../src/container/Base.mjs';
|
3
3
|
import HeaderToolbar from './HeaderToolbar.mjs';
|
4
|
+
import NeoArray from '../../../src/util/Array.mjs';
|
4
5
|
import ViewportController from './ViewportController.mjs';
|
6
|
+
import ViewportModel from './ViewportModel.mjs';
|
5
7
|
|
6
8
|
/**
|
7
9
|
* @class Portal.view.Viewport
|
8
10
|
* @extends Neo.container.Viewport
|
9
11
|
*/
|
10
12
|
class Viewport extends BaseViewport {
|
13
|
+
/**
|
14
|
+
* Valid values for size
|
15
|
+
* @member {String[]} sizes=['large','medium','small','x-small',null]
|
16
|
+
* @protected
|
17
|
+
* @static
|
18
|
+
*/
|
19
|
+
static sizes = ['large', 'medium', 'small', 'x-small', null]
|
20
|
+
|
11
21
|
static config = {
|
12
22
|
/**
|
13
23
|
* @member {String} className='Portal.view.Viewport'
|
@@ -35,23 +45,76 @@ class Viewport extends BaseViewport {
|
|
35
45
|
{module: () => import('./blog/Container.mjs')},
|
36
46
|
{module: () => import('../../../docs/app/view/MainContainer.mjs')}
|
37
47
|
]
|
38
|
-
}]
|
48
|
+
}],
|
49
|
+
/**
|
50
|
+
* @member {Neo.model.Component} model=ViewportModel
|
51
|
+
*/
|
52
|
+
model: ViewportModel,
|
53
|
+
/**
|
54
|
+
* Values are: large, medium, small, xSmall
|
55
|
+
* @member {String|null} size_=null
|
56
|
+
*/
|
57
|
+
size_: null
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* @param {Object} config
|
62
|
+
*/
|
63
|
+
construct(config) {
|
64
|
+
super.construct(config);
|
65
|
+
this.addDomListeners([{resize: this.onResize, scope: this}])
|
39
66
|
}
|
40
67
|
|
41
68
|
/**
|
42
|
-
*
|
69
|
+
* Triggered after the size config got changed
|
70
|
+
* @param {String|null} value
|
71
|
+
* @param {String|null} oldValue
|
72
|
+
* @protected
|
43
73
|
*/
|
44
|
-
|
45
|
-
|
74
|
+
afterSetSize(value, oldValue) {
|
75
|
+
if (value) {
|
76
|
+
let me = this,
|
77
|
+
cls = me.cls;
|
46
78
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
search = searchString ? JSON.parse(`{"${decodeURI(searchString.replace(/&/g, "\",\"").replace(/=/g, "\":\""))}"}`) : {};
|
79
|
+
NeoArray.remove(cls, 'portal-size-' + oldValue);
|
80
|
+
NeoArray.add( cls, 'portal-size-' + value);
|
81
|
+
me.cls = cls;
|
51
82
|
|
52
|
-
|
83
|
+
me.model.setData({size: value})
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
/**
|
88
|
+
* Triggered before the size config gets changed
|
89
|
+
* @param {String|null} value
|
90
|
+
* @param {String|null} oldValue
|
91
|
+
* @returns {String|null}
|
92
|
+
* @protected
|
93
|
+
*/
|
94
|
+
beforeSetSize(value, oldValue) {
|
95
|
+
return this.beforeSetEnumValue(value, oldValue, 'size')
|
96
|
+
}
|
97
|
+
|
98
|
+
/**
|
99
|
+
* @param {Number} width
|
100
|
+
* @returns {String}
|
101
|
+
*/
|
102
|
+
getSize(width) {
|
103
|
+
if (width <= 640) {return 'x-small'}
|
104
|
+
if (width <= 1024) {return 'small'}
|
105
|
+
if (width <= 1296) {return 'medium'}
|
106
|
+
return 'large'
|
107
|
+
}
|
108
|
+
|
109
|
+
/**
|
110
|
+
* @param {Object} data
|
111
|
+
*/
|
112
|
+
onResize(data) {
|
113
|
+
let me = this;
|
53
114
|
|
54
|
-
|
115
|
+
if (me.id === data.id) {
|
116
|
+
me.size = me.getSize(data.borderBoxSize.inlineSize)
|
117
|
+
}
|
55
118
|
}
|
56
119
|
}
|
57
120
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import Component from '../../../src/model/Component.mjs';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @class Portal.view.ViewportModel
|
5
|
+
* @extends Neo.model.Component
|
6
|
+
*/
|
7
|
+
class ViewportModel extends Component {
|
8
|
+
static config = {
|
9
|
+
/**
|
10
|
+
* @member {String} className='Portal.view.ViewportModel'
|
11
|
+
* @protected
|
12
|
+
*/
|
13
|
+
className: 'Portal.view.ViewportModel',
|
14
|
+
/**
|
15
|
+
* @member {Object} data
|
16
|
+
*/
|
17
|
+
data: {
|
18
|
+
/**
|
19
|
+
* Values are: large, medium, small, xSmall, null
|
20
|
+
* @member {String|null} size
|
21
|
+
*/
|
22
|
+
size: null
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
Neo.setupClass(ViewportModel);
|
28
|
+
|
29
|
+
export default ViewportModel;
|
@@ -3,7 +3,7 @@ import ContentTreeList from './ContentTreeList.mjs';
|
|
3
3
|
import MainContainerController from './MainContainerController.mjs';
|
4
4
|
import MainContainerModel from './MainContainerModel.mjs';
|
5
5
|
import PageContainer from './PageContainer.mjs';
|
6
|
-
import
|
6
|
+
import PageSectionsContainer from './PageSectionsContainer.mjs';
|
7
7
|
import Splitter from '../../../../src/component/Splitter.mjs';
|
8
8
|
|
9
9
|
/**
|
@@ -30,6 +30,7 @@ class MainContainer extends Container {
|
|
30
30
|
*/
|
31
31
|
items: [{
|
32
32
|
module : Container,
|
33
|
+
bind : {hidden: data => data.size === 'x-small'},
|
33
34
|
cls : ['sidenav-container'],
|
34
35
|
layout : 'fit',
|
35
36
|
minWidth: 350,
|
@@ -41,20 +42,16 @@ class MainContainer extends Container {
|
|
41
42
|
}]
|
42
43
|
}, {
|
43
44
|
module : Splitter,
|
45
|
+
bind : {hidden: data => data.size === 'x-small'},
|
44
46
|
cls : ['main-content-splitter'],
|
45
47
|
resizeTarget: 'previous',
|
46
48
|
size : 3
|
47
49
|
}, {
|
48
50
|
module: PageContainer
|
49
|
-
},
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
// size : 3
|
54
|
-
// },
|
55
|
-
{
|
56
|
-
module : PageSectionsPanel,
|
57
|
-
reference: 'page-sections-panel',
|
51
|
+
}, {
|
52
|
+
module : PageSectionsContainer,
|
53
|
+
bind : {hidden: data => data.size !== 'large'},
|
54
|
+
reference: 'page-sections-container',
|
58
55
|
width : 250
|
59
56
|
}],
|
60
57
|
/**
|
@@ -184,7 +184,7 @@ class MainContainerController extends Controller {
|
|
184
184
|
* @param {Object} data
|
185
185
|
*/
|
186
186
|
onIntersect(data) {
|
187
|
-
let panel = this.getReference('page-sections-
|
187
|
+
let panel = this.getReference('page-sections-container'),
|
188
188
|
list = panel.list,
|
189
189
|
recordId = parseInt(data.data.recordId);
|
190
190
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import Container from '../../../../src/container/Base.mjs';
|
2
|
+
import PageSectionsList from './PageSectionsList.mjs';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @class Portal.view.learn.PageSectionsContainer
|
6
|
+
* @extends Neo.container.Base
|
7
|
+
*/
|
8
|
+
class PageSectionsContainer extends Container {
|
9
|
+
static config = {
|
10
|
+
/**
|
11
|
+
* @member {String} className='Portal.view.learn.PageSectionsContainer'
|
12
|
+
* @protected
|
13
|
+
*/
|
14
|
+
className: 'Portal.view.learn.PageSectionsContainer',
|
15
|
+
/**
|
16
|
+
* @member {String[]} cls=['portal-page-sections-container']
|
17
|
+
*/
|
18
|
+
cls: ['portal-page-sections-container'],
|
19
|
+
/**
|
20
|
+
* @member {Object[]} items
|
21
|
+
*/
|
22
|
+
items: [{
|
23
|
+
vdom:
|
24
|
+
{cn: [
|
25
|
+
{tag: 'h3', html: 'On this page'}
|
26
|
+
]}
|
27
|
+
|
28
|
+
}, {
|
29
|
+
module : PageSectionsList,
|
30
|
+
reference: 'list'
|
31
|
+
}],
|
32
|
+
/**
|
33
|
+
* @member {Object} layout={ntype:'vbox'}
|
34
|
+
*/
|
35
|
+
layout: {
|
36
|
+
ntype: 'vbox'
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Convenience shortcut
|
42
|
+
* @member {Portal.view.learn.PageSectionsList} list
|
43
|
+
*/
|
44
|
+
get list() {
|
45
|
+
return this.getReference('list')
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
Neo.setupClass(PageSectionsContainer);
|
50
|
+
|
51
|
+
export default PageSectionsContainer;
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
{
|
3
3
|
"name": "neo.mjs",
|
4
|
-
"version": "6.15.
|
4
|
+
"version": "6.15.4",
|
5
5
|
"description": "The webworkers driven UI framework",
|
6
6
|
"type": "module",
|
7
7
|
"repository": {
|
@@ -49,7 +49,7 @@
|
|
49
49
|
"chalk": "^5.3.0",
|
50
50
|
"clean-webpack-plugin": "^4.0.0",
|
51
51
|
"commander": "^12.0.0",
|
52
|
-
"cssnano": "^6.1.
|
52
|
+
"cssnano": "^6.1.2",
|
53
53
|
"envinfo": "^7.11.1",
|
54
54
|
"fs-extra": "^11.2.0",
|
55
55
|
"highlightjs-line-numbers.js": "^2.8.0",
|
@@ -1,5 +1,3 @@
|
|
1
|
-
## Introduction
|
2
|
-
|
3
1
|
Neo.mjs views are made up of components and containers.
|
4
2
|
|
5
3
|
A component is a visual widget, such as a button, label, or text field. A container is a visual
|
@@ -88,7 +86,7 @@ class MainView extends Container {
|
|
88
86
|
layout : 'fit', // If no configs are needed, simply use the ntype of the layout
|
89
87
|
items : [{
|
90
88
|
ntype: 'component',
|
91
|
-
style: {backgroundColor: 'lightgreen'}, // The camel-cased property converts to the hyphenated css style
|
89
|
+
style: {backgroundColor: 'lightgreen'}, // The camel-cased backgroundColor property converts to the hyphenated css style
|
92
90
|
}]
|
93
91
|
}
|
94
92
|
}
|
@@ -98,7 +96,7 @@ Neo.setupClass(MainView);
|
|
98
96
|
|
99
97
|
### Vbox and hbox
|
100
98
|
|
101
|
-
|
99
|
+
With `vbox` and `hbox`, items are arranged vertically or horizontally.
|
102
100
|
|
103
101
|
<pre data-neo>
|
104
102
|
import Button from '../../../../src/button/Base.mjs';
|
@@ -125,7 +123,7 @@ Neo.setupClass(MainView);
|
|
125
123
|
|
126
124
|
### Card
|
127
125
|
|
128
|
-
|
126
|
+
A card container has multiple child items, one of which is visible.
|
129
127
|
|
130
128
|
<pre data-neo>
|
131
129
|
import Button from '../../../../src/button/Base.mjs';
|
@@ -146,7 +144,7 @@ class MainView extends Base {
|
|
146
144
|
iconPosition: 'right',
|
147
145
|
handler: data => {
|
148
146
|
const container = data.component.up('container').getReference('cardContainer');
|
149
|
-
container.layout.activeIndex = (container.layout.activeIndex +1) % container.items.length;
|
147
|
+
container.layout.activeIndex = (container.layout.activeIndex + 1) % container.items.length;
|
150
148
|
}
|
151
149
|
}]
|
152
150
|
}, {
|
@@ -156,13 +154,13 @@ class MainView extends Base {
|
|
156
154
|
flex: 1,
|
157
155
|
items: [{
|
158
156
|
ntype : 'component',
|
159
|
-
style: {backgroundColor: 'lightsalmon'}
|
157
|
+
style: {backgroundColor: 'lightsalmon'} // https://drafts.csswg.org/css-color/#named-colors
|
160
158
|
}, {
|
161
159
|
ntype : 'component',
|
162
|
-
style: {backgroundColor: 'darkseagreen'} //
|
160
|
+
style: {backgroundColor: 'darkseagreen'} // Who came up with these names?
|
163
161
|
}, {
|
164
162
|
ntype : 'component',
|
165
|
-
style: {backgroundColor: 'cornflowerblue'}
|
163
|
+
style: {backgroundColor: 'cornflowerblue'}
|
166
164
|
}]
|
167
165
|
}]
|
168
166
|
}
|
@@ -174,7 +172,42 @@ Neo.setupClass(MainView);
|
|
174
172
|
|
175
173
|
|
176
174
|
|
177
|
-
## Reusing
|
175
|
+
## Reusing components
|
176
|
+
|
177
|
+
Neo.mjs is class-based, and thus, any component or container can be defined as its own class, and reused like any
|
178
|
+
other component in the framework.
|
179
|
+
|
180
|
+
<pre data-neo>
|
181
|
+
import Button from '../../../../src/button/Base.mjs';
|
182
|
+
// In practice this would be some handy reusable component
|
183
|
+
class MySpecialButton extends Button {
|
184
|
+
static config = {
|
185
|
+
className: 'Example.view.MySpecialButton',
|
186
|
+
iconCls: 'far fa-face-grin-wide',
|
187
|
+
ui: 'ghost'
|
188
|
+
}
|
189
|
+
}
|
190
|
+
|
191
|
+
Neo.setupClass(MySpecialButton);
|
192
|
+
|
193
|
+
|
194
|
+
import Container from '../../../../src/container/Base.mjs';
|
195
|
+
|
196
|
+
class MainView extends Container {
|
197
|
+
static config = {
|
198
|
+
className: 'Example.view.MainView',
|
199
|
+
layout : {ntype:'vbox', align:'start'},
|
200
|
+
items : [{
|
201
|
+
module : Button,
|
202
|
+
iconCls: 'fa fa-home',
|
203
|
+
text : 'A framework button'
|
204
|
+
}, {
|
205
|
+
module : MySpecialButton,
|
206
|
+
text : 'My special button'
|
207
|
+
}]
|
208
|
+
}
|
209
|
+
}
|
178
210
|
|
211
|
+
Neo.setupClass(MainView);
|
212
|
+
</pre>
|
179
213
|
|
180
|
-
## Lifecycle methods
|
@@ -0,0 +1,45 @@
|
|
1
|
+
## Introduction
|
2
|
+
|
3
|
+
Neo.mjs is class-based, which means you're free to extend any component (or any other Neo.mjs class).
|
4
|
+
|
5
|
+
|
6
|
+
## Overriding ancestor configs
|
7
|
+
|
8
|
+
## Introducing new configs
|
9
|
+
|
10
|
+
## Lifecycle config properties
|
11
|
+
|
12
|
+
<pre data-neo>
|
13
|
+
import Button from '../../../../src/button/Base.mjs';
|
14
|
+
// In practice this would be some handy reusable component
|
15
|
+
class MySpecialButton extends Button {
|
16
|
+
static config = {
|
17
|
+
className: 'Example.view.MySpecialButton',
|
18
|
+
iconCls: 'far fa-face-grin-wide',
|
19
|
+
ui: 'ghost'
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
Neo.setupClass(MySpecialButton);
|
24
|
+
|
25
|
+
|
26
|
+
import Container from '../../../../src/container/Base.mjs';
|
27
|
+
|
28
|
+
class MainView extends Container {
|
29
|
+
static config = {
|
30
|
+
className: 'Example.view.MainView',
|
31
|
+
layout : {ntype:'vbox', align:'start'},
|
32
|
+
items : [{
|
33
|
+
module : Button,
|
34
|
+
iconCls: 'fa fa-home',
|
35
|
+
text : 'A framework button'
|
36
|
+
}, {
|
37
|
+
module : MySpecialButton,
|
38
|
+
text : 'My special button'
|
39
|
+
}]
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
Neo.setupClass(MainView);
|
44
|
+
</pre>
|
45
|
+
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
In theory, a Neo.mjs app could be defined in a single `.mjs` source file. But that would be very hard to
|
3
2
|
maintain, and any reusable configs would have to be duplicated. Instead, each of your views and reusable
|
4
3
|
widgets will be defined as its own class. The result is simpler views which are inherently reusable and easier
|
@@ -23,9 +23,9 @@
|
|
23
23
|
{"name": "Config", "parentId": "InDepth", "isLeaf": false, "id": "Config"},
|
24
24
|
{"name": "Instance Lifecycle", "parentId": "InDepth", "isLeaf": false, "id": "InstanceLifecycle"},
|
25
25
|
{"name": "User Input (Forms)", "parentId": "InDepth", "isLeaf": false, "id": "Forms"},
|
26
|
-
{"name": "
|
26
|
+
{"name": "Component and Container Basics", "parentId": "InDepth", "isLeaf": true, "id": "ComponentsAndContainers"},
|
27
27
|
{"name": "Layouts", "parentId": "InDepth", "isLeaf": false, "id": "Layouts"},
|
28
|
-
{"name": "Custom Components", "parentId": "InDepth", "isLeaf":
|
28
|
+
{"name": "Custom Components", "parentId": "InDepth", "isLeaf": true, "id": "CustomComponents"},
|
29
29
|
{"name": "Events", "parentId": "InDepth", "isLeaf": true, "expanded": false, "id": "GuideEvents"},
|
30
30
|
{"name": "Tables (Stores)", "parentId": "InDepth", "isLeaf": false, "id": "Tables"},
|
31
31
|
{"name": "Shared Bindable Data (Component Models)", "parentId": "InDepth", "isLeaf": false, "id": "InDepthComponentModels"},
|
@@ -1,25 +1,25 @@
|
|
1
1
|
.learn-content {
|
2
|
-
|
3
|
-
max-width: 900px;
|
4
|
-
padding: 0 250px 0 3rem;
|
5
|
-
margin: 0 auto;
|
6
2
|
background-color: white;
|
7
|
-
border-radius: 8px;
|
8
|
-
letter-spacing: 1px;
|
9
|
-
|
3
|
+
border-radius : 8px;
|
4
|
+
letter-spacing : 1px;
|
5
|
+
margin : 0 auto;
|
6
|
+
max-width : 900px;
|
7
|
+
overflow : unset;
|
8
|
+
padding : 0 3rem;
|
9
|
+
width : -webkit-fill-available;
|
10
10
|
|
11
11
|
pre[data-javascript] {
|
12
|
+
border : thin solid lightgray;
|
12
13
|
border-radius: 4px;
|
13
|
-
padding: 12px;
|
14
|
-
border: thin solid lightgray;
|
14
|
+
padding : 12px;
|
15
15
|
}
|
16
16
|
|
17
17
|
p {
|
18
|
-
margin: 0.5em
|
18
|
+
margin: 0.5em 0 0.7em 0;
|
19
19
|
}
|
20
20
|
|
21
21
|
details summary {
|
22
|
-
cursor: pointer;
|
22
|
+
cursor : pointer;
|
23
23
|
transition: margin 300ms ease-out;
|
24
24
|
}
|
25
25
|
|
@@ -28,12 +28,11 @@
|
|
28
28
|
}
|
29
29
|
|
30
30
|
details summary {
|
31
|
-
list-style: none;
|
32
|
-
color: #555;
|
33
|
-
display: flex;
|
34
|
-
/* also removes the list marker */
|
35
31
|
align-items: center;
|
32
|
+
color : #555;
|
33
|
+
display : flex;
|
36
34
|
font-weight: bold;
|
35
|
+
list-style : none;
|
37
36
|
}
|
38
37
|
|
39
38
|
details summary::before {
|
@@ -45,11 +44,11 @@
|
|
45
44
|
}
|
46
45
|
|
47
46
|
details summary::before {
|
48
|
-
color: #c4c4c4;
|
47
|
+
color : #c4c4c4;
|
49
48
|
font-family: var(--fa-style-family, "Font Awesome 6 Free");
|
50
|
-
font-size: 1em;
|
49
|
+
font-size : 1em;
|
51
50
|
font-weight: var(--fa-style, 900);
|
52
|
-
margin: 0.4em 0.4em 0.4em 0;
|
51
|
+
margin : 0.4em 0.4em 0.4em 0;
|
53
52
|
}
|
54
53
|
|
55
54
|
summary::-webkit-details-marker {
|
@@ -61,8 +60,8 @@
|
|
61
60
|
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
|
62
61
|
transition: 0.3s;
|
63
62
|
/* Add some padding inside the card container */
|
64
|
-
padding: 2px 16px;
|
65
|
-
font-size: 1em;
|
63
|
+
padding : 2px 16px;
|
64
|
+
font-size : 1em;
|
66
65
|
margin-bottom: 1em;
|
67
66
|
}
|
68
67
|
|
@@ -71,3 +70,9 @@
|
|
71
70
|
box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
|
72
71
|
}
|
73
72
|
}
|
73
|
+
|
74
|
+
.portal-size-large {
|
75
|
+
.learn-content {
|
76
|
+
padding: 0 250px 0 3rem;
|
77
|
+
}
|
78
|
+
}
|
@@ -1,8 +1,29 @@
|
|
1
1
|
.learn-live-preview {
|
2
|
-
textarea {
|
3
|
-
height: 100%;
|
4
|
-
font-family: monospace !important;
|
5
|
-
}
|
6
|
-
|
7
2
|
margin-bottom: 2em;
|
8
|
-
|
3
|
+
|
4
|
+
.live-preview-container {
|
5
|
+
border-radius: calc(var(--cmp-tab-strip-height) + var(--cmp-button-borderradius));
|
6
|
+
box-shadow : rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px;
|
7
|
+
overflow : hidden;
|
8
|
+
|
9
|
+
.neo-tab-header-toolbar {
|
10
|
+
background-color : var(--sem-color-surface-neutral-default);
|
11
|
+
border : 1px solid #e6e6e6;
|
12
|
+
border-top-left-radius : calc(var(--cmp-tab-strip-height) + var(--cmp-button-borderradius));
|
13
|
+
border-top-right-radius: calc(var(--cmp-tab-strip-height) + var(--cmp-button-borderradius));
|
14
|
+
padding : var(--cmp-tab-strip-height);
|
15
|
+
}
|
16
|
+
|
17
|
+
.neo-tab-strip {
|
18
|
+
margin-top: calc(var(--cmp-tab-strip-height) * (-1) - 1px);
|
19
|
+
}
|
20
|
+
|
21
|
+
.neo-tab-content-container {
|
22
|
+
background-color : transparent;
|
23
|
+
border : 1px solid #e6e6e6;
|
24
|
+
border-bottom-left-radius : calc(var(--cmp-tab-strip-height) + var(--cmp-button-borderradius));
|
25
|
+
border-bottom-right-radius: calc(var(--cmp-tab-strip-height) + var(--cmp-button-borderradius));
|
26
|
+
border-top : 0;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|