x4js 1.5.16 → 1.5.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.
Files changed (75) hide show
  1. package/lib/cjs/app_sockets.js +74 -0
  2. package/lib/cjs/index.js +1 -0
  3. package/lib/cjs/treeview.js +27 -12
  4. package/lib/cjs/version.js +1 -1
  5. package/lib/esm/app_sockets.js +70 -0
  6. package/lib/esm/index.mjs +1 -0
  7. package/lib/esm/treeview.js +26 -12
  8. package/lib/esm/version.js +1 -1
  9. package/lib/{src/version.ts → types/app_sockets.d.ts} +29 -30
  10. package/lib/types/index.d.ts +1 -0
  11. package/lib/types/treeview.d.ts +5 -2
  12. package/lib/types/version.d.ts +1 -1
  13. package/package.json +1 -4
  14. package/lib/src/MIT-license.md +0 -14
  15. package/lib/src/action.ts +0 -88
  16. package/lib/src/alpha.jpg +0 -0
  17. package/lib/src/application.ts +0 -251
  18. package/lib/src/autocomplete.ts +0 -197
  19. package/lib/src/base64.ts +0 -166
  20. package/lib/src/base_component.ts +0 -152
  21. package/lib/src/button.ts +0 -355
  22. package/lib/src/calendar.ts +0 -328
  23. package/lib/src/canvas.ts +0 -505
  24. package/lib/src/cardview.ts +0 -227
  25. package/lib/src/checkbox.ts +0 -188
  26. package/lib/src/color.ts +0 -752
  27. package/lib/src/colorpicker.ts +0 -1639
  28. package/lib/src/combobox.ts +0 -465
  29. package/lib/src/component.ts +0 -2329
  30. package/lib/src/datastore.ts +0 -1322
  31. package/lib/src/dialog.ts +0 -656
  32. package/lib/src/dom_events.ts +0 -315
  33. package/lib/src/drag_manager.ts +0 -199
  34. package/lib/src/drawtext.ts +0 -355
  35. package/lib/src/fileupload.ts +0 -213
  36. package/lib/src/form.ts +0 -375
  37. package/lib/src/formatters.ts +0 -105
  38. package/lib/src/gridview.ts +0 -1185
  39. package/lib/src/i18n.ts +0 -346
  40. package/lib/src/icon.ts +0 -335
  41. package/lib/src/image.ts +0 -204
  42. package/lib/src/index.ts +0 -88
  43. package/lib/src/input.ts +0 -249
  44. package/lib/src/label.ts +0 -128
  45. package/lib/src/layout.ts +0 -430
  46. package/lib/src/link.ts +0 -86
  47. package/lib/src/listview.ts +0 -765
  48. package/lib/src/md5.ts +0 -438
  49. package/lib/src/menu.ts +0 -425
  50. package/lib/src/messagebox.ts +0 -224
  51. package/lib/src/panel.ts +0 -86
  52. package/lib/src/popup.ts +0 -494
  53. package/lib/src/property_editor.ts +0 -337
  54. package/lib/src/radiobtn.ts +0 -197
  55. package/lib/src/rating.ts +0 -135
  56. package/lib/src/request.ts +0 -300
  57. package/lib/src/router.ts +0 -185
  58. package/lib/src/settings.ts +0 -77
  59. package/lib/src/sidebarview.ts +0 -103
  60. package/lib/src/spreadsheet.ts +0 -1449
  61. package/lib/src/styles.ts +0 -343
  62. package/lib/src/svgcomponent.ts +0 -577
  63. package/lib/src/tabbar.ts +0 -151
  64. package/lib/src/tabview.ts +0 -110
  65. package/lib/src/textarea.ts +0 -235
  66. package/lib/src/textedit.ts +0 -544
  67. package/lib/src/toaster.ts +0 -80
  68. package/lib/src/tools.ts +0 -1473
  69. package/lib/src/tooltips.ts +0 -191
  70. package/lib/src/treeview.ts +0 -696
  71. package/lib/src/x4.less +0 -2243
  72. package/lib/src/x4dom.ts +0 -57
  73. package/lib/src/x4events.ts +0 -585
  74. package/lib/src/x4react.ts +0 -90
  75. package/lib/x4.css +0 -1780
package/lib/src/image.ts DELETED
@@ -1,204 +0,0 @@
1
- /**
2
- * ___ ___ __
3
- * \ \/ / / _
4
- * \ / /_| |_
5
- * / \____ _|
6
- * /__/\__\ |_|
7
- *
8
- * @file image.ts
9
- * @author Etienne Cochard
10
- *
11
- * Copyright (c) 2019-2022 R-libre ingenierie
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy
14
- * of this software and associated documentation files (the "Software"), to deal
15
- * in the Software without restriction, including without limitation the rights
16
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do so,
18
- * subject to the following conditions:
19
- * The above copyright notice and this permission notice shall be included in all copies
20
- * or substantial portions of the Software.
21
- *
22
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
23
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
24
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
- **/
29
-
30
- import { x4document } from './x4dom'
31
-
32
- import { Component, CProps, html } from './component'
33
-
34
- // ============================================================================
35
- // [IMAGE]
36
- // ============================================================================
37
-
38
- interface ImageProps extends CProps
39
- {
40
- src: string;
41
- alt?: string;
42
- lazy?: boolean; // mark image as lazy loading
43
- alignment?: 'fill' | 'contain' | 'cover' | 'scale-down' | 'none';
44
- }
45
-
46
- const emptyImageSrc = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
47
-
48
- function _isStaticImage( src: string ) {
49
- return src.substr(0,5)=='data:';
50
- }
51
-
52
-
53
-
54
- /**
55
- * Standard image class
56
- */
57
- export class Image extends Component<ImageProps>
58
- {
59
- protected m_created: boolean;
60
- protected m_lazysrc: string; // expected
61
-
62
- constructor(props: ImageProps) {
63
- super(props);
64
-
65
- this.m_created = false;
66
-
67
- this.m_props.lazy = props.lazy===false ? false : true;
68
- this.m_props.alt = props.alt;
69
-
70
- if( props.lazy!==false ) {
71
- this.m_lazysrc = props.src;
72
- props.src = emptyImageSrc;
73
- }
74
-
75
- this.setDomEvent( 'create', ( ) => {
76
- if( props.lazy ) {
77
- this.setImage( this.m_lazysrc, true );
78
- }
79
- });
80
- }
81
-
82
- /** @ignore */
83
- render( ) {
84
- let mp = this.m_props;
85
-
86
- const img = new Component( {
87
- tag: 'img',
88
- attrs: {
89
- draggable: false,
90
- alt: mp.alt ?? '',
91
- decoding: mp.lazy ? 'async' : undefined,
92
- },
93
- style: {
94
- objectFit: mp.alignment ? mp.alignment : undefined
95
- }
96
- });
97
-
98
- this.setContent( img );
99
- }
100
-
101
- /**
102
- * change the image
103
- * @param src - image path
104
- */
105
-
106
- public setImage( src: string, force?: boolean ) {
107
-
108
- if( !src ) {
109
- src = emptyImageSrc;
110
- }
111
-
112
- if( !this.m_props.lazy ) {
113
- this.m_props.src = src;
114
- this.m_lazysrc = src;
115
-
116
- if( this.dom ) {
117
- (<HTMLElement>this.dom.firstChild).setAttribute( 'src', src );
118
- }
119
- }
120
- else if( force || this.m_lazysrc!=src ) {
121
- if( _isStaticImage(src) ) {
122
- // not to download -> direct display
123
- this.m_props.src = src;
124
- this.m_lazysrc = src;
125
-
126
- if( this.dom ) {
127
- (<HTMLElement>this.dom.firstChild).setAttribute( 'src', this.m_props.src );
128
- }
129
- }
130
- else {
131
- // clear current image while waiting
132
- this.m_props.src = emptyImageSrc;
133
- if( this.dom ) {
134
- (<HTMLElement>this.dom.firstChild).setAttribute( 'src', this.m_props.src );
135
- }
136
-
137
- this.m_lazysrc = src;
138
- if( this.dom ) {
139
- this._update_image( );
140
- }
141
- }
142
- }
143
- }
144
-
145
- private _update_image( ) {
146
-
147
- console.assert( !!this.dom );
148
-
149
- if( this.m_lazysrc && !_isStaticImage(this.m_lazysrc) ) {
150
- // we do not push Components in a static array...
151
- Image.lazy_images_waiting.push( { dom: this.dom, src: this.m_lazysrc } );
152
- if( Image.lazy_image_timer===undefined ) {
153
- Image.lazy_image_timer = setInterval( Image.lazyWatch as TimerHandler, 10 );
154
- }
155
- }
156
- }
157
-
158
- private static lazy_images_waiting = [];
159
- private static lazy_image_timer: number = undefined;
160
-
161
- private static lazyWatch( ) {
162
-
163
- let newList = [];
164
- let done = 0;
165
-
166
- Image.lazy_images_waiting.forEach( ( el ) => {
167
-
168
- let dom = el.dom,
169
- src = el.src;
170
-
171
- // skip deleted elements
172
- if( !dom || dom.offsetParent === null ) {
173
- // do not append to newList
174
- return;
175
- }
176
-
177
- let rc = dom.getBoundingClientRect();
178
-
179
- // if it is visible & inserted inside the document
180
- if( !done && dom.offsetParent!==null &&
181
- rc.bottom >= 0 && rc.right >= 0 &&
182
- rc.top <= (window.innerHeight || x4document.documentElement.clientHeight) &&
183
- rc.left <= (window.innerWidth || x4document.documentElement.clientWidth) ) {
184
-
185
- // ok, we load the image
186
- let img = <HTMLElement>dom.firstChild;
187
- img.setAttribute( 'src', src );
188
- done++;
189
- }
190
- else {
191
- // still not visible: may be next time
192
- newList.push( el );
193
- }
194
- } );
195
-
196
- Image.lazy_images_waiting = newList;
197
-
198
- // no more elements to watch...
199
- if( newList.length==0 ) {
200
- clearInterval( Image.lazy_image_timer );
201
- Image.lazy_image_timer = undefined;
202
- }
203
- }
204
- }
package/lib/src/index.ts DELETED
@@ -1,88 +0,0 @@
1
- /**
2
- * ___ ___ __
3
- * \ \_/ / / _
4
- * \ / /_| |_
5
- * / _ \____ _|
6
- * /__/ \__\ |_|
7
- *
8
- * @file index.ts
9
- * @author Etienne Cochard
10
- *
11
- * Copyright (c) 2019-2022 R-libre ingenierie
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy
14
- * of this software and associated documentation files (the "Software"), to deal
15
- * in the Software without restriction, including without limitation the rights
16
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do so,
18
- * subject to the following conditions:
19
- * The above copyright notice and this permission notice shall be included in all copies
20
- * or substantial portions of the Software.
21
- *
22
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
23
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
24
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
- **/
29
-
30
- export * from "./application"
31
- export * from "./autocomplete"
32
- export * from "./base_component"
33
- //export * from "./base64"
34
- export * from "./button"
35
- export * from "./calendar"
36
- export * from "./canvas"
37
- export * from "./cardview"
38
- export * from "./checkbox"
39
- export * from "./color"
40
- export * from "./colorpicker"
41
- export * from "./combobox"
42
- export * from "./component"
43
- export * from "./datastore"
44
- export * from "./dialog"
45
- export * from "./dom_events"
46
- export * from "./drag_manager"
47
- export * from "./drawtext"
48
- export * from "./fileupload"
49
- export * from "./form"
50
- export * from "./formatters"
51
- export * from "./gridview"
52
- export * from "./i18n"
53
- export * from "./icon"
54
- export * from "./image"
55
- export * from "./input"
56
- export * from "./label"
57
- export * from "./layout"
58
- export * from "./link"
59
- export * from "./listview"
60
- export * from "./md5"
61
- export * from "./menu"
62
- export * from "./messagebox"
63
- export * from "./panel"
64
- export * from "./popup"
65
- export * from "./property_editor"
66
- export * from "./radiobtn"
67
- export * from "./rating"
68
- export * from "./request"
69
- export * from "./router"
70
- export * from "./settings"
71
- export * from "./sidebarview"
72
- //export * from "./smartedit"
73
- export * from "./spreadsheet"
74
- export * from "./styles"
75
- export * from "./svgcomponent"
76
- export * from "./tabbar"
77
- export * from "./tabview"
78
- export * from "./textarea"
79
- export * from "./textedit"
80
- //export * from "./texthiliter"
81
- export * from "./toaster"
82
- export * from "./tools"
83
- export * from "./tooltips"
84
- export * from "./treeview"
85
- export * from "./x4events"
86
- export * from "./x4react"
87
-
88
- export * from "./version"
package/lib/src/input.ts DELETED
@@ -1,249 +0,0 @@
1
- /**
2
- * ___ ___ __
3
- * \ \/ / / _
4
- * \ / /_| |_
5
- * / \____ _|
6
- * /__/\__\ |_|
7
- *
8
- * @file input.ts
9
- * @author Etienne Cochard
10
- *
11
- * Copyright (c) 2019-2022 R-libre ingenierie
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy
14
- * of this software and associated documentation files (the "Software"), to deal
15
- * in the Software without restriction, including without limitation the rights
16
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do so,
18
- * subject to the following conditions:
19
- * The above copyright notice and this permission notice shall be included in all copies
20
- * or substantial portions of the Software.
21
- *
22
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
23
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
24
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
- **/
29
-
30
- import { Component, CProps, CEventMap, EvFocus } from './component'
31
- //import { EvChange } from './x4_events';
32
-
33
- export type EditType = 'text' | 'number' | 'email' | 'date' | 'password' | 'file' | 'checkbox' | 'radio';
34
-
35
- export interface ValueHook {
36
- get( ) : any;
37
- set( v: any ) : void;
38
- }
39
-
40
- export interface InputEventMap extends CEventMap {
41
- // change?: EvChange;
42
- // focus?: EvFocus;
43
- }
44
-
45
- export interface InputProps<P extends InputEventMap = InputEventMap> extends CProps<P> {
46
- value?: string;
47
- name?: string;
48
- type?: EditType
49
- placeHolder?: string;
50
- autoFocus?: boolean;
51
- readOnly?: boolean;
52
- tabIndex?: number | boolean;
53
- pattern?: string;
54
- uppercase?: boolean;
55
- spellcheck?: boolean;
56
- value_hook?: ValueHook;
57
- min?: number;
58
- max?: number;
59
- autosel?: boolean;
60
- }
61
-
62
-
63
- /**
64
- * base class for elements implementing an input
65
- * CARE derived classes must set this.ui.input
66
- */
67
-
68
- export class Input extends Component<InputProps,InputEventMap>
69
- {
70
- constructor( props: InputProps ) {
71
- super( props );
72
- }
73
-
74
- /** @ignore */
75
- render( props: InputProps ) {
76
-
77
- this.setTag( 'input' );
78
- this._setTabIndex( props.tabIndex );
79
-
80
- this.setAttributes( {
81
- value: props.value,
82
- type: props.type || 'text',
83
- name: props.name,
84
- placeholder: props.placeHolder,
85
- autofocus: props.autoFocus,
86
- readonly: props.readOnly,
87
- autocomplete: 'new-password', // chrome ignore 'off' but not something else than 'on'
88
- tabIndex: props.tabIndex,
89
- spellcheck: props.spellcheck===false ? 'false' : undefined,
90
- min: props.min,
91
- max: props.max,
92
- ...props.attrs
93
- });
94
-
95
- this.m_props.autosel = props.autosel ?? true;
96
-
97
- if( props.uppercase ) {
98
- this.setStyleValue( 'textTransform', 'uppercase' );
99
- }
100
-
101
- if( this.m_props.autosel ) {
102
- this.setDomEvent( "focus", ( ) => {
103
- this.selectAll( );
104
- });
105
- }
106
- }
107
-
108
- public getType( ) {
109
- return this.m_props.type;
110
- }
111
-
112
- /**
113
- * return the current editor value
114
- */
115
-
116
- public get value( ) : string {
117
-
118
- if( this.dom ) {
119
- this.m_props.value = (<HTMLInputElement>this.dom).value;
120
- }
121
-
122
- if( this.m_props.uppercase ) {
123
- let upper = this.m_props.value.toUpperCase( ); // todo: locale ?
124
- if( this.dom && upper!=this.m_props.value ) {
125
- (<HTMLInputElement>this.dom).value = upper; // update the input
126
- }
127
-
128
- this.m_props.value = upper;
129
- }
130
-
131
- return this.m_props.value;
132
- }
133
-
134
- /**
135
- * Change the editor value
136
- * @param value - new value to set
137
- */
138
-
139
- public set value( value: string ) {
140
-
141
- this.m_props.value = value;
142
-
143
- if( this.dom ) {
144
- (<HTMLInputElement>this.dom).value = value;
145
- }
146
- }
147
-
148
- public getStoreValue( ): any {
149
-
150
- if( this.m_props.value_hook ) {
151
- return this.m_props.value_hook.get( );
152
- }
153
- else {
154
- let type = this.getAttribute('type');
155
- if( type ) { type = type.toLowerCase( ); }
156
-
157
- let value,
158
- dom = (<HTMLInputElement>this.dom);
159
-
160
- if( type === "file") {
161
- value = [];
162
-
163
- let files = dom.files;
164
- for( let file = 0; file < files.length; file++ ) {
165
- value.push( files[file].name );
166
- }
167
- }
168
- else if ( type === 'checkbox' ) {
169
- if( dom.checked ) {
170
- value = 1;
171
- }
172
- else {
173
- value = 0;
174
- }
175
- }
176
- else if( type === 'radio' ) {
177
- if( dom.checked ) {
178
- value = this.value;
179
- }
180
- }
181
- else if( type === 'date' ) {
182
- debugger;
183
- }
184
- else {
185
- value = this.value;
186
- }
187
-
188
- return value;
189
- }
190
- }
191
-
192
- public setStoreValue( v: any ) {
193
-
194
- if( this.m_props.value_hook ) {
195
- return this.m_props.value_hook.set( v );
196
- }
197
- else {
198
- let type = this.getAttribute('type'),
199
- dom = (<HTMLInputElement>this.dom);
200
-
201
- if( type ) { type = type.toLowerCase( ); }
202
- if( type==='checkbox' ) {
203
- let newval = v!==null && v!=='0' && v!==0 && v!==false;
204
- if( newval!==dom.checked ) {
205
- dom.setAttribute( 'checked', ''+newval );
206
- dom.dispatchEvent( new Event( 'change' ) );
207
- }
208
- }
209
- else {
210
- this.value = v;
211
- }
212
- }
213
- }
214
-
215
- set readOnly( ro: boolean ) {
216
- this.setAttribute('readonly', ro );
217
- }
218
-
219
- /**
220
- * select all the text
221
- */
222
-
223
- public selectAll( ) {
224
- (<HTMLInputElement>this.dom).select();
225
- }
226
-
227
- /**
228
- * select a part of the text
229
- * @param start
230
- * @param length
231
- */
232
-
233
- public select( start: number, length: number = 9999 ) : void {
234
- (<HTMLInputElement>this.dom).setSelectionRange( start, start+length );
235
- }
236
-
237
- /**
238
- * get the selection as { start, length }
239
- */
240
-
241
- public getSelection( ) {
242
- let idom = (<HTMLInputElement>this.dom);
243
-
244
- return {
245
- start: idom.selectionStart,
246
- length: idom.selectionEnd - idom.selectionStart,
247
- };
248
- }
249
- }
package/lib/src/label.ts DELETED
@@ -1,128 +0,0 @@
1
- /**
2
- * ___ ___ __
3
- * \ \/ / / _
4
- * \ / /_| |_
5
- * / \____ _|
6
- * /__/\__\ |_|
7
- *
8
- * @file label.ts
9
- * @author Etienne Cochard
10
- *
11
- * Copyright (c) 2019-2022 R-libre ingenierie
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining a copy
14
- * of this software and associated documentation files (the "Software"), to deal
15
- * in the Software without restriction, including without limitation the rights
16
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
17
- * of the Software, and to permit persons to whom the Software is furnished to do so,
18
- * subject to the following conditions:
19
- * The above copyright notice and this permission notice shall be included in all copies
20
- * or substantial portions of the Software.
21
- *
22
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
23
- * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
24
- * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
25
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
- **/
29
-
30
- import { Component, CProps } from './component'
31
- import { escapeHtml, HtmlString } from './tools'
32
- import { Icon, IconID } from './icon'
33
-
34
- // ============================================================================
35
- // [LABEL]
36
- // ============================================================================
37
-
38
- export interface LabelProps extends CProps {
39
- text: string | HtmlString;
40
- icon?: IconID;
41
- align?: 'left' | 'right' | 'center';
42
- multiline?: boolean; // understand \n as newlines
43
- }
44
-
45
- /**
46
- * Standard label
47
- */
48
-
49
- export class Label extends Component<LabelProps>
50
- {
51
- /**
52
- * double constructor, from string/html or as usual
53
- */
54
-
55
- constructor( props: LabelProps );
56
- constructor( text: string | HtmlString );
57
- constructor( param: any ) {
58
-
59
- if( typeof(param)==='string' || param instanceof HtmlString ) {
60
- super( { text: param } );
61
- }
62
- else {
63
- super( param );
64
- }
65
- }
66
-
67
- /** @ignore */
68
- render( props: LabelProps ) {
69
-
70
- let text: any = this.m_props.text;
71
- if( this.m_props.multiline && !(text instanceof HtmlString) ) {
72
- text = new HtmlString( escapeHtml(text,true) );
73
- }
74
-
75
- if( !props.icon ) {
76
- this.setContent( text );
77
- }
78
- else {
79
- this.setTag( 'span' );
80
- this.addClass( '@hlayout' );
81
-
82
- this.setContent( [
83
- new Icon( { icon: props.icon } ),
84
- new Component( { content: text, ref: 'text' } )
85
- ] );
86
- }
87
-
88
- this.addClass( props.align ?? 'left' );
89
- }
90
-
91
- /**
92
- * change the displayed text
93
- * @param text - new text
94
- */
95
-
96
- public set text( txt: string | HtmlString ) {
97
-
98
- let props = this.m_props;
99
-
100
- if( props.text!==txt ) {
101
- props.text = txt;
102
-
103
- let text: any = this.m_props.text;
104
- if( this.m_props.multiline && !(text instanceof HtmlString) ) {
105
- text = new HtmlString(escapeHtml(text,true) );
106
- }
107
-
108
- if( this.dom ) {
109
-
110
- let comp: Component = this;
111
- if( this.m_props.icon ) {
112
- comp = this.itemWithRef<Component>( 'text' );
113
- }
114
-
115
- comp.setContent( text );
116
- }
117
- }
118
- }
119
-
120
- /**
121
- *
122
- */
123
-
124
- public get text( ) : string | HtmlString {
125
- return this.m_props.text;
126
- }
127
- }
128
-