@effindomv2/fui-as 0.1.48 → 0.1.50

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effindomv2/fui-as",
3
- "version": "0.1.48",
3
+ "version": "0.1.50",
4
4
  "private": false,
5
5
  "license": "AGPL-3.0-only OR LicenseRef-EffinDom-Commercial",
6
6
  "description": "EffinDom v2 AssemblyScript frontend framework SDK and browser harness",
@@ -16,7 +16,7 @@ import {
16
16
  import { HandlerAction } from "../core/Action";
17
17
  import { Disposable, disposeAll } from "../core/Disposable";
18
18
  import { navigateTo } from "../core/Navigation";
19
- import { Node, PointerEventArgs, VisibilityChangedEventArgs } from "../core/Node";
19
+ import { Node, PointerButton, PointerEventArgs, PointerType, VisibilityChangedEventArgs } from "../core/Node";
20
20
  import { Theme, activeTheme } from "../core/Theme";
21
21
  import { warn } from "../core/Logger";
22
22
  import { FontFamily, FontStyle, FontWeight } from "../core/Typography";
@@ -29,7 +29,7 @@ const MENU_EDGE_PADDING: f32 = 8.0;
29
29
  const DEFAULT_PANEL_BACKGROUND_BLUR_SIGMA: f32 = 10.0;
30
30
 
31
31
  function isPrimaryActivationPointer(event: PointerEventArgs): bool {
32
- return event.button == 0 || event.pointerType == 2 || event.pointerType == 3;
32
+ return event.button == PointerButton.Primary || event.pointerType == PointerType.Touch || event.pointerType == PointerType.Pen;
33
33
  }
34
34
 
35
35
  enum MenuItemKind {
@@ -12,7 +12,7 @@ import { Disposable, disposeAll } from "../core/Disposable";
12
12
  import { FocusAdornerManager } from "../core/FocusAdornerManager";
13
13
  import { keyboardFocusVisible } from "../core/FocusVisibility";
14
14
  import { navigateTo } from "../core/Navigation";
15
- import { PointerEventArgs, PointerType } from "../core/Node";
15
+ import { PointerButton, PointerEventArgs, PointerType } from "../core/Node";
16
16
  import { hasPrimaryShortcutModifier } from "../core/Platform";
17
17
  import { Theme, activeTheme } from "../core/Theme";
18
18
  import { FlexBox, Text } from "../nodes";
@@ -110,9 +110,12 @@ export class NavLink extends FlexBox {
110
110
 
111
111
  _handlePointerEvent(eventType: PointerEventType, x: f32, y: f32, modifiers: u32 = 0): void {
112
112
  const pending = NavLink.pendingPointerEventArgs;
113
- const isPrimaryActivation = pending !== null
114
- ? this.isPrimaryActivationPointer(changetype<PointerEventArgs>(pending))
113
+ const isActivation = pending !== null
114
+ ? this.isActivationPointer(changetype<PointerEventArgs>(pending))
115
115
  : true;
116
+ const isMiddleClick = pending !== null
117
+ ? this.isMiddleMouseButton(changetype<PointerEventArgs>(pending))
118
+ : false;
116
119
  super._handlePointerEvent(eventType, x, y, modifiers);
117
120
  if (eventType == PointerEventType.Enter) {
118
121
  this.hovered = true;
@@ -131,18 +134,18 @@ export class NavLink extends FlexBox {
131
134
  return;
132
135
  }
133
136
  if (eventType == PointerEventType.Down) {
134
- if (!isPrimaryActivation) {
137
+ if (!isActivation) {
135
138
  this.pointerPressed = false;
136
139
  this.pointerPressedOpenInNewTab = false;
137
140
  return;
138
141
  }
139
142
  this.pointerPressed = true;
140
- this.pointerPressedOpenInNewTab = this.shouldOpenInNewTab(modifiers);
143
+ this.pointerPressedOpenInNewTab = isMiddleClick || this.shouldOpenInNewTab(modifiers);
141
144
  return;
142
145
  }
143
- if (eventType == PointerEventType.Up && this.pointerPressed && isPrimaryActivation) {
146
+ if (eventType == PointerEventType.Up && this.pointerPressed && isActivation) {
144
147
  this.pointerPressed = false;
145
- this.activate(this.pointerPressedOpenInNewTab || this.shouldOpenInNewTab(modifiers));
148
+ this.activate(isMiddleClick || this.pointerPressedOpenInNewTab || this.shouldOpenInNewTab(modifiers));
146
149
  this.pointerPressedOpenInNewTab = false;
147
150
  }
148
151
  }
@@ -197,8 +200,12 @@ export class NavLink extends FlexBox {
197
200
  return this.openInNewTabValue || hasPrimaryShortcutModifier(<KeyModifier>modifiers);
198
201
  }
199
202
 
200
- private isPrimaryActivationPointer(event: PointerEventArgs): bool {
201
- return event.button == 0 || event.pointerType == PointerType.Touch || event.pointerType == PointerType.Pen;
203
+ private isMiddleMouseButton(event: PointerEventArgs): bool {
204
+ return event.pointerType == PointerType.Mouse && event.button == PointerButton.Auxiliary;
205
+ }
206
+
207
+ private isActivationPointer(event: PointerEventArgs): bool {
208
+ return event.button == PointerButton.Primary || this.isMiddleMouseButton(event) || event.pointerType == PointerType.Touch || event.pointerType == PointerType.Pen;
202
209
  }
203
210
 
204
211
  pinPreviewForContextMenu(): void {
@@ -1,4 +1,6 @@
1
1
  import { FlexBox } from "../nodes/FlexBox";
2
+ import { HandlerAction } from "./Action";
3
+ import { Disposable } from "./Disposable";
2
4
  import { ContextMenuManager } from "./ContextMenuManager";
3
5
  import { disposeAllFetchRequests } from "./Fetch";
4
6
  import { disposeAllFileRequests } from "./File";
@@ -38,6 +40,8 @@ function disposeAppScopedAsyncWork(): void {
38
40
  }
39
41
 
40
42
  class ApplicationShell extends FlexBox {
43
+ private themeSubscription: Disposable | null = null;
44
+
41
45
  constructor(root: Node) {
42
46
  super();
43
47
  this.width(100.0, Unit.Percent)
@@ -48,6 +52,23 @@ class ApplicationShell extends FlexBox {
48
52
  .child(FocusAdornerManager.createDefaultHost())
49
53
  .child(ContextMenuManager.createDefaultMenu())
50
54
  .child(ToolTipManager.createDefaultHost());
55
+ this.themeSubscription = activeTheme.addAction(new HandlerAction<ApplicationShell, Theme>(this, (shell: ApplicationShell, theme: Theme): void => {
56
+ shell.applyTheme(theme);
57
+ }));
58
+ this.applyTheme(activeTheme.value);
59
+ }
60
+
61
+ dispose(): void {
62
+ const subscription = this.themeSubscription;
63
+ if (subscription !== null) {
64
+ this.themeSubscription = null;
65
+ subscription.dispose();
66
+ }
67
+ super.dispose();
68
+ }
69
+
70
+ private applyTheme(theme: Theme): void {
71
+ this.bgColor(theme.colors.background);
51
72
  }
52
73
  }
53
74
 
package/src/core/Node.ts CHANGED
@@ -77,7 +77,7 @@ export enum PointerButtons {
77
77
  }
78
78
 
79
79
  function isPrimaryActivationPointer(event: PointerEventArgs): bool {
80
- return event.button == 0 || event.pointerType == PointerType.Touch || event.pointerType == PointerType.Pen;
80
+ return event.button == PointerButton.Primary || event.pointerType == PointerType.Touch || event.pointerType == PointerType.Pen;
81
81
  }
82
82
 
83
83
  export enum GestureIntent {