flexdesk 0.17.5 → 0.17.7

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 (282) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/LICENSE +0 -0
  3. package/README.md +0 -0
  4. package/THIRD_PARTY_LICENSES.md +0 -0
  5. package/canvas.js +0 -0
  6. package/charts.js +0 -0
  7. package/core.js +0 -0
  8. package/css/base.css +68 -0
  9. package/css/flexdesk.css +68 -0
  10. package/css/overrides.css +0 -0
  11. package/css/reset.css +0 -0
  12. package/css/tokens.css +11 -0
  13. package/dist/canvas.js +0 -0
  14. package/dist/canvas.js.map +0 -0
  15. package/dist/charts.js +0 -0
  16. package/dist/charts.js.map +0 -0
  17. package/dist/chunk-3PHCPZHT.js +0 -0
  18. package/dist/chunk-3PHCPZHT.js.map +0 -0
  19. package/dist/chunk-CVMCZZX2.js +0 -0
  20. package/dist/chunk-CVMCZZX2.js.map +0 -0
  21. package/dist/chunk-D3COLZZ2.js +0 -0
  22. package/dist/chunk-D3COLZZ2.js.map +0 -0
  23. package/dist/chunk-FOOS3T5L.js +0 -0
  24. package/dist/chunk-FOOS3T5L.js.map +0 -0
  25. package/dist/chunk-GOQLR5WR.js +0 -0
  26. package/dist/chunk-GOQLR5WR.js.map +0 -0
  27. package/dist/chunk-HNU6MM2B.js +0 -0
  28. package/dist/chunk-HNU6MM2B.js.map +0 -0
  29. package/dist/chunk-HYJYYEPK.js +0 -0
  30. package/dist/chunk-HYJYYEPK.js.map +0 -0
  31. package/dist/chunk-JKZLNKG6.js +0 -0
  32. package/dist/chunk-JKZLNKG6.js.map +0 -0
  33. package/dist/chunk-JYWURG5T.js +0 -0
  34. package/dist/chunk-JYWURG5T.js.map +0 -0
  35. package/dist/chunk-LWV23YVE.js +0 -0
  36. package/dist/chunk-LWV23YVE.js.map +0 -0
  37. package/dist/chunk-N7HC3ADV.js +0 -0
  38. package/dist/chunk-N7HC3ADV.js.map +0 -0
  39. package/dist/chunk-RKNFBX5K.js +0 -0
  40. package/dist/chunk-RKNFBX5K.js.map +0 -0
  41. package/dist/chunk-RMTRWWEO.js +0 -0
  42. package/dist/chunk-RMTRWWEO.js.map +0 -0
  43. package/dist/chunk-UURZ37SD.js +0 -0
  44. package/dist/chunk-UURZ37SD.js.map +0 -0
  45. package/dist/chunk-UWO43BZU.js +0 -0
  46. package/dist/chunk-UWO43BZU.js.map +0 -0
  47. package/dist/chunk-WVFGV5FT.js +0 -0
  48. package/dist/chunk-WVFGV5FT.js.map +0 -0
  49. package/dist/core.js +0 -0
  50. package/dist/core.js.map +0 -0
  51. package/dist/editor.js +12 -0
  52. package/dist/editor.js.map +2 -2
  53. package/dist/flexdesk.css +68 -0
  54. package/dist/flow.js +0 -0
  55. package/dist/flow.js.map +0 -0
  56. package/dist/host.js +0 -0
  57. package/dist/host.js.map +0 -0
  58. package/dist/reset.css +0 -0
  59. package/dist/tile_registry-6WZPTUZV.js +0 -0
  60. package/dist/tile_registry-6WZPTUZV.js.map +0 -0
  61. package/dist/tiles.js +0 -0
  62. package/dist/tiles.js.map +0 -0
  63. package/dist/tokens.css +11 -0
  64. package/dist/widgets.js +0 -0
  65. package/dist/widgets.js.map +0 -0
  66. package/dist/wm.js +0 -0
  67. package/dist/wm.js.map +0 -0
  68. package/docs/README.md +0 -0
  69. package/docs/best-practices.md +0 -0
  70. package/docs/components/charts.md +0 -0
  71. package/docs/components/command-palette.md +0 -0
  72. package/docs/components/conversation.md +0 -0
  73. package/docs/components/data-table-grid.md +0 -0
  74. package/docs/components/data-table.md +0 -0
  75. package/docs/components/editor.md +21 -0
  76. package/docs/components/flow-canvas-editor.md +0 -0
  77. package/docs/components/flow-editors.md +0 -0
  78. package/docs/components/flow-lane-editor.md +0 -0
  79. package/docs/components/flow-outline-editor.md +0 -0
  80. package/docs/components/forms-and-dialogs.md +0 -0
  81. package/docs/components/input-fields.md +0 -0
  82. package/docs/components/keymap.md +0 -0
  83. package/docs/components/layout-widgets.md +38 -0
  84. package/docs/components/markdown-and-outline.md +0 -0
  85. package/docs/components/menus.md +0 -0
  86. package/docs/components/notifications.md +0 -0
  87. package/docs/components/panels-and-desktops.md +0 -0
  88. package/docs/components/record-list-and-fact-table.md +0 -0
  89. package/docs/components/settings-view.md +0 -0
  90. package/docs/components/shell.md +0 -0
  91. package/docs/components/slide-out-panel.md +0 -0
  92. package/docs/components/tiles.md +0 -0
  93. package/docs/components/wizard.md +0 -0
  94. package/docs/concepts/building-and-packaging.md +0 -0
  95. package/docs/concepts/domain-neutrality.md +0 -0
  96. package/docs/concepts/host-port.md +0 -0
  97. package/docs/concepts/packages-and-entry-points.md +0 -0
  98. package/docs/concepts/peer-dependencies.md +0 -0
  99. package/docs/concepts/state-guard.md +0 -0
  100. package/docs/concepts/styling.md +0 -0
  101. package/docs/quickstart.md +0 -0
  102. package/editor.js +0 -0
  103. package/flow.js +0 -0
  104. package/host.js +0 -0
  105. package/package.json +1 -1
  106. package/src/canvas/canvas_adapter.js +0 -0
  107. package/src/canvas/edge_router.js +0 -0
  108. package/src/canvas/graph/connector_router.js +0 -0
  109. package/src/canvas/graph/history_service.js +0 -0
  110. package/src/canvas/graph/node_platform.js +0 -0
  111. package/src/canvas/index.js +0 -0
  112. package/src/canvas/layered_layout.js +0 -0
  113. package/src/charts/chart_types.js +0 -0
  114. package/src/charts/data_series_plot_window.js +0 -0
  115. package/src/charts/downsample.js +0 -0
  116. package/src/charts/plot_config.js +0 -0
  117. package/src/charts/plot_config_editor.js +0 -0
  118. package/src/charts/plot_grid.js +0 -0
  119. package/src/charts/plot_popout_window.js +0 -0
  120. package/src/charts/plotly_wrapper.js +0 -0
  121. package/src/charts/series_transforms.js +0 -0
  122. package/src/core/event_bus.js +0 -0
  123. package/src/core/logging.js +0 -0
  124. package/src/core/settings.js +0 -0
  125. package/src/core/state_guard.js +0 -0
  126. package/src/core/state_guard_config.js +0 -0
  127. package/src/core/state_machine.js +0 -0
  128. package/src/editor/editor_pane.js +0 -0
  129. package/src/editor/monaco_editor_factory.js +7 -1
  130. package/src/editor/monaco_loader.js +37 -0
  131. package/src/editor/notebook_search.js +0 -0
  132. package/src/editor/notebook_tab_bar.js +0 -0
  133. package/src/editor/notebook_undo_manager.js +0 -0
  134. package/src/editor/split_pane_container.js +0 -0
  135. package/src/flow/canvas_editor/connections.js +0 -0
  136. package/src/flow/canvas_editor/editor.js +0 -0
  137. package/src/flow/canvas_editor/index.js +0 -0
  138. package/src/flow/canvas_editor/layout.js +0 -0
  139. package/src/flow/canvas_editor/strings.js +0 -0
  140. package/src/flow/kit/always_before.js +0 -0
  141. package/src/flow/kit/catalogue.js +0 -0
  142. package/src/flow/kit/chip_input.js +0 -0
  143. package/src/flow/kit/dom.js +0 -0
  144. package/src/flow/kit/findings.js +0 -0
  145. package/src/flow/kit/history.js +0 -0
  146. package/src/flow/kit/index.js +0 -0
  147. package/src/flow/kit/keys.js +0 -0
  148. package/src/flow/kit/logic_graph.js +0 -0
  149. package/src/flow/kit/references.js +0 -0
  150. package/src/flow/kit/settings_panel.js +0 -0
  151. package/src/flow/kit/settings_schema.js +0 -0
  152. package/src/flow/kit/step_picker.js +0 -0
  153. package/src/flow/kit/strings.js +0 -0
  154. package/src/flow/kit/value_picker.js +0 -0
  155. package/src/flow/kit/widgets.js +0 -0
  156. package/src/flow/lanes/editor.js +0 -0
  157. package/src/flow/lanes/index.js +0 -0
  158. package/src/flow/lanes/layout.js +0 -0
  159. package/src/flow/lanes/pipeline.js +0 -0
  160. package/src/flow/lanes/preview.js +0 -0
  161. package/src/flow/lanes/strings.js +0 -0
  162. package/src/flow/outline/editor.js +0 -0
  163. package/src/flow/outline/index.js +0 -0
  164. package/src/flow/outline/mapping.js +0 -0
  165. package/src/flow/outline/menu.js +0 -0
  166. package/src/flow/outline/operations.js +0 -0
  167. package/src/flow/outline/recognise.js +0 -0
  168. package/src/flow/outline/strings.js +0 -0
  169. package/src/help/help_modal.js +0 -0
  170. package/src/help/help_registry.js +0 -0
  171. package/src/host/external_links.js +0 -0
  172. package/src/host/file_picker.js +0 -0
  173. package/src/host/host.js +0 -0
  174. package/src/host/photino_host.js +0 -0
  175. package/src/host/photino_host.md +0 -0
  176. package/src/host/pywebview_host.js +0 -0
  177. package/src/tiles/chart_tiles.js +0 -0
  178. package/src/tiles/config_schema.js +0 -0
  179. package/src/tiles/figure_tile.js +0 -0
  180. package/src/tiles/layout_persistence.js +0 -0
  181. package/src/tiles/list_tiles.js +0 -0
  182. package/src/tiles/scope_picker.js +0 -0
  183. package/src/tiles/tile_base.js +0 -0
  184. package/src/tiles/tile_config_form.js +0 -0
  185. package/src/tiles/tile_grid.js +0 -0
  186. package/src/tiles/tile_registry.js +0 -0
  187. package/src/tiling/bottom_panel_tabs.js +0 -0
  188. package/src/tiling/command_palette.js +0 -0
  189. package/src/tiling/content_registry.js +0 -0
  190. package/src/tiling/desktops.js +0 -0
  191. package/src/tiling/entity_sources.js +0 -0
  192. package/src/tiling/keymap.js +0 -0
  193. package/src/tiling/kind_taxonomy.js +0 -0
  194. package/src/tiling/landing_table.js +0 -0
  195. package/src/tiling/loading_overlay.js +0 -0
  196. package/src/tiling/nav_panel.js +0 -0
  197. package/src/tiling/page_factory.js +0 -0
  198. package/src/tiling/panel_availability.js +0 -0
  199. package/src/tiling/panel_keys.js +0 -0
  200. package/src/tiling/shell.js +0 -0
  201. package/src/tiling/tab_strip.js +0 -0
  202. package/src/tiling/tile_breadcrumb.js +0 -0
  203. package/src/tiling/tile_renderer.js +0 -0
  204. package/src/tiling/tile_tab_menu.js +0 -0
  205. package/src/tiling/tile_tree.js +0 -0
  206. package/src/tiling/wm.js +0 -0
  207. package/src/tiling/zoom.js +0 -0
  208. package/src/ui/base/component_base.js +0 -0
  209. package/src/ui/base/controller_base.js +0 -0
  210. package/src/ui/base/page_base.js +0 -0
  211. package/src/ui/components/about_dialog.js +0 -0
  212. package/src/ui/components/action_dropdown.js +0 -0
  213. package/src/ui/components/alert_log.js +0 -0
  214. package/src/ui/components/alerts_pane.js +0 -0
  215. package/src/ui/components/attribute_list_editor.js +0 -0
  216. package/src/ui/components/autocomplete_field.js +0 -0
  217. package/src/ui/components/cell_editor_host.js +0 -0
  218. package/src/ui/components/cell_editors.js +0 -0
  219. package/src/ui/components/cell_grid.js +0 -0
  220. package/src/ui/components/cell_paste.js +0 -0
  221. package/src/ui/components/cell_selection.js +0 -0
  222. package/src/ui/components/choice_controls.js +0 -0
  223. package/src/ui/components/color_field.js +0 -0
  224. package/src/ui/components/color_list_field.js +0 -0
  225. package/src/ui/components/column_fit.js +0 -0
  226. package/src/ui/components/column_groups.js +0 -0
  227. package/src/ui/components/column_order.js +0 -0
  228. package/src/ui/components/computing_status_window.js +0 -0
  229. package/src/ui/components/confirm_dialog.js +0 -0
  230. package/src/ui/components/context_menu.js +0 -0
  231. package/src/ui/components/conversation_view.js +0 -0
  232. package/src/ui/components/crosstab.js +0 -0
  233. package/src/ui/components/data_table.js +0 -0
  234. package/src/ui/components/detail_header.js +0 -0
  235. package/src/ui/components/document_outline.js +0 -0
  236. package/src/ui/components/drag_reorder.js +0 -0
  237. package/src/ui/components/fact_table.js +0 -0
  238. package/src/ui/components/fill_handle.js +0 -0
  239. package/src/ui/components/gallery_picker.js +0 -0
  240. package/src/ui/components/header_actions.js +0 -0
  241. package/src/ui/components/inline_renamer.js +0 -0
  242. package/src/ui/components/job_progress.js +0 -0
  243. package/src/ui/components/managed_window.js +0 -0
  244. package/src/ui/components/menu_bar.js +0 -0
  245. package/src/ui/components/modal.js +0 -0
  246. package/src/ui/components/notification_history.js +0 -0
  247. package/src/ui/components/progress.js +0 -0
  248. package/src/ui/components/record_list.js +0 -0
  249. package/src/ui/components/row_activation.js +0 -0
  250. package/src/ui/components/section_stack.js +0 -0
  251. package/src/ui/components/series.js +0 -0
  252. package/src/ui/components/settings_view.js +0 -0
  253. package/src/ui/components/slide_out_panel.js +0 -0
  254. package/src/ui/components/slider_field.js +0 -0
  255. package/src/ui/components/sortable_list.js +0 -0
  256. package/src/ui/components/staged_edits.js +0 -0
  257. package/src/ui/components/staged_history.js +0 -0
  258. package/src/ui/components/table_filter_chips.js +0 -0
  259. package/src/ui/components/table_state_store.js +0 -0
  260. package/src/ui/components/table_structure.js +0 -0
  261. package/src/ui/components/table_values.js +0 -0
  262. package/src/ui/components/tabs.js +0 -0
  263. package/src/ui/components/tag_input.js +0 -0
  264. package/src/ui/components/toast.js +0 -0
  265. package/src/ui/components/toggle_field.js +0 -0
  266. package/src/ui/components/tree_view.js +0 -0
  267. package/src/ui/components/tsv.js +0 -0
  268. package/src/ui/components/window_taskbar.js +0 -0
  269. package/src/ui/components/wizard.js +0 -0
  270. package/src/ui/controllers/window_chrome_controller.js +0 -0
  271. package/src/ui/notification_center.js +0 -0
  272. package/src/ui/utils/auto_scrollbars.js +0 -0
  273. package/src/ui/utils/markdown.js +0 -0
  274. package/src/ui/utils/native_context_menu.js +0 -0
  275. package/src/ui/utils/overlay_scrollbar.js +0 -0
  276. package/src/ui/utils/raf_resize_observer.js +0 -0
  277. package/src/ui/utils/scroll_lock.js +0 -0
  278. package/src/ui/utils/strip_scroll.js +0 -0
  279. package/src/ui/utils/tooltip_service.js +0 -0
  280. package/tiles.js +0 -0
  281. package/widgets.js +0 -0
  282. package/wm.js +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.7 (2026-10-24)
4
+
5
+ A patch release: everything below is additive. Every fix is documented in a
6
+ section of the docs headed "(0.17.7)"; each entry links to it.
7
+
8
+ ### Added and changed
9
+
10
+ - [`installOverlayScrollbar` is styled by flexdesk.css](docs/components/layout-widgets.md#installoverlayscrollbar-is-styled-by-flexdeskcss-0177): the `.overlay-scrollbar-v` and `.overlay-scrollbar-h` bars that `installOverlayScrollbar` (and `installCollapsibleScrollbars`, `installTabsScrollbars` and `installWorkspaceScrollbars`, which build on it) appends now have rules in flexdesk.css, so they work with only FlexDesk's stylesheets loaded. The bar is `position: absolute` at the container's right or bottom edge, `--scrollbar-size` thick, on `--z-scrollbar`; it starts at `opacity: 0` and shows on hover while the container overflows; it takes no pointer events except on its thumb, which is at least 30px long. Its colours and rounding are the new tokens `--scrollbar-track`, `--scrollbar-thumb`, `--scrollbar-thumb-hover`, `--scrollbar-thumb-active` and `--scrollbar-radius` in tokens.css. Until now no FlexDesk stylesheet styled these classes, so the bar was `position: static`, fed the container's content height and grew it without limit unless the embedder brought its own CSS (BUG-0039).
11
+
12
+ ### Removed or renamed exports
13
+
14
+ None. Compared with 0.17.6, across every entry point (`core`, `widgets`, `wm`,
15
+ `host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
16
+ `exports` map, no export was added, removed or renamed. Not an export but
17
+ worth knowing: tokens.css gains the `--scrollbar-*` and `--z-scrollbar`
18
+ custom properties, and flexdesk.css gains rules for `.overlay-scrollbar-v`,
19
+ `.overlay-scrollbar-h` and their `.track` and `.thumb` (see above).
20
+
21
+ ## 0.17.6 (2026-10-24)
22
+
23
+ A patch release: everything below is additive. Every fix is documented in a
24
+ section of the docs headed "(0.17.6)"; each entry links to it.
25
+
26
+ ### Added and changed
27
+
28
+ - [Monaco's `Canceled` rejections are hidden](docs/components/editor.md#monacos-canceled-rejections-are-hidden-0176): disposing an editor within 50 ms of it getting focus (re-rendering a view right after focus moves back to it, as an Edit > Undo from the menu bar does) no longer logs an uncaught `Canceled: Canceled` from Monaco's `Delayer.cancel`. The first `initMonaco()` that starts a load installs one window `unhandledrejection` listener that calls `preventDefault()` only when the reason has `name === 'Canceled'` and `message === 'Canceled'` (Monaco's CancellationError); every other rejection still reaches the page and its console. It is installed once per page, however often `initMonaco()` is called or retried, and stays for the life of the page (BUG-0038).
29
+
30
+ ### Removed or renamed exports
31
+
32
+ None. Compared with 0.17.5, across every entry point (`core`, `widgets`, `wm`,
33
+ `host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
34
+ `exports` map, no export was added, removed or renamed. Not an export but
35
+ worth knowing: the first `initMonaco()` that starts a load now adds a window
36
+ `unhandledrejection` listener, which hides Monaco's `Canceled` rejections and
37
+ nothing else (see above).
38
+
3
39
  ## 0.17.5 (2026-10-24)
4
40
 
5
41
  A patch release: everything below is additive. Every fix is documented in a
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
File without changes
File without changes
package/canvas.js CHANGED
File without changes
package/charts.js CHANGED
File without changes
package/core.js CHANGED
File without changes
package/css/base.css CHANGED
@@ -5969,6 +5969,74 @@ button.twm-about-dialog__btn--close:focus {
5969
5969
  }
5970
5970
 
5971
5971
 
5972
+ /* ══ OVERLAY SCROLLBARS (0.17.7) ═════════════════════════════════════
5973
+ *
5974
+ * `installOverlayScrollbar(container, { orientation })`
5975
+ * (src/ui/utils/overlay_scrollbar.js) appends a `.overlay-scrollbar-v` or
5976
+ * `.overlay-scrollbar-h` holding a `.track` and a `.thumb`, and sets their
5977
+ * top/left/height/width from the container's scroll position. The bar is
5978
+ * absolute, so it takes no layout space: a static bar is content, its height
5979
+ * feeds the container's scrollHeight, and the container grows without limit
5980
+ * (BUG-0039). The script sets `data-scrollable` on the container and drives
5981
+ * the bar's opacity and pointer events itself (shown on hover or focus while
5982
+ * the container overflows, kept while the thumb is dragged); these rules are
5983
+ * the hidden starting state, the geometry and the colours. The bar takes no
5984
+ * pointer events, so content under it stays clickable; the thumb takes them
5985
+ * back to be dragged. */
5986
+ .overlay-scrollbar-v,
5987
+ .overlay-scrollbar-h {
5988
+ position: absolute;
5989
+ pointer-events: none;
5990
+ opacity: 0;
5991
+ transition: opacity var(--transition-fast);
5992
+ z-index: var(--z-scrollbar);
5993
+ }
5994
+ .overlay-scrollbar-v {
5995
+ top: 0;
5996
+ right: 0;
5997
+ width: var(--scrollbar-size);
5998
+ }
5999
+ .overlay-scrollbar-h {
6000
+ left: 0;
6001
+ bottom: 0;
6002
+ height: var(--scrollbar-size);
6003
+ }
6004
+ .overlay-scrollbar-v .track,
6005
+ .overlay-scrollbar-h .track {
6006
+ position: absolute;
6007
+ inset: 0;
6008
+ background: var(--scrollbar-track);
6009
+ border-radius: var(--scrollbar-radius);
6010
+ }
6011
+ .overlay-scrollbar-v .thumb,
6012
+ .overlay-scrollbar-h .thumb {
6013
+ position: absolute;
6014
+ background: var(--scrollbar-thumb);
6015
+ border-radius: var(--scrollbar-radius);
6016
+ pointer-events: auto;
6017
+ cursor: pointer;
6018
+ transition: background 80ms ease;
6019
+ }
6020
+ .overlay-scrollbar-v .thumb {
6021
+ right: 0;
6022
+ width: 100%;
6023
+ min-height: 30px;
6024
+ }
6025
+ .overlay-scrollbar-h .thumb {
6026
+ bottom: 0;
6027
+ height: 100%;
6028
+ min-width: 30px;
6029
+ }
6030
+ .overlay-scrollbar-v .thumb:hover,
6031
+ .overlay-scrollbar-h .thumb:hover {
6032
+ background: var(--scrollbar-thumb-hover);
6033
+ }
6034
+ .overlay-scrollbar-v .thumb:active,
6035
+ .overlay-scrollbar-h .thumb:active {
6036
+ background: var(--scrollbar-thumb-active);
6037
+ }
6038
+
6039
+
5972
6040
  /* ══ RECORD LIST & FACT SHEET (0.7.0) ══════════════════════════════════
5973
6041
  * `createRecordList` (src/ui/components/record_list.js) and
5974
6042
  * `createFactTable` (src/ui/components/fact_table.js). Neither has a height
package/css/flexdesk.css CHANGED
@@ -9593,6 +9593,74 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
9593
9593
  }
9594
9594
 
9595
9595
 
9596
+ /* ══ OVERLAY SCROLLBARS (0.17.7) ═════════════════════════════════════
9597
+ *
9598
+ * `installOverlayScrollbar(container, { orientation })`
9599
+ * (src/ui/utils/overlay_scrollbar.js) appends a `.overlay-scrollbar-v` or
9600
+ * `.overlay-scrollbar-h` holding a `.track` and a `.thumb`, and sets their
9601
+ * top/left/height/width from the container's scroll position. The bar is
9602
+ * absolute, so it takes no layout space: a static bar is content, its height
9603
+ * feeds the container's scrollHeight, and the container grows without limit
9604
+ * (BUG-0039). The script sets `data-scrollable` on the container and drives
9605
+ * the bar's opacity and pointer events itself (shown on hover or focus while
9606
+ * the container overflows, kept while the thumb is dragged); these rules are
9607
+ * the hidden starting state, the geometry and the colours. The bar takes no
9608
+ * pointer events, so content under it stays clickable; the thumb takes them
9609
+ * back to be dragged. */
9610
+ .overlay-scrollbar-v,
9611
+ .overlay-scrollbar-h {
9612
+ position: absolute;
9613
+ pointer-events: none;
9614
+ opacity: 0;
9615
+ transition: opacity var(--transition-fast);
9616
+ z-index: var(--z-scrollbar);
9617
+ }
9618
+ .overlay-scrollbar-v {
9619
+ top: 0;
9620
+ right: 0;
9621
+ width: var(--scrollbar-size);
9622
+ }
9623
+ .overlay-scrollbar-h {
9624
+ left: 0;
9625
+ bottom: 0;
9626
+ height: var(--scrollbar-size);
9627
+ }
9628
+ .overlay-scrollbar-v .track,
9629
+ .overlay-scrollbar-h .track {
9630
+ position: absolute;
9631
+ inset: 0;
9632
+ background: var(--scrollbar-track);
9633
+ border-radius: var(--scrollbar-radius);
9634
+ }
9635
+ .overlay-scrollbar-v .thumb,
9636
+ .overlay-scrollbar-h .thumb {
9637
+ position: absolute;
9638
+ background: var(--scrollbar-thumb);
9639
+ border-radius: var(--scrollbar-radius);
9640
+ pointer-events: auto;
9641
+ cursor: pointer;
9642
+ transition: background 80ms ease;
9643
+ }
9644
+ .overlay-scrollbar-v .thumb {
9645
+ right: 0;
9646
+ width: 100%;
9647
+ min-height: 30px;
9648
+ }
9649
+ .overlay-scrollbar-h .thumb {
9650
+ bottom: 0;
9651
+ height: 100%;
9652
+ min-width: 30px;
9653
+ }
9654
+ .overlay-scrollbar-v .thumb:hover,
9655
+ .overlay-scrollbar-h .thumb:hover {
9656
+ background: var(--scrollbar-thumb-hover);
9657
+ }
9658
+ .overlay-scrollbar-v .thumb:active,
9659
+ .overlay-scrollbar-h .thumb:active {
9660
+ background: var(--scrollbar-thumb-active);
9661
+ }
9662
+
9663
+
9596
9664
  /* ══ RECORD LIST & FACT SHEET (0.7.0) ══════════════════════════════════
9597
9665
  * `createRecordList` (src/ui/components/record_list.js) and
9598
9666
  * `createFactTable` (src/ui/components/fact_table.js). Neither has a height
package/css/overrides.css CHANGED
File without changes
package/css/reset.css CHANGED
File without changes
package/css/tokens.css CHANGED
@@ -102,6 +102,14 @@
102
102
  --state-active: rgba(255, 255, 255, 0.08);
103
103
  --state-selected: rgba(0, 122, 204, 0.15);
104
104
 
105
+ /* ── Overlay scrollbars (installOverlayScrollbar) ─────────── */
106
+ --scrollbar-size: 6px;
107
+ --scrollbar-radius: 3px;
108
+ --scrollbar-track: rgba(255, 255, 255, 0.08);
109
+ --scrollbar-thumb: rgba(255, 255, 255, 0.28);
110
+ --scrollbar-thumb-hover: rgba(255, 255, 255, 0.38);
111
+ --scrollbar-thumb-active: rgba(255, 255, 255, 0.48);
112
+
105
113
  /* ── Shadows / elevation ──────────────────────────────────── */
106
114
  --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3);
107
115
  --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
@@ -119,6 +127,9 @@
119
127
  stack from 6000 to 6999 (managed_window.js), so a popover at
120
128
  --z-popover would open behind the window that opened it. */
121
129
  --z-over-windows: 7100;
130
+ /* An overlay scrollbar inside a scroll container: over the container's
131
+ content and its dropdowns, under managed windows (6000+). */
132
+ --z-scrollbar: 500;
122
133
 
123
134
  /* ── Transitions ──────────────────────────────────────────── */
124
135
  --transition-fast: 120ms ease;
package/dist/canvas.js CHANGED
File without changes
File without changes
package/dist/charts.js CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/dist/core.js CHANGED
File without changes
package/dist/core.js.map CHANGED
File without changes
package/dist/editor.js CHANGED
@@ -233,6 +233,17 @@ var _attempt = null;
233
233
  var monacoReady = new Promise((resolve) => {
234
234
  _resolveMonaco = resolve;
235
235
  });
236
+ var _cancellationGuardInstalled = false;
237
+ function isMonacoCancellation(reason) {
238
+ return reason?.name === "Canceled" && reason?.message === "Canceled";
239
+ }
240
+ function installCancellationGuard() {
241
+ if (_cancellationGuardInstalled) return;
242
+ _cancellationGuardInstalled = true;
243
+ window.addEventListener?.("unhandledrejection", (event) => {
244
+ if (isMonacoCancellation(event.reason)) event.preventDefault();
245
+ });
246
+ }
236
247
  function injectLoaderScript(src) {
237
248
  return new Promise((resolve, reject) => {
238
249
  const s = document.createElement("script");
@@ -297,6 +308,7 @@ function initMonaco(basePath) {
297
308
  "[twm/editor] initMonaco() needs the path to your copy of Monaco, e.g. initMonaco('vendor/monaco'). Monaco is a peer dependency; the library does not guess where you put it."
298
309
  ));
299
310
  }
311
+ installCancellationGuard();
300
312
  const attempt = loadMonaco(basePath).then(
301
313
  (m) => {
302
314
  _resolveMonaco(m);