MCPcopy Index your code
hub / github.com/bpmn-io/bpmn-js-properties-panel

github.com/bpmn-io/bpmn-js-properties-panel @v6.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v6.0.1 ↗ · + Follow
1,425 symbols 5,373 edges 271 files 79 documented · 6% 2 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

bpmn-js-properties-panel

CI

A properties panel extension for bpmn-js that adds the ability to edit technical properties (generic and Camunda).

bpmn-js-properties-panel screenshot

Features

The properties panel allows users to edit invisible BPMN properties in a convenient way.

Some of the features are:

  • Edit element ids, multi-instance details and more
  • Edit execution related Camunda 7 and Camunda 8 properties
  • Redo and undo (plugs into the bpmn-js editing cycle)

Usage

Provide two HTML elements, one for the properties panel and one for the BPMN diagram:

















Bootstrap bpmn-js with the properties panel and a properties provider:

import BpmnModeler from 'bpmn-js/lib/Modeler';
import {
  BpmnPropertiesPanelModule,
  BpmnPropertiesProviderModule,
} from 'bpmn-js-properties-panel';

const modeler = new BpmnModeler({
  container: '#canvas',
  propertiesPanel: {
    parent: '#properties'
  },
  additionalModules: [
    BpmnPropertiesPanelModule,
    BpmnPropertiesProviderModule
  ]
});

Styling

For proper styling include the necessary stylesheets:

<link rel="stylesheet" href="https://unpkg.com/@bpmn-io/properties-panel/dist/assets/properties-panel.css">

Dynamic Attach/Detach

You may attach or detach the properties panel dynamically to any element on the page, too:

const propertiesPanel = bpmnJS.get('propertiesPanel');

// detach the panel
propertiesPanel.detach();

// attach it to some other element
propertiesPanel.attachTo('#other-properties');

Edit Camunda Properties

To edit Camunda properties, you have to use a moddle extension so bpmn-js is can read and write Camunda properties and use a provider so these properties are shown in the properties panel.

For example, to edit Camunda 8 properties, use the Camunda 8 moddle extension and the Camunda 8 provider. Additionally, you should use behaviors specific to Camunda 8 to ensure parts of the model that are specific to Camunda 8 are maintained correctly.

import BpmnModeler from 'bpmn-js/lib/Modeler';
import {
  BpmnPropertiesPanelModule,
  BpmnPropertiesProviderModule,
  ZeebePropertiesProviderModule // Camunda 8 provider
} from 'bpmn-js-properties-panel';

// Camunda 8 moddle extension
import zeebeModdle from 'zeebe-bpmn-moddle/resources/zeebe';

// Camunda 8 behaviors
import ZeebeBehaviorsModule from 'camunda-bpmn-js-behaviors/lib/camunda-cloud';

const modeler = new BpmnModeler({
  container: '#canvas',
  propertiesPanel: {
    parent: '#properties'
  },
  additionalModules: [
    BpmnPropertiesPanelModule,
    BpmnPropertiesProviderModule,
    ZeebePropertiesProviderModule,
    ZeebeBehaviorsModule
  ],
  moddleExtensions: {
    zeebe: zeebeModdle
  }
});

API

BpmnPropertiesPanelRenderer#attachTo(container: HTMLElement) => void

Attach the properties panel to a parent node.

const propertiesPanel = modeler.get('propertiesPanel');

propertiesPanel.attachTo('#other-properties');

BpmnPropertiesPanelRenderer#detach() => void

Detach the properties panel from its parent node.

const propertiesPanel = modeler.get('propertiesPanel');

propertiesPanel.detach();

BpmnPropertiesPanelRenderer#registerProvider(priority: Number, provider: PropertiesProvider) => void

Register a new properties provider to the properties panel.

class ExamplePropertiesProvider {
  constructor(propertiesPanel) {
    propertiesPanel.registerProvider(500, this);
  }

  getGroups(element) {
    return (groups) => {

      // add, modify or remove groups
      // ...

      return groups;
    };
  }
}

ExamplePropertiesProvider.$inject = [ 'propertiesPanel' ];

Additional Resources

Development

Prepare the project by installing all dependencies:

npm install

Then, depending on your use-case, you may run any of the following commands:

# build the library and run all tests
npm run all

# spin up a single local modeler instance
npm start

# run the full development setup
npm run dev

License

MIT

Core symbols most depended-on inside this repo

get
called by 3428
test/spec/mocks/index.js
changeInput
called by 655
test/TestHelper.js
useService
called by 649
src/hooks/useService.js
getExtensionElementsList
called by 167
src/utils/ExtensionElementsUtil.js
bootstrapPropertiesPanel
called by 139
test/TestHelper.js
createElement
called by 110
src/utils/ElementUtil.js
clickInput
called by 103
test/TestHelper.js
getServiceTaskLikeBusinessObject
called by 87
src/provider/camunda-platform/utils/ImplementationTypeUtils.js

Shape

Function 1,365
Method 35
Class 25

Languages

TypeScript100%

Modules by API surface

src/provider/camunda-platform/CamundaPlatformPropertiesProvider.js43 symbols
src/provider/zeebe/ZeebePropertiesProvider.js42 symbols
src/utils/EventDefinitionUtil.js22 symbols
src/provider/zeebe/properties/FormProps.js22 symbols
src/provider/bpmn/utils/EventDefinitionUtil.js21 symbols
test/spec/mocks/index.js19 symbols
src/provider/camunda-platform/properties/MultiInstanceProps.js19 symbols
test/spec/extension/ExamplePropertiesProvider.js16 symbols
src/provider/camunda-platform/properties/ListenerProps.js16 symbols
src/provider/camunda-platform/properties/FormField.js16 symbols
src/provider/bpmn/BpmnPropertiesProvider.js16 symbols
test/TestHelper.js15 symbols

Used by 2 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add bpmn-js-properties-panel \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page