@bpmn-io/properties-panel 2.2.1 → 3.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.
- package/LICENSE +20 -20
- package/README.md +34 -34
- package/assets/properties-panel.css +1180 -1114
- package/dist/index.esm.js +657 -507
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +656 -505
- package/dist/index.js.map +1 -1
- package/package.json +90 -90
- package/preact/README.md +56 -51
- package/preact/compat/client.js +19 -0
- package/preact/compat/client.mjs +22 -0
- package/preact/compat/dist/compat.js +1 -1
- package/preact/compat/dist/compat.js.map +1 -1
- package/preact/compat/dist/compat.mjs +1 -1
- package/preact/compat/dist/compat.module.js +1 -1
- package/preact/compat/dist/compat.module.js.map +1 -1
- package/preact/compat/dist/compat.umd.js +1 -1
- package/preact/compat/dist/compat.umd.js.map +1 -1
- package/preact/compat/jsx-dev-runtime.js +2 -0
- package/preact/compat/jsx-dev-runtime.mjs +2 -0
- package/preact/compat/jsx-runtime.js +2 -0
- package/preact/compat/jsx-runtime.mjs +2 -0
- package/preact/compat/package.json +31 -0
- package/preact/compat/scheduler.js +15 -0
- package/preact/compat/{src/scheduler.js → scheduler.mjs} +8 -9
- package/preact/compat/server.browser.js +4 -0
- package/preact/compat/src/PureComponent.js +1 -1
- package/preact/compat/src/forwardRef.js +2 -9
- package/preact/compat/src/index.d.ts +58 -4
- package/preact/compat/src/index.js +73 -2
- package/preact/compat/src/portals.js +4 -2
- package/preact/compat/src/render.js +133 -76
- package/preact/compat/src/suspense-list.d.ts +2 -2
- package/preact/compat/src/suspense-list.js +14 -13
- package/preact/compat/src/suspense.d.ts +4 -4
- package/preact/compat/src/suspense.js +6 -6
- package/preact/compat/src/util.js +10 -0
- package/preact/debug/dist/debug.js +1 -1
- package/preact/debug/dist/debug.js.map +1 -1
- package/preact/debug/dist/debug.mjs +1 -1
- package/preact/debug/dist/debug.module.js +1 -1
- package/preact/debug/dist/debug.module.js.map +1 -1
- package/preact/debug/dist/debug.umd.js +1 -1
- package/preact/debug/dist/debug.umd.js.map +1 -1
- package/preact/debug/package.json +9 -0
- package/preact/debug/src/check-props.js +3 -3
- package/preact/debug/src/debug.js +38 -17
- package/preact/debug/src/index.d.ts +4 -0
- package/preact/debug/src/util.js +4 -0
- package/preact/devtools/dist/devtools.js +1 -1
- package/preact/devtools/dist/devtools.js.map +1 -1
- package/preact/devtools/dist/devtools.mjs +1 -1
- package/preact/devtools/dist/devtools.module.js +1 -1
- package/preact/devtools/dist/devtools.module.js.map +1 -1
- package/preact/devtools/dist/devtools.umd.js +1 -1
- package/preact/devtools/dist/devtools.umd.js.map +1 -1
- package/preact/devtools/package.json +23 -14
- package/preact/devtools/src/devtools.js +1 -1
- package/preact/dist/preact.js +1 -1
- package/preact/dist/preact.js.map +1 -1
- package/preact/dist/preact.min.js +1 -1
- package/preact/dist/preact.min.js.map +1 -1
- package/preact/dist/preact.min.module.js +2 -0
- package/preact/dist/preact.min.module.js.map +1 -0
- package/preact/dist/preact.min.umd.js +2 -0
- package/preact/dist/preact.min.umd.js.map +1 -0
- package/preact/dist/preact.mjs +1 -1
- package/preact/dist/preact.module.js +1 -1
- package/preact/dist/preact.module.js.map +1 -1
- package/preact/dist/preact.umd.js +1 -1
- package/preact/dist/preact.umd.js.map +1 -1
- package/preact/hooks/dist/hooks.js +1 -1
- package/preact/hooks/dist/hooks.js.map +1 -1
- package/preact/hooks/dist/hooks.mjs +1 -1
- package/preact/hooks/dist/hooks.module.js +1 -1
- package/preact/hooks/dist/hooks.module.js.map +1 -1
- package/preact/hooks/dist/hooks.umd.js +1 -1
- package/preact/hooks/dist/hooks.umd.js.map +1 -1
- package/preact/hooks/package.json +9 -0
- package/preact/hooks/src/index.d.ts +26 -14
- package/preact/hooks/src/index.js +169 -44
- package/preact/hooks/src/internal.d.ts +12 -2
- package/preact/jsx-runtime/dist/jsxRuntime.js +1 -1
- package/preact/jsx-runtime/dist/jsxRuntime.js.map +1 -1
- package/preact/jsx-runtime/dist/jsxRuntime.mjs +1 -1
- package/preact/jsx-runtime/dist/jsxRuntime.module.js +1 -1
- package/preact/jsx-runtime/dist/jsxRuntime.module.js.map +1 -1
- package/preact/jsx-runtime/dist/jsxRuntime.umd.js +1 -1
- package/preact/jsx-runtime/dist/jsxRuntime.umd.js.map +1 -1
- package/preact/jsx-runtime/package.json +26 -17
- package/preact/jsx-runtime/src/index.js +19 -13
- package/preact/package.json +315 -262
- package/preact/src/clone-element.js +16 -10
- package/preact/src/component.js +33 -23
- package/preact/src/constants.js +2 -1
- package/preact/src/create-context.js +8 -3
- package/preact/src/create-element.js +9 -11
- package/preact/src/diff/catch-error.js +4 -2
- package/preact/src/diff/children.js +41 -32
- package/preact/src/diff/index.js +81 -34
- package/preact/src/diff/props.js +15 -14
- package/preact/src/index.d.ts +369 -301
- package/preact/src/internal.d.ts +11 -2
- package/preact/src/jsx.d.ts +1862 -626
- package/preact/src/options.js +1 -2
- package/preact/src/render.js +5 -6
- package/preact/src/util.js +6 -0
- package/preact/test-utils/dist/testUtils.js +1 -1
- package/preact/test-utils/dist/testUtils.js.map +1 -1
- package/preact/test-utils/dist/testUtils.mjs +1 -1
- package/preact/test-utils/dist/testUtils.module.js +1 -1
- package/preact/test-utils/dist/testUtils.module.js.map +1 -1
- package/preact/test-utils/dist/testUtils.umd.js +1 -1
- package/preact/test-utils/dist/testUtils.umd.js.map +1 -1
- package/preact/test-utils/package.json +9 -0
- package/preact/test-utils/src/index.js +2 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useContext, useRef, useEffect, useMemo, useCallback, useState, useLayoutEffect } from '../preact/hooks';
|
|
2
2
|
import { isFunction, isArray, get, assign, set, sortBy, find, isString, isNumber, debounce } from 'min-dash';
|
|
3
|
-
import { forwardRef } from '../preact/compat';
|
|
3
|
+
import { useState as useState$1, useEffect as useEffect$1, forwardRef } from '../preact/compat';
|
|
4
4
|
import { jsx, jsxs } from '../preact/jsx-runtime';
|
|
5
5
|
import classnames from 'classnames';
|
|
6
6
|
import { query } from 'min-dom';
|
|
@@ -141,19 +141,19 @@ const ErrorsContext = createContext({
|
|
|
141
141
|
errors: {}
|
|
142
142
|
});
|
|
143
143
|
|
|
144
|
-
/**
|
|
145
|
-
* @typedef {Function} <propertiesPanel.showEntry> callback
|
|
146
|
-
*
|
|
147
|
-
* @example
|
|
148
|
-
*
|
|
149
|
-
* useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
|
|
150
|
-
* // ...
|
|
151
|
-
* });
|
|
152
|
-
*
|
|
153
|
-
* @param {Object} context
|
|
154
|
-
* @param {boolean} [context.focus]
|
|
155
|
-
*
|
|
156
|
-
* @returns void
|
|
144
|
+
/**
|
|
145
|
+
* @typedef {Function} <propertiesPanel.showEntry> callback
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
*
|
|
149
|
+
* useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {
|
|
150
|
+
* // ...
|
|
151
|
+
* });
|
|
152
|
+
*
|
|
153
|
+
* @param {Object} context
|
|
154
|
+
* @param {boolean} [context.focus]
|
|
155
|
+
*
|
|
156
|
+
* @returns void
|
|
157
157
|
*/
|
|
158
158
|
const EventContext = createContext({
|
|
159
159
|
eventBus: null
|
|
@@ -166,20 +166,20 @@ const LayoutContext = createContext({
|
|
|
166
166
|
setLayoutForKey: () => {}
|
|
167
167
|
});
|
|
168
168
|
|
|
169
|
-
/**
|
|
170
|
-
* Accesses the global DescriptionContext and returns a description for a given id and element.
|
|
171
|
-
*
|
|
172
|
-
* @example
|
|
173
|
-
* ```jsx
|
|
174
|
-
* function TextField(props) {
|
|
175
|
-
* const description = useDescriptionContext('input1', element);
|
|
176
|
-
* }
|
|
177
|
-
* ```
|
|
178
|
-
*
|
|
179
|
-
* @param {string} id
|
|
180
|
-
* @param {object} element
|
|
181
|
-
*
|
|
182
|
-
* @returns {string}
|
|
169
|
+
/**
|
|
170
|
+
* Accesses the global DescriptionContext and returns a description for a given id and element.
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```jsx
|
|
174
|
+
* function TextField(props) {
|
|
175
|
+
* const description = useDescriptionContext('input1', element);
|
|
176
|
+
* }
|
|
177
|
+
* ```
|
|
178
|
+
*
|
|
179
|
+
* @param {string} id
|
|
180
|
+
* @param {object} element
|
|
181
|
+
*
|
|
182
|
+
* @returns {string}
|
|
183
183
|
*/
|
|
184
184
|
function useDescriptionContext(id, element) {
|
|
185
185
|
const {
|
|
@@ -194,12 +194,18 @@ function useError(id) {
|
|
|
194
194
|
} = useContext(ErrorsContext);
|
|
195
195
|
return errors[id];
|
|
196
196
|
}
|
|
197
|
+
function useErrors() {
|
|
198
|
+
const {
|
|
199
|
+
errors
|
|
200
|
+
} = useContext(ErrorsContext);
|
|
201
|
+
return errors;
|
|
202
|
+
}
|
|
197
203
|
|
|
198
|
-
/**
|
|
199
|
-
* Subscribe to an event immediately. Update subscription after inputs changed.
|
|
200
|
-
*
|
|
201
|
-
* @param {string} event
|
|
202
|
-
* @param {Function} callback
|
|
204
|
+
/**
|
|
205
|
+
* Subscribe to an event immediately. Update subscription after inputs changed.
|
|
206
|
+
*
|
|
207
|
+
* @param {string} event
|
|
208
|
+
* @param {Function} callback
|
|
203
209
|
*/
|
|
204
210
|
function useEvent(event, callback, eventBus) {
|
|
205
211
|
const eventContext = useContext(EventContext);
|
|
@@ -231,24 +237,24 @@ function useEvent(event, callback, eventBus) {
|
|
|
231
237
|
|
|
232
238
|
const KEY_LENGTH = 6;
|
|
233
239
|
|
|
234
|
-
/**
|
|
235
|
-
* Create a persistent key factory for plain objects without id.
|
|
236
|
-
*
|
|
237
|
-
* @example
|
|
238
|
-
* ```jsx
|
|
239
|
-
* function List({ objects }) {
|
|
240
|
-
* const getKey = useKeyFactory();
|
|
241
|
-
* return (<ol>{
|
|
242
|
-
* objects.map(obj => {
|
|
243
|
-
* const key = getKey(obj);
|
|
244
|
-
* return <li key={key}>obj.name</li>
|
|
245
|
-
* })
|
|
246
|
-
* }</ol>);
|
|
247
|
-
* }
|
|
248
|
-
* ```
|
|
249
|
-
*
|
|
250
|
-
* @param {any[]} dependencies
|
|
251
|
-
* @returns {(element: object) => string}
|
|
240
|
+
/**
|
|
241
|
+
* Create a persistent key factory for plain objects without id.
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* ```jsx
|
|
245
|
+
* function List({ objects }) {
|
|
246
|
+
* const getKey = useKeyFactory();
|
|
247
|
+
* return (<ol>{
|
|
248
|
+
* objects.map(obj => {
|
|
249
|
+
* const key = getKey(obj);
|
|
250
|
+
* return <li key={key}>obj.name</li>
|
|
251
|
+
* })
|
|
252
|
+
* }</ol>);
|
|
253
|
+
* }
|
|
254
|
+
* ```
|
|
255
|
+
*
|
|
256
|
+
* @param {any[]} dependencies
|
|
257
|
+
* @returns {(element: object) => string}
|
|
252
258
|
*/
|
|
253
259
|
function useKeyFactory(dependencies = []) {
|
|
254
260
|
const map = useMemo(() => new Map(), dependencies);
|
|
@@ -263,20 +269,20 @@ function useKeyFactory(dependencies = []) {
|
|
|
263
269
|
return getKey;
|
|
264
270
|
}
|
|
265
271
|
|
|
266
|
-
/**
|
|
267
|
-
* Creates a state that persists in the global LayoutContext.
|
|
268
|
-
*
|
|
269
|
-
* @example
|
|
270
|
-
* ```jsx
|
|
271
|
-
* function Group(props) {
|
|
272
|
-
* const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
|
|
273
|
-
* }
|
|
274
|
-
* ```
|
|
275
|
-
*
|
|
276
|
-
* @param {(string|number)[]} path
|
|
277
|
-
* @param {any} [defaultValue]
|
|
278
|
-
*
|
|
279
|
-
* @returns {[ any, Function ]}
|
|
272
|
+
/**
|
|
273
|
+
* Creates a state that persists in the global LayoutContext.
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* ```jsx
|
|
277
|
+
* function Group(props) {
|
|
278
|
+
* const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);
|
|
279
|
+
* }
|
|
280
|
+
* ```
|
|
281
|
+
*
|
|
282
|
+
* @param {(string|number)[]} path
|
|
283
|
+
* @param {any} [defaultValue]
|
|
284
|
+
*
|
|
285
|
+
* @returns {[ any, Function ]}
|
|
280
286
|
*/
|
|
281
287
|
function useLayoutState(path, defaultValue) {
|
|
282
288
|
const {
|
|
@@ -290,11 +296,11 @@ function useLayoutState(path, defaultValue) {
|
|
|
290
296
|
return [layoutForKey, setState];
|
|
291
297
|
}
|
|
292
298
|
|
|
293
|
-
/**
|
|
294
|
-
* @pinussilvestrus: we need to introduce our own hook to persist the previous
|
|
295
|
-
* state on updates.
|
|
296
|
-
*
|
|
297
|
-
* cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
|
|
299
|
+
/**
|
|
300
|
+
* @pinussilvestrus: we need to introduce our own hook to persist the previous
|
|
301
|
+
* state on updates.
|
|
302
|
+
*
|
|
303
|
+
* cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state
|
|
298
304
|
*/
|
|
299
305
|
|
|
300
306
|
function usePrevious(value) {
|
|
@@ -305,12 +311,12 @@ function usePrevious(value) {
|
|
|
305
311
|
return ref.current;
|
|
306
312
|
}
|
|
307
313
|
|
|
308
|
-
/**
|
|
309
|
-
* Subscribe to `propertiesPanel.showEntry`.
|
|
310
|
-
*
|
|
311
|
-
* @param {string} id
|
|
312
|
-
*
|
|
313
|
-
* @returns {import('preact').Ref}
|
|
314
|
+
/**
|
|
315
|
+
* Subscribe to `propertiesPanel.showEntry`.
|
|
316
|
+
*
|
|
317
|
+
* @param {string} id
|
|
318
|
+
*
|
|
319
|
+
* @returns {import('preact').Ref}
|
|
314
320
|
*/
|
|
315
321
|
function useShowEntryEvent(id) {
|
|
316
322
|
const {
|
|
@@ -341,20 +347,20 @@ function useShowEntryEvent(id) {
|
|
|
341
347
|
return ref;
|
|
342
348
|
}
|
|
343
349
|
|
|
344
|
-
/**
|
|
345
|
-
* @callback setSticky
|
|
346
|
-
* @param {boolean} value
|
|
350
|
+
/**
|
|
351
|
+
* @callback setSticky
|
|
352
|
+
* @param {boolean} value
|
|
347
353
|
*/
|
|
348
354
|
|
|
349
|
-
/**
|
|
350
|
-
* Use IntersectionObserver to identify when DOM element is in sticky mode.
|
|
351
|
-
* If sticky is observered setSticky(true) will be called.
|
|
352
|
-
* If sticky mode is left, setSticky(false) will be called.
|
|
353
|
-
*
|
|
354
|
-
*
|
|
355
|
-
* @param {Object} ref
|
|
356
|
-
* @param {string} scrollContainerSelector
|
|
357
|
-
* @param {setSticky} setSticky
|
|
355
|
+
/**
|
|
356
|
+
* Use IntersectionObserver to identify when DOM element is in sticky mode.
|
|
357
|
+
* If sticky is observered setSticky(true) will be called.
|
|
358
|
+
* If sticky mode is left, setSticky(false) will be called.
|
|
359
|
+
*
|
|
360
|
+
*
|
|
361
|
+
* @param {Object} ref
|
|
362
|
+
* @param {string} scrollContainerSelector
|
|
363
|
+
* @param {setSticky} setSticky
|
|
358
364
|
*/
|
|
359
365
|
function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {
|
|
360
366
|
const [scrollContainer, setScrollContainer] = useState(query(scrollContainerSelector));
|
|
@@ -408,19 +414,19 @@ function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky)
|
|
|
408
414
|
}, [ref.current, scrollContainer, setSticky]);
|
|
409
415
|
}
|
|
410
416
|
|
|
411
|
-
/**
|
|
412
|
-
* Creates a static function reference with changing body.
|
|
413
|
-
* This is necessary when external libraries require a callback function
|
|
414
|
-
* that has references to state variables.
|
|
415
|
-
*
|
|
416
|
-
* Usage:
|
|
417
|
-
* const callback = useStaticCallback((val) => {val === currentState});
|
|
418
|
-
*
|
|
419
|
-
* The `callback` reference is static and can be safely used in external
|
|
420
|
-
* libraries or as a prop that does not cause rerendering of children.
|
|
421
|
-
*
|
|
422
|
-
* @param {Function} callback function with changing reference
|
|
423
|
-
* @returns {Function} static function reference
|
|
417
|
+
/**
|
|
418
|
+
* Creates a static function reference with changing body.
|
|
419
|
+
* This is necessary when external libraries require a callback function
|
|
420
|
+
* that has references to state variables.
|
|
421
|
+
*
|
|
422
|
+
* Usage:
|
|
423
|
+
* const callback = useStaticCallback((val) => {val === currentState});
|
|
424
|
+
*
|
|
425
|
+
* The `callback` reference is static and can be safely used in external
|
|
426
|
+
* libraries or as a prop that does not cause rerendering of children.
|
|
427
|
+
*
|
|
428
|
+
* @param {Function} callback function with changing reference
|
|
429
|
+
* @returns {Function} static function reference
|
|
424
430
|
*/
|
|
425
431
|
function useStaticCallback(callback) {
|
|
426
432
|
const callbackRef = useRef(callback);
|
|
@@ -460,6 +466,10 @@ function Group(props) {
|
|
|
460
466
|
setEdited(hasOneEditedEntry);
|
|
461
467
|
}, [entries]);
|
|
462
468
|
|
|
469
|
+
// set error state depending on all entries
|
|
470
|
+
const allErrors = useErrors();
|
|
471
|
+
const hasErrors = entries.some(entry => allErrors[entry.id]);
|
|
472
|
+
|
|
463
473
|
// set css class when group is sticky to top
|
|
464
474
|
useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);
|
|
465
475
|
const propertiesPanelContext = {
|
|
@@ -479,7 +489,10 @@ function Group(props) {
|
|
|
479
489
|
children: label
|
|
480
490
|
}), jsxs("div", {
|
|
481
491
|
class: "bio-properties-panel-group-header-buttons",
|
|
482
|
-
children: [
|
|
492
|
+
children: [jsx(DataMarker, {
|
|
493
|
+
edited: edited,
|
|
494
|
+
hasErrors: hasErrors
|
|
495
|
+
}), jsx("button", {
|
|
483
496
|
title: "Toggle section",
|
|
484
497
|
class: "bio-properties-panel-group-header-button bio-properties-panel-arrow",
|
|
485
498
|
children: jsx(ArrowIcon, {
|
|
@@ -506,20 +519,33 @@ function Group(props) {
|
|
|
506
519
|
})]
|
|
507
520
|
});
|
|
508
521
|
}
|
|
509
|
-
function DataMarker() {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
}
|
|
522
|
+
function DataMarker(props) {
|
|
523
|
+
const {
|
|
524
|
+
edited,
|
|
525
|
+
hasErrors
|
|
526
|
+
} = props;
|
|
527
|
+
if (hasErrors) {
|
|
528
|
+
return jsx("div", {
|
|
529
|
+
title: "Section contains an error",
|
|
530
|
+
class: "bio-properties-panel-dot bio-properties-panel-dot--error"
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
if (edited) {
|
|
534
|
+
return jsx("div", {
|
|
535
|
+
title: "Section contains data",
|
|
536
|
+
class: "bio-properties-panel-dot"
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
return null;
|
|
514
540
|
}
|
|
515
541
|
|
|
516
|
-
/**
|
|
517
|
-
* @typedef { {
|
|
518
|
-
* text: (element: object) => string,
|
|
519
|
-
* icon?: (element: Object) => import('preact').Component
|
|
520
|
-
* } } PlaceholderDefinition
|
|
521
|
-
*
|
|
522
|
-
* @param { PlaceholderDefinition } props
|
|
542
|
+
/**
|
|
543
|
+
* @typedef { {
|
|
544
|
+
* text: (element: object) => string,
|
|
545
|
+
* icon?: (element: Object) => import('preact').Component
|
|
546
|
+
* } } PlaceholderDefinition
|
|
547
|
+
*
|
|
548
|
+
* @param { PlaceholderDefinition } props
|
|
523
549
|
*/
|
|
524
550
|
function Placeholder(props) {
|
|
525
551
|
const {
|
|
@@ -543,72 +569,72 @@ function Placeholder(props) {
|
|
|
543
569
|
const DEFAULT_LAYOUT = {};
|
|
544
570
|
const DEFAULT_DESCRIPTION = {};
|
|
545
571
|
|
|
546
|
-
/**
|
|
547
|
-
* @typedef { {
|
|
548
|
-
* component: import('preact').Component,
|
|
549
|
-
* id: String,
|
|
550
|
-
* isEdited?: Function
|
|
551
|
-
* } } EntryDefinition
|
|
552
|
-
*
|
|
553
|
-
* @typedef { {
|
|
554
|
-
* autoFocusEntry: String,
|
|
555
|
-
* autoOpen?: Boolean,
|
|
556
|
-
* entries: Array<EntryDefinition>,
|
|
557
|
-
* id: String,
|
|
558
|
-
* label: String,
|
|
559
|
-
* remove: (event: MouseEvent) => void
|
|
560
|
-
* } } ListItemDefinition
|
|
561
|
-
*
|
|
562
|
-
* @typedef { {
|
|
563
|
-
* add: (event: MouseEvent) => void,
|
|
564
|
-
* component: import('preact').Component,
|
|
565
|
-
* element: Object,
|
|
566
|
-
* id: String,
|
|
567
|
-
* items: Array<ListItemDefinition>,
|
|
568
|
-
* label: String,
|
|
569
|
-
* shouldSort?: Boolean,
|
|
570
|
-
* shouldOpen?: Boolean
|
|
571
|
-
* } } ListGroupDefinition
|
|
572
|
-
*
|
|
573
|
-
* @typedef { {
|
|
574
|
-
* component?: import('preact').Component,
|
|
575
|
-
* entries: Array<EntryDefinition>,
|
|
576
|
-
* id: String,
|
|
577
|
-
* label: String,
|
|
578
|
-
* shouldOpen?: Boolean
|
|
579
|
-
* } } GroupDefinition
|
|
580
|
-
*
|
|
581
|
-
* @typedef { {
|
|
582
|
-
* [id: String]: GetDescriptionFunction
|
|
583
|
-
* } } DescriptionConfig
|
|
584
|
-
*
|
|
585
|
-
* @callback { {
|
|
586
|
-
* @param {string} id
|
|
587
|
-
* @param {Object} element
|
|
588
|
-
* @returns {string}
|
|
589
|
-
* } } GetDescriptionFunction
|
|
590
|
-
*
|
|
591
|
-
* @typedef { {
|
|
592
|
-
* getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
|
|
593
|
-
* getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
|
|
594
|
-
* } } PlaceholderProvider
|
|
595
|
-
*
|
|
572
|
+
/**
|
|
573
|
+
* @typedef { {
|
|
574
|
+
* component: import('preact').Component,
|
|
575
|
+
* id: String,
|
|
576
|
+
* isEdited?: Function
|
|
577
|
+
* } } EntryDefinition
|
|
578
|
+
*
|
|
579
|
+
* @typedef { {
|
|
580
|
+
* autoFocusEntry: String,
|
|
581
|
+
* autoOpen?: Boolean,
|
|
582
|
+
* entries: Array<EntryDefinition>,
|
|
583
|
+
* id: String,
|
|
584
|
+
* label: String,
|
|
585
|
+
* remove: (event: MouseEvent) => void
|
|
586
|
+
* } } ListItemDefinition
|
|
587
|
+
*
|
|
588
|
+
* @typedef { {
|
|
589
|
+
* add: (event: MouseEvent) => void,
|
|
590
|
+
* component: import('preact').Component,
|
|
591
|
+
* element: Object,
|
|
592
|
+
* id: String,
|
|
593
|
+
* items: Array<ListItemDefinition>,
|
|
594
|
+
* label: String,
|
|
595
|
+
* shouldSort?: Boolean,
|
|
596
|
+
* shouldOpen?: Boolean
|
|
597
|
+
* } } ListGroupDefinition
|
|
598
|
+
*
|
|
599
|
+
* @typedef { {
|
|
600
|
+
* component?: import('preact').Component,
|
|
601
|
+
* entries: Array<EntryDefinition>,
|
|
602
|
+
* id: String,
|
|
603
|
+
* label: String,
|
|
604
|
+
* shouldOpen?: Boolean
|
|
605
|
+
* } } GroupDefinition
|
|
606
|
+
*
|
|
607
|
+
* @typedef { {
|
|
608
|
+
* [id: String]: GetDescriptionFunction
|
|
609
|
+
* } } DescriptionConfig
|
|
610
|
+
*
|
|
611
|
+
* @callback { {
|
|
612
|
+
* @param {string} id
|
|
613
|
+
* @param {Object} element
|
|
614
|
+
* @returns {string}
|
|
615
|
+
* } } GetDescriptionFunction
|
|
616
|
+
*
|
|
617
|
+
* @typedef { {
|
|
618
|
+
* getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,
|
|
619
|
+
* getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition
|
|
620
|
+
* } } PlaceholderProvider
|
|
621
|
+
*
|
|
596
622
|
*/
|
|
597
623
|
|
|
598
|
-
/**
|
|
599
|
-
* A basic properties panel component. Describes *how* content will be rendered, accepts
|
|
600
|
-
* data from implementor to describe *what* will be rendered.
|
|
601
|
-
*
|
|
602
|
-
* @param {Object} props
|
|
603
|
-
* @param {Object|Array} props.element
|
|
604
|
-
* @param {import('./components/Header').HeaderProvider} props.headerProvider
|
|
605
|
-
* @param {PlaceholderProvider} [props.placeholderProvider]
|
|
606
|
-
* @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
|
|
607
|
-
* @param {Object} [props.layoutConfig]
|
|
608
|
-
* @param {Function} [props.layoutChanged]
|
|
609
|
-
* @param {DescriptionConfig} [props.descriptionConfig]
|
|
610
|
-
* @param {Function} [props.descriptionLoaded]
|
|
611
|
-
* @param {Object} [props.eventBus]
|
|
624
|
+
/**
|
|
625
|
+
* A basic properties panel component. Describes *how* content will be rendered, accepts
|
|
626
|
+
* data from implementor to describe *what* will be rendered.
|
|
627
|
+
*
|
|
628
|
+
* @param {Object} props
|
|
629
|
+
* @param {Object|Array} props.element
|
|
630
|
+
* @param {import('./components/Header').HeaderProvider} props.headerProvider
|
|
631
|
+
* @param {PlaceholderProvider} [props.placeholderProvider]
|
|
632
|
+
* @param {Array<GroupDefinition|ListGroupDefinition>} props.groups
|
|
633
|
+
* @param {Object} [props.layoutConfig]
|
|
634
|
+
* @param {Function} [props.layoutChanged]
|
|
635
|
+
* @param {DescriptionConfig} [props.descriptionConfig]
|
|
636
|
+
* @param {Function} [props.descriptionLoaded]
|
|
637
|
+
* @param {Object} [props.eventBus]
|
|
612
638
|
*/
|
|
613
639
|
function PropertiesPanel(props) {
|
|
614
640
|
const {
|
|
@@ -747,11 +773,11 @@ function createDescriptionContext(overrides = {}) {
|
|
|
747
773
|
|
|
748
774
|
// hooks //////////////////
|
|
749
775
|
|
|
750
|
-
/**
|
|
751
|
-
* This hook behaves like useLayoutEffect, but does not trigger on the first render.
|
|
752
|
-
*
|
|
753
|
-
* @param {Function} effect
|
|
754
|
-
* @param {Array} deps
|
|
776
|
+
/**
|
|
777
|
+
* This hook behaves like useLayoutEffect, but does not trigger on the first render.
|
|
778
|
+
*
|
|
779
|
+
* @param {Function} effect
|
|
780
|
+
* @param {Array} deps
|
|
755
781
|
*/
|
|
756
782
|
function useUpdateLayoutEffect(effect, deps) {
|
|
757
783
|
const isMounted = useRef(false);
|
|
@@ -825,15 +851,15 @@ function MenuItem({
|
|
|
825
851
|
});
|
|
826
852
|
}
|
|
827
853
|
|
|
828
|
-
/**
|
|
829
|
-
*
|
|
830
|
-
* @param {Array<null | Element>} ignoredElements
|
|
831
|
-
* @param {Function} callback
|
|
854
|
+
/**
|
|
855
|
+
*
|
|
856
|
+
* @param {Array<null | Element>} ignoredElements
|
|
857
|
+
* @param {Function} callback
|
|
832
858
|
*/
|
|
833
859
|
function useGlobalClick(ignoredElements, callback) {
|
|
834
860
|
useEffect(() => {
|
|
835
|
-
/**
|
|
836
|
-
* @param {MouseEvent} event
|
|
861
|
+
/**
|
|
862
|
+
* @param {MouseEvent} event
|
|
837
863
|
*/
|
|
838
864
|
function listener(event) {
|
|
839
865
|
if (ignoredElements.some(element => element && element.contains(event.target))) {
|
|
@@ -964,8 +990,8 @@ function ListItem(props) {
|
|
|
964
990
|
|
|
965
991
|
const noop$3 = () => {};
|
|
966
992
|
|
|
967
|
-
/**
|
|
968
|
-
* @param {import('../PropertiesPanel').ListGroupDefinition} props
|
|
993
|
+
/**
|
|
994
|
+
* @param {import('../PropertiesPanel').ListGroupDefinition} props
|
|
969
995
|
*/
|
|
970
996
|
function ListGroup(props) {
|
|
971
997
|
const {
|
|
@@ -1078,6 +1104,18 @@ function ListGroup(props) {
|
|
|
1078
1104
|
setAddTriggered(true);
|
|
1079
1105
|
add(e);
|
|
1080
1106
|
};
|
|
1107
|
+
const allErrors = useErrors();
|
|
1108
|
+
const hasError = items.some(item => {
|
|
1109
|
+
if (allErrors[item.id]) {
|
|
1110
|
+
return true;
|
|
1111
|
+
}
|
|
1112
|
+
if (!item.entries) {
|
|
1113
|
+
return;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
// also check if the error is nested, e.g. for name-value entries
|
|
1117
|
+
return item.entries.some(entry => allErrors[entry.id]);
|
|
1118
|
+
});
|
|
1081
1119
|
return jsxs("div", {
|
|
1082
1120
|
class: "bio-properties-panel-group",
|
|
1083
1121
|
"data-group-id": 'group-' + id,
|
|
@@ -1101,7 +1139,7 @@ function ListGroup(props) {
|
|
|
1101
1139
|
}) : null]
|
|
1102
1140
|
}) : null, hasItems ? jsx("div", {
|
|
1103
1141
|
title: `List contains ${items.length} item${items.length != 1 ? 's' : ''}`,
|
|
1104
|
-
class:
|
|
1142
|
+
class: classnames('bio-properties-panel-list-badge', hasError ? 'bio-properties-panel-list-badge--error' : ''),
|
|
1105
1143
|
children: items.length
|
|
1106
1144
|
}) : null, hasItems ? jsx("button", {
|
|
1107
1145
|
title: "Toggle section",
|
|
@@ -1142,8 +1180,8 @@ function ListGroup(props) {
|
|
|
1142
1180
|
|
|
1143
1181
|
// helpers ////////////////////
|
|
1144
1182
|
|
|
1145
|
-
/**
|
|
1146
|
-
* Sorts given items alphanumeric by label
|
|
1183
|
+
/**
|
|
1184
|
+
* Sorts given items alphanumeric by label
|
|
1147
1185
|
*/
|
|
1148
1186
|
function sortItems(items) {
|
|
1149
1187
|
return sortBy(items, i => i.label.toLowerCase());
|
|
@@ -1171,6 +1209,121 @@ function Description(props) {
|
|
|
1171
1209
|
}
|
|
1172
1210
|
}
|
|
1173
1211
|
|
|
1212
|
+
function TooltipWrapper(props) {
|
|
1213
|
+
if (!props.value) {
|
|
1214
|
+
return props.children;
|
|
1215
|
+
}
|
|
1216
|
+
return jsx(Tooltip, {
|
|
1217
|
+
...props
|
|
1218
|
+
});
|
|
1219
|
+
}
|
|
1220
|
+
function Tooltip(props) {
|
|
1221
|
+
const {
|
|
1222
|
+
value,
|
|
1223
|
+
labelId
|
|
1224
|
+
} = props;
|
|
1225
|
+
const [visible, setShow] = useState$1(false);
|
|
1226
|
+
let timeout = null;
|
|
1227
|
+
const wrapperRef = useRef(null);
|
|
1228
|
+
const tooltipRef = useRef(null);
|
|
1229
|
+
const showTooltip = async event => {
|
|
1230
|
+
const show = () => !visible && setShow(true);
|
|
1231
|
+
if (event instanceof MouseEvent) {
|
|
1232
|
+
timeout = setTimeout(show, 200);
|
|
1233
|
+
} else {
|
|
1234
|
+
show();
|
|
1235
|
+
}
|
|
1236
|
+
};
|
|
1237
|
+
const hideTooltip = () => setShow(false);
|
|
1238
|
+
const hideTooltipViaEscape = e => {
|
|
1239
|
+
e.code === 'Escape' && hideTooltip();
|
|
1240
|
+
};
|
|
1241
|
+
const isTooltipHovered = ({
|
|
1242
|
+
x,
|
|
1243
|
+
y
|
|
1244
|
+
}) => {
|
|
1245
|
+
const tooltip = tooltipRef.current;
|
|
1246
|
+
const wrapper = wrapperRef.current;
|
|
1247
|
+
return tooltip && (inBounds(x, y, wrapper.getBoundingClientRect()) || inBounds(x, y, tooltip.getBoundingClientRect()));
|
|
1248
|
+
};
|
|
1249
|
+
useEffect$1(() => {
|
|
1250
|
+
const {
|
|
1251
|
+
current
|
|
1252
|
+
} = wrapperRef;
|
|
1253
|
+
if (!current) {
|
|
1254
|
+
return;
|
|
1255
|
+
}
|
|
1256
|
+
const hideHoveredTooltip = e => {
|
|
1257
|
+
const isFocused = document.activeElement === wrapperRef.current || document.activeElement.closest('.bio-properties-panel-tooltip');
|
|
1258
|
+
if (visible && !isTooltipHovered({
|
|
1259
|
+
x: e.x,
|
|
1260
|
+
y: e.y
|
|
1261
|
+
}) && !isFocused) {
|
|
1262
|
+
hideTooltip();
|
|
1263
|
+
}
|
|
1264
|
+
};
|
|
1265
|
+
const hideFocusedTooltip = e => {
|
|
1266
|
+
const {
|
|
1267
|
+
relatedTarget
|
|
1268
|
+
} = e;
|
|
1269
|
+
const isTooltipChild = el => el && !!el.closest('.bio-properties-panel-tooltip');
|
|
1270
|
+
if (visible && !isHovered(wrapperRef.current) && !isTooltipChild(relatedTarget)) {
|
|
1271
|
+
hideTooltip();
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1274
|
+
document.addEventListener('focusout', hideFocusedTooltip);
|
|
1275
|
+
document.addEventListener('mousemove', hideHoveredTooltip);
|
|
1276
|
+
return () => {
|
|
1277
|
+
document.removeEventListener('mousemove', hideHoveredTooltip);
|
|
1278
|
+
document.removeEventListener('focusout', hideFocusedTooltip);
|
|
1279
|
+
};
|
|
1280
|
+
}, [wrapperRef.current, visible]);
|
|
1281
|
+
return jsxs("div", {
|
|
1282
|
+
class: "bio-properties-panel-tooltip-wrapper",
|
|
1283
|
+
tabIndex: "0",
|
|
1284
|
+
ref: wrapperRef,
|
|
1285
|
+
onMouseEnter: showTooltip,
|
|
1286
|
+
onMouseLeave: () => clearTimeout(timeout),
|
|
1287
|
+
onFocus: showTooltip,
|
|
1288
|
+
onKeyDown: hideTooltipViaEscape,
|
|
1289
|
+
children: [props.children, visible ? jsxs("div", {
|
|
1290
|
+
class: "bio-properties-panel-tooltip",
|
|
1291
|
+
role: "tooltip",
|
|
1292
|
+
id: "bio-properties-panel-tooltip",
|
|
1293
|
+
"aria-labelledby": labelId,
|
|
1294
|
+
style: getTooltipPosition(wrapperRef.current),
|
|
1295
|
+
ref: tooltipRef,
|
|
1296
|
+
onClick: e => e.stopPropagation(),
|
|
1297
|
+
children: [jsx("div", {
|
|
1298
|
+
class: "bio-properties-panel-tooltip-content",
|
|
1299
|
+
children: value
|
|
1300
|
+
}), jsx("div", {
|
|
1301
|
+
class: "bio-properties-panel-tooltip-arrow"
|
|
1302
|
+
})]
|
|
1303
|
+
}) : null]
|
|
1304
|
+
});
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
// helper
|
|
1308
|
+
function inBounds(x, y, bounds) {
|
|
1309
|
+
const {
|
|
1310
|
+
top,
|
|
1311
|
+
right,
|
|
1312
|
+
bottom,
|
|
1313
|
+
left
|
|
1314
|
+
} = bounds;
|
|
1315
|
+
return x >= left && x <= right && y >= top && y <= bottom;
|
|
1316
|
+
}
|
|
1317
|
+
function getTooltipPosition(refElement) {
|
|
1318
|
+
const refPosition = refElement.getBoundingClientRect();
|
|
1319
|
+
const right = `calc(100% - ${refPosition.x}px)`;
|
|
1320
|
+
const top = `${refPosition.top - 10}px`;
|
|
1321
|
+
return `right: ${right}; top: ${top};`;
|
|
1322
|
+
}
|
|
1323
|
+
function isHovered(element) {
|
|
1324
|
+
return element.matches(':hover');
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1174
1327
|
function Checkbox(props) {
|
|
1175
1328
|
const {
|
|
1176
1329
|
id,
|
|
@@ -1179,7 +1332,8 @@ function Checkbox(props) {
|
|
|
1179
1332
|
disabled,
|
|
1180
1333
|
value = false,
|
|
1181
1334
|
onFocus,
|
|
1182
|
-
onBlur
|
|
1335
|
+
onBlur,
|
|
1336
|
+
tooltip
|
|
1183
1337
|
} = props;
|
|
1184
1338
|
const [localValue, setLocalValue] = useState(value);
|
|
1185
1339
|
const handleChangeCallback = ({
|
|
@@ -1214,22 +1368,27 @@ function Checkbox(props) {
|
|
|
1214
1368
|
}), jsx("label", {
|
|
1215
1369
|
for: prefixId$7(id),
|
|
1216
1370
|
class: "bio-properties-panel-label",
|
|
1217
|
-
children:
|
|
1371
|
+
children: jsx(TooltipWrapper, {
|
|
1372
|
+
value: tooltip,
|
|
1373
|
+
labelId: prefixId$7(id),
|
|
1374
|
+
children: label
|
|
1375
|
+
})
|
|
1218
1376
|
})]
|
|
1219
1377
|
});
|
|
1220
1378
|
}
|
|
1221
1379
|
|
|
1222
|
-
/**
|
|
1223
|
-
* @param {Object} props
|
|
1224
|
-
* @param {Object} props.element
|
|
1225
|
-
* @param {String} props.id
|
|
1226
|
-
* @param {String} props.description
|
|
1227
|
-
* @param {String} props.label
|
|
1228
|
-
* @param {Function} props.getValue
|
|
1229
|
-
* @param {Function} props.setValue
|
|
1230
|
-
* @param {Function} props.onFocus
|
|
1231
|
-
* @param {Function} props.onBlur
|
|
1232
|
-
* @param {
|
|
1380
|
+
/**
|
|
1381
|
+
* @param {Object} props
|
|
1382
|
+
* @param {Object} props.element
|
|
1383
|
+
* @param {String} props.id
|
|
1384
|
+
* @param {String} props.description
|
|
1385
|
+
* @param {String} props.label
|
|
1386
|
+
* @param {Function} props.getValue
|
|
1387
|
+
* @param {Function} props.setValue
|
|
1388
|
+
* @param {Function} props.onFocus
|
|
1389
|
+
* @param {Function} props.onBlur
|
|
1390
|
+
* @param {string|import('preact').Component} props.tooltip
|
|
1391
|
+
* @param {boolean} [props.disabled]
|
|
1233
1392
|
*/
|
|
1234
1393
|
function CheckboxEntry(props) {
|
|
1235
1394
|
const {
|
|
@@ -1241,7 +1400,8 @@ function CheckboxEntry(props) {
|
|
|
1241
1400
|
setValue,
|
|
1242
1401
|
disabled,
|
|
1243
1402
|
onFocus,
|
|
1244
|
-
onBlur
|
|
1403
|
+
onBlur,
|
|
1404
|
+
tooltip
|
|
1245
1405
|
} = props;
|
|
1246
1406
|
const value = getValue(element);
|
|
1247
1407
|
const error = useError(id);
|
|
@@ -1255,7 +1415,8 @@ function CheckboxEntry(props) {
|
|
|
1255
1415
|
onChange: setValue,
|
|
1256
1416
|
onFocus: onFocus,
|
|
1257
1417
|
onBlur: onBlur,
|
|
1258
|
-
value: value
|
|
1418
|
+
value: value,
|
|
1419
|
+
tooltip: tooltip
|
|
1259
1420
|
}, element), error && jsx("div", {
|
|
1260
1421
|
class: "bio-properties-panel-error",
|
|
1261
1422
|
children: error
|
|
@@ -1400,10 +1561,10 @@ const CodeEditor = forwardRef((props, ref) => {
|
|
|
1400
1561
|
useEffect(() => {
|
|
1401
1562
|
let editor;
|
|
1402
1563
|
|
|
1403
|
-
/* Trigger FEEL toggle when
|
|
1404
|
-
*
|
|
1405
|
-
* - `backspace` is pressed
|
|
1406
|
-
* - AND the cursor is at the beginning of the input
|
|
1564
|
+
/* Trigger FEEL toggle when
|
|
1565
|
+
*
|
|
1566
|
+
* - `backspace` is pressed
|
|
1567
|
+
* - AND the cursor is at the beginning of the input
|
|
1407
1568
|
*/
|
|
1408
1569
|
const onKeyDown = e => {
|
|
1409
1570
|
if (e.key !== 'Backspace' || !editor) {
|
|
@@ -1476,10 +1637,10 @@ function FeelIndicator(props) {
|
|
|
1476
1637
|
|
|
1477
1638
|
const noop$2 = () => {};
|
|
1478
1639
|
|
|
1479
|
-
/**
|
|
1480
|
-
* @param {Object} props
|
|
1481
|
-
* @param {Object} props.label
|
|
1482
|
-
* @param {String} props.feel
|
|
1640
|
+
/**
|
|
1641
|
+
* @param {Object} props
|
|
1642
|
+
* @param {Object} props.label
|
|
1643
|
+
* @param {String} props.feel
|
|
1483
1644
|
*/
|
|
1484
1645
|
function FeelIcon(props) {
|
|
1485
1646
|
const {
|
|
@@ -1517,7 +1678,8 @@ function ToggleSwitch(props) {
|
|
|
1517
1678
|
inline,
|
|
1518
1679
|
onFocus,
|
|
1519
1680
|
onBlur,
|
|
1520
|
-
inputRef
|
|
1681
|
+
inputRef,
|
|
1682
|
+
tooltip
|
|
1521
1683
|
} = props;
|
|
1522
1684
|
const [localValue, setLocalValue] = useState(value);
|
|
1523
1685
|
const handleInputCallback = async () => {
|
|
@@ -1540,7 +1702,11 @@ function ToggleSwitch(props) {
|
|
|
1540
1702
|
children: [jsx("label", {
|
|
1541
1703
|
class: "bio-properties-panel-label",
|
|
1542
1704
|
for: prefixId$6(id),
|
|
1543
|
-
children:
|
|
1705
|
+
children: jsx(TooltipWrapper, {
|
|
1706
|
+
value: tooltip,
|
|
1707
|
+
labelId: prefixId$6(id),
|
|
1708
|
+
children: label
|
|
1709
|
+
})
|
|
1544
1710
|
}), jsxs("div", {
|
|
1545
1711
|
class: "bio-properties-panel-field-wrapper",
|
|
1546
1712
|
children: [jsxs("label", {
|
|
@@ -1566,18 +1732,19 @@ function ToggleSwitch(props) {
|
|
|
1566
1732
|
});
|
|
1567
1733
|
}
|
|
1568
1734
|
|
|
1569
|
-
/**
|
|
1570
|
-
* @param {Object} props
|
|
1571
|
-
* @param {Object} props.element
|
|
1572
|
-
* @param {String} props.id
|
|
1573
|
-
* @param {String} props.description
|
|
1574
|
-
* @param {String} props.label
|
|
1575
|
-
* @param {String} props.switcherLabel
|
|
1576
|
-
* @param {Boolean} props.inline
|
|
1577
|
-
* @param {Function} props.getValue
|
|
1578
|
-
* @param {Function} props.setValue
|
|
1579
|
-
* @param {Function} props.onFocus
|
|
1580
|
-
* @param {Function} props.onBlur
|
|
1735
|
+
/**
|
|
1736
|
+
* @param {Object} props
|
|
1737
|
+
* @param {Object} props.element
|
|
1738
|
+
* @param {String} props.id
|
|
1739
|
+
* @param {String} props.description
|
|
1740
|
+
* @param {String} props.label
|
|
1741
|
+
* @param {String} props.switcherLabel
|
|
1742
|
+
* @param {Boolean} props.inline
|
|
1743
|
+
* @param {Function} props.getValue
|
|
1744
|
+
* @param {Function} props.setValue
|
|
1745
|
+
* @param {Function} props.onFocus
|
|
1746
|
+
* @param {Function} props.onBlur
|
|
1747
|
+
* @param {string|import('preact').Component} props.tooltip
|
|
1581
1748
|
*/
|
|
1582
1749
|
function ToggleSwitchEntry(props) {
|
|
1583
1750
|
const {
|
|
@@ -1590,7 +1757,8 @@ function ToggleSwitchEntry(props) {
|
|
|
1590
1757
|
getValue,
|
|
1591
1758
|
setValue,
|
|
1592
1759
|
onFocus,
|
|
1593
|
-
onBlur
|
|
1760
|
+
onBlur,
|
|
1761
|
+
tooltip
|
|
1594
1762
|
} = props;
|
|
1595
1763
|
const value = getValue(element);
|
|
1596
1764
|
return jsxs("div", {
|
|
@@ -1604,7 +1772,8 @@ function ToggleSwitchEntry(props) {
|
|
|
1604
1772
|
onFocus: onFocus,
|
|
1605
1773
|
onBlur: onBlur,
|
|
1606
1774
|
switcherLabel: switcherLabel,
|
|
1607
|
-
inline: inline
|
|
1775
|
+
inline: inline,
|
|
1776
|
+
tooltip: tooltip
|
|
1608
1777
|
}), jsx(Description, {
|
|
1609
1778
|
forId: id,
|
|
1610
1779
|
element: element,
|
|
@@ -1686,22 +1855,22 @@ function NumberField(props) {
|
|
|
1686
1855
|
});
|
|
1687
1856
|
}
|
|
1688
1857
|
|
|
1689
|
-
/**
|
|
1690
|
-
* @param {Object} props
|
|
1691
|
-
* @param {Boolean} props.debounce
|
|
1692
|
-
* @param {String} props.description
|
|
1693
|
-
* @param {Boolean} props.disabled
|
|
1694
|
-
* @param {Object} props.element
|
|
1695
|
-
* @param {Function} props.getValue
|
|
1696
|
-
* @param {String} props.id
|
|
1697
|
-
* @param {String} props.label
|
|
1698
|
-
* @param {String} props.max
|
|
1699
|
-
* @param {String} props.min
|
|
1700
|
-
* @param {Function} props.setValue
|
|
1701
|
-
* @param {Function} props.onFocus
|
|
1702
|
-
* @param {Function} props.onBlur
|
|
1703
|
-
* @param {String} props.step
|
|
1704
|
-
* @param {Function} props.validate
|
|
1858
|
+
/**
|
|
1859
|
+
* @param {Object} props
|
|
1860
|
+
* @param {Boolean} props.debounce
|
|
1861
|
+
* @param {String} props.description
|
|
1862
|
+
* @param {Boolean} props.disabled
|
|
1863
|
+
* @param {Object} props.element
|
|
1864
|
+
* @param {Function} props.getValue
|
|
1865
|
+
* @param {String} props.id
|
|
1866
|
+
* @param {String} props.label
|
|
1867
|
+
* @param {String} props.max
|
|
1868
|
+
* @param {String} props.min
|
|
1869
|
+
* @param {Function} props.setValue
|
|
1870
|
+
* @param {Function} props.onFocus
|
|
1871
|
+
* @param {Function} props.onBlur
|
|
1872
|
+
* @param {String} props.step
|
|
1873
|
+
* @param {Function} props.validate
|
|
1705
1874
|
*/
|
|
1706
1875
|
function NumberFieldEntry(props) {
|
|
1707
1876
|
const {
|
|
@@ -1720,11 +1889,9 @@ function NumberFieldEntry(props) {
|
|
|
1720
1889
|
onBlur,
|
|
1721
1890
|
validate
|
|
1722
1891
|
} = props;
|
|
1723
|
-
const [cachedInvalidValue, setCachedInvalidValue] = useState(null);
|
|
1724
1892
|
const globalError = useError(id);
|
|
1725
1893
|
const [localError, setLocalError] = useState(null);
|
|
1726
1894
|
let value = getValue(element);
|
|
1727
|
-
const previousValue = usePrevious(value);
|
|
1728
1895
|
useEffect(() => {
|
|
1729
1896
|
if (isFunction(validate)) {
|
|
1730
1897
|
const newValidationError = validate(value) || null;
|
|
@@ -1736,16 +1903,9 @@ function NumberFieldEntry(props) {
|
|
|
1736
1903
|
if (isFunction(validate)) {
|
|
1737
1904
|
newValidationError = validate(newValue) || null;
|
|
1738
1905
|
}
|
|
1739
|
-
|
|
1740
|
-
setCachedInvalidValue(newValue);
|
|
1741
|
-
} else {
|
|
1742
|
-
setValue(newValue);
|
|
1743
|
-
}
|
|
1906
|
+
setValue(newValue, newValidationError);
|
|
1744
1907
|
setLocalError(newValidationError);
|
|
1745
1908
|
};
|
|
1746
|
-
if (previousValue === value && localError) {
|
|
1747
|
-
value = cachedInvalidValue;
|
|
1748
|
-
}
|
|
1749
1909
|
const error = globalError || localError;
|
|
1750
1910
|
return jsxs("div", {
|
|
1751
1911
|
class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),
|
|
@@ -1795,7 +1955,8 @@ function FeelTextfield(props) {
|
|
|
1795
1955
|
disabled = false,
|
|
1796
1956
|
variables,
|
|
1797
1957
|
tooltipContainer,
|
|
1798
|
-
OptionalComponent = OptionalFeelInput
|
|
1958
|
+
OptionalComponent = OptionalFeelInput,
|
|
1959
|
+
tooltip
|
|
1799
1960
|
} = props;
|
|
1800
1961
|
const [localValue, _setLocalValue] = useState(value);
|
|
1801
1962
|
const editorRef = useShowEntryEvent(id);
|
|
@@ -1911,7 +2072,11 @@ function FeelTextfield(props) {
|
|
|
1911
2072
|
for: prefixId$4(id),
|
|
1912
2073
|
class: "bio-properties-panel-label",
|
|
1913
2074
|
onClick: () => setFocus(),
|
|
1914
|
-
children: [
|
|
2075
|
+
children: [jsx(TooltipWrapper, {
|
|
2076
|
+
value: tooltip,
|
|
2077
|
+
labelId: prefixId$4(id),
|
|
2078
|
+
children: label
|
|
2079
|
+
}), jsx(FeelIcon, {
|
|
1915
2080
|
label: label,
|
|
1916
2081
|
feel: feel,
|
|
1917
2082
|
onClick: handleFeelToggle,
|
|
@@ -2153,24 +2318,25 @@ const OptionalFeelCheckbox = forwardRef((props, ref) => {
|
|
|
2153
2318
|
});
|
|
2154
2319
|
});
|
|
2155
2320
|
|
|
2156
|
-
/**
|
|
2157
|
-
* @param {Object} props
|
|
2158
|
-
* @param {Object} props.element
|
|
2159
|
-
* @param {String} props.id
|
|
2160
|
-
* @param {String} props.description
|
|
2161
|
-
* @param {Boolean} props.debounce
|
|
2162
|
-
* @param {Boolean} props.disabled
|
|
2163
|
-
* @param {Boolean} props.feel
|
|
2164
|
-
* @param {String} props.label
|
|
2165
|
-
* @param {Function} props.getValue
|
|
2166
|
-
* @param {Function} props.setValue
|
|
2167
|
-
* @param {Function} props.tooltipContainer
|
|
2168
|
-
* @param {Function} props.validate
|
|
2169
|
-
* @param {Function} props.show
|
|
2170
|
-
* @param {Function} props.example
|
|
2171
|
-
* @param {Function} props.variables
|
|
2172
|
-
* @param {Function} props.onFocus
|
|
2173
|
-
* @param {Function} props.onBlur
|
|
2321
|
+
/**
|
|
2322
|
+
* @param {Object} props
|
|
2323
|
+
* @param {Object} props.element
|
|
2324
|
+
* @param {String} props.id
|
|
2325
|
+
* @param {String} props.description
|
|
2326
|
+
* @param {Boolean} props.debounce
|
|
2327
|
+
* @param {Boolean} props.disabled
|
|
2328
|
+
* @param {Boolean} props.feel
|
|
2329
|
+
* @param {String} props.label
|
|
2330
|
+
* @param {Function} props.getValue
|
|
2331
|
+
* @param {Function} props.setValue
|
|
2332
|
+
* @param {Function} props.tooltipContainer
|
|
2333
|
+
* @param {Function} props.validate
|
|
2334
|
+
* @param {Function} props.show
|
|
2335
|
+
* @param {Function} props.example
|
|
2336
|
+
* @param {Function} props.variables
|
|
2337
|
+
* @param {Function} props.onFocus
|
|
2338
|
+
* @param {Function} props.onBlur
|
|
2339
|
+
* @param {string|import('preact').Component} props.tooltip
|
|
2174
2340
|
*/
|
|
2175
2341
|
function FeelEntry(props) {
|
|
2176
2342
|
const {
|
|
@@ -2191,13 +2357,12 @@ function FeelEntry(props) {
|
|
|
2191
2357
|
example,
|
|
2192
2358
|
variables,
|
|
2193
2359
|
onFocus,
|
|
2194
|
-
onBlur
|
|
2360
|
+
onBlur,
|
|
2361
|
+
tooltip
|
|
2195
2362
|
} = props;
|
|
2196
|
-
const [cachedInvalidValue, setCachedInvalidValue] = useState(null);
|
|
2197
2363
|
const [validationError, setValidationError] = useState(null);
|
|
2198
2364
|
const [localError, setLocalError] = useState(null);
|
|
2199
2365
|
let value = getValue(element);
|
|
2200
|
-
const previousValue = usePrevious(value);
|
|
2201
2366
|
useEffect(() => {
|
|
2202
2367
|
if (isFunction(validate)) {
|
|
2203
2368
|
const newValidationError = validate(value) || null;
|
|
@@ -2209,22 +2374,16 @@ function FeelEntry(props) {
|
|
|
2209
2374
|
if (isFunction(validate)) {
|
|
2210
2375
|
newValidationError = validate(newValue) || null;
|
|
2211
2376
|
}
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
if (newValue !== value) {
|
|
2217
|
-
setValue(newValue);
|
|
2218
|
-
}
|
|
2377
|
+
|
|
2378
|
+
// don't create multiple commandStack entries for the same value
|
|
2379
|
+
if (newValue !== value) {
|
|
2380
|
+
setValue(newValue, newValidationError);
|
|
2219
2381
|
}
|
|
2220
2382
|
setValidationError(newValidationError);
|
|
2221
2383
|
});
|
|
2222
2384
|
const onError = useCallback(err => {
|
|
2223
2385
|
setLocalError(err);
|
|
2224
2386
|
}, []);
|
|
2225
|
-
if (previousValue === value && validationError) {
|
|
2226
|
-
value = cachedInvalidValue;
|
|
2227
|
-
}
|
|
2228
2387
|
const temporaryError = useError(id);
|
|
2229
2388
|
const error = localError || temporaryError || validationError;
|
|
2230
2389
|
return jsxs("div", {
|
|
@@ -2249,7 +2408,8 @@ function FeelEntry(props) {
|
|
|
2249
2408
|
value: value,
|
|
2250
2409
|
variables: variables,
|
|
2251
2410
|
tooltipContainer: tooltipContainer,
|
|
2252
|
-
OptionalComponent: props.OptionalComponent
|
|
2411
|
+
OptionalComponent: props.OptionalComponent,
|
|
2412
|
+
tooltip: tooltip
|
|
2253
2413
|
}), error && jsx("div", {
|
|
2254
2414
|
class: "bio-properties-panel-error",
|
|
2255
2415
|
children: error
|
|
@@ -2261,27 +2421,27 @@ function FeelEntry(props) {
|
|
|
2261
2421
|
});
|
|
2262
2422
|
}
|
|
2263
2423
|
|
|
2264
|
-
/**
|
|
2265
|
-
* @param {Object} props
|
|
2266
|
-
* @param {Object} props.element
|
|
2267
|
-
* @param {String} props.id
|
|
2268
|
-
* @param {String} props.description
|
|
2269
|
-
* @param {Boolean} props.debounce
|
|
2270
|
-
* @param {Boolean} props.disabled
|
|
2271
|
-
* @param {String} props.max
|
|
2272
|
-
* @param {String} props.min
|
|
2273
|
-
* @param {String} props.step
|
|
2274
|
-
* @param {Boolean} props.feel
|
|
2275
|
-
* @param {String} props.label
|
|
2276
|
-
* @param {Function} props.getValue
|
|
2277
|
-
* @param {Function} props.setValue
|
|
2278
|
-
* @param {Function} props.tooltipContainer
|
|
2279
|
-
* @param {Function} props.validate
|
|
2280
|
-
* @param {Function} props.show
|
|
2281
|
-
* @param {Function} props.example
|
|
2282
|
-
* @param {Function} props.variables
|
|
2283
|
-
* @param {Function} props.onFocus
|
|
2284
|
-
* @param {Function} props.onBlur
|
|
2424
|
+
/**
|
|
2425
|
+
* @param {Object} props
|
|
2426
|
+
* @param {Object} props.element
|
|
2427
|
+
* @param {String} props.id
|
|
2428
|
+
* @param {String} props.description
|
|
2429
|
+
* @param {Boolean} props.debounce
|
|
2430
|
+
* @param {Boolean} props.disabled
|
|
2431
|
+
* @param {String} props.max
|
|
2432
|
+
* @param {String} props.min
|
|
2433
|
+
* @param {String} props.step
|
|
2434
|
+
* @param {Boolean} props.feel
|
|
2435
|
+
* @param {String} props.label
|
|
2436
|
+
* @param {Function} props.getValue
|
|
2437
|
+
* @param {Function} props.setValue
|
|
2438
|
+
* @param {Function} props.tooltipContainer
|
|
2439
|
+
* @param {Function} props.validate
|
|
2440
|
+
* @param {Function} props.show
|
|
2441
|
+
* @param {Function} props.example
|
|
2442
|
+
* @param {Function} props.variables
|
|
2443
|
+
* @param {Function} props.onFocus
|
|
2444
|
+
* @param {Function} props.onBlur
|
|
2285
2445
|
*/
|
|
2286
2446
|
function FeelNumberEntry(props) {
|
|
2287
2447
|
return jsx(FeelEntry, {
|
|
@@ -2291,24 +2451,24 @@ function FeelNumberEntry(props) {
|
|
|
2291
2451
|
});
|
|
2292
2452
|
}
|
|
2293
2453
|
|
|
2294
|
-
/**
|
|
2295
|
-
* @param {Object} props
|
|
2296
|
-
* @param {Object} props.element
|
|
2297
|
-
* @param {String} props.id
|
|
2298
|
-
* @param {String} props.description
|
|
2299
|
-
* @param {Boolean} props.debounce
|
|
2300
|
-
* @param {Boolean} props.disabled
|
|
2301
|
-
* @param {Boolean} props.feel
|
|
2302
|
-
* @param {String} props.label
|
|
2303
|
-
* @param {Function} props.getValue
|
|
2304
|
-
* @param {Function} props.setValue
|
|
2305
|
-
* @param {Function} props.tooltipContainer
|
|
2306
|
-
* @param {Function} props.validate
|
|
2307
|
-
* @param {Function} props.show
|
|
2308
|
-
* @param {Function} props.example
|
|
2309
|
-
* @param {Function} props.variables
|
|
2310
|
-
* @param {Function} props.onFocus
|
|
2311
|
-
* @param {Function} props.onBlur
|
|
2454
|
+
/**
|
|
2455
|
+
* @param {Object} props
|
|
2456
|
+
* @param {Object} props.element
|
|
2457
|
+
* @param {String} props.id
|
|
2458
|
+
* @param {String} props.description
|
|
2459
|
+
* @param {Boolean} props.debounce
|
|
2460
|
+
* @param {Boolean} props.disabled
|
|
2461
|
+
* @param {Boolean} props.feel
|
|
2462
|
+
* @param {String} props.label
|
|
2463
|
+
* @param {Function} props.getValue
|
|
2464
|
+
* @param {Function} props.setValue
|
|
2465
|
+
* @param {Function} props.tooltipContainer
|
|
2466
|
+
* @param {Function} props.validate
|
|
2467
|
+
* @param {Function} props.show
|
|
2468
|
+
* @param {Function} props.example
|
|
2469
|
+
* @param {Function} props.variables
|
|
2470
|
+
* @param {Function} props.onFocus
|
|
2471
|
+
* @param {Function} props.onBlur
|
|
2312
2472
|
*/
|
|
2313
2473
|
function FeelTextAreaEntry(props) {
|
|
2314
2474
|
return jsx(FeelEntry, {
|
|
@@ -2318,24 +2478,24 @@ function FeelTextAreaEntry(props) {
|
|
|
2318
2478
|
});
|
|
2319
2479
|
}
|
|
2320
2480
|
|
|
2321
|
-
/**
|
|
2322
|
-
* @param {Object} props
|
|
2323
|
-
* @param {Object} props.element
|
|
2324
|
-
* @param {String} props.id
|
|
2325
|
-
* @param {String} props.description
|
|
2326
|
-
* @param {Boolean} props.debounce
|
|
2327
|
-
* @param {Boolean} props.disabled
|
|
2328
|
-
* @param {Boolean} props.feel
|
|
2329
|
-
* @param {String} props.label
|
|
2330
|
-
* @param {Function} props.getValue
|
|
2331
|
-
* @param {Function} props.setValue
|
|
2332
|
-
* @param {Function} props.tooltipContainer
|
|
2333
|
-
* @param {Function} props.validate
|
|
2334
|
-
* @param {Function} props.show
|
|
2335
|
-
* @param {Function} props.example
|
|
2336
|
-
* @param {Function} props.variables
|
|
2337
|
-
* @param {Function} props.onFocus
|
|
2338
|
-
* @param {Function} props.onBlur
|
|
2481
|
+
/**
|
|
2482
|
+
* @param {Object} props
|
|
2483
|
+
* @param {Object} props.element
|
|
2484
|
+
* @param {String} props.id
|
|
2485
|
+
* @param {String} props.description
|
|
2486
|
+
* @param {Boolean} props.debounce
|
|
2487
|
+
* @param {Boolean} props.disabled
|
|
2488
|
+
* @param {Boolean} props.feel
|
|
2489
|
+
* @param {String} props.label
|
|
2490
|
+
* @param {Function} props.getValue
|
|
2491
|
+
* @param {Function} props.setValue
|
|
2492
|
+
* @param {Function} props.tooltipContainer
|
|
2493
|
+
* @param {Function} props.validate
|
|
2494
|
+
* @param {Function} props.show
|
|
2495
|
+
* @param {Function} props.example
|
|
2496
|
+
* @param {Function} props.variables
|
|
2497
|
+
* @param {Function} props.onFocus
|
|
2498
|
+
* @param {Function} props.onBlur
|
|
2339
2499
|
*/
|
|
2340
2500
|
function FeelToggleSwitchEntry(props) {
|
|
2341
2501
|
return jsx(FeelEntry, {
|
|
@@ -2345,24 +2505,24 @@ function FeelToggleSwitchEntry(props) {
|
|
|
2345
2505
|
});
|
|
2346
2506
|
}
|
|
2347
2507
|
|
|
2348
|
-
/**
|
|
2349
|
-
* @param {Object} props
|
|
2350
|
-
* @param {Object} props.element
|
|
2351
|
-
* @param {String} props.id
|
|
2352
|
-
* @param {String} props.description
|
|
2353
|
-
* @param {Boolean} props.debounce
|
|
2354
|
-
* @param {Boolean} props.disabled
|
|
2355
|
-
* @param {Boolean} props.feel
|
|
2356
|
-
* @param {String} props.label
|
|
2357
|
-
* @param {Function} props.getValue
|
|
2358
|
-
* @param {Function} props.setValue
|
|
2359
|
-
* @param {Function} props.tooltipContainer
|
|
2360
|
-
* @param {Function} props.validate
|
|
2361
|
-
* @param {Function} props.show
|
|
2362
|
-
* @param {Function} props.example
|
|
2363
|
-
* @param {Function} props.variables
|
|
2364
|
-
* @param {Function} props.onFocus
|
|
2365
|
-
* @param {Function} props.onBlur
|
|
2508
|
+
/**
|
|
2509
|
+
* @param {Object} props
|
|
2510
|
+
* @param {Object} props.element
|
|
2511
|
+
* @param {String} props.id
|
|
2512
|
+
* @param {String} props.description
|
|
2513
|
+
* @param {Boolean} props.debounce
|
|
2514
|
+
* @param {Boolean} props.disabled
|
|
2515
|
+
* @param {Boolean} props.feel
|
|
2516
|
+
* @param {String} props.label
|
|
2517
|
+
* @param {Function} props.getValue
|
|
2518
|
+
* @param {Function} props.setValue
|
|
2519
|
+
* @param {Function} props.tooltipContainer
|
|
2520
|
+
* @param {Function} props.validate
|
|
2521
|
+
* @param {Function} props.show
|
|
2522
|
+
* @param {Function} props.example
|
|
2523
|
+
* @param {Function} props.variables
|
|
2524
|
+
* @param {Function} props.onFocus
|
|
2525
|
+
* @param {Function} props.onBlur
|
|
2366
2526
|
*/
|
|
2367
2527
|
function FeelCheckboxEntry(props) {
|
|
2368
2528
|
return jsx(FeelEntry, {
|
|
@@ -2372,26 +2532,26 @@ function FeelCheckboxEntry(props) {
|
|
|
2372
2532
|
});
|
|
2373
2533
|
}
|
|
2374
2534
|
|
|
2375
|
-
/**
|
|
2376
|
-
* @param {Object} props
|
|
2377
|
-
* @param {Object} props.element
|
|
2378
|
-
* @param {String} props.id
|
|
2379
|
-
* @param {String} props.description
|
|
2380
|
-
* @param {String} props.hostLanguage
|
|
2381
|
-
* @param {Boolean} props.singleLine
|
|
2382
|
-
* @param {Boolean} props.debounce
|
|
2383
|
-
* @param {Boolean} props.disabled
|
|
2384
|
-
* @param {Boolean} props.feel
|
|
2385
|
-
* @param {String} props.label
|
|
2386
|
-
* @param {Function} props.getValue
|
|
2387
|
-
* @param {Function} props.setValue
|
|
2388
|
-
* @param {Function} props.tooltipContainer
|
|
2389
|
-
* @param {Function} props.validate
|
|
2390
|
-
* @param {Function} props.show
|
|
2391
|
-
* @param {Function} props.example
|
|
2392
|
-
* @param {Function} props.variables
|
|
2393
|
-
* @param {Function} props.onFocus
|
|
2394
|
-
* @param {Function} props.onBlur
|
|
2535
|
+
/**
|
|
2536
|
+
* @param {Object} props
|
|
2537
|
+
* @param {Object} props.element
|
|
2538
|
+
* @param {String} props.id
|
|
2539
|
+
* @param {String} props.description
|
|
2540
|
+
* @param {String} props.hostLanguage
|
|
2541
|
+
* @param {Boolean} props.singleLine
|
|
2542
|
+
* @param {Boolean} props.debounce
|
|
2543
|
+
* @param {Boolean} props.disabled
|
|
2544
|
+
* @param {Boolean} props.feel
|
|
2545
|
+
* @param {String} props.label
|
|
2546
|
+
* @param {Function} props.getValue
|
|
2547
|
+
* @param {Function} props.setValue
|
|
2548
|
+
* @param {Function} props.tooltipContainer
|
|
2549
|
+
* @param {Function} props.validate
|
|
2550
|
+
* @param {Function} props.show
|
|
2551
|
+
* @param {Function} props.example
|
|
2552
|
+
* @param {Function} props.variables
|
|
2553
|
+
* @param {Function} props.onFocus
|
|
2554
|
+
* @param {Function} props.onBlur
|
|
2395
2555
|
*/
|
|
2396
2556
|
function FeelTemplatingEntry(props) {
|
|
2397
2557
|
return jsx(FeelEntry, {
|
|
@@ -2418,19 +2578,19 @@ function prefixId$4(id) {
|
|
|
2418
2578
|
|
|
2419
2579
|
const noop = () => {};
|
|
2420
2580
|
|
|
2421
|
-
/**
|
|
2422
|
-
* @param {Object} props
|
|
2423
|
-
* @param {Object} props.element
|
|
2424
|
-
* @param {String} props.id
|
|
2425
|
-
* @param {String} props.description
|
|
2426
|
-
* @param {Boolean} props.debounce
|
|
2427
|
-
* @param {Boolean} props.disabled
|
|
2428
|
-
* @param {String} props.label
|
|
2429
|
-
* @param {Function} props.getValue
|
|
2430
|
-
* @param {Function} props.setValue
|
|
2431
|
-
* @param {Function} props.tooltipContainer
|
|
2432
|
-
* @param {Function} props.validate
|
|
2433
|
-
* @param {Function} props.show
|
|
2581
|
+
/**
|
|
2582
|
+
* @param {Object} props
|
|
2583
|
+
* @param {Object} props.element
|
|
2584
|
+
* @param {String} props.id
|
|
2585
|
+
* @param {String} props.description
|
|
2586
|
+
* @param {Boolean} props.debounce
|
|
2587
|
+
* @param {Boolean} props.disabled
|
|
2588
|
+
* @param {String} props.label
|
|
2589
|
+
* @param {Function} props.getValue
|
|
2590
|
+
* @param {Function} props.setValue
|
|
2591
|
+
* @param {Function} props.tooltipContainer
|
|
2592
|
+
* @param {Function} props.validate
|
|
2593
|
+
* @param {Function} props.show
|
|
2434
2594
|
*/
|
|
2435
2595
|
function TemplatingEntry(props) {
|
|
2436
2596
|
const {
|
|
@@ -2446,11 +2606,9 @@ function TemplatingEntry(props) {
|
|
|
2446
2606
|
validate,
|
|
2447
2607
|
show = noop
|
|
2448
2608
|
} = props;
|
|
2449
|
-
const [cachedInvalidValue, setCachedInvalidValue] = useState(null);
|
|
2450
2609
|
const [validationError, setValidationError] = useState(null);
|
|
2451
2610
|
const [localError, setLocalError] = useState(null);
|
|
2452
2611
|
let value = getValue(element);
|
|
2453
|
-
const previousValue = usePrevious(value);
|
|
2454
2612
|
useEffect(() => {
|
|
2455
2613
|
if (isFunction(validate)) {
|
|
2456
2614
|
const newValidationError = validate(value) || null;
|
|
@@ -2462,22 +2620,16 @@ function TemplatingEntry(props) {
|
|
|
2462
2620
|
if (isFunction(validate)) {
|
|
2463
2621
|
newValidationError = validate(newValue) || null;
|
|
2464
2622
|
}
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
if (newValue !== value) {
|
|
2470
|
-
setValue(newValue);
|
|
2471
|
-
}
|
|
2623
|
+
|
|
2624
|
+
// don't create multiple commandStack entries for the same value
|
|
2625
|
+
if (newValue !== value) {
|
|
2626
|
+
setValue(newValue, newValidationError);
|
|
2472
2627
|
}
|
|
2473
2628
|
setValidationError(newValidationError);
|
|
2474
2629
|
});
|
|
2475
2630
|
const onError = useCallback(err => {
|
|
2476
2631
|
setLocalError(err);
|
|
2477
2632
|
}, []);
|
|
2478
|
-
if (previousValue === value && validationError) {
|
|
2479
|
-
value = cachedInvalidValue;
|
|
2480
|
-
}
|
|
2481
2633
|
const temporaryError = useError(id);
|
|
2482
2634
|
const error = localError || temporaryError || validationError;
|
|
2483
2635
|
return jsxs("div", {
|
|
@@ -2617,8 +2769,8 @@ function List(props) {
|
|
|
2617
2769
|
}
|
|
2618
2770
|
}, [open, hasItems]);
|
|
2619
2771
|
|
|
2620
|
-
/**
|
|
2621
|
-
* @param {MouseEvent} event
|
|
2772
|
+
/**
|
|
2773
|
+
* @param {MouseEvent} event
|
|
2622
2774
|
*/
|
|
2623
2775
|
function addItem(event) {
|
|
2624
2776
|
event.stopPropagation();
|
|
@@ -2730,14 +2882,14 @@ function ItemsList(props) {
|
|
|
2730
2882
|
});
|
|
2731
2883
|
}
|
|
2732
2884
|
|
|
2733
|
-
/**
|
|
2734
|
-
* Place new items in the beginning of the list and sort the rest with provided function.
|
|
2735
|
-
*
|
|
2736
|
-
* @template Item
|
|
2737
|
-
* @param {Item[]} currentItems
|
|
2738
|
-
* @param {(a: Item, b: Item) => 0 | 1 | -1} [compareFn] function used to sort items
|
|
2739
|
-
* @param {boolean} [shouldReset=false] set to `true` to reset state of the hook
|
|
2740
|
-
* @returns {Item[]}
|
|
2885
|
+
/**
|
|
2886
|
+
* Place new items in the beginning of the list and sort the rest with provided function.
|
|
2887
|
+
*
|
|
2888
|
+
* @template Item
|
|
2889
|
+
* @param {Item[]} currentItems
|
|
2890
|
+
* @param {(a: Item, b: Item) => 0 | 1 | -1} [compareFn] function used to sort items
|
|
2891
|
+
* @param {boolean} [shouldReset=false] set to `true` to reset state of the hook
|
|
2892
|
+
* @returns {Item[]}
|
|
2741
2893
|
*/
|
|
2742
2894
|
function useSortedItems(currentItems, compareFn, shouldReset = false) {
|
|
2743
2895
|
const itemsRef = useRef(currentItems.slice());
|
|
@@ -2781,7 +2933,8 @@ function Select(props) {
|
|
|
2781
2933
|
value = '',
|
|
2782
2934
|
disabled,
|
|
2783
2935
|
onFocus,
|
|
2784
|
-
onBlur
|
|
2936
|
+
onBlur,
|
|
2937
|
+
tooltip
|
|
2785
2938
|
} = props;
|
|
2786
2939
|
const ref = useShowEntryEvent(id);
|
|
2787
2940
|
const [localValue, setLocalValue] = useState(value);
|
|
@@ -2805,7 +2958,11 @@ function Select(props) {
|
|
|
2805
2958
|
children: [jsx("label", {
|
|
2806
2959
|
for: prefixId$3(id),
|
|
2807
2960
|
class: "bio-properties-panel-label",
|
|
2808
|
-
children:
|
|
2961
|
+
children: jsx(TooltipWrapper, {
|
|
2962
|
+
value: tooltip,
|
|
2963
|
+
labelId: prefixId$3(id),
|
|
2964
|
+
children: label
|
|
2965
|
+
})
|
|
2809
2966
|
}), jsx("select", {
|
|
2810
2967
|
ref: ref,
|
|
2811
2968
|
id: prefixId$3(id),
|
|
@@ -2837,19 +2994,20 @@ function Select(props) {
|
|
|
2837
2994
|
});
|
|
2838
2995
|
}
|
|
2839
2996
|
|
|
2840
|
-
/**
|
|
2841
|
-
* @param {object} props
|
|
2842
|
-
* @param {object} props.element
|
|
2843
|
-
* @param {string} props.id
|
|
2844
|
-
* @param {string} [props.description]
|
|
2845
|
-
* @param {string} props.label
|
|
2846
|
-
* @param {Function} props.getValue
|
|
2847
|
-
* @param {Function} props.setValue
|
|
2848
|
-
* @param {Function} props.onFocus
|
|
2849
|
-
* @param {Function} props.onBlur
|
|
2850
|
-
* @param {Function} props.getOptions
|
|
2851
|
-
* @param {boolean} [props.disabled]
|
|
2852
|
-
* @param {Function} [props.validate]
|
|
2997
|
+
/**
|
|
2998
|
+
* @param {object} props
|
|
2999
|
+
* @param {object} props.element
|
|
3000
|
+
* @param {string} props.id
|
|
3001
|
+
* @param {string} [props.description]
|
|
3002
|
+
* @param {string} props.label
|
|
3003
|
+
* @param {Function} props.getValue
|
|
3004
|
+
* @param {Function} props.setValue
|
|
3005
|
+
* @param {Function} props.onFocus
|
|
3006
|
+
* @param {Function} props.onBlur
|
|
3007
|
+
* @param {Function} props.getOptions
|
|
3008
|
+
* @param {boolean} [props.disabled]
|
|
3009
|
+
* @param {Function} [props.validate]
|
|
3010
|
+
* @param {string|import('preact').Component} props.tooltip
|
|
2853
3011
|
*/
|
|
2854
3012
|
function SelectEntry(props) {
|
|
2855
3013
|
const {
|
|
@@ -2863,14 +3021,13 @@ function SelectEntry(props) {
|
|
|
2863
3021
|
disabled,
|
|
2864
3022
|
onFocus,
|
|
2865
3023
|
onBlur,
|
|
2866
|
-
validate
|
|
3024
|
+
validate,
|
|
3025
|
+
tooltip
|
|
2867
3026
|
} = props;
|
|
2868
3027
|
const options = getOptions(element);
|
|
2869
|
-
const [cachedInvalidValue, setCachedInvalidValue] = useState(null);
|
|
2870
3028
|
const globalError = useError(id);
|
|
2871
3029
|
const [localError, setLocalError] = useState(null);
|
|
2872
3030
|
let value = getValue(element);
|
|
2873
|
-
const previousValue = usePrevious(value);
|
|
2874
3031
|
useEffect(() => {
|
|
2875
3032
|
if (isFunction(validate)) {
|
|
2876
3033
|
const newValidationError = validate(value) || null;
|
|
@@ -2882,16 +3039,9 @@ function SelectEntry(props) {
|
|
|
2882
3039
|
if (isFunction(validate)) {
|
|
2883
3040
|
newValidationError = validate(newValue) || null;
|
|
2884
3041
|
}
|
|
2885
|
-
|
|
2886
|
-
setCachedInvalidValue(newValue);
|
|
2887
|
-
} else {
|
|
2888
|
-
setValue(newValue);
|
|
2889
|
-
}
|
|
3042
|
+
setValue(newValue, newValidationError);
|
|
2890
3043
|
setLocalError(newValidationError);
|
|
2891
3044
|
};
|
|
2892
|
-
if (previousValue === value && localError) {
|
|
2893
|
-
value = cachedInvalidValue;
|
|
2894
|
-
}
|
|
2895
3045
|
const error = globalError || localError;
|
|
2896
3046
|
return jsxs("div", {
|
|
2897
3047
|
class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),
|
|
@@ -2904,7 +3054,8 @@ function SelectEntry(props) {
|
|
|
2904
3054
|
onFocus: onFocus,
|
|
2905
3055
|
onBlur: onBlur,
|
|
2906
3056
|
options: options,
|
|
2907
|
-
disabled: disabled
|
|
3057
|
+
disabled: disabled,
|
|
3058
|
+
tooltip: tooltip
|
|
2908
3059
|
}, element), error && jsx("div", {
|
|
2909
3060
|
class: "bio-properties-panel-error",
|
|
2910
3061
|
children: error
|
|
@@ -3000,7 +3151,8 @@ function TextArea(props) {
|
|
|
3000
3151
|
onFocus,
|
|
3001
3152
|
onBlur,
|
|
3002
3153
|
autoResize,
|
|
3003
|
-
rows = autoResize ? 1 : 2
|
|
3154
|
+
rows = autoResize ? 1 : 2,
|
|
3155
|
+
tooltip
|
|
3004
3156
|
} = props;
|
|
3005
3157
|
const [localValue, setLocalValue] = useState(value);
|
|
3006
3158
|
const ref = useShowEntryEvent(id);
|
|
@@ -3028,7 +3180,11 @@ function TextArea(props) {
|
|
|
3028
3180
|
children: [jsx("label", {
|
|
3029
3181
|
for: prefixId$1(id),
|
|
3030
3182
|
class: "bio-properties-panel-label",
|
|
3031
|
-
children:
|
|
3183
|
+
children: jsx(TooltipWrapper, {
|
|
3184
|
+
value: tooltip,
|
|
3185
|
+
labelId: prefixId$1(id),
|
|
3186
|
+
children: label
|
|
3187
|
+
})
|
|
3032
3188
|
}), jsx("textarea", {
|
|
3033
3189
|
ref: ref,
|
|
3034
3190
|
id: prefixId$1(id),
|
|
@@ -3046,21 +3202,21 @@ function TextArea(props) {
|
|
|
3046
3202
|
});
|
|
3047
3203
|
}
|
|
3048
3204
|
|
|
3049
|
-
/**
|
|
3050
|
-
* @param {object} props
|
|
3051
|
-
* @param {object} props.element
|
|
3052
|
-
* @param {string} props.id
|
|
3053
|
-
* @param {string} props.description
|
|
3054
|
-
* @param {boolean} props.debounce
|
|
3055
|
-
* @param {string} props.label
|
|
3056
|
-
* @param {Function} props.getValue
|
|
3057
|
-
* @param {Function} props.setValue
|
|
3058
|
-
* @param {Function} props.onFocus
|
|
3059
|
-
* @param {Function} props.onBlur
|
|
3060
|
-
* @param {number} props.rows
|
|
3061
|
-
* @param {boolean} props.monospace
|
|
3062
|
-
* @param {Function} [props.validate]
|
|
3063
|
-
* @param {boolean} [props.disabled]
|
|
3205
|
+
/**
|
|
3206
|
+
* @param {object} props
|
|
3207
|
+
* @param {object} props.element
|
|
3208
|
+
* @param {string} props.id
|
|
3209
|
+
* @param {string} props.description
|
|
3210
|
+
* @param {boolean} props.debounce
|
|
3211
|
+
* @param {string} props.label
|
|
3212
|
+
* @param {Function} props.getValue
|
|
3213
|
+
* @param {Function} props.setValue
|
|
3214
|
+
* @param {Function} props.onFocus
|
|
3215
|
+
* @param {Function} props.onBlur
|
|
3216
|
+
* @param {number} props.rows
|
|
3217
|
+
* @param {boolean} props.monospace
|
|
3218
|
+
* @param {Function} [props.validate]
|
|
3219
|
+
* @param {boolean} [props.disabled]
|
|
3064
3220
|
*/
|
|
3065
3221
|
function TextAreaEntry(props) {
|
|
3066
3222
|
const {
|
|
@@ -3077,13 +3233,12 @@ function TextAreaEntry(props) {
|
|
|
3077
3233
|
validate,
|
|
3078
3234
|
onFocus,
|
|
3079
3235
|
onBlur,
|
|
3080
|
-
autoResize
|
|
3236
|
+
autoResize,
|
|
3237
|
+
tooltip
|
|
3081
3238
|
} = props;
|
|
3082
|
-
const [cachedInvalidValue, setCachedInvalidValue] = useState(null);
|
|
3083
3239
|
const globalError = useError(id);
|
|
3084
3240
|
const [localError, setLocalError] = useState(null);
|
|
3085
3241
|
let value = getValue(element);
|
|
3086
|
-
const previousValue = usePrevious(value);
|
|
3087
3242
|
useEffect(() => {
|
|
3088
3243
|
if (isFunction(validate)) {
|
|
3089
3244
|
const newValidationError = validate(value) || null;
|
|
@@ -3095,16 +3250,9 @@ function TextAreaEntry(props) {
|
|
|
3095
3250
|
if (isFunction(validate)) {
|
|
3096
3251
|
newValidationError = validate(newValue) || null;
|
|
3097
3252
|
}
|
|
3098
|
-
|
|
3099
|
-
setCachedInvalidValue(newValue);
|
|
3100
|
-
} else {
|
|
3101
|
-
setValue(newValue);
|
|
3102
|
-
}
|
|
3253
|
+
setValue(newValue, newValidationError);
|
|
3103
3254
|
setLocalError(newValidationError);
|
|
3104
3255
|
};
|
|
3105
|
-
if (previousValue === value && localError) {
|
|
3106
|
-
value = cachedInvalidValue;
|
|
3107
|
-
}
|
|
3108
3256
|
const error = globalError || localError;
|
|
3109
3257
|
return jsxs("div", {
|
|
3110
3258
|
class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),
|
|
@@ -3120,7 +3268,8 @@ function TextAreaEntry(props) {
|
|
|
3120
3268
|
debounce: debounce,
|
|
3121
3269
|
monospace: monospace,
|
|
3122
3270
|
disabled: disabled,
|
|
3123
|
-
autoResize: autoResize
|
|
3271
|
+
autoResize: autoResize,
|
|
3272
|
+
tooltip: tooltip
|
|
3124
3273
|
}, element), error && jsx("div", {
|
|
3125
3274
|
class: "bio-properties-panel-error",
|
|
3126
3275
|
children: error
|
|
@@ -3150,10 +3299,12 @@ function Textfield(props) {
|
|
|
3150
3299
|
onInput,
|
|
3151
3300
|
onFocus,
|
|
3152
3301
|
onBlur,
|
|
3153
|
-
value = ''
|
|
3302
|
+
value = '',
|
|
3303
|
+
tooltip
|
|
3154
3304
|
} = props;
|
|
3155
3305
|
const [localValue, setLocalValue] = useState(value || '');
|
|
3156
3306
|
const ref = useShowEntryEvent(id);
|
|
3307
|
+
const labelRef = useRef(null);
|
|
3157
3308
|
const handleInputCallback = useMemo(() => {
|
|
3158
3309
|
return debounce(({
|
|
3159
3310
|
target
|
|
@@ -3174,7 +3325,12 @@ function Textfield(props) {
|
|
|
3174
3325
|
children: [jsx("label", {
|
|
3175
3326
|
for: prefixId(id),
|
|
3176
3327
|
class: "bio-properties-panel-label",
|
|
3177
|
-
children:
|
|
3328
|
+
children: jsx(TooltipWrapper, {
|
|
3329
|
+
value: tooltip,
|
|
3330
|
+
refElement: labelRef,
|
|
3331
|
+
labelId: prefixId(id),
|
|
3332
|
+
children: label
|
|
3333
|
+
})
|
|
3178
3334
|
}), jsx("input", {
|
|
3179
3335
|
ref: ref,
|
|
3180
3336
|
id: prefixId(id),
|
|
@@ -3192,19 +3348,20 @@ function Textfield(props) {
|
|
|
3192
3348
|
});
|
|
3193
3349
|
}
|
|
3194
3350
|
|
|
3195
|
-
/**
|
|
3196
|
-
* @param {Object} props
|
|
3197
|
-
* @param {Object} props.element
|
|
3198
|
-
* @param {String} props.id
|
|
3199
|
-
* @param {String} props.description
|
|
3200
|
-
* @param {Boolean} props.debounce
|
|
3201
|
-
* @param {Boolean} props.disabled
|
|
3202
|
-
* @param {String} props.label
|
|
3203
|
-
* @param {Function} props.getValue
|
|
3204
|
-
* @param {Function} props.setValue
|
|
3205
|
-
* @param {Function} props.onFocus
|
|
3206
|
-
* @param {Function} props.onBlur
|
|
3207
|
-
* @param {
|
|
3351
|
+
/**
|
|
3352
|
+
* @param {Object} props
|
|
3353
|
+
* @param {Object} props.element
|
|
3354
|
+
* @param {String} props.id
|
|
3355
|
+
* @param {String} props.description
|
|
3356
|
+
* @param {Boolean} props.debounce
|
|
3357
|
+
* @param {Boolean} props.disabled
|
|
3358
|
+
* @param {String} props.label
|
|
3359
|
+
* @param {Function} props.getValue
|
|
3360
|
+
* @param {Function} props.setValue
|
|
3361
|
+
* @param {Function} props.onFocus
|
|
3362
|
+
* @param {Function} props.onBlur
|
|
3363
|
+
* @param {string|import('preact').Component} props.tooltip
|
|
3364
|
+
* @param {Function} props.validate
|
|
3208
3365
|
*/
|
|
3209
3366
|
function TextfieldEntry(props) {
|
|
3210
3367
|
const {
|
|
@@ -3218,13 +3375,12 @@ function TextfieldEntry(props) {
|
|
|
3218
3375
|
setValue,
|
|
3219
3376
|
validate,
|
|
3220
3377
|
onFocus,
|
|
3221
|
-
onBlur
|
|
3378
|
+
onBlur,
|
|
3379
|
+
tooltip
|
|
3222
3380
|
} = props;
|
|
3223
|
-
const [cachedInvalidValue, setCachedInvalidValue] = useState(null);
|
|
3224
3381
|
const globalError = useError(id);
|
|
3225
3382
|
const [localError, setLocalError] = useState(null);
|
|
3226
3383
|
let value = getValue(element);
|
|
3227
|
-
const previousValue = usePrevious(value);
|
|
3228
3384
|
useEffect(() => {
|
|
3229
3385
|
if (isFunction(validate)) {
|
|
3230
3386
|
const newValidationError = validate(value) || null;
|
|
@@ -3236,16 +3392,9 @@ function TextfieldEntry(props) {
|
|
|
3236
3392
|
if (isFunction(validate)) {
|
|
3237
3393
|
newValidationError = validate(newValue) || null;
|
|
3238
3394
|
}
|
|
3239
|
-
|
|
3240
|
-
setCachedInvalidValue(newValue);
|
|
3241
|
-
} else {
|
|
3242
|
-
setValue(newValue);
|
|
3243
|
-
}
|
|
3395
|
+
setValue(newValue, newValidationError);
|
|
3244
3396
|
setLocalError(newValidationError);
|
|
3245
3397
|
};
|
|
3246
|
-
if (previousValue === value && localError) {
|
|
3247
|
-
value = cachedInvalidValue;
|
|
3248
|
-
}
|
|
3249
3398
|
const error = globalError || localError;
|
|
3250
3399
|
return jsxs("div", {
|
|
3251
3400
|
class: classnames('bio-properties-panel-entry', error ? 'has-error' : ''),
|
|
@@ -3258,7 +3407,8 @@ function TextfieldEntry(props) {
|
|
|
3258
3407
|
onInput: onInput,
|
|
3259
3408
|
onFocus: onFocus,
|
|
3260
3409
|
onBlur: onBlur,
|
|
3261
|
-
value: value
|
|
3410
|
+
value: value,
|
|
3411
|
+
tooltip: tooltip
|
|
3262
3412
|
}, element), error && jsx("div", {
|
|
3263
3413
|
class: "bio-properties-panel-error",
|
|
3264
3414
|
children: error
|
|
@@ -3296,5 +3446,5 @@ var index = {
|
|
|
3296
3446
|
debounceInput: ['factory', debounceInput]
|
|
3297
3447
|
};
|
|
3298
3448
|
|
|
3299
|
-
export { ArrowIcon, CheckboxEntry, CollapsibleEntry, CreateIcon, index as DebounceInputModule, DeleteIcon, DescriptionContext, Description as DescriptionEntry, DropdownButton, ErrorsContext, EventContext, ExternalLinkIcon, FeelCheckboxEntry, FeelEntry, FeelIcon$1 as FeelIcon, FeelNumberEntry, FeelTemplatingEntry, FeelTextAreaEntry, FeelToggleSwitchEntry, Group, Header, HeaderButton, LayoutContext, List as ListEntry, ListGroup, ListItem, NumberFieldEntry, Placeholder, PropertiesPanel, LayoutContext as PropertiesPanelContext, SelectEntry, Simple as SimpleEntry, TemplatingEntry, TextAreaEntry, TextfieldEntry as TextFieldEntry, ToggleSwitchEntry, isEdited$8 as isCheckboxEntryEdited, isEdited$5 as isFeelEntryEdited, isEdited$6 as isNumberFieldEntryEdited, isEdited$3 as isSelectEntryEdited, isEdited$2 as isSimpleEntryEdited, isEdited$4 as isTemplatingEntryEdited, isEdited$1 as isTextAreaEntryEdited, isEdited as isTextFieldEntryEdited, isEdited$7 as isToggleSwitchEntryEdited, useDescriptionContext, useError, useEvent, useKeyFactory, useLayoutState, usePrevious, useShowEntryEvent, useStaticCallback, useStickyIntersectionObserver };
|
|
3449
|
+
export { ArrowIcon, CheckboxEntry, CollapsibleEntry, CreateIcon, index as DebounceInputModule, DeleteIcon, DescriptionContext, Description as DescriptionEntry, DropdownButton, ErrorsContext, EventContext, ExternalLinkIcon, FeelCheckboxEntry, FeelEntry, FeelIcon$1 as FeelIcon, FeelNumberEntry, FeelTemplatingEntry, FeelTextAreaEntry, FeelToggleSwitchEntry, Group, Header, HeaderButton, LayoutContext, List as ListEntry, ListGroup, ListItem, NumberFieldEntry, Placeholder, PropertiesPanel, LayoutContext as PropertiesPanelContext, SelectEntry, Simple as SimpleEntry, TemplatingEntry, TextAreaEntry, TextfieldEntry as TextFieldEntry, ToggleSwitchEntry, isEdited$8 as isCheckboxEntryEdited, isEdited$5 as isFeelEntryEdited, isEdited$6 as isNumberFieldEntryEdited, isEdited$3 as isSelectEntryEdited, isEdited$2 as isSimpleEntryEdited, isEdited$4 as isTemplatingEntryEdited, isEdited$1 as isTextAreaEntryEdited, isEdited as isTextFieldEntryEdited, isEdited$7 as isToggleSwitchEntryEdited, useDescriptionContext, useError, useErrors, useEvent, useKeyFactory, useLayoutState, usePrevious, useShowEntryEvent, useStaticCallback, useStickyIntersectionObserver };
|
|
3300
3450
|
//# sourceMappingURL=index.esm.js.map
|