flexdesk 0.17.16 → 0.17.18

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 (222) 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 +32 -1
  9. package/css/flexdesk.css +32 -1
  10. package/css/reset.css +0 -0
  11. package/css/tokens.css +3 -0
  12. package/dist/canvas.js +0 -0
  13. package/dist/canvas.js.map +0 -0
  14. package/dist/chunk-3PHCPZHT.js +0 -0
  15. package/dist/chunk-3PHCPZHT.js.map +0 -0
  16. package/dist/chunk-FOOS3T5L.js +0 -0
  17. package/dist/chunk-FOOS3T5L.js.map +0 -0
  18. package/dist/chunk-GOQLR5WR.js +0 -0
  19. package/dist/chunk-GOQLR5WR.js.map +0 -0
  20. package/dist/{chunk-JKZLNKG6.js → chunk-HKPB6OFA.js} +90 -25
  21. package/dist/{chunk-JKZLNKG6.js.map → chunk-HKPB6OFA.js.map} +2 -2
  22. package/dist/chunk-HNU6MM2B.js +0 -0
  23. package/dist/chunk-HNU6MM2B.js.map +0 -0
  24. package/dist/chunk-JYWURG5T.js +0 -0
  25. package/dist/chunk-JYWURG5T.js.map +0 -0
  26. package/dist/chunk-N7HC3ADV.js +0 -0
  27. package/dist/chunk-N7HC3ADV.js.map +0 -0
  28. package/dist/editor.js.map +0 -0
  29. package/dist/flexdesk.css +32 -1
  30. package/dist/flow.js.map +0 -0
  31. package/dist/host.js +0 -0
  32. package/dist/host.js.map +0 -0
  33. package/dist/reset.css +0 -0
  34. package/dist/tile_registry-6WZPTUZV.js +0 -0
  35. package/dist/tile_registry-6WZPTUZV.js.map +0 -0
  36. package/dist/tokens.css +3 -0
  37. package/dist/widgets.js +4115 -4089
  38. package/dist/widgets.js.map +4 -4
  39. package/dist/wm.js +115 -31
  40. package/dist/wm.js.map +2 -2
  41. package/docs/components/command-palette.md +0 -0
  42. package/docs/components/conversation.md +0 -0
  43. package/docs/components/data-table-grid.md +0 -0
  44. package/docs/components/data-table.md +0 -0
  45. package/docs/components/editor.md +0 -0
  46. package/docs/components/flow-canvas-editor.md +0 -0
  47. package/docs/components/flow-editors.md +0 -0
  48. package/docs/components/flow-lane-editor.md +0 -0
  49. package/docs/components/flow-outline-editor.md +0 -0
  50. package/docs/components/input-fields.md +0 -0
  51. package/docs/components/markdown-and-outline.md +0 -0
  52. package/docs/components/menus.md +38 -1
  53. package/docs/components/notifications.md +23 -1
  54. package/docs/components/panels-and-desktops.md +22 -0
  55. package/docs/components/record-list-and-fact-table.md +0 -0
  56. package/docs/components/settings-view.md +0 -0
  57. package/docs/components/shell.md +54 -0
  58. package/docs/components/wizard.md +0 -0
  59. package/docs/concepts/building-and-packaging.md +0 -0
  60. package/docs/concepts/domain-neutrality.md +0 -0
  61. package/docs/concepts/host-port.md +0 -0
  62. package/docs/concepts/packages-and-entry-points.md +0 -0
  63. package/docs/concepts/peer-dependencies.md +0 -0
  64. package/docs/quickstart.md +0 -0
  65. package/editor.js +0 -0
  66. package/flow.js +0 -0
  67. package/host.js +0 -0
  68. package/package.json +1 -1
  69. package/src/canvas/canvas_adapter.js +0 -0
  70. package/src/canvas/edge_router.js +0 -0
  71. package/src/canvas/graph/connector_router.js +0 -0
  72. package/src/canvas/graph/history_service.js +0 -0
  73. package/src/canvas/graph/node_platform.js +0 -0
  74. package/src/canvas/index.js +0 -0
  75. package/src/canvas/layered_layout.js +0 -0
  76. package/src/charts/data_series_plot_window.js +0 -0
  77. package/src/charts/downsample.js +0 -0
  78. package/src/charts/plot_config.js +0 -0
  79. package/src/charts/plotly_wrapper.js +0 -0
  80. package/src/core/event_bus.js +0 -0
  81. package/src/core/logging.js +0 -0
  82. package/src/core/settings.js +0 -0
  83. package/src/core/state_guard.js +0 -0
  84. package/src/core/state_machine.js +0 -0
  85. package/src/editor/editor_pane.js +0 -0
  86. package/src/editor/monaco_editor_factory.js +0 -0
  87. package/src/editor/monaco_loader.js +0 -0
  88. package/src/editor/notebook_search.js +0 -0
  89. package/src/editor/notebook_undo_manager.js +0 -0
  90. package/src/editor/split_pane_container.js +0 -0
  91. package/src/flow/canvas_editor/connections.js +0 -0
  92. package/src/flow/canvas_editor/editor.js +0 -0
  93. package/src/flow/canvas_editor/index.js +0 -0
  94. package/src/flow/canvas_editor/layout.js +0 -0
  95. package/src/flow/canvas_editor/strings.js +0 -0
  96. package/src/flow/kit/always_before.js +0 -0
  97. package/src/flow/kit/catalogue.js +0 -0
  98. package/src/flow/kit/chip_input.js +0 -0
  99. package/src/flow/kit/dom.js +0 -0
  100. package/src/flow/kit/findings.js +0 -0
  101. package/src/flow/kit/history.js +0 -0
  102. package/src/flow/kit/index.js +0 -0
  103. package/src/flow/kit/keys.js +0 -0
  104. package/src/flow/kit/logic_graph.js +0 -0
  105. package/src/flow/kit/references.js +0 -0
  106. package/src/flow/kit/settings_panel.js +0 -0
  107. package/src/flow/kit/settings_schema.js +0 -0
  108. package/src/flow/kit/step_picker.js +0 -0
  109. package/src/flow/kit/strings.js +0 -0
  110. package/src/flow/kit/value_picker.js +0 -0
  111. package/src/flow/kit/widgets.js +0 -0
  112. package/src/flow/lanes/editor.js +0 -0
  113. package/src/flow/lanes/index.js +0 -0
  114. package/src/flow/lanes/layout.js +0 -0
  115. package/src/flow/lanes/pipeline.js +0 -0
  116. package/src/flow/lanes/preview.js +0 -0
  117. package/src/flow/lanes/strings.js +0 -0
  118. package/src/flow/outline/editor.js +0 -0
  119. package/src/flow/outline/index.js +0 -0
  120. package/src/flow/outline/mapping.js +0 -0
  121. package/src/flow/outline/menu.js +0 -0
  122. package/src/flow/outline/operations.js +0 -0
  123. package/src/flow/outline/recognise.js +0 -0
  124. package/src/flow/outline/strings.js +0 -0
  125. package/src/help/help_modal.js +0 -0
  126. package/src/help/help_registry.js +0 -0
  127. package/src/host/external_links.js +0 -0
  128. package/src/host/file_picker.js +0 -0
  129. package/src/host/host.js +0 -0
  130. package/src/host/photino_host.js +0 -0
  131. package/src/host/photino_host.md +0 -0
  132. package/src/host/pywebview_host.js +0 -0
  133. package/src/tiles/chart_tiles.js +0 -0
  134. package/src/tiles/config_schema.js +0 -0
  135. package/src/tiles/figure_tile.js +0 -0
  136. package/src/tiles/layout_persistence.js +0 -0
  137. package/src/tiles/list_tiles.js +0 -0
  138. package/src/tiles/scope_picker.js +0 -0
  139. package/src/tiles/tile_config_form.js +0 -0
  140. package/src/tiles/tile_registry.js +0 -0
  141. package/src/tiling/bottom_panel_tabs.js +0 -0
  142. package/src/tiling/command_palette.js +0 -0
  143. package/src/tiling/content_registry.js +0 -0
  144. package/src/tiling/entity_sources.js +0 -0
  145. package/src/tiling/kind_taxonomy.js +21 -13
  146. package/src/tiling/landing_table.js +0 -0
  147. package/src/tiling/loading_overlay.js +0 -0
  148. package/src/tiling/nav_panel.js +0 -0
  149. package/src/tiling/page_factory.js +0 -0
  150. package/src/tiling/panel_availability.js +0 -0
  151. package/src/tiling/panel_keys.js +0 -0
  152. package/src/tiling/shell.js +4 -1
  153. package/src/tiling/tab_strip.js +0 -0
  154. package/src/tiling/tile_renderer.js +0 -0
  155. package/src/tiling/tile_tab_menu.js +0 -0
  156. package/src/tiling/wm.js +123 -28
  157. package/src/tiling/zoom.js +0 -0
  158. package/src/ui/base/component_base.js +0 -0
  159. package/src/ui/base/controller_base.js +0 -0
  160. package/src/ui/base/page_base.js +0 -0
  161. package/src/ui/components/about_dialog.js +0 -0
  162. package/src/ui/components/alert_log.js +0 -0
  163. package/src/ui/components/alerts_pane.js +0 -0
  164. package/src/ui/components/attribute_list_editor.js +0 -0
  165. package/src/ui/components/autocomplete_field.js +0 -0
  166. package/src/ui/components/cell_editor_host.js +0 -0
  167. package/src/ui/components/cell_editors.js +0 -0
  168. package/src/ui/components/cell_grid.js +0 -0
  169. package/src/ui/components/cell_paste.js +0 -0
  170. package/src/ui/components/cell_selection.js +0 -0
  171. package/src/ui/components/choice_controls.js +0 -0
  172. package/src/ui/components/color_field.js +0 -0
  173. package/src/ui/components/color_list_field.js +0 -0
  174. package/src/ui/components/column_fit.js +0 -0
  175. package/src/ui/components/column_groups.js +0 -0
  176. package/src/ui/components/column_order.js +0 -0
  177. package/src/ui/components/conversation_view.js +0 -0
  178. package/src/ui/components/crosstab.js +0 -0
  179. package/src/ui/components/detail_header.js +0 -0
  180. package/src/ui/components/document_outline.js +0 -0
  181. package/src/ui/components/drag_reorder.js +0 -0
  182. package/src/ui/components/fact_table.js +0 -0
  183. package/src/ui/components/fill_handle.js +0 -0
  184. package/src/ui/components/gallery_picker.js +0 -0
  185. package/src/ui/components/header_actions.js +0 -0
  186. package/src/ui/components/inline_renamer.js +0 -0
  187. package/src/ui/components/job_progress.js +0 -0
  188. package/src/ui/components/menu_bar.js +101 -24
  189. package/src/ui/components/notification_history.js +11 -1
  190. package/src/ui/components/progress.js +0 -0
  191. package/src/ui/components/record_list.js +0 -0
  192. package/src/ui/components/row_activation.js +0 -0
  193. package/src/ui/components/section_stack.js +0 -0
  194. package/src/ui/components/series.js +0 -0
  195. package/src/ui/components/settings_view.js +0 -0
  196. package/src/ui/components/slide_out_panel.js +0 -0
  197. package/src/ui/components/slider_field.js +0 -0
  198. package/src/ui/components/sortable_list.js +0 -0
  199. package/src/ui/components/staged_edits.js +0 -0
  200. package/src/ui/components/staged_history.js +0 -0
  201. package/src/ui/components/table_filter_chips.js +0 -0
  202. package/src/ui/components/table_state_store.js +0 -0
  203. package/src/ui/components/table_structure.js +0 -0
  204. package/src/ui/components/table_values.js +0 -0
  205. package/src/ui/components/tabs.js +0 -0
  206. package/src/ui/components/tag_input.js +0 -0
  207. package/src/ui/components/toast.js +0 -0
  208. package/src/ui/components/toggle_field.js +0 -0
  209. package/src/ui/components/tsv.js +0 -0
  210. package/src/ui/components/window_taskbar.js +0 -0
  211. package/src/ui/controllers/window_chrome_controller.js +4 -1
  212. package/src/ui/notification_center.js +47 -1
  213. package/src/ui/utils/auto_scrollbars.js +0 -0
  214. package/src/ui/utils/markdown.js +0 -0
  215. package/src/ui/utils/native_context_menu.js +0 -0
  216. package/src/ui/utils/overlay_scrollbar.js +0 -0
  217. package/src/ui/utils/raf_resize_observer.js +0 -0
  218. package/src/ui/utils/scroll_lock.js +0 -0
  219. package/src/ui/utils/strip_scroll.js +0 -0
  220. package/src/ui/utils/tooltip_service.js +0 -0
  221. package/tiles.js +0 -0
  222. package/wm.js +0 -0
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
@@ -404,10 +404,13 @@ export class WindowChromeController {
404
404
  // What never starts a drag: anything you can click or type into. An
405
405
  // embedder adds its own with `noDrag`. (`.window-controls` and
406
406
  // `.panel-toggles` are kept for embedders' own markup of that shape.)
407
+ // A menu bar in the top bar (a hamburger, STORY-0133) drops its menus
408
+ // inside the bar's DOM: a press on a menu's padding or separator is
409
+ // in the bar, not a drag.
407
410
  const NO_DRAG_SELECTOR = [
408
411
  '.no-drag', 'button', 'a', 'input', 'select', 'textarea', 'label',
409
412
  '[role="button"]', '[role="menuitem"]', '[role="tab"]', '[contenteditable="true"]',
410
- '.twm-window-controls', '.window-controls', '.panel-toggles',
413
+ '.twm-window-controls', '.window-controls', '.panel-toggles', '.twm-menubar',
411
414
  this._noDrag,
412
415
  ].filter(Boolean).join(', ');
413
416
 
@@ -35,11 +35,20 @@
35
35
  * `log:entry`). A toast that leaves marks its own entry `dismissed` with a
36
36
  * `reason`; it adds none. `subscribe(fn)` calls `fn(entry, center)` for each
37
37
  * entry added, so a history view follows the centre rather than the bus.
38
+ *
39
+ * Copy message (STORY-0131)
40
+ * -------------------------
41
+ * A right-click on a toast, or on its entry in the history, opens the context
42
+ * menu with "Copy message": the title, the message and the description, one
43
+ * per line, go to the clipboard as plain text. The text is also selectable:
44
+ * a click on the title, message, description or status, or one that ends a
45
+ * selection, does not close the toast; only a click on its chrome does.
38
46
  */
39
47
  import { ComponentBase } from './base/component_base.js';
40
48
  import { getSetting } from '../core/settings.js';
41
49
  import { setToastBus, getToastBus } from './components/toast.js';
42
50
  import { ProgressBar } from './components/progress.js';
51
+ import { showContextMenu } from './components/context_menu.js';
43
52
 
44
53
  const SEVERITIES = ['info', 'success', 'warn', 'error', 'fatal'];
45
54
 
@@ -60,6 +69,39 @@ const DEFAULT_LOG_LEVELS = new Set(['warn', 'error', 'fatal']);
60
69
  // Messages from these namespaces are self-descriptive and need no category header.
61
70
  const SUPPRESSED_NAMESPACE_TITLES = new Set(['bootstrap', 'app']);
62
71
 
72
+ /** A notification as plain text: its title, message and description, one per line. */
73
+ export function notificationText(notification) {
74
+ return [notification.title, notification.message, notification.description]
75
+ .filter((part) => part != null && String(part) !== '')
76
+ .join('\n');
77
+ }
78
+
79
+ /**
80
+ * The right-click menu of a toast or a history entry: "Copy message". It takes
81
+ * the right-click, so the browser's own menu does not open.
82
+ */
83
+ export function showNotificationMenu(event, notification, logger) {
84
+ event.preventDefault();
85
+ event.stopPropagation();
86
+ showContextMenu(event.clientX, event.clientY,
87
+ [{ label: 'Copy message', icon: 'content_copy', action: 'copy' }],
88
+ () => {
89
+ Promise.resolve()
90
+ .then(() => navigator.clipboard.writeText(notificationText(notification)))
91
+ .catch((err) => logger?.warn?.('twm-notification-center', 'Copy message failed', { err }));
92
+ });
93
+ }
94
+
95
+ /** The toast's text: clicking it selects, it does not dismiss. */
96
+ const TOAST_TEXT = '.twm-notification__title, .twm-notification__body, '
97
+ + '.twm-notification__description, .twm-notification__status';
98
+
99
+ /** A non-empty text selection inside `el`: a click that ends one is not a click on it. */
100
+ function selectsTextIn(el) {
101
+ const sel = el.ownerDocument.getSelection?.();
102
+ return Boolean(sel && !sel.isCollapsed && sel.rangeCount && el.contains(sel.getRangeAt(0).commonAncestorContainer));
103
+ }
104
+
63
105
  export class NotificationCenter extends ComponentBase {
64
106
  #items;
65
107
  #summaryEl;
@@ -752,12 +794,16 @@ export class NotificationCenter extends ComponentBase {
752
794
  item.appendChild(actionsEl);
753
795
  }
754
796
 
797
+ // A click on the text is the start of selecting it (a double-click's
798
+ // first click leaves only a caret), so only the toast's chrome closes it.
755
799
  item.addEventListener('click', (event) => {
756
- if (event.target.closest('button') || NotificationCenter.#isRunning(notification)) {
800
+ if (event.target.closest(`button, ${TOAST_TEXT}`) || NotificationCenter.#isRunning(notification)
801
+ || selectsTextIn(item)) {
757
802
  return;
758
803
  }
759
804
  this.dismiss(notification.id, 'click');
760
805
  });
806
+ item.addEventListener('contextmenu', (event) => showNotificationMenu(event, notification, this.logger));
761
807
 
762
808
  this.#patchItem(entry, notification);
763
809
  return entry;
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/tiles.js CHANGED
File without changes
package/wm.js CHANGED
File without changes