uiconfig-blueprint 0.1.0-dev.13 → 0.1.0-dev.15

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 (167) hide show
  1. package/dist/ConfigObject.d.ts +3 -1
  2. package/dist/{allPaths-Dbwyd6G0.js → allPaths-vhUhWron.js} +5 -5
  3. package/dist/{allPaths-Dbwyd6G0.js.map → allPaths-vhUhWron.js.map} +1 -1
  4. package/dist/{allPathsLoader-B9DtnPQs.js → allPathsLoader-BeDEFia4.js} +4 -4
  5. package/dist/{allPathsLoader-B9DtnPQs.js.map → allPathsLoader-BeDEFia4.js.map} +1 -1
  6. package/dist/bpComponents/BPColorInputComponent.d.ts +1 -0
  7. package/dist/bpComponents/BPComponent.d.ts +2 -0
  8. package/dist/bpComponents/BPContainerComponent.d.ts +10 -2
  9. package/dist/bpComponents/BPDropdownInputComponent.d.ts +1 -0
  10. package/dist/bpComponents/BPFileComponent.d.ts +12 -10
  11. package/dist/bpComponents/BPFolderComponent.d.ts +13 -4
  12. package/dist/bpComponents/BPPanelComponent.d.ts +3 -3
  13. package/dist/bpComponents/BPTextInputComponent.d.ts +4 -0
  14. package/dist/bpComponents/BPValueComponent.d.ts +2 -2
  15. package/dist/bpComponents/BPVectorInputComponent.d.ts +11 -5
  16. package/dist/bpComponents/InputGroup2.d.ts +25 -0
  17. package/dist/components/DialogContext.d.ts +10 -3
  18. package/dist/components/DraggableIcon.d.ts +4 -3
  19. package/dist/components/FileComponent.d.ts +13 -6
  20. package/dist/components/FormGroupComponent.d.ts +3 -2
  21. package/dist/components/InspectorStackComponent.d.ts +11 -2
  22. package/dist/index-BaIbKicL.js +695 -0
  23. package/dist/index-BaIbKicL.js.map +1 -0
  24. package/dist/index-Bh4sHBxX.js +695 -0
  25. package/dist/index-Bh4sHBxX.js.map +1 -0
  26. package/dist/index-C8ABKThN.js +13501 -0
  27. package/dist/index-C8ABKThN.js.map +1 -0
  28. package/dist/index.js +28 -41
  29. package/dist/index.js.map +1 -1
  30. package/dist/index.mjs +2 -2
  31. package/dist/lib.d.ts +2 -3
  32. package/dist/{splitPathsBySizeLoader-Dii-Xb62.js → splitPathsBySizeLoader-CYAuGCeX.js} +5 -5
  33. package/dist/{splitPathsBySizeLoader-Dii-Xb62.js.map → splitPathsBySizeLoader-CYAuGCeX.js.map} +1 -1
  34. package/dist/utils/pointerLock.d.ts +44 -0
  35. package/docs/classes/UI.html +3 -3
  36. package/docs/classes/UiConfigRendererBlueprint.html +3 -3
  37. package/lib/css/renderer.css +35 -103
  38. package/lib/css/renderer.css.map +1 -1
  39. package/lib/esm/ConfigObject.d.ts +3 -1
  40. package/lib/esm/ConfigObject.js +5 -4
  41. package/lib/esm/ConfigObject.js.map +1 -1
  42. package/lib/esm/UiConfigRendererBlueprint.js +2 -1
  43. package/lib/esm/UiConfigRendererBlueprint.js.map +1 -1
  44. package/lib/esm/bpComponents/BPButtonComponent.js +1 -1
  45. package/lib/esm/bpComponents/BPButtonComponent.js.map +1 -1
  46. package/lib/esm/bpComponents/BPColorInputComponent.d.ts +1 -0
  47. package/lib/esm/bpComponents/BPColorInputComponent.js +17 -4
  48. package/lib/esm/bpComponents/BPColorInputComponent.js.map +1 -1
  49. package/lib/esm/bpComponents/BPComponent.d.ts +2 -0
  50. package/lib/esm/bpComponents/BPComponent.js +4 -4
  51. package/lib/esm/bpComponents/BPComponent.js.map +1 -1
  52. package/lib/esm/bpComponents/BPContainerComponent.d.ts +10 -2
  53. package/lib/esm/bpComponents/BPContainerComponent.js +4 -1
  54. package/lib/esm/bpComponents/BPContainerComponent.js.map +1 -1
  55. package/lib/esm/bpComponents/BPDropdownInputComponent.d.ts +1 -0
  56. package/lib/esm/bpComponents/BPDropdownInputComponent.js +5 -4
  57. package/lib/esm/bpComponents/BPDropdownInputComponent.js.map +1 -1
  58. package/lib/esm/bpComponents/BPFileComponent.d.ts +12 -10
  59. package/lib/esm/bpComponents/BPFileComponent.js +10 -8
  60. package/lib/esm/bpComponents/BPFileComponent.js.map +1 -1
  61. package/lib/esm/bpComponents/BPFolderComponent.d.ts +13 -4
  62. package/lib/esm/bpComponents/BPFolderComponent.js +58 -13
  63. package/lib/esm/bpComponents/BPFolderComponent.js.map +1 -1
  64. package/lib/esm/bpComponents/BPInputComponent.js +1 -1
  65. package/lib/esm/bpComponents/BPInputComponent.js.map +1 -1
  66. package/lib/esm/bpComponents/BPPanelComponent.d.ts +3 -3
  67. package/lib/esm/bpComponents/BPPanelComponent.js +1 -1
  68. package/lib/esm/bpComponents/BPPanelComponent.js.map +1 -1
  69. package/lib/esm/bpComponents/BPTextInputComponent.d.ts +4 -0
  70. package/lib/esm/bpComponents/BPTextInputComponent.js +34 -3
  71. package/lib/esm/bpComponents/BPTextInputComponent.js.map +1 -1
  72. package/lib/esm/bpComponents/BPTreeComponent.d.ts +4 -4
  73. package/lib/esm/bpComponents/BPTreeComponent.js +2 -2
  74. package/lib/esm/bpComponents/BPTreeComponent.js.map +1 -1
  75. package/lib/esm/bpComponents/BPValueComponent.d.ts +2 -2
  76. package/lib/esm/bpComponents/BPValueComponent.js +5 -4
  77. package/lib/esm/bpComponents/BPValueComponent.js.map +1 -1
  78. package/lib/esm/bpComponents/BPVectorInputComponent.d.ts +11 -5
  79. package/lib/esm/bpComponents/BPVectorInputComponent.js +47 -6
  80. package/lib/esm/bpComponents/BPVectorInputComponent.js.map +1 -1
  81. package/lib/esm/bpComponents/InputGroup2.d.ts +25 -0
  82. package/lib/esm/bpComponents/InputGroup2.js +93 -0
  83. package/lib/esm/bpComponents/InputGroup2.js.map +1 -0
  84. package/lib/esm/components/ConfigurationPanelComponent.js +1 -1
  85. package/lib/esm/components/ConfigurationPanelComponent.js.map +1 -1
  86. package/lib/esm/components/DialogContext.d.ts +10 -3
  87. package/lib/esm/components/DialogContext.js +14 -13
  88. package/lib/esm/components/DialogContext.js.map +1 -1
  89. package/lib/esm/components/DraggableIcon.d.ts +4 -3
  90. package/lib/esm/components/DraggableIcon.js +41 -39
  91. package/lib/esm/components/DraggableIcon.js.map +1 -1
  92. package/lib/esm/components/ExtendedNumericInput.js +1 -1
  93. package/lib/esm/components/ExtendedNumericInput.js.map +1 -1
  94. package/lib/esm/components/FileComponent.d.ts +13 -6
  95. package/lib/esm/components/FileComponent.js +15 -6
  96. package/lib/esm/components/FileComponent.js.map +1 -1
  97. package/lib/esm/components/FormGroupComponent.d.ts +3 -2
  98. package/lib/esm/components/FormGroupComponent.js +1 -6
  99. package/lib/esm/components/FormGroupComponent.js.map +1 -1
  100. package/lib/esm/components/InspectorStackComponent.d.ts +11 -2
  101. package/lib/esm/components/InspectorStackComponent.js +14 -4
  102. package/lib/esm/components/InspectorStackComponent.js.map +1 -1
  103. package/lib/esm/components/NumericInput.js +3 -2
  104. package/lib/esm/components/NumericInput.js.map +1 -1
  105. package/lib/esm/components/TreeNode2.d.ts +1 -1
  106. package/lib/esm/components/TreeNode2.js +4 -2
  107. package/lib/esm/components/TreeNode2.js.map +1 -1
  108. package/lib/esm/components/treeTypes.d.ts +2 -1
  109. package/lib/esm/lib.d.ts +2 -3
  110. package/lib/esm/lib.js +2 -3
  111. package/lib/esm/lib.js.map +1 -1
  112. package/lib/esm/renderer.css.js +1 -1
  113. package/lib/esm/utils/pointerLock.d.ts +44 -0
  114. package/lib/esm/utils/pointerLock.js +215 -0
  115. package/lib/esm/utils/pointerLock.js.map +1 -0
  116. package/lib/esm/utils.js +6 -1
  117. package/lib/esm/utils.js.map +1 -1
  118. package/package.json +10 -12
  119. package/src/ConfigObject.tsx +11 -5
  120. package/src/UiConfigRendererBlueprint.tsx +1 -1
  121. package/src/bpComponents/BPButtonComponent.tsx +1 -1
  122. package/src/bpComponents/BPColorInputComponent.tsx +13 -4
  123. package/src/bpComponents/BPComponent.tsx +4 -3
  124. package/src/bpComponents/BPContainerComponent.tsx +20 -3
  125. package/src/bpComponents/BPDropdownInputComponent.tsx +6 -4
  126. package/src/bpComponents/BPFileComponent.tsx +29 -20
  127. package/src/bpComponents/BPFolderComponent.scss +11 -6
  128. package/src/bpComponents/BPFolderComponent.tsx +122 -24
  129. package/src/bpComponents/BPInputComponent.tsx +1 -0
  130. package/src/bpComponents/BPPanelComponent.tsx +4 -4
  131. package/src/bpComponents/BPTextInputComponent.tsx +38 -5
  132. package/src/bpComponents/BPValueComponent.tsx +4 -4
  133. package/src/bpComponents/BPVectorInputComponent.tsx +80 -10
  134. package/src/bpComponents/InputGroup2.tsx +175 -0
  135. package/src/bpComponents/index.scss +0 -1
  136. package/src/components/ConfigurationPanelComponent.tsx +2 -2
  137. package/src/components/DialogContext.tsx +20 -12
  138. package/src/components/DraggableIcon.tsx +71 -49
  139. package/src/components/ExtendedNumericInput.tsx +2 -2
  140. package/src/components/FileComponent.tsx +37 -18
  141. package/src/components/FormGroupComponent.tsx +8 -4
  142. package/src/components/InspectorStackComponent.tsx +20 -7
  143. package/src/components/NumericInput.tsx +4 -5
  144. package/src/components/common.scss +1 -1
  145. package/src/lib.ts +2 -3
  146. package/src/renderer.scss +30 -8
  147. package/src/utils/PointerLockManager.md +334 -0
  148. package/src/utils/pointerLock.ts +264 -0
  149. package/src/utils.ts +8 -4
  150. package/dist/bpComponents/BPTreeComponent.d.ts +0 -46
  151. package/dist/bpComponents/BPTreeFolderComponent.d.ts +0 -10
  152. package/dist/components/Tree2.d.ts +0 -52
  153. package/dist/components/TreeNode2.d.ts +0 -43
  154. package/dist/components/treeTypes.d.ts +0 -18
  155. package/dist/index-BFBvfUPU.js +0 -671
  156. package/dist/index-BFBvfUPU.js.map +0 -1
  157. package/dist/index-CHQ1fP9-.js +0 -671
  158. package/dist/index-CHQ1fP9-.js.map +0 -1
  159. package/dist/index-Dbe8gLld.js +0 -13583
  160. package/dist/index-Dbe8gLld.js.map +0 -1
  161. package/src/bpComponents/BPTreeComponent.scss +0 -3
  162. package/src/bpComponents/BPTreeComponent.tsx +0 -244
  163. package/src/bpComponents/BPTreeFolderComponent.tsx +0 -31
  164. package/src/components/Tree2.tsx +0 -344
  165. package/src/components/TreeNode2.tsx +0 -192
  166. package/src/components/tree2.scss +0 -69
  167. package/src/components/treeTypes.ts +0 -97
@@ -0,0 +1,44 @@
1
+ declare class FakeCursor {
2
+ private element;
3
+ private x;
4
+ private y;
5
+ private visible;
6
+ private originalCursor;
7
+ constructor();
8
+ private createCursorElement;
9
+ show(useFallback: boolean): void;
10
+ hide(useFallback: boolean): void;
11
+ setPosition(x: number, y: number): void;
12
+ getPosition(): {
13
+ x: number;
14
+ y: number;
15
+ };
16
+ isVisible(): boolean;
17
+ destroy(): void;
18
+ }
19
+ export declare function getFakeCursor(): FakeCursor;
20
+ export declare function destroyFakeCursor(): void;
21
+ export interface PointerLockOptions {
22
+ onMove: (movementX: number, movementY: number, cursorX: number, cursorY: number) => void;
23
+ onLockChange?: (locked: boolean) => void;
24
+ }
25
+ export declare class PointerLockManager {
26
+ private element;
27
+ private fakeCursor;
28
+ private options;
29
+ private isLocked;
30
+ private cursorX;
31
+ private cursorY;
32
+ private useFallback;
33
+ private lastMouseX;
34
+ private lastMouseY;
35
+ constructor(element: HTMLElement, options: PointerLockOptions);
36
+ requestLock(initialX: number, initialY: number): void;
37
+ releaseLock(): void;
38
+ private cleanup;
39
+ private handlePointerLockChange;
40
+ private handleFallbackMouseMove;
41
+ private handleMouseMove;
42
+ isPointerLocked(): boolean;
43
+ }
44
+ export {};
@@ -0,0 +1,215 @@
1
+ class FakeCursor {
2
+ constructor() {
3
+ this.element = null;
4
+ this.x = 0;
5
+ this.y = 0;
6
+ this.visible = false;
7
+ this.originalCursor = '';
8
+ if (typeof document !== 'undefined') {
9
+ this.createCursorElement();
10
+ }
11
+ else {
12
+ console.warn('FakeCursor: document is undefined, cannot create cursor element.');
13
+ }
14
+ }
15
+ createCursorElement() {
16
+ this.element = document.createElement('div');
17
+ this.element.style.position = 'fixed';
18
+ this.element.style.width = '16px';
19
+ this.element.style.height = '16px';
20
+ this.element.style.transform = 'translate(calc(-50% + 1px), calc(-50% + 1px))';
21
+ this.element.style.pointerEvents = 'none';
22
+ this.element.style.zIndex = '999999';
23
+ this.element.style.display = 'none';
24
+ this.element.innerHTML = `
25
+ <svg width="16" height="12" viewBox="0 0 16 12" fill="none" xmlns="http://www.w3.org/2000/svg">
26
+ <g clip-path="url(#clip0_1_176)">
27
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M0 5.9907V5.9957L5.997 11.9917L5.998 7.9927H7.997H10.017V11.9927L15.997 5.9917L10.017 -0.00730079L10.018 4.0117L7.997 4.0137H5.997L5.998 -0.00830078L0 5.9907ZM1.411 5.9937L4.998 2.4057L4.997 4.9927H8.497H11.018V2.4077L14.583 5.9937L11.019 9.5787L11.018 6.9937H8.497L4.998 6.9927L4.997 9.5787L1.411 5.9937Z" fill="white"/>
28
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M8.4971 6.9932H11.0181V9.5792L14.5831 5.9932L11.0181 2.4082V5.0132H8.4971H4.9971V2.4062L1.4111 5.9932L4.9971 9.5792V6.9922L8.4971 6.9932Z" fill="black"/>
29
+ </g>
30
+ <defs>
31
+ <clipPath id="clip0_1_176">
32
+ <rect width="16" height="12" fill="white"/>
33
+ </clipPath>
34
+ </defs>
35
+ </svg>
36
+ `;
37
+ document.body.appendChild(this.element);
38
+ }
39
+ show(useFallback) {
40
+ if (this.element) {
41
+ this.element.style.display = 'block';
42
+ this.visible = true;
43
+ if (useFallback) {
44
+ this.originalCursor = document.documentElement.style.cursor;
45
+ document.documentElement.style.cursor = 'ew-resize';
46
+ this.element.style.opacity = '0';
47
+ this.element.style.pointerEvents = 'auto';
48
+ }
49
+ }
50
+ }
51
+ hide(useFallback) {
52
+ if (this.element) {
53
+ this.element.style.display = 'none';
54
+ this.visible = false;
55
+ if (useFallback && this.originalCursor !== undefined) {
56
+ document.documentElement.style.cursor = this.originalCursor;
57
+ }
58
+ this.element.style.opacity = '1';
59
+ this.element.style.pointerEvents = 'none';
60
+ }
61
+ }
62
+ setPosition(x, y) {
63
+ this.x = x;
64
+ this.y = y;
65
+ if (this.element) {
66
+ this.element.style.left = `${x}px`;
67
+ this.element.style.top = `${y}px`;
68
+ }
69
+ }
70
+ getPosition() {
71
+ return { x: this.x, y: this.y };
72
+ }
73
+ isVisible() {
74
+ return this.visible;
75
+ }
76
+ destroy() {
77
+ if (this.element && this.element.parentNode) {
78
+ this.element.parentNode.removeChild(this.element);
79
+ this.element = null;
80
+ }
81
+ }
82
+ }
83
+ let fakeCursorInstance = null;
84
+ export function getFakeCursor() {
85
+ if (!fakeCursorInstance) {
86
+ fakeCursorInstance = new FakeCursor();
87
+ }
88
+ return fakeCursorInstance;
89
+ }
90
+ export function destroyFakeCursor() {
91
+ if (fakeCursorInstance) {
92
+ fakeCursorInstance.destroy();
93
+ fakeCursorInstance = null;
94
+ }
95
+ }
96
+ export class PointerLockManager {
97
+ constructor(element, options) {
98
+ this.isLocked = false;
99
+ this.cursorX = 0;
100
+ this.cursorY = 0;
101
+ this.useFallback = false;
102
+ this.lastMouseX = 0;
103
+ this.lastMouseY = 0;
104
+ this.element = element;
105
+ this.options = options;
106
+ this.fakeCursor = getFakeCursor();
107
+ this.handleMouseMove = this.handleMouseMove.bind(this);
108
+ this.handlePointerLockChange = this.handlePointerLockChange.bind(this);
109
+ this.handleFallbackMouseMove = this.handleFallbackMouseMove.bind(this);
110
+ }
111
+ requestLock(initialX, initialY) {
112
+ this.cursorX = initialX;
113
+ this.cursorY = initialY;
114
+ this.lastMouseX = initialX;
115
+ this.lastMouseY = initialY;
116
+ this.fakeCursor.setPosition(initialX, initialY);
117
+ if (isSafari() || !this.element.requestPointerLock) {
118
+ this.useFallback = true;
119
+ this.isLocked = true;
120
+ this.fakeCursor.show(true);
121
+ document.addEventListener('mousemove', this.handleFallbackMouseMove);
122
+ if (this.options.onLockChange) {
123
+ this.options.onLockChange(true);
124
+ }
125
+ }
126
+ else {
127
+ this.useFallback = false;
128
+ this.fakeCursor.show(false);
129
+ this.element.requestPointerLock();
130
+ document.addEventListener('pointerlockchange', this.handlePointerLockChange);
131
+ document.addEventListener('mousemove', this.handleMouseMove);
132
+ setTimeout(() => {
133
+ if (!this.isLocked && !this.useFallback) {
134
+ this.useFallback = true;
135
+ this.isLocked = true;
136
+ this.fakeCursor.show(true);
137
+ document.removeEventListener('mousemove', this.handleMouseMove);
138
+ document.removeEventListener('pointerlockchange', this.handlePointerLockChange);
139
+ document.addEventListener('mousemove', this.handleFallbackMouseMove);
140
+ if (this.options.onLockChange) {
141
+ this.options.onLockChange(true);
142
+ }
143
+ }
144
+ }, 100);
145
+ }
146
+ }
147
+ releaseLock() {
148
+ if (this.isLocked && !this.useFallback) {
149
+ document.exitPointerLock();
150
+ }
151
+ this.cleanup();
152
+ }
153
+ cleanup() {
154
+ document.removeEventListener('mousemove', this.handleMouseMove);
155
+ document.removeEventListener('mousemove', this.handleFallbackMouseMove);
156
+ document.removeEventListener('pointerlockchange', this.handlePointerLockChange);
157
+ this.fakeCursor.hide(this.useFallback);
158
+ this.isLocked = false;
159
+ this.useFallback = false;
160
+ }
161
+ handlePointerLockChange() {
162
+ this.isLocked = document.pointerLockElement === this.element;
163
+ if (!this.isLocked) {
164
+ this.cleanup();
165
+ }
166
+ if (this.options.onLockChange) {
167
+ this.options.onLockChange(this.isLocked);
168
+ }
169
+ }
170
+ handleFallbackMouseMove(ev) {
171
+ if (!this.isLocked || !this.useFallback)
172
+ return;
173
+ const movementX = ev.clientX - this.lastMouseX;
174
+ const movementY = ev.clientY - this.lastMouseY;
175
+ this.lastMouseX = ev.clientX;
176
+ this.lastMouseY = ev.clientY;
177
+ this.cursorX = ev.clientX;
178
+ this.cursorY = ev.clientY;
179
+ this.fakeCursor.setPosition(this.cursorX, this.cursorY);
180
+ this.options.onMove(movementX, movementY, this.cursorX, this.cursorY);
181
+ }
182
+ handleMouseMove(ev) {
183
+ if (!this.isLocked || this.useFallback)
184
+ return;
185
+ const movementX = ev.movementX || 0;
186
+ const movementY = ev.movementY || 0;
187
+ this.cursorX += movementX;
188
+ this.cursorY += movementY;
189
+ const screenWidth = window.innerWidth;
190
+ const screenHeight = window.innerHeight;
191
+ if (this.cursorX < 0) {
192
+ this.cursorX = screenWidth - 1;
193
+ }
194
+ else if (this.cursorX >= screenWidth) {
195
+ this.cursorX = 0;
196
+ }
197
+ if (this.cursorY < 0) {
198
+ this.cursorY = screenHeight - 1;
199
+ }
200
+ else if (this.cursorY >= screenHeight) {
201
+ this.cursorY = 0;
202
+ }
203
+ this.fakeCursor.setPosition(this.cursorX, this.cursorY);
204
+ this.options.onMove(movementX, movementY, this.cursorX, this.cursorY);
205
+ }
206
+ isPointerLocked() {
207
+ return this.isLocked;
208
+ }
209
+ }
210
+ function isSafari() {
211
+ if (typeof navigator === 'undefined')
212
+ return false;
213
+ return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
214
+ }
215
+ //# sourceMappingURL=pointerLock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointerLock.js","sourceRoot":"","sources":["../../../src/utils/pointerLock.ts"],"names":[],"mappings":"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"}
package/lib/esm/utils.js CHANGED
@@ -13,7 +13,12 @@ export function cleanLabel(varName) {
13
13
  result = result.replace(/([a-zA-Z])(\d)/g, '$1 $2');
14
14
  result = result.replace(/(\d)([a-zA-Z])/g, '$1 $2');
15
15
  const words = result.split(/\s+/).filter(word => word.length > 0);
16
- const capitalizedWords = words.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase());
16
+ const capitalizedWords = words.map(word => {
17
+ if (word.length >= 2 && word === word.toUpperCase()) {
18
+ return word;
19
+ }
20
+ return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
21
+ });
17
22
  return capitalizedWords.join(' ');
18
23
  }
19
24
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,OAAgB;IACvC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAInC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAEzD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAGpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAGpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAGpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACtC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAC7D,CAAC;IAGF,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,UAAU,CAAC,OAAgB;IACvC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,IAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAInC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;IAEzD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAGpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAGpD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAGpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAEtC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;IAGH,OAAO,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "uiconfig-blueprint",
3
3
  "name:umd": "bpui",
4
- "version": "0.1.0-dev.13",
4
+ "version": "0.1.0-dev.15",
5
5
  "description": "Blueprint.js wrapper and custom components for web controls UI. To be used with uiconfig.",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",
@@ -20,6 +20,10 @@
20
20
  "import": "./dist/",
21
21
  "require": "./dist/"
22
22
  },
23
+ "./lib": {
24
+ "types": "./lib/esm/lib.d.ts",
25
+ "import": "./lib/esm/lib.js"
26
+ },
23
27
  "./lib/esm": {
24
28
  "types": "./lib/esm/index.d.ts",
25
29
  "import": "./lib/esm/index.js"
@@ -67,15 +71,15 @@
67
71
  },
68
72
  "homepage": "https://github.com/repalash/uiconfig-blueprint#readme",
69
73
  "dependencies": {
70
- "ts-browser-helpers": "^0.18.0",
71
- "uiconfig.js": "^0.1.6",
72
- "@blueprintjs/icons": "^5.11.0",
73
- "@blueprintjs/select": "^5.2.2",
74
+ "ts-browser-helpers": "^0.19.4",
75
+ "uiconfig.js": "^0.3.1",
76
+ "@blueprintjs/icons": "^5.23.0",
77
+ "@blueprintjs/select": "^5.3.21",
74
78
  "blueprint-styler": "^5.0.2",
75
79
  "react-colorful": "^5.6.1"
76
80
  },
77
81
  "peerDependencies": {
78
- "@blueprintjs/core": "^5.11.0",
82
+ "@blueprintjs/core": "^5.19.1",
79
83
  "@types/three": "^0.152.1",
80
84
  "@types/webxr": "^0.5.10",
81
85
  "@types/react": "^18.0.28",
@@ -107,12 +111,6 @@
107
111
  }
108
112
  },
109
113
  "//": {
110
- "devDependencies": {
111
- "uiconfig.js": "^0.0.12"
112
- },
113
- "local_dependencies": {
114
- "uiconfig.js": "file:./../uiconfig/"
115
- },
116
114
  "scripts": {
117
115
  "compile:cjs": "tsc -p ./src -m commonjs --verbatimModuleSyntax false --outDir lib/cjs",
118
116
  "compile:esnext": "tsc -p ./src -t esnext --outDir lib/esnext"
@@ -10,10 +10,10 @@ import {BPSliderInputComponent} from "./bpComponents/BPSliderInputComponent";
10
10
  import {BPDropdownInputComponent} from "./bpComponents/BPDropdownInputComponent";
11
11
  import {PanelActions} from "@blueprintjs/core/lib/esm/components/panel-stack2/panelTypes";
12
12
  import {BPPanelComponent} from "./bpComponents/BPPanelComponent";
13
- import {BPTreeFolderComponent} from "./bpComponents/BPTreeFolderComponent";
14
13
  import {UiObjectConfig} from 'uiconfig.js'
15
14
  import {BPColorInputComponent} from './bpComponents/BPColorInputComponent'
16
15
  import {BPVectorInputComponent} from './bpComponents/BPVectorInputComponent'
16
+ import {IconName, MaybeElement} from "@blueprintjs/core";
17
17
  // import {BPVectorInputComponent} from "./bpComponents/BPVectorInputComponent";
18
18
  // import {BPFileComponent} from "./bpComponents/BPFileComponent";
19
19
  // import {BPColorInputComponent} from "./bpComponents/BPColorInputComponent";
@@ -21,13 +21,14 @@ import {BPVectorInputComponent} from './bpComponents/BPVectorInputComponent'
21
21
 
22
22
  export type UiConfigTypes = 'input' | 'button' | 'folder' | 'checkbox' | 'toggle' |
23
23
  'dropdown' | 'slider' | 'color' | 'image' | 'number' | 'panel' | 'tree' | 'hierarchy' | 'materials' | 'textures' |
24
- 'vec' | 'vec2' | 'vec3' | 'vec4' | 'monitor' | 'vector'
24
+ 'vec' | 'vec2' | 'vec3' | 'vec4' | 'monitor' | 'vector' | 'select' | 'textarea' | 'tabs'
25
25
 
26
26
  export interface ConfigProps extends PanelActions {
27
27
  config: UiObjectConfig;
28
28
  isPanel?: boolean,
29
29
  level?: number,
30
30
  className?: string
31
+ icon?: IconName|MaybeElement // only for top level folders right now.
31
32
  }
32
33
 
33
34
  export const ConfigObjectGenerators: PartialRecord<UiConfigTypes, Class<React.Component<BPComponentProps<any>, BPComponentState>>> = {
@@ -41,8 +42,8 @@ export const ConfigObjectGenerators: PartialRecord<UiConfigTypes, Class<React.Co
41
42
  checkbox: BPToggleInputComponent,
42
43
  toggle: BPToggleInputComponent,
43
44
  dropdown: BPDropdownInputComponent,
45
+ select: BPDropdownInputComponent,
44
46
  slider: BPSliderInputComponent,
45
- tree: BPTreeFolderComponent,
46
47
  color: BPColorInputComponent,
47
48
  // image: BPFileComponent,
48
49
  vec: BPVectorInputComponent,
@@ -51,6 +52,8 @@ export const ConfigObjectGenerators: PartialRecord<UiConfigTypes, Class<React.Co
51
52
  vec4: BPVectorInputComponent,
52
53
  vector: BPVectorInputComponent,
53
54
  // hierarchy: BPHierarchyComponent,
55
+
56
+ // todo textarea, textArea, multiline, tabs, tab, other aliases
54
57
  }
55
58
 
56
59
  export class ConfigObject extends React.Component<ConfigProps, {}> {
@@ -61,6 +64,7 @@ export class ConfigObject extends React.Component<ConfigProps, {}> {
61
64
  render() {
62
65
  if (!this.props.config || !this.props.config.type) return (<div key={this.props.config.uuid} className={this.props.className}></div>)
63
66
  this.context.methods.initUiConfig(this.props.config)
67
+ if(!this.props.config.dispatchMode) this.props.config.dispatchMode = 'immediate'
64
68
 
65
69
  const order = this.props.config.order ? getOrCall(this.props.config.order, this.props.config) ?? undefined : undefined
66
70
  const orderStyle = {order: order && typeof order === 'string' ? parseInt(order): order}
@@ -88,7 +92,9 @@ export class ConfigObject extends React.Component<ConfigProps, {}> {
88
92
  <FolderHeadCard
89
93
  enabled={enabledToggle ? this.context.methods.getRawValue(enabledToggle) : undefined}
90
94
  onEnabledChange={(e) => enabledToggle && this.context.methods.setValue(enabledToggle, e.target.checked, {}).then(() => this.setState(this.state))}
91
- level={0} label={label} minimal={false} open={false} onClick={() => {
95
+ level={0} label={label} minimal={false} open={false}
96
+ icon={this.props.icon}
97
+ onClick={() => {
92
98
  this.props.openPanel<{ config: UiObjectConfig<any> }>({
93
99
  props: {config: this.props.config},
94
100
  title: label,
@@ -103,7 +109,7 @@ export class ConfigObject extends React.Component<ConfigProps, {}> {
103
109
  )
104
110
  }
105
111
  if (BPComp) {
106
- return (<div key={this.props.config.uuid} style={orderStyle} className={this.props.className}><BPComp {...{...this.props, isPanel: undefined}} /></div>)
112
+ return (<div key={this.props.config.uuid} style={orderStyle} className={this.props.className}><BPComp {...{...this.props, isPanel: undefined, icon: this.props.icon}} /></div>)
107
113
  }
108
114
  return (<div key={this.props.config.uuid} style={orderStyle} className={this.props.className}>
109
115
  {/*Unknown type: {this.props.config.type}*/}
@@ -66,7 +66,7 @@ export class UiConfigRendererBlueprint extends UiConfigRenderer {
66
66
  }
67
67
 
68
68
  protected _refreshUiConfigObject(config: UiObjectConfig): void {
69
- (config.uiRef as BPComponent<any, any>).refreshConfigState()
69
+ (config.uiRef as BPComponent<any, any>)?.refreshConfigState()
70
70
  }
71
71
 
72
72
  renderUiConfig(_: UiObjectConfig): void {
@@ -24,7 +24,7 @@ export class BPButtonComponent extends BPLabelledComponent<()=>void, BPLabelledC
24
24
  <Button className="bpButton"
25
25
  disabled={this.state.disabled || this.state.readOnly}
26
26
  intent={Intent.PRIMARY}
27
- // small={true}
27
+ size={"small"}
28
28
  fill={true}
29
29
  text={this.state.label} style={{}} onClick={this.onClick}/>
30
30
  </div>
@@ -1,11 +1,12 @@
1
1
  import {createRef} from "react";
2
2
  import {BPComponentProps, UiConfigRendererContextType} from "./BPComponent";
3
- import {Button, Icon, InputGroup, Popover} from "@blueprintjs/core";
3
+ import {Button, Icon, Popover} from "@blueprintjs/core";
4
4
  import {BPValueComponent, BPValueComponentState} from "./BPValueComponent";
5
5
  import {HexColorPicker} from "react-colorful";
6
6
  import {FormGroupComponent} from "../components/FormGroupComponent";
7
7
  import {getOrCall} from 'ts-browser-helpers'
8
8
  import type {Color, ColorRepresentation} from "three"
9
+ import {InputGroup2} from "../lib";
9
10
 
10
11
  export type BPColorComponentState = BPValueComponentState<string> & {
11
12
  mode: 'number' | 'string' | 'Color', lastValue?: ColorRepresentation,
@@ -89,11 +90,18 @@ export class BPColorInputComponent extends BPValueComponent<ColorRepresentation,
89
90
  document.removeEventListener('mouseup', this._mouseMove)
90
91
  if (!this._hasMouseUp) return
91
92
  this._hasMouseUp = false
92
- this.setValue(this._inputRef.current!.value, true)
93
+ if(this._inputRef.current) {
94
+ this.setValue(this._inputRef.current.value, true)
95
+ }
93
96
 
94
97
  if (this._hasMouseUp) return
95
98
  document.addEventListener('mouseup', this._mouseUp)
96
99
  }
100
+ async refreshConfigState(state?: BPColorComponentState): Promise<void> {
101
+ await super.refreshConfigState(state);
102
+ if(this._inputRef.current)
103
+ this._inputRef.current.value = this.state.value
104
+ }
97
105
 
98
106
  protected flexBasis = "100%"
99
107
 
@@ -103,9 +111,10 @@ export class BPColorInputComponent extends BPValueComponent<ColorRepresentation,
103
111
  label={this.state.label}
104
112
  flexBasis={this.state.baseWidth ?? this.flexBasis}
105
113
  >
106
- <InputGroup inputRef={this._inputRef}
114
+ <InputGroup2 inputRef={this._inputRef}
107
115
  disabled={this.state.disabled} readOnly={this.state.readOnly}
108
116
  fill={true}
117
+ // leftElementWidth={"calc(3 * var(--pt-grid-size))"}
109
118
  leftElement={(
110
119
  <Popover
111
120
  popoverClassName={'color-picker-popover'}
@@ -130,7 +139,7 @@ export class BPColorInputComponent extends BPValueComponent<ColorRepresentation,
130
139
  <Button
131
140
  disabled={this.state.disabled || this.state.readOnly}
132
141
  icon={<Icon icon="full-circle" color={this.state.value}/>}
133
- text="" minimal
142
+ text="" variant={"minimal"}
134
143
  />
135
144
  </Popover>
136
145
  )} key={this.props.config.uuid} defaultValue={this.state.value} onChange={(e) => {
@@ -1,12 +1,13 @@
1
1
  import React, {createContext} from "react";
2
2
  import type {UiConfigRendererBase} from 'uiconfig.js'
3
3
  import {UiObjectConfig} from 'uiconfig.js'
4
- import {getOrCall} from 'ts-browser-helpers'
4
+ import {getOrCall, ValOrFunc} from 'ts-browser-helpers'
5
5
  import {THREE} from "../threejs";
6
6
 
7
7
  export type BPComponentProps<T> = {
8
8
  config: UiObjectConfig<T>,
9
9
  level?: number
10
+ disabled?: ValOrFunc<boolean> // todo add to uiconfig-react as well
10
11
  }
11
12
  export type BPComponentState = {
12
13
  hidden?: boolean
@@ -47,8 +48,9 @@ export abstract class BPComponent<TValue, TState extends BPComponentState, TProp
47
48
  * @param state - the current state
48
49
  */
49
50
  getUpdatedState(state: TState): TState{
51
+ // todo use UiConfigMethods.GetBaseProps
50
52
  const hidden = getOrCall(this.props.config.hidden) ?? false
51
- const disabled = getOrCall(this.props.config.disabled) ?? false
53
+ const disabled = getOrCall(this.props.disabled ?? this.props.config.disabled) ?? false
52
54
  const readOnly = getOrCall(this.props.config.readOnly) ?? false
53
55
  const baseWidth = getOrCall(this.props.config.baseWidth) ?? undefined
54
56
  if(hidden !== state.hidden
@@ -93,7 +95,6 @@ export abstract class BPComponent<TValue, TState extends BPComponentState, TProp
93
95
  super.componentDidMount?.();
94
96
  this.props.config.uiRef = this
95
97
  this.props.config.uiRefresh = (deep = false, mode = 'postFrame', delay = 0) => {
96
- // console.log('refresh', this.props.config.label, this.props.config.type)
97
98
  this.context.addToRefreshQueue(mode, this.props.config, deep, delay)
98
99
  }
99
100
  // console.log('mount', this.props.config.label, this.props.config.type, this.props.config)
@@ -4,11 +4,22 @@ import {PanelActions} from '@blueprintjs/core/lib/esm/components/panel-stack2/pa
4
4
  import {UiObjectConfig} from 'uiconfig.js'
5
5
  import {getOrCall} from 'ts-browser-helpers'
6
6
 
7
+ declare module '../ConfigObject' {
8
+ interface ConfigProps {
9
+ filter?: (child: UiObjectConfig) => boolean
10
+ }
11
+ }
12
+
7
13
  export type BPContainerComponentState = BPLabelledComponentState & {
8
14
  children: UiObjectConfig[]
9
15
  expanded: boolean
10
16
  }
11
- export class BPContainerComponent<TState extends BPContainerComponentState=BPContainerComponentState> extends BPLabelledComponent<void, TState, BPComponentProps<void> & PanelActions> {
17
+
18
+ export type BPContainerComponentProps = {
19
+ filter?: (child: UiObjectConfig) => boolean
20
+ }
21
+
22
+ export class BPContainerComponent<TState extends BPContainerComponentState=BPContainerComponentState, TProps extends BPContainerComponentProps=BPContainerComponentProps> extends BPLabelledComponent<void, TState, BPComponentProps<void> & PanelActions & TProps> {
12
23
 
13
24
  protected _childParentOnChange: UiObjectConfig['parentOnChange'] = (ev, ...args) => {
14
25
  // console.warn('child change', ev, this.props.config)
@@ -38,13 +49,13 @@ export class BPContainerComponent<TState extends BPContainerComponentState=BPCon
38
49
  ) delete child.property
39
50
  }
40
51
 
41
- constructor(props: BPComponentProps<void> & PanelActions, context: UiConfigRendererContextType, state: TState) {
52
+ constructor(props: BPComponentProps<void> & PanelActions & TProps, context: UiConfigRendererContextType, state: TState) {
42
53
  super(props, context, state);
43
54
  }
44
55
 
45
56
  getUpdatedState(state: TState) {
46
57
  const oldChildren = state.children
47
- const newChildren = this.context.methods.getChildren(this.props.config)
58
+ let newChildren = this.context.methods.getChildren(this.props.config)
48
59
  .flatMap(c=>{
49
60
  if(c.type === 'folder' &&
50
61
  c.unwrapContents === true
@@ -56,6 +67,12 @@ export class BPContainerComponent<TState extends BPContainerComponentState=BPCon
56
67
  }
57
68
  return c
58
69
  })
70
+
71
+ // Apply filter if provided
72
+ if (this.props.filter) {
73
+ newChildren = newChildren.filter(this.props.filter)
74
+ }
75
+
59
76
  const removed = oldChildren.filter(c => !newChildren.includes(c))
60
77
  const added = newChildren.filter(c => !oldChildren.includes(c))
61
78
  // console.warn(this, this._registerChild, this._childParentOnChange, added, removed)
@@ -8,6 +8,7 @@ import {cleanLabel} from "../utils";
8
8
  export interface DropdownItem{
9
9
  label: string,
10
10
  value: string|number,
11
+ uuid?: string
11
12
  }
12
13
 
13
14
  export type BPDropdownComponentState = BPValueComponentState<string|number> & {
@@ -23,7 +24,7 @@ const renderDropdownItem: ItemRenderer<DropdownItem> = (item, { handleClick, han
23
24
  label={''}
24
25
  roleStructure="listoption"
25
26
  active={modifiers.active}
26
- key={item.value}
27
+ key={item.uuid || (typeof item.value === 'string' ? item.value : item.label)}
27
28
  onClick={handleClick}
28
29
  onFocus={handleFocus}
29
30
  />
@@ -42,8 +43,9 @@ export class BPDropdownInputComponent extends BPInputComponent<string|number, BP
42
43
  getUpdatedState(state: BPDropdownComponentState): BPDropdownComponentState {
43
44
  const children = this.context.methods.getChildren(this.props.config)
44
45
  const options: DropdownItem[] = children.map((value, i) => {
45
- const label = cleanLabel(this.context.methods.getLabel(value)) || `Option ${i}`
46
- return {label, value: value!.value ?? label}
46
+ let label1 = this.context.methods.getLabel(value)
47
+ const label = cleanLabel(label1) || `Option ${i}`
48
+ return {label, value: value!.value ?? label1, uuid: value!.uuid}
47
49
  })
48
50
 
49
51
  // const selected = options.find(o=>o.value===val)||options[0]
@@ -78,7 +80,7 @@ export class BPDropdownInputComponent extends BPInputComponent<string|number, BP
78
80
  itemRenderer={renderDropdownItem}
79
81
  >
80
82
  {/* children become the popover target; render value here */}
81
- <Button rightIcon="double-caret-vertical" small={true}
83
+ <Button endIcon="double-caret-vertical" size={"small"}
82
84
  style={{whiteSpace: 'nowrap', textOverflow: "ellipsis", height: "100%"}}>{item.label}</Button>
83
85
  </Select>
84
86
  )