@kunpeng-js/properties-panel 2026.10.3 → 2026.10.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/components/icons/index.js","../src/components/Header.js","../src/context/DescriptionContext.js","../src/context/ErrorsContext.js","../src/context/EventContext.js","../src/context/FeelLanguageContext.js","../src/context/LayoutContext.js","../src/context/TooltipContext.js","../src/hooks/useTooltipContext.js","../src/components/entries/Tooltip.js","../src/hooks/useDescriptionContext.js","../src/hooks/useDebounce.js","../src/hooks/useError.js","../src/hooks/useEvent.js","../src/hooks/useKeyFactory.js","../src/hooks/useLayoutState.js","../src/hooks/usePrevious.js","../src/hooks/useShowEntryEvent.js","../src/hooks/useStickyIntersectionObserver.js","../src/hooks/useStaticCallback.js","../src/hooks/useElementVisible.js","../src/components/Group.js","../src/components/Placeholder.js","../src/PropertiesPanel.js","../src/components/DropdownButton.js","../src/components/HeaderButton.js","../src/components/util/translateFallback.js","../src/components/entries/Collapsible.js","../src/components/ListItem.js","../src/components/ListGroup.js","../src/components/entries/Description.js","../src/components/entries/Checkbox.js","../src/components/entries/CheckboxGroup.js","../src/components/entries/JsonEditor.js","../src/components/OpenPopupButton.js","../src/components/entries/templating/TemplatingEditor.js","../src/components/entries/expression/ExpressionEditor.js","../src/components/entries/expression/ExpressionIndicator.js","../src/components/entries/expression/ExpressionIcon.js","../src/components/util/keyboardUtils.js","../src/components/entries/ToggleSwitch.js","../src/components/entries/NumberField.js","../src/components/entries/expression/Expression.js","../src/components/entries/templating/Templating.js","../src/components/entries/List.js","../src/components/entries/Select.js","../src/components/entries/Simple.js","../src/components/entries/TextArea.js","../src/components/entries/TextField.js","../src/features/debounce-input/debounceInput.js","../src/features/debounce-input/index.js","../src/components/util/dragger.js","../src/features/expression-popup/components/Popup.js","../src/features/expression-popup/components/ExpressionPopup.js","../src/features/expression-popup/components/helpers.js","../src/features/expression-popup/ExpressionPopup.js","../src/features/expression-popup/ExpressionPopupRenderer.js","../src/features/expression-popup/index.js"],"sourcesContent":["export { default as ArrowIcon } from './Arrow.svg';\nexport { default as CloseIcon } from './Close.svg';\nexport { default as CreateIcon } from './Create.svg';\nexport { default as DeleteIcon } from './Delete.svg';\nexport { default as DragIcon } from './Drag.svg';\nexport { default as ExternalLinkIcon } from './ExternalLink.svg';\nexport { default as FeelIcon } from './Feel.svg';\nexport { default as LaunchIcon } from './Launch.svg';\nexport { default as OpenPopupIcon } from '@carbon/icons/svg/16/maximize.svg';","import { ExternalLinkIcon } from './icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef { {\n * getElementLabel: (element: object) => string,\n * getTypeLabel: (element: object) => string,\n * getElementIcon: (element: object) => import('preact').Component,\n * getDocumentationRef: (element: object) => string\n * } } HeaderProvider\n */\n\n/**\n * @param {Object} props\n * @param {Object} props.element,\n * @param {HeaderProvider} props.headerProvider\n */\nexport default function Header(props) {\n\n const {\n element,\n headerProvider\n } = props;\n\n const {\n getElementIcon,\n getDocumentationRef,\n getElementLabel,\n getTypeLabel,\n } = headerProvider;\n\n const label = getElementLabel(element);\n const type = getTypeLabel(element);\n const documentationRef = getDocumentationRef && getDocumentationRef(element);\n\n const ElementIcon = getElementIcon(element);\n\n return (<div class=\"bio-properties-panel-header\">\n <div class=\"bio-properties-panel-header-icon\">\n { ElementIcon && <ElementIcon width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" /> }\n </div>\n <div class=\"bio-properties-panel-header-labels\">\n <div class=\"bio-properties-panel-header-type\">{ type }</div>\n { label ?\n <div class=\"bio-properties-panel-header-label\">{ label }</div> :\n null\n }\n </div>\n <div class=\"bio-properties-panel-header-actions\">\n { documentationRef ?\n <a\n rel=\"noreferrer\"\n class=\"bio-properties-panel-header-link\"\n href={ documentationRef }\n title=\"Open documentation\"\n target=\"_blank\">\n <ExternalLinkIcon />\n </a> :\n null\n }\n </div>\n </div>);\n}","import {\n createContext\n} from 'preact';\n\nconst DescriptionContext = createContext({\n description: {},\n getDescriptionForId: () => {}\n});\n\nexport default DescriptionContext;\n","import {\n createContext\n} from 'preact';\n\nconst ErrorsContext = createContext({\n errors: {}\n});\n\nexport default ErrorsContext;","/**\n * @typedef {Function} <propertiesPanel.showEntry> callback\n *\n * @example\n *\n * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {\n * // ...\n * });\n *\n * @param {Object} context\n * @param {boolean} [context.focus]\n *\n * @returns void\n */\n\n/**\n * @typedef {Function} <propertiesPanel.showError> callback\n *\n * @example\n *\n * useEvent('propertiesPanel.showError', ({ focus = false, message, ...rest }) => {\n * // ...\n * });\n *\n * @param {Object} context\n * @param {string} context.message\n * @param {boolean} [context.focus]\n *\n * @returns void\n */\n\nimport { createContext } from 'preact';\n\nconst EventContext = createContext({ eventBus: null });\n\nexport default EventContext;\n","import {\n createContext\n} from 'preact';\n\n/**\n * @typedef { {\n * parserDialect?: import('@kunpeng-js/expression-editor').ParserDialect,\n * builtins?: import('@kunpeng-js/expression-editor').Variable[],\n * dialect?: import('@kunpeng-js/expression-editor').Dialect\n * } } FeelLanguageContextType\n */\n\n/**\n * @type {import('preact').Context<FeelLanguageContextType>}\n */\nconst FeelLanguageContext = createContext({});\n\nexport default FeelLanguageContext;\n","import {\n createContext\n} from 'preact';\n\nconst LayoutContext = createContext({\n layout: {},\n setLayout: () => {},\n getLayoutForKey: () => {},\n setLayoutForKey: () => {}\n});\n\nexport default LayoutContext;","import {\n createContext\n} from 'preact';\n\nconst TooltipContext = createContext({\n tooltip: {},\n getTooltipForId: () => {}\n});\n\nexport default TooltipContext;\n","import {\n useContext\n} from 'preact/hooks';\n\nimport {\n TooltipContext\n} from '../context';\n\n/**\n * Accesses the global TooltipContext and returns a tooltip for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n * const tooltip = useTooltipContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nexport function useTooltipContext(id, element) {\n const {\n getTooltipForId\n } = useContext(TooltipContext);\n\n return getTooltipForId(id, element);\n}\n","import {\n useRef,\n useState,\n useEffect\n} from 'preact/hooks';\n\nimport { useTooltipContext } from '../../hooks/useTooltipContext';\n\nimport { createPortal } from 'preact/compat';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef {Object} TooltipProps\n * @property {Object} [parent] - Parent element ref for portal rendering\n * @property {String} [direction='right'] - Tooltip direction ( 'right', 'top')\n * @property {String} [position] - Custom CSS position override\n * @property {Number} [showDelay=250] - Delay in ms before showing tooltip on hover\n * @property {Number} [hideDelay=250] - Delay in ms before hiding tooltip when mouse leaves, to avoid multiple tooltips from being opened, this should be the same as showDelay\n * @property {*} [children] - Child elements to render inside the tooltip wrapper\n */\n\n/**\n * Tooltip wrapper that provides context-based tooltip content lookup.\n * All props are forwarded to the underlying Tooltip component.\n *\n * @param {TooltipProps & {\n * forId: String,\n * value?: String|Object,\n * element?: Object\n * }} props - Shared tooltip props plus wrapper-specific ones\n */\nexport default function TooltipWrapper(props) {\n const {\n forId,\n element\n } = props;\n\n const contextDescription = useTooltipContext(forId, element);\n\n const value = props.value || contextDescription;\n\n if (!value) {\n return props.children;\n }\n\n return <Tooltip { ...props } value={ value } forId={ `bio-properties-panel-${ forId }` } />;\n}\n\n/**\n * @param {TooltipProps & {\n * forId: String,\n * value: String|Object\n * }} props\n */\nfunction Tooltip(props) {\n const {\n forId,\n value,\n parent,\n direction = 'right',\n position,\n showDelay = 250,\n hideDelay = 250\n } = props;\n\n const [ visible, setVisible ] = useState(false);\n\n const showTimeoutRef = useRef(null);\n const hideTimeoutRef = useRef(null);\n\n const wrapperRef = useRef(null);\n const tooltipRef = useRef(null);\n\n const show = (_, delay) => {\n clearTimeout(showTimeoutRef.current);\n clearTimeout(hideTimeoutRef.current);\n\n if (visible) return;\n\n if (delay) {\n showTimeoutRef.current = setTimeout(() => {\n setVisible(true);\n }, showDelay);\n } else {\n setVisible(true);\n }\n };\n\n const handleWrapperMouseEnter = (e) => {\n show(e, true);\n };\n\n const hide = (delay = false) => {\n clearTimeout(showTimeoutRef.current);\n clearTimeout(hideTimeoutRef.current);\n\n if (delay) {\n hideTimeoutRef.current = setTimeout(() => {\n setVisible(false);\n }, hideDelay);\n } else {\n setVisible(false);\n }\n };\n\n // Cleanup timeouts on unmount\n useEffect(() => {\n return () => {\n clearTimeout(showTimeoutRef.current);\n clearTimeout(hideTimeoutRef.current);\n };\n }, []);\n\n // Handle click outside to close tooltip for non-focusable elements\n useEffect(() => {\n if (!visible) return;\n\n const handleClickOutside = (e) => {\n\n // If clicking outside both the wrapper and tooltip, hide it\n if (wrapperRef.current && !wrapperRef.current.contains(e.target) &&\n tooltipRef.current && !tooltipRef.current.contains(e.target)) {\n hide(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ visible, hide ]);\n\n const handleMouseLeave = ({ relatedTarget }) => {\n\n // Don't hide the tooltip when moving mouse between the wrapper and the tooltip.\n if (relatedTarget === wrapperRef.current || relatedTarget === tooltipRef.current || relatedTarget?.parentElement === tooltipRef.current) {\n return;\n }\n\n const selection = window.getSelection();\n if (selection && selection.toString().length > 0) {\n\n // Check if selection is within tooltip content\n const selectionRange = selection.getRangeAt(0);\n if (tooltipRef.current?.contains(selectionRange.commonAncestorContainer) ||\n tooltipRef.current?.contains(selection.anchorNode) ||\n tooltipRef.current?.contains(selection.focusNode)) {\n return; // Keep tooltip open during text selection\n }\n }\n\n hide(true);\n };\n\n const handleTooltipMouseEnter = () => {\n clearTimeout(hideTimeoutRef.current);\n };\n\n const handleFocusOut = (e) => {\n const { relatedTarget } = e;\n\n // Don't hide if focus moved to the tooltip or another element within the wrapper\n if (tooltipRef.current?.contains(relatedTarget) ||\n wrapperRef.current?.contains(relatedTarget)) {\n return;\n }\n\n hide(false);\n };\n\n const hideTooltipViaEscape = (e) => {\n e.code === 'Escape' && hide(false);\n };\n\n const renderTooltip = () => {\n return (\n <div\n class={ `bio-properties-panel-tooltip ${direction}` }\n role=\"tooltip\"\n id=\"bio-properties-panel-tooltip\"\n aria-labelledby={ forId }\n style={ position || getTooltipPosition(wrapperRef.current) }\n ref={ tooltipRef }\n onClick={ (e)=> e.stopPropagation() }\n onMouseEnter={ handleTooltipMouseEnter }\n onMouseLeave={ handleMouseLeave }\n >\n <div class=\"bio-properties-panel-tooltip-content\">\n {value}\n </div>\n <div class=\"bio-properties-panel-tooltip-arrow\" />\n </div>\n );};\n\n return (\n <div class=\"bio-properties-panel-tooltip-wrapper\" tabIndex=\"0\"\n ref={ wrapperRef }\n onMouseEnter={ handleWrapperMouseEnter }\n onMouseLeave={ handleMouseLeave }\n onFocus={ show }\n onBlur={ handleFocusOut }\n onKeyDown={ hideTooltipViaEscape }\n >\n {props.children}\n {visible ?\n (parent ?\n createPortal(renderTooltip(), parent.current)\n : renderTooltip()\n ) : null\n }\n </div>\n );\n}\n\n\n// helper\n\nfunction getTooltipPosition(refElement) {\n const refPosition = refElement.getBoundingClientRect();\n\n const right = `calc(100% - ${refPosition.x}px)`;\n const top = `${refPosition.top - 10}px`;\n\n return `right: ${right}; top: ${top};`;\n}\n","import {\n useContext\n} from 'preact/hooks';\n\nimport {\n DescriptionContext\n} from '../context';\n\n/**\n * Accesses the global DescriptionContext and returns a description for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n * const description = useDescriptionContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nexport function useDescriptionContext(id, element) {\n const {\n getDescriptionForId\n } = useContext(DescriptionContext);\n\n return getDescriptionForId(id, element);\n}\n","import {\n useCallback,\n useEffect\n} from 'preact/hooks';\n\nexport function useDebounce(callback, debounceFn) {\n const debouncedCallback = useCallback(debounceFn(callback), [ callback, debounceFn ]);\n\n // make sure previous call is not stalled\n useEffect(() => {\n return () => {\n debouncedCallback.cancel?.();\n };\n }, [ debouncedCallback ]);\n\n return debouncedCallback;\n}\n","import { useContext } from 'preact/hooks';\n\nimport { ErrorsContext } from '../context';\n\nexport function useError(id) {\n const { errors } = useContext(ErrorsContext);\n\n return errors[ id ];\n}\n\nexport function useErrors() {\n const { errors } = useContext(ErrorsContext);\n\n return errors;\n}","import { useContext, useEffect, useRef } from 'preact/hooks';\n\nimport { EventContext } from '../context';\n\n\n/**\n * Subscribe to an event immediately. Update subscription after inputs changed.\n *\n * @param {string} event\n * @param {Function} callback\n */\nexport function useEvent(event, callback, eventBus) {\n const eventContext = useContext(EventContext);\n\n if (!eventBus) {\n ({ eventBus } = eventContext);\n }\n\n const didMount = useRef(false);\n\n // (1) subscribe immediately\n if (eventBus && !didMount.current) {\n eventBus.on(event, callback);\n }\n\n // (2) update subscription after inputs changed\n useEffect(() => {\n if (eventBus && didMount.current) {\n eventBus.on(event, callback);\n }\n\n didMount.current = true;\n\n return () => {\n if (eventBus) {\n eventBus.off(event, callback);\n }\n };\n }, [ callback, event, eventBus ]);\n}\n","import { useMemo } from 'preact/hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst KEY_LENGTH = 6;\n\n/**\n * Create a persistent key factory for plain objects without id.\n *\n * @example\n * ```jsx\n * function List({ objects }) {\n * const getKey = useKeyFactory();\n * return (<ol>{\n * objects.map(obj => {\n * const key = getKey(obj);\n * return <li key={key}>obj.name</li>\n * })\n * }</ol>);\n * }\n * ```\n *\n * @param {any[]} dependencies\n * @returns {(element: object) => string}\n */\nexport function useKeyFactory(dependencies = []) {\n const map = useMemo(() => new Map(), dependencies);\n\n const getKey = el => {\n let key = map.get(el);\n\n if (!key) {\n key = Math.random().toString().slice(-KEY_LENGTH);\n map.set(el, key);\n }\n\n return key;\n };\n\n return getKey;\n}\n","import {\n useCallback,\n useContext\n} from 'preact/hooks';\n\nimport {\n LayoutContext\n} from '../context';\n\n/**\n * Creates a state that persists in the global LayoutContext.\n *\n * @example\n * ```jsx\n * function Group(props) {\n * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);\n * }\n * ```\n *\n * @param {(string|number)[]} path\n * @param {any} [defaultValue]\n *\n * @returns {[ any, Function ]}\n */\nexport function useLayoutState(path, defaultValue) {\n const {\n getLayoutForKey,\n setLayoutForKey\n } = useContext(LayoutContext);\n\n const layoutForKey = getLayoutForKey(path, defaultValue);\n\n const setState = useCallback((newValue) => {\n setLayoutForKey(path, newValue);\n }, [ setLayoutForKey ]);\n\n\n return [ layoutForKey, setState ];\n}\n","import {\n useEffect,\n useRef\n} from 'preact/hooks';\n\n/**\n * @pinussilvestrus: we need to introduce our own hook to persist the previous\n * state on updates.\n *\n * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\n */\n\nexport function usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import {\n useCallback,\n useContext,\n useEffect,\n useRef\n} from 'preact/hooks';\n\nimport { isFunction } from 'min-dash';\n\nimport { PropertiesPanelContext } from '../context';\n\nimport { useEvent } from './useEvent';\n\n/**\n * Subscribe to `propertiesPanel.showEntry`.\n *\n * @param {string} id\n *\n * @returns {import('preact').Ref}\n */\nexport function useShowEntryEvent(id) {\n const { onShow } = useContext(PropertiesPanelContext);\n\n const ref = useRef();\n\n const focus = useRef(false);\n\n const onShowEntry = useCallback((event) => {\n if (event.id === id) {\n onShow();\n\n if (!focus.current) {\n focus.current = true;\n }\n }\n }, [ id ]);\n\n useEffect(() => {\n if (focus.current && ref.current) {\n if (isFunction(ref.current.focus)) {\n ref.current.focus();\n }\n\n if (isFunction(ref.current.select)) {\n ref.current.select();\n }\n\n focus.current = false;\n }\n });\n\n useEvent('propertiesPanel.showEntry', onShowEntry);\n\n return ref;\n}","import {\n useCallback,\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport { useEvent } from './useEvent';\n\n\n/**\n * @callback setSticky\n * @param {boolean} value\n */\n\n/**\n * Use IntersectionObserver to identify when DOM element is in sticky mode.\n * If sticky is observered setSticky(true) will be called.\n * If sticky mode is left, setSticky(false) will be called.\n *\n *\n * @param {Object} ref\n * @param {string} scrollContainerSelector\n * @param {setSticky} setSticky\n */\nexport function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {\n\n const [ scrollContainer, setScrollContainer ] = useState(domQuery(scrollContainerSelector));\n\n const updateScrollContainer = useCallback(() => {\n const newScrollContainer = domQuery(scrollContainerSelector);\n\n if (newScrollContainer !== scrollContainer) {\n setScrollContainer(newScrollContainer);\n }\n }, [ scrollContainerSelector, scrollContainer ]);\n\n useEffect(() => {\n updateScrollContainer();\n }, [ updateScrollContainer ]);\n\n useEvent('propertiesPanel.attach', updateScrollContainer);\n useEvent('propertiesPanel.detach', updateScrollContainer);\n\n useEffect(() => {\n const Observer = IntersectionObserver;\n\n // return early if IntersectionObserver is not available\n if (!Observer) {\n return;\n }\n\n // TODO(@barmac): test this\n if (!ref.current || !scrollContainer) {\n return;\n }\n\n const observer = new Observer((entries) => {\n\n // scroll container is unmounted, do not update sticky state\n if (scrollContainer.scrollHeight === 0) {\n return;\n }\n\n entries.forEach(entry => {\n if (entry.intersectionRatio < 1) {\n setSticky(true);\n }\n else if (entry.intersectionRatio === 1) {\n setSticky(false);\n }\n });\n },\n {\n root: scrollContainer,\n rootMargin: '0px 0px 999999% 0px', // Use bottom margin to avoid stickyness when scrolling out to bottom\n threshold: [ 1 ]\n });\n observer.observe(ref.current);\n\n // Unobserve if unmounted\n return () => {\n observer.unobserve(ref.current);\n };\n\n }, [ ref.current, scrollContainer, setSticky ]);\n}\n","import { useCallback, useRef } from 'preact/hooks';\n\n/**\n * Creates a static function reference with changing body.\n * This is necessary when external libraries require a callback function\n * that has references to state variables.\n *\n * Usage:\n * const callback = useStaticCallback((val) => {val === currentState});\n *\n * The `callback` reference is static and can be safely used in external\n * libraries or as a prop that does not cause rerendering of children.\n *\n * @param {Function} callback function with changing reference\n * @returns {Function} static function reference\n */\nexport function useStaticCallback(callback) {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n return useCallback(\n (...args) => callbackRef.current(...args),\n []\n );\n}","import { useLayoutEffect, useState } from 'preact/hooks';\n\nexport function useElementVisible(element) {\n\n const [ visible, setVisible ] = useState(!!element && !!element.clientHeight);\n\n useLayoutEffect(() => {\n if (!element) return;\n\n const resizeObserver = new ResizeObserver(([ entry ]) => {\n requestAnimationFrame(() => {\n const newVisible = !!entry.contentRect.height;\n if (newVisible !== visible) {\n setVisible(newVisible);\n }\n });\n });\n\n resizeObserver.observe(element);\n\n return () => resizeObserver.disconnect();\n }, [ element, visible ]);\n\n return visible;\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport Tooltip from './entries/Tooltip';\n\nimport classnames from 'classnames';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport {\n isFunction\n} from 'min-dash';\n\nimport {\n useErrors,\n useLayoutState\n} from '../hooks';\n\nimport { PropertiesPanelContext } from '../context';\n\nimport { useStickyIntersectionObserver } from '../hooks';\n\nimport { ArrowIcon } from './icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {import('../PropertiesPanel').GroupDefinition} props\n */\nexport default function Group(props) {\n const {\n element,\n entries = [],\n id,\n label,\n shouldOpen = false,\n } = props;\n\n const groupRef = useRef(null);\n\n const [ open, setOpen ] = useLayoutState(\n [ 'groups', id, 'open' ],\n shouldOpen\n );\n\n const onShow = useCallback(() => setOpen(true), [ setOpen ]);\n\n const toggleOpen = () => setOpen(!open);\n\n const [ edited, setEdited ] = useState(false);\n\n const [ sticky, setSticky ] = useState(false);\n\n // set edited state depending on all entries\n useEffect(() => {\n\n // TODO(@barmac): replace with CSS when `:has()` is supported in all major browsers, or rewrite as in https://github.com/camunda/camunda-modeler/issues/3815#issuecomment-1733038161\n const scheduled = requestAnimationFrame(() => {\n const hasOneEditedEntry = entries.find(entry => {\n const {\n id,\n isEdited\n } = entry;\n\n const entryNode = domQuery(`[data-entry-id=\"${id}\"]`);\n\n if (!isFunction(isEdited) || !entryNode) {\n return false;\n }\n\n const inputNode = domQuery('.bio-properties-panel-input', entryNode);\n\n return isEdited(inputNode);\n });\n\n setEdited(hasOneEditedEntry);\n });\n\n return () => cancelAnimationFrame(scheduled);\n }, [ entries, setEdited ]);\n\n // set error state depending on all entries\n const allErrors = useErrors();\n const hasErrors = entries.some(entry => allErrors[entry.id]);\n\n // set css class when group is sticky to top\n useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n\n const propertiesPanelContext = {\n ...useContext(PropertiesPanelContext),\n onShow\n };\n\n return <div class=\"bio-properties-panel-group\" data-group-id={ 'group-' + id } ref={ groupRef }>\n <div class={ classnames(\n 'bio-properties-panel-group-header',\n edited ? '' : 'empty',\n open ? 'open' : '',\n (sticky && open) ? 'sticky' : ''\n ) } onClick={ toggleOpen }>\n <div\n class=\"bio-properties-panel-group-header-title\"\n >\n <Tooltip value={ props.tooltip } forId={ 'group-' + id } element={ element } parent={ groupRef }>\n { label }\n </Tooltip>\n </div>\n <div class=\"bio-properties-panel-group-header-buttons\">\n {\n <DataMarker\n edited={ edited }\n hasErrors={ hasErrors }\n />\n }\n <button\n type=\"button\"\n title=\"Toggle section\"\n class=\"bio-properties-panel-group-header-button bio-properties-panel-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n </div>\n </div>\n <div class={ classnames(\n 'bio-properties-panel-group-entries',\n open ? 'open' : ''\n ) }>\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n {\n entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n\n return (\n <Component\n { ...entry }\n element={ element }\n key={ id } />\n );\n })\n }\n </PropertiesPanelContext.Provider>\n </div>\n </div>;\n}\n\nfunction DataMarker(props) {\n const {\n edited,\n hasErrors\n } = props;\n\n if (hasErrors) {\n return (\n <div title=\"Section contains an error\" class=\"bio-properties-panel-dot bio-properties-panel-dot--error\"></div>\n );\n }\n\n if (edited) {\n return (\n <div title=\"Section contains edits\" class=\"bio-properties-panel-dot\"></div>\n );\n }\n return null;\n}","/**\n * @typedef { {\n * text: (element: object) => string,\n * icon?: (element: Object) => import('preact').Component\n * } } PlaceholderDefinition\n *\n * @param { PlaceholderDefinition } props\n */\nexport default function Placeholder(props) {\n const {\n text,\n icon: Icon\n } = props;\n\n return (\n <div class=\"bio-properties-panel open\">\n <section class=\"bio-properties-panel-placeholder\">\n { Icon && <Icon class=\"bio-properties-panel-placeholder-icon\" /> }\n <p class=\"bio-properties-panel-placeholder-text\">{ text }</p>\n </section>\n </div>\n );\n}","import {\n useState,\n useEffect,\n useMemo,\n useRef,\n useLayoutEffect\n} from 'preact/hooks';\n\nimport {\n assign,\n get,\n isArray,\n set\n} from 'min-dash';\n\nimport Header from './components/Header';\n\nimport Group from './components/Group';\n\nimport Placeholder from './components/Placeholder';\n\nimport {\n DescriptionContext,\n ErrorsContext,\n EventContext,\n LayoutContext,\n PropertiesPanelContext,\n TooltipContext\n} from './context';\n\nimport { useEvent } from './hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst DEFAULT_LAYOUT = {};\n\nconst DEFAULT_DESCRIPTION = {};\n\nconst DEFAULT_TOOLTIP = {};\n\n\n/**\n * @typedef { {\n * component: import('preact').Component,\n * id: String,\n * isEdited?: Function\n * } } EntryDefinition\n *\n * @typedef { {\n * autoFocusEntry: String,\n * autoOpen?: Boolean,\n * entries: Array<EntryDefinition>,\n * id: String,\n * label: String,\n * remove: (event: MouseEvent) => void\n * } } ListItemDefinition\n *\n * @typedef { {\n * add: (event: MouseEvent) => void,\n * component: import('preact').Component,\n * element: Object,\n * id: String,\n * items: Array<ListItemDefinition>,\n * label: String,\n * shouldOpen?: Boolean\n * } } ListGroupDefinition\n *\n * @typedef { {\n * component?: import('preact').Component,\n * entries: Array<EntryDefinition>,\n * id: String,\n * label: String,\n * shouldOpen?: Boolean\n * } } GroupDefinition\n *\n * @typedef { {\n * [id: String]: GetDescriptionFunction\n * } } DescriptionConfig\n *\n * @typedef { {\n * [id: String]: GetTooltipFunction\n * } } TooltipConfig\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetDescriptionFunction\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetTooltipFunction\n *\n * @typedef { {\n * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,\n * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition\n * } } PlaceholderProvider\n *\n */\n\n\n/**\n * A basic properties panel component. Describes *how* content will be rendered, accepts\n * data from implementor to describe *what* will be rendered.\n *\n * @param {Object} props\n * @param {Object|Array} props.element\n * @param {import('./components/Header').HeaderProvider} props.headerProvider\n * @param {PlaceholderProvider} [props.placeholderProvider]\n * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups\n * @param {Object} [props.layoutConfig]\n * @param {Function} [props.layoutChanged]\n * @param {DescriptionConfig} [props.descriptionConfig]\n * @param {Function} [props.descriptionLoaded]\n * @param {TooltipConfig} [props.tooltipConfig]\n * @param {Function} [props.tooltipLoaded]\n * @param {HTMLElement} [props.feelPopupContainer]\n * @param {Function} [props.getFeelPopupLinks]\n * @param {Object} [props.eventBus]\n */\nexport default function PropertiesPanel(props) {\n const {\n element,\n headerProvider,\n placeholderProvider,\n groups,\n layoutConfig,\n layoutChanged,\n descriptionConfig,\n descriptionLoaded,\n tooltipConfig,\n tooltipLoaded,\n eventBus\n } = props;\n\n // set-up layout context\n const [ layout, setLayout ] = useState(createLayout(layoutConfig));\n\n // react to external changes in the layout config\n useUpdateLayoutEffect(() => {\n const newLayout = createLayout(layoutConfig);\n\n setLayout(newLayout);\n }, [ layoutConfig ]);\n\n useEffect(() => {\n if (typeof layoutChanged === 'function') {\n layoutChanged(layout);\n }\n }, [ layout, layoutChanged ]);\n\n const getLayoutForKey = (key, defaultValue) => {\n return get(layout, key, defaultValue);\n };\n\n const setLayoutForKey = (key, config) => {\n const newLayout = assign({}, layout);\n set(newLayout, key, config);\n setLayout(newLayout);\n };\n\n const layoutContext = {\n layout,\n setLayout,\n getLayoutForKey,\n setLayoutForKey\n };\n\n // set-up description context\n const description = useMemo(() => createDescriptionContext(descriptionConfig), [ descriptionConfig ]);\n\n useEffect(() => {\n if (typeof descriptionLoaded === 'function') {\n descriptionLoaded(description);\n }\n }, [ description, descriptionLoaded ]);\n\n\n const getDescriptionForId = (id, element) => {\n return description[id] && description[id](element);\n };\n\n const descriptionContext = {\n description,\n getDescriptionForId\n };\n\n // set-up tooltip context\n const tooltip = useMemo(() => createTooltipContext(tooltipConfig), [ tooltipConfig ]);\n\n useEffect(() => {\n if (typeof tooltipLoaded === 'function') {\n tooltipLoaded(tooltip);\n }\n }, [ tooltip, tooltipLoaded ]);\n\n const getTooltipForId = (id, element) => {\n return tooltip[id] && tooltip[id](element);\n };\n\n const tooltipContext = {\n tooltip,\n getTooltipForId\n };\n\n const [ errors, setErrors ] = useState({});\n\n const onSetErrors = ({ errors }) => setErrors(errors);\n\n useEvent('propertiesPanel.setErrors', onSetErrors, eventBus);\n\n const errorsContext = {\n errors\n };\n\n const eventContext = {\n eventBus\n };\n\n const propertiesPanelContext = {\n element\n };\n\n // empty state\n if (placeholderProvider && !element) {\n return <Placeholder { ...placeholderProvider.getEmpty() } />;\n }\n\n // multiple state\n if (placeholderProvider && isArray(element)) {\n return <Placeholder { ...placeholderProvider.getMultiple() } />;\n }\n\n return (\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n <ErrorsContext.Provider value={ errorsContext }>\n <DescriptionContext.Provider value={ descriptionContext }>\n <TooltipContext.Provider value={ tooltipContext }>\n <LayoutContext.Provider value={ layoutContext }>\n <EventContext.Provider value={ eventContext }>\n <div class=\"bio-properties-panel\">\n <Header\n element={ element }\n headerProvider={ headerProvider } />\n <div class=\"bio-properties-panel-scroll-container\">\n {\n groups.map(group => {\n const {\n component: Component = Group,\n id\n } = group;\n\n return (\n <Component\n { ...group }\n key={ id }\n element={ element } />\n );\n })\n }\n </div>\n </div>\n </EventContext.Provider>\n </LayoutContext.Provider>\n </TooltipContext.Provider>\n </DescriptionContext.Provider>\n </ErrorsContext.Provider>\n </PropertiesPanelContext.Provider>\n );\n}\n\n\n// helpers //////////////////\n\nfunction createLayout(overrides = {}, defaults = DEFAULT_LAYOUT) {\n return {\n ...defaults,\n ...overrides\n };\n}\n\nfunction createDescriptionContext(overrides = {}) {\n return {\n ...DEFAULT_DESCRIPTION,\n ...overrides\n };\n}\n\nfunction createTooltipContext(overrides = {}) {\n return {\n ...DEFAULT_TOOLTIP,\n ...overrides\n };\n}\n\n// hooks //////////////////\n\n/**\n * This hook behaves like useLayoutEffect, but does not trigger on the first render.\n *\n * @param {Function} effect\n * @param {Array} deps\n */\nfunction useUpdateLayoutEffect(effect, deps) {\n const isMounted = useRef(false);\n\n useLayoutEffect(() => {\n if (isMounted.current) {\n return effect();\n } else {\n isMounted.current = true;\n }\n }, deps);\n}","import {\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n *\n * @param {object} props\n * @param {string} [props.class]\n * @param {import('preact').Component[]} [props.menuItems]\n * @returns\n */\nexport function DropdownButton(props) {\n const {\n class: className,\n children,\n menuItems = []\n } = props;\n\n const dropdownRef = useRef(null);\n const menuRef = useRef(null);\n\n const [ open, setOpen ] = useState(false);\n const close = () => setOpen(false);\n\n function onDropdownToggle(event) {\n if (menuRef.current && menuRef.current.contains(event.target)) {\n return;\n }\n\n event.stopPropagation();\n\n setOpen(open => !open);\n }\n\n function onActionClick(event, action) {\n event.stopPropagation();\n\n close();\n action();\n }\n\n useGlobalClick([ dropdownRef.current ], () => close());\n\n return (\n <div\n class={ classnames('bio-properties-panel-dropdown-button', { open }, className) }\n onClick={ onDropdownToggle }\n ref={ dropdownRef }\n >\n { children }\n <div class=\"bio-properties-panel-dropdown-button__menu\" ref={ menuRef }>\n { menuItems.map((item, index) => (\n <MenuItem onClick={ onActionClick } item={ item } key={ index } />\n )) }\n </div>\n </div>\n );\n}\n\nfunction MenuItem({ item, onClick }) {\n if (item.separator) {\n return <div class=\"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--separator\" />;\n }\n\n if (item.action) {\n return (<button\n type=\"button\"\n class=\"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--actionable\"\n onClick={ event => onClick(event, item.action) }\n >\n {item.entry}\n </button>);\n }\n\n return <div\n class=\"bio-properties-panel-dropdown-button__menu-item\"\n >\n {item.entry}\n </div>;\n}\n\n/**\n *\n * @param {Array<null | Element>} ignoredElements\n * @param {Function} callback\n */\nfunction useGlobalClick(ignoredElements, callback) {\n useEffect(() => {\n\n /**\n * @param {MouseEvent} event\n */\n function listener(event) {\n if (ignoredElements.some(element => element && element.contains(event.target))) {\n return;\n }\n\n callback();\n }\n\n document.addEventListener('click', listener, { capture: true });\n\n return () => document.removeEventListener('click', listener, { capture: true });\n }, [ ...ignoredElements, callback ]);\n}\n","import classnames from 'classnames';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nexport function HeaderButton(props) {\n const {\n children = null,\n class: classname,\n onClick = () => {},\n ...otherProps\n } = props;\n\n return <button\n type=\"button\"\n { ...otherProps }\n onClick={ onClick }\n class={ classnames('bio-properties-panel-group-header-button', classname) }>\n { children }\n </button>;\n}\n","/**\n * @typedef { {\n * [key: string]: string;\n * } } TranslateReplacements\n */\n\n/**\n * A simple translation stub to be used for multi-language support.\n * Can be easily replaced with a more sophisticated solution.\n *\n * @param {string} template to interpolate\n * @param {TranslateReplacements} [replacements] a map with substitutes\n *\n * @return {string} the translated string\n */\nexport default function translateFallback(template, replacements) {\n\n replacements = replacements || {};\n\n return template.replace(/{([^}]+)}/g, function(_, key) {\n return replacements[key] || '{' + key + '}';\n });\n}","import {\n useCallback,\n useContext,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n ArrowIcon,\n DeleteIcon,\n} from '../icons';\n\nimport { PropertiesPanelContext } from '../../context';\n\nimport translateFallback from '../util/translateFallback';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n\nexport default function CollapsibleEntry(props) {\n const {\n element,\n entries = [],\n id,\n label,\n open: shouldOpen,\n remove,\n translate = translateFallback\n } = props;\n\n const [ open, setOpen ] = useState(shouldOpen);\n\n const toggleOpen = () => setOpen(!open);\n\n const { onShow } = useContext(PropertiesPanelContext);\n\n const propertiesPanelContext = {\n ...useContext(PropertiesPanelContext),\n onShow: useCallback(() => {\n setOpen(true);\n\n if (isFunction(onShow)) {\n onShow();\n }\n }, [ onShow, setOpen ])\n };\n\n\n const placeholderLabel = translate('<empty>');\n\n return (\n <div\n data-entry-id={ id }\n class={ classnames(\n 'bio-properties-panel-collapsible-entry',\n open ? 'open' : ''\n ) }>\n <div class=\"bio-properties-panel-collapsible-entry-header\" onClick={ toggleOpen }>\n <div\n class={ classnames(\n 'bio-properties-panel-collapsible-entry-header-title',\n !label && 'empty'\n ) }>\n { label || placeholderLabel }\n </div>\n <button\n type=\"button\"\n title={ translate('Toggle list item') }\n class=\"bio-properties-panel-arrow bio-properties-panel-collapsible-entry-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n {\n remove\n ?\n (\n <button type=\"button\" title={ translate('Delete item') } class=\"bio-properties-panel-remove-entry\" onClick={ remove }>\n <DeleteIcon />\n </button>\n )\n : null\n }\n </div>\n <div class={ classnames(\n 'bio-properties-panel-collapsible-entry-entries',\n open ? 'open' : ''\n ) }>\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n {\n entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n\n return (\n <Component\n { ...entry }\n element={ element }\n key={ id } />\n );\n })\n }\n </PropertiesPanelContext.Provider>\n </div>\n </div>\n );\n}","import {\n useEffect\n} from 'preact/hooks';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport { isFunction } from 'min-dash';\n\nimport CollapsibleEntry from './entries/Collapsible';\nimport translateFallback from './util/translateFallback';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {import('../PropertiesPanel').ListItemDefinition} props\n */\nexport default function ListItem(props) {\n const {\n autoFocusEntry,\n autoOpen,\n translate = translateFallback\n } = props;\n\n // focus specified entry on auto open\n useEffect(() => {\n if (autoOpen && autoFocusEntry) {\n const entry = domQuery(`[data-entry-id=\"${autoFocusEntry}\"]`);\n\n const focusableInput = domQuery('.bio-properties-panel-input', entry);\n\n if (focusableInput) {\n\n if (isFunction(focusableInput.select)) {\n focusableInput.select();\n } else if (isFunction(focusableInput.focus)) {\n focusableInput.focus();\n }\n\n focusableInput.scrollIntoView();\n }\n }\n }, [ autoOpen, autoFocusEntry ]);\n\n\n return (\n <div class=\"bio-properties-panel-list-item\">\n <CollapsibleEntry\n { ...props }\n open={ autoOpen }\n translate={ translate }\n />\n </div>\n );\n\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport Tooltip from './entries/Tooltip';\n\nimport classnames from 'classnames';\n\nimport {\n useErrors,\n useLayoutState,\n usePrevious\n} from '../hooks';\n\nimport ListItem from './ListItem';\n\nimport {\n ArrowIcon,\n CreateIcon\n} from './icons';\n\nimport { PropertiesPanelContext } from '../context';\n\nimport { useStickyIntersectionObserver } from '../hooks';\n\nimport translateFallback from './util/translateFallback';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @param {import('../PropertiesPanel').ListGroupDefinition} props\n */\nexport default function ListGroup(props) {\n const {\n add,\n element,\n id,\n items,\n label,\n shouldOpen = false,\n translate = translateFallback\n } = props;\n\n useEffect(() => {\n if (props.shouldSort != undefined) {\n console.warn('the property \\'shouldSort\\' is no longer supported');\n }\n }, [ props.shouldSort ]);\n\n const groupRef = useRef(null);\n\n const [ open, setOpen ] = useLayoutState(\n [ 'groups', id, 'open' ],\n shouldOpen\n );\n\n const [ sticky, setSticky ] = useState(false);\n\n const onShow = useCallback(() => setOpen(true), [ setOpen ]);\n\n const [ localItems, setLocalItems ] = useState([]);\n\n // Flag to mark that add button was clicked in the last render cycle\n const [ addTriggered, setAddTriggered ] = useState(false);\n\n const prevElement = usePrevious(element);\n\n const toggleOpen = useCallback(() => setOpen(!open), [ open ]);\n\n const openItemIds = (element === prevElement && open && addTriggered)\n ? getNewItemIds(items, localItems)\n : [];\n\n // reset local state after items changed\n useEffect(() => {\n setLocalItems(items);\n setAddTriggered(false);\n }, [ items ]);\n\n // set css class when group is sticky to top\n useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n\n const hasItems = !!items.length;\n\n const propertiesPanelContext = {\n ...useContext(PropertiesPanelContext),\n onShow\n };\n\n const handleAddClick = e => {\n setAddTriggered(true);\n setOpen(true);\n\n add(e);\n };\n\n const allErrors = useErrors();\n const hasError = items.some(item => {\n if (allErrors[item.id]) {\n return true;\n }\n\n if (!item.entries) {\n return;\n }\n\n // also check if the error is nested, e.g. for name-value entries\n return item.entries.some(entry => allErrors[entry.id]);\n });\n\n\n return <div class=\"bio-properties-panel-group\" data-group-id={ 'group-' + id } ref={ groupRef }>\n <div\n class={ classnames(\n 'bio-properties-panel-group-header',\n hasItems ? '' : 'empty',\n (hasItems && open) ? 'open' : '',\n (sticky && open) ? 'sticky' : ''\n ) }\n onClick={ hasItems ? toggleOpen : noop }>\n <div\n class=\"bio-properties-panel-group-header-title\"\n >\n <Tooltip value={ props.tooltip } forId={ 'group-' + id } element={ element } parent={ groupRef }>\n { label }\n </Tooltip>\n </div>\n <div class=\"bio-properties-panel-group-header-buttons\">\n {\n add\n ? (\n <button\n type=\"button\"\n title={ translate('Create new list item') }\n class=\"bio-properties-panel-group-header-button bio-properties-panel-add-entry\"\n onClick={ handleAddClick }\n >\n <CreateIcon />\n {\n !hasItems ? (\n <span class=\"bio-properties-panel-add-entry-label\">{ translate('Create') }</span>\n )\n : null\n }\n </button>\n )\n : null\n }\n {\n hasItems\n ? (\n <div\n title={ translate(`List contains {numOfItems} item${items.length != 1 ? 's' : ''}`, { numOfItems: items.length }) }\n class={\n classnames(\n 'bio-properties-panel-list-badge',\n hasError ? 'bio-properties-panel-list-badge--error' : ''\n )\n }\n >\n { items.length }\n </div>\n )\n : null\n }\n {\n hasItems\n ? (\n <button\n type=\"button\"\n title={ translate('Toggle section') }\n class=\"bio-properties-panel-group-header-button bio-properties-panel-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n )\n : null\n }\n </div>\n </div>\n <div class={ classnames(\n 'bio-properties-panel-list',\n open && hasItems ? 'open' : ''\n ) }>\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n\n {\n items.map((item, index) => {\n if (!item) {\n return;\n }\n\n const { id } = item;\n\n // if item was added, open it\n // existing items will not be affected as autoOpen\n // is only applied on first render\n const autoOpen = openItemIds.includes(item.id);\n\n return (\n <ListItem\n { ...item }\n autoOpen={ autoOpen }\n element={ element }\n index={ index }\n key={ id }\n translate={ translate } />\n );\n })\n }\n </PropertiesPanelContext.Provider>\n </div>\n </div>;\n}\n\n\nfunction getNewItemIds(newItems, oldItems) {\n const newIds = newItems.map(item => item.id);\n const oldIds = oldItems.map(item => item.id);\n\n return newIds.filter(itemId => !oldIds.includes(itemId));\n}","import {\n useDescriptionContext\n} from '../../hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.forId - id of the entry the description is used for\n * @param {String} props.value\n */\nexport default function Description(props) {\n const {\n element,\n forId,\n value\n } = props;\n\n const contextDescription = useDescriptionContext(forId, element);\n\n const description = value || contextDescription;\n\n if (description) {\n return (\n <div class=\"bio-properties-panel-description\">\n { description }\n </div>\n );\n }\n}\n","import {\n useError,\n useShowEntryEvent\n} from '../../hooks';\n\nimport {\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport Description from './Description';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nfunction Checkbox(props) {\n const {\n id,\n label,\n onChange,\n disabled,\n value = false,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleChangeCallback = ({ target }) => {\n onChange(target.checked);\n };\n\n const handleChange = e => {\n handleChangeCallback(e);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n const ref = useShowEntryEvent(id);\n\n return (\n <div class=\"bio-properties-panel-checkbox\">\n <input\n ref={ ref }\n id={ prefixId(id) }\n name={ id }\n onFocus={ onFocus }\n onBlur={ onBlur }\n type=\"checkbox\"\n class=\"bio-properties-panel-input\"\n onChange={ handleChange }\n checked={ localValue }\n disabled={ disabled } />\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n </div>\n );\n}\n\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {boolean} [props.disabled]\n */\nexport default function CheckboxEntry(props) {\n const {\n element,\n id,\n description,\n label,\n getValue,\n setValue,\n disabled,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const value = getValue(element);\n\n const error = useError(id);\n\n return (\n <div class=\"bio-properties-panel-entry bio-properties-panel-checkbox-entry\" data-entry-id={ id }>\n <Checkbox\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onChange={ setValue }\n onFocus={ onFocus }\n onBlur={ onBlur }\n value={ value }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.checked;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Checkbox from './Checkbox';\nimport Description from './Description';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.label\n * @param {Array<{label: String, value: *}>} props.options\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {String} [props.description]\n * @param {string|import('preact').Component} [props.tooltip]\n * @param {boolean} [props.disabled]\n * @param {Function} [props.onFocus]\n * @param {Function} [props.onBlur]\n */\nexport default function CheckboxGroup(props) {\n const {\n element,\n id,\n label,\n description,\n tooltip,\n options = [],\n getValue,\n setValue,\n disabled,\n onFocus,\n onBlur\n } = props;\n\n const value = getValue(element) || [];\n\n const handleOptionChange = (optionValue, checked) => {\n const newValue = checked\n ? [ ...value, optionValue ]\n : value.filter(v => v !== optionValue);\n\n setValue(newValue);\n };\n\n return (\n <div class=\"bio-properties-panel-entry bio-properties-panel-checkbox-group\" data-entry-id={ id }>\n <div class=\"bio-properties-panel-group-header\">\n <p class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ element }>\n { label }\n </Tooltip>\n </p>\n </div>\n <div class=\"bio-properties-panel-checkbox-group-entries\">\n {\n options.map((option) => (\n <Checkbox\n key={ option.value }\n id={ `${id}-${option.value}` }\n label={ option.label }\n setValue={ (checked) => handleOptionChange(option.value, checked) }\n getValue={ () => value.includes(option.value) }\n disabled={ disabled }\n onFocus={ onFocus }\n onBlur={ onBlur }\n element={ element } />\n ))\n }\n </div>\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n","import Description from './Description';\n\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction, isObject } from 'min-dash';\n\nimport translateFallback from '../util/translateFallback';\n\nimport {\n useDebounce,\n useError,\n useShowEntryEvent,\n useStaticCallback,\n} from '../../hooks';\n\nimport Tooltip from './Tooltip';\n\nimport {\n EditorView,\n drawSelection,\n highlightSpecialChars,\n keymap,\n placeholder as cmPlaceholder,\n} from '@codemirror/view';\nimport { Annotation, EditorState } from '@codemirror/state';\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldGutter,\n foldKeymap,\n syntaxHighlighting,\n} from '@codemirror/language';\nimport { closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';\nimport { defaultKeymap, history, historyKeymap } from '@codemirror/commands';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport { linter } from '@codemirror/lint';\n\n{\n /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */\n}\n\nconst ExternalChange = Annotation.define();\nconst parseJsonLinter = jsonParseLinter();\n\n/**\n * A CodeMirror based JSON editor for the properties panel.\n *\n * @param {object} props\n * @param {string} props.id\n * @param {string} props.label\n * @param {string} [props.value]\n * @param {Function} props.onInput\n * @param {boolean} [props.disabled]\n * @param {string} [props.placeholder]\n * @param {string} [props.tooltip]\n * @param {object} [props.element]\n */\nfunction JsonEditor(props) {\n const {\n id,\n label,\n debounce,\n value = '',\n onInput: commitValue,\n disabled,\n placeholder,\n tooltip,\n element,\n } = props;\n\n const containerRef = useRef(null);\n const viewRef = useRef(null);\n const editorRef = useShowEntryEvent(id);\n\n const onInput = useStaticCallback((newValue) => {\n commitValue(newValue === '' ? undefined : newValue);\n });\n\n const handleChange = useDebounce(onInput, debounce);\n\n useEffect(() => {\n const view = new EditorView({\n state: EditorState.create({\n doc: value,\n extensions: [\n highlightSpecialChars(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n foldGutter(),\n bracketMatching(),\n closeBrackets(),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n ...closeBracketsKeymap,\n ...foldKeymap,\n ]),\n EditorState.tabSize.of(2),\n EditorView.lineWrapping,\n EditorState.readOnly.of(!!disabled),\n ...(placeholder ? [cmPlaceholder(placeholder)] : []),\n EditorView.updateListener.of((update) => {\n const isExternal = update.transactions.some((tr) =>\n tr.annotation(ExternalChange),\n );\n if (update.docChanged && !isExternal) {\n handleChange(update.state.doc.toString());\n }\n }),\n json(),\n linter(\n (view) => {\n const content = view.state.doc.toString();\n if (!content.trim()) return [];\n return parseJsonLinter(view);\n },\n { delay: 300 },\n ),\n ],\n }),\n parent: containerRef.current,\n });\n\n viewRef.current = view;\n\n // Allow useShowEntryEvent to focus the editor\n editorRef.current = view.contentDOM;\n\n const prefixedId = `bio-properties-panel-${id}`;\n view.contentDOM.setAttribute('id', prefixedId);\n view.contentDOM.setAttribute('aria-label', label);\n\n return () => {\n view.destroy();\n };\n }, []);\n\n // Sync external value changes into the editor\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n\n const currentValue = view.state.doc.toString();\n if (value === currentValue) return;\n\n view.dispatch({\n changes: { from: 0, to: currentValue.length, insert: value || '' },\n annotations: ExternalChange.of(true),\n });\n }, [value]);\n\n // Focus editor on label click manually, as the native `for`\n // attribute does not work with contenteditable elements\n const focusEditor = () => {\n viewRef.current && viewRef.current.focus();\n };\n\n return (\n <div class=\"bio-properties-panel-json-editor\">\n <label class=\"bio-properties-panel-label\" onClick={focusEditor}>\n <Tooltip value={tooltip} forId={id} element={element}>\n {label}\n </Tooltip>\n </label>\n <div\n class={classnames('bio-properties-panel-input', value && 'edited')}\n ref={containerRef}\n />\n </div>\n );\n}\n\n/**\n * Entry wrapper for JsonEditor, handles getValue/setValue, built-in JSON validation, error display, and description.\n *\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} [props.description]\n * @param {string} props.label\n * @param {Function} props.debounce\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {boolean} [props.disabled]\n * @param {string} [props.placeholder]\n * @param {string} [props.tooltip]\n * @param {Function} [props.validate]\n * @param {Function} [props.translate]\n */\nexport default function JsonEditorEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n label,\n getValue,\n setValue,\n disabled,\n placeholder,\n tooltip,\n validate,\n translate = translateFallback,\n } = props;\n\n const globalError = useError(id);\n\n let value = getValue(element);\n const [localError, setLocalError] = useState(() =>\n computeError(validate, value, translate),\n );\n const [editorValue, setEditorValue] = useState(value);\n\n useEffect(() => {\n if (value === editorValue) {\n return;\n }\n\n setEditorValue(value);\n setLocalError(computeError(validate, value, translate));\n }, [value, validate]);\n\n const onInput = useStaticCallback((newValue) => {\n setEditorValue(newValue);\n\n const currentValue = getValue(element);\n\n if (newValue !== currentValue) {\n const newValidationError = computeError(validate, newValue, translate);\n\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n }\n });\n\n const error = globalError || localError;\n\n return (\n <div\n class={classnames('bio-properties-panel-entry', error && 'has-error')}\n data-entry-id={id}\n >\n <JsonEditor\n id={id}\n key={element}\n label={label}\n debounce={debounce}\n value={value}\n onInput={onInput}\n disabled={disabled}\n placeholder={placeholder}\n tooltip={tooltip}\n element={element}\n />\n {error && <div class=\"bio-properties-panel-error\">{error}</div>}\n <Description forId={id} element={element} value={description} />\n </div>\n );\n}\n\n/**\n * Check if the JSON editor entry has been edited.\n */\nexport function isEdited(node) {\n return node && node.classList.contains('edited');\n}\n\n// helpers /////////////////\n\nfunction computeError(validate, value, translate) {\n return (\n (isFunction(validate) ? validate(value) : null) ||\n validateJson(value, translate)\n );\n}\n\nfunction validateJson(value, translate = translateFallback) {\n if (!value || !value.trim()) return null;\n\n try {\n return isObject(JSON.parse(value))\n ? null\n : translate('JSON contains errors');\n } catch (e) {\n return translate('JSON contains errors');\n }\n}\n","import { OpenPopupIcon } from './icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * Button to open popups.\n *\n * @param {Object} props\n * @param {Function} props.onClick - Callback to trigger when the button is clicked.\n * @param {string} [props.title] - Tooltip text for the button.\n * @param {boolean} [props.disabled] - Whether the button is disabled.\n * @param {string} [props.className] - Additional class names for the button.\n */\nexport function OpenPopupButton({\n onClick,\n title = 'Open pop-up editor',\n}) {\n return (\n <button\n type=\"button\"\n title={ title }\n class={ 'bio-properties-panel-open-feel-popup' }\n onClick={ onClick }\n >\n <OpenPopupIcon />\n </button>\n );\n}\n","import classNames from 'classnames';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { forwardRef } from 'preact/compat';\n\nimport { ExpressionEditor } from '@kunpeng-js/expression-editor';\nimport { useStaticCallback } from '../../../hooks';\n\nimport { OpenPopupButton } from '../../OpenPopupButton';\n\n{\n /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */\n}\n\nconst noop = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus = function (editor, ref) {\n const [buffer, setBuffer] = useState(undefined);\n\n ref.current = useMemo(\n () => ({\n focus: (offset) => {\n if (editor) {\n editor.focus(offset);\n } else {\n if (typeof offset === 'undefined') {\n offset = Infinity;\n }\n setBuffer(offset);\n }\n },\n }),\n [editor],\n );\n\n useEffect(() => {\n if (typeof buffer !== 'undefined' && editor) {\n editor.focus(buffer);\n setBuffer(false);\n }\n }, [editor, buffer]);\n};\n\nconst TemplatingEditor = forwardRef((props, ref) => {\n const {\n onInput,\n disabled,\n tooltipContainer,\n enableGutters,\n value,\n onLint = noop,\n onOpenPopup = noop,\n popupOpen,\n contentAttributes = {},\n hostLanguage = null,\n singleLine = false,\n } = props;\n\n const inputRef = useRef();\n const [editor, setEditor] = useState();\n const [localValue, setLocalValue] = useState(value || '');\n\n useBufferedFocus(editor, ref);\n\n const handleInput = useStaticCallback((newValue) => {\n onInput(newValue);\n setLocalValue(newValue);\n });\n\n useEffect(() => {\n let editor;\n\n editor = new ExpressionEditor({\n container: inputRef.current,\n onChange: handleInput,\n value: localValue,\n onLint,\n contentAttributes,\n tooltipContainer,\n enableGutters,\n hostLanguage,\n singleLine,\n lineWrap: true,\n });\n\n setEditor(editor);\n\n return () => {\n onLint([]);\n inputRef.current.innerHTML = '';\n setEditor(null);\n };\n }, []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (value === localValue) {\n return;\n }\n\n editor.setValue(value);\n setLocalValue(value);\n }, [value]);\n\n const handleClick = () => {\n ref.current.focus();\n };\n\n return (\n <div\n class={classNames(\n 'bio-properties-panel-feelers-editor-container',\n popupOpen ? 'popupOpen' : null,\n )}\n >\n {popupOpen && (\n <div class=\"bio-properties-panel-feelers-editor__popup-placeholder\">\n Opened in popup\n </div>\n )}\n <div\n name={props.name}\n class={classNames(\n 'bio-properties-panel-feelers-editor bio-properties-panel-input',\n localValue ? 'edited' : null,\n disabled ? 'disabled' : null,\n )}\n ref={inputRef}\n onClick={handleClick}\n ></div>\n {!disabled && <OpenPopupButton onClick={() => onOpenPopup('feelers')} />}\n </div>\n );\n});\n\nexport default TemplatingEditor;\n","import classNames from 'classnames';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { forwardRef } from 'preact/compat';\n\nimport Editor from '@kunpeng-js/expression-editor';\n\nimport { EditorView, lineNumbers } from '@codemirror/view';\n\nimport { useStaticCallback } from '../../../hooks';\n\nimport { OpenPopupButton } from '../../OpenPopupButton';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus = function(editor, ref) {\n\n const [ buffer, setBuffer ] = useState(undefined);\n\n ref.current = useMemo(() => ({\n focus: (offset) => {\n if (editor) {\n editor.focus(offset);\n } else {\n if (typeof offset === 'undefined') {\n offset = Infinity;\n }\n setBuffer(offset);\n }\n }\n }), [ editor ]);\n\n useEffect(() => {\n if (typeof buffer !== 'undefined' && editor) {\n editor.focus(buffer);\n setBuffer(false);\n }\n }, [ editor, buffer ]);\n};\n\nconst ExpressionEditor = forwardRef((props, ref) => {\n\n const {\n contentAttributes,\n enableGutters,\n value,\n onInput,\n onKeyDown: onKeyDownProp = noop,\n onFeelToggle = noop,\n onLint = noop,\n onOpenPopup = noop,\n placeholder,\n popupOpen,\n disabled,\n tooltipContainer,\n variables,\n feelLanguageContext\n } = props;\n\n const inputRef = useRef();\n const [ editor, setEditor ] = useState();\n const [ localValue, setLocalValue ] = useState(value || '');\n\n const {\n builtins,\n dialect,\n parserDialect\n } = feelLanguageContext || {};\n\n useBufferedFocus(editor, ref);\n\n const handleInput = useStaticCallback(newValue => {\n onInput(newValue);\n setLocalValue(newValue);\n });\n\n useEffect(() => {\n\n let editor;\n\n /* Trigger FEEL toggle when\n *\n * - `backspace` is pressed\n * - AND the cursor is at the beginning of the input\n */\n const onKeyDown = e => {\n\n // Call parent onKeyDown handler first\n onKeyDownProp(e);\n\n if (e.key !== 'Backspace' || !editor) {\n return;\n }\n\n const selection = editor.getSelection();\n const range = selection.ranges[selection.mainIndex];\n\n if (range.from === 0 && range.to === 0) {\n onFeelToggle();\n }\n };\n\n editor = new Editor({\n container: inputRef.current,\n onChange: handleInput,\n onKeyDown: onKeyDown,\n onLint: onLint,\n placeholder: placeholder,\n tooltipContainer: tooltipContainer,\n value: localValue,\n variables,\n builtins,\n dialect,\n parserDialect,\n extensions: [\n ...enableGutters ? [ lineNumbers() ] : [],\n EditorView.lineWrapping\n ],\n contentAttributes\n });\n\n setEditor(\n editor\n );\n\n return () => {\n onLint([]);\n inputRef.current.innerHTML = '';\n setEditor(null);\n };\n }, []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (value === localValue) {\n return;\n }\n\n editor.setValue(value);\n setLocalValue(value);\n }, [ value ]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.setVariables(variables);\n }, [ variables ]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.setPlaceholder(placeholder);\n }, [ placeholder ]);\n\n const handleClick = () => {\n ref.current.focus();\n };\n\n return <div class={ classNames(\n 'bio-properties-panel-feel-editor-container',\n disabled ? 'disabled' : null,\n popupOpen ? 'popupOpen' : null)\n }>\n {\n popupOpen && <div class=\"bio-properties-panel-feel-editor__open-popup-placeholder\">Opened in editor</div>\n }\n <div\n name={ props.name }\n class={ classNames('bio-properties-panel-input', localValue ? 'edited' : null) }\n ref={ inputRef }\n onClick={ handleClick }\n ></div>\n {!disabled && <OpenPopupButton\n onClick={ () => onOpenPopup('feel') }\n /> }\n </div>;\n});\n\nexport default ExpressionEditor;\n","export function ExpressionIndicator(props) {\n const {\n active\n } = props;\n\n if (!active) {\n return null;\n }\n\n return <span class=\"bio-properties-panel-expression-indicator\">\n =\n </span>;\n}\n","import classNames from 'classnames';\nimport { FeelIcon as FeelIconSvg } from '../../icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.label\n * @param {String} props.feel\n */\nexport default function ExpressionIcon(props) {\n\n const {\n feel = false,\n active,\n disabled = false,\n onClick = noop\n } = props;\n\n const feelRequiredLabel = 'Expression expression is mandatory';\n const feelOptionalLabel = `Click to ${active ? 'remove' : 'set a'} dynamic value with FEEL expression`;\n\n const handleClick = e => {\n onClick(e);\n\n // when pointer event was created from keyboard, keep focus on button\n if (!e.pointerType) {\n e.stopPropagation();\n }\n };\n\n return (\n <button\n type=\"button\"\n class={ classNames('bio-properties-panel-feel-icon',\n active ? 'active' : null,\n feel === 'required' ? 'required' : 'optional') }\n onClick={ handleClick }\n disabled={ feel === 'required' || disabled }\n title={\n feel === 'required' ? feelRequiredLabel : feelOptionalLabel\n }\n >\n <FeelIconSvg />\n </button>\n );\n}\n","/**\n * @param {KeyboardEvent} event\n * @return {boolean}\n */\nexport function isCmd(event) {\n\n // ensure we don't react to AltGr\n // (mapped to CTRL + ALT)\n if (event.altKey) {\n return false;\n }\n\n return event.ctrlKey || event.metaKey;\n}\n\nexport function isCmdWithChar(event) {\n return isCmd(event) && event.key.length === 1 && /^[a-zA-Z]$/.test(event.key);\n}","import Description from './Description';\n\nimport {\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport classNames from 'classnames';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nexport function ToggleSwitch(props) {\n const {\n id,\n label,\n onInput,\n value,\n switcherLabel,\n inline,\n onFocus,\n onBlur,\n inputRef,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleInputCallback = async () => {\n onInput(!value);\n };\n\n const handleInput = e => {\n handleInputCallback(e);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class={ classNames(\n 'bio-properties-panel-toggle-switch',\n { inline }\n ) }>\n <label class=\"bio-properties-panel-label\"\n for={ prefixId(id) }>\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n <div class=\"bio-properties-panel-field-wrapper\">\n <label class=\"bio-properties-panel-toggle-switch__switcher\">\n <input\n ref={ inputRef }\n id={ prefixId(id) }\n class=\"bio-properties-panel-input\"\n type=\"checkbox\"\n onFocus={ onFocus }\n onBlur={ onBlur }\n name={ id }\n onInput={ handleInput }\n checked={ !!localValue } />\n <span class=\"bio-properties-panel-toggle-switch__slider\" />\n </label>\n { switcherLabel && <p class=\"bio-properties-panel-toggle-switch__label\">{ switcherLabel }</p> }\n </div>\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {String} props.switcherLabel\n * @param {Boolean} props.inline\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n */\nexport default function ToggleSwitchEntry(props) {\n const {\n element,\n id,\n description,\n label,\n switcherLabel,\n inline,\n getValue,\n setValue,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const value = getValue(element);\n return (\n <div class=\"bio-properties-panel-entry bio-properties-panel-toggle-switch-entry\" data-entry-id={ id }>\n <ToggleSwitch\n id={ id }\n label={ label }\n value={ value }\n onInput={ setValue }\n onFocus={ onFocus }\n onBlur={ onBlur }\n switcherLabel={ switcherLabel }\n inline={ inline }\n tooltip={ tooltip }\n element={ element } />\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.checked;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from './Description';\nimport Tooltip from './Tooltip';\n\nimport {\n useEffect,\n useMemo,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useError\n} from '../../hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nexport function NumberField(props) {\n\n const {\n debounce,\n disabled,\n displayLabel = true,\n id,\n inputRef,\n label,\n max,\n min,\n onInput,\n step,\n value = '',\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleInputCallback = useMemo(() => {\n return debounce((target) => {\n\n if (target.validity.valid) {\n onInput(target.value ? parseFloat(target.value) : undefined);\n }\n });\n }, [ onInput, debounce ]);\n\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-numberfield\">\n {displayLabel && (\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n )}\n <input\n id={ prefixId(id) }\n ref={ inputRef }\n type=\"number\"\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n max={ max }\n min={ min }\n onInput={ handleInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n step={ step }\n value={ localValue } />\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Boolean} props.debounce\n * @param {String} props.description\n * @param {Boolean} props.disabled\n * @param {Object} props.element\n * @param {Function} props.getValue\n * @param {String} props.id\n * @param {String} props.label\n * @param {String} props.max\n * @param {String} props.min\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {String} props.step\n * @param {Function} props.validate\n */\nexport default function NumberFieldEntry(props) {\n const {\n debounce,\n description,\n disabled,\n element,\n getValue,\n id,\n label,\n max,\n min,\n setValue,\n step,\n onFocus,\n onBlur,\n validate,\n tooltip\n } = props;\n\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = (newValue) => {\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n\n const error = globalError || localError;\n\n return (\n <div class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '') } data-entry-id={ id }>\n <NumberField\n debounce={ debounce }\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onFocus={ onFocus }\n onBlur={ onBlur }\n onInput={ onInput }\n max={ max }\n min={ min }\n step={ step }\n value={ value }\n tooltip={ tooltip }\n />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from '../Description';\nimport TemplatingEditor from '../templating/TemplatingEditor';\n\nimport {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport { forwardRef } from 'preact/compat';\n\nimport classnames from 'classnames';\n\nimport { isFunction, isString } from 'min-dash';\n\nimport {\n useDebounce,\n useError,\n useShowEntryEvent,\n useStaticCallback\n} from '../../../hooks';\n\nimport ExpressionEditor from './ExpressionEditor';\nimport { ExpressionIndicator } from './ExpressionIndicator';\nimport ExpressionIcon from './ExpressionIcon';\n\nimport { EventContext, FeelLanguageContext } from '../../../context';\nimport { isCmdWithChar } from '../../util/keyboardUtils';\n\nimport { ToggleSwitch } from '../ToggleSwitch';\n\nimport { NumberField } from '../NumberField';\nimport Tooltip from '../Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @typedef {'required'|'optional'|'static'} FeelType\n */\n\n/**\n * @param {Object} props\n * @param {Boolean} props.debounce\n * @param {String} props.id\n * @param {Object} props.element\n * @param {String} props.label\n * @param {String} props.hostLanguage\n * @param {Function} props.onInput\n * @param {Function} props.onBlur\n * @param {Function} props.onError\n * @param {FeelType} [props.feel]\n * @param {String} props.value\n * @param {Boolean} [props.singleLine]\n * @param {Function} props.tooltipContainer\n * @param {Function | import('preact').Component} props.OptionalComponent\n * @param {Boolean} props.disabled\n * @param {Array} props.variables\n * @param {string} [props.placeholder]\n * @param {string | import('preact').Component} props.tooltip\n */\nfunction FeelTextfield(props) {\n const {\n debounce,\n id,\n element,\n label,\n hostLanguage,\n onInput: commitValue,\n onBlur,\n onError,\n placeholder,\n feel,\n value = '',\n disabled = false,\n variables,\n singleLine,\n tooltipContainer,\n OptionalComponent = OptionalFeelInput,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const editorRef = useShowEntryEvent(id);\n const containerRef = useRef();\n\n const onInput = useCallback(newValue => {\n\n // we don't commit empty FEEL expressions,\n // but instead serialize them as <undefined>\n const newModelValue = (newValue === '' || newValue === '=') ? undefined : newValue;\n commitValue(newModelValue);\n }, [ commitValue ]);\n\n const feelActive = (isString(localValue) && localValue.startsWith('=')) || feel === 'required';\n const feelOnlyValue = (isString(localValue) && localValue.startsWith('=')) ? localValue.substring(1) : localValue;\n const feelLanguageContext = useContext(FeelLanguageContext);\n\n const [ focus, _setFocus ] = useState(undefined);\n\n const {\n eventBus\n } = useContext(EventContext);\n\n const [ isPopupOpen, setIsPopupOpen ] = useState(false);\n\n const setFocus = (offset = 0) => {\n const hasFocus = containerRef.current.contains(document.activeElement);\n\n // Keep caret position if it is already focused, otherwise focus at the end\n const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n\n _setFocus(position + offset);\n };\n\n /**\n * @type { import('min-dash').DebouncedFunction }\n */\n const handleInput = useDebounce(onInput, debounce);\n\n const handleFeelToggle = useStaticCallback(() => {\n if (feel === 'required') {\n return;\n }\n\n if (!feelActive) {\n setLocalValue('=' + localValue);\n handleInput('=' + localValue);\n } else {\n setLocalValue(feelOnlyValue);\n handleInput(feelOnlyValue);\n }\n });\n\n const handleLocalInput = (newValue, useDebounce = true) => {\n if (feelActive) {\n newValue = '=' + newValue;\n }\n\n if (newValue === localValue) {\n return;\n }\n\n setLocalValue(newValue);\n if (useDebounce) {\n handleInput(newValue);\n } else {\n onInput(newValue);\n }\n\n if (!feelActive && isString(newValue) && newValue.startsWith('=')) {\n\n // focus is behind `=` sign that will be removed\n setFocus(-1);\n }\n };\n\n const handleOnBlur = (e) => {\n handleInput.cancel?.();\n if (e.target.type === 'checkbox') {\n onInput(e.target.checked);\n } else {\n const trimmedValue = e.target.value.trim();\n handleLocalInput(trimmedValue, false);\n }\n\n if (onBlur) {\n onBlur(e);\n }\n };\n\n const handleOnKeyDown = e => {\n if (isCmdWithChar(e)) {\n handleInput.flush();\n }\n };\n\n const handleLint = useStaticCallback((lint = []) => {\n\n const syntaxError = lint.some(report => report.type === 'Syntax Error');\n\n if (syntaxError) {\n onError('Unparsable FEEL expression.');\n } else {\n onError(undefined);\n }\n });\n\n const handleOpenPopup = (type = 'feel') => {\n const isOpen = eventBus.fire('propertiesPanel.openPopup', {\n element,\n entryId: id,\n hostLanguage,\n label,\n onInput: handleLocalInput,\n singleLine,\n sourceElement: editorRef.current,\n tooltipContainer,\n type,\n value: feelOnlyValue,\n variables,\n feelLanguageContext,\n });\n\n if (isOpen) {\n eventBus.once('propertiesPanelPopup.close', () => {\n setIsPopupOpen(false);\n });\n }\n\n setIsPopupOpen(isOpen === true);\n };\n\n useEffect(() => {\n if (typeof focus !== 'undefined') {\n editorRef.current.focus(focus);\n _setFocus(undefined);\n }\n }, [ focus ]);\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n // External value change removed content => keep FEEL configuration\n if (!value) {\n setLocalValue(feelActive ? '=' : '');\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n useEffect(() => {\n return () => {\n eventBus.fire('propertiesPanel.closePopup');\n };\n }, []);\n\n // copy-paste integration\n useEffect(() => {\n const copyHandler = event => {\n if (!feelActive) {\n return;\n }\n event.clipboardData.setData('application/FEEL', event.clipboardData.getData('text'));\n };\n\n const pasteHandler = event => {\n if (feelActive || isPopupOpen) {\n return;\n }\n\n const feelData = event.clipboardData.getData('application/FEEL');\n if (feelData) {\n setTimeout(() => {\n handleFeelToggle();\n setFocus();\n });\n return;\n }\n\n const input = event.target;\n const isFieldEmpty = !input.value;\n const isAllSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n\n if (isFieldEmpty || isAllSelected) {\n const textData = event.clipboardData.getData('text');\n const trimmedValue = textData.trim();\n\n setLocalValue(trimmedValue);\n handleInput(trimmedValue);\n\n if (!feelActive && isString(trimmedValue) && trimmedValue.startsWith('=')) {\n setFocus(trimmedValue.length - 1);\n }\n\n event.preventDefault();\n }\n };\n containerRef.current.addEventListener('copy', copyHandler);\n containerRef.current.addEventListener('cut', copyHandler);\n containerRef.current.addEventListener('paste', pasteHandler);\n\n return () => {\n containerRef.current.removeEventListener('copy', copyHandler);\n containerRef.current.removeEventListener('cut', copyHandler);\n containerRef.current.removeEventListener('paste', pasteHandler);\n };\n }, [ containerRef, feelActive, handleFeelToggle, setFocus ]);\n\n return (\n <div class={ classnames(\n 'bio-properties-panel-feel-entry',\n { 'feel-active': feelActive }\n ) }>\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\" onClick={ () => setFocus() }>\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n {label}\n </Tooltip>\n <ExpressionIcon\n label={ label }\n feel={ feel }\n onClick={ handleFeelToggle }\n active={ feelActive }></ExpressionIcon>\n </label>\n\n <div class=\"bio-properties-panel-feel-container\" ref={ containerRef }>\n <ExpressionIndicator\n active={ feelActive }\n disabled={ feel !== 'optional' || disabled }\n onClick={ handleFeelToggle }\n />\n {feelActive ?\n <ExpressionEditor\n name={ id }\n onInput={ handleLocalInput }\n onKeyDown={ handleOnKeyDown }\n contentAttributes={ { 'id': prefixId(id), 'aria-label': label } }\n disabled={ disabled }\n popupOpen={ isPopupOpen }\n onFeelToggle={ () => {\n handleFeelToggle();\n setFocus(true);\n } }\n onLint={ handleLint }\n onOpenPopup={ handleOpenPopup }\n placeholder={ placeholder }\n value={ feelOnlyValue }\n variables={ variables }\n feelLanguageContext={ feelLanguageContext }\n ref={ editorRef }\n tooltipContainer={ tooltipContainer }\n /> :\n <OptionalComponent\n { ...props }\n popupOpen={ isPopupOpen }\n onInput={ handleLocalInput }\n onKeyDown={ handleOnKeyDown }\n onBlur={ handleOnBlur }\n contentAttributes={ { 'id': prefixId(id), 'aria-label': label } }\n value={ localValue }\n ref={ editorRef }\n onOpenPopup={ handleOpenPopup }\n containerRef={ containerRef }\n />\n }\n </div>\n </div>\n );\n}\n\n\nconst OptionalFeelInput = forwardRef((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n onKeyDown,\n value,\n onFocus,\n onBlur,\n placeholder\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: (position) => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n if (typeof position === 'number') {\n if (position > value.length) {\n position = value.length;\n }\n input.setSelectionRange(position, position);\n }\n\n }\n };\n\n return <input\n id={ prefixId(id) }\n type=\"text\"\n ref={ inputRef }\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ e => onInput(e.target.value) }\n onFocus={ onFocus }\n onKeyDown={ onKeyDown }\n onBlur={ onBlur }\n placeholder={ placeholder }\n value={ value || '' } />;\n});\n\nconst OptionalFeelNumberField = forwardRef((props, ref) => {\n const {\n id,\n debounce,\n disabled,\n onInput,\n value,\n min,\n max,\n step,\n onFocus,\n onBlur\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: (position) => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n if (typeof position === 'number' && position !== Infinity) {\n if (position > value.length) {\n position = value.length;\n }\n input.setSelectionRange(position, position);\n }\n\n }\n };\n\n return <NumberField\n id={ id }\n debounce={ debounce }\n disabled={ disabled }\n displayLabel={ false }\n inputRef={ inputRef }\n max={ max }\n min={ min }\n onInput={ onInput }\n step={ step }\n value={ value }\n onFocus={ onFocus }\n onBlur={ onBlur }\n />;\n});\n\nconst OptionalFeelTextArea = forwardRef((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur,\n placeholder\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n input.setSelectionRange(0, 0);\n }\n };\n\n return <textarea\n id={ prefixId(id) }\n type=\"text\"\n ref={ inputRef }\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ e => onInput(e.target.value) }\n onFocus={ onFocus }\n onBlur={ onBlur }\n placeholder={ placeholder }\n value={ value || '' }\n data-gramm=\"false\"\n />;\n});\n\nconst OptionalFeelToggleSwitch = forwardRef((props, ref) => {\n const {\n id,\n onInput,\n value,\n onFocus,\n onBlur,\n switcherLabel\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n }\n };\n\n return <ToggleSwitch\n id={ id }\n value={ value }\n inputRef={ inputRef }\n onInput={ onInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n switcherLabel={ switcherLabel } />;\n});\n\nconst OptionalFeelCheckbox = forwardRef((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur\n } = props;\n\n const inputRef = useRef();\n\n const handleChange = ({ target }) => {\n onInput(target.checked);\n };\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n }\n };\n\n return <input\n ref={ inputRef }\n id={ prefixId(id) }\n name={ id }\n onFocus={ onFocus }\n onBlur={ onBlur }\n type=\"checkbox\"\n class=\"bio-properties-panel-input\"\n onChange={ handleChange }\n checked={ value }\n disabled={ disabled } />;\n});\n\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n * @param {string|import('preact').Component} props.tooltip\n */\nexport default function FeelEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n feel,\n label,\n getValue,\n setValue,\n tooltipContainer,\n hostLanguage,\n singleLine,\n validate,\n show = noop,\n example,\n variables,\n onFocus,\n onBlur,\n placeholder,\n tooltip\n } = props;\n\n const [ validationError, setValidationError ] = useState(null);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setValidationError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n const value = getValue(element);\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n // don't create multiple commandStack entries for the same value\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setValidationError(newValidationError);\n });\n\n const onError = useCallback(err => {\n setLocalError(err);\n }, []);\n\n const temporaryError = useError(id);\n\n const error = temporaryError || localError || validationError;\n\n return (\n <div\n class={ classnames(\n props.class,\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <FeelTextfield\n { ...props }\n debounce={ debounce }\n disabled={ disabled }\n feel={ feel }\n id={ id }\n key={ element }\n label={ label }\n onInput={ onInput }\n onError={ onError }\n onFocus={ onFocus }\n onBlur={ onBlur }\n placeholder={ placeholder }\n example={ example }\n hostLanguage={ hostLanguage }\n singleLine={ singleLine }\n show={ show }\n value={ value }\n variables={ variables }\n tooltipContainer={ tooltipContainer }\n OptionalComponent={ props.OptionalComponent }\n tooltip={ tooltip } />\n {error && <div class=\"bio-properties-panel-error\">{error}</div>}\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.max\n * @param {String} props.min\n * @param {String} props.step\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelNumberEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-number\" OptionalComponent={ OptionalFeelNumberField } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n */\nexport function FeelTextAreaEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-textarea\" OptionalComponent={ OptionalFeelTextArea } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelToggleSwitchEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-toggle-switch\" OptionalComponent={ OptionalFeelToggleSwitch } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelCheckboxEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-checkbox\" OptionalComponent={ OptionalFeelCheckbox } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.hostLanguage\n * @param {Boolean} props.singleLine\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelTemplatingEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-templating\" OptionalComponent={ TemplatingEditor } { ...props } />;\n}\n\nexport function isEdited(node) {\n if (!node) {\n return false;\n }\n\n if (node.type === 'checkbox') {\n return !!node.checked || node.classList.contains('edited');\n }\n\n return !!node.value || node.classList.contains('edited');\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${id}`;\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from 'preact/hooks';\nimport { useStaticCallback, useShowEntryEvent } from '../../../hooks';\nimport { isFunction } from 'min-dash';\nimport { useError } from '../../../hooks';\nimport classnames from 'classnames';\nimport Description from '../Description';\nimport TemplatingEditor from './TemplatingEditor';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n */\nexport default function TemplatingEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n label,\n getValue,\n setValue,\n tooltipContainer,\n validate,\n show = noop,\n } = props;\n\n const [ validationError, setValidationError ] = useState(null);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setValidationError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n // don't create multiple commandStack entries for the same value\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setValidationError(newValidationError);\n });\n\n const onError = useCallback(err => {\n setLocalError(err);\n }, []);\n\n const temporaryError = useError(id);\n\n const error = localError || temporaryError || validationError;\n\n return (\n <div\n class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <Templating\n debounce={ debounce }\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onInput={ onInput }\n onError={ onError }\n show={ show }\n value={ value }\n tooltipContainer={ tooltipContainer } />\n {error && <div class=\"bio-properties-panel-error\">{error}</div>}\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nfunction Templating(props) {\n const {\n debounce,\n id,\n label,\n onInput,\n onError,\n value = '',\n disabled = false,\n tooltipContainer\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const editorRef = useShowEntryEvent(id);\n const containerRef = useRef();\n\n const [ focus, _setFocus ] = useState(undefined);\n\n const setFocus = (offset = 0) => {\n const hasFocus = containerRef.current.contains(document.activeElement);\n\n // Keep caret position if it is already focused, otherwise focus at the end\n const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n\n _setFocus(position + offset);\n };\n\n const handleInputCallback = useMemo(() => {\n return debounce((newValue) => onInput(newValue.length ? newValue : undefined));\n }, [ onInput, debounce ]);\n\n const handleInput = newValue => {\n handleInputCallback(newValue);\n setLocalValue(newValue);\n };\n\n const handleLint = useStaticCallback(lint => {\n\n const errors = lint && lint.length && lint.filter(e => e.severity === 'error') || [];\n\n if (!errors.length) {\n onError(undefined);\n return;\n }\n\n const error = lint[0];\n const message = `${error.source}: ${error.message}`;\n\n onError(message);\n });\n\n useEffect(() => {\n if (typeof focus !== 'undefined') {\n editorRef.current.focus(focus);\n _setFocus(undefined);\n }\n }, [ focus ]);\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value ? value : '');\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-feelers\">\n <label id={ prefixIdLabel(id) } class=\"bio-properties-panel-label\" onClick={ () => setFocus() }>\n {label}\n </label>\n <div class=\"bio-properties-panel-feelers-input\" ref={ containerRef }>\n <TemplatingEditor\n name={ id }\n onInput={ handleInput }\n contentAttributes={ { 'aria-labelledby': prefixIdLabel(id) } }\n disabled={ disabled }\n onLint={ handleLint }\n value={ localValue }\n ref={ editorRef }\n tooltipContainer={ tooltipContainer }\n />\n </div>\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && (!!node.value || node.classList.contains('edited'));\n}\n\n// helpers /////////////////\n\nfunction prefixIdLabel(id) {\n return `bio-properties-panel-feelers-${id}-label`;\n}","import {\n useEffect,\n useState,\n useRef\n} from 'preact/hooks';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useKeyFactory,\n usePrevious,\n useStickyIntersectionObserver\n} from '../../hooks';\n\nimport classnames from 'classnames';\n\nimport {\n ArrowIcon,\n CreateIcon,\n DeleteIcon\n} from '../icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * Entry for handling lists represented as nested entries.\n *\n * @template Item\n * @param {object} props\n * @param {string} props.id\n * @param {*} props.element\n * @param {Function} props.onAdd\n * @param {import('preact').Component} props.component\n * @param {string} [props.label='<empty>']\n * @param {Function} [props.onRemove]\n * @param {Item[]} [props.items]\n * @param {boolean} [props.open]\n * @param {string|boolean} [props.autoFocusEntry] either a custom selector string or true to focus the first input\n * @returns\n */\nexport default function List(props) {\n const {\n id,\n element,\n items = [],\n component,\n label = '<empty>',\n open: shouldOpen,\n onAdd,\n onRemove,\n autoFocusEntry,\n ...restProps\n } = props;\n\n const entryRef = useRef(null);\n const [ open, setOpen ] = useState(!!shouldOpen);\n const [ sticky, setSticky ] = useState(false);\n\n const hasItems = !!items.length;\n const toggleOpen = () => hasItems && setOpen(!open);\n\n const elementChanged = usePrevious(element) !== element;\n const newItems = useNewItems(items, elementChanged);\n\n useEffect(() => {\n if (open && !hasItems) {\n setOpen(false);\n }\n }, [ open, hasItems ]);\n\n /**\n * @param {MouseEvent} event\n */\n function addItem(event) {\n event.stopPropagation();\n onAdd();\n\n if (!open) {\n setOpen(true);\n }\n }\n\n // set css class when entry is sticky to top\n useStickyIntersectionObserver(entryRef, 'div.bio-properties-panel-scroll-container', setSticky);\n\n return (\n <div\n data-entry-id={ id }\n class={ classnames(\n 'bio-properties-panel-entry',\n 'bio-properties-panel-list-entry',\n hasItems ? '' : 'empty',\n open ? 'open' : ''\n ) }\n ref={ entryRef }>\n <div\n class={ classnames(\n 'bio-properties-panel-list-entry-header',\n (sticky && open) ? 'sticky' : ''\n ) }\n onClick={ toggleOpen }>\n <div\n class={ classnames(\n 'bio-properties-panel-list-entry-header-title',\n open && 'open'\n ) }>\n { label }\n </div>\n <div\n class=\"bio-properties-panel-list-entry-header-buttons\"\n >\n <button\n type=\"button\"\n title=\"Create new list item\"\n onClick={ addItem }\n class=\"bio-properties-panel-add-entry\"\n >\n <CreateIcon />\n {\n !hasItems ? (\n <span class=\"bio-properties-panel-add-entry-label\">Create</span>\n )\n : null\n }\n </button>\n {\n hasItems && (\n <div\n title={ `List contains ${items.length} item${items.length != 1 ? 's' : ''}` }\n class=\"bio-properties-panel-list-badge\"\n >\n { items.length }\n </div>\n )\n }\n {\n hasItems && (\n <button\n type=\"button\"\n title=\"Toggle list item\"\n class=\"bio-properties-panel-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n )\n }\n </div>\n </div>\n {\n hasItems && (\n <ItemsList\n { ...restProps }\n autoFocusEntry={ autoFocusEntry }\n component={ component }\n element={ element }\n id={ id }\n items={ items }\n newItems={ newItems }\n onRemove={ onRemove }\n open={ open }\n />\n )\n }\n </div>\n );\n}\n\nfunction ItemsList(props) {\n const {\n autoFocusEntry,\n component: Component,\n element,\n id,\n items,\n newItems,\n onRemove,\n open,\n ...restProps\n } = props;\n\n const getKey = useKeyFactory();\n\n const newItem = newItems[0];\n\n useEffect(() => {\n if (newItem && autoFocusEntry) {\n\n // (0) select the parent entry (containing all list items)\n const entry = domQuery(`[data-entry-id=\"${id}\"]`);\n\n // (1) select the first input or a custom element to be focussed\n const selector = typeof(autoFocusEntry) === 'boolean' ?\n '.bio-properties-panel-input' :\n autoFocusEntry;\n const focusableInput = domQuery(selector, entry);\n\n // (2) set focus\n if (focusableInput) {\n\n if (isFunction(focusableInput.select)) {\n focusableInput.select();\n } else if (isFunction(focusableInput.focus)) {\n focusableInput.focus();\n }\n\n }\n }\n }, [ newItem, autoFocusEntry, id ]);\n\n return <ol class={ classnames(\n 'bio-properties-panel-list-entry-items',\n open ? 'open' : ''\n ) }>\n {\n items.map((item, index) => {\n const key = getKey(item);\n\n return (<li class=\"bio-properties-panel-list-entry-item\" key={ key }>\n <Component\n { ...restProps }\n element={ element }\n id={ id }\n index={ index }\n item={ item }\n open={ item === newItem } />\n {\n onRemove && (\n <button\n type=\"button\"\n title=\"Delete item\"\n class=\"bio-properties-panel-remove-entry bio-properties-panel-remove-list-entry\"\n onClick={ () => onRemove && onRemove(item) }\n ><DeleteIcon /></button>\n )\n }\n </li>);\n })\n }\n </ol>;\n}\n\nfunction useNewItems(items = [], shouldReset) {\n const previousItems = usePrevious(items.slice()) || [];\n\n if (shouldReset) {\n return [];\n }\n\n return previousItems ? items.filter(item => !previousItems.includes(item)) : [];\n}\n","import classNames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useError,\n useShowEntryEvent\n} from '../../hooks';\n\nimport {\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport Description from './Description';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef { { value: string, label: string, disabled: boolean, children: { value: string, label: string, disabled: boolean } } } Option\n */\n\n/**\n * Provides basic select input.\n *\n * @param {object} props\n * @param {string} props.id\n * @param {string[]} props.path\n * @param {string} props.label\n * @param {Function} props.onChange\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Array<Option>} [props.options]\n * @param {string} props.value\n * @param {boolean} [props.disabled]\n */\nfunction Select(props) {\n const {\n id,\n label,\n onChange,\n options = [],\n value = '',\n disabled,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const ref = useShowEntryEvent(id);\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleChangeCallback = ({ target }) => {\n onChange(target.value);\n };\n\n const handleChange = e => {\n handleChangeCallback(e);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-select\">\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n {label}\n </Tooltip>\n </label>\n <select\n ref={ ref }\n id={ prefixId(id) }\n name={ id }\n class=\"bio-properties-panel-input\"\n onInput={ handleChange }\n onFocus={ onFocus }\n onBlur={ onBlur }\n value={ localValue }\n disabled={ disabled }\n >\n {options.map((option, idx) => {\n if (option.children) {\n return (\n <optgroup key={ idx } label={ option.label }>\n {option.children.map((child, idx) => (\n <option\n key={ idx }\n value={ child.value }\n disabled={ child.disabled }\n >\n {child.label}\n </option>\n ))}\n </optgroup>\n );\n }\n\n return (\n <option key={ idx } value={ option.value } disabled={ option.disabled }>\n {option.label}\n </option>\n );\n })}\n </select>\n </div>\n );\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} [props.description]\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Function} props.getOptions\n * @param {boolean} [props.disabled]\n * @param {Function} [props.validate]\n * @param {string|import('preact').Component} props.tooltip\n */\nexport default function SelectEntry(props) {\n const {\n element,\n id,\n description,\n label,\n getValue,\n setValue,\n getOptions,\n disabled,\n onFocus,\n onBlur,\n validate,\n tooltip\n } = props;\n\n const options = getOptions(element);\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n\n const onChange = (newValue) => {\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n\n const error = globalError || localError;\n\n return (\n <div\n class={ classNames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <Select\n id={ id }\n key={ element }\n label={ label }\n value={ value }\n onChange={ onChange }\n onFocus={ onFocus }\n onBlur={ onBlur }\n options={ options }\n disabled={ disabled }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}","import {\n useMemo,\n useEffect,\n useState\n} from 'preact/hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {Object} props\n * @param {Function} props.debounce\n * @param {Boolean} [props.disabled]\n * @param {Object} props.element\n * @param {Function} props.getValue\n * @param {String} props.id\n * @param {Function} [props.onBlur]\n * @param {Function} [props.onFocus]\n * @param {Function} props.setValue\n */\nexport default function Simple(props) {\n const {\n debounce,\n disabled,\n element,\n getValue,\n id,\n onBlur,\n onFocus,\n setValue\n } = props;\n\n const value = getValue(element);\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleInputCallback = useMemo(() => {\n return debounce((target) => setValue(target.value.length ? target.value : undefined));\n }, [ setValue, debounce ]);\n\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n\n return (\n <div class=\"bio-properties-panel-simple\">\n <input\n id={ prefixId(id) }\n key={ element }\n type=\"text\"\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ handleInput }\n aria-label={ localValue || '<empty>' }\n onFocus={ onFocus }\n onBlur={ onBlur }\n value={ localValue } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from './Description';\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport {\n useDebounce,\n useElementVisible,\n useError,\n useShowEntryEvent,\n useStaticCallback\n} from '../../hooks';\n\nimport { isFunction } from 'min-dash';\nimport Tooltip from './Tooltip';\nimport { isCmdWithChar } from '../util/keyboardUtils';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nfunction resizeToContents(element) {\n element.style.height = 'auto';\n\n // a 2px pixel offset is required to prevent scrollbar from\n // appearing on OS with a full length scroll bar (Windows/Linux)\n element.style.height = `${ element.scrollHeight + 2 }px`;\n}\n\nfunction TextArea(props) {\n\n const {\n id,\n label,\n debounce,\n onInput: commitValue,\n value = '',\n disabled,\n monospace,\n onFocus,\n onBlur,\n onPaste,\n autoResize = true,\n placeholder,\n rows = autoResize ? 1 : 2,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const ref = useShowEntryEvent(id);\n\n const onInput = useCallback(newValue => {\n const newModelValue = newValue === '' ? undefined : newValue;\n commitValue(newModelValue);\n }, [ commitValue ]);\n\n const visible = useElementVisible(ref.current);\n\n /**\n * @type { import('min-dash').DebouncedFunction }\n */\n const handleInput = useDebounce(onInput, debounce);\n\n const handleLocalInput = e => {\n autoResize && resizeToContents(e.target);\n\n if (e.target.value === localValue) {\n return;\n }\n\n setLocalValue(e.target.value);\n handleInput(e.target.value);\n };\n\n const handleOnBlur = e => {\n const trimmedValue = e.target.value.trim();\n\n // trim and commit on blur\n handleInput.cancel?.();\n onInput(trimmedValue);\n setLocalValue(trimmedValue);\n\n if (onBlur) {\n onBlur(e);\n }\n };\n\n const handleOnPaste = e => {\n const input = e.target;\n const isFieldEmpty = !input.value;\n const isAllSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n\n // Trim and handle paste if field is empty or all content is selected\n if (isFieldEmpty || isAllSelected) {\n const trimmedValue = e.clipboardData.getData('text').trim();\n\n setLocalValue(trimmedValue);\n handleInput(trimmedValue);\n\n if (onPaste) {\n onPaste(e);\n }\n\n e.preventDefault();\n return;\n }\n\n // Allow default paste behavior for normal text editing\n if (onPaste) {\n onPaste(e);\n }\n };\n\n const handleOnKeyDown = e => {\n if (isCmdWithChar(e)) {\n handleInput.flush();\n }\n };\n\n useLayoutEffect(() => {\n autoResize && resizeToContents(ref.current);\n }, []);\n\n useLayoutEffect(() => {\n visible && autoResize && resizeToContents(ref.current);\n }, [ visible ]);\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-textarea\">\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n <textarea\n ref={ ref }\n id={ prefixId(id) }\n name={ id }\n spellCheck=\"false\"\n class={ classnames(\n 'bio-properties-panel-input',\n monospace ? 'bio-properties-panel-input-monospace' : '',\n autoResize ? 'auto-resize' : '')\n }\n onInput={ handleLocalInput }\n onFocus={ onFocus }\n onKeyDown={ handleOnKeyDown }\n onBlur={ handleOnBlur }\n onPaste={ handleOnPaste }\n placeholder={ placeholder }\n rows={ rows }\n value={ localValue }\n disabled={ disabled }\n data-gramm=\"false\"\n />\n </div>\n );\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} props.description\n * @param {boolean} props.debounce\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Function} props.onPaste\n * @param {number} props.rows\n * @param {boolean} props.monospace\n * @param {Function} [props.validate]\n * @param {boolean} [props.disabled]\n */\nexport default function TextAreaEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n label,\n getValue,\n setValue,\n rows,\n monospace,\n disabled,\n validate,\n onFocus,\n onBlur,\n onPaste,\n placeholder,\n autoResize,\n tooltip\n } = props;\n\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n const value = getValue(element);\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setLocalError(newValidationError);\n });\n\n\n const error = globalError || localError;\n\n return (\n <div\n class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <TextArea\n id={ id }\n key={ element }\n label={ label }\n value={ value }\n onInput={ onInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n onPaste={ onPaste }\n rows={ rows }\n debounce={ debounce }\n monospace={ monospace }\n disabled={ disabled }\n placeholder={ placeholder }\n autoResize={ autoResize }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from './Description';\nimport Tooltip from './Tooltip';\n\nimport {\n useCallback,\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useDebounce,\n useError,\n useShowEntryEvent,\n useStaticCallback\n} from '../../hooks';\nimport { isCmdWithChar } from '../util/keyboardUtils';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nfunction Textfield(props) {\n\n const {\n debounce,\n disabled = false,\n id,\n label,\n onInput: commitValue,\n onFocus,\n onBlur,\n onPaste,\n placeholder,\n value = '',\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value || '');\n\n const ref = useShowEntryEvent(id);\n\n const onInput = useCallback(newValue => {\n const newModelValue = newValue === '' ? undefined : newValue;\n commitValue(newModelValue);\n }, [ commitValue ]);\n\n /**\n * @type { import('min-dash').DebouncedFunction }\n */\n const handleInput = useDebounce(onInput, debounce);\n\n const handleOnBlur = e => {\n const trimmedValue = e.target.value.trim();\n\n // trim and commit on blur\n handleInput.cancel?.();\n onInput(trimmedValue);\n setLocalValue(trimmedValue);\n\n if (onBlur) {\n onBlur(e);\n }\n };\n\n const handleOnPaste = e => {\n const input = e.target;\n const isFieldEmpty = !input.value;\n const isAllSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n\n // Trim and handle paste if field is empty or all content is selected (overwrite)\n if (isFieldEmpty || isAllSelected) {\n const trimmedValue = e.clipboardData.getData('text').trim();\n\n setLocalValue(trimmedValue);\n handleInput(trimmedValue);\n\n if (onPaste) {\n onPaste(e);\n }\n\n e.preventDefault();\n return;\n }\n\n // Allow default paste behavior for normal text editing\n if (onPaste) {\n onPaste(e);\n }\n };\n\n const handleLocalInput = e => {\n\n if (e.target.value === localValue) {\n return;\n }\n\n setLocalValue(e.target.value);\n handleInput(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n const handleOnKeyDown = e => {\n if (isCmdWithChar(e)) {\n handleInput.flush();\n }\n };\n\n return (\n <div class=\"bio-properties-panel-textfield\">\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n <input\n ref={ ref }\n id={ prefixId(id) }\n type=\"text\"\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ handleLocalInput }\n onFocus={ onFocus }\n onKeyDown={ handleOnKeyDown }\n onBlur={ handleOnBlur }\n onPaste={ handleOnPaste }\n placeholder={ placeholder }\n value={ localValue } />\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {Function} props.validate\n */\nexport default function TextfieldEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n label,\n getValue,\n setValue,\n validate,\n onFocus,\n onBlur,\n onPaste,\n placeholder,\n tooltip\n } = props;\n\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n const value = getValue(element);\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setLocalError(newValidationError);\n });\n\n\n const error = globalError || localError;\n\n return (\n <div\n class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <Textfield\n debounce={ debounce }\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onInput={ onInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n onPaste={ onPaste }\n placeholder={ placeholder }\n value={ value }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}","import {\n debounce as _debounce,\n isNumber\n} from 'min-dash';\n\nconst DEFAULT_DEBOUNCE_TIME = 600;\n\n/**\n * Creates a debounced version of a function, delaying its execution based on `debounceDelay`.\n *\n * - If `debounceDelay` is `false`, the function executes immediately without debouncing.\n * - If a number is provided, the function execution is delayed by the given time in milliseconds.\n *\n * @param { Boolean | Number } [debounceDelay=600]\n *\n * @example\n * const debounce = debounceInput();\n * const debouncedFn = debounce(fn);\n *\n * debouncedFn(); // Executes after 300ms (default) if no further calls occur.\n */\nexport default function debounceInput(debounceDelay) {\n\n /**\n * Applies debounce to the provided function, with a previously setup delay.\n *\n * @template { (...args: any[]) => any } T\n *\n * @param {T} fn\n *\n * @return { (...p: Parameters<T>) => any }\n */\n return function debounce(fn) {\n if (debounceDelay === false) {\n return fn;\n }\n\n var debounceTime =\n isNumber(debounceDelay) ?\n debounceDelay :\n DEFAULT_DEBOUNCE_TIME;\n\n return _debounce(fn, debounceTime);\n };\n}\n\ndebounceInput.$inject = [ 'config.debounceInput' ];\n","import debounceInput from './debounceInput';\n\nexport default {\n debounceInput: [ 'factory', debounceInput ]\n};\n","import { domify } from 'min-dom';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * Add a dragger that calls back the passed function with\n * { event, delta } on drag.\n *\n * @example\n *\n * function dragMove(event, delta) {\n * // we are dragging (!!)\n * }\n *\n * domElement.addEventListener('dragstart', dragger(dragMove));\n *\n * @param {Function} fn\n * @param {Element} [dragPreview]\n *\n * @return {Function} drag start callback function\n */\nexport function createDragger(fn, dragPreview) {\n\n let self;\n\n let startX, startY;\n\n /** drag start */\n function onDragStart(event) {\n\n self = this;\n\n startX = event.clientX;\n startY = event.clientY;\n\n // (1) prevent preview image\n if (event.dataTransfer) {\n event.dataTransfer.setDragImage(dragPreview || emptyCanvas(), 0, 0);\n }\n\n // (2) setup drag listeners\n\n // attach drag + cleanup event\n // we need to do this to make sure we track cursor\n // movements before we reach other drag event handlers,\n // e.g. in child containers.\n document.addEventListener('dragover', onDrag, true);\n document.addEventListener('dragenter', preventDefault, true);\n\n document.addEventListener('dragend', onEnd);\n document.addEventListener('drop', preventDefault);\n }\n\n function onDrag(event) {\n const delta = {\n x: event.clientX - startX,\n y: event.clientY - startY\n };\n\n // call provided fn with event, delta\n return fn.call(self, event, delta);\n }\n\n function onEnd() {\n document.removeEventListener('dragover', onDrag, true);\n document.removeEventListener('dragenter', preventDefault, true);\n\n document.removeEventListener('dragend', onEnd);\n document.removeEventListener('drop', preventDefault);\n }\n\n return onDragStart;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nfunction emptyCanvas() {\n return domify('<canvas width=\"0\" height=\"0\" />');\n}","import { forwardRef } from 'preact/compat';\n\nimport { useEffect, useRef } from 'preact/hooks';\n\nimport classNames from 'classnames';\n\nimport * as focusTrap from 'focus-trap';\n\nimport { DragIcon, CloseIcon } from '../../../components/icons';\n\nimport { createDragger } from '../../../components/util/dragger';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * A generic popup component.\n *\n * @param {Object} props\n * @param {string} [props.className]\n * @param {boolean} [props.delayInitialFocus]\n * @param {{top: number, left: number}} [props.position]\n * @param {number} [props.width]\n * @param {number} [props.height]\n * @param {Function} props.onClose\n * @param {Function} [props.onPostActivate]\n * @param {Function} [props.onPostDeactivate]\n * @param {boolean} [props.returnFocus]\n * @param {boolean} [props.closeOnEscape]\n * @param {string} props.title\n * @param {Ref} [ref]\n */\nfunction PopupComponent(props, globalRef) {\n const {\n className,\n delayInitialFocus,\n position,\n width,\n height,\n onClose,\n onPostActivate = noop,\n onPostDeactivate = noop,\n returnFocus = true,\n closeOnEscape = true,\n title\n } = props;\n\n const focusTrapRef = useRef(null);\n const localRef = useRef(null);\n const popupRef = globalRef || localRef;\n\n const handleKeydown = (event) => {\n\n // do not allow keyboard events to bubble\n event.stopPropagation();\n\n if (closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n // re-activate focus trap on focus\n const handleFocus = () => {\n if (focusTrapRef.current) {\n focusTrapRef.current.activate();\n }\n };\n\n let style = {};\n\n if (position) {\n style = {\n ...style,\n top: position.top + 'px',\n left: position.left + 'px',\n };\n }\n\n if (width) {\n style.width = width + 'px';\n }\n\n if (height) {\n style.height = height + 'px';\n }\n\n useEffect(() => {\n if (popupRef.current) {\n popupRef.current.addEventListener('focusin', handleFocus);\n }\n\n return () => {\n if (popupRef.current) {\n popupRef.current.removeEventListener('focusin', handleFocus);\n }\n };\n }, [ popupRef ]);\n\n useEffect(() => {\n if (popupRef.current) {\n focusTrapRef.current = focusTrap.createFocusTrap(popupRef.current, {\n clickOutsideDeactivates: true,\n delayInitialFocus,\n fallbackFocus: popupRef.current,\n onPostActivate,\n onPostDeactivate,\n returnFocusOnDeactivate: returnFocus,\n });\n\n focusTrapRef.current.activate();\n }\n\n return () => focusTrapRef.current && focusTrapRef.current.deactivate();\n }, [ popupRef ]);\n\n return (\n <div\n aria-label={ title }\n tabIndex={ -1 }\n ref={ popupRef }\n onKeyDown={ handleKeydown }\n role=\"dialog\"\n class={ classNames('bio-properties-panel-popup', className) }\n style={ style }\n >\n {props.children}\n </div>\n );\n}\n\nexport const Popup = forwardRef(PopupComponent);\n\nPopup.Title = Title;\nPopup.Body = Body;\nPopup.Footer = Footer;\n\nfunction Title(props) {\n const {\n children,\n className,\n draggable,\n eventBus,\n title,\n showCloseButton = false,\n closeButtonTooltip = 'Close popup',\n onClose,\n ...rest\n } = props;\n\n // we can't use state as we need to\n // manipulate this inside dragging events\n const context = useRef({\n startPosition: null,\n newPosition: null,\n });\n\n const dragPreviewRef = useRef();\n\n const titleRef = useRef();\n\n const onMove = (event, delta) => {\n cancel(event);\n\n const { x: dx, y: dy } = delta;\n\n const newPosition = {\n x: context.current.startPosition.x + dx,\n y: context.current.startPosition.y + dy,\n };\n\n const popupParent = getPopupParent(titleRef.current);\n\n popupParent.style.top = newPosition.y + 'px';\n popupParent.style.left = newPosition.x + 'px';\n\n eventBus?.fire('feelPopup.dragover', { newPosition, delta });\n };\n\n const onMoveStart = (event) => {\n\n // initialize drag handler\n const onDragStart = createDragger(onMove, dragPreviewRef.current);\n onDragStart(event);\n\n event.stopPropagation();\n\n const popupParent = getPopupParent(titleRef.current);\n\n const bounds = popupParent.getBoundingClientRect();\n context.current.startPosition = {\n x: bounds.left,\n y: bounds.top,\n };\n\n eventBus?.fire('feelPopup.dragstart');\n };\n\n const onMoveEnd = () => {\n context.current.newPosition = null;\n\n eventBus?.fire('feelPopup.dragend');\n };\n\n return (\n <div\n class={ classNames(\n 'bio-properties-panel-popup__header',\n draggable && 'draggable',\n className\n ) }\n ref={ titleRef }\n draggable={ draggable }\n onDragStart={ onMoveStart }\n onDragEnd={ onMoveEnd }\n { ...rest }\n >\n {draggable && (\n <>\n <div\n ref={ dragPreviewRef }\n class=\"bio-properties-panel-popup__drag-preview\"\n ></div>\n <div class=\"bio-properties-panel-popup__drag-handle\">\n <DragIcon />\n </div>\n </>\n )}\n <div class=\"bio-properties-panel-popup__title\">{title}</div>\n {children}\n {showCloseButton && (\n <button\n title={ closeButtonTooltip }\n class=\"bio-properties-panel-popup__close\"\n onClick={ onClose }\n >\n <CloseIcon />\n </button>\n )}\n </div>\n );\n}\n\nfunction Body(props) {\n const { children, className, ...rest } = props;\n\n return (\n <div\n class={ classNames('bio-properties-panel-popup__body', className) }\n { ...rest }\n >\n {children}\n </div>\n );\n}\n\nfunction Footer(props) {\n const { children, className, ...rest } = props;\n\n return (\n <div\n class={ classNames('bio-properties-panel-popup__footer', className) }\n { ...rest }\n >\n {props.children}\n </div>\n );\n}\n\n// helpers //////////////////////\n\nfunction getPopupParent(node) {\n return node.closest('.bio-properties-panel-popup');\n}\n\nfunction cancel(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n","import { useEffect, useRef } from 'preact/hooks';\nimport ExpressionEditor from '../../../components/entries/expression/ExpressionEditor';\nimport TemplatingEditor from '../../../components/entries/templating/TemplatingEditor';\nimport { LaunchIcon } from '../../../components/icons';\nimport { Popup } from './Popup';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef {Object} ExpressionPopupProps\n * @property {string} entryId\n * @property {Function} onInput\n * @property {Function} onClose\n * @property {string} title\n * @property {'feel'|'feelers'} type\n * @property {string} value\n * @property {Array} [links]\n * @property {Array|Object} [variables]\n * @property {Object} [position]\n * @property {string} [hostLanguage]\n * @property {boolean} [singleLine]\n * @property {HTMLElement} [sourceElement]\n * @property {HTMLElement|string} [tooltipContainer]\n * @property {Object} [eventBus]\n */\n\nexport const FEEL_POPUP_WIDTH = 700;\nexport const FEEL_POPUP_HEIGHT = 250;\n\n/**\n * Expression editor popup component\n * @param {ExpressionPopupProps} props\n */\nexport function ExpressionPopup(props) {\n const {\n entryId,\n onInput,\n onClose,\n title,\n type,\n value,\n links,\n variables,\n position,\n hostLanguage,\n singleLine,\n sourceElement,\n tooltipContainer,\n eventBus,\n feelLanguageContext,\n } = props;\n\n const editorRef = useRef();\n const popupRef = useRef();\n\n const isAutoCompletionOpen = useRef(false);\n\n const handleSetReturnFocus = () => {\n sourceElement && sourceElement.focus();\n };\n\n const onKeyDownCapture = (event) => {\n\n // we use capture here to make sure we handle the event before the editor does\n if (event.key === 'Escape') {\n isAutoCompletionOpen.current = autoCompletionOpen(event.target);\n }\n };\n\n const onKeyDown = (event) => {\n if (event.key === 'Escape') {\n\n // close popup only if auto completion is not open\n if (!isAutoCompletionOpen.current) {\n onClose();\n isAutoCompletionOpen.current = false;\n }\n }\n };\n\n useEffect(() => {\n\n // set focus on editor when popup is opened\n if (editorRef.current) {\n editorRef.current.focus();\n }\n }, [ editorRef ]);\n\n return (\n <Popup\n className=\"bio-properties-panel-feel-popup\"\n position={ position }\n title={ title }\n returnFocus={ false }\n closeOnEscape={ false }\n delayInitialFocus={ false }\n onPostDeactivate={ handleSetReturnFocus }\n height={ FEEL_POPUP_HEIGHT }\n width={ FEEL_POPUP_WIDTH }\n ref={ popupRef }\n >\n <Popup.Title\n title={ title }\n eventBus={ eventBus }\n showCloseButton={ true }\n closeButtonTooltip=\"Save and close\"\n onClose={ onClose }\n draggable\n >\n <>\n {(links || []).map((link, index) => {\n return (\n <a\n key={ index }\n rel=\"noreferrer\"\n href={ link.href }\n target=\"_blank\"\n class=\"bio-properties-panel-feel-popup__title-link\"\n >\n {link.title}\n <LaunchIcon />\n </a>\n );\n })}\n </>\n </Popup.Title>\n <Popup.Body>\n <div\n onKeyDownCapture={ onKeyDownCapture }\n onKeyDown={ onKeyDown }\n class=\"bio-properties-panel-feel-popup__body\"\n >\n {type === 'feel' && (\n <ExpressionEditor\n enableGutters={ true }\n id={ prefixId(entryId) }\n name={ entryId }\n onInput={ onInput }\n value={ value }\n variables={ variables }\n feelLanguageContext={ feelLanguageContext }\n ref={ editorRef }\n tooltipContainer={ tooltipContainer }\n />\n )}\n\n {type === 'feelers' && (\n <TemplatingEditor\n id={ prefixId(entryId) }\n contentAttributes={ { 'aria-label': title } }\n enableGutters={ true }\n hostLanguage={ hostLanguage }\n name={ entryId }\n onInput={ onInput }\n value={ value }\n ref={ editorRef }\n singleLine={ singleLine }\n tooltipContainer={ tooltipContainer }\n />\n )}\n </div>\n </Popup.Body>\n </Popup>\n );\n}\n\nfunction prefixId(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction autoCompletionOpen(element) {\n const editor = element.closest('.cm-editor');\n return editor ? editor.querySelector('.cm-tooltip-autocomplete') : null;\n}\n","import { FEEL_POPUP_WIDTH, FEEL_POPUP_HEIGHT } from './ExpressionPopup';\n\nexport function getPopupTitle({ element, label }) {\n let popupTitle = '';\n\n if (element && element.type) {\n popupTitle = `${element.type} / `;\n }\n\n return `${popupTitle}${label}`;\n}\n\nexport function getPopupPosition() {\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\n return {\n left: Math.max(0, (viewportWidth - FEEL_POPUP_WIDTH) / 2),\n top: Math.max(0, (viewportHeight - FEEL_POPUP_HEIGHT) / 2)\n };\n}\n","import { getPopupPosition, getPopupTitle } from './components/helpers';\n\n/**\n * FEEL popup component, built as a singleton.\n *\n * In order to implement a custom replacement, handle the following events:\n * - `propertiesPanel.openPopup`\n * - `propertiesPanel.closePopup`\n * - `propertiesPanel.detach`\n *\n * Within the custom renderer, make sure to emit the following events:\n * - `feelPopup.open` - fired before the popup is mounted\n * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup as `domNode`\n * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup as `domNode`\n * - `feelPopup.closed` - fired after the popup is unmounted\n */\nexport class ExpressionPopup {\n constructor(eventBus, config = {}) {\n this._eventBus = eventBus;\n this._config = config;\n\n this._isOpen = false;\n\n eventBus.on('propertiesPanel.openPopup', (_, context) => {\n this.open(context.entryId, context, context.sourceElement);\n\n // return true to indicate that popup was opened\n return true;\n });\n\n eventBus.on([\n 'propertiesPanel.closePopup',\n 'propertiesPanel.detach'\n ], () => {\n this.close();\n });\n }\n\n /**\n * Check if the FEEL popup is open.\n * @return {Boolean}\n */\n isOpen() {\n return this._isOpen;\n }\n\n /**\n * Open the FEEL popup.\n *\n * @param {String} entryId\n * @param {Object} popupConfig\n * @param {HTMLElement} sourceElement\n */\n open(entryId, popupConfig, sourceElement) {\n\n // close before opening a new one\n this.close();\n\n this._openPopup({\n ...popupConfig,\n entryId,\n sourceElement\n });\n }\n\n /**\n * Close the FEEL popup.\n */\n close() {\n this._closePopup();\n }\n\n _openPopup(context) {\n const {\n element,\n label,\n sourceElement,\n type\n } = context;\n\n this._isOpen = true;\n\n this._eventBus.fire('propertiesPanelPopup.open', {\n container: this._config.feelPopupContainer,\n config: {\n ...context,\n links: this._config.getFeelPopupLinks?.(type) || [],\n onClose: () => {\n this._closePopup();\n\n // setTimeout to ensure the focus happens after the DOM updates make it focusable\n setTimeout(() => {\n sourceElement && sourceElement.focus();\n }, 0);\n },\n position: getPopupPosition(),\n title: getPopupTitle({ element, label })\n }\n });\n }\n\n _closePopup() {\n if (this._isOpen) {\n this._isOpen = false;\n\n this._eventBus.fire('propertiesPanelPopup.close');\n }\n }\n}\n\nExpressionPopup.$inject = [ 'eventBus', 'config.propertiesPanel' ];\n","import { render } from 'preact';\nimport { ExpressionPopup } from './components';\nimport { query as domQuery } from 'min-dom';\nimport { isString } from 'min-dash';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n\nexport class ExpressionPopupRenderer {\n constructor(eventBus) {\n this._eventBus = eventBus;\n\n this._container = null;\n this._element = null;\n\n eventBus.on('propertiesPanelPopup.open', (context) => {\n this._renderPopup(context);\n });\n\n eventBus.on('propertiesPanelPopup.close', () => {\n this._removePopup();\n });\n }\n\n _renderPopup(context) {\n let { container, config } = context;\n\n container = this._container = getContainer(container) || document.body;\n\n const element = this._element = createElement();\n\n container.appendChild(element);\n\n // TODO(philippfromme): there is no useService in this context, so we need\n // to pass the event bus as a prop or create a context provider, however,\n // a custom renderer would have to use that context provider as well to have\n // access to the event bus and other services\n this._emit('feelPopup.open');\n\n render(\n <ExpressionPopup { ...config } eventBus={ this._eventBus } />,\n element\n );\n\n this._emit('feelPopup.opened', {\n domNode: element\n });\n }\n\n _removePopup() {\n if (!this._container) {\n return;\n }\n\n this._emit('feelPopup.close', {\n domNode: this._element\n });\n\n render(null, this._element);\n\n this._container.removeChild(this._element);\n\n this._container = null;\n\n this._emit('feelPopup.closed');\n }\n\n _emit(event, context) {\n this._eventBus.fire(event, context);\n }\n}\n\nExpressionPopupRenderer.$inject = [ 'eventBus' ];\n\n// helpers /////////////////\n\nfunction createElement() {\n const element = document.createElement('div');\n\n element.classList.add('bio-properties-panel-popup-container');\n\n return element;\n}\n\nfunction getContainer(container) {\n if (isString(container)) {\n return domQuery(container);\n }\n\n return container;\n}\n","import { ExpressionPopup } from './ExpressionPopup';\nimport { ExpressionPopupRenderer } from './ExpressionPopupRenderer';\n\nexport default {\n __init__: [ 'expressionPopup', 'expressionPopupRenderer' ],\n expressionPopup: [ 'type', ExpressionPopup ],\n expressionPopupRenderer: [ 'type', ExpressionPopupRenderer ],\n};\n"],"names":["ArrowIcon","_jsx","CloseIcon","CreateIcon","DeleteIcon","DragIcon","ExternalLinkIcon","FeelIcon","LaunchIcon","_jsxs","OpenPopupIcon","PropertiesPanelContext","domQuery","id","isEdited","Tooltip","_createElement","element","errors","open","index","noop","prefixId","Checkbox","debounce","placeholder","cmPlaceholder","view","useBufferedFocus","editor","ExpressionEditor","classNames","FeelIconSvg","useDebounce","value","idx","_debounce","_Fragment","ExpressionPopup"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/icons/index.js","../src/components/Header.js","../src/context/DescriptionContext.js","../src/context/ErrorsContext.js","../src/context/EventContext.js","../src/context/FeelLanguageContext.js","../src/context/LayoutContext.js","../src/context/TooltipContext.js","../src/hooks/useTooltipContext.js","../src/components/entries/Tooltip.js","../src/hooks/useDescriptionContext.js","../src/hooks/useDebounce.js","../src/hooks/useError.js","../src/hooks/useEvent.js","../src/hooks/useKeyFactory.js","../src/hooks/useLayoutState.js","../src/hooks/usePrevious.js","../src/hooks/useShowEntryEvent.js","../src/hooks/useStickyIntersectionObserver.js","../src/hooks/useStaticCallback.js","../src/hooks/useElementVisible.js","../src/components/Group.js","../src/components/Placeholder.js","../src/PropertiesPanel.js","../src/components/DropdownButton.js","../src/components/HeaderButton.js","../src/components/util/translateFallback.js","../src/components/entries/Collapsible.js","../src/components/ListItem.js","../src/components/ListGroup.js","../src/components/entries/Description.js","../src/components/entries/Checkbox.js","../src/components/entries/CheckboxGroup.js","../src/components/entries/JsonEditor.js","../src/components/OpenPopupButton.js","../src/components/entries/templating/TemplatingEditor.js","../src/components/entries/expression/ExpressionEditor.js","../src/components/entries/expression/ExpressionIndicator.js","../src/components/entries/expression/ExpressionIcon.js","../src/components/util/keyboardUtils.js","../src/components/entries/ToggleSwitch.js","../src/components/entries/NumberField.js","../src/components/entries/expression/Expression.js","../src/components/entries/templating/Templating.js","../src/components/entries/List.js","../src/components/entries/Select.js","../src/components/entries/Simple.js","../src/components/entries/TextArea.js","../src/components/entries/TextField.js","../src/features/debounce-input/debounceInput.js","../src/features/debounce-input/index.js","../src/components/util/dragger.js","../src/features/expression-popup/components/Popup.js","../src/features/expression-popup/components/ExpressionPopup.js","../src/features/expression-popup/components/helpers.js","../src/features/expression-popup/ExpressionPopup.js","../src/features/expression-popup/ExpressionPopupRenderer.js","../src/features/expression-popup/index.js"],"sourcesContent":["export { default as ArrowIcon } from './Arrow.svg';\nexport { default as CloseIcon } from './Close.svg';\nexport { default as CreateIcon } from './Create.svg';\nexport { default as DeleteIcon } from './Delete.svg';\nexport { default as DragIcon } from './Drag.svg';\nexport { default as ExternalLinkIcon } from './ExternalLink.svg';\nexport { default as FeelIcon } from './Feel.svg';\nexport { default as LaunchIcon } from './Launch.svg';\nexport { default as OpenPopupIcon } from '@carbon/icons/svg/16/maximize.svg';","import { ExternalLinkIcon } from './icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef { {\n * getElementLabel: (element: object) => string,\n * getTypeLabel: (element: object) => string,\n * getElementIcon: (element: object) => import('preact').Component,\n * getDocumentationRef: (element: object) => string\n * } } HeaderProvider\n */\n\n/**\n * @param {Object} props\n * @param {Object} props.element,\n * @param {HeaderProvider} props.headerProvider\n */\nexport default function Header(props) {\n\n const {\n element,\n headerProvider\n } = props;\n\n const {\n getElementIcon,\n getDocumentationRef,\n getElementLabel,\n getTypeLabel,\n } = headerProvider;\n\n const label = getElementLabel(element);\n const type = getTypeLabel(element);\n const documentationRef = getDocumentationRef && getDocumentationRef(element);\n\n const ElementIcon = getElementIcon(element);\n\n return (<div class=\"bio-properties-panel-header\">\n <div class=\"bio-properties-panel-header-icon\">\n { ElementIcon && <ElementIcon width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" /> }\n </div>\n <div class=\"bio-properties-panel-header-labels\">\n <div class=\"bio-properties-panel-header-type\">{ type }</div>\n { label ?\n <div class=\"bio-properties-panel-header-label\">{ label }</div> :\n null\n }\n </div>\n <div class=\"bio-properties-panel-header-actions\">\n { documentationRef ?\n <a\n rel=\"noreferrer\"\n class=\"bio-properties-panel-header-link\"\n href={ documentationRef }\n title=\"Open documentation\"\n target=\"_blank\">\n <ExternalLinkIcon />\n </a> :\n null\n }\n </div>\n </div>);\n}","import {\n createContext\n} from 'preact';\n\nconst DescriptionContext = createContext({\n description: {},\n getDescriptionForId: () => {}\n});\n\nexport default DescriptionContext;\n","import {\n createContext\n} from 'preact';\n\nconst ErrorsContext = createContext({\n errors: {}\n});\n\nexport default ErrorsContext;","/**\n * @typedef {Function} <propertiesPanel.showEntry> callback\n *\n * @example\n *\n * useEvent('propertiesPanel.showEntry', ({ focus = false, ...rest }) => {\n * // ...\n * });\n *\n * @param {Object} context\n * @param {boolean} [context.focus]\n *\n * @returns void\n */\n\n/**\n * @typedef {Function} <propertiesPanel.showError> callback\n *\n * @example\n *\n * useEvent('propertiesPanel.showError', ({ focus = false, message, ...rest }) => {\n * // ...\n * });\n *\n * @param {Object} context\n * @param {string} context.message\n * @param {boolean} [context.focus]\n *\n * @returns void\n */\n\nimport { createContext } from 'preact';\n\nconst EventContext = createContext({ eventBus: null });\n\nexport default EventContext;\n","import {\n createContext\n} from 'preact';\n\n/**\n * @typedef { {\n * parserDialect?: import('@kunpeng-js/expression-editor').ParserDialect,\n * builtins?: import('@kunpeng-js/expression-editor').Variable[],\n * dialect?: import('@kunpeng-js/expression-editor').Dialect\n * } } FeelLanguageContextType\n */\n\n/**\n * @type {import('preact').Context<FeelLanguageContextType>}\n */\nconst FeelLanguageContext = createContext({});\n\nexport default FeelLanguageContext;\n","import {\n createContext\n} from 'preact';\n\nconst LayoutContext = createContext({\n layout: {},\n setLayout: () => {},\n getLayoutForKey: () => {},\n setLayoutForKey: () => {}\n});\n\nexport default LayoutContext;","import {\n createContext\n} from 'preact';\n\nconst TooltipContext = createContext({\n tooltip: {},\n getTooltipForId: () => {}\n});\n\nexport default TooltipContext;\n","import {\n useContext\n} from 'preact/hooks';\n\nimport {\n TooltipContext\n} from '../context';\n\n/**\n * Accesses the global TooltipContext and returns a tooltip for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n * const tooltip = useTooltipContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nexport function useTooltipContext(id, element) {\n const {\n getTooltipForId\n } = useContext(TooltipContext);\n\n return getTooltipForId(id, element);\n}\n","import {\n useRef,\n useState,\n useEffect\n} from 'preact/hooks';\n\nimport { useTooltipContext } from '../../hooks/useTooltipContext';\n\nimport { createPortal } from 'preact/compat';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef {Object} TooltipProps\n * @property {Object} [parent] - Parent element ref for portal rendering\n * @property {String} [direction='right'] - Tooltip direction ( 'right', 'top')\n * @property {String} [position] - Custom CSS position override\n * @property {Number} [showDelay=250] - Delay in ms before showing tooltip on hover\n * @property {Number} [hideDelay=250] - Delay in ms before hiding tooltip when mouse leaves, to avoid multiple tooltips from being opened, this should be the same as showDelay\n * @property {*} [children] - Child elements to render inside the tooltip wrapper\n */\n\n/**\n * Tooltip wrapper that provides context-based tooltip content lookup.\n * All props are forwarded to the underlying Tooltip component.\n *\n * @param {TooltipProps & {\n * forId: String,\n * value?: String|Object,\n * element?: Object\n * }} props - Shared tooltip props plus wrapper-specific ones\n */\nexport default function TooltipWrapper(props) {\n const {\n forId,\n element\n } = props;\n\n const contextDescription = useTooltipContext(forId, element);\n\n const value = props.value || contextDescription;\n\n if (!value) {\n return props.children;\n }\n\n return <Tooltip { ...props } value={ value } forId={ `bio-properties-panel-${ forId }` } />;\n}\n\n/**\n * @param {TooltipProps & {\n * forId: String,\n * value: String|Object\n * }} props\n */\nfunction Tooltip(props) {\n const {\n forId,\n value,\n parent,\n direction = 'right',\n position,\n showDelay = 250,\n hideDelay = 250\n } = props;\n\n const [ visible, setVisible ] = useState(false);\n\n const showTimeoutRef = useRef(null);\n const hideTimeoutRef = useRef(null);\n\n const wrapperRef = useRef(null);\n const tooltipRef = useRef(null);\n\n const show = (_, delay) => {\n clearTimeout(showTimeoutRef.current);\n clearTimeout(hideTimeoutRef.current);\n\n if (visible) return;\n\n if (delay) {\n showTimeoutRef.current = setTimeout(() => {\n setVisible(true);\n }, showDelay);\n } else {\n setVisible(true);\n }\n };\n\n const handleWrapperMouseEnter = (e) => {\n show(e, true);\n };\n\n const hide = (delay = false) => {\n clearTimeout(showTimeoutRef.current);\n clearTimeout(hideTimeoutRef.current);\n\n if (delay) {\n hideTimeoutRef.current = setTimeout(() => {\n setVisible(false);\n }, hideDelay);\n } else {\n setVisible(false);\n }\n };\n\n // Cleanup timeouts on unmount\n useEffect(() => {\n return () => {\n clearTimeout(showTimeoutRef.current);\n clearTimeout(hideTimeoutRef.current);\n };\n }, []);\n\n // Handle click outside to close tooltip for non-focusable elements\n useEffect(() => {\n if (!visible) return;\n\n const handleClickOutside = (e) => {\n\n // If clicking outside both the wrapper and tooltip, hide it\n if (wrapperRef.current && !wrapperRef.current.contains(e.target) &&\n tooltipRef.current && !tooltipRef.current.contains(e.target)) {\n hide(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [ visible, hide ]);\n\n const handleMouseLeave = ({ relatedTarget }) => {\n\n // Don't hide the tooltip when moving mouse between the wrapper and the tooltip.\n if (relatedTarget === wrapperRef.current || relatedTarget === tooltipRef.current || relatedTarget?.parentElement === tooltipRef.current) {\n return;\n }\n\n const selection = window.getSelection();\n if (selection && selection.toString().length > 0) {\n\n // Check if selection is within tooltip content\n const selectionRange = selection.getRangeAt(0);\n if (tooltipRef.current?.contains(selectionRange.commonAncestorContainer) ||\n tooltipRef.current?.contains(selection.anchorNode) ||\n tooltipRef.current?.contains(selection.focusNode)) {\n return; // Keep tooltip open during text selection\n }\n }\n\n hide(true);\n };\n\n const handleTooltipMouseEnter = () => {\n clearTimeout(hideTimeoutRef.current);\n };\n\n const handleFocusOut = (e) => {\n const { relatedTarget } = e;\n\n // Don't hide if focus moved to the tooltip or another element within the wrapper\n if (tooltipRef.current?.contains(relatedTarget) ||\n wrapperRef.current?.contains(relatedTarget)) {\n return;\n }\n\n hide(false);\n };\n\n const hideTooltipViaEscape = (e) => {\n e.code === 'Escape' && hide(false);\n };\n\n const renderTooltip = () => {\n return (\n <div\n class={ `bio-properties-panel-tooltip ${direction}` }\n role=\"tooltip\"\n id=\"bio-properties-panel-tooltip\"\n aria-labelledby={ forId }\n style={ position || getTooltipPosition(wrapperRef.current) }\n ref={ tooltipRef }\n onClick={ (e)=> e.stopPropagation() }\n onMouseEnter={ handleTooltipMouseEnter }\n onMouseLeave={ handleMouseLeave }\n >\n <div class=\"bio-properties-panel-tooltip-content\">\n {value}\n </div>\n <div class=\"bio-properties-panel-tooltip-arrow\" />\n </div>\n );};\n\n return (\n <div class=\"bio-properties-panel-tooltip-wrapper\" tabIndex=\"0\"\n ref={ wrapperRef }\n onMouseEnter={ handleWrapperMouseEnter }\n onMouseLeave={ handleMouseLeave }\n onFocus={ show }\n onBlur={ handleFocusOut }\n onKeyDown={ hideTooltipViaEscape }\n >\n {props.children}\n {visible ?\n (parent ?\n createPortal(renderTooltip(), parent.current)\n : renderTooltip()\n ) : null\n }\n </div>\n );\n}\n\n\n// helper\n\nfunction getTooltipPosition(refElement) {\n const refPosition = refElement.getBoundingClientRect();\n\n const right = `calc(100% - ${refPosition.x}px)`;\n const top = `${refPosition.top - 10}px`;\n\n return `right: ${right}; top: ${top};`;\n}\n","import {\n useContext\n} from 'preact/hooks';\n\nimport {\n DescriptionContext\n} from '../context';\n\n/**\n * Accesses the global DescriptionContext and returns a description for a given id and element.\n *\n * @example\n * ```jsx\n * function TextField(props) {\n * const description = useDescriptionContext('input1', element);\n * }\n * ```\n *\n * @param {string} id\n * @param {object} element\n *\n * @returns {string}\n */\nexport function useDescriptionContext(id, element) {\n const {\n getDescriptionForId\n } = useContext(DescriptionContext);\n\n return getDescriptionForId(id, element);\n}\n","import {\n useCallback,\n useEffect\n} from 'preact/hooks';\n\nexport function useDebounce(callback, debounceFn) {\n const debouncedCallback = useCallback(debounceFn(callback), [ callback, debounceFn ]);\n\n // make sure previous call is not stalled\n useEffect(() => {\n return () => {\n debouncedCallback.cancel?.();\n };\n }, [ debouncedCallback ]);\n\n return debouncedCallback;\n}\n","import { useContext } from 'preact/hooks';\n\nimport { ErrorsContext } from '../context';\n\nexport function useError(id) {\n const { errors } = useContext(ErrorsContext);\n\n return errors[ id ];\n}\n\nexport function useErrors() {\n const { errors } = useContext(ErrorsContext);\n\n return errors;\n}","import { useContext, useEffect, useRef } from 'preact/hooks';\n\nimport { EventContext } from '../context';\n\n\n/**\n * Subscribe to an event immediately. Update subscription after inputs changed.\n *\n * @param {string} event\n * @param {Function} callback\n */\nexport function useEvent(event, callback, eventBus) {\n const eventContext = useContext(EventContext);\n\n if (!eventBus) {\n ({ eventBus } = eventContext);\n }\n\n const didMount = useRef(false);\n\n // (1) subscribe immediately\n if (eventBus && !didMount.current) {\n eventBus.on(event, callback);\n }\n\n // (2) update subscription after inputs changed\n useEffect(() => {\n if (eventBus && didMount.current) {\n eventBus.on(event, callback);\n }\n\n didMount.current = true;\n\n return () => {\n if (eventBus) {\n eventBus.off(event, callback);\n }\n };\n }, [ callback, event, eventBus ]);\n}\n","import { useMemo } from 'preact/hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst KEY_LENGTH = 6;\n\n/**\n * Create a persistent key factory for plain objects without id.\n *\n * @example\n * ```jsx\n * function List({ objects }) {\n * const getKey = useKeyFactory();\n * return (<ol>{\n * objects.map(obj => {\n * const key = getKey(obj);\n * return <li key={key}>obj.name</li>\n * })\n * }</ol>);\n * }\n * ```\n *\n * @param {any[]} dependencies\n * @returns {(element: object) => string}\n */\nexport function useKeyFactory(dependencies = []) {\n const map = useMemo(() => new Map(), dependencies);\n\n const getKey = el => {\n let key = map.get(el);\n\n if (!key) {\n key = Math.random().toString().slice(-KEY_LENGTH);\n map.set(el, key);\n }\n\n return key;\n };\n\n return getKey;\n}\n","import {\n useCallback,\n useContext\n} from 'preact/hooks';\n\nimport {\n LayoutContext\n} from '../context';\n\n/**\n * Creates a state that persists in the global LayoutContext.\n *\n * @example\n * ```jsx\n * function Group(props) {\n * const [ open, setOpen ] = useLayoutState([ 'groups', 'foo', 'open' ], false);\n * }\n * ```\n *\n * @param {(string|number)[]} path\n * @param {any} [defaultValue]\n *\n * @returns {[ any, Function ]}\n */\nexport function useLayoutState(path, defaultValue) {\n const {\n getLayoutForKey,\n setLayoutForKey\n } = useContext(LayoutContext);\n\n const layoutForKey = getLayoutForKey(path, defaultValue);\n\n const setState = useCallback((newValue) => {\n setLayoutForKey(path, newValue);\n }, [ setLayoutForKey ]);\n\n\n return [ layoutForKey, setState ];\n}\n","import {\n useEffect,\n useRef\n} from 'preact/hooks';\n\n/**\n * @pinussilvestrus: we need to introduce our own hook to persist the previous\n * state on updates.\n *\n * cf. https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\n */\n\nexport function usePrevious(value) {\n const ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}","import {\n useCallback,\n useContext,\n useEffect,\n useRef\n} from 'preact/hooks';\n\nimport { isFunction } from 'min-dash';\n\nimport { PropertiesPanelContext } from '../context';\n\nimport { useEvent } from './useEvent';\n\n/**\n * Subscribe to `propertiesPanel.showEntry`.\n *\n * @param {string} id\n *\n * @returns {import('preact').Ref}\n */\nexport function useShowEntryEvent(id) {\n const { onShow } = useContext(PropertiesPanelContext);\n\n const ref = useRef();\n\n const focus = useRef(false);\n\n const onShowEntry = useCallback((event) => {\n if (event.id === id) {\n onShow();\n\n if (!focus.current) {\n focus.current = true;\n }\n }\n }, [ id ]);\n\n useEffect(() => {\n if (focus.current && ref.current) {\n if (isFunction(ref.current.focus)) {\n ref.current.focus();\n }\n\n if (isFunction(ref.current.select)) {\n ref.current.select();\n }\n\n focus.current = false;\n }\n });\n\n useEvent('propertiesPanel.showEntry', onShowEntry);\n\n return ref;\n}","import {\n useCallback,\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport { useEvent } from './useEvent';\n\n\n/**\n * @callback setSticky\n * @param {boolean} value\n */\n\n/**\n * Use IntersectionObserver to identify when DOM element is in sticky mode.\n * If sticky is observered setSticky(true) will be called.\n * If sticky mode is left, setSticky(false) will be called.\n *\n *\n * @param {Object} ref\n * @param {string} scrollContainerSelector\n * @param {setSticky} setSticky\n */\nexport function useStickyIntersectionObserver(ref, scrollContainerSelector, setSticky) {\n\n const [ scrollContainer, setScrollContainer ] = useState(domQuery(scrollContainerSelector));\n\n const updateScrollContainer = useCallback(() => {\n const newScrollContainer = domQuery(scrollContainerSelector);\n\n if (newScrollContainer !== scrollContainer) {\n setScrollContainer(newScrollContainer);\n }\n }, [ scrollContainerSelector, scrollContainer ]);\n\n useEffect(() => {\n updateScrollContainer();\n }, [ updateScrollContainer ]);\n\n useEvent('propertiesPanel.attach', updateScrollContainer);\n useEvent('propertiesPanel.detach', updateScrollContainer);\n\n useEffect(() => {\n const Observer = IntersectionObserver;\n\n // return early if IntersectionObserver is not available\n if (!Observer) {\n return;\n }\n\n // capture the element at setup: on unmount the ref is already\n // nulled and unobserving null would throw\n const element = ref.current;\n\n // TODO(@barmac): test this\n if (!element || !scrollContainer) {\n return;\n }\n\n const observer = new Observer((entries) => {\n\n // scroll container is unmounted, do not update sticky state\n if (scrollContainer.scrollHeight === 0) {\n return;\n }\n\n entries.forEach(entry => {\n if (entry.intersectionRatio < 1) {\n setSticky(true);\n }\n else if (entry.intersectionRatio === 1) {\n setSticky(false);\n }\n });\n },\n {\n root: scrollContainer,\n rootMargin: '0px 0px 999999% 0px', // Use bottom margin to avoid stickyness when scrolling out to bottom\n threshold: [ 1 ]\n });\n observer.observe(element);\n\n // Unobserve if unmounted\n return () => {\n observer.unobserve(element);\n };\n\n }, [ ref.current, scrollContainer, setSticky ]);\n}\n","import { useCallback, useRef } from 'preact/hooks';\n\n/**\n * Creates a static function reference with changing body.\n * This is necessary when external libraries require a callback function\n * that has references to state variables.\n *\n * Usage:\n * const callback = useStaticCallback((val) => {val === currentState});\n *\n * The `callback` reference is static and can be safely used in external\n * libraries or as a prop that does not cause rerendering of children.\n *\n * @param {Function} callback function with changing reference\n * @returns {Function} static function reference\n */\nexport function useStaticCallback(callback) {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n return useCallback(\n (...args) => callbackRef.current(...args),\n []\n );\n}","import { useLayoutEffect, useState } from 'preact/hooks';\n\nexport function useElementVisible(element) {\n\n const [ visible, setVisible ] = useState(!!element && !!element.clientHeight);\n\n useLayoutEffect(() => {\n if (!element) return;\n\n const resizeObserver = new ResizeObserver(([ entry ]) => {\n requestAnimationFrame(() => {\n const newVisible = !!entry.contentRect.height;\n if (newVisible !== visible) {\n setVisible(newVisible);\n }\n });\n });\n\n resizeObserver.observe(element);\n\n return () => resizeObserver.disconnect();\n }, [ element, visible ]);\n\n return visible;\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport Tooltip from './entries/Tooltip';\n\nimport classnames from 'classnames';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport {\n isFunction\n} from 'min-dash';\n\nimport {\n useErrors,\n useLayoutState\n} from '../hooks';\n\nimport { PropertiesPanelContext } from '../context';\n\nimport { useStickyIntersectionObserver } from '../hooks';\n\nimport { ArrowIcon } from './icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {import('../PropertiesPanel').GroupDefinition} props\n */\nexport default function Group(props) {\n const {\n element,\n entries = [],\n id,\n label,\n shouldOpen = false,\n } = props;\n\n const groupRef = useRef(null);\n\n const [ open, setOpen ] = useLayoutState(\n [ 'groups', id, 'open' ],\n shouldOpen\n );\n\n const onShow = useCallback(() => setOpen(true), [ setOpen ]);\n\n const toggleOpen = () => setOpen(!open);\n\n const [ edited, setEdited ] = useState(false);\n\n const [ sticky, setSticky ] = useState(false);\n\n // set edited state depending on all entries\n useEffect(() => {\n\n // TODO(@barmac): replace with CSS when `:has()` is supported in all major browsers, or rewrite as in https://github.com/camunda/camunda-modeler/issues/3815#issuecomment-1733038161\n const scheduled = requestAnimationFrame(() => {\n const hasOneEditedEntry = entries.find(entry => {\n const {\n id,\n isEdited\n } = entry;\n\n const entryNode = domQuery(`[data-entry-id=\"${id}\"]`);\n\n if (!isFunction(isEdited) || !entryNode) {\n return false;\n }\n\n const inputNode = domQuery('.bio-properties-panel-input', entryNode);\n\n return isEdited(inputNode);\n });\n\n setEdited(hasOneEditedEntry);\n });\n\n return () => cancelAnimationFrame(scheduled);\n }, [ entries, setEdited ]);\n\n // set error state depending on all entries\n const allErrors = useErrors();\n const hasErrors = entries.some(entry => allErrors[entry.id]);\n\n // set css class when group is sticky to top\n useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n\n const propertiesPanelContext = {\n ...useContext(PropertiesPanelContext),\n onShow\n };\n\n return <div class=\"bio-properties-panel-group\" data-group-id={ 'group-' + id } ref={ groupRef }>\n <div class={ classnames(\n 'bio-properties-panel-group-header',\n edited ? '' : 'empty',\n open ? 'open' : '',\n (sticky && open) ? 'sticky' : ''\n ) } onClick={ toggleOpen }>\n <div\n class=\"bio-properties-panel-group-header-title\"\n >\n <Tooltip value={ props.tooltip } forId={ 'group-' + id } element={ element } parent={ groupRef }>\n { label }\n </Tooltip>\n </div>\n <div class=\"bio-properties-panel-group-header-buttons\">\n {\n <DataMarker\n edited={ edited }\n hasErrors={ hasErrors }\n />\n }\n <button\n type=\"button\"\n title=\"Toggle section\"\n class=\"bio-properties-panel-group-header-button bio-properties-panel-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n </div>\n </div>\n <div class={ classnames(\n 'bio-properties-panel-group-entries',\n open ? 'open' : ''\n ) }>\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n {\n entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n\n return (\n <Component\n { ...entry }\n element={ element }\n key={ id } />\n );\n })\n }\n </PropertiesPanelContext.Provider>\n </div>\n </div>;\n}\n\nfunction DataMarker(props) {\n const {\n edited,\n hasErrors\n } = props;\n\n if (hasErrors) {\n return (\n <div title=\"Section contains an error\" class=\"bio-properties-panel-dot bio-properties-panel-dot--error\"></div>\n );\n }\n\n if (edited) {\n return (\n <div title=\"Section contains edits\" class=\"bio-properties-panel-dot\"></div>\n );\n }\n return null;\n}","/**\n * @typedef { {\n * text: (element: object) => string,\n * icon?: (element: Object) => import('preact').Component\n * } } PlaceholderDefinition\n *\n * @param { PlaceholderDefinition } props\n */\nexport default function Placeholder(props) {\n const {\n text,\n icon: Icon\n } = props;\n\n return (\n <div class=\"bio-properties-panel open\">\n <section class=\"bio-properties-panel-placeholder\">\n { Icon && <Icon class=\"bio-properties-panel-placeholder-icon\" /> }\n <p class=\"bio-properties-panel-placeholder-text\">{ text }</p>\n </section>\n </div>\n );\n}","import {\n useState,\n useEffect,\n useMemo,\n useRef,\n useLayoutEffect\n} from 'preact/hooks';\n\nimport {\n assign,\n get,\n isArray,\n set\n} from 'min-dash';\n\nimport Header from './components/Header';\n\nimport Group from './components/Group';\n\nimport Placeholder from './components/Placeholder';\n\nimport {\n DescriptionContext,\n ErrorsContext,\n EventContext,\n LayoutContext,\n PropertiesPanelContext,\n TooltipContext\n} from './context';\n\nimport { useEvent } from './hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst DEFAULT_LAYOUT = {};\n\nconst DEFAULT_DESCRIPTION = {};\n\nconst DEFAULT_TOOLTIP = {};\n\n\n/**\n * @typedef { {\n * component: import('preact').Component,\n * id: String,\n * isEdited?: Function\n * } } EntryDefinition\n *\n * @typedef { {\n * autoFocusEntry: String,\n * autoOpen?: Boolean,\n * entries: Array<EntryDefinition>,\n * id: String,\n * label: String,\n * remove: (event: MouseEvent) => void\n * } } ListItemDefinition\n *\n * @typedef { {\n * add: (event: MouseEvent) => void,\n * component: import('preact').Component,\n * element: Object,\n * id: String,\n * items: Array<ListItemDefinition>,\n * label: String,\n * shouldOpen?: Boolean\n * } } ListGroupDefinition\n *\n * @typedef { {\n * component?: import('preact').Component,\n * entries: Array<EntryDefinition>,\n * id: String,\n * label: String,\n * shouldOpen?: Boolean\n * } } GroupDefinition\n *\n * @typedef { {\n * [id: String]: GetDescriptionFunction\n * } } DescriptionConfig\n *\n * @typedef { {\n * [id: String]: GetTooltipFunction\n * } } TooltipConfig\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetDescriptionFunction\n *\n * @callback { {\n * @param {string} id\n * @param {Object} element\n * @returns {string}\n * } } GetTooltipFunction\n *\n * @typedef { {\n * getEmpty: (element: object) => import('./components/Placeholder').PlaceholderDefinition,\n * getMultiple: (element: Object) => import('./components/Placeholder').PlaceholderDefinition\n * } } PlaceholderProvider\n *\n */\n\n\n/**\n * A basic properties panel component. Describes *how* content will be rendered, accepts\n * data from implementor to describe *what* will be rendered.\n *\n * @param {Object} props\n * @param {Object|Array} props.element\n * @param {import('./components/Header').HeaderProvider} props.headerProvider\n * @param {PlaceholderProvider} [props.placeholderProvider]\n * @param {Array<GroupDefinition|ListGroupDefinition>} props.groups\n * @param {Object} [props.layoutConfig]\n * @param {Function} [props.layoutChanged]\n * @param {DescriptionConfig} [props.descriptionConfig]\n * @param {Function} [props.descriptionLoaded]\n * @param {TooltipConfig} [props.tooltipConfig]\n * @param {Function} [props.tooltipLoaded]\n * @param {HTMLElement} [props.feelPopupContainer]\n * @param {Function} [props.getFeelPopupLinks]\n * @param {Object} [props.eventBus]\n */\nexport default function PropertiesPanel(props) {\n const {\n element,\n headerProvider,\n placeholderProvider,\n groups,\n layoutConfig,\n layoutChanged,\n descriptionConfig,\n descriptionLoaded,\n tooltipConfig,\n tooltipLoaded,\n eventBus\n } = props;\n\n // set-up layout context\n const [ layout, setLayout ] = useState(createLayout(layoutConfig));\n\n // react to external changes in the layout config\n useUpdateLayoutEffect(() => {\n const newLayout = createLayout(layoutConfig);\n\n setLayout(newLayout);\n }, [ layoutConfig ]);\n\n useEffect(() => {\n if (typeof layoutChanged === 'function') {\n layoutChanged(layout);\n }\n }, [ layout, layoutChanged ]);\n\n const getLayoutForKey = (key, defaultValue) => {\n return get(layout, key, defaultValue);\n };\n\n const setLayoutForKey = (key, config) => {\n const newLayout = assign({}, layout);\n set(newLayout, key, config);\n setLayout(newLayout);\n };\n\n const layoutContext = {\n layout,\n setLayout,\n getLayoutForKey,\n setLayoutForKey\n };\n\n // set-up description context\n const description = useMemo(() => createDescriptionContext(descriptionConfig), [ descriptionConfig ]);\n\n useEffect(() => {\n if (typeof descriptionLoaded === 'function') {\n descriptionLoaded(description);\n }\n }, [ description, descriptionLoaded ]);\n\n\n const getDescriptionForId = (id, element) => {\n return description[id] && description[id](element);\n };\n\n const descriptionContext = {\n description,\n getDescriptionForId\n };\n\n // set-up tooltip context\n const tooltip = useMemo(() => createTooltipContext(tooltipConfig), [ tooltipConfig ]);\n\n useEffect(() => {\n if (typeof tooltipLoaded === 'function') {\n tooltipLoaded(tooltip);\n }\n }, [ tooltip, tooltipLoaded ]);\n\n const getTooltipForId = (id, element) => {\n return tooltip[id] && tooltip[id](element);\n };\n\n const tooltipContext = {\n tooltip,\n getTooltipForId\n };\n\n const [ errors, setErrors ] = useState({});\n\n const onSetErrors = ({ errors }) => setErrors(errors);\n\n useEvent('propertiesPanel.setErrors', onSetErrors, eventBus);\n\n const errorsContext = {\n errors\n };\n\n const eventContext = {\n eventBus\n };\n\n const propertiesPanelContext = {\n element\n };\n\n // empty state\n if (placeholderProvider && !element) {\n return <Placeholder { ...placeholderProvider.getEmpty() } />;\n }\n\n // multiple state\n if (placeholderProvider && isArray(element)) {\n return <Placeholder { ...placeholderProvider.getMultiple() } />;\n }\n\n return (\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n <ErrorsContext.Provider value={ errorsContext }>\n <DescriptionContext.Provider value={ descriptionContext }>\n <TooltipContext.Provider value={ tooltipContext }>\n <LayoutContext.Provider value={ layoutContext }>\n <EventContext.Provider value={ eventContext }>\n <div class=\"bio-properties-panel\">\n <Header\n element={ element }\n headerProvider={ headerProvider } />\n <div class=\"bio-properties-panel-scroll-container\">\n {\n groups.map(group => {\n const {\n component: Component = Group,\n id\n } = group;\n\n return (\n <Component\n { ...group }\n key={ id }\n element={ element } />\n );\n })\n }\n </div>\n </div>\n </EventContext.Provider>\n </LayoutContext.Provider>\n </TooltipContext.Provider>\n </DescriptionContext.Provider>\n </ErrorsContext.Provider>\n </PropertiesPanelContext.Provider>\n );\n}\n\n\n// helpers //////////////////\n\nfunction createLayout(overrides = {}, defaults = DEFAULT_LAYOUT) {\n return {\n ...defaults,\n ...overrides\n };\n}\n\nfunction createDescriptionContext(overrides = {}) {\n return {\n ...DEFAULT_DESCRIPTION,\n ...overrides\n };\n}\n\nfunction createTooltipContext(overrides = {}) {\n return {\n ...DEFAULT_TOOLTIP,\n ...overrides\n };\n}\n\n// hooks //////////////////\n\n/**\n * This hook behaves like useLayoutEffect, but does not trigger on the first render.\n *\n * @param {Function} effect\n * @param {Array} deps\n */\nfunction useUpdateLayoutEffect(effect, deps) {\n const isMounted = useRef(false);\n\n useLayoutEffect(() => {\n if (isMounted.current) {\n return effect();\n } else {\n isMounted.current = true;\n }\n }, deps);\n}","import {\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n *\n * @param {object} props\n * @param {string} [props.class]\n * @param {import('preact').Component[]} [props.menuItems]\n * @returns\n */\nexport function DropdownButton(props) {\n const {\n class: className,\n children,\n menuItems = []\n } = props;\n\n const dropdownRef = useRef(null);\n const menuRef = useRef(null);\n\n const [ open, setOpen ] = useState(false);\n const close = () => setOpen(false);\n\n function onDropdownToggle(event) {\n if (menuRef.current && menuRef.current.contains(event.target)) {\n return;\n }\n\n event.stopPropagation();\n\n setOpen(open => !open);\n }\n\n function onActionClick(event, action) {\n event.stopPropagation();\n\n close();\n action();\n }\n\n useGlobalClick([ dropdownRef.current ], () => close());\n\n return (\n <div\n class={ classnames('bio-properties-panel-dropdown-button', { open }, className) }\n onClick={ onDropdownToggle }\n ref={ dropdownRef }\n >\n { children }\n <div class=\"bio-properties-panel-dropdown-button__menu\" ref={ menuRef }>\n { menuItems.map((item, index) => (\n <MenuItem onClick={ onActionClick } item={ item } key={ index } />\n )) }\n </div>\n </div>\n );\n}\n\nfunction MenuItem({ item, onClick }) {\n if (item.separator) {\n return <div class=\"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--separator\" />;\n }\n\n if (item.action) {\n return (<button\n type=\"button\"\n class=\"bio-properties-panel-dropdown-button__menu-item bio-properties-panel-dropdown-button__menu-item--actionable\"\n onClick={ event => onClick(event, item.action) }\n >\n {item.entry}\n </button>);\n }\n\n return <div\n class=\"bio-properties-panel-dropdown-button__menu-item\"\n >\n {item.entry}\n </div>;\n}\n\n/**\n *\n * @param {Array<null | Element>} ignoredElements\n * @param {Function} callback\n */\nfunction useGlobalClick(ignoredElements, callback) {\n useEffect(() => {\n\n /**\n * @param {MouseEvent} event\n */\n function listener(event) {\n if (ignoredElements.some(element => element && element.contains(event.target))) {\n return;\n }\n\n callback();\n }\n\n document.addEventListener('click', listener, { capture: true });\n\n return () => document.removeEventListener('click', listener, { capture: true });\n }, [ ...ignoredElements, callback ]);\n}\n","import classnames from 'classnames';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nexport function HeaderButton(props) {\n const {\n children = null,\n class: classname,\n onClick = () => {},\n ...otherProps\n } = props;\n\n return <button\n type=\"button\"\n { ...otherProps }\n onClick={ onClick }\n class={ classnames('bio-properties-panel-group-header-button', classname) }>\n { children }\n </button>;\n}\n","/**\n * @typedef { {\n * [key: string]: string;\n * } } TranslateReplacements\n */\n\n/**\n * A simple translation stub to be used for multi-language support.\n * Can be easily replaced with a more sophisticated solution.\n *\n * @param {string} template to interpolate\n * @param {TranslateReplacements} [replacements] a map with substitutes\n *\n * @return {string} the translated string\n */\nexport default function translateFallback(template, replacements) {\n\n replacements = replacements || {};\n\n return template.replace(/{([^}]+)}/g, function(_, key) {\n return replacements[key] || '{' + key + '}';\n });\n}","import {\n useCallback,\n useContext,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n ArrowIcon,\n DeleteIcon,\n} from '../icons';\n\nimport { PropertiesPanelContext } from '../../context';\n\nimport translateFallback from '../util/translateFallback';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n\nexport default function CollapsibleEntry(props) {\n const {\n element,\n entries = [],\n id,\n label,\n open: shouldOpen,\n remove,\n translate = translateFallback\n } = props;\n\n const [ open, setOpen ] = useState(shouldOpen);\n\n const toggleOpen = () => setOpen(!open);\n\n const { onShow } = useContext(PropertiesPanelContext);\n\n const propertiesPanelContext = {\n ...useContext(PropertiesPanelContext),\n onShow: useCallback(() => {\n setOpen(true);\n\n if (isFunction(onShow)) {\n onShow();\n }\n }, [ onShow, setOpen ])\n };\n\n\n const placeholderLabel = translate('<empty>');\n\n return (\n <div\n data-entry-id={ id }\n class={ classnames(\n 'bio-properties-panel-collapsible-entry',\n open ? 'open' : ''\n ) }>\n <div class=\"bio-properties-panel-collapsible-entry-header\" onClick={ toggleOpen }>\n <div\n class={ classnames(\n 'bio-properties-panel-collapsible-entry-header-title',\n !label && 'empty'\n ) }>\n { label || placeholderLabel }\n </div>\n <button\n type=\"button\"\n title={ translate('Toggle list item') }\n class=\"bio-properties-panel-arrow bio-properties-panel-collapsible-entry-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n {\n remove\n ?\n (\n <button type=\"button\" title={ translate('Delete item') } class=\"bio-properties-panel-remove-entry\" onClick={ remove }>\n <DeleteIcon />\n </button>\n )\n : null\n }\n </div>\n <div class={ classnames(\n 'bio-properties-panel-collapsible-entry-entries',\n open ? 'open' : ''\n ) }>\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n {\n entries.map(entry => {\n const {\n component: Component,\n id\n } = entry;\n\n return (\n <Component\n { ...entry }\n element={ element }\n key={ id } />\n );\n })\n }\n </PropertiesPanelContext.Provider>\n </div>\n </div>\n );\n}","import {\n useEffect\n} from 'preact/hooks';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport { isFunction } from 'min-dash';\n\nimport CollapsibleEntry from './entries/Collapsible';\nimport translateFallback from './util/translateFallback';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {import('../PropertiesPanel').ListItemDefinition} props\n */\nexport default function ListItem(props) {\n const {\n autoFocusEntry,\n autoOpen,\n translate = translateFallback\n } = props;\n\n // focus specified entry on auto open\n useEffect(() => {\n if (autoOpen && autoFocusEntry) {\n const entry = domQuery(`[data-entry-id=\"${autoFocusEntry}\"]`);\n\n const focusableInput = domQuery('.bio-properties-panel-input', entry);\n\n if (focusableInput) {\n\n if (isFunction(focusableInput.select)) {\n focusableInput.select();\n } else if (isFunction(focusableInput.focus)) {\n focusableInput.focus();\n }\n\n focusableInput.scrollIntoView();\n }\n }\n }, [ autoOpen, autoFocusEntry ]);\n\n\n return (\n <div class=\"bio-properties-panel-list-item\">\n <CollapsibleEntry\n { ...props }\n open={ autoOpen }\n translate={ translate }\n />\n </div>\n );\n\n}\n","import {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport Tooltip from './entries/Tooltip';\n\nimport classnames from 'classnames';\n\nimport {\n useErrors,\n useLayoutState,\n usePrevious\n} from '../hooks';\n\nimport ListItem from './ListItem';\n\nimport {\n ArrowIcon,\n CreateIcon\n} from './icons';\n\nimport { PropertiesPanelContext } from '../context';\n\nimport { useStickyIntersectionObserver } from '../hooks';\n\nimport translateFallback from './util/translateFallback';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @param {import('../PropertiesPanel').ListGroupDefinition} props\n */\nexport default function ListGroup(props) {\n const {\n add,\n element,\n id,\n items,\n label,\n shouldOpen = false,\n translate = translateFallback\n } = props;\n\n useEffect(() => {\n if (props.shouldSort != undefined) {\n console.warn('the property \\'shouldSort\\' is no longer supported');\n }\n }, [ props.shouldSort ]);\n\n const groupRef = useRef(null);\n\n const [ open, setOpen ] = useLayoutState(\n [ 'groups', id, 'open' ],\n shouldOpen\n );\n\n const [ sticky, setSticky ] = useState(false);\n\n const onShow = useCallback(() => setOpen(true), [ setOpen ]);\n\n const [ localItems, setLocalItems ] = useState([]);\n\n // Flag to mark that add button was clicked in the last render cycle\n const [ addTriggered, setAddTriggered ] = useState(false);\n\n const prevElement = usePrevious(element);\n\n const toggleOpen = useCallback(() => setOpen(!open), [ open ]);\n\n const openItemIds = (element === prevElement && open && addTriggered)\n ? getNewItemIds(items, localItems)\n : [];\n\n // reset local state after items changed\n useEffect(() => {\n setLocalItems(items);\n setAddTriggered(false);\n }, [ items ]);\n\n // set css class when group is sticky to top\n useStickyIntersectionObserver(groupRef, 'div.bio-properties-panel-scroll-container', setSticky);\n\n const hasItems = !!items.length;\n\n const propertiesPanelContext = {\n ...useContext(PropertiesPanelContext),\n onShow\n };\n\n const handleAddClick = e => {\n setAddTriggered(true);\n setOpen(true);\n\n add(e);\n };\n\n const allErrors = useErrors();\n const hasError = items.some(item => {\n if (allErrors[item.id]) {\n return true;\n }\n\n if (!item.entries) {\n return;\n }\n\n // also check if the error is nested, e.g. for name-value entries\n return item.entries.some(entry => allErrors[entry.id]);\n });\n\n\n return <div class=\"bio-properties-panel-group\" data-group-id={ 'group-' + id } ref={ groupRef }>\n <div\n class={ classnames(\n 'bio-properties-panel-group-header',\n hasItems ? '' : 'empty',\n (hasItems && open) ? 'open' : '',\n (sticky && open) ? 'sticky' : ''\n ) }\n onClick={ hasItems ? toggleOpen : noop }>\n <div\n class=\"bio-properties-panel-group-header-title\"\n >\n <Tooltip value={ props.tooltip } forId={ 'group-' + id } element={ element } parent={ groupRef }>\n { label }\n </Tooltip>\n </div>\n <div class=\"bio-properties-panel-group-header-buttons\">\n {\n add\n ? (\n <button\n type=\"button\"\n title={ translate('Create new list item') }\n class=\"bio-properties-panel-group-header-button bio-properties-panel-add-entry\"\n onClick={ handleAddClick }\n >\n <CreateIcon />\n {\n !hasItems ? (\n <span class=\"bio-properties-panel-add-entry-label\">{ translate('Create') }</span>\n )\n : null\n }\n </button>\n )\n : null\n }\n {\n hasItems\n ? (\n <div\n title={ translate(`List contains {numOfItems} item${items.length != 1 ? 's' : ''}`, { numOfItems: items.length }) }\n class={\n classnames(\n 'bio-properties-panel-list-badge',\n hasError ? 'bio-properties-panel-list-badge--error' : ''\n )\n }\n >\n { items.length }\n </div>\n )\n : null\n }\n {\n hasItems\n ? (\n <button\n type=\"button\"\n title={ translate('Toggle section') }\n class=\"bio-properties-panel-group-header-button bio-properties-panel-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n )\n : null\n }\n </div>\n </div>\n <div class={ classnames(\n 'bio-properties-panel-list',\n open && hasItems ? 'open' : ''\n ) }>\n <PropertiesPanelContext.Provider value={ propertiesPanelContext }>\n\n {\n items.map((item, index) => {\n if (!item) {\n return;\n }\n\n const { id } = item;\n\n // if item was added, open it\n // existing items will not be affected as autoOpen\n // is only applied on first render\n const autoOpen = openItemIds.includes(item.id);\n\n return (\n <ListItem\n { ...item }\n autoOpen={ autoOpen }\n element={ element }\n index={ index }\n key={ id }\n translate={ translate } />\n );\n })\n }\n </PropertiesPanelContext.Provider>\n </div>\n </div>;\n}\n\n\nfunction getNewItemIds(newItems, oldItems) {\n const newIds = newItems.map(item => item.id);\n const oldIds = oldItems.map(item => item.id);\n\n return newIds.filter(itemId => !oldIds.includes(itemId));\n}","import {\n useDescriptionContext\n} from '../../hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.forId - id of the entry the description is used for\n * @param {String} props.value\n */\nexport default function Description(props) {\n const {\n element,\n forId,\n value\n } = props;\n\n const contextDescription = useDescriptionContext(forId, element);\n\n const description = value || contextDescription;\n\n if (description) {\n return (\n <div class=\"bio-properties-panel-description\">\n { description }\n </div>\n );\n }\n}\n","import {\n useError,\n useShowEntryEvent\n} from '../../hooks';\n\nimport {\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport Description from './Description';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nfunction Checkbox(props) {\n const {\n id,\n label,\n onChange,\n disabled,\n value = false,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleChangeCallback = ({ target }) => {\n onChange(target.checked);\n };\n\n const handleChange = e => {\n handleChangeCallback(e);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n const ref = useShowEntryEvent(id);\n\n return (\n <div class=\"bio-properties-panel-checkbox\">\n <input\n ref={ ref }\n id={ prefixId(id) }\n name={ id }\n onFocus={ onFocus }\n onBlur={ onBlur }\n type=\"checkbox\"\n class=\"bio-properties-panel-input\"\n onChange={ handleChange }\n checked={ localValue }\n disabled={ disabled } />\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n </div>\n );\n}\n\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {boolean} [props.disabled]\n */\nexport default function CheckboxEntry(props) {\n const {\n element,\n id,\n description,\n label,\n getValue,\n setValue,\n disabled,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const value = getValue(element);\n\n const error = useError(id);\n\n return (\n <div class=\"bio-properties-panel-entry bio-properties-panel-checkbox-entry\" data-entry-id={ id }>\n <Checkbox\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onChange={ setValue }\n onFocus={ onFocus }\n onBlur={ onBlur }\n value={ value }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.checked;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Checkbox from './Checkbox';\nimport Description from './Description';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.label\n * @param {Array<{label: String, value: *}>} props.options\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {String} [props.description]\n * @param {string|import('preact').Component} [props.tooltip]\n * @param {boolean} [props.disabled]\n * @param {Function} [props.onFocus]\n * @param {Function} [props.onBlur]\n */\nexport default function CheckboxGroup(props) {\n const {\n element,\n id,\n label,\n description,\n tooltip,\n options = [],\n getValue,\n setValue,\n disabled,\n onFocus,\n onBlur\n } = props;\n\n const value = getValue(element) || [];\n\n const handleOptionChange = (optionValue, checked) => {\n const newValue = checked\n ? [ ...value, optionValue ]\n : value.filter(v => v !== optionValue);\n\n setValue(newValue);\n };\n\n return (\n <div class=\"bio-properties-panel-entry bio-properties-panel-checkbox-group\" data-entry-id={ id }>\n <div class=\"bio-properties-panel-group-header\">\n <p class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ element }>\n { label }\n </Tooltip>\n </p>\n </div>\n <div class=\"bio-properties-panel-checkbox-group-entries\">\n {\n options.map((option) => (\n <Checkbox\n key={ option.value }\n id={ `${id}-${option.value}` }\n label={ option.label }\n setValue={ (checked) => handleOptionChange(option.value, checked) }\n getValue={ () => value.includes(option.value) }\n disabled={ disabled }\n onFocus={ onFocus }\n onBlur={ onBlur }\n element={ element } />\n ))\n }\n </div>\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n","import Description from './Description';\n\nimport { useEffect, useRef, useState } from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction, isObject } from 'min-dash';\n\nimport translateFallback from '../util/translateFallback';\n\nimport {\n useDebounce,\n useError,\n useShowEntryEvent,\n useStaticCallback,\n} from '../../hooks';\n\nimport Tooltip from './Tooltip';\n\nimport {\n EditorView,\n drawSelection,\n highlightSpecialChars,\n keymap,\n placeholder as cmPlaceholder,\n} from '@codemirror/view';\nimport { Annotation, EditorState } from '@codemirror/state';\nimport {\n bracketMatching,\n defaultHighlightStyle,\n foldGutter,\n foldKeymap,\n syntaxHighlighting,\n} from '@codemirror/language';\nimport { closeBrackets, closeBracketsKeymap } from '@codemirror/autocomplete';\nimport { defaultKeymap, history, historyKeymap } from '@codemirror/commands';\nimport { json, jsonParseLinter } from '@codemirror/lang-json';\nimport { linter } from '@codemirror/lint';\n\n{\n /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */\n}\n\nconst ExternalChange = Annotation.define();\nconst parseJsonLinter = jsonParseLinter();\n\n/**\n * A CodeMirror based JSON editor for the properties panel.\n *\n * @param {object} props\n * @param {string} props.id\n * @param {string} props.label\n * @param {string} [props.value]\n * @param {Function} props.onInput\n * @param {boolean} [props.disabled]\n * @param {string} [props.placeholder]\n * @param {string} [props.tooltip]\n * @param {object} [props.element]\n */\nfunction JsonEditor(props) {\n const {\n id,\n label,\n debounce,\n value = '',\n onInput: commitValue,\n disabled,\n placeholder,\n tooltip,\n element,\n } = props;\n\n const containerRef = useRef(null);\n const viewRef = useRef(null);\n const editorRef = useShowEntryEvent(id);\n\n const onInput = useStaticCallback((newValue) => {\n commitValue(newValue === '' ? undefined : newValue);\n });\n\n const handleChange = useDebounce(onInput, debounce);\n\n useEffect(() => {\n const view = new EditorView({\n state: EditorState.create({\n doc: value,\n extensions: [\n highlightSpecialChars(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n foldGutter(),\n bracketMatching(),\n closeBrackets(),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n ...closeBracketsKeymap,\n ...foldKeymap,\n ]),\n EditorState.tabSize.of(2),\n EditorView.lineWrapping,\n EditorState.readOnly.of(!!disabled),\n ...(placeholder ? [cmPlaceholder(placeholder)] : []),\n EditorView.updateListener.of((update) => {\n const isExternal = update.transactions.some((tr) =>\n tr.annotation(ExternalChange),\n );\n if (update.docChanged && !isExternal) {\n handleChange(update.state.doc.toString());\n }\n }),\n json(),\n linter(\n (view) => {\n const content = view.state.doc.toString();\n if (!content.trim()) return [];\n return parseJsonLinter(view);\n },\n { delay: 300 },\n ),\n ],\n }),\n parent: containerRef.current,\n });\n\n viewRef.current = view;\n\n // Allow useShowEntryEvent to focus the editor\n editorRef.current = view.contentDOM;\n\n const prefixedId = `bio-properties-panel-${id}`;\n view.contentDOM.setAttribute('id', prefixedId);\n view.contentDOM.setAttribute('aria-label', label);\n\n return () => {\n view.destroy();\n };\n }, []);\n\n // Sync external value changes into the editor\n useEffect(() => {\n const view = viewRef.current;\n if (!view) return;\n\n const currentValue = view.state.doc.toString();\n if (value === currentValue) return;\n\n view.dispatch({\n changes: { from: 0, to: currentValue.length, insert: value || '' },\n annotations: ExternalChange.of(true),\n });\n }, [value]);\n\n // Focus editor on label click manually, as the native `for`\n // attribute does not work with contenteditable elements\n const focusEditor = () => {\n viewRef.current && viewRef.current.focus();\n };\n\n return (\n <div class=\"bio-properties-panel-json-editor\">\n <label class=\"bio-properties-panel-label\" onClick={focusEditor}>\n <Tooltip value={tooltip} forId={id} element={element}>\n {label}\n </Tooltip>\n </label>\n <div\n class={classnames('bio-properties-panel-input', value && 'edited')}\n ref={containerRef}\n />\n </div>\n );\n}\n\n/**\n * Entry wrapper for JsonEditor, handles getValue/setValue, built-in JSON validation, error display, and description.\n *\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} [props.description]\n * @param {string} props.label\n * @param {Function} props.debounce\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {boolean} [props.disabled]\n * @param {string} [props.placeholder]\n * @param {string} [props.tooltip]\n * @param {Function} [props.validate]\n * @param {Function} [props.translate]\n */\nexport default function JsonEditorEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n label,\n getValue,\n setValue,\n disabled,\n placeholder,\n tooltip,\n validate,\n translate = translateFallback,\n } = props;\n\n const globalError = useError(id);\n\n let value = getValue(element);\n const [localError, setLocalError] = useState(() =>\n computeError(validate, value, translate),\n );\n const [editorValue, setEditorValue] = useState(value);\n\n useEffect(() => {\n if (value === editorValue) {\n return;\n }\n\n setEditorValue(value);\n setLocalError(computeError(validate, value, translate));\n }, [value, validate]);\n\n const onInput = useStaticCallback((newValue) => {\n setEditorValue(newValue);\n\n const currentValue = getValue(element);\n\n if (newValue !== currentValue) {\n const newValidationError = computeError(validate, newValue, translate);\n\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n }\n });\n\n const error = globalError || localError;\n\n return (\n <div\n class={classnames('bio-properties-panel-entry', error && 'has-error')}\n data-entry-id={id}\n >\n <JsonEditor\n id={id}\n key={element}\n label={label}\n debounce={debounce}\n value={value}\n onInput={onInput}\n disabled={disabled}\n placeholder={placeholder}\n tooltip={tooltip}\n element={element}\n />\n {error && <div class=\"bio-properties-panel-error\">{error}</div>}\n <Description forId={id} element={element} value={description} />\n </div>\n );\n}\n\n/**\n * Check if the JSON editor entry has been edited.\n */\nexport function isEdited(node) {\n return node && node.classList.contains('edited');\n}\n\n// helpers /////////////////\n\nfunction computeError(validate, value, translate) {\n return (\n (isFunction(validate) ? validate(value) : null) ||\n validateJson(value, translate)\n );\n}\n\nfunction validateJson(value, translate = translateFallback) {\n if (!value || !value.trim()) return null;\n\n try {\n return isObject(JSON.parse(value))\n ? null\n : translate('JSON contains errors');\n } catch (e) {\n return translate('JSON contains errors');\n }\n}\n","import { OpenPopupIcon } from './icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * Button to open popups.\n *\n * @param {Object} props\n * @param {Function} props.onClick - Callback to trigger when the button is clicked.\n * @param {string} [props.title] - Tooltip text for the button.\n * @param {boolean} [props.disabled] - Whether the button is disabled.\n * @param {string} [props.className] - Additional class names for the button.\n */\nexport function OpenPopupButton({\n onClick,\n title = 'Open pop-up editor',\n}) {\n return (\n <button\n type=\"button\"\n title={ title }\n class={ 'bio-properties-panel-open-feel-popup' }\n onClick={ onClick }\n >\n <OpenPopupIcon />\n </button>\n );\n}\n","import classNames from 'classnames';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { forwardRef } from 'preact/compat';\n\nimport { ExpressionEditor } from '@kunpeng-js/expression-editor';\nimport { useStaticCallback } from '../../../hooks';\n\nimport { OpenPopupButton } from '../../OpenPopupButton';\n\n{\n /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */\n}\n\nconst noop = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus = function (editor, ref) {\n const [buffer, setBuffer] = useState(undefined);\n\n ref.current = useMemo(\n () => ({\n focus: (offset) => {\n if (editor) {\n editor.focus(offset);\n } else {\n if (typeof offset === 'undefined') {\n offset = Infinity;\n }\n setBuffer(offset);\n }\n },\n }),\n [editor],\n );\n\n useEffect(() => {\n if (typeof buffer !== 'undefined' && editor) {\n editor.focus(buffer);\n setBuffer(false);\n }\n }, [editor, buffer]);\n};\n\nconst TemplatingEditor = forwardRef((props, ref) => {\n const {\n onInput,\n disabled,\n tooltipContainer,\n enableGutters,\n value,\n onLint = noop,\n onOpenPopup = noop,\n popupOpen,\n contentAttributes = {},\n hostLanguage = null,\n singleLine = false,\n } = props;\n\n const inputRef = useRef();\n const [editor, setEditor] = useState();\n const [localValue, setLocalValue] = useState(value || '');\n\n useBufferedFocus(editor, ref);\n\n const handleInput = useStaticCallback((newValue) => {\n onInput(newValue);\n setLocalValue(newValue);\n });\n\n useEffect(() => {\n let editor;\n\n editor = new ExpressionEditor({\n container: inputRef.current,\n onChange: handleInput,\n value: localValue,\n onLint,\n contentAttributes,\n tooltipContainer,\n enableGutters,\n hostLanguage,\n singleLine,\n lineWrap: true,\n });\n\n setEditor(editor);\n\n return () => {\n onLint([]);\n inputRef.current.innerHTML = '';\n setEditor(null);\n };\n }, []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (value === localValue) {\n return;\n }\n\n editor.setValue(value);\n setLocalValue(value);\n }, [value]);\n\n const handleClick = () => {\n ref.current.focus();\n };\n\n return (\n <div\n class={classNames(\n 'bio-properties-panel-feelers-editor-container',\n popupOpen ? 'popupOpen' : null,\n )}\n >\n {popupOpen && (\n <div class=\"bio-properties-panel-feelers-editor__popup-placeholder\">\n Opened in popup\n </div>\n )}\n <div\n name={props.name}\n class={classNames(\n 'bio-properties-panel-feelers-editor bio-properties-panel-input',\n localValue ? 'edited' : null,\n disabled ? 'disabled' : null,\n )}\n ref={inputRef}\n onClick={handleClick}\n ></div>\n {!disabled && <OpenPopupButton onClick={() => onOpenPopup('feelers')} />}\n </div>\n );\n});\n\nexport default TemplatingEditor;\n","import classNames from 'classnames';\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport { forwardRef } from 'preact/compat';\n\nimport Editor from '@kunpeng-js/expression-editor';\n\nimport { EditorView, lineNumbers } from '@codemirror/view';\n\nimport { useStaticCallback } from '../../../hooks';\n\nimport { OpenPopupButton } from '../../OpenPopupButton';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * Buffer `.focus()` calls while the editor is not initialized.\n * Set Focus inside when the editor is ready.\n */\nconst useBufferedFocus = function(editor, ref) {\n\n const [ buffer, setBuffer ] = useState(undefined);\n\n ref.current = useMemo(() => ({\n focus: (offset) => {\n if (editor) {\n editor.focus(offset);\n } else {\n if (typeof offset === 'undefined') {\n offset = Infinity;\n }\n setBuffer(offset);\n }\n }\n }), [ editor ]);\n\n useEffect(() => {\n if (typeof buffer !== 'undefined' && editor) {\n editor.focus(buffer);\n setBuffer(false);\n }\n }, [ editor, buffer ]);\n};\n\nconst ExpressionEditor = forwardRef((props, ref) => {\n\n const {\n contentAttributes,\n enableGutters,\n value,\n onInput,\n onKeyDown: onKeyDownProp = noop,\n onFeelToggle = noop,\n onLint = noop,\n onOpenPopup = noop,\n placeholder,\n popupOpen,\n disabled,\n tooltipContainer,\n variables,\n feelLanguageContext\n } = props;\n\n const inputRef = useRef();\n const [ editor, setEditor ] = useState();\n const [ localValue, setLocalValue ] = useState(value || '');\n\n const {\n builtins,\n dialect,\n parserDialect\n } = feelLanguageContext || {};\n\n useBufferedFocus(editor, ref);\n\n const handleInput = useStaticCallback(newValue => {\n onInput(newValue);\n setLocalValue(newValue);\n });\n\n useEffect(() => {\n\n let editor;\n\n /* Trigger FEEL toggle when\n *\n * - `backspace` is pressed\n * - AND the cursor is at the beginning of the input\n */\n const onKeyDown = e => {\n\n // Call parent onKeyDown handler first\n onKeyDownProp(e);\n\n if (e.key !== 'Backspace' || !editor) {\n return;\n }\n\n const selection = editor.getSelection();\n const range = selection.ranges[selection.mainIndex];\n\n if (range.from === 0 && range.to === 0) {\n onFeelToggle();\n }\n };\n\n editor = new Editor({\n container: inputRef.current,\n onChange: handleInput,\n onKeyDown: onKeyDown,\n onLint: onLint,\n placeholder: placeholder,\n tooltipContainer: tooltipContainer,\n value: localValue,\n variables,\n builtins,\n dialect,\n parserDialect,\n extensions: [\n ...enableGutters ? [ lineNumbers() ] : [],\n EditorView.lineWrapping\n ],\n contentAttributes\n });\n\n setEditor(\n editor\n );\n\n return () => {\n onLint([]);\n inputRef.current.innerHTML = '';\n setEditor(null);\n };\n }, []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n if (value === localValue) {\n return;\n }\n\n editor.setValue(value);\n setLocalValue(value);\n }, [ value ]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.setVariables(variables);\n }, [ variables ]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.setPlaceholder(placeholder);\n }, [ placeholder ]);\n\n const handleClick = () => {\n ref.current.focus();\n };\n\n return <div class={ classNames(\n 'bio-properties-panel-feel-editor-container',\n disabled ? 'disabled' : null,\n popupOpen ? 'popupOpen' : null)\n }>\n {\n popupOpen && <div class=\"bio-properties-panel-feel-editor__open-popup-placeholder\">Opened in editor</div>\n }\n <div\n name={ props.name }\n class={ classNames('bio-properties-panel-input', localValue ? 'edited' : null) }\n ref={ inputRef }\n onClick={ handleClick }\n ></div>\n {!disabled && <OpenPopupButton\n onClick={ () => onOpenPopup('feel') }\n /> }\n </div>;\n});\n\nexport default ExpressionEditor;\n","export function ExpressionIndicator(props) {\n const {\n active\n } = props;\n\n if (!active) {\n return null;\n }\n\n return <span class=\"bio-properties-panel-expression-indicator\">\n =\n </span>;\n}\n","import classNames from 'classnames';\nimport { FeelIcon as FeelIconSvg } from '../../icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.label\n * @param {String} props.feel\n */\nexport default function ExpressionIcon(props) {\n\n const {\n feel = false,\n active,\n disabled = false,\n onClick = noop\n } = props;\n\n const feelRequiredLabel = 'Expression expression is mandatory';\n const feelOptionalLabel = `Click to ${active ? 'remove' : 'set a'} dynamic value with FEEL expression`;\n\n const handleClick = e => {\n onClick(e);\n\n // when pointer event was created from keyboard, keep focus on button\n if (!e.pointerType) {\n e.stopPropagation();\n }\n };\n\n return (\n <button\n type=\"button\"\n class={ classNames('bio-properties-panel-feel-icon',\n active ? 'active' : null,\n feel === 'required' ? 'required' : 'optional') }\n onClick={ handleClick }\n disabled={ feel === 'required' || disabled }\n title={\n feel === 'required' ? feelRequiredLabel : feelOptionalLabel\n }\n >\n <FeelIconSvg />\n </button>\n );\n}\n","/**\n * @param {KeyboardEvent} event\n * @return {boolean}\n */\nexport function isCmd(event) {\n\n // ensure we don't react to AltGr\n // (mapped to CTRL + ALT)\n if (event.altKey) {\n return false;\n }\n\n return event.ctrlKey || event.metaKey;\n}\n\nexport function isCmdWithChar(event) {\n return isCmd(event) && event.key.length === 1 && /^[a-zA-Z]$/.test(event.key);\n}","import Description from './Description';\n\nimport {\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport classNames from 'classnames';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nexport function ToggleSwitch(props) {\n const {\n id,\n label,\n onInput,\n value,\n switcherLabel,\n inline,\n onFocus,\n onBlur,\n inputRef,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleInputCallback = async () => {\n onInput(!value);\n };\n\n const handleInput = e => {\n handleInputCallback(e);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class={ classNames(\n 'bio-properties-panel-toggle-switch',\n { inline }\n ) }>\n <label class=\"bio-properties-panel-label\"\n for={ prefixId(id) }>\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n <div class=\"bio-properties-panel-field-wrapper\">\n <label class=\"bio-properties-panel-toggle-switch__switcher\">\n <input\n ref={ inputRef }\n id={ prefixId(id) }\n class=\"bio-properties-panel-input\"\n type=\"checkbox\"\n onFocus={ onFocus }\n onBlur={ onBlur }\n name={ id }\n onInput={ handleInput }\n checked={ !!localValue } />\n <span class=\"bio-properties-panel-toggle-switch__slider\" />\n </label>\n { switcherLabel && <p class=\"bio-properties-panel-toggle-switch__label\">{ switcherLabel }</p> }\n </div>\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.label\n * @param {String} props.switcherLabel\n * @param {Boolean} props.inline\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n */\nexport default function ToggleSwitchEntry(props) {\n const {\n element,\n id,\n description,\n label,\n switcherLabel,\n inline,\n getValue,\n setValue,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const value = getValue(element);\n return (\n <div class=\"bio-properties-panel-entry bio-properties-panel-toggle-switch-entry\" data-entry-id={ id }>\n <ToggleSwitch\n id={ id }\n label={ label }\n value={ value }\n onInput={ setValue }\n onFocus={ onFocus }\n onBlur={ onBlur }\n switcherLabel={ switcherLabel }\n inline={ inline }\n tooltip={ tooltip }\n element={ element } />\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.checked;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from './Description';\nimport Tooltip from './Tooltip';\n\nimport {\n useEffect,\n useMemo,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useError\n} from '../../hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nexport function NumberField(props) {\n\n const {\n debounce,\n disabled,\n displayLabel = true,\n id,\n inputRef,\n label,\n max,\n min,\n onInput,\n step,\n value = '',\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleInputCallback = useMemo(() => {\n return debounce((target) => {\n\n if (target.validity.valid) {\n onInput(target.value ? parseFloat(target.value) : undefined);\n }\n });\n }, [ onInput, debounce ]);\n\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-numberfield\">\n {displayLabel && (\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n )}\n <input\n id={ prefixId(id) }\n ref={ inputRef }\n type=\"number\"\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n max={ max }\n min={ min }\n onInput={ handleInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n step={ step }\n value={ localValue } />\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Boolean} props.debounce\n * @param {String} props.description\n * @param {Boolean} props.disabled\n * @param {Object} props.element\n * @param {Function} props.getValue\n * @param {String} props.id\n * @param {String} props.label\n * @param {String} props.max\n * @param {String} props.min\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {String} props.step\n * @param {Function} props.validate\n */\nexport default function NumberFieldEntry(props) {\n const {\n debounce,\n description,\n disabled,\n element,\n getValue,\n id,\n label,\n max,\n min,\n setValue,\n step,\n onFocus,\n onBlur,\n validate,\n tooltip\n } = props;\n\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = (newValue) => {\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n\n const error = globalError || localError;\n\n return (\n <div class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '') } data-entry-id={ id }>\n <NumberField\n debounce={ debounce }\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onFocus={ onFocus }\n onBlur={ onBlur }\n onInput={ onInput }\n max={ max }\n min={ min }\n step={ step }\n value={ value }\n tooltip={ tooltip }\n />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from '../Description';\nimport TemplatingEditor from '../templating/TemplatingEditor';\n\nimport {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState\n} from 'preact/hooks';\n\nimport { forwardRef } from 'preact/compat';\n\nimport classnames from 'classnames';\n\nimport { isFunction, isString } from 'min-dash';\n\nimport {\n useDebounce,\n useError,\n useShowEntryEvent,\n useStaticCallback\n} from '../../../hooks';\n\nimport ExpressionEditor from './ExpressionEditor';\nimport { ExpressionIndicator } from './ExpressionIndicator';\nimport ExpressionIcon from './ExpressionIcon';\n\nimport { EventContext, FeelLanguageContext } from '../../../context';\nimport { isCmdWithChar } from '../../util/keyboardUtils';\n\nimport { ToggleSwitch } from '../ToggleSwitch';\n\nimport { NumberField } from '../NumberField';\nimport Tooltip from '../Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @typedef {'required'|'optional'|'static'} FeelType\n */\n\n/**\n * @param {Object} props\n * @param {Boolean} props.debounce\n * @param {String} props.id\n * @param {Object} props.element\n * @param {String} props.label\n * @param {String} props.hostLanguage\n * @param {Function} props.onInput\n * @param {Function} props.onBlur\n * @param {Function} props.onError\n * @param {FeelType} [props.feel]\n * @param {String} props.value\n * @param {Boolean} [props.singleLine]\n * @param {Function} props.tooltipContainer\n * @param {Function | import('preact').Component} props.OptionalComponent\n * @param {Boolean} props.disabled\n * @param {Array} props.variables\n * @param {string} [props.placeholder]\n * @param {string | import('preact').Component} props.tooltip\n */\nfunction FeelTextfield(props) {\n const {\n debounce,\n id,\n element,\n label,\n hostLanguage,\n onInput: commitValue,\n onBlur,\n onError,\n placeholder,\n feel,\n value = '',\n disabled = false,\n variables,\n singleLine,\n tooltipContainer,\n OptionalComponent = OptionalFeelInput,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const editorRef = useShowEntryEvent(id);\n const containerRef = useRef();\n\n const onInput = useCallback(newValue => {\n\n // we don't commit empty FEEL expressions,\n // but instead serialize them as <undefined>\n const newModelValue = (newValue === '' || newValue === '=') ? undefined : newValue;\n commitValue(newModelValue);\n }, [ commitValue ]);\n\n const feelActive = (isString(localValue) && localValue.startsWith('=')) || feel === 'required';\n const feelOnlyValue = (isString(localValue) && localValue.startsWith('=')) ? localValue.substring(1) : localValue;\n const feelLanguageContext = useContext(FeelLanguageContext);\n\n const [ focus, _setFocus ] = useState(undefined);\n\n const {\n eventBus\n } = useContext(EventContext);\n\n const [ isPopupOpen, setIsPopupOpen ] = useState(false);\n\n const setFocus = (offset = 0) => {\n const hasFocus = containerRef.current.contains(document.activeElement);\n\n // Keep caret position if it is already focused, otherwise focus at the end\n const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n\n _setFocus(position + offset);\n };\n\n /**\n * @type { import('min-dash').DebouncedFunction }\n */\n const handleInput = useDebounce(onInput, debounce);\n\n const handleFeelToggle = useStaticCallback(() => {\n if (feel === 'required') {\n return;\n }\n\n if (!feelActive) {\n setLocalValue('=' + localValue);\n handleInput('=' + localValue);\n } else {\n setLocalValue(feelOnlyValue);\n handleInput(feelOnlyValue);\n }\n });\n\n const handleLocalInput = (newValue, useDebounce = true) => {\n if (feelActive) {\n newValue = '=' + newValue;\n }\n\n if (newValue === localValue) {\n return;\n }\n\n setLocalValue(newValue);\n if (useDebounce) {\n handleInput(newValue);\n } else {\n onInput(newValue);\n }\n\n if (!feelActive && isString(newValue) && newValue.startsWith('=')) {\n\n // focus is behind `=` sign that will be removed\n setFocus(-1);\n }\n };\n\n const handleOnBlur = (e) => {\n handleInput.cancel?.();\n if (e.target.type === 'checkbox') {\n onInput(e.target.checked);\n } else {\n const trimmedValue = e.target.value.trim();\n handleLocalInput(trimmedValue, false);\n }\n\n if (onBlur) {\n onBlur(e);\n }\n };\n\n const handleOnKeyDown = e => {\n if (isCmdWithChar(e)) {\n handleInput.flush();\n }\n };\n\n const handleLint = useStaticCallback((lint = []) => {\n\n const syntaxError = lint.some(report => report.type === 'Syntax Error');\n\n if (syntaxError) {\n onError('Unparsable FEEL expression.');\n } else {\n onError(undefined);\n }\n });\n\n const handleOpenPopup = (type = 'feel') => {\n const isOpen = eventBus.fire('propertiesPanel.openPopup', {\n element,\n entryId: id,\n hostLanguage,\n label,\n onInput: handleLocalInput,\n singleLine,\n sourceElement: editorRef.current,\n tooltipContainer,\n type,\n value: feelOnlyValue,\n variables,\n feelLanguageContext,\n });\n\n if (isOpen) {\n eventBus.once('propertiesPanelPopup.close', () => {\n setIsPopupOpen(false);\n });\n }\n\n setIsPopupOpen(isOpen === true);\n };\n\n useEffect(() => {\n if (typeof focus !== 'undefined') {\n editorRef.current.focus(focus);\n _setFocus(undefined);\n }\n }, [ focus ]);\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n // External value change removed content => keep FEEL configuration\n if (!value) {\n setLocalValue(feelActive ? '=' : '');\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n useEffect(() => {\n return () => {\n eventBus.fire('propertiesPanel.closePopup');\n };\n }, []);\n\n // copy-paste integration\n useEffect(() => {\n const copyHandler = event => {\n if (!feelActive) {\n return;\n }\n event.clipboardData.setData('application/FEEL', event.clipboardData.getData('text'));\n };\n\n const pasteHandler = event => {\n if (feelActive || isPopupOpen) {\n return;\n }\n\n const feelData = event.clipboardData.getData('application/FEEL');\n if (feelData) {\n setTimeout(() => {\n handleFeelToggle();\n setFocus();\n });\n return;\n }\n\n const input = event.target;\n const isFieldEmpty = !input.value;\n const isAllSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n\n if (isFieldEmpty || isAllSelected) {\n const textData = event.clipboardData.getData('text');\n const trimmedValue = textData.trim();\n\n setLocalValue(trimmedValue);\n handleInput(trimmedValue);\n\n if (!feelActive && isString(trimmedValue) && trimmedValue.startsWith('=')) {\n setFocus(trimmedValue.length - 1);\n }\n\n event.preventDefault();\n }\n };\n // capture the container at setup: on unmount the ref is already\n // nulled and calling removeEventListener on null would throw\n const container = containerRef.current;\n\n if (!container) {\n return;\n }\n\n container.addEventListener('copy', copyHandler);\n container.addEventListener('cut', copyHandler);\n container.addEventListener('paste', pasteHandler);\n\n return () => {\n container.removeEventListener('copy', copyHandler);\n container.removeEventListener('cut', copyHandler);\n container.removeEventListener('paste', pasteHandler);\n };\n }, [ containerRef, feelActive, handleFeelToggle, setFocus ]);\n\n return (\n <div class={ classnames(\n 'bio-properties-panel-feel-entry',\n { 'feel-active': feelActive }\n ) }>\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\" onClick={ () => setFocus() }>\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n {label}\n </Tooltip>\n <ExpressionIcon\n label={ label }\n feel={ feel }\n onClick={ handleFeelToggle }\n active={ feelActive }></ExpressionIcon>\n </label>\n\n <div class=\"bio-properties-panel-feel-container\" ref={ containerRef }>\n <ExpressionIndicator\n active={ feelActive }\n disabled={ feel !== 'optional' || disabled }\n onClick={ handleFeelToggle }\n />\n {feelActive ?\n <ExpressionEditor\n name={ id }\n onInput={ handleLocalInput }\n onKeyDown={ handleOnKeyDown }\n contentAttributes={ { 'id': prefixId(id), 'aria-label': label } }\n disabled={ disabled }\n popupOpen={ isPopupOpen }\n onFeelToggle={ () => {\n handleFeelToggle();\n setFocus(true);\n } }\n onLint={ handleLint }\n onOpenPopup={ handleOpenPopup }\n placeholder={ placeholder }\n value={ feelOnlyValue }\n variables={ variables }\n feelLanguageContext={ feelLanguageContext }\n ref={ editorRef }\n tooltipContainer={ tooltipContainer }\n /> :\n <OptionalComponent\n { ...props }\n popupOpen={ isPopupOpen }\n onInput={ handleLocalInput }\n onKeyDown={ handleOnKeyDown }\n onBlur={ handleOnBlur }\n contentAttributes={ { 'id': prefixId(id), 'aria-label': label } }\n value={ localValue }\n ref={ editorRef }\n onOpenPopup={ handleOpenPopup }\n containerRef={ containerRef }\n />\n }\n </div>\n </div>\n );\n}\n\n\nconst OptionalFeelInput = forwardRef((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n onKeyDown,\n value,\n onFocus,\n onBlur,\n placeholder\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: (position) => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n if (typeof position === 'number') {\n if (position > value.length) {\n position = value.length;\n }\n input.setSelectionRange(position, position);\n }\n\n }\n };\n\n return <input\n id={ prefixId(id) }\n type=\"text\"\n ref={ inputRef }\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ e => onInput(e.target.value) }\n onFocus={ onFocus }\n onKeyDown={ onKeyDown }\n onBlur={ onBlur }\n placeholder={ placeholder }\n value={ value || '' } />;\n});\n\nconst OptionalFeelNumberField = forwardRef((props, ref) => {\n const {\n id,\n debounce,\n disabled,\n onInput,\n value,\n min,\n max,\n step,\n onFocus,\n onBlur\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: (position) => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n if (typeof position === 'number' && position !== Infinity) {\n if (position > value.length) {\n position = value.length;\n }\n input.setSelectionRange(position, position);\n }\n\n }\n };\n\n return <NumberField\n id={ id }\n debounce={ debounce }\n disabled={ disabled }\n displayLabel={ false }\n inputRef={ inputRef }\n max={ max }\n min={ min }\n onInput={ onInput }\n step={ step }\n value={ value }\n onFocus={ onFocus }\n onBlur={ onBlur }\n />;\n});\n\nconst OptionalFeelTextArea = forwardRef((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur,\n placeholder\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n input.setSelectionRange(0, 0);\n }\n };\n\n return <textarea\n id={ prefixId(id) }\n type=\"text\"\n ref={ inputRef }\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ e => onInput(e.target.value) }\n onFocus={ onFocus }\n onBlur={ onBlur }\n placeholder={ placeholder }\n value={ value || '' }\n data-gramm=\"false\"\n />;\n});\n\nconst OptionalFeelToggleSwitch = forwardRef((props, ref) => {\n const {\n id,\n onInput,\n value,\n onFocus,\n onBlur,\n switcherLabel\n } = props;\n\n const inputRef = useRef();\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n }\n };\n\n return <ToggleSwitch\n id={ id }\n value={ value }\n inputRef={ inputRef }\n onInput={ onInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n switcherLabel={ switcherLabel } />;\n});\n\nconst OptionalFeelCheckbox = forwardRef((props, ref) => {\n const {\n id,\n disabled,\n onInput,\n value,\n onFocus,\n onBlur\n } = props;\n\n const inputRef = useRef();\n\n const handleChange = ({ target }) => {\n onInput(target.checked);\n };\n\n // To be consistent with the FEEL editor, set focus at start of input\n // this ensures clean editing experience when switching with the keyboard\n ref.current = {\n focus: () => {\n const input = inputRef.current;\n if (!input) {\n return;\n }\n\n input.focus();\n }\n };\n\n return <input\n ref={ inputRef }\n id={ prefixId(id) }\n name={ id }\n onFocus={ onFocus }\n onBlur={ onBlur }\n type=\"checkbox\"\n class=\"bio-properties-panel-input\"\n onChange={ handleChange }\n checked={ value }\n disabled={ disabled } />;\n});\n\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n * @param {string|import('preact').Component} props.tooltip\n */\nexport default function FeelEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n feel,\n label,\n getValue,\n setValue,\n tooltipContainer,\n hostLanguage,\n singleLine,\n validate,\n show = noop,\n example,\n variables,\n onFocus,\n onBlur,\n placeholder,\n tooltip\n } = props;\n\n const [ validationError, setValidationError ] = useState(null);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setValidationError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n const value = getValue(element);\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n // don't create multiple commandStack entries for the same value\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setValidationError(newValidationError);\n });\n\n const onError = useCallback(err => {\n setLocalError(err);\n }, []);\n\n const temporaryError = useError(id);\n\n const error = temporaryError || localError || validationError;\n\n return (\n <div\n class={ classnames(\n props.class,\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <FeelTextfield\n { ...props }\n debounce={ debounce }\n disabled={ disabled }\n feel={ feel }\n id={ id }\n key={ element }\n label={ label }\n onInput={ onInput }\n onError={ onError }\n onFocus={ onFocus }\n onBlur={ onBlur }\n placeholder={ placeholder }\n example={ example }\n hostLanguage={ hostLanguage }\n singleLine={ singleLine }\n show={ show }\n value={ value }\n variables={ variables }\n tooltipContainer={ tooltipContainer }\n OptionalComponent={ props.OptionalComponent }\n tooltip={ tooltip } />\n {error && <div class=\"bio-properties-panel-error\">{error}</div>}\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.max\n * @param {String} props.min\n * @param {String} props.step\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelNumberEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-number\" OptionalComponent={ OptionalFeelNumberField } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string} [props.placeholder]\n */\nexport function FeelTextAreaEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-textarea\" OptionalComponent={ OptionalFeelTextArea } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelToggleSwitchEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-toggle-switch\" OptionalComponent={ OptionalFeelToggleSwitch } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelCheckboxEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-checkbox\" OptionalComponent={ OptionalFeelCheckbox } { ...props } />;\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {String} props.hostLanguage\n * @param {Boolean} props.singleLine\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {FeelType} [props.feel]\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n * @param {Function} props.example\n * @param {Array} props.variables\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n */\nexport function FeelTemplatingEntry(props) {\n return <FeelEntry class=\"bio-properties-panel-feel-templating\" OptionalComponent={ TemplatingEditor } { ...props } />;\n}\n\nexport function isEdited(node) {\n if (!node) {\n return false;\n }\n\n if (node.type === 'checkbox') {\n return !!node.checked || node.classList.contains('edited');\n }\n\n return !!node.value || node.classList.contains('edited');\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${id}`;\n}\n","import { useCallback, useEffect, useState, useMemo, useRef } from 'preact/hooks';\nimport { useStaticCallback, useShowEntryEvent } from '../../../hooks';\nimport { isFunction } from 'min-dash';\nimport { useError } from '../../../hooks';\nimport classnames from 'classnames';\nimport Description from '../Description';\nimport TemplatingEditor from './TemplatingEditor';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.tooltipContainer\n * @param {Function} props.validate\n * @param {Function} props.show\n */\nexport default function TemplatingEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n label,\n getValue,\n setValue,\n tooltipContainer,\n validate,\n show = noop,\n } = props;\n\n const [ validationError, setValidationError ] = useState(null);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setValidationError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n // don't create multiple commandStack entries for the same value\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setValidationError(newValidationError);\n });\n\n const onError = useCallback(err => {\n setLocalError(err);\n }, []);\n\n const temporaryError = useError(id);\n\n const error = localError || temporaryError || validationError;\n\n return (\n <div\n class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <Templating\n debounce={ debounce }\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onInput={ onInput }\n onError={ onError }\n show={ show }\n value={ value }\n tooltipContainer={ tooltipContainer } />\n {error && <div class=\"bio-properties-panel-error\">{error}</div>}\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nfunction Templating(props) {\n const {\n debounce,\n id,\n label,\n onInput,\n onError,\n value = '',\n disabled = false,\n tooltipContainer\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const editorRef = useShowEntryEvent(id);\n const containerRef = useRef();\n\n const [ focus, _setFocus ] = useState(undefined);\n\n const setFocus = (offset = 0) => {\n const hasFocus = containerRef.current.contains(document.activeElement);\n\n // Keep caret position if it is already focused, otherwise focus at the end\n const position = hasFocus ? document.activeElement.selectionStart : Infinity;\n\n _setFocus(position + offset);\n };\n\n const handleInputCallback = useMemo(() => {\n return debounce((newValue) => onInput(newValue.length ? newValue : undefined));\n }, [ onInput, debounce ]);\n\n const handleInput = newValue => {\n handleInputCallback(newValue);\n setLocalValue(newValue);\n };\n\n const handleLint = useStaticCallback(lint => {\n\n const errors = lint && lint.length && lint.filter(e => e.severity === 'error') || [];\n\n if (!errors.length) {\n onError(undefined);\n return;\n }\n\n const error = lint[0];\n const message = `${error.source}: ${error.message}`;\n\n onError(message);\n });\n\n useEffect(() => {\n if (typeof focus !== 'undefined') {\n editorRef.current.focus(focus);\n _setFocus(undefined);\n }\n }, [ focus ]);\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n setLocalValue(value ? value : '');\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-feelers\">\n <label id={ prefixIdLabel(id) } class=\"bio-properties-panel-label\" onClick={ () => setFocus() }>\n {label}\n </label>\n <div class=\"bio-properties-panel-feelers-input\" ref={ containerRef }>\n <TemplatingEditor\n name={ id }\n onInput={ handleInput }\n contentAttributes={ { 'aria-labelledby': prefixIdLabel(id) } }\n disabled={ disabled }\n onLint={ handleLint }\n value={ localValue }\n ref={ editorRef }\n tooltipContainer={ tooltipContainer }\n />\n </div>\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && (!!node.value || node.classList.contains('edited'));\n}\n\n// helpers /////////////////\n\nfunction prefixIdLabel(id) {\n return `bio-properties-panel-feelers-${id}-label`;\n}","import {\n useEffect,\n useState,\n useRef\n} from 'preact/hooks';\n\nimport {\n query as domQuery\n} from 'min-dom';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useKeyFactory,\n usePrevious,\n useStickyIntersectionObserver\n} from '../../hooks';\n\nimport classnames from 'classnames';\n\nimport {\n ArrowIcon,\n CreateIcon,\n DeleteIcon\n} from '../icons';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * Entry for handling lists represented as nested entries.\n *\n * @template Item\n * @param {object} props\n * @param {string} props.id\n * @param {*} props.element\n * @param {Function} props.onAdd\n * @param {import('preact').Component} props.component\n * @param {string} [props.label='<empty>']\n * @param {Function} [props.onRemove]\n * @param {Item[]} [props.items]\n * @param {boolean} [props.open]\n * @param {string|boolean} [props.autoFocusEntry] either a custom selector string or true to focus the first input\n * @returns\n */\nexport default function List(props) {\n const {\n id,\n element,\n items = [],\n component,\n label = '<empty>',\n open: shouldOpen,\n onAdd,\n onRemove,\n autoFocusEntry,\n ...restProps\n } = props;\n\n const entryRef = useRef(null);\n const [ open, setOpen ] = useState(!!shouldOpen);\n const [ sticky, setSticky ] = useState(false);\n\n const hasItems = !!items.length;\n const toggleOpen = () => hasItems && setOpen(!open);\n\n const elementChanged = usePrevious(element) !== element;\n const newItems = useNewItems(items, elementChanged);\n\n useEffect(() => {\n if (open && !hasItems) {\n setOpen(false);\n }\n }, [ open, hasItems ]);\n\n /**\n * @param {MouseEvent} event\n */\n function addItem(event) {\n event.stopPropagation();\n onAdd();\n\n if (!open) {\n setOpen(true);\n }\n }\n\n // set css class when entry is sticky to top\n useStickyIntersectionObserver(entryRef, 'div.bio-properties-panel-scroll-container', setSticky);\n\n return (\n <div\n data-entry-id={ id }\n class={ classnames(\n 'bio-properties-panel-entry',\n 'bio-properties-panel-list-entry',\n hasItems ? '' : 'empty',\n open ? 'open' : ''\n ) }\n ref={ entryRef }>\n <div\n class={ classnames(\n 'bio-properties-panel-list-entry-header',\n (sticky && open) ? 'sticky' : ''\n ) }\n onClick={ toggleOpen }>\n <div\n class={ classnames(\n 'bio-properties-panel-list-entry-header-title',\n open && 'open'\n ) }>\n { label }\n </div>\n <div\n class=\"bio-properties-panel-list-entry-header-buttons\"\n >\n <button\n type=\"button\"\n title=\"Create new list item\"\n onClick={ addItem }\n class=\"bio-properties-panel-add-entry\"\n >\n <CreateIcon />\n {\n !hasItems ? (\n <span class=\"bio-properties-panel-add-entry-label\">Create</span>\n )\n : null\n }\n </button>\n {\n hasItems && (\n <div\n title={ `List contains ${items.length} item${items.length != 1 ? 's' : ''}` }\n class=\"bio-properties-panel-list-badge\"\n >\n { items.length }\n </div>\n )\n }\n {\n hasItems && (\n <button\n type=\"button\"\n title=\"Toggle list item\"\n class=\"bio-properties-panel-arrow\"\n >\n <ArrowIcon class={ open ? 'bio-properties-panel-arrow-down' : 'bio-properties-panel-arrow-right' } />\n </button>\n )\n }\n </div>\n </div>\n {\n hasItems && (\n <ItemsList\n { ...restProps }\n autoFocusEntry={ autoFocusEntry }\n component={ component }\n element={ element }\n id={ id }\n items={ items }\n newItems={ newItems }\n onRemove={ onRemove }\n open={ open }\n />\n )\n }\n </div>\n );\n}\n\nfunction ItemsList(props) {\n const {\n autoFocusEntry,\n component: Component,\n element,\n id,\n items,\n newItems,\n onRemove,\n open,\n ...restProps\n } = props;\n\n const getKey = useKeyFactory();\n\n const newItem = newItems[0];\n\n useEffect(() => {\n if (newItem && autoFocusEntry) {\n\n // (0) select the parent entry (containing all list items)\n const entry = domQuery(`[data-entry-id=\"${id}\"]`);\n\n // (1) select the first input or a custom element to be focussed\n const selector = typeof(autoFocusEntry) === 'boolean' ?\n '.bio-properties-panel-input' :\n autoFocusEntry;\n const focusableInput = domQuery(selector, entry);\n\n // (2) set focus\n if (focusableInput) {\n\n if (isFunction(focusableInput.select)) {\n focusableInput.select();\n } else if (isFunction(focusableInput.focus)) {\n focusableInput.focus();\n }\n\n }\n }\n }, [ newItem, autoFocusEntry, id ]);\n\n return <ol class={ classnames(\n 'bio-properties-panel-list-entry-items',\n open ? 'open' : ''\n ) }>\n {\n items.map((item, index) => {\n const key = getKey(item);\n\n return (<li class=\"bio-properties-panel-list-entry-item\" key={ key }>\n <Component\n { ...restProps }\n element={ element }\n id={ id }\n index={ index }\n item={ item }\n open={ item === newItem } />\n {\n onRemove && (\n <button\n type=\"button\"\n title=\"Delete item\"\n class=\"bio-properties-panel-remove-entry bio-properties-panel-remove-list-entry\"\n onClick={ () => onRemove && onRemove(item) }\n ><DeleteIcon /></button>\n )\n }\n </li>);\n })\n }\n </ol>;\n}\n\nfunction useNewItems(items = [], shouldReset) {\n const previousItems = usePrevious(items.slice()) || [];\n\n if (shouldReset) {\n return [];\n }\n\n return previousItems ? items.filter(item => !previousItems.includes(item)) : [];\n}\n","import classNames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useError,\n useShowEntryEvent\n} from '../../hooks';\n\nimport {\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport Description from './Description';\nimport Tooltip from './Tooltip';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef { { value: string, label: string, disabled: boolean, children: { value: string, label: string, disabled: boolean } } } Option\n */\n\n/**\n * Provides basic select input.\n *\n * @param {object} props\n * @param {string} props.id\n * @param {string[]} props.path\n * @param {string} props.label\n * @param {Function} props.onChange\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Array<Option>} [props.options]\n * @param {string} props.value\n * @param {boolean} [props.disabled]\n */\nfunction Select(props) {\n const {\n id,\n label,\n onChange,\n options = [],\n value = '',\n disabled,\n onFocus,\n onBlur,\n tooltip\n } = props;\n\n const ref = useShowEntryEvent(id);\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleChangeCallback = ({ target }) => {\n onChange(target.value);\n };\n\n const handleChange = e => {\n handleChangeCallback(e);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-select\">\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n {label}\n </Tooltip>\n </label>\n <select\n ref={ ref }\n id={ prefixId(id) }\n name={ id }\n class=\"bio-properties-panel-input\"\n onInput={ handleChange }\n onFocus={ onFocus }\n onBlur={ onBlur }\n value={ localValue }\n disabled={ disabled }\n >\n {options.map((option, idx) => {\n if (option.children) {\n return (\n <optgroup key={ idx } label={ option.label }>\n {option.children.map((child, idx) => (\n <option\n key={ idx }\n value={ child.value }\n disabled={ child.disabled }\n >\n {child.label}\n </option>\n ))}\n </optgroup>\n );\n }\n\n return (\n <option key={ idx } value={ option.value } disabled={ option.disabled }>\n {option.label}\n </option>\n );\n })}\n </select>\n </div>\n );\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} [props.description]\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Function} props.getOptions\n * @param {boolean} [props.disabled]\n * @param {Function} [props.validate]\n * @param {string|import('preact').Component} props.tooltip\n */\nexport default function SelectEntry(props) {\n const {\n element,\n id,\n description,\n label,\n getValue,\n setValue,\n getOptions,\n disabled,\n onFocus,\n onBlur,\n validate,\n tooltip\n } = props;\n\n const options = getOptions(element);\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n\n const onChange = (newValue) => {\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n setValue(newValue, newValidationError);\n setLocalError(newValidationError);\n };\n\n const error = globalError || localError;\n\n return (\n <div\n class={ classNames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <Select\n id={ id }\n key={ element }\n label={ label }\n value={ value }\n onChange={ onChange }\n onFocus={ onFocus }\n onBlur={ onBlur }\n options={ options }\n disabled={ disabled }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}","import {\n useMemo,\n useEffect,\n useState\n} from 'preact/hooks';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @param {Object} props\n * @param {Function} props.debounce\n * @param {Boolean} [props.disabled]\n * @param {Object} props.element\n * @param {Function} props.getValue\n * @param {String} props.id\n * @param {Function} [props.onBlur]\n * @param {Function} [props.onFocus]\n * @param {Function} props.setValue\n */\nexport default function Simple(props) {\n const {\n debounce,\n disabled,\n element,\n getValue,\n id,\n onBlur,\n onFocus,\n setValue\n } = props;\n\n const value = getValue(element);\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const handleInputCallback = useMemo(() => {\n return debounce((target) => setValue(target.value.length ? target.value : undefined));\n }, [ setValue, debounce ]);\n\n const handleInput = e => {\n handleInputCallback(e.target);\n setLocalValue(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n\n return (\n <div class=\"bio-properties-panel-simple\">\n <input\n id={ prefixId(id) }\n key={ element }\n type=\"text\"\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ handleInput }\n aria-label={ localValue || '<empty>' }\n onFocus={ onFocus }\n onBlur={ onBlur }\n value={ localValue } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from './Description';\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport {\n useDebounce,\n useElementVisible,\n useError,\n useShowEntryEvent,\n useStaticCallback\n} from '../../hooks';\n\nimport { isFunction } from 'min-dash';\nimport Tooltip from './Tooltip';\nimport { isCmdWithChar } from '../util/keyboardUtils';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nfunction resizeToContents(element) {\n element.style.height = 'auto';\n\n // a 2px pixel offset is required to prevent scrollbar from\n // appearing on OS with a full length scroll bar (Windows/Linux)\n element.style.height = `${ element.scrollHeight + 2 }px`;\n}\n\nfunction TextArea(props) {\n\n const {\n id,\n label,\n debounce,\n onInput: commitValue,\n value = '',\n disabled,\n monospace,\n onFocus,\n onBlur,\n onPaste,\n autoResize = true,\n placeholder,\n rows = autoResize ? 1 : 2,\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value);\n\n const ref = useShowEntryEvent(id);\n\n const onInput = useCallback(newValue => {\n const newModelValue = newValue === '' ? undefined : newValue;\n commitValue(newModelValue);\n }, [ commitValue ]);\n\n const visible = useElementVisible(ref.current);\n\n /**\n * @type { import('min-dash').DebouncedFunction }\n */\n const handleInput = useDebounce(onInput, debounce);\n\n const handleLocalInput = e => {\n autoResize && resizeToContents(e.target);\n\n if (e.target.value === localValue) {\n return;\n }\n\n setLocalValue(e.target.value);\n handleInput(e.target.value);\n };\n\n const handleOnBlur = e => {\n const trimmedValue = e.target.value.trim();\n\n // trim and commit on blur\n handleInput.cancel?.();\n onInput(trimmedValue);\n setLocalValue(trimmedValue);\n\n if (onBlur) {\n onBlur(e);\n }\n };\n\n const handleOnPaste = e => {\n const input = e.target;\n const isFieldEmpty = !input.value;\n const isAllSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n\n // Trim and handle paste if field is empty or all content is selected\n if (isFieldEmpty || isAllSelected) {\n const trimmedValue = e.clipboardData.getData('text').trim();\n\n setLocalValue(trimmedValue);\n handleInput(trimmedValue);\n\n if (onPaste) {\n onPaste(e);\n }\n\n e.preventDefault();\n return;\n }\n\n // Allow default paste behavior for normal text editing\n if (onPaste) {\n onPaste(e);\n }\n };\n\n const handleOnKeyDown = e => {\n if (isCmdWithChar(e)) {\n handleInput.flush();\n }\n };\n\n useLayoutEffect(() => {\n autoResize && resizeToContents(ref.current);\n }, []);\n\n useLayoutEffect(() => {\n visible && autoResize && resizeToContents(ref.current);\n }, [ visible ]);\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n return (\n <div class=\"bio-properties-panel-textarea\">\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n <textarea\n ref={ ref }\n id={ prefixId(id) }\n name={ id }\n spellCheck=\"false\"\n class={ classnames(\n 'bio-properties-panel-input',\n monospace ? 'bio-properties-panel-input-monospace' : '',\n autoResize ? 'auto-resize' : '')\n }\n onInput={ handleLocalInput }\n onFocus={ onFocus }\n onKeyDown={ handleOnKeyDown }\n onBlur={ handleOnBlur }\n onPaste={ handleOnPaste }\n placeholder={ placeholder }\n rows={ rows }\n value={ localValue }\n disabled={ disabled }\n data-gramm=\"false\"\n />\n </div>\n );\n}\n\n/**\n * @param {object} props\n * @param {object} props.element\n * @param {string} props.id\n * @param {string} props.description\n * @param {boolean} props.debounce\n * @param {string} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {Function} props.onPaste\n * @param {number} props.rows\n * @param {boolean} props.monospace\n * @param {Function} [props.validate]\n * @param {boolean} [props.disabled]\n */\nexport default function TextAreaEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n label,\n getValue,\n setValue,\n rows,\n monospace,\n disabled,\n validate,\n onFocus,\n onBlur,\n onPaste,\n placeholder,\n autoResize,\n tooltip\n } = props;\n\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n const value = getValue(element);\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setLocalError(newValidationError);\n });\n\n\n const error = globalError || localError;\n\n return (\n <div\n class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <TextArea\n id={ id }\n key={ element }\n label={ label }\n value={ value }\n onInput={ onInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n onPaste={ onPaste }\n rows={ rows }\n debounce={ debounce }\n monospace={ monospace }\n disabled={ disabled }\n placeholder={ placeholder }\n autoResize={ autoResize }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}\n","import Description from './Description';\nimport Tooltip from './Tooltip';\n\nimport {\n useCallback,\n useEffect,\n useState\n} from 'preact/hooks';\n\nimport classnames from 'classnames';\n\nimport { isFunction } from 'min-dash';\n\nimport {\n useDebounce,\n useError,\n useShowEntryEvent,\n useStaticCallback\n} from '../../hooks';\nimport { isCmdWithChar } from '../util/keyboardUtils';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nfunction Textfield(props) {\n\n const {\n debounce,\n disabled = false,\n id,\n label,\n onInput: commitValue,\n onFocus,\n onBlur,\n onPaste,\n placeholder,\n value = '',\n tooltip\n } = props;\n\n const [ localValue, setLocalValue ] = useState(value || '');\n\n const ref = useShowEntryEvent(id);\n\n const onInput = useCallback(newValue => {\n const newModelValue = newValue === '' ? undefined : newValue;\n commitValue(newModelValue);\n }, [ commitValue ]);\n\n /**\n * @type { import('min-dash').DebouncedFunction }\n */\n const handleInput = useDebounce(onInput, debounce);\n\n const handleOnBlur = e => {\n const trimmedValue = e.target.value.trim();\n\n // trim and commit on blur\n handleInput.cancel?.();\n onInput(trimmedValue);\n setLocalValue(trimmedValue);\n\n if (onBlur) {\n onBlur(e);\n }\n };\n\n const handleOnPaste = e => {\n const input = e.target;\n const isFieldEmpty = !input.value;\n const isAllSelected = input.selectionStart === 0 && input.selectionEnd === input.value.length;\n\n // Trim and handle paste if field is empty or all content is selected (overwrite)\n if (isFieldEmpty || isAllSelected) {\n const trimmedValue = e.clipboardData.getData('text').trim();\n\n setLocalValue(trimmedValue);\n handleInput(trimmedValue);\n\n if (onPaste) {\n onPaste(e);\n }\n\n e.preventDefault();\n return;\n }\n\n // Allow default paste behavior for normal text editing\n if (onPaste) {\n onPaste(e);\n }\n };\n\n const handleLocalInput = e => {\n\n if (e.target.value === localValue) {\n return;\n }\n\n setLocalValue(e.target.value);\n handleInput(e.target.value);\n };\n\n useEffect(() => {\n if (value === localValue) {\n return;\n }\n\n setLocalValue(value);\n }, [ value ]);\n\n const handleOnKeyDown = e => {\n if (isCmdWithChar(e)) {\n handleInput.flush();\n }\n };\n\n return (\n <div class=\"bio-properties-panel-textfield\">\n <label for={ prefixId(id) } class=\"bio-properties-panel-label\">\n <Tooltip value={ tooltip } forId={ id } element={ props.element }>\n { label }\n </Tooltip>\n </label>\n <input\n ref={ ref }\n id={ prefixId(id) }\n type=\"text\"\n name={ id }\n spellCheck=\"false\"\n autoComplete=\"off\"\n disabled={ disabled }\n class=\"bio-properties-panel-input\"\n onInput={ handleLocalInput }\n onFocus={ onFocus }\n onKeyDown={ handleOnKeyDown }\n onBlur={ handleOnBlur }\n onPaste={ handleOnPaste }\n placeholder={ placeholder }\n value={ localValue } />\n </div>\n );\n}\n\n/**\n * @param {Object} props\n * @param {Object} props.element\n * @param {String} props.id\n * @param {String} props.description\n * @param {Boolean} props.debounce\n * @param {Boolean} props.disabled\n * @param {String} props.label\n * @param {Function} props.getValue\n * @param {Function} props.setValue\n * @param {Function} props.onFocus\n * @param {Function} props.onBlur\n * @param {string|import('preact').Component} props.tooltip\n * @param {Function} props.validate\n */\nexport default function TextfieldEntry(props) {\n const {\n element,\n id,\n description,\n debounce,\n disabled,\n label,\n getValue,\n setValue,\n validate,\n onFocus,\n onBlur,\n onPaste,\n placeholder,\n tooltip\n } = props;\n\n const globalError = useError(id);\n const [ localError, setLocalError ] = useState(null);\n\n let value = getValue(element);\n\n useEffect(() => {\n if (isFunction(validate)) {\n const newValidationError = validate(value) || null;\n\n setLocalError(newValidationError);\n }\n }, [ value, validate ]);\n\n const onInput = useStaticCallback((newValue) => {\n const value = getValue(element);\n let newValidationError = null;\n\n if (isFunction(validate)) {\n newValidationError = validate(newValue) || null;\n }\n\n if (newValue !== value) {\n setValue(newValue, newValidationError);\n }\n\n setLocalError(newValidationError);\n });\n\n\n const error = globalError || localError;\n\n return (\n <div\n class={ classnames(\n 'bio-properties-panel-entry',\n error ? 'has-error' : '')\n }\n data-entry-id={ id }>\n <Textfield\n debounce={ debounce }\n disabled={ disabled }\n id={ id }\n key={ element }\n label={ label }\n onInput={ onInput }\n onFocus={ onFocus }\n onBlur={ onBlur }\n onPaste={ onPaste }\n placeholder={ placeholder }\n value={ value }\n tooltip={ tooltip }\n element={ element } />\n { error && <div class=\"bio-properties-panel-error\">{ error }</div> }\n <Description forId={ id } element={ element } value={ description } />\n </div>\n );\n}\n\nexport function isEdited(node) {\n return node && !!node.value;\n}\n\n\n// helpers /////////////////\n\nfunction prefixId(id) {\n return `bio-properties-panel-${ id }`;\n}","import {\n debounce as _debounce,\n isNumber\n} from 'min-dash';\n\nconst DEFAULT_DEBOUNCE_TIME = 600;\n\n/**\n * Creates a debounced version of a function, delaying its execution based on `debounceDelay`.\n *\n * - If `debounceDelay` is `false`, the function executes immediately without debouncing.\n * - If a number is provided, the function execution is delayed by the given time in milliseconds.\n *\n * @param { Boolean | Number } [debounceDelay=600]\n *\n * @example\n * const debounce = debounceInput();\n * const debouncedFn = debounce(fn);\n *\n * debouncedFn(); // Executes after 300ms (default) if no further calls occur.\n */\nexport default function debounceInput(debounceDelay) {\n\n /**\n * Applies debounce to the provided function, with a previously setup delay.\n *\n * @template { (...args: any[]) => any } T\n *\n * @param {T} fn\n *\n * @return { (...p: Parameters<T>) => any }\n */\n return function debounce(fn) {\n if (debounceDelay === false) {\n return fn;\n }\n\n var debounceTime =\n isNumber(debounceDelay) ?\n debounceDelay :\n DEFAULT_DEBOUNCE_TIME;\n\n return _debounce(fn, debounceTime);\n };\n}\n\ndebounceInput.$inject = [ 'config.debounceInput' ];\n","import debounceInput from './debounceInput';\n\nexport default {\n debounceInput: [ 'factory', debounceInput ]\n};\n","import { domify } from 'min-dom';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * Add a dragger that calls back the passed function with\n * { event, delta } on drag.\n *\n * @example\n *\n * function dragMove(event, delta) {\n * // we are dragging (!!)\n * }\n *\n * domElement.addEventListener('dragstart', dragger(dragMove));\n *\n * @param {Function} fn\n * @param {Element} [dragPreview]\n *\n * @return {Function} drag start callback function\n */\nexport function createDragger(fn, dragPreview) {\n\n let self;\n\n let startX, startY;\n\n /** drag start */\n function onDragStart(event) {\n\n self = this;\n\n startX = event.clientX;\n startY = event.clientY;\n\n // (1) prevent preview image\n if (event.dataTransfer) {\n event.dataTransfer.setDragImage(dragPreview || emptyCanvas(), 0, 0);\n }\n\n // (2) setup drag listeners\n\n // attach drag + cleanup event\n // we need to do this to make sure we track cursor\n // movements before we reach other drag event handlers,\n // e.g. in child containers.\n document.addEventListener('dragover', onDrag, true);\n document.addEventListener('dragenter', preventDefault, true);\n\n document.addEventListener('dragend', onEnd);\n document.addEventListener('drop', preventDefault);\n }\n\n function onDrag(event) {\n const delta = {\n x: event.clientX - startX,\n y: event.clientY - startY\n };\n\n // call provided fn with event, delta\n return fn.call(self, event, delta);\n }\n\n function onEnd() {\n document.removeEventListener('dragover', onDrag, true);\n document.removeEventListener('dragenter', preventDefault, true);\n\n document.removeEventListener('dragend', onEnd);\n document.removeEventListener('drop', preventDefault);\n }\n\n return onDragStart;\n}\n\nfunction preventDefault(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n\nfunction emptyCanvas() {\n return domify('<canvas width=\"0\" height=\"0\" />');\n}","import { forwardRef } from 'preact/compat';\n\nimport { useEffect, useRef } from 'preact/hooks';\n\nimport classNames from 'classnames';\n\nimport * as focusTrap from 'focus-trap';\n\nimport { DragIcon, CloseIcon } from '../../../components/icons';\n\nimport { createDragger } from '../../../components/util/dragger';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\nconst noop = () => {};\n\n/**\n * A generic popup component.\n *\n * @param {Object} props\n * @param {string} [props.className]\n * @param {boolean} [props.delayInitialFocus]\n * @param {{top: number, left: number}} [props.position]\n * @param {number} [props.width]\n * @param {number} [props.height]\n * @param {Function} props.onClose\n * @param {Function} [props.onPostActivate]\n * @param {Function} [props.onPostDeactivate]\n * @param {boolean} [props.returnFocus]\n * @param {boolean} [props.closeOnEscape]\n * @param {string} props.title\n * @param {Ref} [ref]\n */\nfunction PopupComponent(props, globalRef) {\n const {\n className,\n delayInitialFocus,\n position,\n width,\n height,\n onClose,\n onPostActivate = noop,\n onPostDeactivate = noop,\n returnFocus = true,\n closeOnEscape = true,\n title\n } = props;\n\n const focusTrapRef = useRef(null);\n const localRef = useRef(null);\n const popupRef = globalRef || localRef;\n\n const handleKeydown = (event) => {\n\n // do not allow keyboard events to bubble\n event.stopPropagation();\n\n if (closeOnEscape && event.key === 'Escape') {\n onClose();\n }\n };\n\n // re-activate focus trap on focus\n const handleFocus = () => {\n if (focusTrapRef.current) {\n focusTrapRef.current.activate();\n }\n };\n\n let style = {};\n\n if (position) {\n style = {\n ...style,\n top: position.top + 'px',\n left: position.left + 'px',\n };\n }\n\n if (width) {\n style.width = width + 'px';\n }\n\n if (height) {\n style.height = height + 'px';\n }\n\n useEffect(() => {\n if (popupRef.current) {\n popupRef.current.addEventListener('focusin', handleFocus);\n }\n\n return () => {\n if (popupRef.current) {\n popupRef.current.removeEventListener('focusin', handleFocus);\n }\n };\n }, [ popupRef ]);\n\n useEffect(() => {\n if (popupRef.current) {\n focusTrapRef.current = focusTrap.createFocusTrap(popupRef.current, {\n clickOutsideDeactivates: true,\n delayInitialFocus,\n fallbackFocus: popupRef.current,\n onPostActivate,\n onPostDeactivate,\n returnFocusOnDeactivate: returnFocus,\n });\n\n focusTrapRef.current.activate();\n }\n\n return () => focusTrapRef.current && focusTrapRef.current.deactivate();\n }, [ popupRef ]);\n\n return (\n <div\n aria-label={ title }\n tabIndex={ -1 }\n ref={ popupRef }\n onKeyDown={ handleKeydown }\n role=\"dialog\"\n class={ classNames('bio-properties-panel-popup', className) }\n style={ style }\n >\n {props.children}\n </div>\n );\n}\n\nexport const Popup = forwardRef(PopupComponent);\n\nPopup.Title = Title;\nPopup.Body = Body;\nPopup.Footer = Footer;\n\nfunction Title(props) {\n const {\n children,\n className,\n draggable,\n eventBus,\n title,\n showCloseButton = false,\n closeButtonTooltip = 'Close popup',\n onClose,\n ...rest\n } = props;\n\n // we can't use state as we need to\n // manipulate this inside dragging events\n const context = useRef({\n startPosition: null,\n newPosition: null,\n });\n\n const dragPreviewRef = useRef();\n\n const titleRef = useRef();\n\n const onMove = (event, delta) => {\n cancel(event);\n\n const { x: dx, y: dy } = delta;\n\n const newPosition = {\n x: context.current.startPosition.x + dx,\n y: context.current.startPosition.y + dy,\n };\n\n const popupParent = getPopupParent(titleRef.current);\n\n popupParent.style.top = newPosition.y + 'px';\n popupParent.style.left = newPosition.x + 'px';\n\n eventBus?.fire('feelPopup.dragover', { newPosition, delta });\n };\n\n const onMoveStart = (event) => {\n\n // initialize drag handler\n const onDragStart = createDragger(onMove, dragPreviewRef.current);\n onDragStart(event);\n\n event.stopPropagation();\n\n const popupParent = getPopupParent(titleRef.current);\n\n const bounds = popupParent.getBoundingClientRect();\n context.current.startPosition = {\n x: bounds.left,\n y: bounds.top,\n };\n\n eventBus?.fire('feelPopup.dragstart');\n };\n\n const onMoveEnd = () => {\n context.current.newPosition = null;\n\n eventBus?.fire('feelPopup.dragend');\n };\n\n return (\n <div\n class={ classNames(\n 'bio-properties-panel-popup__header',\n draggable && 'draggable',\n className\n ) }\n ref={ titleRef }\n draggable={ draggable }\n onDragStart={ onMoveStart }\n onDragEnd={ onMoveEnd }\n { ...rest }\n >\n {draggable && (\n <>\n <div\n ref={ dragPreviewRef }\n class=\"bio-properties-panel-popup__drag-preview\"\n ></div>\n <div class=\"bio-properties-panel-popup__drag-handle\">\n <DragIcon />\n </div>\n </>\n )}\n <div class=\"bio-properties-panel-popup__title\">{title}</div>\n {children}\n {showCloseButton && (\n <button\n title={ closeButtonTooltip }\n class=\"bio-properties-panel-popup__close\"\n onClick={ onClose }\n >\n <CloseIcon />\n </button>\n )}\n </div>\n );\n}\n\nfunction Body(props) {\n const { children, className, ...rest } = props;\n\n return (\n <div\n class={ classNames('bio-properties-panel-popup__body', className) }\n { ...rest }\n >\n {children}\n </div>\n );\n}\n\nfunction Footer(props) {\n const { children, className, ...rest } = props;\n\n return (\n <div\n class={ classNames('bio-properties-panel-popup__footer', className) }\n { ...rest }\n >\n {props.children}\n </div>\n );\n}\n\n// helpers //////////////////////\n\nfunction getPopupParent(node) {\n return node.closest('.bio-properties-panel-popup');\n}\n\nfunction cancel(event) {\n event.preventDefault();\n event.stopPropagation();\n}\n","import { useEffect, useRef } from 'preact/hooks';\nimport ExpressionEditor from '../../../components/entries/expression/ExpressionEditor';\nimport TemplatingEditor from '../../../components/entries/templating/TemplatingEditor';\nimport { LaunchIcon } from '../../../components/icons';\nimport { Popup } from './Popup';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n/**\n * @typedef {Object} ExpressionPopupProps\n * @property {string} entryId\n * @property {Function} onInput\n * @property {Function} onClose\n * @property {string} title\n * @property {'feel'|'feelers'} type\n * @property {string} value\n * @property {Array} [links]\n * @property {Array|Object} [variables]\n * @property {Object} [position]\n * @property {string} [hostLanguage]\n * @property {boolean} [singleLine]\n * @property {HTMLElement} [sourceElement]\n * @property {HTMLElement|string} [tooltipContainer]\n * @property {Object} [eventBus]\n */\n\nexport const FEEL_POPUP_WIDTH = 700;\nexport const FEEL_POPUP_HEIGHT = 250;\n\n/**\n * Expression editor popup component\n * @param {ExpressionPopupProps} props\n */\nexport function ExpressionPopup(props) {\n const {\n entryId,\n onInput,\n onClose,\n title,\n type,\n value,\n links,\n variables,\n position,\n hostLanguage,\n singleLine,\n sourceElement,\n tooltipContainer,\n eventBus,\n feelLanguageContext,\n } = props;\n\n const editorRef = useRef();\n const popupRef = useRef();\n\n const isAutoCompletionOpen = useRef(false);\n\n const handleSetReturnFocus = () => {\n sourceElement && sourceElement.focus();\n };\n\n const onKeyDownCapture = (event) => {\n\n // we use capture here to make sure we handle the event before the editor does\n if (event.key === 'Escape') {\n isAutoCompletionOpen.current = autoCompletionOpen(event.target);\n }\n };\n\n const onKeyDown = (event) => {\n if (event.key === 'Escape') {\n\n // close popup only if auto completion is not open\n if (!isAutoCompletionOpen.current) {\n onClose();\n isAutoCompletionOpen.current = false;\n }\n }\n };\n\n useEffect(() => {\n\n // set focus on editor when popup is opened\n if (editorRef.current) {\n editorRef.current.focus();\n }\n }, [ editorRef ]);\n\n return (\n <Popup\n className=\"bio-properties-panel-feel-popup\"\n position={ position }\n title={ title }\n returnFocus={ false }\n closeOnEscape={ false }\n delayInitialFocus={ false }\n onPostDeactivate={ handleSetReturnFocus }\n height={ FEEL_POPUP_HEIGHT }\n width={ FEEL_POPUP_WIDTH }\n ref={ popupRef }\n >\n <Popup.Title\n title={ title }\n eventBus={ eventBus }\n showCloseButton={ true }\n closeButtonTooltip=\"Save and close\"\n onClose={ onClose }\n draggable\n >\n <>\n {(links || []).map((link, index) => {\n return (\n <a\n key={ index }\n rel=\"noreferrer\"\n href={ link.href }\n target=\"_blank\"\n class=\"bio-properties-panel-feel-popup__title-link\"\n >\n {link.title}\n <LaunchIcon />\n </a>\n );\n })}\n </>\n </Popup.Title>\n <Popup.Body>\n <div\n onKeyDownCapture={ onKeyDownCapture }\n onKeyDown={ onKeyDown }\n class=\"bio-properties-panel-feel-popup__body\"\n >\n {type === 'feel' && (\n <ExpressionEditor\n enableGutters={ true }\n id={ prefixId(entryId) }\n name={ entryId }\n onInput={ onInput }\n value={ value }\n variables={ variables }\n feelLanguageContext={ feelLanguageContext }\n ref={ editorRef }\n tooltipContainer={ tooltipContainer }\n />\n )}\n\n {type === 'feelers' && (\n <TemplatingEditor\n id={ prefixId(entryId) }\n contentAttributes={ { 'aria-label': title } }\n enableGutters={ true }\n hostLanguage={ hostLanguage }\n name={ entryId }\n onInput={ onInput }\n value={ value }\n ref={ editorRef }\n singleLine={ singleLine }\n tooltipContainer={ tooltipContainer }\n />\n )}\n </div>\n </Popup.Body>\n </Popup>\n );\n}\n\nfunction prefixId(id) {\n return `bio-properties-panel-${id}`;\n}\n\nfunction autoCompletionOpen(element) {\n const editor = element.closest('.cm-editor');\n return editor ? editor.querySelector('.cm-tooltip-autocomplete') : null;\n}\n","import { FEEL_POPUP_WIDTH, FEEL_POPUP_HEIGHT } from './ExpressionPopup';\n\nexport function getPopupTitle({ element, label }) {\n let popupTitle = '';\n\n if (element && element.type) {\n popupTitle = `${element.type} / `;\n }\n\n return `${popupTitle}${label}`;\n}\n\nexport function getPopupPosition() {\n const viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n\n return {\n left: Math.max(0, (viewportWidth - FEEL_POPUP_WIDTH) / 2),\n top: Math.max(0, (viewportHeight - FEEL_POPUP_HEIGHT) / 2)\n };\n}\n","import { getPopupPosition, getPopupTitle } from './components/helpers';\n\n/**\n * FEEL popup component, built as a singleton.\n *\n * In order to implement a custom replacement, handle the following events:\n * - `propertiesPanel.openPopup`\n * - `propertiesPanel.closePopup`\n * - `propertiesPanel.detach`\n *\n * Within the custom renderer, make sure to emit the following events:\n * - `feelPopup.open` - fired before the popup is mounted\n * - `feelPopup.opened` - fired after the popup is mounted. Event context contains the DOM node of the popup as `domNode`\n * - `feelPopup.close` - fired before the popup is unmounted. Event context contains the DOM node of the popup as `domNode`\n * - `feelPopup.closed` - fired after the popup is unmounted\n */\nexport class ExpressionPopup {\n constructor(eventBus, config = {}) {\n this._eventBus = eventBus;\n this._config = config;\n\n this._isOpen = false;\n\n eventBus.on('propertiesPanel.openPopup', (_, context) => {\n this.open(context.entryId, context, context.sourceElement);\n\n // return true to indicate that popup was opened\n return true;\n });\n\n eventBus.on([\n 'propertiesPanel.closePopup',\n 'propertiesPanel.detach'\n ], () => {\n this.close();\n });\n }\n\n /**\n * Check if the FEEL popup is open.\n * @return {Boolean}\n */\n isOpen() {\n return this._isOpen;\n }\n\n /**\n * Open the FEEL popup.\n *\n * @param {String} entryId\n * @param {Object} popupConfig\n * @param {HTMLElement} sourceElement\n */\n open(entryId, popupConfig, sourceElement) {\n\n // close before opening a new one\n this.close();\n\n this._openPopup({\n ...popupConfig,\n entryId,\n sourceElement\n });\n }\n\n /**\n * Close the FEEL popup.\n */\n close() {\n this._closePopup();\n }\n\n _openPopup(context) {\n const {\n element,\n label,\n sourceElement,\n type\n } = context;\n\n this._isOpen = true;\n\n this._eventBus.fire('propertiesPanelPopup.open', {\n container: this._config.feelPopupContainer,\n config: {\n ...context,\n links: this._config.getFeelPopupLinks?.(type) || [],\n onClose: () => {\n this._closePopup();\n\n // setTimeout to ensure the focus happens after the DOM updates make it focusable\n setTimeout(() => {\n sourceElement && sourceElement.focus();\n }, 0);\n },\n position: getPopupPosition(),\n title: getPopupTitle({ element, label })\n }\n });\n }\n\n _closePopup() {\n if (this._isOpen) {\n this._isOpen = false;\n\n this._eventBus.fire('propertiesPanelPopup.close');\n }\n }\n}\n\nExpressionPopup.$inject = [ 'eventBus', 'config.propertiesPanel' ];\n","import { render } from 'preact';\nimport { ExpressionPopup } from './components';\nimport { query as domQuery } from 'min-dom';\nimport { isString } from 'min-dash';\n\n{ /* Required to break up imports, see https://github.com/babel/babel/issues/15156 */ }\n\n\nexport class ExpressionPopupRenderer {\n constructor(eventBus) {\n this._eventBus = eventBus;\n\n this._container = null;\n this._element = null;\n\n eventBus.on('propertiesPanelPopup.open', (context) => {\n this._renderPopup(context);\n });\n\n eventBus.on('propertiesPanelPopup.close', () => {\n this._removePopup();\n });\n }\n\n _renderPopup(context) {\n let { container, config } = context;\n\n container = this._container = getContainer(container) || document.body;\n\n const element = this._element = createElement();\n\n container.appendChild(element);\n\n // TODO(philippfromme): there is no useService in this context, so we need\n // to pass the event bus as a prop or create a context provider, however,\n // a custom renderer would have to use that context provider as well to have\n // access to the event bus and other services\n this._emit('feelPopup.open');\n\n render(\n <ExpressionPopup { ...config } eventBus={ this._eventBus } />,\n element\n );\n\n this._emit('feelPopup.opened', {\n domNode: element\n });\n }\n\n _removePopup() {\n if (!this._container) {\n return;\n }\n\n this._emit('feelPopup.close', {\n domNode: this._element\n });\n\n render(null, this._element);\n\n this._container.removeChild(this._element);\n\n this._container = null;\n\n this._emit('feelPopup.closed');\n }\n\n _emit(event, context) {\n this._eventBus.fire(event, context);\n }\n}\n\nExpressionPopupRenderer.$inject = [ 'eventBus' ];\n\n// helpers /////////////////\n\nfunction createElement() {\n const element = document.createElement('div');\n\n element.classList.add('bio-properties-panel-popup-container');\n\n return element;\n}\n\nfunction getContainer(container) {\n if (isString(container)) {\n return domQuery(container);\n }\n\n return container;\n}\n","import { ExpressionPopup } from './ExpressionPopup';\nimport { ExpressionPopupRenderer } from './ExpressionPopupRenderer';\n\nexport default {\n __init__: [ 'expressionPopup', 'expressionPopupRenderer' ],\n expressionPopup: [ 'type', ExpressionPopup ],\n expressionPopupRenderer: [ 'type', ExpressionPopupRenderer ],\n};\n"],"names":["ArrowIcon","_jsx","CloseIcon","CreateIcon","DeleteIcon","DragIcon","ExternalLinkIcon","FeelIcon","LaunchIcon","_jsxs","OpenPopupIcon","PropertiesPanelContext","domQuery","id","isEdited","Tooltip","_createElement","element","errors","open","index","noop","prefixId","Checkbox","debounce","placeholder","cmPlaceholder","view","useBufferedFocus","editor","ExpressionEditor","classNames","FeelIconSvg","useDebounce","value","idx","_debounce","_Fragment","ExpressionPopup"],"mappings":"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"}