superdesk-ui-framework 3.0.1-beta.3 → 3.0.1-beta.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.
Files changed (99) hide show
  1. package/app/styles/_sd-tag-input.scss +201 -296
  2. package/app/styles/components/_list-item.scss +13 -1
  3. package/app/styles/components/_sd-photo-preview.scss +1 -1
  4. package/app/styles/design-tokens/_new-colors.scss +1 -1
  5. package/app/styles/form-elements/_forms-general.scss +22 -7
  6. package/app/styles/form-elements/_inputs.scss +131 -54
  7. package/app-typescript/components/Badge.tsx +3 -2
  8. package/app-typescript/components/DatePicker.tsx +40 -52
  9. package/app-typescript/components/DurationInput.tsx +306 -0
  10. package/app-typescript/components/Form/InputBase.tsx +85 -0
  11. package/app-typescript/components/Form/InputNew.tsx +105 -0
  12. package/app-typescript/components/Form/InputWrapper.tsx +79 -0
  13. package/app-typescript/components/Form/index.tsx +3 -0
  14. package/app-typescript/components/Input.tsx +28 -45
  15. package/app-typescript/components/Label.tsx +49 -10
  16. package/app-typescript/components/Layouts/Layout.tsx +1 -1
  17. package/app-typescript/components/Lists/ContentList.tsx +4 -4
  18. package/app-typescript/components/MultiSelect.tsx +37 -50
  19. package/app-typescript/components/Navigation/BottomNav.tsx +3 -2
  20. package/app-typescript/components/Select.tsx +23 -41
  21. package/app-typescript/components/SelectWithTemplate.tsx +32 -7
  22. package/app-typescript/components/TimePicker.tsx +48 -16
  23. package/app-typescript/components/TreeSelect.tsx +423 -195
  24. package/app-typescript/index.ts +3 -1
  25. package/dist/examples.bundle.js +16398 -15334
  26. package/dist/playgrounds/react-playgrounds/CoreLayout.tsx +64 -54
  27. package/dist/playgrounds/react-playgrounds/RundownEditor.tsx +24 -16
  28. package/dist/playgrounds/react-playgrounds/TestGround.tsx +76 -1
  29. package/dist/playgrounds/react-playgrounds/components/Layout.tsx +1 -1
  30. package/dist/react/Badges.tsx +18 -0
  31. package/dist/react/ContentList.tsx +15 -9
  32. package/dist/react/DatePicker.tsx +21 -1
  33. package/dist/react/DurationInput.tsx +104 -0
  34. package/dist/react/Index.tsx +5 -0
  35. package/dist/react/Inputs.tsx +153 -2
  36. package/dist/react/Labels.tsx +51 -1
  37. package/dist/react/MultiSelect.tsx +4 -1
  38. package/dist/react/SelectWithTemplate.tsx +6 -1
  39. package/dist/react/TableList.tsx +22 -44
  40. package/dist/react/TimePicker.tsx +16 -8
  41. package/dist/react/TreeSelect.tsx +301 -48
  42. package/dist/react/tree-select/TreeSelect.tsx +273 -0
  43. package/dist/react/tree-select/example-1.tsx +71 -0
  44. package/dist/react/tree-select/example-2.tsx +59 -0
  45. package/dist/superdesk-ui.bundle.css +411 -370
  46. package/dist/superdesk-ui.bundle.js +15554 -14493
  47. package/dist/vendor.bundle.js +27 -27
  48. package/examples/pages/playgrounds/react-playgrounds/CoreLayout.tsx +64 -54
  49. package/examples/pages/playgrounds/react-playgrounds/RundownEditor.tsx +24 -16
  50. package/examples/pages/playgrounds/react-playgrounds/TestGround.tsx +76 -1
  51. package/examples/pages/playgrounds/react-playgrounds/components/Layout.tsx +1 -1
  52. package/examples/pages/react/Badges.tsx +18 -0
  53. package/examples/pages/react/ContentList.tsx +15 -9
  54. package/examples/pages/react/DatePicker.tsx +21 -1
  55. package/examples/pages/react/DurationInput.tsx +104 -0
  56. package/examples/pages/react/Index.tsx +5 -0
  57. package/examples/pages/react/Inputs.tsx +153 -2
  58. package/examples/pages/react/Labels.tsx +51 -1
  59. package/examples/pages/react/MultiSelect.tsx +4 -1
  60. package/examples/pages/react/SelectWithTemplate.tsx +6 -1
  61. package/examples/pages/react/TableList.tsx +22 -44
  62. package/examples/pages/react/TimePicker.tsx +16 -8
  63. package/examples/pages/react/TreeSelect.tsx +301 -48
  64. package/examples/pages/react/tree-select/TreeSelect.tsx +273 -0
  65. package/examples/pages/react/tree-select/example-1.tsx +71 -0
  66. package/examples/pages/react/tree-select/example-2.tsx +59 -0
  67. package/package.json +2 -1
  68. package/react/components/Badge.d.ts +1 -0
  69. package/react/components/Badge.js +2 -2
  70. package/react/components/DatePicker.d.ts +1 -0
  71. package/react/components/DatePicker.js +6 -22
  72. package/react/components/DurationInput.d.ts +38 -0
  73. package/react/components/DurationInput.js +271 -0
  74. package/react/components/Form/InputBase.d.ts +42 -0
  75. package/react/components/Form/InputBase.js +72 -0
  76. package/react/components/Form/InputNew.d.ts +45 -0
  77. package/react/components/Form/InputNew.js +73 -0
  78. package/react/components/Form/InputWrapper.d.ts +28 -0
  79. package/react/components/Form/InputWrapper.js +91 -0
  80. package/react/components/Form/index.d.ts +3 -0
  81. package/react/components/Form/index.js +7 -1
  82. package/react/components/Input.js +5 -34
  83. package/react/components/Label.d.ts +1 -0
  84. package/react/components/Label.js +18 -2
  85. package/react/components/Layouts/Layout.js +1 -1
  86. package/react/components/Lists/ContentList.d.ts +45 -0
  87. package/react/components/Lists/ContentList.js +85 -0
  88. package/react/components/Navigation/BottomNav.d.ts +1 -0
  89. package/react/components/Navigation/BottomNav.js +2 -2
  90. package/react/components/Select.d.ts +1 -1
  91. package/react/components/Select.js +4 -26
  92. package/react/components/SelectWithTemplate.d.ts +11 -1
  93. package/react/components/SelectWithTemplate.js +19 -10
  94. package/react/components/TimePicker.d.ts +15 -2
  95. package/react/components/TimePicker.js +15 -4
  96. package/react/components/TreeSelect.d.ts +75 -0
  97. package/react/components/TreeSelect.js +448 -0
  98. package/react/index.d.ts +3 -0
  99. package/react/index.js +8 -3
@@ -0,0 +1,273 @@
1
+ import * as React from 'react';
2
+ import * as Markup from '../../../js/react';
3
+ import { PropsList, Prop } from '../../../../app-typescript';
4
+ import { MultiSelect } from '../../../../app-typescript/components/MultiSelect';
5
+ import { TreeSelect } from '../../../../app-typescript/components/TreeSelect';
6
+ import {Example1} from './example-1';
7
+ import {Example2} from './example-2';
8
+
9
+ interface IState {
10
+ value: any;
11
+ value2: any;
12
+ options: any;
13
+ options2: any;
14
+ inputValue: string;
15
+ }
16
+
17
+ let itemArr = [
18
+ {
19
+ value: 'Item1',
20
+ children: [
21
+ {
22
+ value: 'Item4',
23
+ children: [
24
+ {value: 'Item10'}
25
+ ]
26
+ },
27
+ {
28
+ value: 'Item5',
29
+ children: [
30
+ {value: 'Item11'}
31
+ ]
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ value: 'Item2',
37
+ children: [
38
+ {
39
+ value: 'Item6'
40
+ },
41
+ {
42
+ value: 'Item7'
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ value: 'Item3',
48
+ children: [
49
+ {
50
+ value: 'Item8'
51
+ },
52
+ {
53
+ value: 'Item9'
54
+ }
55
+ ]
56
+ },
57
+ ]
58
+
59
+ let itemArr2 = [
60
+ {
61
+ value: {name: 'name'},
62
+ children: [
63
+ {
64
+ value: {name: 'name'},
65
+ children: [
66
+ {value: { name: 'name' }
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ value: {name: 'name'},
72
+ children: [
73
+ {value: {name: 'name'}
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+
81
+
82
+ export class TreeSelectDocs extends React.Component<{}, IState> {
83
+ constructor(props) {
84
+ super(props);
85
+ this.state = {
86
+ value: [],
87
+ value2: [],
88
+ options: itemArr,
89
+ options2: itemArr,
90
+ inputValue: ''
91
+ }
92
+
93
+ this.handleChange = this.handleChange.bind(this);
94
+ }
95
+
96
+ handleChange(e, option) {
97
+
98
+ if(option.item) {
99
+ e.stopPropagation();
100
+ e.preventDefault();
101
+
102
+ this.setState({
103
+ options: option.item
104
+ })
105
+ }
106
+ }
107
+
108
+ render() {
109
+ return (
110
+ <section className='docs-page__container'>
111
+ {/* <h2 className='docs-page__h2'>Example 1</h2>
112
+
113
+ <Example1 />
114
+
115
+ <h2 className='docs-page__h2'>Example 2</h2>
116
+
117
+ <Example2 /> */}
118
+
119
+ <h2 className='docs-page__h2'>TreeSelect</h2>
120
+
121
+ <Markup.ReactMarkupCodePreview>{`
122
+ <TreeSelect
123
+ options={this.state.options2}
124
+ getLabel={'label'}
125
+ getMultilevelArray={'items'}
126
+ selectBranchWithChildren={true}
127
+ onChange={() => false}
128
+ />
129
+ `}
130
+ </Markup.ReactMarkupCodePreview>
131
+
132
+ <Markup.ReactMarkup>
133
+ <Markup.ReactMarkupPreview>
134
+ <div className='docs-page__content-row docs-page__content-row--no-margin'>
135
+ <div className='form__row'>
136
+ <TreeSelect
137
+ getOptions={() => {
138
+ return itemArr
139
+ }}
140
+ selectBranchWithChildren={true}
141
+ onChange={(e) => console.log(e)}
142
+ allowMultiple
143
+ kind={'synchronous'}
144
+ fullWidth
145
+ info={'Info Message'}
146
+ error={'Error Message'}
147
+ required
148
+ label={'TreeSelect Label'}
149
+ />
150
+ </div>
151
+ </div>
152
+ </Markup.ReactMarkupPreview>
153
+
154
+ <Markup.ReactMarkupCode>{`
155
+ <TreeSelect
156
+ getOptions={() => {
157
+ return itemArr
158
+ }}
159
+ selectBranchWithChildren={true}
160
+ onChange={() => false}
161
+ allowMultiple
162
+ kind={'synchronous'}
163
+ />
164
+ `}</Markup.ReactMarkupCode>
165
+
166
+ </Markup.ReactMarkup>
167
+
168
+ <p className='docs-page__paragraph'>Asynchronous mode in TreeSelect component.</p>
169
+ <Markup.ReactMarkup>
170
+ <Markup.ReactMarkupPreview>
171
+ <div className='docs-page__content-row docs-page__content-row--no-margin'>
172
+ <div className='form__row'>
173
+ <TreeSelect
174
+ getOptions={() => {
175
+ return itemArr
176
+ }}
177
+ selectBranchWithChildren={true}
178
+ onChange={() => false}
179
+ allowMultiple
180
+ kind={'asynchronous'}
181
+ searchOptions={(term, callback) => {
182
+ let newArr = itemArr.filter((item) => {
183
+ if (item.value
184
+ .toLowerCase().includes(term.toLowerCase())) {
185
+ return item;
186
+ }
187
+ })
188
+ return callback(newArr)
189
+ }}
190
+
191
+ />
192
+ </div>
193
+ </div>
194
+ </Markup.ReactMarkupPreview>
195
+
196
+ <Markup.ReactMarkupCode>{`
197
+ <TreeSelect
198
+ getOptions={() => {
199
+ return itemArr
200
+ }}
201
+ selectBranchWithChildren={true}
202
+ onChange={() => false}
203
+ allowMultiple
204
+ kind={'asynchronous'}
205
+ searchOptions={(term, callback) => {
206
+ let newArr = itemArr.filter((item) => {
207
+ if (item.value
208
+ .toLowerCase().includes(term.toLowerCase())) {
209
+ return item;
210
+ }
211
+ })
212
+ return callback(newArr)
213
+ }}
214
+ />
215
+ `}</Markup.ReactMarkupCode>
216
+
217
+ </Markup.ReactMarkup>
218
+
219
+ <p className='docs-page__paragraph'>TreeSelect with custom template.</p>
220
+ <Markup.ReactMarkup>
221
+ <Markup.ReactMarkupPreview>
222
+ <div className='docs-page__content-row docs-page__content-row--no-margin'>
223
+ <div className='form__row'>
224
+ <TreeSelect
225
+ getOptions={() => this.state.options}
226
+ kind={'synchronous'}
227
+ onChange={() => false}
228
+ optionTemplate={(item: any) => {
229
+ return <div>Label: {item}</div>
230
+ }}
231
+ valueTemplate={(item: any) => {
232
+ return <span>Label: {item}</span>
233
+ }}
234
+ />
235
+ </div>
236
+ </div>
237
+ </Markup.ReactMarkupPreview>
238
+
239
+ <Markup.ReactMarkupCode>{`
240
+ <TreeSelect
241
+ getOptions={() => this.state.options}
242
+ kind={'synchronous'}
243
+ onChange={() => false}
244
+ optionTemplate={(item: any) => {
245
+ return <div>Label: {item}</div>
246
+ }}
247
+ valueTemplate={(item: any) => {
248
+ return <span>Label: {item}</span>
249
+ }}
250
+ />
251
+ `}</Markup.ReactMarkupCode>
252
+
253
+ </Markup.ReactMarkup>
254
+
255
+ <h3 className="docs-page__h3">Props</h3>
256
+ <PropsList>
257
+ <Prop name='value' isRequired={false} type='Array<T>' default='/' description='Value of the component.'/>
258
+ <Prop name='getOptions' isRequired={false} type='Function' default='/' description='An array of selectitems to display as the available options.'/>
259
+ <Prop name='kind' isRequired={true} type='synchronous | asynchronous' default='/' description='Type of TreeSelect component.'/>
260
+ <Prop name='width' isRequired={false} type='medium | full-width (100%)' default='100%' description='Dropdown width.'/>
261
+ <Prop name='selectBranchWithChildren' isRequired={false} type='boolean' default='false' description='When specified, select branch with children is enabled.'/>
262
+ <Prop name='readonly' isRequired={false} type='boolean' default='false' description='When specified, component changes are not enabled.'/>
263
+ <Prop name='loading' isRequired={false} type='boolean' default='false' description='Adds a loading indicator in dropdown.'/>
264
+ <Prop name='valueTemplate' isRequired={false} type='function' default='/' description='Function that gets an item in the value and returns the content for it.'/>
265
+ <Prop name='optionTemplate' isRequired={false} type='function' default='/' description='Function that gets the option and returns the content for it.'/>
266
+ <Prop name='searchOptions' isRequired={false} type='function' default='/' description='The function will be called when a search is initiated from UI in asynchronous mode.'/>
267
+ <Prop name='onChange' isRequired={true} type='function' default='/' description='Callback to invoke when value changes.'/>
268
+ </PropsList>
269
+
270
+ </section>
271
+ )
272
+ }
273
+ }
@@ -0,0 +1,71 @@
1
+ import React from 'react';
2
+ import {TreeSelect} from 'superdesk-ui-framework/react';
3
+ import {ITreeNode} from 'superdesk-ui-framework/react/components/TreeSelect';
4
+
5
+ type IProps = {};
6
+
7
+ interface IVocabularyItem {
8
+ qcode: string;
9
+ name: string;
10
+ }
11
+
12
+ interface IState {
13
+ value: Array<IVocabularyItem>;
14
+ }
15
+
16
+ const source = [
17
+ {
18
+ 'name': 'Article (news)',
19
+ 'qcode': 'Article',
20
+ },
21
+ {
22
+ 'name': 'Sidebar',
23
+ 'qcode': 'Sidebar',
24
+ },
25
+ {
26
+ 'name': 'Factbox',
27
+ 'qcode': 'Factbox',
28
+ },
29
+ ];
30
+
31
+ function searchOptions(
32
+ term: string,
33
+ callback: (res: Array<ITreeNode<{name: string; qcode: string;}>>) => void,
34
+ ): void {
35
+ setTimeout(() => {
36
+ callback(
37
+ source
38
+ .filter((item) => item.name.toLocaleLowerCase().includes(term.toLocaleLowerCase()))
39
+ .map((item) => ({value: item})),
40
+ );
41
+ }, 1000);
42
+ }
43
+
44
+
45
+ export class MultiSelectDemo extends React.PureComponent<IProps, IState> {
46
+ constructor(props: IProps) {
47
+ super(props);
48
+
49
+ this.state = {
50
+ value: [],
51
+ };
52
+ }
53
+
54
+ render() {
55
+ return (
56
+ <TreeSelect
57
+ kind="asynchronous"
58
+ searchOptions={searchOptions}
59
+ value={this.state.value}
60
+ onChange={(val) => {
61
+ this.setState({value: val});
62
+ }}
63
+ getLabel={({name}) => name}
64
+ getId={({qcode}) => qcode}
65
+ selectBranchWithChildren={false}
66
+ optionTemplate={(item) => <span style={{color: 'blue'}}>{item.name}</span>}
67
+ allowMultiple={true}
68
+ />
69
+ );
70
+ }
71
+ }
@@ -0,0 +1,59 @@
1
+ import * as React from 'react';
2
+ import {TreeSelect} from '../../../../app-typescript/components/TreeSelect';
3
+
4
+ interface IVocabularyItem {
5
+ name: string;
6
+ qcode: string;
7
+ }
8
+
9
+ const authorRoles: Array<IVocabularyItem> = [
10
+ {qcode: 'writer', name: 'Writer'},
11
+ {qcode: 'photographer', name: 'Photographer'},
12
+ {qcode: 'editor', name: 'Editor'},
13
+ ];
14
+
15
+ type IProps = {};
16
+
17
+ interface IState {
18
+ selectedRoles: Array<IVocabularyItem>;
19
+ }
20
+
21
+ /**
22
+ * Same as example-1, only without option/value templates.
23
+ * Issues: initial value is shown as empty, crashes when opening dropdown
24
+ */
25
+ export class Example2 extends React.PureComponent<IProps, IState> {
26
+ constructor(props: IProps) {
27
+ super(props);
28
+
29
+ this.state = {
30
+ selectedRoles: [
31
+ {qcode: 'writer', name: 'Writer'},
32
+ ],
33
+ };
34
+ }
35
+
36
+ render() {
37
+ const {selectedRoles} = this.state;
38
+
39
+ return (
40
+ <div>
41
+ <TreeSelect
42
+ kind="synchronous"
43
+ getOptions={() => authorRoles.map((value) => ({value}))}
44
+ value={selectedRoles}
45
+ onChange={(val) => {
46
+ this.setState({selectedRoles: val.map((node) => node.value)});
47
+
48
+ // accessing qcodes should not cause TypeScript errors
49
+ val.forEach((node) => {
50
+ console.log(node.qcode);
51
+ })
52
+ }}
53
+ allowMultiple={true}
54
+ />
55
+ </div>
56
+ );
57
+ }
58
+ }
59
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "superdesk-ui-framework",
3
- "version": "3.0.1-beta.3",
3
+ "version": "3.0.1-beta.4",
4
4
  "license": "AGPL-3.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -89,6 +89,7 @@
89
89
  "@types/node": "^14.10.2",
90
90
  "chart.js": "^2.9.3",
91
91
  "date-fns": "2.7.0",
92
+ "moment": "^2.29.3",
92
93
  "popper.js": "1.14.4",
93
94
  "primeicons": "2.0.0",
94
95
  "react-beautiful-dnd": "^13.0.0",
@@ -5,6 +5,7 @@ interface IProps {
5
5
  color?: string;
6
6
  shape?: 'round' | 'square';
7
7
  children?: React.ReactNode;
8
+ hexColor?: string;
8
9
  'data-test-id'?: string;
9
10
  }
10
11
  export declare class Badge extends React.PureComponent<IProps> {
@@ -55,10 +55,10 @@ var Badge = /** @class */ (function (_super) {
55
55
  if (this.props.children) {
56
56
  return (React.createElement("div", { className: 'element-with-badge', "data-test-id": this.props['data-test-id'] },
57
57
  this.props.children,
58
- React.createElement("span", { className: classes, "data-test-id": "badge-content" }, this.props.text)));
58
+ React.createElement("span", { className: classes, style: { backgroundColor: this.props.hexColor }, "data-test-id": "badge-content" }, this.props.text)));
59
59
  }
60
60
  else {
61
- return React.createElement("span", { className: classes, "data-test-id": this.props['data-test-id'] }, this.props.text);
61
+ return React.createElement("span", { className: classes, style: { backgroundColor: this.props.hexColor }, "data-test-id": this.props['data-test-id'] }, this.props.text);
62
62
  }
63
63
  };
64
64
  return Badge;
@@ -31,6 +31,7 @@ interface IState {
31
31
  export declare class DatePicker extends React.PureComponent<IDatePicker, IState> {
32
32
  private instance;
33
33
  hidePopupOnScroll: () => void;
34
+ private htmlId;
34
35
  constructor(props: IDatePicker);
35
36
  componentDidMount(): void;
36
37
  componentWillUnmount(): void;
@@ -54,8 +54,9 @@ var addDays_1 = __importDefault(require("date-fns/addDays"));
54
54
  var format_1 = __importDefault(require("date-fns/format"));
55
55
  var calendar_1 = require("@superdesk/primereact/calendar");
56
56
  var lodash_1 = require("lodash");
57
- var classnames_1 = __importDefault(require("classnames"));
57
+ // import classNames from 'classnames';
58
58
  var react_id_generator_1 = __importDefault(require("react-id-generator"));
59
+ var Form_1 = require("./Form");
59
60
  var internalPrimereactClassnames = {
60
61
  overlayVisible: 'p-input-overlay-visible',
61
62
  };
@@ -83,6 +84,7 @@ var DatePicker = /** @class */ (function (_super) {
83
84
  function DatePicker(props) {
84
85
  var _a;
85
86
  var _this = _super.call(this, props) || this;
87
+ _this.htmlId = (0, react_id_generator_1.default)();
86
88
  _this.state = {
87
89
  value: parseToPrimeReactCalendarFormat(_this.props.value),
88
90
  valid: true,
@@ -124,20 +126,8 @@ var DatePicker = /** @class */ (function (_super) {
124
126
  if (this.props.locale != null) {
125
127
  locale = __assign(__assign({}, this.props.locale), { today: 'today', clear: 'clear' });
126
128
  }
127
- var classes = (0, classnames_1.default)('sd-input', {
128
- 'sd-input--inline-label': this.props.inlineLabel,
129
- 'sd-input--required': this.props.required,
130
- 'sd-input--disabled': this.props.disabled,
131
- 'sd-input--full-width': this.props.fullWidth,
132
- 'sd-input--invalid': this.props.invalid || this.state.invalid,
133
- });
134
- var labelClasses = (0, classnames_1.default)('sd-input__label', {
135
- 'a11y-only': this.props.labelHidden,
136
- });
137
- var htmlId = (0, react_id_generator_1.default)();
138
- return (React.createElement("div", { className: classes },
139
- React.createElement("label", { className: labelClasses, htmlFor: htmlId, id: htmlId + 'label', tabIndex: this.props.tabindex === undefined ? undefined : -1 }, this.props.label),
140
- React.createElement(calendar_1.Calendar, { ref: function (ref) {
129
+ return (React.createElement(Form_1.InputWrapper, { label: this.props.label, error: this.props.error, required: this.props.required, disabled: this.props.disabled, invalid: this.state.invalid, info: this.props.info, inlineLabel: this.props.inlineLabel, labelHidden: this.props.labelHidden, fullWidth: this.props.fullWidth, htmlId: this.htmlId, tabindex: this.props.tabindex },
130
+ React.createElement(calendar_1.Calendar, { inputId: this.htmlId, ariaLabelledBy: this.htmlId + 'label', ref: function (ref) {
141
131
  _this.instance = ref;
142
132
  }, value: this.state.value === null ? undefined : this.state.value, onChange: function (event) {
143
133
  var result = parseFromPrimeReactCalendarFormat(event.value);
@@ -167,13 +157,7 @@ var DatePicker = /** @class */ (function (_super) {
167
157
  // restoring internal state to current props value
168
158
  _this.setState({ valid: true, value: parseToPrimeReactCalendarFormat(_this.props.value) });
169
159
  }
170
- } }),
171
- React.createElement("div", { className: 'sd-input__message-box' },
172
- this.props.info && !this.props.invalid && !this.state.invalid ?
173
- React.createElement("div", { className: 'sd-input__hint' }, this.props.info) : null,
174
- this.props.invalid || this.state.invalid ?
175
- React.createElement("div", { className: 'sd-input__message' }, this.props.error)
176
- : null)));
160
+ } })));
177
161
  };
178
162
  return DatePicker;
179
163
  }(React.PureComponent));
@@ -0,0 +1,38 @@
1
+ import * as React from 'react';
2
+ interface IProps {
3
+ hours?: number;
4
+ minutes?: number;
5
+ seconds?: number;
6
+ disabled?: boolean;
7
+ inlineLabel?: boolean;
8
+ required?: boolean;
9
+ fullWidth?: boolean;
10
+ invalid?: boolean;
11
+ labelHidden?: boolean;
12
+ tabindex?: number;
13
+ label?: string;
14
+ info?: string;
15
+ error?: string;
16
+ onChange(e: number): void;
17
+ }
18
+ interface IState {
19
+ hours?: any;
20
+ minutes?: any;
21
+ seconds?: any;
22
+ invalid?: any;
23
+ }
24
+ export declare class DurationInput extends React.PureComponent<IProps, IState> {
25
+ hourRef: React.RefObject<HTMLInputElement>;
26
+ minuteRef: React.RefObject<HTMLInputElement>;
27
+ secondRef: React.RefObject<HTMLInputElement>;
28
+ constructor(props: IProps);
29
+ componentDidUpdate(_: any, prevState: IState): void;
30
+ handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void;
31
+ handleKeyValue(event: React.KeyboardEvent<HTMLInputElement>, state: 'hours' | 'minutes' | 'seconds'): void;
32
+ zerPad(value: number | string): string | number;
33
+ handleChange(event: React.ChangeEvent<HTMLInputElement>, state: 'hours' | 'minutes' | 'seconds'): void;
34
+ handleFocus(ref: HTMLInputElement | null, state: 'hours' | 'minutes' | 'seconds'): void;
35
+ handleFocusOnKeyUp(event: React.KeyboardEvent<HTMLInputElement>, ref: HTMLInputElement | null): void;
36
+ render(): JSX.Element;
37
+ }
38
+ export {};