flexdesk 0.17.7 → 0.17.9

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 (284) hide show
  1. package/CHANGELOG.md +43 -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 +21 -1
  9. package/css/flexdesk.css +30 -3
  10. package/css/overrides.css +0 -0
  11. package/css/reset.css +0 -0
  12. package/dist/canvas.js +0 -0
  13. package/dist/canvas.js.map +0 -0
  14. package/dist/charts.js +7 -6
  15. package/dist/charts.js.map +2 -2
  16. package/dist/{chunk-RMTRWWEO.js → chunk-2YTM3GJE.js} +67 -26
  17. package/dist/chunk-2YTM3GJE.js.map +7 -0
  18. package/dist/chunk-3PHCPZHT.js +0 -0
  19. package/dist/chunk-3PHCPZHT.js.map +0 -0
  20. package/dist/{chunk-UURZ37SD.js → chunk-7U4IB65H.js} +27 -9
  21. package/dist/chunk-7U4IB65H.js.map +7 -0
  22. package/dist/{chunk-D3COLZZ2.js → chunk-BE2PU3LL.js} +2 -2
  23. package/dist/{chunk-D3COLZZ2.js.map → chunk-BE2PU3LL.js.map} +0 -0
  24. package/dist/chunk-CVMCZZX2.js +0 -0
  25. package/dist/chunk-CVMCZZX2.js.map +0 -0
  26. package/dist/{chunk-UWO43BZU.js → chunk-F35XSQWA.js} +16 -20
  27. package/dist/chunk-F35XSQWA.js.map +7 -0
  28. package/dist/chunk-FOOS3T5L.js +0 -0
  29. package/dist/chunk-FOOS3T5L.js.map +0 -0
  30. package/dist/chunk-GOQLR5WR.js +0 -0
  31. package/dist/chunk-GOQLR5WR.js.map +0 -0
  32. package/dist/chunk-HNU6MM2B.js +0 -0
  33. package/dist/chunk-HNU6MM2B.js.map +0 -0
  34. package/dist/chunk-JKZLNKG6.js +0 -0
  35. package/dist/chunk-JKZLNKG6.js.map +0 -0
  36. package/dist/chunk-JYWURG5T.js +0 -0
  37. package/dist/chunk-JYWURG5T.js.map +0 -0
  38. package/dist/{chunk-RKNFBX5K.js → chunk-MIW7D6WC.js} +16 -4
  39. package/dist/{chunk-RKNFBX5K.js.map → chunk-MIW7D6WC.js.map} +2 -2
  40. package/dist/chunk-N7HC3ADV.js +0 -0
  41. package/dist/chunk-N7HC3ADV.js.map +0 -0
  42. package/dist/{chunk-LWV23YVE.js → chunk-NIJEJAZ7.js} +42 -18
  43. package/dist/chunk-NIJEJAZ7.js.map +7 -0
  44. package/dist/{chunk-HYJYYEPK.js → chunk-REJ5HLIM.js} +2 -2
  45. package/dist/{chunk-HYJYYEPK.js.map → chunk-REJ5HLIM.js.map} +0 -0
  46. package/dist/{chunk-WVFGV5FT.js → chunk-WUFLGETN.js} +39 -2
  47. package/dist/{chunk-WVFGV5FT.js.map → chunk-WUFLGETN.js.map} +3 -3
  48. package/dist/core.js +0 -0
  49. package/dist/core.js.map +0 -0
  50. package/dist/editor.js +2 -2
  51. package/dist/editor.js.map +0 -0
  52. package/dist/flexdesk.css +30 -3
  53. package/dist/flow.js +3 -3
  54. package/dist/flow.js.map +0 -0
  55. package/dist/host.js +0 -0
  56. package/dist/host.js.map +0 -0
  57. package/dist/reset.css +0 -0
  58. package/dist/tile_registry-6WZPTUZV.js +0 -0
  59. package/dist/tile_registry-6WZPTUZV.js.map +0 -0
  60. package/dist/tiles.js +63 -20
  61. package/dist/tiles.js.map +2 -2
  62. package/dist/widgets.js +6 -6
  63. package/dist/widgets.js.map +0 -0
  64. package/dist/wm.js +5 -5
  65. package/dist/wm.js.map +0 -0
  66. package/docs/README.md +0 -0
  67. package/docs/best-practices.md +0 -0
  68. package/docs/components/charts.md +95 -0
  69. package/docs/components/command-palette.md +0 -0
  70. package/docs/components/conversation.md +0 -0
  71. package/docs/components/data-table-grid.md +0 -0
  72. package/docs/components/data-table.md +0 -0
  73. package/docs/components/editor.md +0 -0
  74. package/docs/components/flow-canvas-editor.md +0 -0
  75. package/docs/components/flow-editors.md +0 -0
  76. package/docs/components/flow-lane-editor.md +0 -0
  77. package/docs/components/flow-outline-editor.md +0 -0
  78. package/docs/components/forms-and-dialogs.md +0 -0
  79. package/docs/components/input-fields.md +0 -0
  80. package/docs/components/keymap.md +0 -0
  81. package/docs/components/markdown-and-outline.md +0 -0
  82. package/docs/components/menus.md +41 -0
  83. package/docs/components/notifications.md +0 -0
  84. package/docs/components/panels-and-desktops.md +0 -0
  85. package/docs/components/record-list-and-fact-table.md +0 -0
  86. package/docs/components/settings-view.md +0 -0
  87. package/docs/components/shell.md +0 -0
  88. package/docs/components/slide-out-panel.md +0 -0
  89. package/docs/components/tiles.md +25 -0
  90. package/docs/components/wizard.md +0 -0
  91. package/docs/concepts/building-and-packaging.md +0 -0
  92. package/docs/concepts/domain-neutrality.md +0 -0
  93. package/docs/concepts/host-port.md +0 -0
  94. package/docs/concepts/packages-and-entry-points.md +0 -0
  95. package/docs/concepts/peer-dependencies.md +0 -0
  96. package/docs/concepts/state-guard.md +0 -0
  97. package/docs/concepts/styling.md +0 -0
  98. package/docs/quickstart.md +0 -0
  99. package/editor.js +0 -0
  100. package/flow.js +0 -0
  101. package/host.js +0 -0
  102. package/package.json +1 -1
  103. package/src/canvas/canvas_adapter.js +0 -0
  104. package/src/canvas/edge_router.js +0 -0
  105. package/src/canvas/graph/connector_router.js +0 -0
  106. package/src/canvas/graph/history_service.js +0 -0
  107. package/src/canvas/graph/node_platform.js +0 -0
  108. package/src/canvas/index.js +0 -0
  109. package/src/canvas/layered_layout.js +0 -0
  110. package/src/charts/chart_types.js +3 -2
  111. package/src/charts/data_series_plot_window.js +0 -0
  112. package/src/charts/downsample.js +0 -0
  113. package/src/charts/plot_config.js +0 -0
  114. package/src/charts/plot_config_editor.js +8 -2
  115. package/src/charts/plot_grid.js +16 -4
  116. package/src/charts/plot_popout_window.js +2 -1
  117. package/src/charts/plotly_wrapper.js +0 -0
  118. package/src/charts/series_transforms.js +114 -20
  119. package/src/core/event_bus.js +0 -0
  120. package/src/core/logging.js +0 -0
  121. package/src/core/settings.js +0 -0
  122. package/src/core/state_guard.js +0 -0
  123. package/src/core/state_guard_config.js +0 -0
  124. package/src/core/state_machine.js +0 -0
  125. package/src/editor/editor_pane.js +0 -0
  126. package/src/editor/monaco_editor_factory.js +0 -0
  127. package/src/editor/monaco_loader.js +0 -0
  128. package/src/editor/notebook_search.js +0 -0
  129. package/src/editor/notebook_tab_bar.js +26 -7
  130. package/src/editor/notebook_undo_manager.js +0 -0
  131. package/src/editor/split_pane_container.js +0 -0
  132. package/src/flow/canvas_editor/connections.js +0 -0
  133. package/src/flow/canvas_editor/editor.js +0 -0
  134. package/src/flow/canvas_editor/index.js +0 -0
  135. package/src/flow/canvas_editor/layout.js +0 -0
  136. package/src/flow/canvas_editor/strings.js +0 -0
  137. package/src/flow/kit/always_before.js +0 -0
  138. package/src/flow/kit/catalogue.js +0 -0
  139. package/src/flow/kit/chip_input.js +0 -0
  140. package/src/flow/kit/dom.js +0 -0
  141. package/src/flow/kit/findings.js +0 -0
  142. package/src/flow/kit/history.js +0 -0
  143. package/src/flow/kit/index.js +0 -0
  144. package/src/flow/kit/keys.js +0 -0
  145. package/src/flow/kit/logic_graph.js +0 -0
  146. package/src/flow/kit/references.js +0 -0
  147. package/src/flow/kit/settings_panel.js +0 -0
  148. package/src/flow/kit/settings_schema.js +0 -0
  149. package/src/flow/kit/step_picker.js +0 -0
  150. package/src/flow/kit/strings.js +0 -0
  151. package/src/flow/kit/value_picker.js +0 -0
  152. package/src/flow/kit/widgets.js +0 -0
  153. package/src/flow/lanes/editor.js +0 -0
  154. package/src/flow/lanes/index.js +0 -0
  155. package/src/flow/lanes/layout.js +0 -0
  156. package/src/flow/lanes/pipeline.js +0 -0
  157. package/src/flow/lanes/preview.js +0 -0
  158. package/src/flow/lanes/strings.js +0 -0
  159. package/src/flow/outline/editor.js +0 -0
  160. package/src/flow/outline/index.js +0 -0
  161. package/src/flow/outline/mapping.js +0 -0
  162. package/src/flow/outline/menu.js +0 -0
  163. package/src/flow/outline/operations.js +0 -0
  164. package/src/flow/outline/recognise.js +0 -0
  165. package/src/flow/outline/strings.js +0 -0
  166. package/src/help/help_modal.js +0 -0
  167. package/src/help/help_registry.js +0 -0
  168. package/src/host/external_links.js +0 -0
  169. package/src/host/file_picker.js +0 -0
  170. package/src/host/host.js +0 -0
  171. package/src/host/photino_host.js +0 -0
  172. package/src/host/photino_host.md +0 -0
  173. package/src/host/pywebview_host.js +0 -0
  174. package/src/tiles/chart_tiles.js +0 -0
  175. package/src/tiles/config_schema.js +0 -0
  176. package/src/tiles/figure_tile.js +0 -0
  177. package/src/tiles/layout_persistence.js +0 -0
  178. package/src/tiles/list_tiles.js +0 -0
  179. package/src/tiles/scope_picker.js +0 -0
  180. package/src/tiles/tile_base.js +67 -16
  181. package/src/tiles/tile_config_form.js +0 -0
  182. package/src/tiles/tile_grid.js +0 -0
  183. package/src/tiles/tile_registry.js +0 -0
  184. package/src/tiling/bottom_panel_tabs.js +0 -0
  185. package/src/tiling/command_palette.js +0 -0
  186. package/src/tiling/content_registry.js +0 -0
  187. package/src/tiling/desktops.js +0 -0
  188. package/src/tiling/entity_sources.js +0 -0
  189. package/src/tiling/keymap.js +0 -0
  190. package/src/tiling/kind_taxonomy.js +0 -0
  191. package/src/tiling/landing_table.js +0 -0
  192. package/src/tiling/loading_overlay.js +0 -0
  193. package/src/tiling/nav_panel.js +0 -0
  194. package/src/tiling/page_factory.js +0 -0
  195. package/src/tiling/panel_availability.js +0 -0
  196. package/src/tiling/panel_keys.js +0 -0
  197. package/src/tiling/shell.js +0 -0
  198. package/src/tiling/tab_strip.js +0 -0
  199. package/src/tiling/tile_breadcrumb.js +0 -0
  200. package/src/tiling/tile_renderer.js +0 -0
  201. package/src/tiling/tile_tab_menu.js +0 -0
  202. package/src/tiling/tile_tree.js +0 -0
  203. package/src/tiling/wm.js +0 -0
  204. package/src/tiling/zoom.js +0 -0
  205. package/src/ui/base/component_base.js +0 -0
  206. package/src/ui/base/controller_base.js +0 -0
  207. package/src/ui/base/page_base.js +0 -0
  208. package/src/ui/components/about_dialog.js +0 -0
  209. package/src/ui/components/action_dropdown.js +19 -6
  210. package/src/ui/components/alert_log.js +0 -0
  211. package/src/ui/components/alerts_pane.js +0 -0
  212. package/src/ui/components/attribute_list_editor.js +0 -0
  213. package/src/ui/components/autocomplete_field.js +0 -0
  214. package/src/ui/components/cell_editor_host.js +0 -0
  215. package/src/ui/components/cell_editors.js +0 -0
  216. package/src/ui/components/cell_grid.js +0 -0
  217. package/src/ui/components/cell_paste.js +0 -0
  218. package/src/ui/components/cell_selection.js +0 -0
  219. package/src/ui/components/choice_controls.js +0 -0
  220. package/src/ui/components/color_field.js +0 -0
  221. package/src/ui/components/color_list_field.js +0 -0
  222. package/src/ui/components/column_fit.js +0 -0
  223. package/src/ui/components/column_groups.js +0 -0
  224. package/src/ui/components/column_order.js +0 -0
  225. package/src/ui/components/computing_status_window.js +0 -0
  226. package/src/ui/components/confirm_dialog.js +0 -0
  227. package/src/ui/components/context_menu.js +20 -20
  228. package/src/ui/components/conversation_view.js +0 -0
  229. package/src/ui/components/crosstab.js +0 -0
  230. package/src/ui/components/data_table.js +45 -19
  231. package/src/ui/components/detail_header.js +0 -0
  232. package/src/ui/components/document_outline.js +0 -0
  233. package/src/ui/components/drag_reorder.js +0 -0
  234. package/src/ui/components/fact_table.js +0 -0
  235. package/src/ui/components/fill_handle.js +0 -0
  236. package/src/ui/components/gallery_picker.js +0 -0
  237. package/src/ui/components/header_actions.js +0 -0
  238. package/src/ui/components/inline_renamer.js +0 -0
  239. package/src/ui/components/job_progress.js +0 -0
  240. package/src/ui/components/managed_window.js +0 -0
  241. package/src/ui/components/menu_bar.js +0 -0
  242. package/src/ui/components/modal.js +0 -0
  243. package/src/ui/components/notification_history.js +0 -0
  244. package/src/ui/components/progress.js +0 -0
  245. package/src/ui/components/record_list.js +0 -0
  246. package/src/ui/components/row_activation.js +0 -0
  247. package/src/ui/components/section_stack.js +0 -0
  248. package/src/ui/components/series.js +0 -0
  249. package/src/ui/components/settings_view.js +0 -0
  250. package/src/ui/components/slide_out_panel.js +0 -0
  251. package/src/ui/components/slider_field.js +0 -0
  252. package/src/ui/components/sortable_list.js +0 -0
  253. package/src/ui/components/staged_edits.js +0 -0
  254. package/src/ui/components/staged_history.js +0 -0
  255. package/src/ui/components/table_filter_chips.js +0 -0
  256. package/src/ui/components/table_state_store.js +0 -0
  257. package/src/ui/components/table_structure.js +0 -0
  258. package/src/ui/components/table_values.js +0 -0
  259. package/src/ui/components/tabs.js +0 -0
  260. package/src/ui/components/tag_input.js +0 -0
  261. package/src/ui/components/toast.js +0 -0
  262. package/src/ui/components/toggle_field.js +0 -0
  263. package/src/ui/components/tree_view.js +0 -0
  264. package/src/ui/components/tsv.js +0 -0
  265. package/src/ui/components/window_taskbar.js +0 -0
  266. package/src/ui/components/wizard.js +0 -0
  267. package/src/ui/controllers/window_chrome_controller.js +0 -0
  268. package/src/ui/notification_center.js +0 -0
  269. package/src/ui/utils/auto_scrollbars.js +0 -0
  270. package/src/ui/utils/markdown.js +0 -0
  271. package/src/ui/utils/menu_viewport.js +81 -0
  272. package/src/ui/utils/native_context_menu.js +0 -0
  273. package/src/ui/utils/overlay_scrollbar.js +0 -0
  274. package/src/ui/utils/raf_resize_observer.js +0 -0
  275. package/src/ui/utils/scroll_lock.js +0 -0
  276. package/src/ui/utils/strip_scroll.js +0 -0
  277. package/src/ui/utils/tooltip_service.js +0 -0
  278. package/tiles.js +0 -0
  279. package/widgets.js +0 -0
  280. package/wm.js +0 -0
  281. package/dist/chunk-LWV23YVE.js.map +0 -7
  282. package/dist/chunk-RMTRWWEO.js.map +0 -7
  283. package/dist/chunk-UURZ37SD.js.map +0 -7
  284. package/dist/chunk-UWO43BZU.js.map +0 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.9 (2026-10-25)
4
+
5
+ A patch release: everything below is additive. Every fix is documented in a
6
+ section of the docs headed "(0.17.9)"; each entry links to it.
7
+
8
+ ### Added and changed
9
+
10
+ - [Context menus stay inside the window](docs/components/menus.md#context-menus-stay-inside-the-window-0179): `showContextMenu(x, y, items, onAction)`, the DataTable's right-click menu and `NotebookTabBar`'s tab menu are placed the same way, however many items they hold. A menu is capped at the window's height less 8px above and below and scrolls inside when it is longer (flexdesk.css gives `.twm-context-menu` and `.nb-context-menu` `overflow-y: auto` and `box-sizing: border-box`); it opens with its top-left corner at the pointer and moves left or up only as far as it must to fit, never past the window's top or left edge. Before, a menu had no cap: the DataTable's opened above the window's top edge and `showContextMenu`'s ran off the bottom, so the items past the edge could not be reached. All three now take focus on the first enabled item, move it with Up/Down (wrapping), Home and End, scrolling the focused item into view, choose with Enter or Space, close with Escape and give focus back when they close (before, only `showContextMenu` did); scrolling the menu itself does not close it. Nothing changes in how you call them (BUG-0040).
11
+ - [The plot config editor writes no stray "null"](docs/components/charts.md#the-plot-config-editor-writes-no-stray-null-0179): `renderPlotConfigEditor` appended the sections a subplot does not have as `null`, which `Element.append()` writes as the text `null`, so every 2D subplot showed a `null` line where a 3D chart's **Z axis** goes, and an editor without `seriesTransforms` showed another where **Derived series** goes. A section the subplot does not have is now left out; nothing else about the editor changed (BUG-0041).
12
+ - [Interpolation `'auto'` is a listed choice](docs/components/charts.md#interpolation-auto-is-a-listed-choice-0179): a subplot's `interpolation` is `'linear'`, `'step'`, `'cubic'` or `'auto'`, and `'auto'` draws straight segments exactly as `'linear'` does (`buildTrace` gives both the Plotly line shape `linear`, as it always has). `renderPlotConfigEditor`'s **Interpolation** select now offers **Auto**, **Linear**, **Step** and **Cubic spline**, so a subplot saved with `'auto'` opens with Auto chosen instead of `auto (not found)` and keeps `'auto'` until another value is picked. A new subplot is still `'linear'`, and every value draws as before (BUG-0042).
13
+ - [Action dropdowns: positioning against the end edge](docs/components/menus.md#action-dropdowns-positioning-against-the-end-edge-0179): `ActionDropdown.position(trigger, menu, { align })` takes an optional third argument. `align: 'start'` (the default, and what it did before) lines the menu up with the trigger's left edge first, `'end'` with its right edge; either flips to the other edge when the menu would leave the window (BUG-0043).
14
+ - [A tile's ⋯ menu is drawn over the page](docs/components/tiles.md#the--menu-is-drawn-over-the-page-0179): a tile's **More actions** menu (`.tile-menu-dropdown`) is no longer drawn inside the tile. While it is open it is moved to `document.body` (or to the open modal's host, as `showContextMenu` does), placed with `ActionDropdown.position(button, menu, { align: 'end' })` as `position: fixed` on `--z-over-windows`, so neighbouring tiles and the managed window a grid sits in no longer clip it, and it stays 8px inside the window, opening under the button when it fits there, else above it when it fits there, else on the side with more room, scrolling inside. Choosing an entry, a press outside it or the ⋯ button again closes it and puts it back in the tile's header; `dispose()` closes an open menu first. Until 0.17.8 the menu was `position: absolute` inside the tile, so in a tile narrower than about 220px its left part and its labels were cut off (BUG-0043).
15
+
16
+ ### Removed or renamed exports
17
+
18
+ None. Compared with 0.17.8, across every entry point (`core`, `widgets`, `wm`,
19
+ `host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
20
+ `exports` map, no export was added, removed or renamed. Not an export but
21
+ worth knowing: `ActionDropdown.position` takes an optional third argument,
22
+ `{ align }`; `renderPlotConfigEditor` lists `'auto'` among the interpolations;
23
+ an open tile ⋯ menu lives outside `tile.element` until it closes; and
24
+ flexdesk.css caps `.twm-context-menu` and `.nb-context-menu` at the window's
25
+ height with `overflow-y: auto`, and draws `.tile-menu-dropdown` on
26
+ `--z-over-windows` (see above).
27
+
28
+ ## 0.17.8 (2026-10-24)
29
+
30
+ A patch release: everything below is additive. Every fix is documented in a
31
+ section of the docs headed "(0.17.8)"; each entry links to it.
32
+
33
+ ### Added and changed
34
+
35
+ - [A series transform knows its series, and takes a choice parameter](docs/components/charts.md#a-series-transform-knows-its-series-and-takes-a-choice-parameter-0178): a `seriesTransforms` entry's `run` gets a third argument, `run(y, params, { series, subplot, results, resolveSeries })`: the subplot's series entry the trace was drawn from (null for any other trace, such as an overlay), the subplot config, the results the figure was drawn from and the `resolveSeries` it was drawn with, so a transform can resolve the same series from other results (a baseline scenario) the same way. `renderPlotGrid`, and so `PlotPopoutWindow`, run transforms on the same traces as in 0.17.7 and draw the same derived traces; `deriveSeriesTraces` takes the new optional `seriesOf`, `results` and `resolveSeries` options, and without them passes `series`, `results` and `resolveSeries` as null. A parameter declared `{ type: 'choice', options }` (an array of `{ value, label }`, or a function `(subplot) => options`) is drawn by `renderSeriesTransformControls` as a select (choice_controls' `selectBox`, styled by the new `.twm-series-transforms__select` rule) instead of a number field; the pick is saved under `subplot.transforms.<id>.params` and passed to `run` like a number, and without a `default` or a saved value it is the first enabled option. A transform written as `run(y, params)` with number parameters works and draws exactly as before (STORY-0111).
36
+
37
+ ### Removed or renamed exports
38
+
39
+ None. Compared with 0.17.7, across every entry point (`core`, `widgets`, `wm`,
40
+ `host`, `canvas`, `flow`, `charts`, `tiles`, `editor`) and the package
41
+ `exports` map, no export was added, removed or renamed. Not an export but
42
+ worth knowing: a series transform's `run` gets a third argument and
43
+ `deriveSeriesTraces` takes three more options, all optional, and flexdesk.css
44
+ gains a `.twm-series-transforms__select` rule (see above).
45
+
3
46
  ## 0.17.7 (2026-10-24)
4
47
 
5
48
  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
@@ -3434,11 +3434,14 @@ body.twm-window-maximized .twm-resize-handle {
3434
3434
  position: relative;
3435
3435
  }
3436
3436
 
3437
+ /* While open the menu is moved to document.body and placed `position: fixed`
3438
+ by `ActionDropdown.position` (inline styles), so a narrow tile cannot clip
3439
+ it; --z-over-windows keeps it over a managed window holding the grid. */
3437
3440
  .tile-menu-dropdown {
3438
3441
  position: absolute;
3439
3442
  top: 100%;
3440
3443
  right: 0;
3441
- z-index: var(--z-dropdown);
3444
+ z-index: var(--z-over-windows);
3442
3445
  min-width: 180px;
3443
3446
  padding: var(--space-xs) 0;
3444
3447
  background: var(--surface-2);
@@ -5604,6 +5607,23 @@ button.twm-about-dialog__btn--close:focus {
5604
5607
 
5605
5608
  .nb-context-menu.visible { opacity: 1; }
5606
5609
 
5610
+ /* ── Context menus stay inside the window (0.17.9, BUG-0040) ─────────
5611
+ * `showContextMenu`, the DataTable's right-click menu and NotebookTabBar's tab
5612
+ * menu are placed by src/ui/utils/menu_viewport.js, which sets an inline
5613
+ * max-height of the window's height less a margin top and bottom. Here: the
5614
+ * same cap for a menu placed before that runs, border-box so the cap includes
5615
+ * padding and border, and scrolling inside when the items are longer — they
5616
+ * had no max-height and no overflow, so a 100-item menu ran off the window and
5617
+ * its far items could not be reached. */
5618
+ .twm-context-menu,
5619
+ .nb-context-menu {
5620
+ box-sizing: border-box;
5621
+ max-height: calc(100vh - 2 * var(--space-md));
5622
+ overflow-x: hidden;
5623
+ overflow-y: auto;
5624
+ overscroll-behavior: contain;
5625
+ }
5626
+
5607
5627
  .nb-context-menu__item {
5608
5628
  display: flex;
5609
5629
  align-items: center;
package/css/flexdesk.css CHANGED
@@ -3959,11 +3959,14 @@ body.twm-window-maximized .twm-resize-handle {
3959
3959
  position: relative;
3960
3960
  }
3961
3961
 
3962
+ /* While open the menu is moved to document.body and placed `position: fixed`
3963
+ by `ActionDropdown.position` (inline styles), so a narrow tile cannot clip
3964
+ it; --z-over-windows keeps it over a managed window holding the grid. */
3962
3965
  .tile-menu-dropdown {
3963
3966
  position: absolute;
3964
3967
  top: 100%;
3965
3968
  right: 0;
3966
- z-index: var(--z-dropdown);
3969
+ z-index: var(--z-over-windows);
3967
3970
  min-width: 180px;
3968
3971
  padding: var(--space-xs) 0;
3969
3972
  background: var(--surface-2);
@@ -7629,6 +7632,23 @@ body.twm-dragging * { user-select: none; }
7629
7632
  transition: opacity 90ms ease-out;
7630
7633
  }
7631
7634
  .nb-context-menu.visible { opacity: 1; }
7635
+
7636
+ /* ── Context menus stay inside the window (0.17.9, BUG-0040) ─────────
7637
+ * `showContextMenu`, the DataTable's right-click menu and NotebookTabBar's tab
7638
+ * menu are placed by src/ui/utils/menu_viewport.js, which sets an inline
7639
+ * max-height of the window's height less a margin top and bottom. Here: the
7640
+ * same cap for a menu placed before that runs, border-box so the cap includes
7641
+ * padding and border, and scrolling inside when the items are longer — they
7642
+ * had no max-height and no overflow, so a 100-item menu ran off the window and
7643
+ * its far items could not be reached. */
7644
+ .twm-context-menu,
7645
+ .nb-context-menu {
7646
+ box-sizing: border-box;
7647
+ max-height: calc(100vh - 2 * var(--space-md));
7648
+ overflow-x: hidden;
7649
+ overflow-y: auto;
7650
+ overscroll-behavior: contain;
7651
+ }
7632
7652
  .nb-context-menu__item {
7633
7653
  display: flex;
7634
7654
  align-items: center;
@@ -10808,8 +10828,8 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
10808
10828
  /* ══ SERIES TRANSFORMS ═══════════════════════════════════════════════
10809
10829
  *
10810
10830
  * `renderSeriesTransformControls` (src/charts/series_transforms.js): per
10811
- * injected transform, a group with a toggle per output and a number field per
10812
- * parameter, in a subplot's config. */
10831
+ * injected transform, a group with a toggle per output and a number field (or,
10832
+ * for a choice parameter, a select) per parameter, in a subplot's config. */
10813
10833
  .twm-series-transforms {
10814
10834
  display: flex;
10815
10835
  flex-direction: column;
@@ -10849,6 +10869,13 @@ button.twm-alerts__ref:hover { text-decoration: underline; }
10849
10869
  .twm-series-transforms__param:disabled {
10850
10870
  opacity: 0.5;
10851
10871
  }
10872
+ /* A choice parameter's select (0.17.8): as wide as its option labels. */
10873
+ .twm-series-transforms__select {
10874
+ width: auto;
10875
+ min-width: 96px;
10876
+ max-width: 60%;
10877
+ cursor: pointer;
10878
+ }
10852
10879
  /* ══ end SERIES TRANSFORMS ══ */
10853
10880
 
10854
10881
  /* ══ PLOT GRID ════════════════════════════════════════════════════════
package/css/overrides.css CHANGED
File without changes
package/css/reset.css CHANGED
File without changes
package/dist/canvas.js CHANGED
File without changes
File without changes
package/dist/charts.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createTabs
3
- } from "./chunk-HYJYYEPK.js";
3
+ } from "./chunk-REJ5HLIM.js";
4
4
  import {
5
5
  ALL_CHART_TYPES,
6
6
  CHART_TYPES_2D,
@@ -55,11 +55,11 @@ import {
55
55
  strideIndices,
56
56
  uid,
57
57
  updateChart
58
- } from "./chunk-RMTRWWEO.js";
58
+ } from "./chunk-2YTM3GJE.js";
59
59
  import {
60
60
  AutocompleteField,
61
61
  createRafResizeObserver
62
- } from "./chunk-LWV23YVE.js";
62
+ } from "./chunk-NIJEJAZ7.js";
63
63
  import {
64
64
  ColorField,
65
65
  ManagedWindow,
@@ -68,7 +68,7 @@ import {
68
68
  } from "./chunk-CVMCZZX2.js";
69
69
  import "./chunk-HNU6MM2B.js";
70
70
  import "./chunk-N7HC3ADV.js";
71
- import "./chunk-WVFGV5FT.js";
71
+ import "./chunk-WUFLGETN.js";
72
72
  import "./chunk-JYWURG5T.js";
73
73
 
74
74
  // src/charts/data_series_plot_window.js
@@ -720,6 +720,7 @@ var LEGEND_POSITIONS2 = Object.freeze([
720
720
  { value: "right", label: "Right" }
721
721
  ]);
722
722
  var INTERPOLATIONS = Object.freeze([
723
+ { value: "auto", label: "Auto" },
723
724
  { value: "linear", label: "Linear" },
724
725
  { value: "step", label: "Step" },
725
726
  { value: "cubic", label: "Cubic spline" }
@@ -977,7 +978,7 @@ function renderPlotConfigEditor(container, config, options = {}) {
977
978
  const is3D = is3DChart(sp.chartType);
978
979
  let sources = null;
979
980
  const overlaySources = () => sources ??= Promise.resolve().then(() => opts.overlaySources());
980
- body.append(
981
+ body.append(...[
981
982
  section("Subplot", field("Title", textInput(
982
983
  sp.displayName,
983
984
  (v) => {
@@ -993,7 +994,7 @@ function renderPlotConfigEditor(container, config, options = {}) {
993
994
  section("Reference lines", referenceLinesEditor(sp)),
994
995
  section("Shaded bands", shadedBandsEditor(sp)),
995
996
  transformsSection(sp)
996
- );
997
+ ].filter(Boolean));
997
998
  }
998
999
  function displayFields(sp) {
999
1000
  return [