writetrack 0.10.2 → 0.11.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.
@@ -1,4 +1,4 @@
1
- import { WriteTrack } from 'writetrack';
1
+ import { WriteTrack, SessionAnalysis } from 'writetrack';
2
2
  import { Ref, ShallowRef } from 'vue';
3
3
 
4
4
  export interface UseWriteTrackOptions {
@@ -16,6 +16,12 @@ export interface UseWriteTrackOptions {
16
16
  wasmUrl?: string;
17
17
  /** Enable IndexedDB session persistence and auto-resume. Requires contentId. */
18
18
  persist?: boolean;
19
+ /** Subscribe to real-time analysis events. Requires wasmUrl or default WASM loader. */
20
+ analysis?: boolean;
21
+ /** Called on each tick with active and total time. */
22
+ onTick?: (data: { activeTime: number; totalTime: number }) => void;
23
+ /** Called once the tracker is ready with the WriteTrack instance. */
24
+ onReady?: (tracker: WriteTrack) => void;
19
25
  }
20
26
 
21
27
  export interface UseWriteTrackReturn {
@@ -29,6 +35,12 @@ export interface UseWriteTrackReturn {
29
35
  isTracking: Ref<boolean>;
30
36
  /** Access to the underlying WriteTrack instance */
31
37
  tracker: ShallowRef<WriteTrack | null>;
38
+ /** Whether the tracker has initialised and is ready */
39
+ isReady: Ref<boolean>;
40
+ /** Latest analysis result (when `analysis: true`) */
41
+ analysis: ShallowRef<SessionAnalysis | null>;
42
+ /** Latest error from WASM or tracker initialisation */
43
+ error: ShallowRef<Error | null>;
32
44
  }
33
45
 
34
46
  /**
package/dist/vue/index.js CHANGED
@@ -1 +1 @@
1
- import{ref as p,onMounted as k,onUnmounted as T,shallowRef as d}from"vue";import{WriteTrack as n}from"writetrack";function W(r,i={}){let{autoStart:l=!0,...a}=i,e=d(null),t=p(!1);function s(){r.value&&(e.value=new n({target:r.value,...a}),l&&(a.persist?e.value.ready.then(()=>{e.value&&(e.value.start(),t.value=!0)}):(e.value.start(),t.value=!0)))}function u(){e.value&&(e.value.stop(),e.value=null,t.value=!1)}k(()=>{s()}),T(()=>{u()});function o(){e.value&&!t.value&&(e.value.start(),t.value=!0)}function c(){e.value&&t.value&&(e.value.stop(),t.value=!1)}function v(){if(!r.value)return;let f=t.value;u(),e.value=new n({target:r.value,...a}),f&&(a.persist?e.value.ready.then(()=>{e.value&&(e.value.start(),t.value=!0)}):(e.value.start(),t.value=!0))}return{reset:v,start:o,stop:c,isTracking:t,tracker:e}}export{W as useWriteTrack};
1
+ import{ref as f,onMounted as R,onUnmounted as S,shallowRef as u}from"vue";import{WriteTrack as g}from"writetrack";var c=class{constructor(t){this._unsubs=[];this._opts=t,this._state={tracker:null,isReady:!1,isTracking:!1,analysis:null,error:null},this._init(t.target,t.writeTrackOptions)}_init(t,e){let s=new g({...e,target:t});if(this._state.tracker=s,this._unsubs=[],this._opts.onTick){let i=s.on("tick",this._opts.onTick);this._unsubs.push(i)}if(this._opts.analysis){let i=s.on("analysis",o=>{this._state.analysis=o,this._notify()});this._unsubs.push(i);let a=s.on("wasm:error",o=>{this._state.error=o,this._notify()});this._unsubs.push(a)}this._opts.autoStart!==!1?!!e.persist?s.ready.then(()=>{s.start(),this._state.isReady=!0,this._state.isTracking=!0,this._notify(),this._opts.onReady?.(s)}).catch(a=>{this._state.error=a,this._notify()}):(s.start(),this._state.isReady=!0,this._state.isTracking=!0,this._notify(),queueMicrotask(()=>{this._opts.onReady?.(s)})):(this._state.isReady=!0,this._notify())}_notify(){this._opts.onStateChange({tracker:this._state.tracker,isReady:this._state.isReady,isTracking:this._state.isTracking,analysis:this._state.analysis,error:this._state.error})}getState(){return{tracker:this._state.tracker,isReady:this._state.isReady,isTracking:this._state.isTracking,analysis:this._state.analysis,error:this._state.error}}start(){this._state.tracker&&!this._state.isTracking&&(this._state.tracker.start(),this._state.isTracking=!0,this._notify())}stop(){this._state.tracker&&this._state.isTracking&&(this._state.tracker.stop(),this._state.isTracking=!1,this._notify())}async destroy(){this._state.tracker&&await this._state.tracker.stopAndWait();for(let t of this._unsubs)t();this._unsubs=[],this._state.tracker=null,this._state.isReady=!1,this._state.isTracking=!1,this._state.analysis=null,this._state.error=null,this._notify()}async reset(t,e){await this.destroy(),this._init(t,e??this._opts.writeTrackOptions)}};function b(n,t={}){let{autoStart:e=!0,analysis:s,onTick:h,onReady:i,...a}=t,o=u(null),y=f(!1),k=f(!1),_=u(null),p=u(null),r=null;function T(l){o.value=l.tracker,y.value=l.isTracking,k.value=l.isReady,_.value=l.analysis,p.value=l.error}R(()=>{n.value&&(r=new c({target:n.value,writeTrackOptions:a,autoStart:e,analysis:s,onTick:h,onReady:i,onStateChange:T}))}),S(()=>{r?.destroy(),r=null});function d(){r?.start()}function m(){r?.stop()}function v(){!n.value||!r||r.reset(n.value,a)}return{reset:v,start:d,stop:m,isTracking:y,tracker:o,isReady:k,analysis:_,error:p}}export{b as useWriteTrack};
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "writetrack",
3
- "version": "0.10.2",
3
+ "version": "0.11.0",
4
4
  "private": false,
5
5
  "description": "Lightweight keystroke telemetry capture for web applications",
6
6
  "main": "dist/index.cjs",
@@ -71,6 +71,10 @@
71
71
  "browser": "./dist/browser/viz.js",
72
72
  "import": "./dist/esm/viz.js",
73
73
  "require": "./dist/viz.cjs"
74
+ },
75
+ "./testing": {
76
+ "types": "./dist/esm/testing.d.ts",
77
+ "import": "./dist/esm/testing.js"
74
78
  }
75
79
  },
76
80
  "peerDependencies": {
@@ -137,6 +141,8 @@
137
141
  "dist/esm/viz.d.ts",
138
142
  "dist/browser/viz.js",
139
143
  "dist/viz.cjs",
144
+ "dist/esm/testing.js",
145
+ "dist/esm/testing.d.ts",
140
146
  "dist/react/",
141
147
  "dist/vue/",
142
148
  "dist/tiptap/",
@@ -156,7 +162,10 @@
156
162
  "bin": {
157
163
  "writetrack": "./cli/init.js"
158
164
  },
159
- "sideEffects": false,
165
+ "sideEffects": [
166
+ "./dist/tinymce/index.js",
167
+ "./src/tinymce/index.ts"
168
+ ],
160
169
  "scripts": {
161
170
  "postpublish": "rm -rf ./package",
162
171
  "prepare": "husky"