flexdesk 0.17.12 → 0.17.14

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 (258) hide show
  1. package/CHANGELOG.md +44 -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 +61 -0
  9. package/css/flexdesk.css +85 -2
  10. package/css/overrides.css +24 -2
  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 +3 -3
  15. package/dist/{chunk-NIJEJAZ7.js → chunk-2PM6ZMNS.js} +2 -2
  16. package/dist/chunk-3PHCPZHT.js +0 -0
  17. package/dist/chunk-3PHCPZHT.js.map +0 -0
  18. package/dist/chunk-FOOS3T5L.js +0 -0
  19. package/dist/chunk-FOOS3T5L.js.map +0 -0
  20. package/dist/chunk-GOQLR5WR.js +0 -0
  21. package/dist/chunk-GOQLR5WR.js.map +0 -0
  22. package/dist/chunk-HNU6MM2B.js +0 -0
  23. package/dist/chunk-HNU6MM2B.js.map +0 -0
  24. package/dist/{chunk-F35XSQWA.js → chunk-IG74S3ZH.js} +2 -2
  25. package/dist/chunk-JKZLNKG6.js +0 -0
  26. package/dist/chunk-JKZLNKG6.js.map +0 -0
  27. package/dist/chunk-JYWURG5T.js +0 -0
  28. package/dist/chunk-JYWURG5T.js.map +0 -0
  29. package/dist/{chunk-CVMCZZX2.js → chunk-MADMGRX2.js} +18 -7
  30. package/dist/chunk-MADMGRX2.js.map +7 -0
  31. package/dist/chunk-N7HC3ADV.js +0 -0
  32. package/dist/chunk-N7HC3ADV.js.map +0 -0
  33. package/dist/{chunk-75FLVAUT.js → chunk-TLIV6QSU.js} +3 -3
  34. package/dist/{chunk-BE2PU3LL.js → chunk-ZMH3OC7H.js} +2 -2
  35. package/dist/core.js +3 -18
  36. package/dist/core.js.map +2 -2
  37. package/dist/editor.js.map +0 -0
  38. package/dist/flexdesk.css +85 -2
  39. package/dist/flow.js +3 -3
  40. package/dist/flow.js.map +0 -0
  41. package/dist/host.js +0 -0
  42. package/dist/host.js.map +0 -0
  43. package/dist/reset.css +0 -0
  44. package/dist/tile_registry-6WZPTUZV.js +0 -0
  45. package/dist/tile_registry-6WZPTUZV.js.map +0 -0
  46. package/dist/tiles.js +5 -5
  47. package/dist/widgets.js +31 -22
  48. package/dist/widgets.js.map +2 -2
  49. package/dist/wm.js +198 -31
  50. package/dist/wm.js.map +3 -3
  51. package/docs/README.md +1 -1
  52. package/docs/best-practices.md +1 -1
  53. package/docs/components/command-palette.md +0 -0
  54. package/docs/components/conversation.md +0 -0
  55. package/docs/components/data-table-grid.md +0 -0
  56. package/docs/components/data-table.md +0 -0
  57. package/docs/components/editor.md +0 -0
  58. package/docs/components/flow-canvas-editor.md +0 -0
  59. package/docs/components/flow-editors.md +0 -0
  60. package/docs/components/flow-lane-editor.md +0 -0
  61. package/docs/components/flow-outline-editor.md +0 -0
  62. package/docs/components/forms-and-dialogs.md +0 -0
  63. package/docs/components/input-fields.md +0 -0
  64. package/docs/components/keymap.md +66 -3
  65. package/docs/components/layout-widgets.md +32 -0
  66. package/docs/components/markdown-and-outline.md +0 -0
  67. package/docs/components/menus.md +63 -0
  68. package/docs/components/notifications.md +0 -0
  69. package/docs/components/panels-and-desktops.md +56 -0
  70. package/docs/components/record-list-and-fact-table.md +0 -0
  71. package/docs/components/settings-view.md +0 -0
  72. package/docs/components/shell.md +0 -0
  73. package/docs/components/slide-out-panel.md +0 -0
  74. package/docs/components/wizard.md +0 -0
  75. package/docs/concepts/building-and-packaging.md +0 -0
  76. package/docs/concepts/domain-neutrality.md +0 -0
  77. package/docs/concepts/host-port.md +0 -0
  78. package/docs/concepts/packages-and-entry-points.md +0 -0
  79. package/docs/concepts/peer-dependencies.md +0 -0
  80. package/docs/concepts/state-guard.md +65 -2
  81. package/docs/concepts/styling.md +24 -6
  82. package/docs/quickstart.md +0 -0
  83. package/editor.js +0 -0
  84. package/flow.js +0 -0
  85. package/host.js +0 -0
  86. package/package.json +2 -2
  87. package/src/canvas/canvas_adapter.js +0 -0
  88. package/src/canvas/edge_router.js +0 -0
  89. package/src/canvas/graph/connector_router.js +0 -0
  90. package/src/canvas/graph/history_service.js +0 -0
  91. package/src/canvas/graph/node_platform.js +0 -0
  92. package/src/canvas/index.js +0 -0
  93. package/src/canvas/layered_layout.js +0 -0
  94. package/src/charts/data_series_plot_window.js +0 -0
  95. package/src/charts/downsample.js +0 -0
  96. package/src/charts/plot_config.js +0 -0
  97. package/src/charts/plotly_wrapper.js +0 -0
  98. package/src/core/event_bus.js +0 -0
  99. package/src/core/logging.js +0 -0
  100. package/src/core/settings.js +0 -0
  101. package/src/core/state_guard.js +0 -0
  102. package/src/core/state_guard_config.js +19 -18
  103. package/src/core/state_machine.js +0 -0
  104. package/src/editor/editor_pane.js +0 -0
  105. package/src/editor/monaco_editor_factory.js +0 -0
  106. package/src/editor/monaco_loader.js +0 -0
  107. package/src/editor/notebook_search.js +0 -0
  108. package/src/editor/notebook_undo_manager.js +0 -0
  109. package/src/editor/split_pane_container.js +0 -0
  110. package/src/flow/canvas_editor/connections.js +0 -0
  111. package/src/flow/canvas_editor/editor.js +0 -0
  112. package/src/flow/canvas_editor/index.js +0 -0
  113. package/src/flow/canvas_editor/layout.js +0 -0
  114. package/src/flow/canvas_editor/strings.js +0 -0
  115. package/src/flow/kit/always_before.js +0 -0
  116. package/src/flow/kit/catalogue.js +0 -0
  117. package/src/flow/kit/chip_input.js +0 -0
  118. package/src/flow/kit/dom.js +0 -0
  119. package/src/flow/kit/findings.js +0 -0
  120. package/src/flow/kit/history.js +0 -0
  121. package/src/flow/kit/index.js +0 -0
  122. package/src/flow/kit/keys.js +0 -0
  123. package/src/flow/kit/logic_graph.js +0 -0
  124. package/src/flow/kit/references.js +0 -0
  125. package/src/flow/kit/settings_panel.js +0 -0
  126. package/src/flow/kit/settings_schema.js +0 -0
  127. package/src/flow/kit/step_picker.js +0 -0
  128. package/src/flow/kit/strings.js +0 -0
  129. package/src/flow/kit/value_picker.js +0 -0
  130. package/src/flow/kit/widgets.js +0 -0
  131. package/src/flow/lanes/editor.js +0 -0
  132. package/src/flow/lanes/index.js +0 -0
  133. package/src/flow/lanes/layout.js +0 -0
  134. package/src/flow/lanes/pipeline.js +0 -0
  135. package/src/flow/lanes/preview.js +0 -0
  136. package/src/flow/lanes/strings.js +0 -0
  137. package/src/flow/outline/editor.js +0 -0
  138. package/src/flow/outline/index.js +0 -0
  139. package/src/flow/outline/mapping.js +0 -0
  140. package/src/flow/outline/menu.js +0 -0
  141. package/src/flow/outline/operations.js +0 -0
  142. package/src/flow/outline/recognise.js +0 -0
  143. package/src/flow/outline/strings.js +0 -0
  144. package/src/help/help_modal.js +0 -0
  145. package/src/help/help_registry.js +0 -0
  146. package/src/host/external_links.js +0 -0
  147. package/src/host/file_picker.js +0 -0
  148. package/src/host/host.js +0 -0
  149. package/src/host/photino_host.js +0 -0
  150. package/src/host/photino_host.md +0 -0
  151. package/src/host/pywebview_host.js +0 -0
  152. package/src/tiles/chart_tiles.js +0 -0
  153. package/src/tiles/config_schema.js +0 -0
  154. package/src/tiles/figure_tile.js +0 -0
  155. package/src/tiles/layout_persistence.js +0 -0
  156. package/src/tiles/list_tiles.js +0 -0
  157. package/src/tiles/scope_picker.js +0 -0
  158. package/src/tiles/tile_config_form.js +0 -0
  159. package/src/tiles/tile_grid.js +0 -0
  160. package/src/tiles/tile_registry.js +0 -0
  161. package/src/tiling/bottom_panel_tabs.js +0 -0
  162. package/src/tiling/command_palette.js +0 -0
  163. package/src/tiling/content_registry.js +0 -0
  164. package/src/tiling/desktops.js +79 -16
  165. package/src/tiling/entity_sources.js +0 -0
  166. package/src/tiling/keymap.js +70 -2
  167. package/src/tiling/kind_taxonomy.js +0 -0
  168. package/src/tiling/landing_table.js +0 -0
  169. package/src/tiling/loading_overlay.js +0 -0
  170. package/src/tiling/nav_panel.js +0 -0
  171. package/src/tiling/page_factory.js +0 -0
  172. package/src/tiling/panel_availability.js +0 -0
  173. package/src/tiling/panel_keys.js +0 -0
  174. package/src/tiling/shell.js +9 -2
  175. package/src/tiling/tab_strip.js +0 -0
  176. package/src/tiling/tile_breadcrumb.js +0 -0
  177. package/src/tiling/tile_renderer.js +0 -0
  178. package/src/tiling/tile_tab_menu.js +0 -0
  179. package/src/tiling/tile_tree.js +63 -5
  180. package/src/tiling/wm.js +59 -6
  181. package/src/tiling/zoom.js +0 -0
  182. package/src/ui/base/component_base.js +0 -0
  183. package/src/ui/base/controller_base.js +0 -0
  184. package/src/ui/base/page_base.js +0 -0
  185. package/src/ui/components/about_dialog.js +0 -0
  186. package/src/ui/components/alert_log.js +0 -0
  187. package/src/ui/components/alerts_pane.js +0 -0
  188. package/src/ui/components/attribute_list_editor.js +0 -0
  189. package/src/ui/components/autocomplete_field.js +0 -0
  190. package/src/ui/components/cell_editor_host.js +0 -0
  191. package/src/ui/components/cell_editors.js +0 -0
  192. package/src/ui/components/cell_grid.js +0 -0
  193. package/src/ui/components/cell_paste.js +0 -0
  194. package/src/ui/components/cell_selection.js +0 -0
  195. package/src/ui/components/choice_controls.js +0 -0
  196. package/src/ui/components/color_field.js +0 -0
  197. package/src/ui/components/color_list_field.js +0 -0
  198. package/src/ui/components/column_fit.js +0 -0
  199. package/src/ui/components/column_groups.js +0 -0
  200. package/src/ui/components/column_order.js +0 -0
  201. package/src/ui/components/computing_status_window.js +0 -0
  202. package/src/ui/components/confirm_dialog.js +0 -0
  203. package/src/ui/components/conversation_view.js +0 -0
  204. package/src/ui/components/crosstab.js +0 -0
  205. package/src/ui/components/detail_header.js +0 -0
  206. package/src/ui/components/document_outline.js +0 -0
  207. package/src/ui/components/drag_reorder.js +0 -0
  208. package/src/ui/components/fact_table.js +0 -0
  209. package/src/ui/components/fill_handle.js +0 -0
  210. package/src/ui/components/gallery_picker.js +0 -0
  211. package/src/ui/components/header_actions.js +0 -0
  212. package/src/ui/components/inline_renamer.js +0 -0
  213. package/src/ui/components/job_progress.js +0 -0
  214. package/src/ui/components/managed_window.js +24 -6
  215. package/src/ui/components/menu_bar.js +0 -0
  216. package/src/ui/components/modal.js +0 -0
  217. package/src/ui/components/notification_history.js +0 -0
  218. package/src/ui/components/progress.js +0 -0
  219. package/src/ui/components/record_list.js +0 -0
  220. package/src/ui/components/row_activation.js +0 -0
  221. package/src/ui/components/section_stack.js +0 -0
  222. package/src/ui/components/series.js +0 -0
  223. package/src/ui/components/settings_view.js +0 -0
  224. package/src/ui/components/slide_out_panel.js +0 -0
  225. package/src/ui/components/slider_field.js +0 -0
  226. package/src/ui/components/sortable_list.js +0 -0
  227. package/src/ui/components/staged_edits.js +0 -0
  228. package/src/ui/components/staged_history.js +0 -0
  229. package/src/ui/components/table_filter_chips.js +0 -0
  230. package/src/ui/components/table_state_store.js +0 -0
  231. package/src/ui/components/table_structure.js +0 -0
  232. package/src/ui/components/table_values.js +0 -0
  233. package/src/ui/components/tabs.js +0 -0
  234. package/src/ui/components/tag_input.js +0 -0
  235. package/src/ui/components/toast.js +0 -0
  236. package/src/ui/components/toggle_field.js +0 -0
  237. package/src/ui/components/tree_view.js +41 -18
  238. package/src/ui/components/tsv.js +0 -0
  239. package/src/ui/components/window_taskbar.js +0 -0
  240. package/src/ui/components/wizard.js +0 -0
  241. package/src/ui/controllers/window_chrome_controller.js +0 -0
  242. package/src/ui/notification_center.js +0 -0
  243. package/src/ui/utils/auto_scrollbars.js +0 -0
  244. package/src/ui/utils/markdown.js +0 -0
  245. package/src/ui/utils/native_context_menu.js +0 -0
  246. package/src/ui/utils/overlay_scrollbar.js +0 -0
  247. package/src/ui/utils/raf_resize_observer.js +0 -0
  248. package/src/ui/utils/scroll_lock.js +0 -0
  249. package/src/ui/utils/strip_scroll.js +0 -0
  250. package/src/ui/utils/tooltip_service.js +0 -0
  251. package/tiles.js +0 -0
  252. package/widgets.js +0 -0
  253. package/wm.js +0 -0
  254. package/dist/chunk-CVMCZZX2.js.map +0 -7
  255. /package/dist/{chunk-NIJEJAZ7.js.map → chunk-2PM6ZMNS.js.map} +0 -0
  256. /package/dist/{chunk-F35XSQWA.js.map → chunk-IG74S3ZH.js.map} +0 -0
  257. /package/dist/{chunk-75FLVAUT.js.map → chunk-TLIV6QSU.js.map} +0 -0
  258. /package/dist/{chunk-BE2PU3LL.js.map → chunk-ZMH3OC7H.js.map} +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
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
@@ -34,6 +34,17 @@ const MAX_Z_INDEX = 6999;
34
34
  const TOP_BAR_HEIGHT = 35;
35
35
  const BOTTOM_BAR_HEIGHT = 22;
36
36
 
37
+ /** STORY-0119. The space above a window on `document.body`: the top bar, and
38
+ * under it a shell's menu row (`.twm-global-menu-bar`, a sibling of the top
39
+ * bar in body.twm-body's column) when the page has one. The row is measured,
40
+ * not assumed, because its height is its content's. Without a row this is
41
+ * TOP_BAR_HEIGHT, exactly as before. */
42
+ function _topInset() {
43
+ const row = typeof document !== 'undefined'
44
+ ? document.querySelector('body > .twm-global-menu-bar') : null;
45
+ return TOP_BAR_HEIGHT + (row ? row.getBoundingClientRect().height : 0);
46
+ }
47
+
37
48
  /** C11. How close to an edge the POINTER must come for a snap zone to arm.
38
49
  * Small enough that it takes intent, large enough to hit without aiming. */
39
50
  const SNAP_EDGE = 12;
@@ -953,6 +964,10 @@ export class ManagedWindow {
953
964
  * width = window.innerWidth
954
965
  * height = window.innerHeight - TOP_BAR_HEIGHT - BOTTOM_BAR_HEIGHT
955
966
  *
967
+ * (STORY-0119: TOP_BAR_HEIGHT here is `_topInset()`, which is
968
+ * TOP_BAR_HEIGHT on a page without a menu row and adds the row's height
969
+ * on a page with one.)
970
+ *
956
971
  * so, substituting into the clamps below:
957
972
  *
958
973
  * maxWidth = width = window.innerWidth ✓
@@ -1005,11 +1020,12 @@ export class ManagedWindow {
1005
1020
  height: this.container.clientHeight,
1006
1021
  };
1007
1022
  }
1023
+ const top = _topInset();
1008
1024
  return {
1009
1025
  minX: 0,
1010
- minY: TOP_BAR_HEIGHT,
1026
+ minY: top,
1011
1027
  width: window.innerWidth,
1012
- height: window.innerHeight - TOP_BAR_HEIGHT - BOTTOM_BAR_HEIGHT,
1028
+ height: window.innerHeight - top - BOTTOM_BAR_HEIGHT,
1013
1029
  };
1014
1030
  }
1015
1031
 
@@ -1266,7 +1282,8 @@ export class ManagedWindow {
1266
1282
  } else {
1267
1283
  // Center on screen (between top and bottom bars)
1268
1284
  this.x = Math.max(0, (maxWidth - this.width) / 2);
1269
- this.y = Math.max(TOP_BAR_HEIGHT, TOP_BAR_HEIGHT + (maxHeight - this.height) / 2);
1285
+ const top = _topInset();
1286
+ this.y = Math.max(top, top + (maxHeight - this.height) / 2);
1270
1287
  }
1271
1288
  }
1272
1289
 
@@ -1584,7 +1601,8 @@ export class ManagedWindow {
1584
1601
 
1585
1602
  // Calculate max available dimensions
1586
1603
  const maxWidth = window.innerWidth;
1587
- const maxHeight = window.innerHeight - TOP_BAR_HEIGHT - BOTTOM_BAR_HEIGHT;
1604
+ const top = _topInset();
1605
+ const maxHeight = window.innerHeight - top - BOTTOM_BAR_HEIGHT;
1588
1606
 
1589
1607
  let newX = state.startWinX;
1590
1608
  let newY = state.startWinY;
@@ -1604,12 +1622,12 @@ export class ManagedWindow {
1604
1622
 
1605
1623
  // Handle vertical resize
1606
1624
  if (dir.includes('s')) {
1607
- newH = Math.max(this.minHeight, Math.min(state.startHeight + dy, maxHeight - (newY - TOP_BAR_HEIGHT)));
1625
+ newH = Math.max(this.minHeight, Math.min(state.startHeight + dy, maxHeight - (newY - top)));
1608
1626
  }
1609
1627
  if (dir.includes('n')) {
1610
1628
  const maxDy = state.startHeight - this.minHeight;
1611
1629
  const actualDy = Math.min(dy, maxDy);
1612
- newY = Math.max(TOP_BAR_HEIGHT, state.startWinY + actualDy);
1630
+ newY = Math.max(top, state.startWinY + actualDy);
1613
1631
  newH = state.startHeight - (newY - state.startWinY);
1614
1632
  }
1615
1633
 
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
@@ -128,28 +128,39 @@ export function createTreeNode(options) {
128
128
  `;
129
129
  setText(node, '.twm-tree-node__label', label);
130
130
 
131
- // Add action buttons if specified
132
- if (actions) {
133
- const actionsEl = node.querySelector('.twm-tree-node__actions');
134
- Object.entries(actions).forEach(([actionId, actionConfig]) => {
135
- const btn = document.createElement('button');
136
- btn.className = 'twm-tree-node__action-btn';
137
- btn.dataset.action = actionId;
138
- btn.title = actionConfig.title || actionId;
139
- btn.innerHTML = `<span class="material-symbols-outlined">${actionConfig.icon}</span>`;
140
- if (actionConfig.onClick) {
141
- btn.addEventListener('click', (e) => {
142
- e.stopPropagation();
143
- actionConfig.onClick(id, e);
144
- });
145
- }
146
- actionsEl.appendChild(btn);
147
- });
148
- }
131
+ if (actions) appendActionButtons(node.querySelector('.twm-tree-node__actions'), id, actions);
149
132
 
150
133
  return node;
151
134
  }
152
135
 
136
+ /**
137
+ * Fill a node's or an item's actions slot: one `.twm-tree-node__action-btn`
138
+ * per entry. A click on an entry with `onClick` runs `onClick(id, event)` and
139
+ * goes no further, so it neither selects the item nor toggles the node; nor
140
+ * does a double-click, so it never reaches TreeView's onItemDoubleClick.
141
+ * @param {HTMLElement} actionsEl
142
+ * @param {string} id - The node's or item's id
143
+ * @param {Object<string, { icon: string, title?: string, onClick?: Function }>} actions
144
+ */
145
+ function appendActionButtons(actionsEl, id, actions) {
146
+ Object.entries(actions).forEach(([actionId, actionConfig]) => {
147
+ const btn = document.createElement('button');
148
+ btn.type = 'button';
149
+ btn.className = 'twm-tree-node__action-btn';
150
+ btn.dataset.action = actionId;
151
+ btn.title = actionConfig.title || actionId;
152
+ btn.innerHTML = `<span class="material-symbols-outlined">${actionConfig.icon}</span>`;
153
+ if (actionConfig.onClick) {
154
+ btn.addEventListener('click', (e) => {
155
+ e.stopPropagation();
156
+ actionConfig.onClick(id, e);
157
+ });
158
+ btn.addEventListener('dblclick', (e) => e.stopPropagation());
159
+ }
160
+ actionsEl.appendChild(btn);
161
+ });
162
+ }
163
+
153
164
  /**
154
165
  * Create a tree item (leaf node)
155
166
  * @param {Object} options - Item options
@@ -164,6 +175,10 @@ export function createTreeNode(options) {
164
175
  * @param {Object} [options.badge] - Optional badge config
165
176
  * @param {string} [options.badge.text] - Badge text (if empty, renders as status dot)
166
177
  * @param {string} [options.badge.variant] - 'muted'|'pass'|'fail'|'error'
178
+ * @param {Object} [options.actions] - Row actions, as createTreeNode takes them
179
+ * ({ id: { icon, title, onClick(id, event) } }): buttons in one line at the
180
+ * row's end (`.twm-tree-item__actions`), shown on hover, on focus within and
181
+ * on the selected item
167
182
  * @returns {HTMLElement} - Item element
168
183
  */
169
184
  export function createTreeItem(options) {
@@ -177,6 +192,7 @@ export function createTreeItem(options) {
177
192
  subtitle = null,
178
193
  data = null,
179
194
  badge = null,
195
+ actions = null,
180
196
  } = options;
181
197
 
182
198
  const item = document.createElement('div');
@@ -220,6 +236,13 @@ export function createTreeItem(options) {
220
236
  if (subtitle) setText(item, '.twm-tree-item__subtitle', subtitle);
221
237
  if (badge?.text) setText(item, '.twm-tree-item__badge', badge.text);
222
238
 
239
+ if (actions) {
240
+ const actionsEl = document.createElement('span');
241
+ actionsEl.className = 'twm-tree-item__actions';
242
+ appendActionButtons(actionsEl, id, actions);
243
+ item.appendChild(actionsEl);
244
+ }
245
+
223
246
  return item;
224
247
  }
225
248
 
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/tiles.js CHANGED
File without changes
package/widgets.js CHANGED
File without changes
package/wm.js CHANGED
File without changes