superdesk-ui-framework 2.4.19 → 2.4.20
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/app/styles/_accessibility.scss +7 -3
- package/app/styles/_buttons.scss +52 -1
- package/app/styles/_spinner.scss +46 -0
- package/app-typescript/components/Button.tsx +7 -1
- package/app-typescript/components/Input.tsx +14 -4
- package/app-typescript/components/Spinner.tsx +33 -0
- package/app-typescript/components/TabCustom.tsx +89 -40
- package/app-typescript/components/TabList.tsx +43 -18
- package/app-typescript/index.ts +1 -1
- package/dist/examples.bundle.css +36 -1
- package/dist/examples.bundle.js +865 -625
- package/dist/react/Buttons.tsx +25 -0
- package/dist/react/Inputs.tsx +6 -3
- package/dist/react/Tabs.tsx +225 -72
- package/dist/superdesk-ui.bundle.css +74 -13
- package/dist/superdesk-ui.bundle.js +544 -396
- package/dist/vendor.bundle.js +13 -13
- package/examples/pages/react/Buttons.tsx +25 -0
- package/examples/pages/react/Inputs.tsx +6 -3
- package/examples/pages/react/Tabs.tsx +225 -72
- package/package.json +2 -2
- package/react/components/Button.d.ts +2 -0
- package/react/components/Button.js +4 -2
- package/react/components/Input.d.ts +2 -0
- package/react/components/Input.js +13 -4
- package/react/components/Spinner.d.ts +12 -0
- package/react/components/Spinner.js +70 -0
- package/react/components/TabCustom.d.ts +22 -12
- package/react/components/TabCustom.js +52 -23
- package/react/components/TabList.d.ts +11 -2
- package/react/components/TabList.js +32 -11
- package/react/index.d.ts +1 -1
- package/react/index.js +2 -2
package/dist/react/Buttons.tsx
CHANGED
@@ -187,6 +187,30 @@ export default class ButtonsDoc extends React.Component {
|
|
187
187
|
`}</Markup.ReactMarkupCode>
|
188
188
|
</Markup.ReactMarkup>
|
189
189
|
|
190
|
+
|
191
|
+
<h3 className="docs-page__h3">Loading</h3>
|
192
|
+
<p className="docs-page__paragraph"><code>isLoading={'{true}'}</code></p>
|
193
|
+
<Markup.ReactMarkup>
|
194
|
+
<Markup.ReactMarkupPreview>
|
195
|
+
<div className="docs-page__content-row">
|
196
|
+
<Button text="default" isLoading={true} onClick={()=> false} />
|
197
|
+
<Button text="primary" type="primary" isLoading={true} onClick={()=> false} />
|
198
|
+
<Button text="success" type="success" isLoading={true} onClick={()=> false} />
|
199
|
+
<Button text="warning" type="warning" isLoading={true} onClick={()=> false} />
|
200
|
+
<Button text="alert" type="alert" isLoading={true} onClick={()=> false} />
|
201
|
+
<Button text="highlight" type="highlight" isLoading={true} onClick={()=> false} />
|
202
|
+
</div>
|
203
|
+
</Markup.ReactMarkupPreview>
|
204
|
+
<Markup.ReactMarkupCode>{`
|
205
|
+
<Button text="default" isLoading={true} onClick={()=> false} />
|
206
|
+
<Button text="primary" type="primary" isLoading={true} onClick={()=> false} />
|
207
|
+
<Button text="success" type="success" isLoading={true} onClick={()=> false} />
|
208
|
+
<Button text="warning" type="warning" isLoading={true} onClick={()=> false} />
|
209
|
+
<Button text="alert" type="alert" isLoading={true} onClick={()=> false} />
|
210
|
+
<Button text="highlight" type="highlight" isLoading={true} onClick={()=> false} />
|
211
|
+
`}</Markup.ReactMarkupCode>
|
212
|
+
</Markup.ReactMarkup>
|
213
|
+
|
190
214
|
<h3 className="docs-page__h3">Buttons with icon and text</h3>
|
191
215
|
<p className="docs-page__paragraph">Buttons can be combined with icons from the icon font. Just add any of the available classes from the Icon font as a value of the <code>icon</code> prop.</p>
|
192
216
|
<Markup.ReactMarkup>
|
@@ -443,6 +467,7 @@ export default class ButtonsDoc extends React.Component {
|
|
443
467
|
<Prop name='size' isRequired={false} type='small | normal | large' default='normal' description='Specifies a small, normal or large button.'/>
|
444
468
|
<Prop name='icon' isRequired={false} type='string' default='/' description='Icon class name without the icon- part.'/>
|
445
469
|
<Prop name='disabled' isRequired={false} type='boolean' default='false' description='Disables the Button, preventing mouse events.'/>
|
470
|
+
<Prop name='isLoading' isRequired={false} type='boolean' default='false' description='Adds a loading indicator and disables the button if set to true.'/>
|
446
471
|
<Prop name='onClick' isRequired={true} type='function' default='false' description='Callback fired when a button is pressed.'/>
|
447
472
|
</PropsList>
|
448
473
|
</section>
|
package/dist/react/Inputs.tsx
CHANGED
@@ -9,6 +9,7 @@ interface IState {
|
|
9
9
|
required: boolean;
|
10
10
|
disabled: boolean;
|
11
11
|
invalid: boolean;
|
12
|
+
val: string
|
12
13
|
}
|
13
14
|
|
14
15
|
export default class InputsDoc extends React.Component<{}, IState> {
|
@@ -18,7 +19,8 @@ export default class InputsDoc extends React.Component<{}, IState> {
|
|
18
19
|
inlineLabel: false,
|
19
20
|
required: true,
|
20
21
|
disabled: false,
|
21
|
-
invalid: false
|
22
|
+
invalid: false,
|
23
|
+
val: 'This is some text'
|
22
24
|
}
|
23
25
|
}
|
24
26
|
|
@@ -45,7 +47,7 @@ export default class InputsDoc extends React.Component<{}, IState> {
|
|
45
47
|
|
46
48
|
<div className='form__row'>
|
47
49
|
<Input label='Input label'
|
48
|
-
value=
|
50
|
+
value={this.state.val}
|
49
51
|
maxLength={30}
|
50
52
|
error='This is error message'
|
51
53
|
info='This is some hint message'
|
@@ -53,8 +55,9 @@ export default class InputsDoc extends React.Component<{}, IState> {
|
|
53
55
|
required={this.state.required}
|
54
56
|
disabled={this.state.disabled}
|
55
57
|
invalid={this.state.invalid}
|
56
|
-
onChange={(value) => {}} />
|
58
|
+
onChange={(value) => {this.setState({val: value})}} />
|
57
59
|
</div>
|
60
|
+
|
58
61
|
</div>
|
59
62
|
|
60
63
|
<div className='docs-page__content-row docs-page__content-row--no-margin'>
|
package/dist/react/Tabs.tsx
CHANGED
@@ -2,30 +2,45 @@ import * as React from 'react';
|
|
2
2
|
|
3
3
|
import * as Markup from '../../js/react';
|
4
4
|
|
5
|
-
import { Tab, TabList, Prop, PropsList } from '../../../app-typescript';
|
6
|
-
import {
|
5
|
+
import { Tab, TabList, Prop, PropsList, TabNav, TabItem } from '../../../app-typescript';
|
6
|
+
import {TabPanel, TabContent} from '../../../app-typescript';
|
7
|
+
import { stringify } from 'querystring';
|
7
8
|
|
8
9
|
interface IState {
|
9
|
-
|
10
|
+
selected: string;
|
11
|
+
customSelected: string;
|
12
|
+
alternativeWaySelected: string;
|
10
13
|
}
|
11
14
|
|
12
15
|
export default class TabsDoc extends React.Component<{}, IState> {
|
13
16
|
constructor(props){
|
14
17
|
super(props);
|
15
18
|
this.state = {
|
16
|
-
|
19
|
+
selected: null,
|
20
|
+
customSelected: 'metadata',
|
21
|
+
alternativeWaySelected: null,
|
17
22
|
}
|
18
23
|
this.handleClick=this.handleClick.bind(this);
|
24
|
+
this.handleClick_customTab=this.handleClick_customTab.bind(this);
|
25
|
+
this.handleClick_alternativeWay=this.handleClick_alternativeWay.bind(this);
|
19
26
|
}
|
20
27
|
tabs: TabList;
|
21
28
|
|
22
|
-
|
23
|
-
this.
|
29
|
+
handleClick = (id: string) => {
|
30
|
+
this.setState({
|
31
|
+
selected: id,
|
32
|
+
})
|
33
|
+
}
|
34
|
+
|
35
|
+
handleClick_customTab = (id: string) => {
|
36
|
+
this.setState({
|
37
|
+
customSelected: id,
|
38
|
+
})
|
24
39
|
}
|
25
40
|
|
26
|
-
|
41
|
+
handleClick_alternativeWay = (id: string) => {
|
27
42
|
this.setState({
|
28
|
-
|
43
|
+
alternativeWaySelected: id,
|
29
44
|
})
|
30
45
|
}
|
31
46
|
|
@@ -34,32 +49,78 @@ export default class TabsDoc extends React.Component<{}, IState> {
|
|
34
49
|
<section className="docs-page__container">
|
35
50
|
<h2 className="docs-page__h2">Tabs</h2>
|
36
51
|
<Markup.ReactMarkupCodePreview>{`
|
37
|
-
<TabList
|
38
|
-
|
39
|
-
|
40
|
-
|
52
|
+
<TabList ref={(tabs) => {
|
53
|
+
this.tabs = tabs;
|
54
|
+
}}
|
55
|
+
tabs={[
|
56
|
+
{label: 'Content', content: 'Content here.', id: 'content'},
|
57
|
+
{label: 'Metadata', content: 'Metadata here', id: 'metadata'},
|
58
|
+
{label: 'Duplicate', content: 'Duplicate here.', id: 'duplicate'}
|
59
|
+
]}
|
60
|
+
>
|
41
61
|
</TabList>
|
42
62
|
`}
|
43
63
|
</Markup.ReactMarkupCodePreview>
|
44
64
|
<h3 className="docs-page__h3">Default tabs</h3>
|
45
|
-
<p className="docs-page__paragraph">To have a tab-like navigation add the <code>TabList</code> component and multiple <code>Tab</code> components inside of it.</p>
|
65
|
+
<p className="docs-page__paragraph">To have a tab-like navigation add the <code>TabList</code> component and multiple <code>Tab</code> components inside of it, or add the appropriate attributes on <code>TabList.</code></p>
|
46
66
|
<Markup.ReactMarkup>
|
47
67
|
<Markup.ReactMarkupPreview>
|
48
68
|
<div className='docs-page__content-row'>
|
49
|
-
<TabList
|
69
|
+
<TabList ref={(tabs) => {
|
50
70
|
this.tabs = tabs;
|
51
|
-
}}
|
52
|
-
|
53
|
-
|
54
|
-
|
71
|
+
}}
|
72
|
+
tabs={[
|
73
|
+
{label: 'Content', content: 'Content here.', id: 'content'},
|
74
|
+
{label: 'Metadata', content: 'Metadata here', id: 'metadata'},
|
75
|
+
{label: 'Duplicate', content: 'Duplicate here.', id: 'duplicate'}
|
76
|
+
]}
|
77
|
+
>
|
78
|
+
{/* <Tab label='Content' id='content' >Content here.</Tab>
|
79
|
+
<Tab label='Metadata' id='metadata' >Metadata here.</Tab>
|
80
|
+
<Tab label='Duplicates' id='duplicate' >Duplicates here.</Tab> */}
|
81
|
+
</TabList>
|
82
|
+
</div>
|
83
|
+
<p className="docs-page__paragraph">// Start width custom tab.</p>
|
84
|
+
<div className='docs-page__content-row'>
|
85
|
+
<TabList ref={(tabs) => {
|
86
|
+
this.tabs = tabs;
|
87
|
+
}}
|
88
|
+
selected='metadata'
|
89
|
+
tabs={[
|
90
|
+
{label: 'Content', content: 'Content here.', id: 'content'},
|
91
|
+
{label: 'Metadata', content: 'Metadata here', id: 'metadata'},
|
92
|
+
{label: 'Duplicate', content: 'Duplicate here.', id: 'duplicate'}
|
93
|
+
]}
|
94
|
+
>
|
95
|
+
{/* <Tab label='Content' id='content' >Content here.</Tab>
|
96
|
+
<Tab label='Metadata' id='metadata' >Metadata here.</Tab>
|
97
|
+
<Tab label='Duplicates' id='duplicate' >Duplicates here.</Tab> */}
|
55
98
|
</TabList>
|
56
99
|
</div>
|
57
100
|
</Markup.ReactMarkupPreview>
|
58
101
|
<Markup.ReactMarkupCode>{`
|
59
|
-
<TabList
|
60
|
-
|
61
|
-
|
62
|
-
|
102
|
+
<TabList ref={(tabs) => {
|
103
|
+
this.tabs = tabs;
|
104
|
+
}}
|
105
|
+
tabs={[
|
106
|
+
{label: 'Content', content: 'Content here.', id: 'content'},
|
107
|
+
{label: 'Metadata', content: 'Metadata here', id: 'metadata'},
|
108
|
+
{label: 'Duplicate', content: 'Duplicate here.', id: 'duplicate'}
|
109
|
+
]}
|
110
|
+
>
|
111
|
+
</TabList>
|
112
|
+
|
113
|
+
// start with custom tab (add atributte selected)
|
114
|
+
<TabList ref={(tabs) => {
|
115
|
+
this.tabs = tabs;
|
116
|
+
}}
|
117
|
+
selected='metadata' //tabs.id
|
118
|
+
tabs={[
|
119
|
+
{label: 'Content', content: 'Content here.', id: 'content'},
|
120
|
+
{label: 'Metadata', content: 'Metadata here', id: 'metadata'},
|
121
|
+
{label: 'Duplicate', content: 'Duplicate here.', id: 'duplicate'}
|
122
|
+
]}
|
123
|
+
>
|
63
124
|
</TabList>
|
64
125
|
`}
|
65
126
|
</Markup.ReactMarkupCode>
|
@@ -139,74 +200,166 @@ export default class TabsDoc extends React.Component<{}, IState> {
|
|
139
200
|
</Markup.ReactMarkupCode>
|
140
201
|
</Markup.ReactMarkup>
|
141
202
|
|
142
|
-
<h3 className="docs-page__h3">Tabs with two components ( <code>
|
143
|
-
<p className="docs-page__paragraph">If you want to use on one place list of tabs and on another place content of tabs, wrap all <code>
|
203
|
+
<h3 className="docs-page__h3">Tabs with two components ( <code>TabNav</code> and <code> TabContent</code> ) </h3>
|
204
|
+
<p className="docs-page__paragraph">If you want to use on one place list of tabs and on another place content of tabs, wrap all <code>TabItem</code> with <code>TabNav</code> component and all <code>TabPanel</code> components with <code>TabContent</code>, or add the appropriate attributes on <code>TabNav</code> and <code>TabContent</code></p>
|
205
|
+
<Markup.ReactMarkup>
|
206
|
+
<Markup.ReactMarkupPreview>
|
207
|
+
<div className='docs-page__content-row'>
|
208
|
+
<TabNav onClick={this.handleClick} activePanel={this.state.selected}
|
209
|
+
tabs={[
|
210
|
+
{label: 'Content', id: 'content'},
|
211
|
+
{label: 'Metadata', id: 'metadata'},
|
212
|
+
{label: 'Duplicate', id: 'duplicate'}
|
213
|
+
]}
|
214
|
+
>
|
215
|
+
</TabNav>
|
216
|
+
<TabContent activePanel={this.state.selected}
|
217
|
+
tabs={[
|
218
|
+
{content: 'Content here.', id: 'content'},
|
219
|
+
{content: 'Metadata here.', id: 'metadata'},
|
220
|
+
{content: 'Duplicates here.', id: 'duplicate'}
|
221
|
+
]}
|
222
|
+
>
|
223
|
+
</TabContent>
|
224
|
+
</div>
|
225
|
+
<p className="docs-page__paragraph">// Start width custom tab.</p>
|
226
|
+
<div className='docs-page__content-row'>
|
227
|
+
<TabNav onClick={this.handleClick_customTab} activePanel={this.state.customSelected}
|
228
|
+
tabs={[
|
229
|
+
{label: 'Content', id: 'content'},
|
230
|
+
{label: 'Metadata', id: 'metadata'},
|
231
|
+
{label: 'Duplicate', id: 'duplicate'}
|
232
|
+
]}
|
233
|
+
>
|
234
|
+
</TabNav>
|
235
|
+
<TabContent activePanel={this.state.customSelected}
|
236
|
+
tabs={[
|
237
|
+
{content: 'Content here.', id: 'content'},
|
238
|
+
{content: 'Metadata here.', id: 'metadata'},
|
239
|
+
{content: 'Duplicates here.', id: 'duplicate'}
|
240
|
+
]}
|
241
|
+
>
|
242
|
+
</TabContent>
|
243
|
+
</div>
|
244
|
+
</Markup.ReactMarkupPreview>
|
245
|
+
<Markup.ReactMarkupCode>{`
|
246
|
+
this.state = {
|
247
|
+
selected: null,
|
248
|
+
}
|
249
|
+
handleClick = (id: string) => {
|
250
|
+
this.setState({
|
251
|
+
selected: id,
|
252
|
+
})
|
253
|
+
}
|
254
|
+
|
255
|
+
<TabNav onClick={this.handleClick} activePanel={this.state.selected}
|
256
|
+
tabs={[
|
257
|
+
{label: 'Content', id: 'content'},
|
258
|
+
{label: 'Metadata', id: 'metadata'},
|
259
|
+
{label: 'Duplicate', id: 'duplicate'}
|
260
|
+
]}
|
261
|
+
>
|
262
|
+
</TabNav>
|
263
|
+
<TabContent activePanel={this.state.selected}
|
264
|
+
tabs={[
|
265
|
+
{content: 'Content here.', id: 'content'},
|
266
|
+
{content: 'Metadata here.', id: 'metadata'},
|
267
|
+
{content: 'Duplicates here.', id: 'duplicate'}
|
268
|
+
]}
|
269
|
+
>
|
270
|
+
</TabContent>
|
271
|
+
|
272
|
+
// start with custom tab
|
273
|
+
this.state = {
|
274
|
+
selected: 'metadata' //tabs.id,
|
275
|
+
}
|
276
|
+
`}
|
277
|
+
</Markup.ReactMarkupCode>
|
278
|
+
</Markup.ReactMarkup>
|
279
|
+
|
280
|
+
<p className="docs-page__paragraph">Alternative way with children:</p>
|
144
281
|
<Markup.ReactMarkup>
|
145
282
|
<Markup.ReactMarkupPreview>
|
146
283
|
<div className='docs-page__content-row'>
|
147
|
-
<
|
148
|
-
<
|
149
|
-
<
|
150
|
-
<
|
151
|
-
</
|
152
|
-
<TabContent activePanel={this.state.
|
153
|
-
<TabPanel
|
154
|
-
|
155
|
-
|
156
|
-
<TabPanel indexValue={1}>
|
157
|
-
Metadata here.
|
158
|
-
</TabPanel>
|
159
|
-
<TabPanel indexValue={2}>
|
160
|
-
Duplicates here.
|
161
|
-
</TabPanel>
|
284
|
+
<TabNav onClick={this.handleClick_alternativeWay} activePanel={this.state.alternativeWaySelected}>
|
285
|
+
<TabItem id='content'>Content</TabItem>
|
286
|
+
<TabItem id='metadata'>Metadata</TabItem>
|
287
|
+
<TabItem id='duplicate'>Duplicate</TabItem>
|
288
|
+
</TabNav>
|
289
|
+
<TabContent activePanel={this.state.alternativeWaySelected}>
|
290
|
+
<TabPanel id='content'>Content here.</TabPanel>
|
291
|
+
<TabPanel id='metadata'>Metadata here.</TabPanel>
|
292
|
+
<TabPanel id='duplicate'>Duplicates here.</TabPanel>
|
162
293
|
</TabContent>
|
163
294
|
</div>
|
164
295
|
</Markup.ReactMarkupPreview>
|
165
296
|
<Markup.ReactMarkupCode>{`
|
166
|
-
|
167
|
-
|
168
|
-
|
297
|
+
this.state = {
|
298
|
+
selected: null,
|
299
|
+
}
|
300
|
+
handleClick = (id: string) => {
|
301
|
+
this.setState({
|
302
|
+
selected: id,
|
303
|
+
})
|
169
304
|
}
|
170
305
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
Metadata here.
|
182
|
-
</TabPanel>
|
183
|
-
<TabPanel indexValue={2}>
|
184
|
-
Duplicates here.
|
185
|
-
</TabPanel>
|
186
|
-
</TabContent>
|
306
|
+
<TabNav onClick={this.handleClick} activePanel={this.state.selected}>
|
307
|
+
<TabItem id='content'>Content</TabItem>
|
308
|
+
<TabItem id='metadata'>Metadata</TabItem>
|
309
|
+
<TabItem id='duplicate'>Duplicate</TabItem>
|
310
|
+
</TabNav>
|
311
|
+
<TabContent activePanel={this.state.selected}>
|
312
|
+
<TabPanel id='content'>Content here.</TabPanel>
|
313
|
+
<TabPanel id='metadata'>Metadata here.</TabPanel>
|
314
|
+
<TabPanel id='duplicate'>Duplicates here.</TabPanel>
|
315
|
+
</TabContent>
|
187
316
|
`}
|
188
317
|
</Markup.ReactMarkupCode>
|
189
318
|
</Markup.ReactMarkup>
|
190
319
|
|
191
320
|
<h3 className="docs-page__h3">Props</h3>
|
321
|
+
<br/>
|
322
|
+
<h4 className="docs-page__h4">TabList</h4>
|
192
323
|
<PropsList>
|
193
|
-
<Prop name='
|
194
|
-
<Prop name='
|
195
|
-
<Prop name='
|
324
|
+
<Prop name='TabList size' isRequired={false} type='small | normal | large' default='normal' description='Specifies a small, normal or large button.'/>
|
325
|
+
<Prop name='TabList theme' isRequired={false} type='light | dark' default='light' description='Styles tablist for diffrent background'/>
|
326
|
+
<Prop name='TabList selected' isRequired={false} type='string' default='/' description='Specify which tab should be pre-selected'/>
|
327
|
+
<Prop name='TabList tabs' isRequired={false} type='Array<label: string, content: React.ReactNode, id: string>' default='/' description='Array of objects'/>
|
328
|
+
<Prop name='Tab label' isRequired={false} type='string' default='/' description='Text value of label'/>
|
329
|
+
<Prop name='Tab id' isRequired={false} type='string' default='/' description='Id value of Tab component'/>
|
330
|
+
<Prop name='Tab children' isRequired={false} type='React.ReactNode' default='/' description='Children of component'/>
|
331
|
+
</PropsList>
|
332
|
+
<p className='docs-page__paragraph'>tabs: TabList</p>
|
333
|
+
<PropsList>
|
334
|
+
<Prop name='label' isRequired={true} type='string' default='/' description='Text value of label'/>
|
335
|
+
<Prop name='content' isRequired={true} type='React.ReactNode' default='/' description='React.ReactNode'/>
|
336
|
+
<Prop name='id' isRequired={true} type='string' default='/' description='Id value'/>
|
196
337
|
</PropsList>
|
197
338
|
<br/>
|
198
|
-
<h4 className="docs-page__h4">
|
339
|
+
<h4 className="docs-page__h4">TabNav and TabContent</h4>
|
340
|
+
<PropsList>
|
341
|
+
<Prop name='TabNav size' isRequired={false} type='small | normal | large' default='normal' description='Specifies a small, normal or large button'/>
|
342
|
+
<Prop name='TabNav theme' isRequired={false} type='light | dark' default='light' description='Styles tablist for diffrent background'/>
|
343
|
+
<Prop name='TabNav ariaLabel' isRequired={false} type='string' default='/' description='Text value of aria-label'/>
|
344
|
+
<Prop name='TabNav onClick' isRequired={true} type='function' default='/' description='Use to return value of clicked label'/>
|
345
|
+
<Prop name='TabNav activePanel' isRequired={true} type='string' default='/' description='Specify which tab should be pre-selected'/>
|
346
|
+
<Prop name='TabNav tabs' isRequired={false} type='Array<label: string, id: string>' default='/' description='Array of objects'/>
|
347
|
+
<Prop name='TabItem id' isRequired={true} type='string' default='/' description='Id value of Tab Item'/>
|
348
|
+
<Prop name='TabItem label' isRequired={true} type='string' default='/' description='Text value of Tab label'/>
|
349
|
+
<Prop name='TabContent theme' isRequired={false} type='light | dark' default='light' description='Styles tablist for diffrent background'/>
|
350
|
+
<Prop name='TabContent activePanel' isRequired={true} type='string' default='/' description='Specify which tab should be pre-selected'/>
|
351
|
+
<Prop name='TabContent tabs' isRequired={false} type='Array<content: React.ReactNode, id: string>' default='/' description='Array of objects'/>
|
352
|
+
<Prop name='TabPanel id' isRequired={true} type='string' default='/' description='Id value of Tab Panel'/>
|
353
|
+
</PropsList>
|
354
|
+
<p className='docs-page__paragraph'>tabs: TabNav</p>
|
355
|
+
<PropsList>
|
356
|
+
<Prop name='label' isRequired={true} type='string' default='/' description='Text value of label'/>
|
357
|
+
<Prop name='id' isRequired={true} type='string' default='/' description='Unique identifier to connect tab nav and tab content'/>
|
358
|
+
</PropsList>
|
359
|
+
<p className='docs-page__paragraph'>tabs: TabContent</p>
|
199
360
|
<PropsList>
|
200
|
-
<Prop name='
|
201
|
-
<Prop name='
|
202
|
-
<Prop name='tabs ariaLabel' isRequired={false} type='string' default='/' description='Text value of aria-label'/>
|
203
|
-
<Prop name='tabs onClick' isRequired={true} type='function' default='/' description='Use to return value of clicked label'/>
|
204
|
-
<Prop name='tablabel indexValue' isRequired={true} type='number' default='/' description='Index value of label'/>
|
205
|
-
<Prop name='tablabel label' isRequired={true} type='string' default='/' description='Text value of Tab label'/>
|
206
|
-
|
207
|
-
<Prop name='tabcontent theme' isRequired={false} type='light | dark' default='light' description='Styles tablist for diffrent background.'/>
|
208
|
-
<Prop name='tabcontent activePanel' isRequired={true} type='number' default='/' description='Index value of active Tab'/>
|
209
|
-
<Prop name='tabpanel indexValue' isRequired={true} type='number' default='/' description='Index value of Tab Panel'/>
|
361
|
+
<Prop name='content' isRequired={true} type='React.ReactNode' default='/' description='React.ReactNode'/>
|
362
|
+
<Prop name='id' isRequired={true} type='string' default='/' description='Unique identifier to connect tab nav and tab content'/>
|
210
363
|
</PropsList>
|
211
364
|
</section>
|
212
365
|
)
|
@@ -1,3 +1,38 @@
|
|
1
|
+
.sd-spinner {
|
2
|
+
animation: rotate 2s linear infinite;
|
3
|
+
z-index: 1; }
|
4
|
+
.sd-spinner--mini {
|
5
|
+
width: 1.8rem;
|
6
|
+
height: 1.8rem; }
|
7
|
+
.sd-spinner--small {
|
8
|
+
width: 2.4rem;
|
9
|
+
height: 2.4rem; }
|
10
|
+
.sd-spinner--medium {
|
11
|
+
width: 3.2rem;
|
12
|
+
height: 3.2rem; }
|
13
|
+
.sd-spinner--large {
|
14
|
+
width: 4.8rem;
|
15
|
+
height: 4.8rem; }
|
16
|
+
|
17
|
+
.sd-spinner__path {
|
18
|
+
stroke: var(--color-text-light);
|
19
|
+
stroke-linecap: round;
|
20
|
+
animation: dash 1.5s ease-in-out infinite; }
|
21
|
+
|
22
|
+
@keyframes rotate {
|
23
|
+
100% {
|
24
|
+
transform: rotate(360deg); } }
|
25
|
+
|
26
|
+
@keyframes dash {
|
27
|
+
0% {
|
28
|
+
stroke-dasharray: 1, 150;
|
29
|
+
stroke-dashoffset: 0; }
|
30
|
+
50% {
|
31
|
+
stroke-dasharray: 90, 150;
|
32
|
+
stroke-dashoffset: -32; }
|
33
|
+
100% {
|
34
|
+
stroke-dasharray: 90, 150;
|
35
|
+
stroke-dashoffset: -124; } }
|
1
36
|
@charset "UTF-8";
|
2
37
|
:root {
|
3
38
|
--sd-slugline-color: #005b7f; }
|
@@ -7558,6 +7593,7 @@ time {
|
|
7558
7593
|
text-align: center;
|
7559
7594
|
text-decoration: none;
|
7560
7595
|
cursor: pointer;
|
7596
|
+
gap: 0.6rem;
|
7561
7597
|
background-color: rgba(51, 51, 51, 0.25);
|
7562
7598
|
color: #333; }
|
7563
7599
|
.btn:hover, .btn:focus {
|
@@ -7906,7 +7942,7 @@ time {
|
|
7906
7942
|
border-color: rgba(30, 176, 108, 0.4) transparent transparent transparent;
|
7907
7943
|
background-color: rgba(30, 176, 108, 0.19); }
|
7908
7944
|
.btn.btn--disabled, .btn[disabled] {
|
7909
|
-
opacity: 0.
|
7945
|
+
opacity: 0.6;
|
7910
7946
|
cursor: not-allowed;
|
7911
7947
|
box-shadow: none; }
|
7912
7948
|
.btn.btn--disabled:hover, .btn.btn--disabled:focus, .btn[disabled]:hover, .btn[disabled]:focus {
|
@@ -7916,7 +7952,7 @@ time {
|
|
7916
7952
|
border: 1px solid transparent;
|
7917
7953
|
box-shadow: none; }
|
7918
7954
|
.btn.btn--disabled.btn--default, .btn[disabled].btn--default {
|
7919
|
-
opacity: 0.
|
7955
|
+
opacity: 0.6;
|
7920
7956
|
cursor: not-allowed;
|
7921
7957
|
box-shadow: none; }
|
7922
7958
|
.btn.btn--disabled.btn--default:hover, .btn.btn--disabled.btn--default:focus, .btn[disabled].btn--default:hover, .btn[disabled].btn--default:focus {
|
@@ -7926,7 +7962,7 @@ time {
|
|
7926
7962
|
border: 1px solid transparent;
|
7927
7963
|
box-shadow: none; }
|
7928
7964
|
.btn.btn--disabled.btn--primary, .btn[disabled].btn--primary {
|
7929
|
-
opacity: 0.
|
7965
|
+
opacity: 0.6;
|
7930
7966
|
cursor: not-allowed;
|
7931
7967
|
box-shadow: none; }
|
7932
7968
|
.btn.btn--disabled.btn--primary:hover, .btn.btn--disabled.btn--primary:focus, .btn[disabled].btn--primary:hover, .btn[disabled].btn--primary:focus {
|
@@ -7936,7 +7972,7 @@ time {
|
|
7936
7972
|
border: 1px solid transparent;
|
7937
7973
|
box-shadow: none; }
|
7938
7974
|
.btn.btn--disabled.btn--success, .btn[disabled].btn--success {
|
7939
|
-
opacity: 0.
|
7975
|
+
opacity: 0.6;
|
7940
7976
|
cursor: not-allowed;
|
7941
7977
|
box-shadow: none; }
|
7942
7978
|
.btn.btn--disabled.btn--success:hover, .btn.btn--disabled.btn--success:focus, .btn[disabled].btn--success:hover, .btn[disabled].btn--success:focus {
|
@@ -7946,7 +7982,7 @@ time {
|
|
7946
7982
|
border: 1px solid transparent;
|
7947
7983
|
box-shadow: none; }
|
7948
7984
|
.btn.btn--disabled.btn--warning, .btn[disabled].btn--warning {
|
7949
|
-
opacity: 0.
|
7985
|
+
opacity: 0.6;
|
7950
7986
|
cursor: not-allowed;
|
7951
7987
|
box-shadow: none; }
|
7952
7988
|
.btn.btn--disabled.btn--warning:hover, .btn.btn--disabled.btn--warning:focus, .btn[disabled].btn--warning:hover, .btn[disabled].btn--warning:focus {
|
@@ -7956,7 +7992,7 @@ time {
|
|
7956
7992
|
border: 1px solid transparent;
|
7957
7993
|
box-shadow: none; }
|
7958
7994
|
.btn.btn--disabled.btn--alert, .btn[disabled].btn--alert {
|
7959
|
-
opacity: 0.
|
7995
|
+
opacity: 0.6;
|
7960
7996
|
cursor: not-allowed;
|
7961
7997
|
box-shadow: none; }
|
7962
7998
|
.btn.btn--disabled.btn--alert:hover, .btn.btn--disabled.btn--alert:focus, .btn[disabled].btn--alert:hover, .btn[disabled].btn--alert:focus {
|
@@ -7966,7 +8002,7 @@ time {
|
|
7966
8002
|
border: 1px solid transparent;
|
7967
8003
|
box-shadow: none; }
|
7968
8004
|
.btn.btn--disabled.btn--highlight, .btn[disabled].btn--highlight {
|
7969
|
-
opacity: 0.
|
8005
|
+
opacity: 0.6;
|
7970
8006
|
cursor: not-allowed;
|
7971
8007
|
box-shadow: none; }
|
7972
8008
|
.btn.btn--disabled.btn--highlight:hover, .btn.btn--disabled.btn--highlight:focus, .btn[disabled].btn--highlight:hover, .btn[disabled].btn--highlight:focus {
|
@@ -7976,7 +8012,7 @@ time {
|
|
7976
8012
|
border: 1px solid transparent;
|
7977
8013
|
box-shadow: none; }
|
7978
8014
|
.btn.btn--disabled.btn--sd-green, .btn[disabled].btn--sd-green {
|
7979
|
-
opacity: 0.
|
8015
|
+
opacity: 0.6;
|
7980
8016
|
cursor: not-allowed;
|
7981
8017
|
box-shadow: none; }
|
7982
8018
|
.btn.btn--disabled.btn--sd-green:hover, .btn.btn--disabled.btn--sd-green:focus, .btn[disabled].btn--sd-green:hover, .btn[disabled].btn--sd-green:focus {
|
@@ -8697,6 +8733,10 @@ time {
|
|
8697
8733
|
.btn.btn--ui-dark.btn--text-only.btn--disabled.btn--sd-green:hover, .btn.btn--ui-dark.btn--text-only.btn--disabled.btn--sd-green:focus, .btn.btn--ui-dark.btn--text-only.btn--disabled.btn--sd-green:active, .btn.btn--ui-dark.btn--text-only[disabled].btn--sd-green:hover, .btn.btn--ui-dark.btn--text-only[disabled].btn--sd-green:focus, .btn.btn--ui-dark.btn--text-only[disabled].btn--sd-green:active {
|
8698
8734
|
box-shadow: none;
|
8699
8735
|
border-color: transparent; }
|
8736
|
+
.btn.btn--ui-dark.btn--text-only.btn--primary, .btn.btn--ui-dark.btn--text-only.btn--success, .btn.btn--ui-dark.btn--text-only.btn--warning, .btn.btn--ui-dark.btn--text-only.btn--alert, .btn.btn--ui-dark.btn--text-only.btn--highlight, .btn.btn--ui-dark.btn--text-only.btn--sd-green, .btn.btn--ui-dark.btn--text-only.btn--secondary {
|
8737
|
+
color: var(--sd-btn-txt); }
|
8738
|
+
.btn.btn--ui-dark.btn--text-only.btn--primary .sd-spinner__path, .btn.btn--ui-dark.btn--text-only.btn--success .sd-spinner__path, .btn.btn--ui-dark.btn--text-only.btn--warning .sd-spinner__path, .btn.btn--ui-dark.btn--text-only.btn--alert .sd-spinner__path, .btn.btn--ui-dark.btn--text-only.btn--highlight .sd-spinner__path, .btn.btn--ui-dark.btn--text-only.btn--sd-green .sd-spinner__path, .btn.btn--ui-dark.btn--text-only.btn--secondary .sd-spinner__path {
|
8739
|
+
stroke: var(--sd-btn-txt); }
|
8700
8740
|
.btn.btn--ui-dark.btn--hollow {
|
8701
8741
|
border: 1px solid rgba(245, 245, 245, 0.28);
|
8702
8742
|
color: rgba(245, 245, 245, 0.7);
|
@@ -8787,6 +8827,10 @@ time {
|
|
8787
8827
|
box-shadow: 0 0 0 3px rgba(94, 169, 200, 0.3); }
|
8788
8828
|
.btn.btn--ui-dark.btn--hollow.btn--sd-green:active {
|
8789
8829
|
box-shadow: inset 0 1px 0 0 #1eb06c; }
|
8830
|
+
.btn.btn--ui-dark.btn--hollow.btn--primary, .btn.btn--ui-dark.btn--hollow.btn--success, .btn.btn--ui-dark.btn--hollow.btn--warning, .btn.btn--ui-dark.btn--hollow.btn--alert, .btn.btn--ui-dark.btn--hollow.btn--highlight, .btn.btn--ui-dark.btn--hollow.btn--sd-green, .btn.btn--ui-dark.btn--hollow.btn--secondary {
|
8831
|
+
color: var(--sd-btn-color); }
|
8832
|
+
.btn.btn--ui-dark.btn--hollow.btn--primary .sd-spinner__path, .btn.btn--ui-dark.btn--hollow.btn--success .sd-spinner__path, .btn.btn--ui-dark.btn--hollow.btn--warning .sd-spinner__path, .btn.btn--ui-dark.btn--hollow.btn--alert .sd-spinner__path, .btn.btn--ui-dark.btn--hollow.btn--highlight .sd-spinner__path, .btn.btn--ui-dark.btn--hollow.btn--sd-green .sd-spinner__path, .btn.btn--ui-dark.btn--hollow.btn--secondary .sd-spinner__path {
|
8833
|
+
stroke: var(--sd-btn-color); }
|
8790
8834
|
.btn.btn--ui-dark.btn--hollow.btn--disabled, .btn.btn--ui-dark.btn--hollow[disabled] {
|
8791
8835
|
border: 1px solid 0;
|
8792
8836
|
color: #F5F5F5;
|
@@ -8948,6 +8992,12 @@ time {
|
|
8948
8992
|
background-color: rgba(35, 35, 35, 0.2); }
|
8949
8993
|
.btn.btn--icon-only-circle.btn--text-only.btn--ui-dark [class^="icon-"], .btn.btn--icon-only-circle.btn--text-only.btn--ui-dark [class*=" icon-"] {
|
8950
8994
|
color: #fff; }
|
8995
|
+
.btn--primary, .btn--success, .btn--warning, .btn--alert, .btn--highlight, .btn--sd-green, .btn--secondary {
|
8996
|
+
color: #fff; }
|
8997
|
+
.btn--primary [class^="icon-"], .btn--primary [class*=" icon-"], .btn--success [class^="icon-"], .btn--success [class*=" icon-"], .btn--warning [class^="icon-"], .btn--warning [class*=" icon-"], .btn--alert [class^="icon-"], .btn--alert [class*=" icon-"], .btn--highlight [class^="icon-"], .btn--highlight [class*=" icon-"], .btn--sd-green [class^="icon-"], .btn--sd-green [class*=" icon-"], .btn--secondary [class^="icon-"], .btn--secondary [class*=" icon-"] {
|
8998
|
+
color: #fff; }
|
8999
|
+
.btn--primary .sd-spinner__path, .btn--success .sd-spinner__path, .btn--warning .sd-spinner__path, .btn--alert .sd-spinner__path, .btn--highlight .sd-spinner__path, .btn--sd-green .sd-spinner__path, .btn--secondary .sd-spinner__path {
|
9000
|
+
stroke: #fff; }
|
8951
9001
|
|
8952
9002
|
.sd-create-btn {
|
8953
9003
|
width: 4.8rem;
|
@@ -9040,7 +9090,7 @@ time {
|
|
9040
9090
|
color: #5ea9c8;
|
9041
9091
|
opacity: 1; }
|
9042
9092
|
.icn-btn--disabled {
|
9043
|
-
opacity: 0.
|
9093
|
+
opacity: 0.6; }
|
9044
9094
|
.icn-btn--small {
|
9045
9095
|
height: 1.25em;
|
9046
9096
|
width: 1.25em; }
|
@@ -10057,6 +10107,13 @@ time {
|
|
10057
10107
|
position: absolute;
|
10058
10108
|
width: 1px; }
|
10059
10109
|
|
10110
|
+
.btn[data-loading="true"] {
|
10111
|
+
pointer-events: none; }
|
10112
|
+
.btn[data-loading="true"] .sd-spinner {
|
10113
|
+
margin-inline-start: -0.3rem; }
|
10114
|
+
.btn[data-loading="true"].btn--icon-only .sd-spinner {
|
10115
|
+
margin-inline-start: 0; }
|
10116
|
+
|
10060
10117
|
.label {
|
10061
10118
|
display: inline-block;
|
10062
10119
|
padding: 0 0.8rem;
|
@@ -19096,10 +19153,14 @@ tags-input {
|
|
19096
19153
|
top: 0;
|
19097
19154
|
z-index: -1;
|
19098
19155
|
pointer-events: none;
|
19099
|
-
opacity: 0;
|
19100
|
-
height:
|
19101
|
-
width:
|
19102
|
-
|
19156
|
+
opacity: 0 !important;
|
19157
|
+
height: 0;
|
19158
|
+
width: 0;
|
19159
|
+
min-width: 0;
|
19160
|
+
overflow: hidden;
|
19161
|
+
font-size: 0.01px !important;
|
19162
|
+
padding: 0 !important;
|
19163
|
+
margin: 0 !important; }
|
19103
19164
|
|
19104
19165
|
.sd-popover {
|
19105
19166
|
background: #333;
|