flexdesk 0.17.17 → 0.18.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 (300) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/LICENSE +0 -0
  3. package/README.md +1 -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/flexdesk.css +7499 -5851
  9. package/css/reset.css +1 -1
  10. package/css/tokens.css +23 -1
  11. package/dist/canvas.js +0 -0
  12. package/dist/canvas.js.map +0 -0
  13. package/dist/charts.js +10 -6
  14. package/dist/charts.js.map +1 -1
  15. package/dist/chunk-3PHCPZHT.js +0 -0
  16. package/dist/chunk-3PHCPZHT.js.map +0 -0
  17. package/dist/chunk-5W4EEKSK.js +778 -0
  18. package/dist/chunk-5W4EEKSK.js.map +7 -0
  19. package/dist/chunk-DNJ3N4T4.js +82 -0
  20. package/dist/chunk-DNJ3N4T4.js.map +7 -0
  21. package/dist/chunk-FOOS3T5L.js +0 -0
  22. package/dist/chunk-FOOS3T5L.js.map +0 -0
  23. package/dist/chunk-GOQLR5WR.js +0 -0
  24. package/dist/chunk-GOQLR5WR.js.map +0 -0
  25. package/dist/{chunk-JKZLNKG6.js → chunk-HKPB6OFA.js} +90 -25
  26. package/dist/{chunk-JKZLNKG6.js.map → chunk-HKPB6OFA.js.map} +2 -2
  27. package/dist/chunk-HNU6MM2B.js +0 -0
  28. package/dist/chunk-HNU6MM2B.js.map +0 -0
  29. package/dist/{chunk-REJ5HLIM.js → chunk-HYJYYEPK.js} +2 -2
  30. package/dist/chunk-JYWURG5T.js +0 -0
  31. package/dist/chunk-JYWURG5T.js.map +0 -0
  32. package/dist/{chunk-7U4IB65H.js → chunk-LLBJ2SJH.js} +5 -3
  33. package/dist/{chunk-7U4IB65H.js.map → chunk-LLBJ2SJH.js.map} +1 -1
  34. package/dist/chunk-N7HC3ADV.js +0 -0
  35. package/dist/chunk-N7HC3ADV.js.map +0 -0
  36. package/dist/{chunk-7OL6F2AM.js → chunk-P74F6I6P.js} +6 -4
  37. package/dist/{chunk-7OL6F2AM.js.map → chunk-P74F6I6P.js.map} +1 -1
  38. package/dist/chunk-PAI2ZUWV.js +260 -0
  39. package/dist/chunk-PAI2ZUWV.js.map +7 -0
  40. package/dist/chunk-Q7BALEPX.js +527 -0
  41. package/dist/chunk-Q7BALEPX.js.map +7 -0
  42. package/dist/chunk-QXAOTGCC.js +40 -0
  43. package/dist/chunk-QXAOTGCC.js.map +7 -0
  44. package/dist/{chunk-XJNADRGR.js → chunk-RKVYIXDC.js} +664 -91
  45. package/dist/chunk-RKVYIXDC.js.map +7 -0
  46. package/dist/{chunk-2Z2ENHR3.js → chunk-U5GKJUOC.js} +3 -3
  47. package/dist/{chunk-2Z2ENHR3.js.map → chunk-U5GKJUOC.js.map} +1 -1
  48. package/dist/chunk-UKP22RUG.js +219 -0
  49. package/dist/chunk-UKP22RUG.js.map +7 -0
  50. package/dist/chunk-VLOAI3HS.js +43 -0
  51. package/dist/chunk-VLOAI3HS.js.map +7 -0
  52. package/dist/{chunk-WUFLGETN.js → chunk-WVFGV5FT.js} +2 -39
  53. package/dist/{chunk-WUFLGETN.js.map → chunk-WVFGV5FT.js.map} +3 -3
  54. package/dist/{chunk-PGZ4EHSE.js → chunk-ZL3VKINP.js} +41 -390
  55. package/dist/chunk-ZL3VKINP.js.map +7 -0
  56. package/dist/editor.js +3 -2
  57. package/dist/editor.js.map +1 -1
  58. package/dist/flexdesk.css +7499 -5851
  59. package/dist/flow.js +29 -97
  60. package/dist/flow.js.map +3 -3
  61. package/dist/git.js +1356 -0
  62. package/dist/git.js.map +7 -0
  63. package/dist/host.js +0 -0
  64. package/dist/host.js.map +0 -0
  65. package/dist/reset.css +1 -1
  66. package/dist/tile_registry-6WZPTUZV.js +0 -0
  67. package/dist/tile_registry-6WZPTUZV.js.map +0 -0
  68. package/dist/tiles.js +20 -15
  69. package/dist/tiles.js.map +2 -2
  70. package/dist/tokens.css +23 -1
  71. package/dist/widgets.js +3969 -1189
  72. package/dist/widgets.js.map +4 -4
  73. package/dist/wm.js +121 -33
  74. package/dist/wm.js.map +2 -2
  75. package/docs/README.md +9 -4
  76. package/docs/best-practices.md +2 -2
  77. package/docs/components/chat-shell.md +198 -0
  78. package/docs/components/command-palette.md +0 -0
  79. package/docs/components/conversation.md +10 -0
  80. package/docs/components/data-table-grid.md +0 -0
  81. package/docs/components/data-table.md +0 -0
  82. package/docs/components/editor.md +0 -0
  83. package/docs/components/filter-builder.md +246 -0
  84. package/docs/components/flow-canvas-editor.md +0 -0
  85. package/docs/components/flow-editors.md +0 -0
  86. package/docs/components/flow-lane-editor.md +0 -0
  87. package/docs/components/flow-outline-editor.md +0 -0
  88. package/docs/components/forms-and-dialogs.md +22 -0
  89. package/docs/components/git.md +355 -0
  90. package/docs/components/input-fields.md +167 -2
  91. package/docs/components/keymap.md +8 -0
  92. package/docs/components/markdown-and-outline.md +0 -0
  93. package/docs/components/menus.md +120 -3
  94. package/docs/components/panels-and-desktops.md +16 -5
  95. package/docs/components/record-list-and-fact-table.md +0 -0
  96. package/docs/components/settings-view.md +0 -0
  97. package/docs/components/shell.md +104 -1
  98. package/docs/components/wizard.md +0 -0
  99. package/docs/components/workspace-picker.md +149 -0
  100. package/docs/concepts/building-and-packaging.md +2 -2
  101. package/docs/concepts/domain-neutrality.md +0 -0
  102. package/docs/concepts/host-port.md +0 -0
  103. package/docs/concepts/packages-and-entry-points.md +14 -13
  104. package/docs/concepts/peer-dependencies.md +0 -0
  105. package/docs/concepts/state-guard.md +3 -3
  106. package/docs/quickstart.md +1 -1
  107. package/editor.js +0 -0
  108. package/flow.js +0 -0
  109. package/git.js +13 -0
  110. package/host.js +0 -0
  111. package/package.json +6 -1
  112. package/src/canvas/canvas_adapter.js +0 -0
  113. package/src/canvas/edge_router.js +0 -0
  114. package/src/canvas/graph/connector_router.js +0 -0
  115. package/src/canvas/graph/history_service.js +0 -0
  116. package/src/canvas/graph/node_platform.js +0 -0
  117. package/src/canvas/index.js +0 -0
  118. package/src/canvas/layered_layout.js +0 -0
  119. package/src/charts/data_series_plot_window.js +0 -0
  120. package/src/charts/downsample.js +0 -0
  121. package/src/charts/plot_config.js +0 -0
  122. package/src/charts/plotly_wrapper.js +0 -0
  123. package/src/core/event_bus.js +0 -0
  124. package/src/core/logging.js +0 -0
  125. package/src/core/settings.js +0 -0
  126. package/src/core/state_guard.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 +0 -0
  130. package/src/editor/monaco_loader.js +0 -0
  131. package/src/editor/notebook_search.js +0 -0
  132. package/src/editor/notebook_undo_manager.js +0 -0
  133. package/src/editor/split_pane_container.js +0 -0
  134. package/src/flow/canvas_editor/connections.js +0 -0
  135. package/src/flow/canvas_editor/editor.js +0 -0
  136. package/src/flow/canvas_editor/index.js +0 -0
  137. package/src/flow/canvas_editor/layout.js +0 -0
  138. package/src/flow/canvas_editor/strings.js +0 -0
  139. package/src/flow/kit/always_before.js +0 -0
  140. package/src/flow/kit/catalogue.js +0 -0
  141. package/src/flow/kit/chip_input.js +0 -0
  142. package/src/flow/kit/dom.js +28 -119
  143. package/src/flow/kit/findings.js +0 -0
  144. package/src/flow/kit/history.js +0 -0
  145. package/src/flow/kit/index.js +0 -0
  146. package/src/flow/kit/keys.js +0 -0
  147. package/src/flow/kit/logic_graph.js +0 -0
  148. package/src/flow/kit/references.js +0 -0
  149. package/src/flow/kit/settings_panel.js +0 -0
  150. package/src/flow/kit/settings_schema.js +0 -0
  151. package/src/flow/kit/step_picker.js +1 -1
  152. package/src/flow/kit/strings.js +0 -0
  153. package/src/flow/kit/value_picker.js +1 -1
  154. package/src/flow/kit/widgets.js +0 -0
  155. package/src/flow/lanes/editor.js +0 -0
  156. package/src/flow/lanes/index.js +0 -0
  157. package/src/flow/lanes/layout.js +0 -0
  158. package/src/flow/lanes/pipeline.js +0 -0
  159. package/src/flow/lanes/preview.js +0 -0
  160. package/src/flow/lanes/strings.js +0 -0
  161. package/src/flow/outline/editor.js +0 -0
  162. package/src/flow/outline/index.js +0 -0
  163. package/src/flow/outline/mapping.js +0 -0
  164. package/src/flow/outline/menu.js +1 -1
  165. package/src/flow/outline/operations.js +0 -0
  166. package/src/flow/outline/recognise.js +0 -0
  167. package/src/flow/outline/strings.js +0 -0
  168. package/src/git/diff_viewer.js +212 -0
  169. package/src/git/diff_window.js +51 -0
  170. package/src/git/git_graph.js +401 -0
  171. package/src/git/git_ops.js +61 -0
  172. package/src/git/git_panel.js +755 -0
  173. package/src/git/index.js +9 -0
  174. package/src/git/line_diff.js +202 -0
  175. package/src/help/help_modal.js +0 -0
  176. package/src/help/help_registry.js +0 -0
  177. package/src/host/external_links.js +0 -0
  178. package/src/host/file_picker.js +0 -0
  179. package/src/host/host.js +0 -0
  180. package/src/host/photino_host.js +0 -0
  181. package/src/host/photino_host.md +0 -0
  182. package/src/host/pywebview_host.js +0 -0
  183. package/src/tiles/chart_tiles.js +0 -0
  184. package/src/tiles/config_schema.js +0 -0
  185. package/src/tiles/figure_tile.js +0 -0
  186. package/src/tiles/layout_persistence.js +0 -0
  187. package/src/tiles/list_tiles.js +0 -0
  188. package/src/tiles/scope_picker.js +0 -0
  189. package/src/tiles/tile_base.js +5 -4
  190. package/src/tiles/tile_config_form.js +0 -0
  191. package/src/tiles/tile_registry.js +0 -0
  192. package/src/tiling/bottom_panel_tabs.js +0 -0
  193. package/src/tiling/command_palette.js +0 -0
  194. package/src/tiling/content_registry.js +0 -0
  195. package/src/tiling/desktops.js +10 -8
  196. package/src/tiling/entity_sources.js +0 -0
  197. package/src/tiling/keymap.js +6 -5
  198. package/src/tiling/kind_taxonomy.js +15 -2
  199. package/src/tiling/landing_table.js +0 -0
  200. package/src/tiling/loading_overlay.js +0 -0
  201. package/src/tiling/nav_panel.js +0 -0
  202. package/src/tiling/page_factory.js +0 -0
  203. package/src/tiling/panel_availability.js +0 -0
  204. package/src/tiling/panel_keys.js +0 -0
  205. package/src/tiling/shell.js +124 -17
  206. package/src/tiling/tab_strip.js +0 -0
  207. package/src/tiling/tile_renderer.js +2 -3
  208. package/src/tiling/tile_tab_menu.js +0 -0
  209. package/src/tiling/zoom.js +0 -0
  210. package/src/ui/base/component_base.js +0 -0
  211. package/src/ui/base/controller_base.js +0 -0
  212. package/src/ui/base/page_base.js +0 -0
  213. package/src/ui/components/about_dialog.js +0 -0
  214. package/src/ui/components/action_dropdown.js +4 -78
  215. package/src/ui/components/alert_log.js +0 -0
  216. package/src/ui/components/alerts_pane.js +0 -0
  217. package/src/ui/components/anchored_layer.js +255 -0
  218. package/src/ui/components/attribute_list_editor.js +0 -0
  219. package/src/ui/components/autocomplete_field.js +0 -0
  220. package/src/ui/components/cell_editor_host.js +0 -0
  221. package/src/ui/components/cell_editors.js +0 -0
  222. package/src/ui/components/cell_grid.js +0 -0
  223. package/src/ui/components/cell_paste.js +0 -0
  224. package/src/ui/components/cell_selection.js +0 -0
  225. package/src/ui/components/chat_shell.js +920 -0
  226. package/src/ui/components/chat_state_machine.js +223 -0
  227. package/src/ui/components/choice_controls.js +45 -2
  228. package/src/ui/components/color_field.js +3 -2
  229. package/src/ui/components/color_list_field.js +3 -2
  230. package/src/ui/components/column_fit.js +0 -0
  231. package/src/ui/components/column_groups.js +0 -0
  232. package/src/ui/components/column_order.js +0 -0
  233. package/src/ui/components/combobox.js +422 -0
  234. package/src/ui/components/conversation_view.js +17 -2
  235. package/src/ui/components/crosstab.js +0 -0
  236. package/src/ui/components/data_table.js +2 -2
  237. package/src/ui/components/detail_header.js +0 -0
  238. package/src/ui/components/document_outline.js +0 -0
  239. package/src/ui/components/drag_reorder.js +0 -0
  240. package/src/ui/components/fact_table.js +0 -0
  241. package/src/ui/components/fill_handle.js +0 -0
  242. package/src/ui/components/filter_builder.js +766 -0
  243. package/src/ui/components/filter_model.js +614 -0
  244. package/src/ui/components/gallery_picker.js +0 -0
  245. package/src/ui/components/header_actions.js +0 -0
  246. package/src/ui/components/inline_renamer.js +0 -0
  247. package/src/ui/components/job_progress.js +0 -0
  248. package/src/ui/components/managed_window.js +24 -47
  249. package/src/ui/components/menu_bar.js +101 -24
  250. package/src/ui/components/modal.js +79 -109
  251. package/src/ui/components/option_list.js +160 -0
  252. package/src/ui/components/popover.js +94 -0
  253. package/src/ui/components/progress.js +0 -0
  254. package/src/ui/components/recent_items.js +169 -0
  255. package/src/ui/components/record_list.js +0 -0
  256. package/src/ui/components/row_activation.js +0 -0
  257. package/src/ui/components/section_stack.js +0 -0
  258. package/src/ui/components/select.js +322 -0
  259. package/src/ui/components/series.js +0 -0
  260. package/src/ui/components/settings_view.js +0 -0
  261. package/src/ui/components/slide_out_panel.js +0 -0
  262. package/src/ui/components/slider_field.js +0 -0
  263. package/src/ui/components/sortable_list.js +0 -0
  264. package/src/ui/components/staged_edits.js +0 -0
  265. package/src/ui/components/staged_history.js +0 -0
  266. package/src/ui/components/table_filter_chips.js +0 -0
  267. package/src/ui/components/table_state_store.js +0 -0
  268. package/src/ui/components/table_structure.js +0 -0
  269. package/src/ui/components/table_values.js +0 -0
  270. package/src/ui/components/tabs.js +0 -0
  271. package/src/ui/components/tag_input.js +77 -8
  272. package/src/ui/components/toast.js +0 -0
  273. package/src/ui/components/toggle_field.js +0 -0
  274. package/src/ui/components/tsv.js +0 -0
  275. package/src/ui/components/window_taskbar.js +0 -0
  276. package/src/ui/components/workspace_picker.js +1155 -0
  277. package/src/ui/controllers/window_chrome_controller.js +4 -1
  278. package/src/ui/utils/auto_scrollbars.js +0 -0
  279. package/src/ui/utils/fire_event.js +17 -0
  280. package/src/ui/utils/focusable.js +25 -0
  281. package/src/ui/utils/markdown.js +0 -0
  282. package/src/ui/utils/modal_host.js +27 -0
  283. package/src/ui/utils/native_context_menu.js +0 -0
  284. package/src/ui/utils/overlay_scrollbar.js +0 -0
  285. package/src/ui/utils/raf_resize_observer.js +0 -0
  286. package/src/ui/utils/scroll_lock.js +0 -0
  287. package/src/ui/utils/strip_scroll.js +0 -0
  288. package/src/ui/utils/tooltip_service.js +0 -0
  289. package/tiles.js +0 -0
  290. package/widgets.js +12 -2
  291. package/wm.js +0 -0
  292. package/css/base.css +0 -10527
  293. package/css/overrides.css +0 -2596
  294. package/dist/chunk-7JI7HHSY.js +0 -107
  295. package/dist/chunk-7JI7HHSY.js.map +0 -7
  296. package/dist/chunk-MIW7D6WC.js +0 -526
  297. package/dist/chunk-MIW7D6WC.js.map +0 -7
  298. package/dist/chunk-PGZ4EHSE.js.map +0 -7
  299. package/dist/chunk-XJNADRGR.js.map +0 -7
  300. /package/dist/{chunk-REJ5HLIM.js.map → chunk-HYJYYEPK.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,75 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.18.0 (2026-11-05)
4
+
5
+ A minor release. A new entry point, `@flexdesk/git`, and six new components for
6
+ what the applications on FlexDesk each kept a copy of: a page rail, a workspace
7
+ picker, a filter builder, a rich select, combobox and popover, and an assistant
8
+ chat shell. The entries under "Changed behaviour" change what embedders see.
9
+
10
+ A consumer on a caret range has to raise it: `^0.17.18` does not take 0.18.0.
11
+
12
+ ### Added
13
+
14
+ - [`@flexdesk/git`, a tenth entry point](docs/concepts/packages-and-entry-points.md#ten-entry-points): [a source-control panel, `createGitPanel`](docs/components/git.md#the-panel-creategitpanel-0180), [a commit graph, `createGitGraph`](docs/components/git.md#the-commit-graph-creategitgraph-0180) and [a diff viewer, `createDiffViewer`](docs/components/git.md#the-diff-viewer-creatediffviewer-0180), with [`computeLineDiff`, the line diff without the viewer](docs/components/git.md#the-line-diff-without-the-viewer-0180) and [`openDiffWindow` and `openGitDiffWindow`](docs/components/git.md#a-diff-in-a-window-opendiffwindow-opengitdiffwindow-0180), over [a written adapter contract](docs/components/git.md#the-git-adapter-contract-0180). A consumer's import map needs `@flexdesk/git`.
15
+ - [The pages as a vertical rail: `chrome.rail`](docs/components/shell.md#the-pages-as-a-vertical-rail-chromerail-0180): `createShell` paints the top-nav kinds as an icon rail, `mountPageRail` does it for a shell of your own, and a kind's `railPin: 'bottom'` holds it at the bottom of the bar. [F1..F12 press the rail's buttons](docs/components/keymap.md#f1f12-and-a-page-rail-0180) as they do the top nav's. `chrome.rail` with `chrome.topNav` is refused at boot.
16
+ - [A workspace picker: `createWorkspacePicker`](docs/components/workspace-picker.md#a-field-and-a-switcher-createworkspacepicker-0180), from [the field, `mountPickerField`](docs/components/workspace-picker.md#the-field-mountpickerfield-0180) and [the switcher, `createPickerSwitcher`](docs/components/workspace-picker.md#the-switcher-createpickerswitcher-0180), and [a store of what was recently opened, `createRecentItems`](docs/components/workspace-picker.md#recently-opened-createrecentitems-0180).
17
+ - A filter builder: [the model, `createFilterModel`](docs/components/filter-builder.md#the-model-createfiltermodel-0180) with [its condition tree](docs/components/filter-builder.md#the-condition-tree-0180), [the builder, `createFilterBuilder`](docs/components/filter-builder.md#the-builder-createfilterbuilder-0180) with [custom value editors](docs/components/filter-builder.md#a-custom-value-editor-0180), and [the dialog, `openFilterDialog`](docs/components/filter-builder.md#the-dialog-openfilterdialog-0180).
18
+ - [A select drawn in the DOM: `createSelect`](docs/components/input-fields.md#a-select-drawn-in-the-dom-createselect-0180), [a text box that also offers a list: `createCombobox`](docs/components/input-fields.md#a-text-box-that-also-offers-a-list-createcombobox-0180) and [a rich popover: `openPopover`](docs/components/menus.md#a-rich-popover-openpopover-0180), on [one rule for an anchored layer: `positionAnchored`, `openAnchoredLayer`, `isInAnchoredLayer`](docs/components/menus.md#an-anchored-layer-positionanchored-openanchoredlayer-0180).
19
+ - [An assistant chat: `mountChatShell`](docs/components/chat-shell.md#an-assistant-chat-mountchatshell-0180), a domain-free chat over the conversation view with its state machine (`ChatStateMachine`) and a transport of yours.
20
+ - [Taking one message out of a conversation: `view.remove(id)`](docs/components/conversation.md#taking-one-message-out-remove-0180).
21
+ - [Tag suggestions and one spelling for tags: `suggestions`, `normalise`](docs/components/input-fields.md#suggestions-and-one-spelling-for-tags-suggestions-normalise-0180) on the tag input.
22
+ - [A modal that can refuse to close: `beforeClose`](docs/components/forms-and-dialogs.md#a-modal-that-can-refuse-to-close-beforeclose-0180) on `openModal`.
23
+
24
+ ### Changed behaviour
25
+
26
+ - **[A saved desktop with no `tree` is an empty desktop](docs/components/panels-and-desktops.md#a-desktop-with-no-tree-is-an-empty-desktop-0180).** It loads, seeded with the root kind, and its siblings load with it. **Upgrade warning for a host that composes the layout blob:** from 0.17.14 to 0.17.18 a desktop with no `tree` key set the whole layout aside, and the next layout change overwrote the user's saved desktops for good. Go straight to 0.18.0, or write `tree: null` on those releases. A layout that is still unreadable is still set aside whole and overwritten at the next save.
27
+ - **Tab stays inside a popover.** [`openPopover`](docs/components/menus.md#a-rich-popover-openpopover-0180) goes round its controls, as a modal and a `CategoryPicker` do, and Escape is the way out. The flow kit's popover is now this one, so the step picker and *Insert a value* no longer close when Tab leaves them.
28
+ - **A modal's focus trap leaves focus in an anchored layer alone**, so a popover opened from a modal keeps its focus.
29
+ - **The flow kit's popover: test `handle.el`, not `handle.toggled`.** `toggled` is true only when the call closed the popover its anchor held. An anchor that is not on the page now opens nothing and answers `el: null`, `toggled: false`, so a caller asking whether anything opened tests `!handle.el`. Two kit popovers can now be open when one owns the other's anchor, and the outline menu answers `el: null` when nothing opened.
30
+ - **`taxonomy.topNavEntries()` entries carry `railPin`** (null unless set). A consumer's test that deep-compares an entry sees the new key. `railPin` of any other value, or on a kind that is not `isTopNav`, is a boot error.
31
+ - `.twm-fl-bar` and `.twm-fl-item` had rules and no code that drew them. They are now the rail's: `.twm-fl-bar` has its width, background and overflow and no `height: 100%`, and `.twm-fl-item`'s grey comes from `--twm-rail-icon` ([details](docs/components/shell.md#the-pages-as-a-vertical-rail-chromerail-0180)).
32
+ - [An `openForm` combobox field draws with `createCombobox`](docs/components/forms-and-dialogs.md#it-is-createcombobox-0180), not an `<input list>`: Enter with the list open closes the list and the next one submits, Escape closes the list and leaves the form open, there is no `<datalist>`, and `.twm-combobox__hint` has no `data-for`.
33
+ - [The tag input](docs/components/input-fields.md#suggestions-and-one-spelling-for-tags-suggestions-normalise-0180): the list it opens with, and `setValue`'s, drop a repeat unless `allowDuplicates` is set, as typing always did.
34
+ - `ActionDropdown` places its menu with `positionAnchored`, the one placement every floating panel uses.
35
+ - `shell.dispose()` empties `chrome.topNav` and takes its click listener off. The element is the embedder's and outlives the shell, and a shell rebuilt on it left each dead shell opening pages too.
36
+ - The DOM events FlexDesk fires (`managed-window-*`, `tile:*-request`, a select's, combobox's, colour field's and form field's `input` and `change`) are built by the target's own window. A bare constructor threw under jsdom on Node 19 or later, in the middle of a window's close, so a consumer's suite no longer needs to replace the global `CustomEvent` for them.
37
+
38
+ ### Removed files
39
+
40
+ - `css/base.css` and `css/overrides.css` are gone from the package. They were the sources `css/flexdesk.css` was once generated from; the generator has left the repository, `exports` never mapped them and no consumer loaded them, and they lacked more than half of the library's rules. `flexdesk/css`, `flexdesk/css/tokens` and `flexdesk/css/reset` are unchanged. A rule that once went in both goes in `css/flexdesk.css` alone.
41
+
42
+ ### Removed or renamed exports
43
+
44
+ None. Compared with 0.17.18 across every entry point. New:
45
+
46
+ - `@flexdesk/git`: `createGitPanel`, `createGitGraph`, `createDiffViewer`, `openDiffWindow`, `openGitDiffWindow`, `computeGraphLanes`, `parseGitRefs`, `computeLineDiff`, `parseUnifiedDiff`, `splitLines`, `diffStats`, `LINE_DIFF_LIMIT`.
47
+ - `@flexdesk/wm`: `mountPageRail`; the `chrome.rail` option, `shell.chrome.railEl` and `KindDef.railPin`.
48
+ - `@flexdesk/widgets`:
49
+ - the select, combobox and layers: `createSelect`, `createCombobox`, `attachInputOptions`, `filterOptions`, `openPopover`, `positionAnchored`, `openAnchoredLayer`, `isInAnchoredLayer`;
50
+ - the picker: `createWorkspacePicker`, `mountPickerField`, `createPickerSwitcher`, `createRecentItems`;
51
+ - the filter: `createFilterModel`, `createFilterBuilder`, `openFilterDialog`, `emptyFilter`, `cloneFilter`, `parseFilter`, `serializeFilter`, `countConditions`, `coerceFilterValue`, `toConditionTree`, `fromConditionTree`, `FILTER_OPERATORS`, `FILTER_TYPE_OPERATORS`;
52
+ - the chat: `mountChatShell`, `ChatStateMachine`, `CHAT_STATES`, `CHAT_TRANSITIONS`, `CHAT_BUS_EVENTS`, `CHAT_TRANSPORT_EVENTS`, `CHAT_SHELL_LABELS`.
53
+ - `view.remove(id)` on the conversation view; `createTagInput`'s `suggestions` and `normalise` options; `openModal`'s `beforeClose` option.
54
+ - Custom properties in `tokens.css`: `--twm-diff-add-bg`, `--twm-diff-add-fg`, `--twm-diff-del-bg`, `--twm-diff-del-fg`, `--twm-git-lane-0` to `--twm-git-lane-7`, `--twm-rail-width`, `--twm-rail-item-height`, `--twm-rail-icon-size`, `--twm-rail-bg`, `--twm-rail-icon`, `--twm-rail-icon-on`.
55
+
56
+ ## 0.17.18 (2026-10-27)
57
+
58
+ A patch release. One additive menu bar option; one entry changes what
59
+ embedders see (listed under "Changed behaviour").
60
+
61
+ ### Added
62
+
63
+ - [A hamburger instead of the bar: `style: 'hamburger'`](docs/components/menus.md#a-hamburger-instead-of-the-bar-style-hamburger-01718): `createMenuBar` (and `createShell`'s `menuBar`) can draw the menus as one icon button whose menu flies out each menu's items. Same model, `onAction`, `setEnabled` / `setChecked` and `commands()`; `open(menuId)` opens it with that menu flown out. `bar.setStyle('bar' | 'hamburger')` switches at run time and `bar.style` reads it; `icon` sets the glyph (`'menu'`) (STORY-0133).
64
+
65
+ ### Changed behaviour
66
+
67
+ - `WindowChromeController` never starts a window drag from a press inside a `.twm-menubar`: a hamburger in the top bar drops its menus inside the bar, and a press on a menu's padding or separator dragged the window (STORY-0133).
68
+
69
+ ### Removed or renamed exports
70
+
71
+ None. New: `MenuBar#setStyle`, `MenuBar#style`, the `style` and `icon` options, the `.twm-menubar--hamburger` and `.twm-menubar__title--icon` classes.
72
+
3
73
  ## 0.17.17 (2026-10-27)
4
74
 
5
75
  A patch release. One additive taxonomy option and notification copying; one
package/LICENSE CHANGED
File without changes
package/README.md CHANGED
@@ -31,6 +31,7 @@ Import only what you use. The entries share their code, so loading several does
31
31
  | `@flexdesk/editor` | A Monaco multi-file editor (Monaco is a peer dependency) |
32
32
  | `@flexdesk/canvas` | A pannable, zoomable canvas with an edge router and a graph layer |
33
33
  | `@flexdesk/flow` | Flow editors: canvas, outline and lanes |
34
+ | `@flexdesk/git` | A source-control panel, a commit graph and a diff viewer, over a written adapter contract |
34
35
 
35
36
  With npm the entries are imported as `flexdesk/wm`, `flexdesk/widgets` and so on. The docs write them as `@flexdesk/…`, the names an import map gives them. [Packages and entry points](docs/concepts/packages-and-entry-points.md) has the sizes.
36
37
 
File without changes
package/canvas.js CHANGED
File without changes
package/charts.js CHANGED
File without changes
package/core.js CHANGED
File without changes