lexgui 0.7.15 → 8.1.0

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 (134) hide show
  1. package/LICENSE +201 -21
  2. package/README.md +14 -5
  3. package/build/components/AlertDialog.d.ts +7 -0
  4. package/build/components/ArrayInput.d.ts +9 -0
  5. package/build/components/BaseComponent.d.ts +73 -0
  6. package/build/components/Button.d.ts +14 -0
  7. package/build/components/Calendar.d.ts +41 -0
  8. package/build/components/CalendarRange.d.ts +16 -0
  9. package/build/components/CanvasCurve.d.ts +10 -0
  10. package/build/components/CanvasDial.d.ts +11 -0
  11. package/build/components/CanvasMap2D.d.ts +61 -0
  12. package/build/components/Card.d.ts +8 -0
  13. package/build/components/Checkbox.d.ts +8 -0
  14. package/build/components/Color.d.ts +20 -0
  15. package/build/components/ColorInput.d.ts +13 -0
  16. package/build/components/ColorPicker.d.ts +29 -0
  17. package/build/components/ComboButtons.d.ts +8 -0
  18. package/build/components/ContextMenu.d.ts +16 -0
  19. package/build/components/Counter.d.ts +9 -0
  20. package/build/components/Curve.d.ts +10 -0
  21. package/build/components/DatePicker.d.ts +13 -0
  22. package/build/components/Dial.d.ts +10 -0
  23. package/build/components/Dialog.d.ts +20 -0
  24. package/build/components/DropdownMenu.d.ts +32 -0
  25. package/build/components/FileInput.d.ts +8 -0
  26. package/build/components/Footer.d.ts +14 -0
  27. package/build/components/Form.d.ts +8 -0
  28. package/build/components/Layers.d.ts +9 -0
  29. package/build/components/List.d.ts +9 -0
  30. package/build/components/Map2D.d.ts +12 -0
  31. package/build/components/Menubar.d.ts +59 -0
  32. package/build/components/NodeTree.d.ts +26 -0
  33. package/build/components/NumberInput.d.ts +9 -0
  34. package/build/components/OTPInput.d.ts +8 -0
  35. package/build/components/Pad.d.ts +8 -0
  36. package/build/components/Pagination.d.ts +26 -0
  37. package/build/components/PocketDialog.d.ts +11 -0
  38. package/build/components/Popover.d.ts +20 -0
  39. package/build/components/Progress.d.ts +8 -0
  40. package/build/components/RadioGroup.d.ts +8 -0
  41. package/build/components/RangeInput.d.ts +11 -0
  42. package/build/components/Rate.d.ts +8 -0
  43. package/build/components/Select.d.ts +10 -0
  44. package/build/components/Sheet.d.ts +10 -0
  45. package/build/components/Sidebar.d.ts +84 -0
  46. package/build/components/SizeInput.d.ts +8 -0
  47. package/build/components/Skeleton.d.ts +5 -0
  48. package/build/components/Spinner.d.ts +9 -0
  49. package/build/components/TabSections.d.ts +11 -0
  50. package/build/components/Table.d.ts +34 -0
  51. package/build/components/Tabs.d.ts +20 -0
  52. package/build/components/Tags.d.ts +9 -0
  53. package/build/components/TextArea.d.ts +8 -0
  54. package/build/components/TextInput.d.ts +11 -0
  55. package/build/components/Title.d.ts +8 -0
  56. package/build/components/Toggle.d.ts +8 -0
  57. package/build/components/Tour.d.ts +36 -0
  58. package/build/components/Vector.d.ts +9 -0
  59. package/build/core/Area.d.ts +143 -0
  60. package/build/core/Branch.d.ts +19 -0
  61. package/build/core/Core.d.ts +1 -0
  62. package/build/core/Event.d.ts +26 -0
  63. package/build/core/Icons.d.ts +4 -0
  64. package/build/core/Namespace.d.ts +2 -0
  65. package/build/core/Namespace.js +34 -0
  66. package/build/core/Namespace.js.map +1 -0
  67. package/build/core/Panel.d.ts +538 -0
  68. package/build/core/Utils.d.ts +1 -0
  69. package/build/core/Vec2.d.ts +21 -0
  70. package/build/extensions/AssetView.d.ts +136 -0
  71. package/build/extensions/AssetView.js +1367 -0
  72. package/build/extensions/AssetView.js.map +1 -0
  73. package/build/extensions/Audio.d.ts +9 -0
  74. package/build/extensions/Audio.js +163 -0
  75. package/build/extensions/Audio.js.map +1 -0
  76. package/build/extensions/CodeEditor.d.ts +350 -0
  77. package/build/extensions/CodeEditor.js +5022 -0
  78. package/build/extensions/CodeEditor.js.map +1 -0
  79. package/build/extensions/DocMaker.d.ts +27 -0
  80. package/build/extensions/DocMaker.js +327 -0
  81. package/build/extensions/DocMaker.js.map +1 -0
  82. package/build/extensions/GraphEditor.d.ts +276 -0
  83. package/build/extensions/GraphEditor.js +2770 -0
  84. package/build/extensions/GraphEditor.js.map +1 -0
  85. package/build/extensions/ImUi.d.ts +46 -0
  86. package/build/extensions/ImUi.js +227 -0
  87. package/build/extensions/ImUi.js.map +1 -0
  88. package/build/extensions/Timeline.d.ts +670 -0
  89. package/build/extensions/Timeline.js +3955 -0
  90. package/build/extensions/Timeline.js.map +1 -0
  91. package/build/extensions/VideoEditor.d.ts +128 -0
  92. package/build/extensions/VideoEditor.js +898 -0
  93. package/build/extensions/VideoEditor.js.map +1 -0
  94. package/build/extensions/index.d.ts +8 -0
  95. package/build/extensions/index.js +10 -0
  96. package/build/extensions/index.js.map +1 -0
  97. package/build/index.all.d.ts +2 -0
  98. package/build/index.css.d.ts +4 -0
  99. package/build/index.d.ts +56 -0
  100. package/build/lexgui.all.js +28498 -0
  101. package/build/lexgui.all.js.map +1 -0
  102. package/build/lexgui.all.min.js +1 -0
  103. package/build/lexgui.all.module.js +28422 -0
  104. package/build/lexgui.all.module.js.map +1 -0
  105. package/build/lexgui.all.module.min.js +1 -0
  106. package/build/lexgui.css +939 -346
  107. package/build/lexgui.js +13406 -17286
  108. package/build/lexgui.js.map +1 -0
  109. package/build/lexgui.min.css +3 -10
  110. package/build/lexgui.min.js +1 -1
  111. package/build/lexgui.module.js +12762 -16698
  112. package/build/lexgui.module.js.map +1 -0
  113. package/build/lexgui.module.min.js +1 -1
  114. package/changelog.md +170 -74
  115. package/demo.js +162 -48
  116. package/examples/all-components.html +45 -14
  117. package/examples/asset-view.html +110 -47
  118. package/examples/code-editor.html +5 -5
  119. package/examples/dialogs.html +3 -3
  120. package/examples/editor.html +27 -13
  121. package/examples/index.html +19 -14
  122. package/examples/node-graph.html +2 -2
  123. package/examples/previews/video-editor.png +0 -0
  124. package/examples/timeline.html +1 -1
  125. package/examples/video-editor.html +2 -2
  126. package/package.json +25 -9
  127. package/build/extensions/audio.js +0 -212
  128. package/build/extensions/codeeditor.js +0 -6319
  129. package/build/extensions/docmaker.js +0 -432
  130. package/build/extensions/imui.js +0 -325
  131. package/build/extensions/nodegraph.js +0 -3696
  132. package/build/extensions/timeline.js +0 -4636
  133. package/build/extensions/videoeditor.js +0 -953
  134. package/build/lexgui-docs.css +0 -352
@@ -0,0 +1,227 @@
1
+ // This is a generated file. Do not edit.
2
+ import { LX } from '../core/Namespace.js';
3
+
4
+ // ImUI.ts @jxarco
5
+ if (!LX) {
6
+ throw ('Missing LX namespace!');
7
+ }
8
+ LX.extensions.push('ImUI');
9
+ const vec2 = LX.vec2;
10
+ /**
11
+ * @class ImUI
12
+ */
13
+ class ImUI {
14
+ root;
15
+ canvas;
16
+ // Components
17
+ components = {};
18
+ // Mouse state
19
+ mouseDown = false;
20
+ mousePosition = new vec2();
21
+ usePointerCursor = false;
22
+ eventClick = undefined;
23
+ constructor(canvas, options = {}) {
24
+ console.assert(canvas !== undefined);
25
+ // To capture key events
26
+ canvas.tabIndex = -1;
27
+ canvas.addEventListener('keydown', this._processKey.bind(this), true);
28
+ canvas.addEventListener('mousedown', this._processMouse.bind(this));
29
+ canvas.addEventListener('mouseup', this._processMouse.bind(this));
30
+ canvas.addEventListener('mousemove', this._processMouse.bind(this));
31
+ canvas.addEventListener('click', this._processMouse.bind(this));
32
+ // this.font = new FontFace("Ubuntu", "url(../data/Ubuntu-Bold.ttf)");
33
+ // this.font.load().then(
34
+ // ( font ) => {
35
+ // document.fonts.add( font );
36
+ // if( options.onready ) options.onready();
37
+ // },
38
+ // (err) => {
39
+ // console.error(err);
40
+ // },
41
+ // );
42
+ this.root = this.canvas = canvas;
43
+ }
44
+ _processKey(e) {
45
+ const detail = e.detail;
46
+ const key = e.key ?? detail.key;
47
+ console.log(key);
48
+ }
49
+ _processMouse(e) {
50
+ if (e.type == 'mousedown') {
51
+ this.mouseDown = true;
52
+ }
53
+ else if (e.type == 'mouseup') {
54
+ this._processClick(e);
55
+ this.mouseDown = false;
56
+ }
57
+ else if (e.type == 'mousemove') {
58
+ this.mousePosition.set(e.clientX, e.clientY);
59
+ }
60
+ }
61
+ _processClick(e) {
62
+ this.eventClick = e;
63
+ }
64
+ /**
65
+ * @method Button
66
+ * @param {String} text
67
+ * @param {Number} x
68
+ * @param {Number} y
69
+ */
70
+ Button(text, x, y, callback) {
71
+ const ctx = this.canvas.getContext('2d');
72
+ // Element properties
73
+ let fontSize = 16;
74
+ ctx.font = fontSize + 'px Arial';
75
+ let padding = new LX.vec2(12, 8);
76
+ let position = new LX.vec2(x, y);
77
+ const metrics = ctx.measureText(text);
78
+ let size = new LX.vec2(metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);
79
+ // Get mouse state
80
+ const hovered = this.mousePosition.x >= position.x
81
+ && this.mousePosition.x <= (position.x + size.x + padding.x * 2.0)
82
+ && this.mousePosition.y >= position.y && this.mousePosition.y <= (position.y + size.y + padding.y * 2.0);
83
+ const active = hovered && this.mouseDown;
84
+ // Draw button
85
+ ctx.beginPath();
86
+ ctx.fillStyle = active ? '#666' : (hovered ? '#444' : '#222');
87
+ ctx.roundRect(position.x, position.y, size.x + padding.x * 2.0, size.y + padding.y * 2.0, [8, 8, 8, 8]);
88
+ ctx.fill();
89
+ // Draw text
90
+ ctx.fillStyle = hovered ? '#fff' : '#ddd';
91
+ ctx.fillText(text, position.x + padding.x, position.y + metrics.actualBoundingBoxAscent + padding.y);
92
+ this.usePointerCursor = this.usePointerCursor || hovered;
93
+ if (this.eventClick) {
94
+ if (callback)
95
+ callback();
96
+ return true;
97
+ }
98
+ return false;
99
+ }
100
+ /**
101
+ * @method Slider
102
+ * @param {String} text
103
+ * @param {Number} x
104
+ * @param {Number} y
105
+ * @param {Number} value
106
+ */
107
+ Slider(text, x, y, value = 0, callback) {
108
+ const ctx = this.canvas.getContext('2d');
109
+ // Store slider value
110
+ if (!this.components[text]) {
111
+ this.components[text] = { value: value };
112
+ }
113
+ else {
114
+ value = this.components[text].value;
115
+ }
116
+ // Element properties
117
+ let fontSize = 16;
118
+ ctx.font = fontSize + 'px Arial';
119
+ let padding = new LX.vec2(12, 8);
120
+ let position = new LX.vec2(x, y);
121
+ const metrics = ctx.measureText(text);
122
+ let size = new LX.vec2(metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);
123
+ let fullSize = size.add(padding.mul(2.0));
124
+ // Get mouse state
125
+ const hovered = this.mousePosition.x >= position.x && this.mousePosition.x <= (position.x + fullSize.x)
126
+ && this.mousePosition.y >= position.y && this.mousePosition.y <= (position.y + fullSize.y);
127
+ const active = hovered && this.mouseDown;
128
+ // Draw box
129
+ ctx.beginPath();
130
+ ctx.fillStyle = hovered ? '#444' : '#222';
131
+ ctx.roundRect(position.x, position.y, fullSize.x, fullSize.y, [8, 8, 8, 8]);
132
+ ctx.fill();
133
+ // Draw value
134
+ const min = position.x;
135
+ const max = position.x + fullSize.x;
136
+ if (active) {
137
+ value = LX.clamp((this.mousePosition.x - min) / (max - min), 0.0, 1.0);
138
+ this.components[text].value = value;
139
+ }
140
+ let valueSize = new LX.vec2(fullSize.x * value, size.y);
141
+ ctx.beginPath();
142
+ ctx.fillStyle = hovered ? '#6074e7' : '#3e57e4';
143
+ if (valueSize.x > (fullSize.x - 8)) { // 8: radius
144
+ ctx.roundRect(position.x, position.y, valueSize.x, valueSize.y + padding.y * 2.0, [8, 8, 8, 8]);
145
+ ctx.fill();
146
+ }
147
+ else {
148
+ ctx.fillRect(position.x, position.y, valueSize.x, valueSize.y + padding.y * 2.0);
149
+ }
150
+ // Draw text
151
+ ctx.fillStyle = hovered ? '#fff' : '#ddd';
152
+ ctx.fillText(text, position.x + padding.x, position.y + metrics.actualBoundingBoxAscent + padding.y);
153
+ this.usePointerCursor = this.usePointerCursor || hovered;
154
+ if (active) {
155
+ if (callback)
156
+ callback(value);
157
+ }
158
+ }
159
+ /**
160
+ * @method Checkbox
161
+ * @param {String} text
162
+ * @param {Number} x
163
+ * @param {Number} y
164
+ * @param {Number} value
165
+ */
166
+ Checkbox(text, x, y, value = false, callback) {
167
+ const ctx = this.canvas.getContext('2d');
168
+ // Store slider value
169
+ if (!this.components[text]) {
170
+ this.components[text] = { value: value };
171
+ }
172
+ else {
173
+ value = this.components[text].value;
174
+ }
175
+ // Element properties
176
+ let fontSize = 16;
177
+ ctx.font = fontSize + 'px Arial';
178
+ let padding = new LX.vec2(12, 8);
179
+ let position = new LX.vec2(x, y);
180
+ const metrics = ctx.measureText(text);
181
+ let size = new LX.vec2(metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);
182
+ let boxMargin = 12;
183
+ let fullSize = new LX.vec2(boxMargin * 2.0, 0);
184
+ fullSize.add(size, fullSize);
185
+ // Get mouse state
186
+ const boxStartX = position.x + size.x + padding.x + boxMargin;
187
+ const boxStartY = position.y + padding.y;
188
+ const hovered = this.mousePosition.x >= boxStartX && this.mousePosition.x <= (boxStartX + size.y)
189
+ && this.mousePosition.y >= boxStartY && this.mousePosition.y <= (boxStartY + size.y);
190
+ const active = hovered && this.mouseDown;
191
+ const pressed = hovered && this.eventClick;
192
+ // Draw button
193
+ ctx.fillStyle = active ? '#666' : (hovered ? '#444' : '#222');
194
+ ctx.fillRect(position.x, position.y, fullSize.x + padding.x * 2.0, fullSize.y + padding.y * 2.0);
195
+ // Draw checkbox
196
+ if (pressed) {
197
+ value = !value;
198
+ this.components[text].value = value;
199
+ if (callback) {
200
+ callback(value);
201
+ }
202
+ }
203
+ ctx.fillStyle = value
204
+ ? (active ? '#ddd' : (hovered ? '#6074e7' : '#3e57e4'))
205
+ : (active ? '#bbb' : (hovered ? '#777' : '#888'));
206
+ ctx.fillRect(position.x + size.x + padding.x + boxMargin, position.y + padding.y, size.y, size.y);
207
+ // Draw text
208
+ ctx.fillStyle = hovered ? '#fff' : '#ddd';
209
+ ctx.fillText(text, position.x + padding.x, position.y + metrics.actualBoundingBoxAscent + padding.y);
210
+ this.usePointerCursor = this.usePointerCursor || hovered;
211
+ }
212
+ /**
213
+ * @method endFrame
214
+ * @description Clears the information stored during the last frame
215
+ */
216
+ endFrame() {
217
+ delete this.eventClick;
218
+ // Pointer cursor on hover
219
+ document.body.style.cursor = this.usePointerCursor ? 'pointer' : 'default';
220
+ // Clear info
221
+ this.usePointerCursor = false;
222
+ }
223
+ }
224
+ LX.ImUI = ImUI;
225
+
226
+ export { ImUI };
227
+ //# sourceMappingURL=ImUi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImUi.js","sources":["../../src/extensions/ImUi.ts"],"sourcesContent":["// ImUI.ts @jxarco\r\n\r\nimport { LX } from '../core/Namespace';\r\n\r\nif ( !LX )\r\n{\r\n throw ( 'Missing LX namespace!' );\r\n}\r\n\r\nLX.extensions.push( 'ImUI' );\r\n\r\nconst vec2 = LX.vec2;\r\n\r\n/**\r\n * @class ImUI\r\n */\r\n\r\nexport class ImUI\r\n{\r\n root: any;\r\n canvas: any;\r\n\r\n // Components\r\n components: any = {};\r\n\r\n // Mouse state\r\n mouseDown: boolean = false;\r\n mousePosition: typeof vec2 = new vec2();\r\n usePointerCursor: boolean = false;\r\n eventClick: MouseEvent | undefined = undefined;\r\n\r\n constructor( canvas: HTMLCanvasElement, options: any = {} )\r\n {\r\n console.assert( canvas !== undefined );\r\n\r\n // To capture key events\r\n canvas.tabIndex = -1;\r\n\r\n canvas.addEventListener( 'keydown', this._processKey.bind( this ), true );\r\n canvas.addEventListener( 'mousedown', this._processMouse.bind( this ) );\r\n canvas.addEventListener( 'mouseup', this._processMouse.bind( this ) );\r\n canvas.addEventListener( 'mousemove', this._processMouse.bind( this ) );\r\n canvas.addEventListener( 'click', this._processMouse.bind( this ) );\r\n\r\n // this.font = new FontFace(\"Ubuntu\", \"url(../data/Ubuntu-Bold.ttf)\");\r\n // this.font.load().then(\r\n // ( font ) => {\r\n // document.fonts.add( font );\r\n // if( options.onready ) options.onready();\r\n // },\r\n // (err) => {\r\n // console.error(err);\r\n // },\r\n // );\r\n\r\n this.root = this.canvas = canvas;\r\n }\r\n\r\n _processKey( e: KeyboardEvent )\r\n {\r\n const detail: any = e.detail;\r\n const key = e.key ?? detail.key;\r\n console.log( key );\r\n }\r\n\r\n _processMouse( e: MouseEvent )\r\n {\r\n if ( e.type == 'mousedown' )\r\n {\r\n this.mouseDown = true;\r\n }\r\n else if ( e.type == 'mouseup' )\r\n {\r\n this._processClick( e );\r\n this.mouseDown = false;\r\n }\r\n else if ( e.type == 'mousemove' )\r\n {\r\n this.mousePosition.set( e.clientX, e.clientY );\r\n }\r\n }\r\n\r\n _processClick( e: MouseEvent )\r\n {\r\n this.eventClick = e;\r\n }\r\n\r\n /**\r\n * @method Button\r\n * @param {String} text\r\n * @param {Number} x\r\n * @param {Number} y\r\n */\r\n\r\n Button( text: string, x: number, y: number, callback: any )\r\n {\r\n const ctx = this.canvas.getContext( '2d' );\r\n\r\n // Element properties\r\n\r\n let fontSize = 16;\r\n ctx.font = fontSize + 'px Arial';\r\n\r\n let padding = new LX.vec2( 12, 8 );\r\n let position = new LX.vec2( x, y );\r\n\r\n const metrics = ctx.measureText( text );\r\n let size = new LX.vec2( metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent );\r\n\r\n // Get mouse state\r\n\r\n const hovered = this.mousePosition.x >= position.x\r\n && this.mousePosition.x <= ( position.x + size.x + padding.x * 2.0 )\r\n && this.mousePosition.y >= position.y && this.mousePosition.y <= ( position.y + size.y + padding.y * 2.0 );\r\n\r\n const active = hovered && this.mouseDown;\r\n\r\n // Draw button\r\n\r\n ctx.beginPath();\r\n ctx.fillStyle = active ? '#666' : ( hovered ? '#444' : '#222' );\r\n ctx.roundRect( position.x, position.y, size.x + padding.x * 2.0, size.y + padding.y * 2.0, [ 8, 8, 8, 8 ] );\r\n ctx.fill();\r\n\r\n // Draw text\r\n\r\n ctx.fillStyle = hovered ? '#fff' : '#ddd';\r\n ctx.fillText( text, position.x + padding.x, position.y + metrics.actualBoundingBoxAscent + padding.y );\r\n\r\n this.usePointerCursor = this.usePointerCursor || hovered;\r\n\r\n if ( this.eventClick )\r\n {\r\n if ( callback ) callback();\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * @method Slider\r\n * @param {String} text\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @param {Number} value\r\n */\r\n\r\n Slider( text: string, x: number, y: number, value: number = 0, callback: any )\r\n {\r\n const ctx = this.canvas.getContext( '2d' );\r\n\r\n // Store slider value\r\n\r\n if ( !this.components[text] )\r\n {\r\n this.components[text] = { value: value };\r\n }\r\n else\r\n {\r\n value = this.components[text].value;\r\n }\r\n\r\n // Element properties\r\n\r\n let fontSize = 16;\r\n ctx.font = fontSize + 'px Arial';\r\n\r\n let padding = new LX.vec2( 12, 8 );\r\n let position = new LX.vec2( x, y );\r\n\r\n const metrics = ctx.measureText( text );\r\n let size = new LX.vec2( metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent );\r\n let fullSize = size.add( padding.mul( 2.0 ) );\r\n\r\n // Get mouse state\r\n\r\n const hovered = this.mousePosition.x >= position.x && this.mousePosition.x <= ( position.x + fullSize.x )\r\n && this.mousePosition.y >= position.y && this.mousePosition.y <= ( position.y + fullSize.y );\r\n\r\n const active = hovered && this.mouseDown;\r\n\r\n // Draw box\r\n\r\n ctx.beginPath();\r\n ctx.fillStyle = hovered ? '#444' : '#222';\r\n ctx.roundRect( position.x, position.y, fullSize.x, fullSize.y, [ 8, 8, 8, 8 ] );\r\n ctx.fill();\r\n\r\n // Draw value\r\n\r\n const min = position.x;\r\n const max = position.x + fullSize.x;\r\n\r\n if ( active )\r\n {\r\n value = LX.clamp( ( this.mousePosition.x - min ) / ( max - min ), 0.0, 1.0 );\r\n this.components[text].value = value;\r\n }\r\n\r\n let valueSize = new LX.vec2( fullSize.x * value, size.y );\r\n\r\n ctx.beginPath();\r\n ctx.fillStyle = hovered ? '#6074e7' : '#3e57e4';\r\n if ( valueSize.x > ( fullSize.x - 8 ) )\r\n { // 8: radius\r\n ctx.roundRect( position.x, position.y, valueSize.x, valueSize.y + padding.y * 2.0, [ 8, 8, 8, 8 ] );\r\n ctx.fill();\r\n }\r\n else\r\n {\r\n ctx.fillRect( position.x, position.y, valueSize.x, valueSize.y + padding.y * 2.0 );\r\n }\r\n\r\n // Draw text\r\n\r\n ctx.fillStyle = hovered ? '#fff' : '#ddd';\r\n ctx.fillText( text, position.x + padding.x, position.y + metrics.actualBoundingBoxAscent + padding.y );\r\n\r\n this.usePointerCursor = this.usePointerCursor || hovered;\r\n\r\n if ( active )\r\n {\r\n if ( callback ) callback( value );\r\n }\r\n }\r\n\r\n /**\r\n * @method Checkbox\r\n * @param {String} text\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @param {Number} value\r\n */\r\n\r\n Checkbox( text: string, x: number, y: number, value: boolean = false, callback: any )\r\n {\r\n const ctx = this.canvas.getContext( '2d' );\r\n\r\n // Store slider value\r\n\r\n if ( !this.components[text] )\r\n {\r\n this.components[text] = { value: value };\r\n }\r\n else\r\n {\r\n value = this.components[text].value;\r\n }\r\n\r\n // Element properties\r\n\r\n let fontSize = 16;\r\n ctx.font = fontSize + 'px Arial';\r\n\r\n let padding = new LX.vec2( 12, 8 );\r\n let position = new LX.vec2( x, y );\r\n\r\n const metrics = ctx.measureText( text );\r\n let size = new LX.vec2( metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent );\r\n\r\n let boxMargin = 12;\r\n let fullSize = new LX.vec2( boxMargin * 2.0, 0 );\r\n fullSize.add( size, fullSize );\r\n\r\n // Get mouse state\r\n\r\n const boxStartX = position.x + size.x + padding.x + boxMargin;\r\n const boxStartY = position.y + padding.y;\r\n const hovered = this.mousePosition.x >= boxStartX && this.mousePosition.x <= ( boxStartX + size.y )\r\n && this.mousePosition.y >= boxStartY && this.mousePosition.y <= ( boxStartY + size.y );\r\n\r\n const active = hovered && this.mouseDown;\r\n const pressed = hovered && this.eventClick;\r\n\r\n // Draw button\r\n\r\n ctx.fillStyle = active ? '#666' : ( hovered ? '#444' : '#222' );\r\n ctx.fillRect( position.x, position.y, fullSize.x + padding.x * 2.0, fullSize.y + padding.y * 2.0 );\r\n\r\n // Draw checkbox\r\n\r\n if ( pressed )\r\n {\r\n value = !value;\r\n this.components[text].value = value;\r\n if ( callback )\r\n {\r\n callback( value );\r\n }\r\n }\r\n\r\n ctx.fillStyle = value\r\n ? ( active ? '#ddd' : ( hovered ? '#6074e7' : '#3e57e4' ) )\r\n : ( active ? '#bbb' : ( hovered ? '#777' : '#888' ) );\r\n ctx.fillRect( position.x + size.x + padding.x + boxMargin, position.y + padding.y, size.y, size.y );\r\n\r\n // Draw text\r\n\r\n ctx.fillStyle = hovered ? '#fff' : '#ddd';\r\n ctx.fillText( text, position.x + padding.x, position.y + metrics.actualBoundingBoxAscent + padding.y );\r\n\r\n this.usePointerCursor = this.usePointerCursor || hovered;\r\n }\r\n\r\n /**\r\n * @method endFrame\r\n * @description Clears the information stored during the last frame\r\n */\r\n\r\n endFrame()\r\n {\r\n delete this.eventClick;\r\n\r\n // Pointer cursor on hover\r\n document.body.style.cursor = this.usePointerCursor ? 'pointer' : 'default';\r\n\r\n // Clear info\r\n this.usePointerCursor = false;\r\n }\r\n}\r\n\r\nLX.ImUI = ImUI;\r\n"],"names":[],"mappings":"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"}