flexdesk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/THIRD_PARTY_LICENSES.md +53 -0
  4. package/css/base.css +3439 -0
  5. package/css/flexdesk.css +5797 -0
  6. package/css/overrides.css +2349 -0
  7. package/css/reset.css +46 -0
  8. package/css/tokens.css +137 -0
  9. package/dist/charts.js +780 -0
  10. package/dist/charts.js.map +7 -0
  11. package/dist/chunk-3PHCPZHT.js +222 -0
  12. package/dist/chunk-3PHCPZHT.js.map +7 -0
  13. package/dist/chunk-CT4YXXLP.js +1770 -0
  14. package/dist/chunk-CT4YXXLP.js.map +7 -0
  15. package/dist/chunk-DRYCDMEG.js +2217 -0
  16. package/dist/chunk-DRYCDMEG.js.map +7 -0
  17. package/dist/chunk-DVU44T77.js +855 -0
  18. package/dist/chunk-DVU44T77.js.map +7 -0
  19. package/dist/chunk-FL5KFNQH.js +640 -0
  20. package/dist/chunk-FL5KFNQH.js.map +7 -0
  21. package/dist/chunk-FOOS3T5L.js +117 -0
  22. package/dist/chunk-FOOS3T5L.js.map +7 -0
  23. package/dist/chunk-JYWURG5T.js +32 -0
  24. package/dist/chunk-JYWURG5T.js.map +7 -0
  25. package/dist/chunk-TLZUUFOE.js +276 -0
  26. package/dist/chunk-TLZUUFOE.js.map +7 -0
  27. package/dist/chunk-UCJ2WD4D.js +625 -0
  28. package/dist/chunk-UCJ2WD4D.js.map +7 -0
  29. package/dist/chunk-WVFGV5FT.js +205 -0
  30. package/dist/chunk-WVFGV5FT.js.map +7 -0
  31. package/dist/core.js +1098 -0
  32. package/dist/core.js.map +7 -0
  33. package/dist/editor.js +1661 -0
  34. package/dist/editor.js.map +7 -0
  35. package/dist/flexdesk.css +5797 -0
  36. package/dist/host.js +132 -0
  37. package/dist/host.js.map +7 -0
  38. package/dist/reset.css +46 -0
  39. package/dist/tile_registry-6WZPTUZV.js +28 -0
  40. package/dist/tile_registry-6WZPTUZV.js.map +7 -0
  41. package/dist/tiles.js +2068 -0
  42. package/dist/tiles.js.map +7 -0
  43. package/dist/tokens.css +137 -0
  44. package/dist/widgets.js +5438 -0
  45. package/dist/widgets.js.map +7 -0
  46. package/dist/wm.js +4830 -0
  47. package/dist/wm.js.map +7 -0
  48. package/package.json +80 -0
  49. package/src/charts/chart_types.js +699 -0
  50. package/src/charts/data_series_plot_window.js +761 -0
  51. package/src/charts/downsample.js +119 -0
  52. package/src/charts/plot_config.js +176 -0
  53. package/src/charts/plot_popout_window.js +1560 -0
  54. package/src/charts/plotly_wrapper.js +432 -0
  55. package/src/core/event_bus.js +230 -0
  56. package/src/core/logging.js +300 -0
  57. package/src/core/settings.js +813 -0
  58. package/src/core/state_guard.js +382 -0
  59. package/src/core/state_guard_config.js +309 -0
  60. package/src/core/state_machine.js +258 -0
  61. package/src/editor/editor_pane.js +264 -0
  62. package/src/editor/monaco_editor_factory.js +449 -0
  63. package/src/editor/monaco_loader.js +74 -0
  64. package/src/editor/notebook_search.js +460 -0
  65. package/src/editor/notebook_tab_bar.js +456 -0
  66. package/src/editor/notebook_undo_manager.js +108 -0
  67. package/src/editor/split_pane_container.js +197 -0
  68. package/src/help/help_modal.js +409 -0
  69. package/src/help/help_registry.js +65 -0
  70. package/src/host/host.js +69 -0
  71. package/src/host/pywebview_host.js +133 -0
  72. package/src/tiles/config_schema.js +256 -0
  73. package/src/tiles/layout_persistence.js +662 -0
  74. package/src/tiles/tile_base.js +785 -0
  75. package/src/tiles/tile_grid.js +905 -0
  76. package/src/tiles/tile_registry.js +136 -0
  77. package/src/tiling/command_palette.js +328 -0
  78. package/src/tiling/content_registry.js +110 -0
  79. package/src/tiling/desktops.js +133 -0
  80. package/src/tiling/entity_sources.js +179 -0
  81. package/src/tiling/keymap.js +156 -0
  82. package/src/tiling/kind_taxonomy.js +172 -0
  83. package/src/tiling/landing_table.js +717 -0
  84. package/src/tiling/loading_overlay.js +33 -0
  85. package/src/tiling/nav_panel.js +142 -0
  86. package/src/tiling/page_factory.js +215 -0
  87. package/src/tiling/panel_keys.js +145 -0
  88. package/src/tiling/shell.js +437 -0
  89. package/src/tiling/tile_breadcrumb.js +222 -0
  90. package/src/tiling/tile_renderer.js +459 -0
  91. package/src/tiling/tile_tab_menu.js +340 -0
  92. package/src/tiling/tile_tree.js +880 -0
  93. package/src/tiling/wm.js +1352 -0
  94. package/src/ui/base/component_base.js +30 -0
  95. package/src/ui/base/controller_base.js +48 -0
  96. package/src/ui/base/page_base.js +102 -0
  97. package/src/ui/components/about_dialog.js +224 -0
  98. package/src/ui/components/action_dropdown.js +389 -0
  99. package/src/ui/components/attribute_list_editor.js +652 -0
  100. package/src/ui/components/autocomplete_field.js +732 -0
  101. package/src/ui/components/computing_status_window.js +81 -0
  102. package/src/ui/components/confirm_dialog.js +307 -0
  103. package/src/ui/components/context_menu.js +87 -0
  104. package/src/ui/components/data_table.js +2228 -0
  105. package/src/ui/components/detail_header.js +177 -0
  106. package/src/ui/components/drag_reorder.js +0 -0
  107. package/src/ui/components/gallery_picker.js +147 -0
  108. package/src/ui/components/inline_renamer.js +129 -0
  109. package/src/ui/components/managed_window.js +804 -0
  110. package/src/ui/components/modal.js +512 -0
  111. package/src/ui/components/notification_history.js +264 -0
  112. package/src/ui/components/slide_out_panel.js +185 -0
  113. package/src/ui/components/slider_field.js +122 -0
  114. package/src/ui/components/sortable_list.js +309 -0
  115. package/src/ui/components/table_state_store.js +81 -0
  116. package/src/ui/components/toast.js +59 -0
  117. package/src/ui/components/tree_view.js +460 -0
  118. package/src/ui/components/window_taskbar.js +143 -0
  119. package/src/ui/controllers/panel_state_machine.js +634 -0
  120. package/src/ui/controllers/window_chrome_controller.js +659 -0
  121. package/src/ui/notification_center.js +576 -0
  122. package/src/ui/utils/overlay_scrollbar.js +492 -0
  123. package/src/ui/utils/raf_resize_observer.js +31 -0
  124. package/src/ui/utils/tooltip_service.js +406 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/event_bus.js", "../src/core/logging.js", "../src/core/state_guard_config.js", "../src/core/state_guard.js"],
4
+ "sourcesContent": ["/**\r\n * Event Bus (js_new)\r\n *\r\n * Purpose\r\n * -------\r\n * Provide a deterministic, dependency-injected publish/subscribe hub for all front-end modules.\r\n *\r\n * Responsibilities\r\n * - Maintain per-event listener registries with namespace awareness.\r\n * - Support synchronous + async dispatch without DOM bridges or global singletons.\r\n * - Surface diagnostics via the shared logging service instead of ad hoc console calls.\r\n *\r\n * Source Material\r\n * - html/js/event_manager.js (core pub/sub semantics, minus DOM bridge + globals).\r\n * - html/js/debug_utils.js (event history/diagnostics requirements).\r\n *\r\n */\r\n\r\nconst PATTERN_TOKEN_RE = /[.*+?^${}()|[\\]\\\\]/g;\r\nconst HAS_WILDCARD_RE = /[\\*\\?]/;\r\n\r\nexport class EventBus {\r\n constructor({ logger, historyLimit = 200 } = {}) {\r\n this.logger = logger;\r\n this.historyLimit = historyLimit;\r\n this.sequence = 0;\r\n this.listeners = new Map(); // event -> Set<entry>\r\n this.wildcardListeners = new Map(); // id -> entry (regex based)\r\n this.listenerIndex = new Map(); // id -> entry\r\n this.eventHistory = [];\r\n }\r\n\r\n on(eventName, handler, options = {}) {\r\n if (typeof eventName !== 'string' || !eventName.trim()) {\r\n throw new TypeError('eventName must be a non-empty string');\r\n }\r\n if (typeof handler !== 'function') {\r\n throw new TypeError('handler must be a function');\r\n }\r\n\r\n const entry = {\r\n id: ++this.sequence,\r\n eventName,\r\n handler,\r\n namespace: options.namespace ?? null,\r\n once: Boolean(options.once),\r\n priority: options.priority ?? 0,\r\n regex: null,\r\n abortCleanup: null,\r\n };\r\n\r\n if (HAS_WILDCARD_RE.test(eventName)) {\r\n entry.regex = this._compilePattern(eventName);\r\n this.wildcardListeners.set(entry.id, entry);\r\n } else {\r\n if (!this.listeners.has(eventName)) {\r\n this.listeners.set(eventName, new Set());\r\n }\r\n this.listeners.get(eventName).add(entry);\r\n }\r\n\r\n const useAbortSignal = typeof AbortSignal !== 'undefined' && options.signal instanceof AbortSignal;\r\n if (useAbortSignal) {\r\n if (options.signal.aborted) {\r\n // Immediately unsubscribe if already aborted.\r\n return { dispose: () => {}, id: entry.id };\r\n }\r\n const abortFn = () => this.off(entry.id);\r\n options.signal.addEventListener('abort', abortFn, { once: true });\r\n entry.abortCleanup = () => options.signal.removeEventListener('abort', abortFn);\r\n }\r\n\r\n this.listenerIndex.set(entry.id, entry);\r\n return {\r\n id: entry.id,\r\n dispose: () => this.off(entry.id),\r\n };\r\n }\r\n\r\n once(eventName, handler, options = {}) {\r\n return this.on(eventName, handler, { ...options, once: true });\r\n }\r\n\r\n off(target) {\r\n const id = typeof target === 'number' ? target : target?.id;\r\n if (!this.listenerIndex.has(id)) {\r\n return false;\r\n }\r\n const entry = this.listenerIndex.get(id);\r\n this.listenerIndex.delete(id);\r\n\r\n if (entry.abortCleanup) {\r\n try {\r\n entry.abortCleanup();\r\n } catch (err) {\r\n this.logger?.warn?.('event-bus', 'Abort cleanup failed', err);\r\n }\r\n }\r\n\r\n if (entry.regex) {\r\n this.wildcardListeners.delete(entry.id);\r\n } else {\r\n const bucket = this.listeners.get(entry.eventName);\r\n if (bucket) {\r\n bucket.delete(entry);\r\n if (bucket.size === 0) {\r\n this.listeners.delete(entry.eventName);\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n emit(eventName, payload = undefined, options = {}) {\r\n const context = this._createContext(eventName, options);\r\n const listeners = this._collectListeners(eventName, context.namespace);\r\n this._recordHistory(eventName, context.namespace, listeners.length);\r\n return this._invokeListeners(listeners, payload, context);\r\n }\r\n\r\n emitAsync(eventName, payload = undefined, options = {}) {\r\n const context = this._createContext(eventName, options);\r\n const listeners = this._collectListeners(eventName, context.namespace);\r\n this._recordHistory(eventName, context.namespace, listeners.length);\r\n return Promise.resolve().then(() => this._invokeListeners(listeners, payload, context));\r\n }\r\n\r\n listenerCount(eventName) {\r\n const direct = this.listeners.get(eventName)?.size ?? 0;\r\n const wildcard = [...this.wildcardListeners.values()].filter((entry) => entry.regex.test(eventName)).length;\r\n return direct + wildcard;\r\n }\r\n\r\n getHistory() {\r\n return [...this.eventHistory];\r\n }\r\n\r\n clearHistory() {\r\n this.eventHistory.length = 0;\r\n }\r\n\r\n reset() {\r\n this.listeners.clear();\r\n this.wildcardListeners.clear();\r\n this.listenerIndex.clear();\r\n this.eventHistory.length = 0;\r\n }\r\n\r\n _collectListeners(eventName, namespace) {\r\n const matches = [];\r\n const bucket = this.listeners.get(eventName);\r\n if (bucket) {\r\n matches.push(...bucket);\r\n }\r\n\r\n for (const entry of this.wildcardListeners.values()) {\r\n if (entry.regex.test(eventName)) {\r\n matches.push(entry);\r\n }\r\n }\r\n\r\n return matches\r\n .filter((entry) => !entry.namespace || entry.namespace === namespace)\r\n .sort((a, b) => {\r\n if (a.priority === b.priority) {\r\n return a.id - b.id;\r\n }\r\n return b.priority - a.priority;\r\n });\r\n }\r\n\r\n _invokeListeners(listeners, payload, context) {\r\n const results = [];\r\n context.stopPropagation = () => {\r\n context.__stopped = true;\r\n };\r\n\r\n for (const entry of listeners) {\r\n if (context.__stopped) {\r\n break;\r\n }\r\n try {\r\n const result = entry.handler(payload, context);\r\n results.push(result);\r\n if (entry.once) {\r\n this.off(entry.id);\r\n }\r\n } catch (err) {\r\n this._handleListenerError(entry, context, err);\r\n }\r\n }\r\n return results;\r\n }\r\n\r\n _createContext(eventName, options) {\r\n return {\r\n event: eventName,\r\n namespace: options.namespace ?? null,\r\n timestamp: Date.now(),\r\n stopPropagation: () => {},\r\n };\r\n }\r\n\r\n _recordHistory(eventName, namespace, listenerCount) {\r\n this.eventHistory.push({\r\n event: eventName,\r\n namespace,\r\n timestamp: Date.now(),\r\n listeners: listenerCount,\r\n });\r\n if (this.eventHistory.length > this.historyLimit) {\r\n this.eventHistory.shift();\r\n }\r\n }\r\n\r\n _handleListenerError(entry, context, error) {\r\n this.logger?.error?.('event-bus', 'Listener error', {\r\n event: context.event,\r\n namespace: context.namespace,\r\n listenerId: entry.id,\r\n error,\r\n });\r\n }\r\n\r\n _compilePattern(pattern) {\r\n const escaped = pattern.replace(PATTERN_TOKEN_RE, '\\\\$&');\r\n const regexSource = `^${escaped.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.')}$`;\r\n return new RegExp(regexSource);\r\n }\r\n}\r\n", "/**\r\n * Logging + Telemetry Hub (js_new)\r\n *\r\n * Purpose\r\n * -------\r\n * Single sink for structured logs, metrics, and telemetry forwarding from all modules.\r\n *\r\n * Responsibilities\r\n * - Normalize log payloads (level, namespace, metadata) before dispatching to host.\r\n * - Publish `log:*` events for in-app diagnostics dashboards.\r\n * - Replace scattered console/notify usage with a deterministic API.\r\n *\r\n * Source Material\r\n * - html/js/logger.js (log formatting + transports).\r\n * - html/js/debug_utils.js (runtime diagnostics + indicators).\r\n *\r\n */\r\n\r\nconst LEVELS = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];\r\nconst LEVEL_INDEX = new Map(LEVELS.map((level, idx) => [level, idx]));\r\n\r\nconst DEFAULT_NAMESPACE = 'app';\r\n\r\n// Quiet mode level - only warn and above during simulation\r\nconst QUIET_MODE_LEVEL = 'warn';\r\n\r\nexport class LoggingService {\r\n constructor({\r\n name = 'ecosim',\r\n eventBus = null,\r\n minLevel = 'info',\r\n historyLimit = 500,\r\n transports = [],\r\n enableConsole = false,\r\n namespaceLevels = null,\r\n } = {}) {\r\n this.name = name;\r\n this.eventBus = eventBus;\r\n this.historyLimit = historyLimit;\r\n this.entries = [];\r\n this.sequence = 0;\r\n this.transports = new Set();\r\n this.namespaceLevels = { ...(namespaceLevels || {}) };\r\n this._quietMode = false;\r\n this._savedLevel = null;\r\n this.setLevel(minLevel);\r\n\r\n transports.forEach((transport) => this.addTransport(transport));\r\n if (enableConsole) {\r\n this.addTransport(this._consoleTransport.bind(this));\r\n }\r\n }\r\n\r\n setLevel(level) {\r\n const normalized = this._normalizeLevel(level);\r\n this.minLevel = normalized;\r\n }\r\n\r\n getLevel() {\r\n return this.minLevel;\r\n }\r\n\r\n /**\r\n * Enter quiet mode - suppresses DEBUG/INFO logs during simulation.\r\n * Only WARNING and above are logged.\r\n */\r\n enterQuietMode() {\r\n if (this._quietMode) return;\r\n this._quietMode = true;\r\n this._savedLevel = this.minLevel;\r\n if (LEVEL_INDEX.get(this.minLevel) < LEVEL_INDEX.get(QUIET_MODE_LEVEL)) {\r\n this.minLevel = QUIET_MODE_LEVEL;\r\n }\r\n }\r\n\r\n /**\r\n * Exit quiet mode - restores previous log level.\r\n */\r\n exitQuietMode() {\r\n if (!this._quietMode) return;\r\n this._quietMode = false;\r\n if (this._savedLevel !== null) {\r\n this.minLevel = this._savedLevel;\r\n this._savedLevel = null;\r\n }\r\n }\r\n\r\n /**\r\n * Check if quiet mode is active.\r\n */\r\n isQuietMode() {\r\n return this._quietMode;\r\n }\r\n\r\n setNamespaceLevel(namespace, level) {\r\n if (!namespace) return;\r\n this.namespaceLevels[namespace] = this._normalizeLevel(level);\r\n }\r\n\r\n setNamespaceLevels(map) {\r\n if (!map || typeof map !== 'object') return;\r\n Object.entries(map).forEach(([ns, lvl]) => {\r\n if (ns) {\r\n this.namespaceLevels[ns] = this._normalizeLevel(lvl);\r\n }\r\n });\r\n }\r\n\r\n getNamespaceLevel(namespace) {\r\n if (!namespace) return undefined;\r\n return this.namespaceLevels[namespace];\r\n }\r\n\r\n addTransport(transport) {\r\n if (typeof transport !== 'function') {\r\n throw new TypeError('Logging transport must be a function');\r\n }\r\n this.transports.add(transport);\r\n }\r\n\r\n removeTransport(transport) {\r\n this.transports.delete(transport);\r\n }\r\n\r\n log(level, message, metadata = null, options = {}) {\r\n const normalizedLevel = this._normalizeLevel(level);\r\n const namespace = options.namespace || DEFAULT_NAMESPACE;\r\n if (!this._shouldLog(normalizedLevel, namespace)) {\r\n return null;\r\n }\r\n\r\n const entry = this._buildEntry(normalizedLevel, message, metadata, options);\r\n this._recordHistory(entry);\r\n this._emit(entry);\r\n this._dispatch(entry);\r\n return entry;\r\n }\r\n\r\n trace(message, metadata, options) {\r\n return this.log('trace', message, metadata, options);\r\n }\r\n\r\n debug(message, metadata, options) {\r\n return this.log('debug', message, metadata, options);\r\n }\r\n\r\n info(message, metadata, options) {\r\n return this.log('info', message, metadata, options);\r\n }\r\n\r\n warn(message, metadata, options) {\r\n return this.log('warn', message, metadata, options);\r\n }\r\n\r\n error(message, metadata, options) {\r\n return this.log('error', message, metadata, options);\r\n }\r\n\r\n fatal(message, metadata, options) {\r\n return this.log('fatal', message, metadata, options);\r\n }\r\n\r\n scoped(namespace) {\r\n const ns = namespace || DEFAULT_NAMESPACE;\r\n // Codebase convention: callers pass (subcategory, message, meta?) where\r\n // subcategory is a short kebab-case tag and message is the human-readable\r\n // string. Detect this pattern (two leading string args) and use the second\r\n // string as the log message, discarding the subcategory (the scoped\r\n // namespace already provides sufficient context).\r\n // Also supports the standard (message, meta?) single-string form.\r\n const make = (level) => (first, second, third) => {\r\n if (typeof second === 'string') {\r\n return this.log(level, second, third ?? null, { namespace: ns });\r\n }\r\n return this.log(level, first, second ?? null, { namespace: ns });\r\n };\r\n return {\r\n trace: make('trace'),\r\n debug: make('debug'),\r\n info: make('info'),\r\n warn: make('warn'),\r\n error: make('error'),\r\n fatal: make('fatal'),\r\n };\r\n }\r\n\r\n getHistory() {\r\n return [...this.entries];\r\n }\r\n\r\n clearHistory() {\r\n this.entries.length = 0;\r\n }\r\n\r\n _normalizeLevel(level) {\r\n const normalized = typeof level === 'string' ? level.toLowerCase() : '';\r\n if (!LEVEL_INDEX.has(normalized)) {\r\n throw new Error(`Unknown log level \"${level}\"`);\r\n }\r\n return normalized;\r\n }\r\n\r\n _shouldLog(level, namespace) {\r\n const effectiveLevel = this._resolveEffectiveLevel(namespace);\r\n return LEVEL_INDEX.get(level) >= LEVEL_INDEX.get(effectiveLevel);\r\n }\r\n\r\n _resolveEffectiveLevel(namespace) {\r\n if (namespace && this.namespaceLevels?.[namespace]) {\r\n return this.namespaceLevels[namespace];\r\n }\r\n return this.minLevel;\r\n }\r\n\r\n _buildEntry(level, message, metadata, options) {\r\n const namespace = options.namespace || DEFAULT_NAMESPACE;\r\n const tags = options.tags || [];\r\n const context = options.context || null;\r\n const data = this._sanitizeMetadata(metadata);\r\n\r\n return {\r\n id: ++this.sequence,\r\n timestamp: Date.now(),\r\n service: this.name,\r\n level,\r\n namespace,\r\n message,\r\n data,\r\n tags,\r\n context,\r\n };\r\n }\r\n\r\n _sanitizeMetadata(metadata) {\r\n if (!metadata) {\r\n return null;\r\n }\r\n if (metadata instanceof Error) {\r\n return this._errorToObject(metadata);\r\n }\r\n if (typeof metadata === 'object') {\r\n const clone = { ...metadata };\r\n if (metadata.error instanceof Error) {\r\n clone.error = this._errorToObject(metadata.error);\r\n }\r\n return clone;\r\n }\r\n return { value: metadata };\r\n }\r\n\r\n _errorToObject(error) {\r\n return {\r\n name: error.name,\r\n message: error.message,\r\n stack: error.stack,\r\n };\r\n }\r\n\r\n _recordHistory(entry) {\r\n this.entries.push(entry);\r\n if (this.entries.length > this.historyLimit) {\r\n this.entries.shift();\r\n }\r\n }\r\n\r\n _emit(entry) {\r\n if (!this.eventBus) {\r\n return;\r\n }\r\n try {\r\n this.eventBus.emit('log:entry', entry);\r\n } catch (err) {\r\n this._consoleTransport({ ...entry, level: 'warn', message: `Failed to emit log entry: ${err.message}` });\r\n }\r\n }\r\n\r\n _dispatch(entry) {\r\n for (const transport of this.transports) {\r\n try {\r\n transport(entry);\r\n } catch (err) {\r\n this._consoleTransport({\r\n ...entry,\r\n level: 'warn',\r\n namespace: 'logging',\r\n message: `Logging transport failed: ${err.message}`,\r\n data: { transportError: this._errorToObject(err) },\r\n });\r\n }\r\n }\r\n }\r\n\r\n _consoleTransport(entry) {\r\n const prefix = `[${entry.service}][${entry.namespace}]`;\r\n const method = (entry.level === 'trace' || entry.level === 'debug')\r\n ? console.log // eslint-disable-line no-console\r\n : (console[entry.level] || console.log); // eslint-disable-line no-console\r\n method(`${prefix} ${entry.message}`, entry.data ?? ''); // eslint-disable-line no-console\r\n }\r\n}\r\n", "const DEFAULT_ALLOWED_ATTRIBUTES = Object.freeze([\n 'data-testid',\n 'data-field',\n 'data-descriptor-key',\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n 'aria-hidden',\n 'aria-expanded',\n 'aria-selected',\n 'aria-disabled',\n 'aria-checked',\n 'aria-controls',\n 'aria-haspopup',\n 'aria-live',\n 'aria-busy',\n 'role',\n 'title',\n 'twm-has-tooltip',\n 'data-tooltip',\n 'data-help-topic',\n]);\n\nconst DEFAULT_ALLOWED_ATTRIBUTE_PREFIXES = Object.freeze([\n]);\n\nconst DEFAULT_ALLOWED_DATASET_KEYS = Object.freeze([\n 'testid',\n 'phase',\n 'page-key',\n 'deleting',\n // Notification center\n 'notification-id',\n 'notificationId',\n // Plotly.js internal attributes (third-party charting library)\n 'unformatted',\n 'toggle',\n 'notex',\n 'math',\n 'originalindex',\n 'original-index',\n 'gravity',\n 'attr',\n 'val',\n 'subplot',\n 'group',\n 'trace',\n 'point',\n 'curveNumber',\n 'pointNumber',\n // UI state keys used by original HTML structure\n 'active-content',\n 'activeContent',\n 'panel-content',\n 'panelContent',\n 'collapsible-id',\n 'collapsibleId',\n 'collapsible-default',\n 'collapsibleDefault',\n 'twm-collapsible-header',\n 'collapsibleHeader',\n 'twm-collapsible-content',\n 'collapsibleContent',\n 'collapsible-group',\n 'collapsibleGroup',\n 'collapsible-exclusive',\n 'collapsibleExclusive',\n 'collapsible-float',\n 'collapsibleFloat',\n 'collapsible-fill',\n 'collapsibleFill',\n 'tool',\n 'tab',\n 'role',\n 'op',\n 'func-name',\n 'funcName',\n 'func-expr',\n 'funcExpr',\n 'arity',\n 'tooltip',\n 'twm-latex-tooltip',\n 'latexTooltip',\n 'node-type',\n 'nodeType',\n 'twm-node-name',\n 'nodeName',\n 'lang',\n 'playback-control',\n 'playbackControl',\n // Simulation/scenario state keys\n 'status',\n 'scenario-id',\n 'scenarioId',\n 'run-id',\n 'runId',\n 'run-state',\n 'runState',\n 'selected',\n 'active',\n 'disabled',\n 'expanded',\n 'collapsed',\n 'visible',\n 'hidden',\n // Node/canvas state keys\n 'node-id',\n 'nodeId',\n 'connector-id',\n 'connectorId',\n 'connector-type',\n 'connectorType',\n 'connection-id',\n 'connectionId',\n 'input-index',\n 'inputIndex',\n 'output-index',\n 'outputIndex',\n 'port-index',\n 'portIndex',\n // Scenario editor keys\n 'source',\n 'series-id',\n 'seriesId',\n 'dataset-id',\n 'datasetId',\n 'mirror-input-bound',\n 'mirrorInputBound',\n 'mirror-change-bound',\n 'mirrorChangeBound',\n 'mirror-input',\n 'mirrorInput',\n 'bound',\n 'field',\n 'key',\n 'namespace',\n 'namespace-id',\n 'namespaceId',\n 'tab-id',\n 'tabId',\n 'param-id',\n 'paramId',\n 'target-id',\n 'targetId',\n 'override-type',\n 'overrideType',\n // Tree view component keys\n 'item-id',\n 'itemId',\n 'category-id',\n 'categoryId',\n // Calibration page keys\n 'info-for',\n 'infoFor',\n 'column',\n // Data page keys\n 'readonly',\n 'id',\n 'action',\n 'type',\n 'name',\n 'path',\n 'index',\n 'count',\n 'total',\n 'page',\n 'sort',\n 'order',\n 'filter',\n 'search',\n 'value',\n 'label',\n 'title',\n 'description',\n // DSL generator keys\n 'dsl-state',\n 'dslState',\n 'dsl-section-registered',\n 'dslSectionRegistered',\n 'dsl-scrollbars-installed',\n 'dslScrollbarsInstalled',\n 'dsl-tabs-bound',\n 'dslTabsBound',\n 'dsl-controls-bound',\n 'dslControlsBound',\n // Inline highlighter keys\n 'inline-hl',\n 'inlineHl',\n 'tooltip',\n // Overlay scrollbar keys (UI-only, not state storage)\n 'scrollable',\n 'scrollable-x',\n 'scrollableX',\n 'scrollable-y',\n 'scrollableY',\n // ManagedWindow component keys\n 'window-id',\n 'windowId',\n // Help system keys\n 'help-topic',\n 'helpTopic',\n]);\n\nconst DEFAULT_OVERRIDES = Object.freeze([\n {\n // Panel controller writes dataset hooks for field identification/focus.\n pattern: /js_new\\/ui\\/controllers\\/panel_controller\\.js/,\n datasetKeys: ['field', 'descriptor-key', 'descriptorKey'],\n attributes: ['data-field', 'data-descriptor-key'],\n attributePrefixes: [],\n },\n]);\n\nconst DEFAULT_MODE = typeof window !== 'undefined' && Boolean(window.__ECOSIM_DEBUG__)\n ? 'strict'\n : 'warn';\n\nexport const DEFAULT_STATE_GUARD_CONFIG = Object.freeze({\n mode: DEFAULT_MODE,\n allowedAttributes: DEFAULT_ALLOWED_ATTRIBUTES,\n allowedAttributePrefixes: DEFAULT_ALLOWED_ATTRIBUTE_PREFIXES,\n allowedDatasetKeys: DEFAULT_ALLOWED_DATASET_KEYS,\n moduleOverrides: DEFAULT_OVERRIDES,\n});\n\nexport function normalizeStateGuardConfig(config = {}) {\n if (!config || typeof config !== 'object') {\n return { ...DEFAULT_STATE_GUARD_CONFIG };\n }\n return {\n mode: normalizeMode(config.mode ?? DEFAULT_STATE_GUARD_CONFIG.mode),\n allowedAttributes: normalizeStringList(\n config.allowedAttributes ?? DEFAULT_STATE_GUARD_CONFIG.allowedAttributes,\n ),\n allowedAttributePrefixes: normalizeStringList(\n config.allowedAttributePrefixes ?? DEFAULT_STATE_GUARD_CONFIG.allowedAttributePrefixes,\n ),\n allowedDatasetKeys: normalizeStringList(\n config.allowedDatasetKeys ?? DEFAULT_STATE_GUARD_CONFIG.allowedDatasetKeys,\n ),\n moduleOverrides: normalizeOverrides(\n config.moduleOverrides ?? DEFAULT_STATE_GUARD_CONFIG.moduleOverrides,\n ),\n };\n}\n\nfunction normalizeMode(mode) {\n const normalized = typeof mode === 'string' ? mode.toLowerCase() : '';\n return normalized === 'off' || normalized === 'warn' || normalized === 'strict'\n ? normalized\n : DEFAULT_STATE_GUARD_CONFIG.mode;\n}\n\nfunction normalizeStringList(value) {\n if (!value) {\n return [];\n }\n if (Array.isArray(value)) {\n return value\n .map((entry) => (typeof entry === 'string' ? entry.trim() : ''))\n .filter(Boolean);\n }\n if (typeof value === 'string') {\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n }\n return [];\n}\n\nfunction normalizeOverrides(overrides) {\n if (!Array.isArray(overrides)) {\n return [];\n }\n return overrides\n .map((entry) => normalizeOverride(entry))\n .filter(Boolean);\n}\n\nfunction normalizeOverride(entry) {\n if (!entry || typeof entry !== 'object') {\n return null;\n }\n if (!entry.pattern) {\n return null;\n }\n const attributes = normalizeStringList(entry.attributes);\n const datasetKeys = normalizeStringList(entry.datasetKeys);\n const prefixes = normalizeStringList(entry.attributePrefixes);\n if (!attributes.length && !datasetKeys.length && !prefixes.length) {\n return null;\n }\n return {\n pattern: patternToRegExp(entry.pattern),\n attributes,\n datasetKeys,\n attributePrefixes: prefixes,\n };\n}\n\nfunction patternToRegExp(pattern) {\n if (pattern instanceof RegExp) {\n return pattern;\n }\n const source = String(pattern ?? '')\n .replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(source);\n}\n", "/**\r\n * StateGuardService\r\n * ------------------\r\n * Runtime enforcement layer that blocks storing application state inside DOM attributes.\r\n * Hooks Element attribute/dataset APIs and emits violations through the event bus.\r\n */\r\n\r\nimport { DEFAULT_STATE_GUARD_CONFIG, normalizeStateGuardConfig } from './state_guard_config.js';\r\n\r\nconst HOOK_REGISTRY = {\r\n installed: false,\r\n service: null,\r\n originals: {\r\n setAttribute: null,\r\n removeAttribute: null,\r\n getAttribute: null,\r\n },\r\n datasetDescriptor: null,\r\n datasetProxyCache: new WeakMap(),\r\n};\r\n\r\nconst STACK_CACHE = new Map();\r\nconst DATA_ATTRIBUTE_PREFIX = 'data-';\r\nconst EVENT_CHANNELS = Object.freeze({\r\n READY: 'state-guard:ready',\r\n VIOLATION: 'state-guard:violation',\r\n MODE_CHANGED: 'state-guard:mode-changed',\r\n});\r\n\r\nexport class StateGuardService {\r\n constructor({\r\n eventBus = null,\r\n logger = null,\r\n config = DEFAULT_STATE_GUARD_CONFIG,\r\n } = {}) {\r\n this.eventBus = eventBus;\r\n this.logger = logger;\r\n this.enabled = true;\r\n this.bypassDepth = 0;\r\n this.config = normalizeStateGuardConfig(config);\r\n this.mode = this.config.mode;\r\n this.allowedAttributes = new Set(this.config.allowedAttributes.map((attr) => attr.toLowerCase()));\r\n this.allowedAttributePrefixes = this.config.allowedAttributePrefixes.map((attr) => attr.toLowerCase());\r\n this.allowedDatasetKeys = new Set(this.config.allowedDatasetKeys.map((key) => key.toLowerCase()));\r\n this.moduleOverrides = (this.config.moduleOverrides ?? []).map((entry) => ({\r\n pattern: entry.pattern,\r\n attributes: new Set(entry.attributes.map((attr) => attr.toLowerCase())),\r\n datasetKeys: new Set(entry.datasetKeys.map((key) => key.toLowerCase())),\r\n attributePrefixes: entry.attributePrefixes.map((prefix) => prefix.toLowerCase()),\r\n }));\r\n this.#installHooks();\r\n }\r\n\r\n setMode(mode) {\r\n const normalized = typeof mode === 'string' ? mode.toLowerCase() : '';\r\n if (!['off', 'warn', 'strict'].includes(normalized)) {\r\n throw new Error(`Invalid state guard mode \"${mode}\"`);\r\n }\r\n if (this.mode === normalized) {\r\n return this.mode;\r\n }\r\n this.mode = normalized;\r\n this.eventBus?.emit?.(EVENT_CHANNELS.MODE_CHANGED, {\r\n mode: this.mode,\r\n timestamp: Date.now(),\r\n });\r\n return this.mode;\r\n }\r\n\r\n getMode() {\r\n return this.mode;\r\n }\r\n\r\n allow(modulePattern, attributes = [], { datasetKeys = [], attributePrefixes = [] } = {}) {\r\n const pattern = modulePattern instanceof RegExp\r\n ? modulePattern\r\n : new RegExp(String(modulePattern ?? '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\r\n const entry = {\r\n pattern,\r\n attributes: new Set(attributes.map((attr) => String(attr).toLowerCase())),\r\n datasetKeys: new Set(datasetKeys.map((key) => String(key).toLowerCase())),\r\n attributePrefixes: attributePrefixes.map((prefix) => String(prefix).toLowerCase()),\r\n };\r\n this.moduleOverrides.push(entry);\r\n return () => {\r\n const idx = this.moduleOverrides.indexOf(entry);\r\n if (idx >= 0) {\r\n this.moduleOverrides.splice(idx, 1);\r\n }\r\n };\r\n }\r\n\r\n executeWithBypass(label, fn) {\r\n if (typeof fn !== 'function') {\r\n throw new TypeError('executeWithBypass requires a function');\r\n }\r\n try {\r\n this.bypassDepth += 1;\r\n return fn();\r\n } finally {\r\n this.bypassDepth = Math.max(0, this.bypassDepth - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Execute an async function with state guard bypass.\r\n * The bypass remains active for the entire duration of the async operation.\r\n * @param {string} label - Label for debugging\r\n * @param {Function} fn - Async function to execute\r\n * @returns {Promise<*>} Result of the function\r\n */\r\n async executeWithBypassAsync(label, fn) {\r\n if (typeof fn !== 'function') {\r\n throw new TypeError('executeWithBypassAsync requires a function');\r\n }\r\n try {\r\n this.bypassDepth += 1;\r\n return await fn();\r\n } finally {\r\n this.bypassDepth = Math.max(0, this.bypassDepth - 1);\r\n }\r\n }\r\n\r\n handleAttributeMutation(element, action, attribute, value) {\r\n const attrName = this.#normalizeAttribute(attribute);\r\n if (!this.#shouldGuard(attrName)) {\r\n return;\r\n }\r\n this.#evaluateMutation({\r\n action,\r\n attribute: attrName,\r\n element,\r\n value,\r\n source: 'attribute',\r\n });\r\n }\r\n\r\n handleDatasetMutation(element, key, value, { deleting = false } = {}) {\r\n const attrName = this.#datasetKeyToAttribute(key);\r\n if (!this.#shouldGuard(attrName)) {\r\n return;\r\n }\r\n this.#evaluateMutation({\r\n action: deleting ? 'dataset:delete' : 'dataset:set',\r\n attribute: attrName,\r\n element,\r\n value,\r\n source: 'dataset',\r\n });\r\n }\r\n\r\n #installHooks() {\r\n if (typeof Element === 'undefined' || typeof HTMLElement === 'undefined') {\r\n this.enabled = false;\r\n this.logger?.warn?.('state-guard', 'DOM environment unavailable; guard disabled');\r\n return;\r\n }\r\n installDomHooks(this);\r\n this.eventBus?.emit?.(EVENT_CHANNELS.READY, {\r\n mode: this.mode,\r\n timestamp: Date.now(),\r\n });\r\n }\r\n\r\n #shouldGuard(attribute) {\r\n if (!this.enabled) {\r\n return false;\r\n }\r\n if (this.mode === 'off') {\r\n return false;\r\n }\r\n if (this.bypassDepth > 0) {\r\n return false;\r\n }\r\n if (!attribute || !attribute.startsWith(DATA_ATTRIBUTE_PREFIX)) {\r\n return false;\r\n }\r\n if (this.allowedAttributes.has(attribute)) {\r\n return false;\r\n }\r\n if (attribute.startsWith(DATA_ATTRIBUTE_PREFIX)) {\r\n const datasetKey = attribute.slice(DATA_ATTRIBUTE_PREFIX.length);\r\n if (this.allowedDatasetKeys.has(datasetKey)) {\r\n return false;\r\n }\r\n }\r\n if (this.allowedAttributePrefixes.some((prefix) => attribute.startsWith(prefix))) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n #evaluateMutation({ action, attribute, element, value, source }) {\r\n const moduleKey = this.#resolveModuleFromStack();\r\n if (this.#isAllowedForModule(moduleKey, attribute)) {\r\n return;\r\n }\r\n const payload = {\r\n attribute,\r\n action,\r\n source,\r\n module: moduleKey,\r\n mode: this.mode,\r\n timestamp: Date.now(),\r\n };\r\n this.logger?.warn?.('state-guard', 'Blocked DOM state mutation', {\r\n ...payload,\r\n valuePreview: this.#previewValue(value),\r\n });\r\n this.eventBus?.emit?.(EVENT_CHANNELS.VIOLATION, payload);\r\n if (this.mode === 'strict') {\r\n const label = moduleKey ? `${moduleKey}` : 'unknown module';\r\n throw new Error(`StateGuard blocked ${action} on \"${attribute}\" from ${label}`);\r\n }\r\n }\r\n\r\n #isAllowedForModule(moduleKey, attribute) {\r\n if (!moduleKey || !this.moduleOverrides.length) {\r\n return false;\r\n }\r\n const lowerAttr = attribute.toLowerCase();\r\n for (const entry of this.moduleOverrides) {\r\n if (!entry.pattern.test(moduleKey)) {\r\n continue;\r\n }\r\n if (entry.attributes.has(lowerAttr)) {\r\n return true;\r\n }\r\n if (entry.attributePrefixes.some((prefix) => lowerAttr.startsWith(prefix))) {\r\n return true;\r\n }\r\n if (lowerAttr.startsWith(DATA_ATTRIBUTE_PREFIX)) {\r\n const datasetKey = lowerAttr.slice(DATA_ATTRIBUTE_PREFIX.length);\r\n if (entry.datasetKeys.has(datasetKey)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n #normalizeAttribute(attribute) {\r\n if (!attribute) {\r\n return '';\r\n }\r\n return String(attribute).toLowerCase();\r\n }\r\n\r\n #datasetKeyToAttribute(key) {\r\n if (!key && key !== 0) {\r\n return '';\r\n }\r\n const normalized = String(key)\r\n .replace(/([A-Z])/g, '-$1')\r\n .replace(/[^a-zA-Z0-9_-]/g, '-')\r\n .toLowerCase()\r\n .replace(/-{2,}/g, '-')\r\n .replace(/^-+/, '')\r\n .replace(/-+$/, '');\r\n if (!normalized) {\r\n return '';\r\n }\r\n return `${DATA_ATTRIBUTE_PREFIX}${normalized}`;\r\n }\r\n\r\n #resolveModuleFromStack() {\r\n const stack = new Error().stack;\r\n if (!stack) {\r\n return null;\r\n }\r\n if (STACK_CACHE.has(stack)) {\r\n return STACK_CACHE.get(stack);\r\n }\r\n const lines = stack.split('\\n');\r\n let modulePath = null;\r\n for (const line of lines) {\r\n const match = line.match(/(js_new\\/[^)\\s]+)/);\r\n if (match) {\r\n modulePath = match[1];\r\n break;\r\n }\r\n }\r\n if (STACK_CACHE.size > 500) {\r\n STACK_CACHE.clear();\r\n }\r\n STACK_CACHE.set(stack, modulePath);\r\n return modulePath;\r\n }\r\n\r\n #previewValue(value) {\r\n if (value === null || value === undefined) {\r\n return String(value);\r\n }\r\n if (typeof value === 'object') {\r\n return '[object]';\r\n }\r\n const str = String(value);\r\n return str.length > 50 ? `${str.slice(0, 47)}...` : str;\r\n }\r\n}\r\n\r\nfunction installDomHooks(service) {\r\n if (HOOK_REGISTRY.installed) {\r\n HOOK_REGISTRY.service = service;\r\n return;\r\n }\r\n HOOK_REGISTRY.installed = true;\r\n HOOK_REGISTRY.service = service;\r\n\r\n const { setAttribute, removeAttribute } = Element.prototype;\r\n const nativeSetAttribute = setAttribute;\r\n const nativeRemoveAttribute = removeAttribute;\r\n\r\n HOOK_REGISTRY.originals.setAttribute = nativeSetAttribute;\r\n HOOK_REGISTRY.originals.removeAttribute = nativeRemoveAttribute;\r\n\r\n Element.prototype.setAttribute = function patchedSetAttribute(name, value) {\r\n const guard = HOOK_REGISTRY.service;\r\n try {\r\n guard?.handleAttributeMutation(this, 'setAttribute', name, value);\r\n } catch (error) {\r\n throw error;\r\n }\r\n return nativeSetAttribute.call(this, name, value);\r\n };\r\n\r\n Element.prototype.removeAttribute = function patchedRemoveAttribute(name) {\r\n const guard = HOOK_REGISTRY.service;\r\n try {\r\n guard?.handleAttributeMutation(this, 'removeAttribute', name, undefined);\r\n } catch (error) {\r\n throw error;\r\n }\r\n return nativeRemoveAttribute.call(this, name);\r\n };\r\n\r\n wrapDataset(service);\r\n}\r\n\r\nfunction wrapDataset(service) {\r\n const descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'dataset');\r\n if (!descriptor || typeof descriptor.get !== 'function') {\r\n return;\r\n }\r\n HOOK_REGISTRY.datasetDescriptor = descriptor;\r\n Object.defineProperty(HTMLElement.prototype, 'dataset', {\r\n configurable: true,\r\n enumerable: descriptor.enumerable,\r\n get: function datasetGetter() {\r\n const nativeDataset = descriptor.get.call(this);\r\n if (!nativeDataset || typeof nativeDataset !== 'object') {\r\n return nativeDataset;\r\n }\r\n const cached = HOOK_REGISTRY.datasetProxyCache.get(nativeDataset);\r\n if (cached && cached.proxy) {\r\n cached.element = this;\r\n return cached.proxy;\r\n }\r\n const proxyState = { element: this };\r\n const proxy = new Proxy(nativeDataset, {\r\n set(target, prop, value) {\r\n const guard = HOOK_REGISTRY.service;\r\n const key = typeof prop === 'string' ? prop : null;\r\n if (guard && key) {\r\n guard.handleDatasetMutation(proxyState.element, key, value);\r\n }\r\n return Reflect.set(target, prop, value);\r\n },\r\n deleteProperty(target, prop) {\r\n const guard = HOOK_REGISTRY.service;\r\n const key = typeof prop === 'string' ? prop : null;\r\n if (guard && key) {\r\n guard.handleDatasetMutation(proxyState.element, key, undefined, { deleting: true });\r\n }\r\n return Reflect.deleteProperty(target, prop);\r\n },\r\n });\r\n HOOK_REGISTRY.datasetProxyCache.set(nativeDataset, { proxy, element: this });\r\n return proxy;\r\n },\r\n });\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }