@bpmnkit/plugins 0.0.13 → 0.0.14

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,4 +1,4 @@
1
1
  export declare const CONFIG_PANEL_STYLE_ID = "bpmnkit-config-panel-styles-v1";
2
- export declare const CONFIG_PANEL_CSS = "\n/* \u2500\u2500 Inspector panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/*\n * top: 36px matches the height of the .bpmnkit-tabs bar from canvas-plugin-tabs,\n * so the inspector panel does not overlap the tab bar.\n */\n.bpmnkit-cfg-full {\n position: fixed;\n right: 0;\n top: 36px;\n bottom: 0;\n width: 320px;\n background: var(--bpmnkit-panel-bg, rgba(13,13,22,0.92));\n backdrop-filter: blur(16px);\n border-left: 1px solid var(--bpmnkit-panel-border, rgba(255,255,255,0.08));\n box-shadow: -8px 0 40px rgba(0,0,0,0.6);\n display: flex;\n flex-direction: column;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 13px;\n color: rgba(255,255,255,0.85);\n z-index: 9999;\n transition: width 0.2s ease;\n}\n.bpmnkit-cfg-full--collapsed {\n width: 40px;\n}\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-info,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-close,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-docs-link,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-search-bar,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-guide-bar,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-tabs-area,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-body,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-search-results {\n display: none;\n}\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-header {\n justify-content: center;\n padding: 14px 0;\n}\n\n/* Hosted mode \u2014 renders inside a dock pane instead of as a fixed overlay */\n.bpmnkit-cfg-full--hosted {\n position: static !important;\n width: auto !important;\n top: auto; right: auto; bottom: auto;\n box-shadow: none; border-left: none; backdrop-filter: none;\n flex: 1; min-height: 0;\n}\n/* suppress controls that the dock replaces */\n.bpmnkit-cfg-full--hosted .bpmnkit-cfg-resize-handle,\n.bpmnkit-cfg-full--hosted .bpmnkit-cfg-collapse-btn { display: none; }\n\n/* Resize handle \u2014 a thin grab zone along the left edge */\n.bpmnkit-cfg-resize-handle {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n cursor: ew-resize;\n z-index: 1;\n}\n.bpmnkit-cfg-resize-handle:hover {\n background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-full-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 14px 10px;\n border-bottom: 1px solid rgba(255,255,255,0.08);\n flex-shrink: 0;\n}\n.bpmnkit-cfg-full-info {\n flex: 1;\n min-width: 0;\n}\n.bpmnkit-cfg-full-type {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: rgba(255,255,255,0.35);\n margin-bottom: 2px;\n}\n.bpmnkit-cfg-full-template {\n font-size: 11px;\n font-weight: 600;\n color: var(--bpmnkit-accent, #6b9df7);\n margin-bottom: 1px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.bpmnkit-cfg-full-name {\n font-size: 14px;\n font-weight: 600;\n color: #fff;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* Docs link \u2014 ? button shown when the schema has a documentationRef */\n.bpmnkit-cfg-docs-link {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n border: 1px solid rgba(255,255,255,0.2);\n color: rgba(255,255,255,0.45);\n font-size: 11px;\n font-weight: 700;\n text-decoration: none;\n flex-shrink: 0;\n transition: border-color 0.1s, color 0.1s, background 0.1s;\n}\n.bpmnkit-cfg-docs-link:hover {\n color: var(--bpmnkit-accent, #6b9df7);\n border-color: var(--bpmnkit-accent, #6b9df7);\n background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n}\n.bpmnkit-cfg-collapse-btn {\n width: 28px;\n height: 28px;\n background: none;\n border: none;\n color: rgba(255,255,255,0.4);\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-size: 18px;\n line-height: 1;\n flex-shrink: 0;\n transition: background 0.1s, color 0.1s;\n}\n.bpmnkit-cfg-collapse-btn:hover { background: rgba(255,255,255,0.08); color: #fff; }\n.bpmnkit-cfg-full-close {\n width: 28px;\n height: 28px;\n background: none;\n border: none;\n color: rgba(255,255,255,0.4);\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-size: 20px;\n line-height: 1;\n flex-shrink: 0;\n transition: background 0.1s, color 0.1s;\n}\n.bpmnkit-cfg-full-close:hover { background: rgba(255,255,255,0.08); color: #fff; }\n\n/* \u2500\u2500 Search bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-search-bar {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n flex-shrink: 0;\n}\n.bpmnkit-cfg-search-input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n background: rgba(255,255,255,0.07);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 5px;\n color: rgba(255,255,255,0.85);\n font-size: 12px;\n font-family: system-ui, -apple-system, sans-serif;\n outline: none;\n transition: border-color 0.15s, background 0.15s;\n box-sizing: border-box;\n}\n.bpmnkit-cfg-search-input::placeholder { color: rgba(255,255,255,0.28); }\n.bpmnkit-cfg-search-input:focus {\n border-color: var(--bpmnkit-accent, #6b9df7);\n background: rgba(255,255,255,0.1);\n}\n.bpmnkit-cfg-search-clear {\n width: 22px;\n height: 22px;\n background: none;\n border: none;\n color: rgba(255,255,255,0.35);\n cursor: pointer;\n padding: 0;\n /* display toggled via JS */\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n font-size: 14px;\n flex-shrink: 0;\n transition: color 0.1s, background 0.1s;\n}\n.bpmnkit-cfg-search-clear:hover { color: #fff; background: rgba(255,255,255,0.08); }\n\n/* \u2500\u2500 Guide bar (field assistant) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-guide-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 7px 14px;\n background: rgba(248, 113, 113, 0.09);\n border-bottom: 1px solid rgba(248, 113, 113, 0.18);\n flex-shrink: 0;\n}\n.bpmnkit-cfg-guide-info {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n.bpmnkit-cfg-guide-icon {\n width: 16px;\n height: 16px;\n background: var(--bpmnkit-danger, #f87171);\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 800;\n color: #fff;\n flex-shrink: 0;\n line-height: 1;\n}\n.bpmnkit-cfg-guide-text {\n font-size: 11px;\n font-weight: 500;\n color: rgba(248, 113, 113, 0.9);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.bpmnkit-cfg-guide-btn {\n flex-shrink: 0;\n padding: 3px 10px;\n border-radius: 4px;\n border: 1px solid rgba(248, 113, 113, 0.4);\n background: rgba(248, 113, 113, 0.12);\n color: var(--bpmnkit-danger, #f87171);\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.1s, border-color 0.1s;\n white-space: nowrap;\n}\n.bpmnkit-cfg-guide-btn:hover {\n background: rgba(248, 113, 113, 0.22);\n border-color: rgba(248, 113, 113, 0.6);\n}\n\n/* \u2500\u2500 Search results \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-search-results {\n flex: 1;\n overflow-y: auto;\n padding: 4px 22px 32px;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,0.15) transparent;\n}\n.bpmnkit-cfg-search-group-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: rgba(255,255,255,0.3);\n margin: 16px 0 10px;\n padding-bottom: 5px;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n}\n.bpmnkit-cfg-search-group-label:first-child { margin-top: 10px; }\n.bpmnkit-cfg-search-empty {\n font-size: 12px;\n color: rgba(255,255,255,0.3);\n text-align: center;\n padding: 28px 0;\n}\n\n/* \u2500\u2500 Tabs area (wrapper + scroll buttons) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-tabs-area {\n display: flex;\n align-items: stretch;\n border-bottom: 1px solid rgba(255,255,255,0.08);\n flex-shrink: 0;\n overflow: hidden;\n}\n.bpmnkit-cfg-tabs {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: flex-end;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.bpmnkit-cfg-tabs::-webkit-scrollbar { display: none; }\n.bpmnkit-cfg-tab-btn {\n padding: 10px 14px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n color: rgba(255,255,255,0.4);\n cursor: pointer;\n font-size: 12px;\n font-weight: 500;\n white-space: nowrap;\n transition: color 0.1s, border-color 0.1s;\n margin-bottom: -1px;\n flex-shrink: 0;\n}\n.bpmnkit-cfg-tab-btn:hover { color: rgba(255,255,255,0.75); }\n.bpmnkit-cfg-tab-btn.active { color: var(--bpmnkit-accent, #6b9df7); border-bottom-color: var(--bpmnkit-accent, #6b9df7); }\n/* Red dot shown after tab label when the group has required-empty fields */\n.bpmnkit-cfg-tab-btn.has-error::after {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--bpmnkit-danger, #f87171);\n margin-left: 5px;\n vertical-align: middle;\n flex-shrink: 0;\n}\n\n/* Arrow buttons for overflowing tabs */\n.bpmnkit-cfg-tabs-scroll-btn {\n flex-shrink: 0;\n width: 26px;\n background: none;\n border: none;\n border-radius: 0;\n color: rgba(255,255,255,0.5);\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 0;\n /* display toggled via JS */\n align-items: center;\n justify-content: center;\n transition: background 0.1s, color 0.1s;\n}\n.bpmnkit-cfg-tabs-scroll-btn:hover { color: #fff; background: rgba(255,255,255,0.08); }\n.bpmnkit-cfg-tabs-scroll-btn--prev { border-right: 1px solid rgba(255,255,255,0.06); }\n.bpmnkit-cfg-tabs-scroll-btn--next { border-left: 1px solid rgba(255,255,255,0.06); }\n\n/* \u2500\u2500 Scrollable body \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-full-body {\n flex: 1;\n overflow-y: auto;\n padding: 22px 22px 32px;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,0.15) transparent;\n}\n\n/* \u2500\u2500 Groups & Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-group-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: rgba(255,255,255,0.3);\n margin-bottom: 14px;\n padding-bottom: 6px;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n}\n.bpmnkit-cfg-field {\n margin-bottom: 14px;\n}\n.bpmnkit-cfg-field-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n color: rgba(255,255,255,0.55);\n margin-bottom: 5px;\n cursor: default;\n}\n.bpmnkit-cfg-field-label[title] { cursor: help; }\n.bpmnkit-cfg-field-docs {\n font-size: 10px;\n color: var(--bpmnkit-accent, #6b9df7);\n text-decoration: none;\n opacity: 0.7;\n transition: opacity 0.1s;\n}\n.bpmnkit-cfg-field-docs:hover { opacity: 1; }\n.bpmnkit-cfg-required-star {\n color: var(--bpmnkit-danger, #f87171);\n font-weight: 700;\n margin-left: 2px;\n}\n.bpmnkit-cfg-field--invalid {\n border-left: 2px solid var(--bpmnkit-danger, #f87171);\n padding-left: 8px;\n}\n.bpmnkit-cfg-field--invalid .bpmnkit-cfg-input,\n.bpmnkit-cfg-field--invalid .bpmnkit-cfg-select,\n.bpmnkit-cfg-field--invalid .bpmnkit-cfg-textarea {\n border-color: var(--bpmnkit-danger, #f87171);\n}\n\n.bpmnkit-cfg-input,\n.bpmnkit-cfg-select,\n.bpmnkit-cfg-textarea {\n width: 100%;\n padding: 7px 10px;\n background: rgba(255,255,255,0.06);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n color: rgba(255,255,255,0.9);\n font-size: 12px;\n font-family: system-ui, -apple-system, sans-serif;\n outline: none;\n transition: border-color 0.15s, background 0.15s;\n box-sizing: border-box;\n}\n.bpmnkit-cfg-input:focus,\n.bpmnkit-cfg-select:focus,\n.bpmnkit-cfg-textarea:focus {\n border-color: var(--bpmnkit-accent, #6b9df7);\n background-color: rgba(255,255,255,0.09);\n}\n.bpmnkit-cfg-select {\n appearance: none;\n cursor: pointer;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(255,255,255,0.4)' stroke-width='1.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 28px;\n}\n.bpmnkit-cfg-textarea {\n resize: vertical;\n min-height: 68px;\n line-height: 1.5;\n font-family: var(--bpmnkit-font-mono, ui-monospace, \"SF Mono\", monospace);\n font-size: 11px;\n}\n.bpmnkit-cfg-field-hint {\n font-size: 11px;\n color: rgba(255,255,255,0.3);\n margin-top: 4px;\n line-height: 1.4;\n}\n\n/* \u2500\u2500 Field error message \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-field-error {\n font-size: 11px;\n color: var(--bpmnkit-danger, #f87171);\n margin-top: 3px;\n line-height: 1.3;\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-field-error { color: var(--bpmnkit-danger, #dc2626); }\n\n/* \u2500\u2500 FEEL expression field \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* FEEL/string mode toggle \u2014 appears at the right end of a feel-expression label row */\n.bpmnkit-cfg-feel-mode-btn {\n margin-left: auto;\n flex-shrink: 0;\n padding: 1px 6px;\n border-radius: 3px;\n border: 1px solid rgba(255,255,255,0.12);\n background: none;\n color: rgba(255,255,255,0.3);\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n cursor: pointer;\n transition: background 0.1s, color 0.1s, border-color 0.1s;\n}\n.bpmnkit-cfg-feel-mode-btn:hover {\n background: rgba(255,255,255,0.06);\n color: rgba(255,255,255,0.55);\n}\n.bpmnkit-cfg-feel-mode-btn--active {\n border-color: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n color: var(--bpmnkit-accent, #6b9df7);\n}\n.bpmnkit-cfg-feel-mode-btn--active:hover { background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15)); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn {\n border-color: rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.3);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn:hover {\n background: rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.55);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn--active {\n border-color: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12));\n background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12));\n color: var(--bpmnkit-accent, #1a56db);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn--active:hover { background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); }\n\n.bpmnkit-cfg-feel-ta {\n width: 100%;\n min-height: 68px;\n padding: 7px 10px;\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n font-size: 11px;\n font-family: var(--bpmnkit-font-mono, ui-monospace, \"SF Mono\", monospace);\n line-height: 1.5;\n resize: vertical;\n outline: none;\n transition: border-color 0.15s;\n box-sizing: border-box;\n}\n\n.bpmnkit-cfg-feel-playground-btn {\n display: inline-flex;\n margin-top: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n border: 1px solid rgba(255,255,255,0.12);\n background: none;\n color: var(--bpmnkit-accent, #6b9df7);\n font-size: 11px;\n cursor: pointer;\n transition: background 0.1s;\n}\n.bpmnkit-cfg-feel-playground-btn:hover { background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15)); }\n\n/* Light theme overrides */\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-playground-btn {\n border-color: rgba(0,0,0,0.12);\n color: var(--bpmnkit-accent, #1a56db);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-playground-btn:hover { background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); }\n\n/* \u2500\u2500 Toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-toggle-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.bpmnkit-cfg-toggle-label {\n font-size: 12px;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n}\n.bpmnkit-cfg-toggle-label[title] { cursor: help; }\n.bpmnkit-cfg-toggle {\n position: relative;\n display: inline-flex;\n width: 34px;\n height: 18px;\n flex-shrink: 0;\n cursor: pointer;\n}\n.bpmnkit-cfg-toggle input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n}\n.bpmnkit-cfg-toggle-track {\n position: absolute;\n inset: 0;\n background: rgba(255,255,255,0.15);\n border-radius: 9px;\n transition: background 0.2s;\n}\n.bpmnkit-cfg-toggle input:checked + .bpmnkit-cfg-toggle-track { background: var(--bpmnkit-accent, #6b9df7); }\n.bpmnkit-cfg-toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n background: #fff;\n border-radius: 50%;\n transition: transform 0.2s;\n pointer-events: none;\n}\n.bpmnkit-cfg-toggle input:checked ~ .bpmnkit-cfg-toggle-thumb { transform: translateX(16px); }\n\n/* \u2500\u2500 Action button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 4px;\n border: 1px solid rgba(255,255,255,0.15);\n background: rgba(255,255,255,0.07);\n color: rgba(255,255,255,0.85);\n font-size: 12px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.bpmnkit-cfg-action-btn:hover {\n background: rgba(255,255,255,0.13);\n border-color: rgba(255,255,255,0.25);\n}\n\n/* \u2500\u2500 Light theme overrides \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full {\n background: var(--bpmnkit-panel-bg, rgba(255,255,255,0.92));\n border-left-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));\n box-shadow: -8px 0 40px rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.85);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-header { border-bottom-color: rgba(0,0,0,0.07); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-type { color: rgba(0,0,0,0.35); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-template { color: var(--bpmnkit-accent, #1a56db); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-name { color: rgba(0,0,0,0.9); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-docs-link { color: rgba(0,0,0,0.4); border-color: rgba(0,0,0,0.2); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-docs-link:hover { color: var(--bpmnkit-accent, #1a56db); border-color: var(--bpmnkit-accent, #1a56db); background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-collapse-btn { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-collapse-btn:hover { background: rgba(0,0,0,0.06); color: rgba(0,0,0,0.9); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-close { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-close:hover { background: rgba(0,0,0,0.06); color: rgba(0,0,0,0.9); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-bar { border-bottom-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-input {\n background: rgba(0,0,0,0.04);\n border-color: rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.85);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-input::placeholder { color: rgba(0,0,0,0.3); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-clear { color: rgba(0,0,0,0.35); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-clear:hover { color: rgba(0,0,0,0.9); background: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-results { scrollbar-color: rgba(0,0,0,0.15) transparent; }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-group-label { color: rgba(0,0,0,0.35); border-bottom-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-empty { color: rgba(0,0,0,0.35); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-area { border-bottom-color: rgba(0,0,0,0.07); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tab-btn { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tab-btn:hover { color: rgba(0,0,0,0.7); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn:hover { color: rgba(0,0,0,0.9); background: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn--prev { border-right-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn--next { border-left-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-body { scrollbar-color: rgba(0,0,0,0.15) transparent; }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-group-label {\n color: rgba(0,0,0,0.35);\n border-bottom-color: rgba(0,0,0,0.06);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-field-label { color: rgba(0,0,0,0.55); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-field-hint { color: rgba(0,0,0,0.4); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-input,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-select,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-textarea {\n background-color: rgba(0,0,0,0.04);\n border-color: rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.85);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-input:focus,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-select:focus,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-textarea:focus {\n background-color: rgba(0,0,0,0.06);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-select {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(0,0,0,0.45)' stroke-width='1.5'/%3E%3C/svg%3E\");\n}\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-toggle-label { color: rgba(0,0,0,0.7); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-toggle-track { background: rgba(0,0,0,0.12); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-action-btn {\n border-color: rgba(0,0,0,0.15);\n background: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.75);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-action-btn:hover {\n background: rgba(0,0,0,0.08);\n border-color: rgba(0,0,0,0.2);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-resize-handle:hover {\n background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12));\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-bar {\n background: rgba(248, 113, 113, 0.06);\n border-bottom-color: rgba(248, 113, 113, 0.15);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-text { color: var(--bpmnkit-danger, #dc2626); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-btn {\n color: var(--bpmnkit-danger, #dc2626);\n border-color: rgba(220, 38, 38, 0.3);\n background: rgba(220, 38, 38, 0.07);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-btn:hover {\n background: rgba(220, 38, 38, 0.14);\n border-color: rgba(220, 38, 38, 0.5);\n}\n";
2
+ export declare const CONFIG_PANEL_CSS = "\n/* \u2500\u2500 Inspector panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/*\n * top: 36px matches the height of the .bpmnkit-tabs bar from canvas-plugin-tabs,\n * so the inspector panel does not overlap the tab bar.\n */\n.bpmnkit-cfg-full {\n position: fixed;\n right: 0;\n top: 36px;\n bottom: 0;\n width: 320px;\n background: var(--bpmnkit-panel-bg, rgba(13,13,22,0.92));\n backdrop-filter: blur(16px);\n border-left: 1px solid var(--bpmnkit-panel-border, rgba(255,255,255,0.08));\n box-shadow: -8px 0 40px rgba(0,0,0,0.6);\n display: flex;\n flex-direction: column;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 13px;\n color: rgba(255,255,255,0.85);\n z-index: 9999;\n transition: width 0.2s ease;\n}\n.bpmnkit-cfg-full--collapsed {\n width: 40px;\n}\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-info,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-close,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-docs-link,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-search-bar,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-guide-bar,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-tabs-area,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-body,\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-search-results {\n display: none;\n}\n.bpmnkit-cfg-full--collapsed .bpmnkit-cfg-full-header {\n justify-content: center;\n padding: 14px 0;\n}\n\n/* Hosted mode \u2014 renders inside a dock pane instead of as a fixed overlay */\n.bpmnkit-cfg-full--hosted {\n position: static !important;\n width: auto !important;\n top: auto; right: auto; bottom: auto;\n box-shadow: none; border-left: none; backdrop-filter: none;\n flex: 1; min-height: 0;\n}\n/* suppress controls that the dock replaces */\n.bpmnkit-cfg-full--hosted .bpmnkit-cfg-resize-handle,\n.bpmnkit-cfg-full--hosted .bpmnkit-cfg-collapse-btn { display: none; }\n\n/* Resize handle \u2014 a thin grab zone along the left edge */\n.bpmnkit-cfg-resize-handle {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n cursor: ew-resize;\n z-index: 1;\n}\n.bpmnkit-cfg-resize-handle:hover {\n background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-full-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 14px 10px;\n border-bottom: 1px solid rgba(255,255,255,0.08);\n flex-shrink: 0;\n}\n.bpmnkit-cfg-full-info {\n flex: 1;\n min-width: 0;\n}\n.bpmnkit-cfg-full-type {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: rgba(255,255,255,0.35);\n margin-bottom: 2px;\n}\n.bpmnkit-cfg-full-template {\n font-size: 11px;\n font-weight: 600;\n color: var(--bpmnkit-accent, #6b9df7);\n margin-bottom: 1px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.bpmnkit-cfg-full-name {\n font-size: 14px;\n font-weight: 600;\n color: #fff;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n/* Docs link \u2014 ? button shown when the schema has a documentationRef */\n.bpmnkit-cfg-docs-link {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n border: 1px solid rgba(255,255,255,0.2);\n color: rgba(255,255,255,0.45);\n font-size: 11px;\n font-weight: 700;\n text-decoration: none;\n flex-shrink: 0;\n transition: border-color 0.1s, color 0.1s, background 0.1s;\n}\n.bpmnkit-cfg-docs-link:hover {\n color: var(--bpmnkit-accent, #6b9df7);\n border-color: var(--bpmnkit-accent, #6b9df7);\n background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n}\n.bpmnkit-cfg-collapse-btn {\n width: 28px;\n height: 28px;\n background: none;\n border: none;\n color: rgba(255,255,255,0.4);\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-size: 18px;\n line-height: 1;\n flex-shrink: 0;\n transition: background 0.1s, color 0.1s;\n}\n.bpmnkit-cfg-collapse-btn:hover { background: rgba(255,255,255,0.08); color: #fff; }\n.bpmnkit-cfg-full-close {\n width: 28px;\n height: 28px;\n background: none;\n border: none;\n color: rgba(255,255,255,0.4);\n cursor: pointer;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n font-size: 20px;\n line-height: 1;\n flex-shrink: 0;\n transition: background 0.1s, color 0.1s;\n}\n.bpmnkit-cfg-full-close:hover { background: rgba(255,255,255,0.08); color: #fff; }\n\n/* \u2500\u2500 Search bar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-search-bar {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 8px 12px;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n flex-shrink: 0;\n}\n.bpmnkit-cfg-search-input {\n flex: 1;\n height: 28px;\n padding: 0 8px;\n background: rgba(255,255,255,0.07);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 5px;\n color: rgba(255,255,255,0.85);\n font-size: 12px;\n font-family: system-ui, -apple-system, sans-serif;\n outline: none;\n transition: border-color 0.15s, background 0.15s;\n box-sizing: border-box;\n}\n.bpmnkit-cfg-search-input::placeholder { color: rgba(255,255,255,0.28); }\n.bpmnkit-cfg-search-input:focus {\n border-color: var(--bpmnkit-accent, #6b9df7);\n background: rgba(255,255,255,0.1);\n}\n.bpmnkit-cfg-search-clear {\n width: 22px;\n height: 22px;\n background: none;\n border: none;\n color: rgba(255,255,255,0.35);\n cursor: pointer;\n padding: 0;\n /* display toggled via JS */\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n font-size: 14px;\n flex-shrink: 0;\n transition: color 0.1s, background 0.1s;\n}\n.bpmnkit-cfg-search-clear:hover { color: #fff; background: rgba(255,255,255,0.08); }\n\n/* \u2500\u2500 Guide bar (field assistant) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-guide-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 7px 14px;\n background: rgba(248, 113, 113, 0.09);\n border-bottom: 1px solid rgba(248, 113, 113, 0.18);\n flex-shrink: 0;\n}\n.bpmnkit-cfg-guide-info {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n.bpmnkit-cfg-guide-icon {\n width: 16px;\n height: 16px;\n background: var(--bpmnkit-danger, #f87171);\n border-radius: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 10px;\n font-weight: 800;\n color: #fff;\n flex-shrink: 0;\n line-height: 1;\n}\n.bpmnkit-cfg-guide-text {\n font-size: 11px;\n font-weight: 500;\n color: rgba(248, 113, 113, 0.9);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.bpmnkit-cfg-guide-btn {\n flex-shrink: 0;\n padding: 3px 10px;\n border-radius: 4px;\n border: 1px solid rgba(248, 113, 113, 0.4);\n background: rgba(248, 113, 113, 0.12);\n color: var(--bpmnkit-danger, #f87171);\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n transition: background 0.1s, border-color 0.1s;\n white-space: nowrap;\n}\n.bpmnkit-cfg-guide-btn:hover {\n background: rgba(248, 113, 113, 0.22);\n border-color: rgba(248, 113, 113, 0.6);\n}\n\n/* \u2500\u2500 Search results \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-search-results {\n flex: 1;\n overflow-y: auto;\n padding: 4px 22px 32px;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,0.15) transparent;\n}\n.bpmnkit-cfg-search-group-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: rgba(255,255,255,0.3);\n margin: 16px 0 10px;\n padding-bottom: 5px;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n}\n.bpmnkit-cfg-search-group-label:first-child { margin-top: 10px; }\n.bpmnkit-cfg-search-empty {\n font-size: 12px;\n color: rgba(255,255,255,0.3);\n text-align: center;\n padding: 28px 0;\n}\n\n/* \u2500\u2500 Tabs area (wrapper + scroll buttons) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-tabs-area {\n display: flex;\n align-items: stretch;\n border-bottom: 1px solid rgba(255,255,255,0.08);\n flex-shrink: 0;\n overflow: hidden;\n}\n.bpmnkit-cfg-tabs {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: flex-end;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.bpmnkit-cfg-tabs::-webkit-scrollbar { display: none; }\n.bpmnkit-cfg-tab-btn {\n padding: 10px 14px;\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n color: rgba(255,255,255,0.4);\n cursor: pointer;\n font-size: 12px;\n font-weight: 500;\n white-space: nowrap;\n transition: color 0.1s, border-color 0.1s;\n margin-bottom: -1px;\n flex-shrink: 0;\n}\n.bpmnkit-cfg-tab-btn:hover { color: rgba(255,255,255,0.75); }\n.bpmnkit-cfg-tab-btn.active { color: var(--bpmnkit-accent, #6b9df7); border-bottom-color: var(--bpmnkit-accent, #6b9df7); }\n/* Red dot shown after tab label when the group has required-empty fields */\n.bpmnkit-cfg-tab-btn.has-error::after {\n content: '';\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--bpmnkit-danger, #f87171);\n margin-left: 5px;\n vertical-align: middle;\n flex-shrink: 0;\n}\n\n/* Arrow buttons for overflowing tabs */\n.bpmnkit-cfg-tabs-scroll-btn {\n flex-shrink: 0;\n width: 26px;\n background: none;\n border: none;\n border-radius: 0;\n color: rgba(255,255,255,0.5);\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 0;\n /* display toggled via JS */\n align-items: center;\n justify-content: center;\n transition: background 0.1s, color 0.1s;\n}\n.bpmnkit-cfg-tabs-scroll-btn:hover { color: #fff; background: rgba(255,255,255,0.08); }\n.bpmnkit-cfg-tabs-scroll-btn--prev { border-right: 1px solid rgba(255,255,255,0.06); }\n.bpmnkit-cfg-tabs-scroll-btn--next { border-left: 1px solid rgba(255,255,255,0.06); }\n\n/* \u2500\u2500 Scrollable body \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-full-body {\n flex: 1;\n overflow-y: auto;\n padding: 22px 22px 32px;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,0.15) transparent;\n}\n\n/* \u2500\u2500 Groups & Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-group-label {\n font-size: 10px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.08em;\n color: rgba(255,255,255,0.3);\n margin-bottom: 14px;\n padding-bottom: 6px;\n border-bottom: 1px solid rgba(255,255,255,0.06);\n}\n.bpmnkit-cfg-field {\n margin-bottom: 14px;\n}\n.bpmnkit-cfg-field-label {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n color: rgba(255,255,255,0.55);\n margin-bottom: 5px;\n cursor: default;\n}\n.bpmnkit-cfg-field-label[title] { cursor: help; }\n.bpmnkit-cfg-field-docs {\n font-size: 10px;\n color: var(--bpmnkit-accent, #6b9df7);\n text-decoration: none;\n opacity: 0.7;\n transition: opacity 0.1s;\n}\n.bpmnkit-cfg-field-docs:hover { opacity: 1; }\n.bpmnkit-cfg-required-star {\n color: var(--bpmnkit-danger, #f87171);\n font-weight: 700;\n margin-left: 2px;\n}\n.bpmnkit-cfg-field--invalid {\n border-left: 2px solid var(--bpmnkit-danger, #f87171);\n padding-left: 8px;\n}\n.bpmnkit-cfg-field--invalid .bpmnkit-cfg-input,\n.bpmnkit-cfg-field--invalid .bpmnkit-cfg-select,\n.bpmnkit-cfg-field--invalid .bpmnkit-cfg-textarea {\n border-color: var(--bpmnkit-danger, #f87171);\n}\n\n.bpmnkit-cfg-input,\n.bpmnkit-cfg-select,\n.bpmnkit-cfg-textarea {\n width: 100%;\n padding: 7px 10px;\n background: rgba(255,255,255,0.06);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n color: rgba(255,255,255,0.9);\n font-size: 12px;\n font-family: system-ui, -apple-system, sans-serif;\n outline: none;\n transition: border-color 0.15s, background 0.15s;\n box-sizing: border-box;\n}\n.bpmnkit-cfg-input:focus,\n.bpmnkit-cfg-select:focus,\n.bpmnkit-cfg-textarea:focus {\n border-color: var(--bpmnkit-accent, #6b9df7);\n background-color: rgba(255,255,255,0.09);\n}\n.bpmnkit-cfg-select {\n appearance: none;\n cursor: pointer;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(255,255,255,0.4)' stroke-width='1.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 10px center;\n padding-right: 28px;\n}\n.bpmnkit-cfg-textarea {\n resize: vertical;\n min-height: 68px;\n line-height: 1.5;\n font-family: var(--bpmnkit-font-mono, ui-monospace, \"SF Mono\", monospace);\n font-size: 11px;\n}\n.bpmnkit-cfg-field-hint {\n font-size: 11px;\n color: rgba(255,255,255,0.3);\n margin-top: 4px;\n line-height: 1.4;\n}\n\n/* \u2500\u2500 Field error message \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-field-error {\n font-size: 11px;\n color: var(--bpmnkit-danger, #f87171);\n margin-top: 3px;\n line-height: 1.3;\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-field-error { color: var(--bpmnkit-danger, #dc2626); }\n\n/* \u2500\u2500 FEEL expression field \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* FEEL/string mode toggle \u2014 appears at the right end of a feel-expression label row */\n.bpmnkit-cfg-feel-mode-btn {\n margin-left: auto;\n flex-shrink: 0;\n padding: 1px 6px;\n border-radius: 3px;\n border: 1px solid rgba(255,255,255,0.12);\n background: none;\n color: rgba(255,255,255,0.3);\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n cursor: pointer;\n transition: background 0.1s, color 0.1s, border-color 0.1s;\n}\n.bpmnkit-cfg-feel-mode-btn:hover {\n background: rgba(255,255,255,0.06);\n color: rgba(255,255,255,0.55);\n}\n.bpmnkit-cfg-feel-mode-btn--active {\n border-color: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15));\n color: var(--bpmnkit-accent, #6b9df7);\n}\n.bpmnkit-cfg-feel-mode-btn--active:hover { background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15)); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn {\n border-color: rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.3);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn:hover {\n background: rgba(0,0,0,0.05);\n color: rgba(0,0,0,0.55);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn--active {\n border-color: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12));\n background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12));\n color: var(--bpmnkit-accent, #1a56db);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-mode-btn--active:hover { background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); }\n\n.bpmnkit-cfg-feel-ta {\n width: 100%;\n min-height: 68px;\n padding: 7px 10px;\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n font-size: 11px;\n font-family: var(--bpmnkit-font-mono, ui-monospace, \"SF Mono\", monospace);\n line-height: 1.5;\n resize: vertical;\n outline: none;\n transition: border-color 0.15s;\n box-sizing: border-box;\n}\n\n.bpmnkit-cfg-feel-playground-btn {\n display: inline-flex;\n margin-top: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n border: 1px solid rgba(255,255,255,0.12);\n background: none;\n color: var(--bpmnkit-accent, #6b9df7);\n font-size: 11px;\n cursor: pointer;\n transition: background 0.1s;\n}\n.bpmnkit-cfg-feel-playground-btn:hover { background: var(--bpmnkit-accent-subtle, rgba(107,157,247,0.15)); }\n\n/* Light theme overrides */\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-playground-btn {\n border-color: rgba(0,0,0,0.12);\n color: var(--bpmnkit-accent, #1a56db);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-feel-playground-btn:hover { background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); }\n\n/* \u2500\u2500 Toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-toggle-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.bpmnkit-cfg-toggle-label {\n font-size: 12px;\n color: rgba(255,255,255,0.7);\n cursor: pointer;\n}\n.bpmnkit-cfg-toggle-label[title] { cursor: help; }\n.bpmnkit-cfg-toggle {\n position: relative;\n display: inline-flex;\n width: 34px;\n height: 18px;\n flex-shrink: 0;\n cursor: pointer;\n}\n.bpmnkit-cfg-toggle input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n}\n.bpmnkit-cfg-toggle-track {\n position: absolute;\n inset: 0;\n background: rgba(255,255,255,0.15);\n border-radius: 9px;\n transition: background 0.2s;\n}\n.bpmnkit-cfg-toggle input:checked + .bpmnkit-cfg-toggle-track { background: var(--bpmnkit-accent, #6b9df7); }\n.bpmnkit-cfg-toggle-thumb {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 14px;\n height: 14px;\n background: #fff;\n border-radius: 50%;\n transition: transform 0.2s;\n pointer-events: none;\n}\n.bpmnkit-cfg-toggle input:checked ~ .bpmnkit-cfg-toggle-thumb { transform: translateX(16px); }\n\n/* \u2500\u2500 Action button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 4px;\n border: 1px solid rgba(255,255,255,0.15);\n background: rgba(255,255,255,0.07);\n color: rgba(255,255,255,0.85);\n font-size: 12px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.bpmnkit-cfg-action-btn:hover {\n background: rgba(255,255,255,0.13);\n border-color: rgba(255,255,255,0.25);\n}\n\n/* \u2500\u2500 Light theme overrides \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full {\n background: var(--bpmnkit-panel-bg, rgba(255,255,255,0.92));\n border-left-color: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));\n box-shadow: -8px 0 40px rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.85);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-header { border-bottom-color: rgba(0,0,0,0.07); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-type { color: rgba(0,0,0,0.35); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-template { color: var(--bpmnkit-accent, #1a56db); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-name { color: rgba(0,0,0,0.9); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-docs-link { color: rgba(0,0,0,0.4); border-color: rgba(0,0,0,0.2); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-docs-link:hover { color: var(--bpmnkit-accent, #1a56db); border-color: var(--bpmnkit-accent, #1a56db); background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12)); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-collapse-btn { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-collapse-btn:hover { background: rgba(0,0,0,0.06); color: rgba(0,0,0,0.9); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-close { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-close:hover { background: rgba(0,0,0,0.06); color: rgba(0,0,0,0.9); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-bar { border-bottom-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-input {\n background: rgba(0,0,0,0.04);\n border-color: rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.85);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-input::placeholder { color: rgba(0,0,0,0.3); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-clear { color: rgba(0,0,0,0.35); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-clear:hover { color: rgba(0,0,0,0.9); background: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-results { scrollbar-color: rgba(0,0,0,0.15) transparent; }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-group-label { color: rgba(0,0,0,0.35); border-bottom-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-search-empty { color: rgba(0,0,0,0.35); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-area { border-bottom-color: rgba(0,0,0,0.07); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tab-btn { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tab-btn:hover { color: rgba(0,0,0,0.7); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn { color: rgba(0,0,0,0.4); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn:hover { color: rgba(0,0,0,0.9); background: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn--prev { border-right-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-tabs-scroll-btn--next { border-left-color: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-full-body { scrollbar-color: rgba(0,0,0,0.15) transparent; }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-group-label {\n color: rgba(0,0,0,0.35);\n border-bottom-color: rgba(0,0,0,0.06);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-field-label { color: rgba(0,0,0,0.55); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-field-hint { color: rgba(0,0,0,0.4); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-input,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-select,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-textarea {\n background-color: rgba(0,0,0,0.04);\n border-color: rgba(0,0,0,0.12);\n color: rgba(0,0,0,0.85);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-input:focus,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-select:focus,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-textarea:focus {\n background-color: rgba(0,0,0,0.06);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-select {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(0,0,0,0.45)' stroke-width='1.5'/%3E%3C/svg%3E\");\n}\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-toggle-label { color: rgba(0,0,0,0.7); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-toggle-track { background: rgba(0,0,0,0.12); }\n\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-action-btn {\n border-color: rgba(0,0,0,0.15);\n background: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.75);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-action-btn:hover {\n background: rgba(0,0,0,0.08);\n border-color: rgba(0,0,0,0.2);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-resize-handle:hover {\n background: var(--bpmnkit-accent-subtle, rgba(26,86,219,0.12));\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-bar {\n background: rgba(248, 113, 113, 0.06);\n border-bottom-color: rgba(248, 113, 113, 0.15);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-text { color: var(--bpmnkit-danger, #dc2626); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-btn {\n color: var(--bpmnkit-danger, #dc2626);\n border-color: rgba(220, 38, 38, 0.3);\n background: rgba(220, 38, 38, 0.07);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-guide-btn:hover {\n background: rgba(220, 38, 38, 0.14);\n border-color: rgba(220, 38, 38, 0.5);\n}\n\n/* \u2500\u2500 Neon theme overrides \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full {\n background: oklch(8% 0.03 270 / 0.96);\n border-left-color: oklch(65% 0.28 280 / 0.2);\n box-shadow: -8px 0 40px oklch(0% 0 0 / 0.7), 0 0 0 1px oklch(65% 0.28 280 / 0.05);\n color: oklch(65% 0.1 280);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-header { border-bottom-color: oklch(65% 0.28 280 / 0.12); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-type { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-template { color: oklch(73% 0.16 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-name { color: oklch(88% 0.02 270); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-docs-link { color: oklch(55% 0.06 280); border-color: oklch(65% 0.28 280 / 0.25); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-docs-link:hover { color: oklch(73% 0.16 280); border-color: oklch(65% 0.28 280 / 0.5); background: oklch(65% 0.28 280 / 0.1); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-collapse-btn { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-collapse-btn:hover { background: oklch(65% 0.28 280 / 0.1); color: oklch(88% 0.02 270); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-close { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-close:hover { background: oklch(65% 0.28 280 / 0.1); color: oklch(88% 0.02 270); }\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-bar { border-bottom-color: oklch(65% 0.28 280 / 0.1); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-input {\n background: oklch(65% 0.28 280 / 0.05);\n border-color: oklch(65% 0.28 280 / 0.15);\n color: oklch(88% 0.02 270);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-input::placeholder { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-input:focus { border-color: oklch(65% 0.28 280 / 0.45); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-clear { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-clear:hover { color: oklch(88% 0.02 270); background: oklch(65% 0.28 280 / 0.1); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-results { scrollbar-color: oklch(65% 0.28 280 / 0.15) transparent; }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-group-label { color: oklch(50% 0.06 280); border-bottom-color: oklch(65% 0.28 280 / 0.1); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-search-empty { color: oklch(50% 0.06 280); }\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tabs-area { border-bottom-color: oklch(65% 0.28 280 / 0.12); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tab-btn { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tab-btn:hover { color: oklch(73% 0.1 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tab-btn.active { color: oklch(73% 0.16 280); border-bottom-color: oklch(73% 0.16 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tabs-scroll-btn { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tabs-scroll-btn:hover { color: oklch(88% 0.02 270); background: oklch(65% 0.28 280 / 0.1); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tabs-scroll-btn--prev { border-right-color: oklch(65% 0.28 280 / 0.12); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-tabs-scroll-btn--next { border-left-color: oklch(65% 0.28 280 / 0.12); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-full-body { scrollbar-color: oklch(65% 0.28 280 / 0.15) transparent; }\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-group-label {\n color: oklch(50% 0.06 280);\n border-bottom-color: oklch(65% 0.28 280 / 0.1);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-field-label { color: oklch(55% 0.08 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-field-hint { color: oklch(50% 0.06 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-field-error { color: oklch(70% 0.18 20); }\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-input,\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-select,\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-textarea {\n background: oklch(65% 0.28 280 / 0.05);\n border-color: oklch(65% 0.28 280 / 0.15);\n color: oklch(88% 0.02 270);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-input:focus,\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-select:focus,\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-textarea:focus {\n border-color: oklch(65% 0.28 280 / 0.45);\n background: oklch(65% 0.28 280 / 0.08);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-select {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='%238080c0' stroke-width='1.5'/%3E%3C/svg%3E\");\n}\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-feel-mode-btn {\n border-color: oklch(65% 0.28 280 / 0.15);\n color: oklch(50% 0.06 280);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-feel-mode-btn:hover {\n background: oklch(65% 0.28 280 / 0.08);\n color: oklch(65% 0.1 280);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-feel-mode-btn--active {\n border-color: oklch(65% 0.28 280 / 0.3);\n background: oklch(65% 0.28 280 / 0.12);\n color: oklch(73% 0.16 280);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-feel-playground-btn {\n border-color: oklch(65% 0.28 280 / 0.2);\n color: oklch(73% 0.16 280);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-feel-playground-btn:hover { background: oklch(65% 0.28 280 / 0.1); }\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-toggle-label { color: oklch(65% 0.1 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-toggle-track { background: oklch(65% 0.28 280 / 0.15); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-toggle input:checked + .bpmnkit-cfg-toggle-track { background: oklch(65% 0.28 280 / 0.7); }\n\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-action-btn {\n border-color: oklch(65% 0.28 280 / 0.2);\n background: oklch(65% 0.28 280 / 0.06);\n color: oklch(65% 0.1 280);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-action-btn:hover {\n background: oklch(65% 0.28 280 / 0.12);\n border-color: oklch(65% 0.28 280 / 0.35);\n}\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-resize-handle:hover { background: oklch(65% 0.28 280 / 0.1); }\n\n/* \u2500\u2500 Searchable select \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cfg-ss-trigger {\n width: 100%;\n padding: 7px 10px;\n background: rgba(255,255,255,0.06);\n border: 1px solid rgba(255,255,255,0.1);\n border-radius: 6px;\n color: rgba(255,255,255,0.9);\n font-size: 12px;\n font-family: system-ui, -apple-system, sans-serif;\n text-align: left;\n cursor: pointer;\n outline: none;\n transition: border-color 0.15s, background 0.15s;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.bpmnkit-cfg-ss-trigger:hover { background: rgba(255,255,255,0.09); border-color: rgba(255,255,255,0.18); }\n.bpmnkit-cfg-ss-trigger:focus,\n.bpmnkit-cfg-ss-trigger[aria-expanded=\"true\"] { border-color: var(--bpmnkit-accent, #6b9df7); background: rgba(255,255,255,0.09); }\n.bpmnkit-cfg-ss-trigger-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bpmnkit-cfg-ss-arrow {\n flex-shrink: 0;\n width: 10px; height: 6px;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(255,255,255,0.4)' stroke-width='1.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-size: contain;\n}\n/* Dropdown panel \u2014 appended to document.body, positioned fixed */\n.bpmnkit-cfg-ss-dropdown {\n background: #1a1a2e;\n border: 1px solid rgba(255,255,255,0.15);\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0,0,0,0.6);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n.bpmnkit-cfg-ss-search {\n padding: 8px 10px;\n background: rgba(255,255,255,0.05);\n border: none;\n border-bottom: 1px solid rgba(255,255,255,0.08);\n color: rgba(255,255,255,0.9);\n font-size: 12px;\n font-family: system-ui, -apple-system, sans-serif;\n outline: none;\n width: 100%;\n box-sizing: border-box;\n flex-shrink: 0;\n}\n.bpmnkit-cfg-ss-search::placeholder { color: rgba(255,255,255,0.3); }\n.bpmnkit-cfg-ss-list {\n overflow-y: auto;\n scrollbar-width: thin;\n scrollbar-color: rgba(255,255,255,0.15) transparent;\n}\n.bpmnkit-cfg-ss-option {\n padding: 7px 10px;\n font-size: 12px;\n color: rgba(255,255,255,0.85);\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.bpmnkit-cfg-ss-option--focused { background: rgba(255,255,255,0.08); }\n.bpmnkit-cfg-ss-option--selected { color: var(--bpmnkit-accent, #6b9df7); }\n.bpmnkit-cfg-ss-option--selected.bpmnkit-cfg-ss-option--focused { background: rgba(107,157,247,0.1); }\n.bpmnkit-cfg-ss-empty { padding: 10px; font-size: 12px; color: rgba(255,255,255,0.3); text-align: center; }\n/* Neon theme \u2014 applied via data-theme=\"neon\" on the dropdown element itself */\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] {\n background: oklch(9% 0.025 270);\n border-color: oklch(65% 0.28 280 / 0.2);\n box-shadow: 0 8px 32px oklch(0% 0 0 / 0.7), 0 0 0 1px oklch(65% 0.28 280 / 0.1);\n}\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-search {\n background: oklch(65% 0.28 280 / 0.05);\n border-bottom-color: oklch(65% 0.28 280 / 0.12);\n color: oklch(88% 0.02 270);\n}\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-search::placeholder { color: oklch(55% 0.06 280); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-list { scrollbar-color: oklch(65% 0.28 280 / 0.15) transparent; }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-option { color: oklch(65% 0.1 280); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-option--focused { background: oklch(65% 0.28 280 / 0.08); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-option--selected { color: oklch(73% 0.16 280); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-option--selected.bpmnkit-cfg-ss-option--focused { background: oklch(65% 0.28 280 / 0.12); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"neon\"] .bpmnkit-cfg-ss-empty { color: oklch(50% 0.06 280); }\n/* Neon theme trigger */\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-ss-trigger { background: oklch(65% 0.28 280 / 0.06); border-color: oklch(65% 0.28 280 / 0.2); color: oklch(65% 0.1 280); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-ss-trigger:hover { background: oklch(65% 0.28 280 / 0.1); border-color: oklch(65% 0.28 280 / 0.3); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-ss-trigger:focus,\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-ss-trigger[aria-expanded=\"true\"] { border-color: oklch(65% 0.28 280 / 0.5); background: oklch(65% 0.28 280 / 0.1); }\n[data-bpmnkit-hud-theme=\"neon\"] .bpmnkit-cfg-ss-arrow {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='%238080c0' stroke-width='1.5'/%3E%3C/svg%3E\");\n}\n/* Light theme \u2014 applied via data-theme=\"light\" on the dropdown element itself */\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] {\n background: #ffffff;\n border-color: rgba(0,0,0,0.12);\n box-shadow: 0 4px 20px rgba(0,0,0,0.15);\n}\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-search {\n background: rgba(0,0,0,0.03);\n border-bottom-color: rgba(0,0,0,0.08);\n color: rgba(0,0,0,0.85);\n}\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-search::placeholder { color: rgba(0,0,0,0.3); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-list { scrollbar-color: rgba(0,0,0,0.15) transparent; }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-option { color: rgba(0,0,0,0.85); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-option--focused { background: rgba(0,0,0,0.05); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-option--selected { color: var(--bpmnkit-accent, #1a56db); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-option--selected.bpmnkit-cfg-ss-option--focused { background: rgba(26,86,219,0.08); }\n.bpmnkit-cfg-ss-dropdown[data-theme=\"light\"] .bpmnkit-cfg-ss-empty { color: rgba(0,0,0,0.35); }\n/* Light theme trigger */\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-ss-trigger { background: rgba(0,0,0,0.04); border-color: rgba(0,0,0,0.12); color: rgba(0,0,0,0.85); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-ss-trigger:hover { background: rgba(0,0,0,0.06); border-color: rgba(0,0,0,0.2); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-ss-trigger:focus,\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-ss-trigger[aria-expanded=\"true\"] { border-color: var(--bpmnkit-accent, #1a56db); background: rgba(0,0,0,0.06); }\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cfg-ss-arrow {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(0,0,0,0.45)' stroke-width='1.5'/%3E%3C/svg%3E\");\n}\n";
3
3
  export declare function injectConfigPanelStyles(): void;
4
4
  //# sourceMappingURL=css.d.ts.map
@@ -705,6 +705,232 @@ export const CONFIG_PANEL_CSS = `
705
705
  background: rgba(220, 38, 38, 0.14);
706
706
  border-color: rgba(220, 38, 38, 0.5);
707
707
  }
708
+
709
+ /* ── Neon theme overrides ─────────────────────────────────────────────────── */
710
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full {
711
+ background: oklch(8% 0.03 270 / 0.96);
712
+ border-left-color: oklch(65% 0.28 280 / 0.2);
713
+ box-shadow: -8px 0 40px oklch(0% 0 0 / 0.7), 0 0 0 1px oklch(65% 0.28 280 / 0.05);
714
+ color: oklch(65% 0.1 280);
715
+ }
716
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-header { border-bottom-color: oklch(65% 0.28 280 / 0.12); }
717
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-type { color: oklch(50% 0.06 280); }
718
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-template { color: oklch(73% 0.16 280); }
719
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-name { color: oklch(88% 0.02 270); }
720
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-docs-link { color: oklch(55% 0.06 280); border-color: oklch(65% 0.28 280 / 0.25); }
721
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-docs-link:hover { color: oklch(73% 0.16 280); border-color: oklch(65% 0.28 280 / 0.5); background: oklch(65% 0.28 280 / 0.1); }
722
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-collapse-btn { color: oklch(50% 0.06 280); }
723
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-collapse-btn:hover { background: oklch(65% 0.28 280 / 0.1); color: oklch(88% 0.02 270); }
724
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-close { color: oklch(50% 0.06 280); }
725
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-close:hover { background: oklch(65% 0.28 280 / 0.1); color: oklch(88% 0.02 270); }
726
+
727
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-bar { border-bottom-color: oklch(65% 0.28 280 / 0.1); }
728
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-input {
729
+ background: oklch(65% 0.28 280 / 0.05);
730
+ border-color: oklch(65% 0.28 280 / 0.15);
731
+ color: oklch(88% 0.02 270);
732
+ }
733
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-input::placeholder { color: oklch(50% 0.06 280); }
734
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-input:focus { border-color: oklch(65% 0.28 280 / 0.45); }
735
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-clear { color: oklch(50% 0.06 280); }
736
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-clear:hover { color: oklch(88% 0.02 270); background: oklch(65% 0.28 280 / 0.1); }
737
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-results { scrollbar-color: oklch(65% 0.28 280 / 0.15) transparent; }
738
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-group-label { color: oklch(50% 0.06 280); border-bottom-color: oklch(65% 0.28 280 / 0.1); }
739
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-search-empty { color: oklch(50% 0.06 280); }
740
+
741
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tabs-area { border-bottom-color: oklch(65% 0.28 280 / 0.12); }
742
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tab-btn { color: oklch(50% 0.06 280); }
743
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tab-btn:hover { color: oklch(73% 0.1 280); }
744
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tab-btn.active { color: oklch(73% 0.16 280); border-bottom-color: oklch(73% 0.16 280); }
745
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tabs-scroll-btn { color: oklch(50% 0.06 280); }
746
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tabs-scroll-btn:hover { color: oklch(88% 0.02 270); background: oklch(65% 0.28 280 / 0.1); }
747
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tabs-scroll-btn--prev { border-right-color: oklch(65% 0.28 280 / 0.12); }
748
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-tabs-scroll-btn--next { border-left-color: oklch(65% 0.28 280 / 0.12); }
749
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-full-body { scrollbar-color: oklch(65% 0.28 280 / 0.15) transparent; }
750
+
751
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-group-label {
752
+ color: oklch(50% 0.06 280);
753
+ border-bottom-color: oklch(65% 0.28 280 / 0.1);
754
+ }
755
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-field-label { color: oklch(55% 0.08 280); }
756
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-field-hint { color: oklch(50% 0.06 280); }
757
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-field-error { color: oklch(70% 0.18 20); }
758
+
759
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-input,
760
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-select,
761
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-textarea {
762
+ background: oklch(65% 0.28 280 / 0.05);
763
+ border-color: oklch(65% 0.28 280 / 0.15);
764
+ color: oklch(88% 0.02 270);
765
+ }
766
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-input:focus,
767
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-select:focus,
768
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-textarea:focus {
769
+ border-color: oklch(65% 0.28 280 / 0.45);
770
+ background: oklch(65% 0.28 280 / 0.08);
771
+ }
772
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-select {
773
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='%238080c0' stroke-width='1.5'/%3E%3C/svg%3E");
774
+ }
775
+
776
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-feel-mode-btn {
777
+ border-color: oklch(65% 0.28 280 / 0.15);
778
+ color: oklch(50% 0.06 280);
779
+ }
780
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-feel-mode-btn:hover {
781
+ background: oklch(65% 0.28 280 / 0.08);
782
+ color: oklch(65% 0.1 280);
783
+ }
784
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-feel-mode-btn--active {
785
+ border-color: oklch(65% 0.28 280 / 0.3);
786
+ background: oklch(65% 0.28 280 / 0.12);
787
+ color: oklch(73% 0.16 280);
788
+ }
789
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-feel-playground-btn {
790
+ border-color: oklch(65% 0.28 280 / 0.2);
791
+ color: oklch(73% 0.16 280);
792
+ }
793
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-feel-playground-btn:hover { background: oklch(65% 0.28 280 / 0.1); }
794
+
795
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-toggle-label { color: oklch(65% 0.1 280); }
796
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-toggle-track { background: oklch(65% 0.28 280 / 0.15); }
797
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-toggle input:checked + .bpmnkit-cfg-toggle-track { background: oklch(65% 0.28 280 / 0.7); }
798
+
799
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-action-btn {
800
+ border-color: oklch(65% 0.28 280 / 0.2);
801
+ background: oklch(65% 0.28 280 / 0.06);
802
+ color: oklch(65% 0.1 280);
803
+ }
804
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-action-btn:hover {
805
+ background: oklch(65% 0.28 280 / 0.12);
806
+ border-color: oklch(65% 0.28 280 / 0.35);
807
+ }
808
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-resize-handle:hover { background: oklch(65% 0.28 280 / 0.1); }
809
+
810
+ /* ── Searchable select ────────────────────────────────────────────────────── */
811
+ .bpmnkit-cfg-ss-trigger {
812
+ width: 100%;
813
+ padding: 7px 10px;
814
+ background: rgba(255,255,255,0.06);
815
+ border: 1px solid rgba(255,255,255,0.1);
816
+ border-radius: 6px;
817
+ color: rgba(255,255,255,0.9);
818
+ font-size: 12px;
819
+ font-family: system-ui, -apple-system, sans-serif;
820
+ text-align: left;
821
+ cursor: pointer;
822
+ outline: none;
823
+ transition: border-color 0.15s, background 0.15s;
824
+ box-sizing: border-box;
825
+ display: flex;
826
+ align-items: center;
827
+ gap: 6px;
828
+ }
829
+ .bpmnkit-cfg-ss-trigger:hover { background: rgba(255,255,255,0.09); border-color: rgba(255,255,255,0.18); }
830
+ .bpmnkit-cfg-ss-trigger:focus,
831
+ .bpmnkit-cfg-ss-trigger[aria-expanded="true"] { border-color: var(--bpmnkit-accent, #6b9df7); background: rgba(255,255,255,0.09); }
832
+ .bpmnkit-cfg-ss-trigger-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
833
+ .bpmnkit-cfg-ss-arrow {
834
+ flex-shrink: 0;
835
+ width: 10px; height: 6px;
836
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(255,255,255,0.4)' stroke-width='1.5'/%3E%3C/svg%3E");
837
+ background-repeat: no-repeat;
838
+ background-size: contain;
839
+ }
840
+ /* Dropdown panel — appended to document.body, positioned fixed */
841
+ .bpmnkit-cfg-ss-dropdown {
842
+ background: #1a1a2e;
843
+ border: 1px solid rgba(255,255,255,0.15);
844
+ border-radius: 8px;
845
+ box-shadow: 0 8px 32px rgba(0,0,0,0.6);
846
+ overflow: hidden;
847
+ display: flex;
848
+ flex-direction: column;
849
+ }
850
+ .bpmnkit-cfg-ss-search {
851
+ padding: 8px 10px;
852
+ background: rgba(255,255,255,0.05);
853
+ border: none;
854
+ border-bottom: 1px solid rgba(255,255,255,0.08);
855
+ color: rgba(255,255,255,0.9);
856
+ font-size: 12px;
857
+ font-family: system-ui, -apple-system, sans-serif;
858
+ outline: none;
859
+ width: 100%;
860
+ box-sizing: border-box;
861
+ flex-shrink: 0;
862
+ }
863
+ .bpmnkit-cfg-ss-search::placeholder { color: rgba(255,255,255,0.3); }
864
+ .bpmnkit-cfg-ss-list {
865
+ overflow-y: auto;
866
+ scrollbar-width: thin;
867
+ scrollbar-color: rgba(255,255,255,0.15) transparent;
868
+ }
869
+ .bpmnkit-cfg-ss-option {
870
+ padding: 7px 10px;
871
+ font-size: 12px;
872
+ color: rgba(255,255,255,0.85);
873
+ cursor: pointer;
874
+ white-space: nowrap;
875
+ overflow: hidden;
876
+ text-overflow: ellipsis;
877
+ }
878
+ .bpmnkit-cfg-ss-option--focused { background: rgba(255,255,255,0.08); }
879
+ .bpmnkit-cfg-ss-option--selected { color: var(--bpmnkit-accent, #6b9df7); }
880
+ .bpmnkit-cfg-ss-option--selected.bpmnkit-cfg-ss-option--focused { background: rgba(107,157,247,0.1); }
881
+ .bpmnkit-cfg-ss-empty { padding: 10px; font-size: 12px; color: rgba(255,255,255,0.3); text-align: center; }
882
+ /* Neon theme — applied via data-theme="neon" on the dropdown element itself */
883
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] {
884
+ background: oklch(9% 0.025 270);
885
+ border-color: oklch(65% 0.28 280 / 0.2);
886
+ box-shadow: 0 8px 32px oklch(0% 0 0 / 0.7), 0 0 0 1px oklch(65% 0.28 280 / 0.1);
887
+ }
888
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-search {
889
+ background: oklch(65% 0.28 280 / 0.05);
890
+ border-bottom-color: oklch(65% 0.28 280 / 0.12);
891
+ color: oklch(88% 0.02 270);
892
+ }
893
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-search::placeholder { color: oklch(55% 0.06 280); }
894
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-list { scrollbar-color: oklch(65% 0.28 280 / 0.15) transparent; }
895
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-option { color: oklch(65% 0.1 280); }
896
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-option--focused { background: oklch(65% 0.28 280 / 0.08); }
897
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-option--selected { color: oklch(73% 0.16 280); }
898
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-option--selected.bpmnkit-cfg-ss-option--focused { background: oklch(65% 0.28 280 / 0.12); }
899
+ .bpmnkit-cfg-ss-dropdown[data-theme="neon"] .bpmnkit-cfg-ss-empty { color: oklch(50% 0.06 280); }
900
+ /* Neon theme trigger */
901
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-ss-trigger { background: oklch(65% 0.28 280 / 0.06); border-color: oklch(65% 0.28 280 / 0.2); color: oklch(65% 0.1 280); }
902
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-ss-trigger:hover { background: oklch(65% 0.28 280 / 0.1); border-color: oklch(65% 0.28 280 / 0.3); }
903
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-ss-trigger:focus,
904
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-ss-trigger[aria-expanded="true"] { border-color: oklch(65% 0.28 280 / 0.5); background: oklch(65% 0.28 280 / 0.1); }
905
+ [data-bpmnkit-hud-theme="neon"] .bpmnkit-cfg-ss-arrow {
906
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='%238080c0' stroke-width='1.5'/%3E%3C/svg%3E");
907
+ }
908
+ /* Light theme — applied via data-theme="light" on the dropdown element itself */
909
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] {
910
+ background: #ffffff;
911
+ border-color: rgba(0,0,0,0.12);
912
+ box-shadow: 0 4px 20px rgba(0,0,0,0.15);
913
+ }
914
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-search {
915
+ background: rgba(0,0,0,0.03);
916
+ border-bottom-color: rgba(0,0,0,0.08);
917
+ color: rgba(0,0,0,0.85);
918
+ }
919
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-search::placeholder { color: rgba(0,0,0,0.3); }
920
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-list { scrollbar-color: rgba(0,0,0,0.15) transparent; }
921
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-option { color: rgba(0,0,0,0.85); }
922
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-option--focused { background: rgba(0,0,0,0.05); }
923
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-option--selected { color: var(--bpmnkit-accent, #1a56db); }
924
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-option--selected.bpmnkit-cfg-ss-option--focused { background: rgba(26,86,219,0.08); }
925
+ .bpmnkit-cfg-ss-dropdown[data-theme="light"] .bpmnkit-cfg-ss-empty { color: rgba(0,0,0,0.35); }
926
+ /* Light theme trigger */
927
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cfg-ss-trigger { background: rgba(0,0,0,0.04); border-color: rgba(0,0,0,0.12); color: rgba(0,0,0,0.85); }
928
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cfg-ss-trigger:hover { background: rgba(0,0,0,0.06); border-color: rgba(0,0,0,0.2); }
929
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cfg-ss-trigger:focus,
930
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cfg-ss-trigger[aria-expanded="true"] { border-color: var(--bpmnkit-accent, #1a56db); background: rgba(0,0,0,0.06); }
931
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cfg-ss-arrow {
932
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6' fill='none' stroke='rgba(0,0,0,0.45)' stroke-width='1.5'/%3E%3C/svg%3E");
933
+ }
708
934
  `;
709
935
  export function injectConfigPanelStyles() {
710
936
  if (typeof document === "undefined")
@@ -121,6 +121,7 @@ export declare class ConfigPanelRenderer {
121
121
  private _renderTextarea;
122
122
  private _renderSelect;
123
123
  private _renderToggle;
124
+ private _renderSearchableSelect;
124
125
  private _renderActionButton;
125
126
  }
126
127
  export {};
@@ -4,6 +4,8 @@ const SVG_NS = "http://www.w3.org/2000/svg";
4
4
  // by _refreshConditionals to toggle visibility without a full re-render.
5
5
  const FIELD_WRAPPER_ATTR = "data-field-wrapper";
6
6
  const STORAGE_KEY_WIDTH = "bpmnkit-cfg-panel-width";
7
+ // At most one searchable-select dropdown is open at a time across all panels.
8
+ let _activeDropdownClose = null;
7
9
  /**
8
10
  * Validates a `feel-expression` field value using the real FEEL parser.
9
11
  * Returns null when the value is empty or is a valid FEEL expression (or a plain string).
@@ -208,6 +210,7 @@ export class ConfigPanelRenderer {
208
210
  this._guideStarted = false;
209
211
  }
210
212
  _hidePanel() {
213
+ _activeDropdownClose?.();
211
214
  this._panelEl?.remove();
212
215
  this._panelEl = null;
213
216
  this._tabsAreaEl = null;
@@ -966,7 +969,9 @@ export class ConfigPanelRenderer {
966
969
  }
967
970
  wrapper.appendChild(labelRow);
968
971
  if (field.type === "select") {
969
- wrapper.appendChild(this._renderSelect(field, value));
972
+ wrapper.appendChild(field.searchable
973
+ ? this._renderSearchableSelect(field, value)
974
+ : this._renderSelect(field, value));
970
975
  }
971
976
  else if (field.type === "textarea") {
972
977
  wrapper.appendChild(this._renderTextarea(field, value));
@@ -1143,6 +1148,167 @@ export class ConfigPanelRenderer {
1143
1148
  row.appendChild(labelText);
1144
1149
  return row;
1145
1150
  }
1151
+ _renderSearchableSelect(field, value) {
1152
+ const options = field.options ?? [];
1153
+ const currentValue = typeof value === "string" ? value : (options[0]?.value ?? "");
1154
+ const trigger = document.createElement("button");
1155
+ trigger.type = "button";
1156
+ trigger.className = "bpmnkit-cfg-ss-trigger";
1157
+ trigger.setAttribute("data-field-key", field.key);
1158
+ trigger.setAttribute("aria-haspopup", "listbox");
1159
+ trigger.setAttribute("aria-expanded", "false");
1160
+ const triggerLabel = document.createElement("span");
1161
+ triggerLabel.className = "bpmnkit-cfg-ss-trigger-label";
1162
+ triggerLabel.textContent = options.find((o) => o.value === currentValue)?.label ?? currentValue;
1163
+ const arrow = document.createElement("span");
1164
+ arrow.className = "bpmnkit-cfg-ss-arrow";
1165
+ arrow.setAttribute("aria-hidden", "true");
1166
+ trigger.append(triggerLabel, arrow);
1167
+ if (this._readonly) {
1168
+ trigger.disabled = true;
1169
+ return trigger;
1170
+ }
1171
+ const applyField = (v) => this._applyField(field.key, v);
1172
+ const openDropdown = () => {
1173
+ // Close any existing dropdown first
1174
+ _activeDropdownClose?.();
1175
+ const rect = trigger.getBoundingClientRect();
1176
+ const hudTheme = document.body.dataset.bpmnkitHudTheme ?? "";
1177
+ const panel = document.createElement("div");
1178
+ panel.className = "bpmnkit-cfg-ss-dropdown";
1179
+ if (hudTheme === "light" || hudTheme === "neon")
1180
+ panel.setAttribute("data-theme", hudTheme);
1181
+ // Position: prefer below, flip above if not enough room
1182
+ const spaceBelow = window.innerHeight - rect.bottom;
1183
+ const dropHeight = Math.min(300, options.length * 28 + 48);
1184
+ const openUpward = spaceBelow < dropHeight && rect.top > spaceBelow;
1185
+ panel.style.cssText = [
1186
+ "position:fixed",
1187
+ `left:${Math.round(rect.left)}px`,
1188
+ `width:${Math.round(rect.width)}px`,
1189
+ "max-height:300px",
1190
+ "z-index:99999",
1191
+ openUpward
1192
+ ? `bottom:${Math.round(window.innerHeight - rect.top + 4)}px`
1193
+ : `top:${Math.round(rect.bottom + 4)}px`,
1194
+ ].join(";");
1195
+ const search = document.createElement("input");
1196
+ search.type = "text";
1197
+ search.className = "bpmnkit-cfg-ss-search";
1198
+ search.placeholder = "Search\u2026";
1199
+ search.setAttribute("aria-label", "Search connectors");
1200
+ const list = document.createElement("div");
1201
+ list.className = "bpmnkit-cfg-ss-list";
1202
+ list.setAttribute("role", "listbox");
1203
+ // Leave room for search bar: total panel max-height minus ~37px search bar
1204
+ list.style.maxHeight = "263px";
1205
+ let focusIdx = 0;
1206
+ let visibleOpts = options;
1207
+ const renderOpts = (query) => {
1208
+ const q = query.toLowerCase().trim();
1209
+ visibleOpts = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options;
1210
+ focusIdx = 0;
1211
+ list.innerHTML = "";
1212
+ if (visibleOpts.length === 0) {
1213
+ const empty = document.createElement("div");
1214
+ empty.className = "bpmnkit-cfg-ss-empty";
1215
+ empty.textContent = "No results";
1216
+ list.appendChild(empty);
1217
+ return;
1218
+ }
1219
+ for (let i = 0; i < visibleOpts.length; i++) {
1220
+ const opt = visibleOpts[i];
1221
+ if (!opt)
1222
+ continue;
1223
+ const el = document.createElement("div");
1224
+ el.className = "bpmnkit-cfg-ss-option";
1225
+ if (opt.value === currentValue)
1226
+ el.classList.add("bpmnkit-cfg-ss-option--selected");
1227
+ if (i === focusIdx)
1228
+ el.classList.add("bpmnkit-cfg-ss-option--focused");
1229
+ el.setAttribute("role", "option");
1230
+ el.setAttribute("aria-selected", String(opt.value === currentValue));
1231
+ el.setAttribute("data-value", opt.value);
1232
+ el.textContent = opt.label;
1233
+ el.addEventListener("pointerdown", (e) => {
1234
+ e.preventDefault();
1235
+ triggerLabel.textContent = opt.label;
1236
+ closeDropdown();
1237
+ applyField(opt.value);
1238
+ });
1239
+ list.appendChild(el);
1240
+ }
1241
+ };
1242
+ const updateFocus = () => {
1243
+ const items = list.querySelectorAll(".bpmnkit-cfg-ss-option");
1244
+ for (let i = 0; i < items.length; i++) {
1245
+ items[i]?.classList.toggle("bpmnkit-cfg-ss-option--focused", i === focusIdx);
1246
+ }
1247
+ };
1248
+ search.addEventListener("input", () => renderOpts(search.value));
1249
+ search.addEventListener("keydown", (e) => {
1250
+ const items = list.querySelectorAll(".bpmnkit-cfg-ss-option");
1251
+ if (e.key === "ArrowDown") {
1252
+ e.preventDefault();
1253
+ focusIdx = Math.min(focusIdx + 1, items.length - 1);
1254
+ updateFocus();
1255
+ items[focusIdx]?.scrollIntoView({ block: "nearest" });
1256
+ }
1257
+ else if (e.key === "ArrowUp") {
1258
+ e.preventDefault();
1259
+ focusIdx = Math.max(focusIdx - 1, 0);
1260
+ updateFocus();
1261
+ items[focusIdx]?.scrollIntoView({ block: "nearest" });
1262
+ }
1263
+ else if (e.key === "Enter") {
1264
+ e.preventDefault();
1265
+ const focused = visibleOpts[focusIdx];
1266
+ if (focused) {
1267
+ triggerLabel.textContent = focused.label;
1268
+ closeDropdown();
1269
+ applyField(focused.value);
1270
+ }
1271
+ }
1272
+ else if (e.key === "Escape") {
1273
+ closeDropdown();
1274
+ trigger.focus();
1275
+ }
1276
+ });
1277
+ panel.append(search, list);
1278
+ document.body.appendChild(panel);
1279
+ trigger.setAttribute("aria-expanded", "true");
1280
+ renderOpts("");
1281
+ // Scroll the current selection into view
1282
+ list.querySelector(".bpmnkit-cfg-ss-option--selected")?.scrollIntoView({
1283
+ block: "nearest",
1284
+ });
1285
+ const onOutside = (e) => {
1286
+ if (!panel.contains(e.target) && e.target !== trigger)
1287
+ closeDropdown();
1288
+ };
1289
+ document.addEventListener("pointerdown", onOutside);
1290
+ _activeDropdownClose = closeDropdown;
1291
+ function closeDropdown() {
1292
+ panel.remove();
1293
+ trigger.setAttribute("aria-expanded", "false");
1294
+ document.removeEventListener("pointerdown", onOutside);
1295
+ if (_activeDropdownClose === closeDropdown)
1296
+ _activeDropdownClose = null;
1297
+ }
1298
+ requestAnimationFrame(() => {
1299
+ search.focus();
1300
+ });
1301
+ };
1302
+ trigger.addEventListener("click", () => {
1303
+ if (trigger.getAttribute("aria-expanded") === "true") {
1304
+ _activeDropdownClose?.();
1305
+ }
1306
+ else {
1307
+ openDropdown();
1308
+ }
1309
+ });
1310
+ return trigger;
1311
+ }
1146
1312
  _renderActionButton(field) {
1147
1313
  const btn = document.createElement("button");
1148
1314
  btn.type = "button";
@@ -15,6 +15,13 @@ export interface FieldSchema {
15
15
  placeholder?: string;
16
16
  /** Options for `select` fields. */
17
17
  options?: SelectOption[];
18
+ /**
19
+ * For `type: "select"` fields — when true, renders a custom searchable
20
+ * dropdown instead of a native `<select>`. Use this for large option lists
21
+ * where filtering is helpful and where the native dropdown's lack of dark
22
+ * theme support is a problem.
23
+ */
24
+ searchable?: boolean;
18
25
  /** Short hint displayed below the field. */
19
26
  hint?: string;
20
27
  /** Tooltip text shown on hover over the field label. */
@@ -142,6 +142,7 @@ const GENERIC_SERVICE_TASK_SCHEMA = {
142
142
  key: "connector",
143
143
  label: "Connector",
144
144
  type: "select",
145
+ searchable: true,
145
146
  options: CONNECTOR_OPTIONS,
146
147
  hint: "Select a Camunda connector or use a custom job worker type.",
147
148
  },
@@ -281,6 +282,7 @@ const GENERIC_ADHOC_SCHEMA = {
281
282
  key: "connector",
282
283
  label: "Template",
283
284
  type: "select",
285
+ searchable: true,
284
286
  options: ADHOC_OPTIONS,
285
287
  hint: "Attach a Camunda AI agent template or use a plain ad-hoc subprocess.",
286
288
  },
@@ -773,6 +775,7 @@ const TIMER_SCHEMA = {
773
775
  key: "timerType",
774
776
  label: "Timer type",
775
777
  type: "select",
778
+ searchable: true,
776
779
  options: [
777
780
  { value: "timeCycle", label: "Cycle" },
778
781
  { value: "timeDuration", label: "Duration" },
@@ -79,6 +79,7 @@ function propToFieldSchema(prop) {
79
79
  return {
80
80
  ...base,
81
81
  type: "select",
82
+ searchable: true,
82
83
  options: (prop.choices ?? []).map((c) => ({ value: c.value, label: c.name })),
83
84
  };
84
85
  case "Boolean":
@@ -0,0 +1,4 @@
1
+ export declare const CONNECTOR_CATALOG_STYLE_ID = "bpmnkit-connector-catalog-v1";
2
+ export declare const CONNECTOR_CATALOG_CSS = "\n/* \u2500\u2500 Toast notifications \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n.bpmnkit-cc-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 9px 16px;\n border-radius: 8px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 13px;\n font-weight: 500;\n z-index: 99999;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n animation: bpmnkit-cc-fadein 0.15s ease;\n max-width: 420px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n@keyframes bpmnkit-cc-fadein {\n from { opacity: 0; transform: translateX(-50%) translateY(6px); }\n to { opacity: 1; transform: translateX(-50%) translateY(0); }\n}\n.bpmnkit-cc-toast--loading {\n background: var(--bpmnkit-surface-2, #1e1e2e);\n border: 1px solid var(--bpmnkit-border, #2a2a42);\n color: var(--bpmnkit-fg-muted, #8888a8);\n}\n.bpmnkit-cc-toast--success {\n background: rgba(22, 163, 74, 0.12);\n border: 1px solid rgba(22, 163, 74, 0.35);\n color: var(--bpmnkit-success, #22c55e);\n}\n.bpmnkit-cc-toast--error {\n background: rgba(220, 38, 38, 0.12);\n border: 1px solid rgba(220, 38, 38, 0.35);\n color: var(--bpmnkit-danger, #f87171);\n}\n/* Light theme */\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cc-toast--loading {\n background: var(--bpmnkit-surface-2, #eeeef8);\n border-color: var(--bpmnkit-border, #d0d0e8);\n color: var(--bpmnkit-fg-muted, #6666a0);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cc-toast--success {\n background: rgba(22, 163, 74, 0.07);\n border-color: rgba(22, 163, 74, 0.3);\n color: var(--bpmnkit-success, #16a34a);\n}\n[data-bpmnkit-hud-theme=\"light\"] .bpmnkit-cc-toast--error {\n background: rgba(220, 38, 38, 0.07);\n border-color: rgba(220, 38, 38, 0.3);\n color: var(--bpmnkit-danger, #dc2626);\n}\n";
3
+ export declare function injectConnectorCatalogStyles(): void;
4
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1,72 @@
1
+ export const CONNECTOR_CATALOG_STYLE_ID = "bpmnkit-connector-catalog-v1";
2
+ export const CONNECTOR_CATALOG_CSS = `
3
+ /* ── Toast notifications ─────────────────────────────────────────────────── */
4
+ .bpmnkit-cc-toast {
5
+ position: fixed;
6
+ bottom: 20px;
7
+ left: 50%;
8
+ transform: translateX(-50%);
9
+ display: flex;
10
+ align-items: center;
11
+ gap: 8px;
12
+ padding: 9px 16px;
13
+ border-radius: 8px;
14
+ font-family: system-ui, -apple-system, sans-serif;
15
+ font-size: 13px;
16
+ font-weight: 500;
17
+ z-index: 99999;
18
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
19
+ animation: bpmnkit-cc-fadein 0.15s ease;
20
+ max-width: 420px;
21
+ white-space: nowrap;
22
+ overflow: hidden;
23
+ text-overflow: ellipsis;
24
+ pointer-events: none;
25
+ }
26
+ @keyframes bpmnkit-cc-fadein {
27
+ from { opacity: 0; transform: translateX(-50%) translateY(6px); }
28
+ to { opacity: 1; transform: translateX(-50%) translateY(0); }
29
+ }
30
+ .bpmnkit-cc-toast--loading {
31
+ background: var(--bpmnkit-surface-2, #1e1e2e);
32
+ border: 1px solid var(--bpmnkit-border, #2a2a42);
33
+ color: var(--bpmnkit-fg-muted, #8888a8);
34
+ }
35
+ .bpmnkit-cc-toast--success {
36
+ background: rgba(22, 163, 74, 0.12);
37
+ border: 1px solid rgba(22, 163, 74, 0.35);
38
+ color: var(--bpmnkit-success, #22c55e);
39
+ }
40
+ .bpmnkit-cc-toast--error {
41
+ background: rgba(220, 38, 38, 0.12);
42
+ border: 1px solid rgba(220, 38, 38, 0.35);
43
+ color: var(--bpmnkit-danger, #f87171);
44
+ }
45
+ /* Light theme */
46
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cc-toast--loading {
47
+ background: var(--bpmnkit-surface-2, #eeeef8);
48
+ border-color: var(--bpmnkit-border, #d0d0e8);
49
+ color: var(--bpmnkit-fg-muted, #6666a0);
50
+ }
51
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cc-toast--success {
52
+ background: rgba(22, 163, 74, 0.07);
53
+ border-color: rgba(22, 163, 74, 0.3);
54
+ color: var(--bpmnkit-success, #16a34a);
55
+ }
56
+ [data-bpmnkit-hud-theme="light"] .bpmnkit-cc-toast--error {
57
+ background: rgba(220, 38, 38, 0.07);
58
+ border-color: rgba(220, 38, 38, 0.3);
59
+ color: var(--bpmnkit-danger, #dc2626);
60
+ }
61
+ `;
62
+ export function injectConnectorCatalogStyles() {
63
+ if (typeof document === "undefined")
64
+ return;
65
+ if (document.getElementById(CONNECTOR_CATALOG_STYLE_ID))
66
+ return;
67
+ const style = document.createElement("style");
68
+ style.id = CONNECTOR_CATALOG_STYLE_ID;
69
+ style.textContent = CONNECTOR_CATALOG_CSS;
70
+ document.head.appendChild(style);
71
+ }
72
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @bpmnkit/canvas-plugin-connector-catalog — Import API connectors from
3
+ * OpenAPI specs into the BPMN editor via the command palette.
4
+ *
5
+ * Exposes 30+ pre-configured APIs (GitHub, Stripe, Slack, …) as searchable
6
+ * commands in Ctrl+K / ⌘K. Selecting one fetches the spec, generates connector
7
+ * templates via `@bpmnkit/connector-gen`, and registers them in the
8
+ * config-panel-bpmn connector selector — no restart required.
9
+ *
10
+ * An additional "Import from OpenAPI URL…" command accepts any OpenAPI 3.x
11
+ * spec URL for custom or private APIs.
12
+ *
13
+ * ## Usage
14
+ * ```typescript
15
+ * import { createConnectorCatalogPlugin } from "@bpmnkit/plugins/connector-catalog";
16
+ *
17
+ * const catalog = createConnectorCatalogPlugin(configPanelBpmn, palette);
18
+ * const editor = new BpmnEditor({
19
+ * container, xml,
20
+ * plugins: [configPanel, configPanelBpmn, palette, catalog],
21
+ * });
22
+ * ```
23
+ *
24
+ * @packageDocumentation
25
+ */
26
+ import type { CanvasPlugin } from "@bpmnkit/canvas";
27
+ import type { CommandPalettePlugin } from "../command-palette/index.js";
28
+ import type { ElementTemplate } from "../config-panel-bpmn/index.js";
29
+ import { CONNECTOR_CATALOG_CSS, CONNECTOR_CATALOG_STYLE_ID, injectConnectorCatalogStyles } from "./css.js";
30
+ export { CONNECTOR_CATALOG_CSS, CONNECTOR_CATALOG_STYLE_ID, injectConnectorCatalogStyles };
31
+ /** Subset of the config-panel-bpmn plugin API needed by this plugin. */
32
+ export interface TemplateRegistrar {
33
+ registerTemplate(template: ElementTemplate): void;
34
+ }
35
+ /**
36
+ * Creates the connector catalog plugin.
37
+ *
38
+ * Registers one command per built-in catalog entry plus an "Import from
39
+ * OpenAPI URL" command. All commands appear in the command palette (Ctrl+K /
40
+ * ⌘K). Selecting a catalog entry fetches the spec, generates connector
41
+ * templates, and registers them immediately in the config panel connector
42
+ * selector.
43
+ *
44
+ * @param registrar - The config-panel-bpmn plugin (or any object with
45
+ * `registerTemplate`).
46
+ * @param palette - The command palette plugin.
47
+ */
48
+ export declare function createConnectorCatalogPlugin(registrar: TemplateRegistrar, palette: CommandPalettePlugin): CanvasPlugin;
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,152 @@
1
+ /**
2
+ * @bpmnkit/canvas-plugin-connector-catalog — Import API connectors from
3
+ * OpenAPI specs into the BPMN editor via the command palette.
4
+ *
5
+ * Exposes 30+ pre-configured APIs (GitHub, Stripe, Slack, …) as searchable
6
+ * commands in Ctrl+K / ⌘K. Selecting one fetches the spec, generates connector
7
+ * templates via `@bpmnkit/connector-gen`, and registers them in the
8
+ * config-panel-bpmn connector selector — no restart required.
9
+ *
10
+ * An additional "Import from OpenAPI URL…" command accepts any OpenAPI 3.x
11
+ * spec URL for custom or private APIs.
12
+ *
13
+ * ## Usage
14
+ * ```typescript
15
+ * import { createConnectorCatalogPlugin } from "@bpmnkit/plugins/connector-catalog";
16
+ *
17
+ * const catalog = createConnectorCatalogPlugin(configPanelBpmn, palette);
18
+ * const editor = new BpmnEditor({
19
+ * container, xml,
20
+ * plugins: [configPanel, configPanelBpmn, palette, catalog],
21
+ * });
22
+ * ```
23
+ *
24
+ * @packageDocumentation
25
+ */
26
+ import { CATALOG, generateFromCatalog, generateFromUrl } from "@bpmnkit/connector-gen/browser";
27
+ import { CONNECTOR_CATALOG_CSS, CONNECTOR_CATALOG_STYLE_ID, injectConnectorCatalogStyles, } from "./css.js";
28
+ export { CONNECTOR_CATALOG_CSS, CONNECTOR_CATALOG_STYLE_ID, injectConnectorCatalogStyles };
29
+ // ── Toast helper ──────────────────────────────────────────────────────────────
30
+ function showToast(message, variant) {
31
+ const el = document.createElement("div");
32
+ el.className = `bpmnkit-cc-toast bpmnkit-cc-toast--${variant}`;
33
+ el.setAttribute("role", "status");
34
+ el.setAttribute("aria-live", "polite");
35
+ el.textContent = message;
36
+ document.body.append(el);
37
+ return el;
38
+ }
39
+ function resolveToast(el, message, variant, autoDismissMs) {
40
+ el.className = `bpmnkit-cc-toast bpmnkit-cc-toast--${variant}`;
41
+ el.textContent = message;
42
+ setTimeout(() => el.remove(), autoDismissMs);
43
+ }
44
+ // ── Core logic ────────────────────────────────────────────────────────────────
45
+ /**
46
+ * Strips common API descriptor words from an entry name to get a short prefix.
47
+ * "GitHub REST API" → "GitHub", "Twilio Messaging API" → "Twilio".
48
+ */
49
+ function derivePrefix(entryName) {
50
+ return entryName
51
+ .replace(/\s+(REST|Web|Admin|Management|CRM|Messaging|Mail|Payments|Helix|Email|Transactional)?\s*API\s*$/i, "")
52
+ .trim();
53
+ }
54
+ function withPrefix(templates, prefix) {
55
+ return templates.map((t) => ({ ...t, name: `${prefix}: ${t.name}` }));
56
+ }
57
+ function registerAll(templates, registrar) {
58
+ for (const t of templates) {
59
+ registrar.registerTemplate(t);
60
+ }
61
+ }
62
+ async function loadCatalogEntry(id, registrar) {
63
+ const entry = CATALOG.find((e) => e.id === id);
64
+ const label = entry?.name ?? id;
65
+ const toast = showToast(`Importing ${label}…`, "loading");
66
+ try {
67
+ const { templates } = await generateFromCatalog(id);
68
+ const prefix = entry ? derivePrefix(entry.name) : id;
69
+ registerAll(withPrefix(templates, prefix), registrar);
70
+ resolveToast(toast, `${templates.length} operations from ${label} added`, "success", 3000);
71
+ }
72
+ catch (err) {
73
+ const msg = err instanceof Error ? err.message : String(err);
74
+ resolveToast(toast, `Import failed: ${msg}`, "error", 5000);
75
+ }
76
+ }
77
+ async function loadFromUrl(url, registrar) {
78
+ // Derive idPrefix and a display prefix from the hostname
79
+ let idPrefix = "io.custom";
80
+ let prefix = "Custom";
81
+ try {
82
+ const parts = new URL(url).hostname.split(".").filter(Boolean);
83
+ if (parts.length >= 2) {
84
+ idPrefix = parts.slice(-2).reverse().join(".");
85
+ const last = idPrefix.split(".").at(-1) ?? "custom";
86
+ prefix = last.charAt(0).toUpperCase() + last.slice(1);
87
+ }
88
+ }
89
+ catch {
90
+ // url was not parseable — idPrefix/prefix stay as fallback
91
+ }
92
+ const toast = showToast("Fetching spec…", "loading");
93
+ try {
94
+ const { templates } = await generateFromUrl(url, { idPrefix });
95
+ registerAll(withPrefix(templates, prefix), registrar);
96
+ resolveToast(toast, `${templates.length} operations imported`, "success", 3000);
97
+ }
98
+ catch (err) {
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ resolveToast(toast, `Import failed: ${msg}`, "error", 5000);
101
+ }
102
+ }
103
+ // ── Factory ───────────────────────────────────────────────────────────────────
104
+ /**
105
+ * Creates the connector catalog plugin.
106
+ *
107
+ * Registers one command per built-in catalog entry plus an "Import from
108
+ * OpenAPI URL" command. All commands appear in the command palette (Ctrl+K /
109
+ * ⌘K). Selecting a catalog entry fetches the spec, generates connector
110
+ * templates, and registers them immediately in the config panel connector
111
+ * selector.
112
+ *
113
+ * @param registrar - The config-panel-bpmn plugin (or any object with
114
+ * `registerTemplate`).
115
+ * @param palette - The command palette plugin.
116
+ */
117
+ export function createConnectorCatalogPlugin(registrar, palette) {
118
+ let _deregister = null;
119
+ return {
120
+ name: "connector-catalog",
121
+ install() {
122
+ injectConnectorCatalogStyles();
123
+ const catalogCmds = CATALOG.map((entry) => ({
124
+ id: `connector-catalog:${entry.id}`,
125
+ title: `Import API: ${entry.name}`,
126
+ description: entry.description,
127
+ action() {
128
+ void loadCatalogEntry(entry.id, registrar);
129
+ },
130
+ }));
131
+ const urlCmd = {
132
+ id: "connector-catalog:url",
133
+ title: "Import from OpenAPI URL\u2026",
134
+ description: "Fetch any OpenAPI 3.x spec from a URL and add its operations",
135
+ action() {
136
+ palette.pushView([], {
137
+ placeholder: "https://\u2026 (OpenAPI 3.x spec URL)",
138
+ onConfirm(url) {
139
+ void loadFromUrl(url, registrar);
140
+ },
141
+ });
142
+ },
143
+ };
144
+ _deregister = palette.addCommands([...catalogCmds, urlCmd]);
145
+ },
146
+ uninstall() {
147
+ _deregister?.();
148
+ _deregister = null;
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bpmnkit/plugins",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {
@@ -16,6 +16,10 @@
16
16
  "import": "./dist/command-palette/index.js",
17
17
  "types": "./dist/command-palette/index.d.ts"
18
18
  },
19
+ "./connector-catalog": {
20
+ "import": "./dist/connector-catalog/index.js",
21
+ "types": "./dist/connector-catalog/index.d.ts"
22
+ },
19
23
  "./command-palette-editor": {
20
24
  "import": "./dist/command-palette-editor/index.js",
21
25
  "types": "./dist/command-palette-editor/index.d.ts"
@@ -106,11 +110,12 @@
106
110
  "dependencies": {
107
111
  "@bpmnkit/ascii": "0.0.13",
108
112
  "@bpmnkit/canvas": "0.0.13",
113
+ "@bpmnkit/connector-gen": "0.0.7",
109
114
  "@bpmnkit/core": "0.0.13",
110
- "@bpmnkit/editor": "0.0.13",
115
+ "@bpmnkit/editor": "0.0.14",
111
116
  "@bpmnkit/feel": "0.0.12"
112
117
  },
113
- "description": "22 composable canvas plugins for BPMN editors and viewers — minimap, AI chat, process simulation, storage, and more",
118
+ "description": "23 composable canvas plugins for BPMN editors and viewers — minimap, AI chat, process simulation, storage, and more",
114
119
  "keywords": [
115
120
  "bpmn",
116
121
  "plugins",