@fluxlay/react 1.3.2 → 1.3.4
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/README.md
CHANGED
|
@@ -371,10 +371,10 @@ import { notify } from "@fluxlay/react";
|
|
|
371
371
|
await notify({ title: "Build finished", body: "All tests passed" });
|
|
372
372
|
```
|
|
373
373
|
|
|
374
|
-
| Option | Type | Description
|
|
375
|
-
| ------- | -------- |
|
|
374
|
+
| Option | Type | Description |
|
|
375
|
+
| ------- | -------- | ------------------------------------------ |
|
|
376
376
|
| `title` | `string` | Required. Shown as the notification title. |
|
|
377
|
-
| `body` | `string` | Optional. Shown as the notification body.
|
|
377
|
+
| `body` | `string` | Optional. Shown as the notification body. |
|
|
378
378
|
|
|
379
379
|
The first call from a freshly installed Fluxlay app may trigger an OS-level permission prompt; subsequent calls succeed silently if the user grants notification permission.
|
|
380
380
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import * as _$react from "react";
|
|
2
1
|
import { RefObject } from "react";
|
|
3
2
|
import { FitAddon } from "@xterm/addon-fit";
|
|
4
|
-
import * as _$_xterm_xterm0 from "@xterm/xterm";
|
|
5
3
|
import { ITheme, Terminal } from "@xterm/xterm";
|
|
6
4
|
//#region ../sdk-core/dist/index.d.mts
|
|
7
5
|
//#region src/caret-position.d.ts
|
|
@@ -698,36 +696,36 @@ declare const defaultTransport: HttpTransport; //#endregion
|
|
|
698
696
|
*/
|
|
699
697
|
declare const TerminalThemes: {
|
|
700
698
|
/** Dark themes with a transparent background. */readonly dark: {
|
|
701
|
-
/** Default dark theme using Tailwind color palette. */readonly default:
|
|
702
|
-
readonly modern:
|
|
699
|
+
/** Default dark theme using Tailwind color palette. */readonly default: import("@xterm/xterm").ITheme; /** Modern dark theme using Slate/Rose color palette. */
|
|
700
|
+
readonly modern: import("@xterm/xterm").ITheme;
|
|
703
701
|
}; /** Light themes. */
|
|
704
702
|
readonly light: {
|
|
705
|
-
/** Default light theme. */readonly default:
|
|
706
|
-
readonly modern:
|
|
703
|
+
/** Default light theme. */readonly default: import("@xterm/xterm").ITheme; /** Modern light theme. */
|
|
704
|
+
readonly modern: import("@xterm/xterm").ITheme;
|
|
707
705
|
}; /** Nord theme — an arctic, north-bluish color palette. */
|
|
708
|
-
readonly nord:
|
|
709
|
-
readonly dracula:
|
|
706
|
+
readonly nord: import("@xterm/xterm").ITheme; /** Dracula theme — a dark theme with vivid accent colors. */
|
|
707
|
+
readonly dracula: import("@xterm/xterm").ITheme; /** Gruvbox themes — a retro groove color scheme. */
|
|
710
708
|
readonly gruvbox: {
|
|
711
|
-
/** Gruvbox dark variant. */readonly dark:
|
|
712
|
-
readonly light:
|
|
709
|
+
/** Gruvbox dark variant. */readonly dark: import("@xterm/xterm").ITheme; /** Gruvbox light variant. */
|
|
710
|
+
readonly light: import("@xterm/xterm").ITheme;
|
|
713
711
|
}; /** Solarized themes — a precision color scheme with reduced brightness. */
|
|
714
712
|
readonly solarized: {
|
|
715
|
-
/** Solarized dark variant. */readonly dark:
|
|
716
|
-
readonly light:
|
|
713
|
+
/** Solarized dark variant. */readonly dark: import("@xterm/xterm").ITheme; /** Solarized light variant. */
|
|
714
|
+
readonly light: import("@xterm/xterm").ITheme;
|
|
717
715
|
}; /** One Dark theme — based on Atom's One Dark syntax theme. */
|
|
718
|
-
readonly oneDark:
|
|
716
|
+
readonly oneDark: import("@xterm/xterm").ITheme; /** Catppuccin themes — a soothing pastel color scheme. */
|
|
719
717
|
readonly catppuccin: {
|
|
720
|
-
/** Catppuccin Latte — the light variant. */readonly latte:
|
|
721
|
-
readonly frappe:
|
|
722
|
-
readonly macchiato:
|
|
723
|
-
readonly mocha:
|
|
718
|
+
/** Catppuccin Latte — the light variant. */readonly latte: import("@xterm/xterm").ITheme; /** Catppuccin Frappé — a cool medium-dark variant. */
|
|
719
|
+
readonly frappe: import("@xterm/xterm").ITheme; /** Catppuccin Macchiato — a warm medium-dark variant. */
|
|
720
|
+
readonly macchiato: import("@xterm/xterm").ITheme; /** Catppuccin Mocha — the darkest variant. */
|
|
721
|
+
readonly mocha: import("@xterm/xterm").ITheme;
|
|
724
722
|
}; /** Monokai Pro theme — a refined dark theme inspired by Monokai. */
|
|
725
|
-
readonly monokaiPro:
|
|
726
|
-
readonly tokyoNight:
|
|
727
|
-
readonly nightOwl:
|
|
723
|
+
readonly monokaiPro: import("@xterm/xterm").ITheme; /** Tokyo Night theme — a dark theme inspired by Tokyo city lights. */
|
|
724
|
+
readonly tokyoNight: import("@xterm/xterm").ITheme; /** Night Owl theme — optimized for late-night coding with low brightness. */
|
|
725
|
+
readonly nightOwl: import("@xterm/xterm").ITheme; /** Everforest themes — a green-tinted theme inspired by forests. */
|
|
728
726
|
readonly everforest: {
|
|
729
|
-
/** Everforest dark variant. */readonly dark:
|
|
730
|
-
readonly light:
|
|
727
|
+
/** Everforest dark variant. */readonly dark: import("@xterm/xterm").ITheme; /** Everforest light variant. */
|
|
728
|
+
readonly light: import("@xterm/xterm").ITheme;
|
|
731
729
|
};
|
|
732
730
|
}; //#endregion
|
|
733
731
|
//#endregion
|
|
@@ -983,7 +981,7 @@ interface TerminalInstance {
|
|
|
983
981
|
* - `instance` – the {@link TerminalInstance} once the terminal is mounted, or `null`.
|
|
984
982
|
*/
|
|
985
983
|
declare function useTerminal(options?: UseTerminalOptions): {
|
|
986
|
-
terminalRef:
|
|
984
|
+
terminalRef: import("react").RefObject<HTMLDivElement | null>;
|
|
987
985
|
instance: TerminalInstance | null;
|
|
988
986
|
};
|
|
989
987
|
//#endregion
|
|
@@ -1068,4 +1066,4 @@ interface SystemMonitorOptions {
|
|
|
1068
1066
|
*/
|
|
1069
1067
|
declare function useSystemMonitor(options?: SystemMonitorOptions): SystemMonitorInfo;
|
|
1070
1068
|
//#endregion
|
|
1071
|
-
export { AudioInfo, AudioOptions, CaretRect, DiskInfo, HttpTransport, ImeCommitHandler,
|
|
1069
|
+
export { AudioInfo, AudioOptions, CaretRect, DiskInfo, HttpTransport, ImeCommitHandler, ImeCommitPayload, ImeCompositionPayload, ImeInlineController, ImeInlineControllerOptions, ImeInputApi, InvokeMethodMap, KeyEvent, KeyModifiers, KeyboardHandlers, ManifestInfo, MediaMetadataInfo, MediaMetadataOptions, MouseButton, MouseButtonEvent, MouseEventHandlers, MouseInputEvent, MousePosition, MouseWheelEvent, NotifyOptions, PropertyValue, PropertyValues, SelectionRect, ShellOptions, ShellResult, SubscribeEventMap, SystemMonitorInfo, SystemMonitorOptions, TerminalInstance, TerminalThemes, Transport, UseShellOptions, UseTerminalOptions, caretIndexFromClientPoint, defaultTransport, getPropertyFileUrl, isImeAutoTarget, measureCaretRect, measureSelectionRects, normalizedToPixel, notify, openUrl, pixelToNormalized, proxiedFetch, runShell, useActiveElement, useAudio, useImeInput, useIsFocused, useKeyboard, useMediaMetadata, useMouseEvents, useMousePosition, useProperties, useShell, useSystemMonitor, useTerminal };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _}from"./use-mouse-events-
|
|
1
|
+
import{_ as e,a as t,c as n,d as r,f as i,g as a,h as o,i as s,l as c,m as l,n as u,o as d,p as f,r as p,s as m,t as h,u as g,v as _}from"./use-mouse-events-NW_Jq8L8.mjs";import{useCallback as v,useEffect as y,useRef as b,useState as x}from"react";import{FitAddon as S}from"@xterm/addon-fit";import{Terminal as C}from"@xterm/xterm";import"@xterm/xterm/css/xterm.css";function w(){let[e,t]=x(()=>typeof document>`u`?null:T());return y(()=>{let e=()=>t(T());return e(),document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,e),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,e)}},[]),e}function T(){let e=document.activeElement;return!e||e===document.body||e===document.documentElement?null:e}const E=new m;function D(e){let[t,n]=x({rms:0,peak:0,spectrum:[]}),r=e?.numBands;return y(()=>{let e={};r!==void 0&&(e.num_bands=String(r));let t=E.subscribe(`audio-stream`,e=>n(e),e);return()=>{t()}},[r]),t}function O(){let[e,t]=x(null),[n,r]=x(0),a=b(new Set),o=b(!1);y(()=>{let e=i.subscribe(`ime-composition-stream`,e=>{t(e.text===``?null:e.text),r(e.cursor)}),n=i.subscribe(`ime-commit-stream`,e=>{if(e.type===`commit`)for(let t of a.current)t(e.text)});return()=>{e(),n()}},[]);let s=v(e=>{o.current=!0;let t;if(e instanceof HTMLElement){let n=e.getBoundingClientRect();t={x:n.left,y:n.top,height:n.height}}else e&&typeof e==`object`&&(t=e);i.invoke(`ime-activate`,t?{caret:t}:{}).catch(()=>{})},[]),c=v(()=>{o.current=!1,i.invoke(`ime-deactivate`,{}).catch(()=>{})},[]),l=v(e=>(a.current.add(e),()=>{a.current.delete(e)}),[]);return y(()=>()=>{o.current&&=(i.invoke(`ime-deactivate`,{}).catch(()=>{}),!1)},[]),{composition:e,cursor:n,activate:s,deactivate:c,onCommit:l}}function k(e){let[t,n]=x(!1);return y(()=>{let t=e.current;if(!t)return;n(document.activeElement===t);let r=()=>n(!0),i=()=>n(!1);return t.addEventListener(`focus`,r),t.addEventListener(`blur`,i),()=>{t.removeEventListener(`focus`,r),t.removeEventListener(`blur`,i)}},[e]),t}const A=new m;function j(e){let[t,n]=x({title:null,artist:null,album:null,artwork:null,duration:null,elapsedTime:null,playbackRate:null,isPlaying:!1}),r=e?.intervalMs;return y(()=>{let e={};r!==void 0&&(e.interval_ms=String(r));let t=A.subscribe(`media-metadata-stream`,e=>n(e),e);return()=>{t()}},[r]),t}const M=new m;function N(){let[e,t]=x({});return y(()=>{M.invoke(`properties`,{}).then(e=>t(e));let e=M.subscribe(`properties-stream`,e=>t(e));return()=>{e()}},[]),e}function P(e,t={}){let{showStdout:n=!0,showStderr:r=!1,refreshInterval:i=3e4,terminal:a}=t,[o,c]=x(!1),[l,u]=x(null),[d,f]=x(null),p=b(t);y(()=>{p.current=t},[t]);let m=v(async()=>{if(!o){c(!0),u(null);try{let t=p.current,n=t.columns,r=t.lines;a&&(a.fitAddon.fit(),n=a.terminal.cols,r=a.terminal.rows);let i=await s(e,{...t,columns:n,lines:r});f(i),i.success||u(`Command failed with status ${i.statusCode}: ${i.stderr}`)}catch(e){u(String(e))}finally{c(!1)}}},[e,a]);return y(()=>{if(!a||!d)return;let{terminal:e}=a;if(e.reset(),d.success){let t=``;n&&(t+=d.stdout),r&&(t+=d.stderr);let i=t.trimEnd();if(i){e.write(i);let t=i.split(`
|
|
2
2
|
`).length;e.resize(e.cols,Math.max(1,t))}else e.resize(e.cols,1)}else{let t=`Command failed with status ${d.statusCode}: ${d.stderr}`;e.write(`\x1b[31m${t.trimEnd()}\x1b[0m`),e.resize(e.cols,1)}},[a,d,n,r]),y(()=>{m()},[e]),y(()=>{if(!i)return;let e=setInterval(m,i);return()=>clearInterval(e)},[m,i]),{execute:m,isRunning:o,error:l,result:d}}const F=new m;function I(e){let[t,n]=x({cpuUsage:0,cpuPerCore:[],cpuFrequencyMhz:[],memoryTotal:0,memoryUsed:0,memoryUsage:0,swapTotal:0,swapUsed:0,swapUsage:0,batteryLevel:null,batteryCharging:null,networkRxBytesPerSec:0,networkTxBytesPerSec:0,diskReadBytesPerSec:0,diskWriteBytesPerSec:0,processCount:0,uptimeSecs:0,loadAverage:[0,0,0],disks:[],hostname:``,osName:``,cpuBrand:``,physicalCoreCount:0,logicalCoreCount:0,cpuArch:``,kernelVersion:``}),r=e?.cpuIntervalMs,i=e?.memoryIntervalMs,a=e?.networkIntervalMs,o=e?.diskIoIntervalMs,s=e?.diskSpaceIntervalMs,c=e?.batteryIntervalMs,l=e?.processIntervalMs,u=e?.loadAverageIntervalMs;return y(()=>{let e={};r!==void 0&&(e.cpu_interval_ms=String(r)),i!==void 0&&(e.memory_interval_ms=String(i)),a!==void 0&&(e.network_interval_ms=String(a)),o!==void 0&&(e.disk_io_interval_ms=String(o)),s!==void 0&&(e.disk_space_interval_ms=String(s)),c!==void 0&&(e.battery_interval_ms=String(c)),l!==void 0&&(e.process_interval_ms=String(l)),u!==void 0&&(e.load_average_interval_ms=String(u));let t=F.subscribe(`system-monitor-stream`,e=>n(e),e);return()=>{t()}},[r,i,a,o,s,c,l,u]),t}function L(e={}){let{fontSize:t=12,fontFamily:n=`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace`,theme:r=d.dark.default}=e,i=b(null),[a,o]=x(null);return y(()=>{if(!i.current)return;let e=document.createElement(`style`);e.textContent=`
|
|
3
3
|
.xterm-char-measure-element {
|
|
4
4
|
position: absolute !important;
|
package/dist/mimo/index.d.mts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import * as _$react from "react";
|
|
2
1
|
import { ReactNode } from "react";
|
|
3
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
2
|
|
|
5
3
|
//#region ../../mimo/core/dist/index.d.mts
|
|
6
4
|
//#region src/pointer/cursor.d.ts
|
|
@@ -232,7 +230,7 @@ declare class MimoForwarder {
|
|
|
232
230
|
//#endregion
|
|
233
231
|
//#region ../../mimo/react/dist/index.d.mts
|
|
234
232
|
//#region src/context.d.ts
|
|
235
|
-
declare const MimoForwarderContext:
|
|
233
|
+
declare const MimoForwarderContext: import("react").Context<MimoForwarder | null>; //#endregion
|
|
236
234
|
//#region src/MimoProvider.d.ts
|
|
237
235
|
interface MimoProviderProps extends MimoForwarderOptions {
|
|
238
236
|
children?: ReactNode;
|
|
@@ -254,7 +252,7 @@ interface MimoProviderProps extends MimoForwarderOptions {
|
|
|
254
252
|
declare function MimoProvider({
|
|
255
253
|
children,
|
|
256
254
|
...options
|
|
257
|
-
}: MimoProviderProps):
|
|
255
|
+
}: MimoProviderProps): import("react/jsx-runtime").JSX.Element; //#endregion
|
|
258
256
|
//#region src/useMimoForwarder.d.ts
|
|
259
257
|
/**
|
|
260
258
|
* Read the {@link MimoForwarder} instance owned by the nearest
|
|
@@ -297,6 +295,6 @@ declare function MimoProvider$1({
|
|
|
297
295
|
keyboard,
|
|
298
296
|
children,
|
|
299
297
|
...rest
|
|
300
|
-
}: MimoProviderProps$1):
|
|
298
|
+
}: MimoProviderProps$1): import("react/jsx-runtime").JSX.Element;
|
|
301
299
|
//#endregion
|
|
302
300
|
export { type CursorOptions, type KeyboardModifiers, type KeyboardSource, type KeyboardSourceEvent, type KeyboardTargetStrategy, MimoForwarder, MimoForwarderContext, type MimoForwarderOptions, MimoProvider as MimoForwarderProvider, type MimoProviderProps as MimoForwarderProviderProps, MimoProvider$1 as MimoProvider, type MimoProviderProps$1 as MimoProviderProps, type PointerButton, type PointerSource, type PointerSourceButtonEvent, type PointerSourceCancelEvent, type PointerSourceEvent, type PointerSourceMoveEvent, type PointerSourceWheelEvent, type PointerType, type Unsubscribe, useMimoForwarder };
|
package/dist/mimo/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as e,n as t,r as n,t as r}from"../use-mouse-events-
|
|
1
|
+
import{d as e,n as t,r as n,t as r}from"../use-mouse-events-NW_Jq8L8.mjs";import{createContext as i,use as a,useEffect as o,useState as s}from"react";import{jsx as c,jsxs as ee}from"react/jsx-runtime";function l(e){return{view:window,bubbles:!0,cancelable:!0,composed:!0,code:e.code,key:e.key??``,repeat:e.repeat??!1,shiftKey:e.modifiers?.shift??!1,ctrlKey:e.modifiers?.ctrl??!1,altKey:e.modifiers?.alt??!1,metaKey:e.modifiers?.meta??!1}}function u(e,t){let n=t.pressed?`keydown`:`keyup`;e.dispatchEvent(new KeyboardEvent(n,l(t)))}function d(e,t){if(!t.pressed||!e||!(e instanceof Element)||t.modifiers?.ctrl||t.modifiers?.meta||!te(e))return;if(t.code===`Backspace`){g(e,`deleteContentBackward`);return}if(t.code===`Delete`){g(e,`deleteContentForward`);return}if(t.code===`Enter`||t.code===`NumpadEnter`){(e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable)&&h(e,`
|
|
2
2
|
`);return}if(t.code===`Tab`){(e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable)&&h(e,` `);return}let n=ne(t);n!==null&&h(e,n)}function te(e){if(e instanceof HTMLInputElement){if(e.disabled||e.readOnly)return!1;let t=e.type.toLowerCase();return t===``||f.has(t)}return e instanceof HTMLTextAreaElement?!e.disabled&&!e.readOnly:e instanceof HTMLElement&&e.isContentEditable}const f=new Set([`text`,`search`,`url`,`tel`,`email`,`password`,`number`]);function ne(e){return e.key&&e.key.length===1?e.key:re(e.code,e.modifiers?.shift??!1)}function re(e,t){let n=e.match(/^Key([A-Z])$/);if(n)return t?n[1]:n[1].toLowerCase();let r=e.match(/^Digit(\d)$/);if(r)return t?p[parseInt(r[1],10)]:r[1];let i=e.match(/^Numpad(\d)$/);return i?i[1]:m[e]?.[+!!t]??null}const p=[`)`,`!`,`@`,`#`,`$`,`%`,`^`,`&`,`*`,`(`],m={Space:[` `,` `],Minus:[`-`,`_`],Equal:[`=`,`+`],BracketLeft:[`[`,`{`],BracketRight:[`]`,`}`],Backslash:[`\\`,`|`],Semicolon:[`;`,`:`],Quote:[`'`,`"`],Comma:[`,`,`<`],Period:[`.`,`>`],Slash:[`/`,`?`],Backquote:["`",`~`],NumpadMultiply:[`*`,`*`],NumpadAdd:[`+`,`+`],NumpadSubtract:[`-`,`-`],NumpadDivide:[`/`,`/`],NumpadDecimal:[`.`,`.`]};function h(e,t){if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement){let n=e.selectionStart??e.value.length,r=e.selectionEnd??e.value.length;_(e,e.value.slice(0,n)+t+e.value.slice(r));let i=n+t.length;try{e.setSelectionRange(i,i)}catch{}v(e,`insertText`,t)}else if(e instanceof HTMLElement&&e.isContentEditable){let n=e.ownerDocument,r=n.getSelection();if(!r)return;if(r.rangeCount===0){let t=n.createRange();t.selectNodeContents(e),t.collapse(!1),r.removeAllRanges(),r.addRange(t)}let i=r.getRangeAt(0);i.deleteContents();let a=n.createTextNode(t);i.insertNode(a),i.setStartAfter(a),i.setEndAfter(a),r.removeAllRanges(),r.addRange(i),v(e,`insertText`,t)}}function g(e,t){if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement){let n=e.selectionStart??e.value.length,r=e.selectionEnd??e.value.length;if(n===r)if(t===`deleteContentBackward`){if(n===0)return;--n}else{if(r>=e.value.length)return;r+=1}_(e,e.value.slice(0,n)+e.value.slice(r));try{e.setSelectionRange(n,n)}catch{}v(e,t,null)}else if(e instanceof HTMLElement&&e.isContentEditable){let n=e.ownerDocument.getSelection();if(!n||n.rangeCount===0)return;let r=n.getRangeAt(0);if(r.collapsed)try{t===`deleteContentBackward`?r.setStart(r.startContainer,Math.max(0,r.startOffset-1)):r.setEnd(r.endContainer,r.endOffset+1)}catch{return}r.deleteContents(),v(e,t,null)}}function _(e,t){let n=e instanceof HTMLInputElement?HTMLInputElement.prototype:HTMLTextAreaElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`);r?.set?r.set.call(e,t):e.value=t}function v(e,t,n){e.dispatchEvent(new InputEvent(`beforeinput`,{bubbles:!0,cancelable:!0,composed:!0,inputType:t,data:n})),e.dispatchEvent(new InputEvent(`input`,{bubbles:!0,composed:!0,inputType:t,data:n}))}const y={left:0,middle:1,right:2,aux1:3,aux2:4},b={left:1,right:2,middle:4,aux1:8,aux2:16};function x(e){return y[e]}function S(e){return b[e]}function C(e,t,n,r,i=!0){return{view:window,bubbles:i,cancelable:!0,composed:!0,clientX:e,clientY:t,screenX:r.screenX,screenY:r.screenY,movementX:r.movementX,movementY:r.movementY,button:n,buttons:r.buttons,pointerId:1,pointerType:r.pointerType,isPrimary:!0,pressure:r.pressure,tiltX:r.tiltX,tiltY:r.tiltY,shiftKey:r.modifiers.shiftKey,ctrlKey:r.modifiers.ctrlKey,altKey:r.modifiers.altKey,metaKey:r.modifiers.metaKey}}function w(e,t,n,r,i=!0){return{view:window,bubbles:i,cancelable:!0,composed:!0,clientX:e,clientY:t,screenX:r.screenX,screenY:r.screenY,movementX:r.movementX,movementY:r.movementY,button:n,buttons:r.buttons,shiftKey:r.modifiers.shiftKey,ctrlKey:r.modifiers.ctrlKey,altKey:r.modifiers.altKey,metaKey:r.modifiers.metaKey}}function T(e,t,n,r){e.dispatchEvent(new PointerEvent(`pointermove`,C(t,n,-1,r))),e.dispatchEvent(new MouseEvent(`mousemove`,w(t,n,0,r)))}function ie(e,t,n,r){e.dispatchEvent(new PointerEvent(`pointerout`,C(t,n,-1,r))),e.dispatchEvent(new MouseEvent(`mouseout`,w(t,n,0,r)))}function E(e,t,n,r){e.dispatchEvent(new PointerEvent(`pointerover`,C(t,n,-1,r))),e.dispatchEvent(new MouseEvent(`mouseover`,w(t,n,0,r)))}function D(e,t,n,r){e.dispatchEvent(new PointerEvent(`pointerleave`,C(t,n,-1,r,!1))),e.dispatchEvent(new MouseEvent(`mouseleave`,w(t,n,0,r,!1)))}function O(e,t,n,r){e.dispatchEvent(new PointerEvent(`pointerenter`,C(t,n,-1,r,!1))),e.dispatchEvent(new MouseEvent(`mouseenter`,w(t,n,0,r,!1)))}function k(e,t,n,r,i){let a=x(r);e.dispatchEvent(new PointerEvent(`pointerdown`,C(t,n,a,i))),e.dispatchEvent(new MouseEvent(`mousedown`,w(t,n,a,i)))}function A(e,t,n,r,i){let a=x(r);e.dispatchEvent(new PointerEvent(`pointerup`,C(t,n,a,i))),e.dispatchEvent(new MouseEvent(`mouseup`,w(t,n,a,i)))}function j(e,t,n,r,i,a){let o={...w(t,n,x(r),i),detail:a};r===`left`?(e.dispatchEvent(new MouseEvent(`click`,o)),a===2&&e.dispatchEvent(new MouseEvent(`dblclick`,o))):r===`right`?e.dispatchEvent(new MouseEvent(`contextmenu`,o)):e.dispatchEvent(new MouseEvent(`auxclick`,o))}function M(e,t,n,r,i,a,o){e.dispatchEvent(new WheelEvent(`wheel`,{...w(t,n,0,o),deltaX:r,deltaY:i,deltaMode:a}))}function N(e,t,n,r){e.dispatchEvent(new PointerEvent(`pointercancel`,C(t,n,-1,r)))}function P(e,t,n,r){e.dispatchEvent(new PointerEvent(`gotpointercapture`,C(t,n,-1,r)))}function F(e,t,n,r){e.dispatchEvent(new PointerEvent(`lostpointercapture`,C(t,n,-1,r)))}const I=[];let L=!1,R,z,B;function ae(){L||(L=!0,R=Element.prototype.setPointerCapture,z=Element.prototype.releasePointerCapture,B=Element.prototype.hasPointerCapture,Element.prototype.setPointerCapture=function(e){let t=I[I.length-1];if(t&&e===1){t.markCaptured(this);return}return R.call(this,e)},Element.prototype.releasePointerCapture=function(e){let t=I[I.length-1];if(t&&e===1&&t.getCaptured()===this){t.markReleased();return}return z.call(this,e)},Element.prototype.hasPointerCapture=function(e){let t=I[I.length-1];return t&&e===1?t.getCaptured()===this:B.call(this,e)})}var V=class{captured=null;justCaptured=null;justReleased=null;install(){ae(),I.push(this)}uninstall(){let e=I.lastIndexOf(this);e>=0&&I.splice(e,1),this.reset()}reset(){this.captured=null,this.justCaptured=null,this.justReleased=null}getCaptured(){return this.captured}markCaptured(e){this.captured!==e&&(this.captured&&(this.justReleased=this.captured),this.captured=e,this.justCaptured=e)}markReleased(){this.captured&&=(this.justReleased=this.captured,null)}consumeTransitions(){let e=this.justCaptured,t=this.justReleased;return this.justCaptured=null,this.justReleased=null,{gained:e,lost:t}}},H=class{el=null;doc;resolved;constructor(e,t={}){this.doc=e,this.resolved={size:t.size??16,color:t.color??`rgba(0, 0, 0, 0.7)`,className:t.className??`mimo-cursor`}}attach(){if(this.el)return;let e=this.doc.createElement(`div`);e.className=this.resolved.className,Object.assign(e.style,{position:`fixed`,top:`0`,left:`0`,width:`${this.resolved.size}px`,height:`${this.resolved.size}px`,borderRadius:`50%`,background:this.resolved.color,pointerEvents:`none`,zIndex:`2147483647`,transform:`translate(-50%, -50%)`,willChange:`transform`}),this.doc.body.appendChild(e),this.el=e}move(e,t){this.el&&(this.el.style.transform=`translate(${e}px, ${t}px) translate(-50%, -50%)`)}detach(){this.el?.remove(),this.el=null}};function U(e,t,n){let r=e.elementFromPoint(t,n);for(let e=0;e<64;e++){if(!r?.shadowRoot)return r;let e=r.shadowRoot.elementFromPoint(t,n);if(!e||e===r)return r;r=e}return r}function W(e){let t=[],n=e;for(;n;)t.push(n),n=n.parentElement;return t}function G(e,t){let n=new Set(t);for(let t of e)if(n.has(t))return t;return null}function K(e,t,n,r,i){if(e===t)return;let a=W(e),o=W(t),s=G(a,o);if(e){ie(e,n,r,i);for(let e of a){if(e===s)break;D(e,n,r,i)}}if(t){E(t,n,r,i);for(let e of o){if(e===s)break;O(e,n,r,i)}}}var q=class{current=null;resolve(e,t,n){return U(e,t,n)}update(e,t,n,r,i=null){if(i)return T(i,t,n,r),i;let a=this.resolve(e,t,n);return a!==this.current&&(K(this.current,a,t,n,r),this.current=a),a&&T(a,t,n,r),a}reset(){this.current=null}};const J=[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`,`[contenteditable="true"]`].join(`,`);function oe(e){let t=e;for(;t;){if(t instanceof HTMLElement&&t.matches(J))return t;t=t.parentElement}return null}const Y={shiftKey:!1,ctrlKey:!1,altKey:!1,metaKey:!1};var X=class{options;doc;hitTest=new q;capture=new V;cursor=null;buttons=0;lastX=0;lastY=0;modifiers=Y;downRecords=new Map;clickRecords=new Map;pointerUnsub=null;keyboardUnsub=null;running=!1;constructor(e={}){this.options=e,this.doc=e.document??globalThis.document}start(){this.running||(this.running=!0,this.options.pointerCapture!==!1&&this.capture.install(),this.options.cursor&&(this.cursor=new H(this.doc,typeof this.options.cursor==`object`?this.options.cursor:{}),this.cursor.attach()),this.options.pointerSource&&(this.pointerUnsub=this.options.pointerSource(e=>{this.handlePointer(e)})),this.options.keyboardSource&&(this.keyboardUnsub=this.options.keyboardSource(e=>{this.handleKeyboard(e)})))}stop(){this.running&&(this.running=!1,this.pointerUnsub?.(),this.pointerUnsub=null,this.keyboardUnsub?.(),this.keyboardUnsub=null,this.cursor?.detach(),this.cursor=null,this.capture.uninstall(),this.hitTest.reset(),this.buttons=0,this.modifiers=Y,this.downRecords.clear(),this.clickRecords.clear())}setPointerSource(e){this.pointerUnsub?.(),this.pointerUnsub=null,this.options.pointerSource=e??void 0,this.running&&e&&(this.pointerUnsub=e(e=>{this.handlePointer(e)}))}injectPointer(e){this.running&&this.handlePointer(e)}injectKeyboard(e){this.running&&this.handleKeyboard(e)}setKeyboardSource(e){this.keyboardUnsub?.(),this.keyboardUnsub=null,this.options.keyboardSource=e??void 0,this.running&&e&&(this.keyboardUnsub=e(e=>{this.handleKeyboard(e)}))}handlePointer(e){let t=e.x-this.lastX,n=e.y-this.lastY;if(this.lastX=e.x,this.lastY=e.y,this.cursor?.move(e.x,e.y),e.kind===`cancel`){this.handleCancel(e.x,e.y,this.makeContext(e,t,n));return}let r=this.makeContext(e,t,n);if(e.kind===`move`){let t=this.hitTest.update(this.doc,e.x,e.y,r,this.capture.getCaptured());this.flushCaptureTransitions(t,e.x,e.y,r);return}let i=this.hitTest.update(this.doc,e.x,e.y,r,this.capture.getCaptured());if(i)if(e.kind===`button`){let t=S(e.button);if(e.pressed){if(this.buttons|=t,r.buttons=this.buttons,r.pressure=r.pressure||.5,k(i,e.x,e.y,e.button,r),this.downRecords.set(e.button,{target:i,x:e.x,y:e.y}),this.options.autoFocus!==!1){let e=oe(i);if(e)e.focus();else{let e=this.doc.activeElement;e instanceof HTMLElement&&e!==this.doc.body&&e.blur()}}this.flushCaptureTransitions(i,e.x,e.y,r)}else{this.buttons&=~t,r.buttons=this.buttons,r.pressure=this.buttons===0?0:r.pressure,A(i,e.x,e.y,e.button,r),this.flushCaptureTransitions(i,e.x,e.y,r);let n=this.downRecords.get(e.button);if(this.downRecords.delete(e.button),n&&this.shouldFireClick(n,i,e.x,e.y)){let t=se(n.target,i),a=this.bumpClickCount(e.button,t,e.x,e.y);j(t,e.x,e.y,e.button,r,a)}this.buttons===0&&this.capture.getCaptured()&&(this.capture.markReleased(),this.flushCaptureTransitions(i,e.x,e.y,r))}}else M(i,e.x,e.y,e.deltaX,e.deltaY,e.deltaMode??0,r)}handleCancel(e,t,n){let r=this.capture.getCaptured(),i=r??this.hitTest.resolve(this.doc,e,t);i&&N(i,e,t,n),r&&(this.capture.markReleased(),this.flushCaptureTransitions(r,e,t,n)),this.buttons=0,this.downRecords.clear()}flushCaptureTransitions(e,t,n,r){let{gained:i,lost:a}=this.capture.consumeTransitions();a&&F(a,t,n,r),i&&P(i,t,n,r)}makeContext(e,t,n){return{buttons:this.buttons,modifiers:this.modifiers,pointerType:e.pointerType??`mouse`,pressure:e.pressure??(this.buttons>0?.5:0),tiltX:e.tiltX??0,tiltY:e.tiltY??0,movementX:t,movementY:n,screenX:e.screenX??e.x,screenY:e.screenY??e.y}}shouldFireClick(e,t,n,r){let i=this.options.clickMoveThresholdPx??5;return Math.abs(n-e.x)>i||Math.abs(r-e.y)>i?!1:e.target.contains(t)||t.contains(e.target)}bumpClickCount(e,t,n,r){let i=performance.now(),a=this.options.doubleClickThresholdMs??500,o=this.clickRecords.get(e),s=1;return o&&o.target===t&&i-o.time<=a&&Math.abs(o.x-n)<=5&&Math.abs(o.y-r)<=5&&(s=o.count+1),this.clickRecords.set(e,{target:t,x:n,y:r,time:i,count:s}),s}handleKeyboard(e){e.modifiers?this.modifiers={shiftKey:e.modifiers.shift??!1,ctrlKey:e.modifiers.ctrl??!1,altKey:e.modifiers.alt??!1,metaKey:e.modifiers.meta??!1}:this.modifiers=le(e.code,e.pressed,this.modifiers);let t=this.resolveKeyboardTarget();t&&(u(t,e),this.options.editableTextInput!==!1&&d(t,e))}resolveKeyboardTarget(){let e=this.options.keyboardTarget??`active-element`;return e===`document`?this.doc:e===`pointer-target`?U(this.doc,this.lastX,this.lastY)??this.doc:this.doc.activeElement??this.doc.body??this.doc}};function se(e,t){return e===t||e.contains(t)?e:t.contains(e)?t:e}const ce={ShiftLeft:`shiftKey`,ShiftRight:`shiftKey`,ControlLeft:`ctrlKey`,ControlRight:`ctrlKey`,AltLeft:`altKey`,AltRight:`altKey`,MetaLeft:`metaKey`,MetaRight:`metaKey`,OSLeft:`metaKey`,OSRight:`metaKey`};function le(e,t,n){let r=ce[e];return!r||n[r]===t?n:{...n,[r]:t}}const Z=i(null);function Q({children:e,...t}){let[n]=s(()=>new X(t)),{pointerSource:r,keyboardSource:i}=t;return o(()=>{n.setPointerSource(r??null)},[n,r]),o(()=>{n.setKeyboardSource(i??null)},[n,i]),o(()=>(n.start(),()=>n.stop()),[n]),c(Z,{value:n,children:e})}function $(){let e=a(Z);if(!e)throw Error(`useMimoForwarder must be used inside <MimoProvider>`);return e}function ue({pointer:i,keyboard:a}){let s=$(),c=t();return o(()=>{if(!i)return;let{x:t,y:n}=e(c.x,c.y);s.injectPointer({kind:`move`,x:t,y:n})},[s,i,c.x,c.y]),r({onButton:t=>{if(!i)return;let{x:n,y:r}=e(t.x,t.y),a=t.button===`other`?`aux1`:t.button;s.injectPointer({kind:`button`,x:n,y:r,button:a,pressed:t.pressed})},onWheel:t=>{if(!i)return;let{x:n,y:r}=e(t.x,t.y);s.injectPointer({kind:`wheel`,x:n,y:r,deltaX:t.deltaX,deltaY:t.deltaY})}}),n({onKeyDown:e=>{a&&s.injectKeyboard({code:e.code,pressed:!0,repeat:e.repeat,modifiers:{shift:e.modifiers.shift,ctrl:e.modifiers.control,alt:e.modifiers.alt,meta:e.modifiers.meta}})},onKeyUp:e=>{a&&s.injectKeyboard({code:e.code,pressed:!1,modifiers:{shift:e.modifiers.shift,ctrl:e.modifiers.control,alt:e.modifiers.alt,meta:e.modifiers.meta}})}}),null}function de({pointer:e=!0,keyboard:t=!0,children:n,...r}){return ee(Q,{...r,children:[c(ue,{pointer:e,keyboard:t}),n]})}export{X as MimoForwarder,Z as MimoForwarderContext,Q as MimoForwarderProvider,de as MimoProvider,$ as useMimoForwarder};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluxlay/react",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"description": "SDK for building Fluxlay wallpapers with React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"desktop",
|
|
@@ -38,10 +38,10 @@
|
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@fluxlay/sdk-core": "1.2.0",
|
|
40
40
|
"@mimo/react": "0.1.0",
|
|
41
|
-
"@types/react": "^19.2.
|
|
42
|
-
"react": "^19.2.
|
|
43
|
-
"tsdown": "^0.
|
|
44
|
-
"typescript": "^
|
|
41
|
+
"@types/react": "^19.2.15",
|
|
42
|
+
"react": "^19.2.6",
|
|
43
|
+
"tsdown": "^0.22.0",
|
|
44
|
+
"typescript": "^6.0.3"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"react": "^19.0.0"
|
|
File without changes
|