@tamagui/react-native-web-internals 1.129.13 → 1.129.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.
@@ -1 +1 @@
1
- {"version":3,"names":["requestIdleCallback","cancelIdleCallback","InteractionManager","Events","interactionStart","interactionComplete","runAfterInteractions","task","handle","promise","Promise","resolve","then","bind","done","cancel","createInteractionHandle","clearInteractionHandle","addListener","InteractionManager_default"],"sources":["../../../src/modules/InteractionManager.tsx"],"sourcesContent":[null],"mappings":"AAUA,OAAOA,mBAAA,IAAuBC,kBAAA,QAA0B;AAEjD,IAAAC,kBAAM;IACXC,MAAA,EAAQ;MACNC,gBAAA,EAAkB;MAClBC,mBAAA,EAAqB;IACvB;IAAA;AAAA;AAAA;IAKAC,qBAAqBC,IAAA,EAInB;MACA,IAAIC,MAAA;QAAAC,OAAA,OAAAC,OAAA,WAAAC,OAAA;UAEJH,MAAM,GAAAR,mBAAuB,aAAY;YACvCO,IAAA,GAASI,OAAA,CAAAJ,IAAA,MAAAI,OAAoB,CAAM;UACjC,EAAI;QAIM,EAEZ;MACF,OAAC;QACDC,IAAA,EAAOH,OAAA,CAAAG,IAAA,CAAAC,IAAA,CAAAJ,OAAA;QACLK,IAAA,EAAML,OAAA,CAAQG,IAAA,CAAKC,IAAA,CAAKJ,OAAO;QAC/BM,MAAM,WAAAA,CAAA,EAAa;UACnBd,kBAAc,CAAAO,MAAA;QACZ;MAAyB;IAC3B;IAEJ;AAAA;AAAA;IAAAQ,wBAAA;MAKA;IACE;IACF;AAAA;AAAA;IAAAC,uBAAAT,MAAA,GAKA;IAAwCU,WAAA,WAAAA,CAAA,GAExC;EAAmB;EAACC,0BAAA,GAAAjB,kBAAA;AACtB,SAEAA,kBAAO,E","ignoreList":[]}
1
+ {"version":3,"names":["invariant","requestIdleCallback","_class_call_check","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_create_class","protoProps","staticProps","prototype","_define_property","obj","value","EventEmitter","EventEmitter2","eventType","listener","context","registrations","_allocate","registration","remove","delete","add","_len","arguments","args","Array","_key","_registry","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","from","Symbol","iterator","_step","next","done","apply","err","return","Set","TaskQueue","TaskQueue2","param","onMoreTasks","_onMoreTasks","_queueStack","tasks","popable","_this","forEach","task","_enqueue","tasksToCancel","map","queue","filter","includes","idx","_getCurrentQueue","shift","_genPromise","run","JSON","stringify","e","Error","taskName","name","message","push"],"sources":["../../../src/modules/InteractionManager.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/react-native-web-internals",
3
- "version": "1.129.13",
3
+ "version": "1.129.14",
4
4
  "description": "React Native for Web",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs",
@@ -31,16 +31,16 @@
31
31
  }
32
32
  },
33
33
  "dependencies": {
34
- "@tamagui/normalize-css-color": "1.129.13",
35
- "@tamagui/react-native-use-pressable": "1.129.13",
36
- "@tamagui/react-native-use-responder-events": "1.129.13",
37
- "@tamagui/simple-hash": "1.129.13",
38
- "@tamagui/use-element-layout": "1.129.13",
39
- "@tamagui/web": "1.129.13",
34
+ "@tamagui/normalize-css-color": "1.129.14",
35
+ "@tamagui/react-native-use-pressable": "1.129.14",
36
+ "@tamagui/react-native-use-responder-events": "1.129.14",
37
+ "@tamagui/simple-hash": "1.129.14",
38
+ "@tamagui/use-element-layout": "1.129.14",
39
+ "@tamagui/web": "1.129.14",
40
40
  "react": "*"
41
41
  },
42
42
  "devDependencies": {
43
- "@tamagui/build": "1.129.13"
43
+ "@tamagui/build": "1.129.14"
44
44
  },
45
45
  "license": "MIT",
46
46
  "tags": [
@@ -4,43 +4,225 @@
4
4
  *
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- *
8
- * @flow
9
7
  */
10
8
 
11
- import requestIdleCallback, { cancelIdleCallback } from './requestIdleCallback'
9
+ import { invariant } from './invariant'
10
+ import requestIdleCallback from './requestIdleCallback/index'
11
+
12
+ // Simple EventEmitter implementation for internal use
13
+ type EventMap = {
14
+ [K in string]: any[]
15
+ }
16
+
17
+ type EventSubscription = {
18
+ remove: () => void
19
+ }
20
+
21
+ class EventEmitter<TEventMap extends EventMap = EventMap> {
22
+ private _registry: {
23
+ [K in keyof TEventMap]?: Set<{
24
+ context: any
25
+ listener: (...args: TEventMap[K]) => void
26
+ remove: () => void
27
+ }>
28
+ } = {}
29
+
30
+ addListener<K extends keyof TEventMap>(
31
+ eventType: K,
32
+ listener: (...args: TEventMap[K]) => void,
33
+ context?: any
34
+ ): EventSubscription {
35
+ const registrations = this._allocate(eventType)
36
+ const registration = {
37
+ context,
38
+ listener,
39
+ remove: () => {
40
+ registrations.delete(registration)
41
+ },
42
+ }
43
+ registrations.add(registration)
44
+ return registration
45
+ }
46
+
47
+ emit<K extends keyof TEventMap>(eventType: K, ...args: TEventMap[K]): void {
48
+ const registrations = this._registry[eventType]
49
+ if (registrations != null) {
50
+ for (const registration of Array.from(registrations)) {
51
+ registration.listener.apply(registration.context, args)
52
+ }
53
+ }
54
+ }
55
+
56
+ private _allocate<K extends keyof TEventMap>(
57
+ eventType: K
58
+ ): Set<{
59
+ context: any
60
+ listener: (...args: TEventMap[K]) => void
61
+ remove: () => void
62
+ }> {
63
+ let registrations = this._registry[eventType]
64
+ if (registrations == null) {
65
+ registrations = new Set()
66
+ this._registry[eventType] = registrations
67
+ }
68
+ return registrations
69
+ }
70
+ }
71
+
72
+ // TaskQueue implementation
73
+ type SimpleTask = {
74
+ name: string
75
+ run: () => void
76
+ }
77
+
78
+ type PromiseTask = {
79
+ name: string
80
+ gen: () => Promise<void>
81
+ }
82
+
83
+ export type Task = SimpleTask | PromiseTask | (() => void)
84
+
85
+ interface QueueItem {
86
+ tasks: Task[]
87
+ popable: boolean
88
+ }
89
+
90
+ class TaskQueue {
91
+ private _queueStack: QueueItem[]
92
+ private _onMoreTasks: () => void
93
+
94
+ constructor({ onMoreTasks }: { onMoreTasks: () => void }) {
95
+ this._onMoreTasks = onMoreTasks
96
+ this._queueStack = [{ tasks: [], popable: true }]
97
+ }
98
+
99
+ enqueueTasks(tasks: Task[]): void {
100
+ tasks.forEach((task) => this._enqueue(task))
101
+ }
102
+
103
+ cancelTasks(tasksToCancel: Task[]): void {
104
+ this._queueStack = this._queueStack
105
+ .map((queue) => ({
106
+ ...queue,
107
+ tasks: queue.tasks.filter((task) => !tasksToCancel.includes(task)),
108
+ }))
109
+ .filter((queue, idx) => queue.tasks.length > 0 || idx === 0)
110
+ }
111
+
112
+ hasTasksToProcess(): boolean {
113
+ return this._getCurrentQueue().length > 0
114
+ }
115
+
116
+ processNext(): void {
117
+ const queue = this._getCurrentQueue()
118
+ if (queue.length) {
119
+ const task = queue.shift()
120
+ try {
121
+ if (typeof task === 'object' && task && 'gen' in task) {
122
+ this._genPromise(task as PromiseTask)
123
+ } else if (typeof task === 'object' && task && 'run' in task) {
124
+ ;(task as SimpleTask).run()
125
+ } else {
126
+ invariant(
127
+ typeof task === 'function',
128
+ 'Expected Function, SimpleTask, or PromiseTask, but got:\n' +
129
+ JSON.stringify(task, null, 2)
130
+ )
131
+ ;(task as () => void)()
132
+ }
133
+ } catch (e) {
134
+ if (e instanceof Error) {
135
+ const taskName =
136
+ task && typeof task === 'object' && 'name' in task ? task.name : ''
137
+ e.message = 'TaskQueue: Error with task ' + taskName + ': ' + e.message
138
+ }
139
+ throw e
140
+ }
141
+ }
142
+ }
143
+
144
+ private _enqueue(task: Task): void {
145
+ this._getCurrentQueue().push(task)
146
+ }
147
+
148
+ private _getCurrentQueue(): Task[] {
149
+ const stackIdx = this._queueStack.length - 1
150
+ const queue = this._queueStack[stackIdx]
151
+ if (queue.popable && queue.tasks.length === 0 && stackIdx > 0) {
152
+ this._queueStack.pop()
153
+ return this._getCurrentQueue()
154
+ } else {
155
+ return queue.tasks
156
+ }
157
+ }
158
+
159
+ private _genPromise(task: PromiseTask) {
160
+ const length = this._queueStack.push({ tasks: [], popable: false })
161
+ const stackIdx = length - 1
162
+ const stackItem = this._queueStack[stackIdx]
163
+ task
164
+ .gen()
165
+ .then(() => {
166
+ stackItem.popable = true
167
+ if (this.hasTasksToProcess()) {
168
+ this._onMoreTasks()
169
+ }
170
+ })
171
+ .catch((ex) => {
172
+ setTimeout(() => {
173
+ if (ex instanceof Error) {
174
+ ex.message = `TaskQueue: Error resolving Promise in task ${task.name}: ${ex.message}`
175
+ }
176
+ throw ex
177
+ }, 0)
178
+ })
179
+ }
180
+ }
181
+
182
+ const _emitter = new EventEmitter<{
183
+ interactionComplete: []
184
+ interactionStart: []
185
+ }>()
12
186
 
13
187
  export const InteractionManager = {
14
188
  Events: {
15
- interactionStart: 'interactionStart',
16
- interactionComplete: 'interactionComplete',
189
+ interactionStart: 'interactionStart' as const,
190
+ interactionComplete: 'interactionComplete' as const,
17
191
  },
18
192
 
19
193
  /**
20
194
  * Schedule a function to run after all interactions have completed.
21
195
  */
22
- runAfterInteractions(task): {
23
- then: Function
24
- done: Function
25
- cancel: Function
196
+ runAfterInteractions(task?: Task): {
197
+ then: <TResult1 = void, TResult2 = never>(
198
+ onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null,
199
+ onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null
200
+ ) => Promise<TResult1 | TResult2>
201
+ done: <TResult1 = void, TResult2 = never>(
202
+ onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null,
203
+ onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null
204
+ ) => Promise<TResult1 | TResult2>
205
+ cancel: () => void
26
206
  } {
27
- let handle
28
-
29
- const promise = new Promise((resolve) => {
30
- handle = requestIdleCallback(() => {
31
- if (task) {
32
- resolve(task())
33
- } else {
34
- // @ts-ignore
35
- resolve()
36
- }
207
+ const tasks: Array<Task> = []
208
+ const promise = new Promise<void>((resolve) => {
209
+ _scheduleUpdate()
210
+ if (task) {
211
+ tasks.push(task)
212
+ }
213
+ tasks.push({
214
+ run: resolve,
215
+ name:
216
+ 'resolve ' +
217
+ ((task && typeof task === 'object' && 'name' in task && task.name) || '?'),
37
218
  })
219
+ _taskQueue.enqueueTasks(tasks)
38
220
  })
39
221
  return {
40
222
  then: promise.then.bind(promise),
41
223
  done: promise.then.bind(promise),
42
224
  cancel: () => {
43
- cancelIdleCallback(handle)
225
+ _taskQueue.cancelTasks(tasks)
44
226
  },
45
227
  }
46
228
  },
@@ -49,15 +231,85 @@ export const InteractionManager = {
49
231
  * Notify manager that an interaction has started.
50
232
  */
51
233
  createInteractionHandle(): number {
52
- return 1
234
+ _scheduleUpdate()
235
+ const handle = ++_inc
236
+ _addInteractionSet.add(handle)
237
+ return handle
53
238
  },
54
239
 
55
240
  /**
56
241
  * Notify manager that an interaction has completed.
57
242
  */
58
- clearInteractionHandle(handle: number) {},
243
+ clearInteractionHandle(handle: number): void {
244
+ invariant(!!handle, 'Must provide a handle to clear.')
245
+ _scheduleUpdate()
246
+ _addInteractionSet.delete(handle)
247
+ _deleteInteractionSet.add(handle)
248
+ },
249
+
250
+ addListener: _emitter.addListener.bind(_emitter) as (
251
+ eventType: 'interactionStart' | 'interactionComplete',
252
+ listener: () => void,
253
+ context?: any
254
+ ) => EventSubscription,
255
+
256
+ /**
257
+ * Set deadline for task processing
258
+ */
259
+ setDeadline(deadline: number): void {
260
+ _deadline = deadline
261
+ },
262
+ }
263
+
264
+ const _interactionSet = new Set<number>()
265
+ const _addInteractionSet = new Set<number>()
266
+ const _deleteInteractionSet = new Set<number>()
267
+ const _taskQueue = new TaskQueue({ onMoreTasks: _scheduleUpdate })
268
+ let _nextUpdateHandle: number | ReturnType<typeof setTimeout> | null = null
269
+ let _inc = 0
270
+ let _deadline = -1
59
271
 
60
- addListener: () => {},
272
+ /**
273
+ * Schedule an asynchronous update to the interaction state.
274
+ */
275
+ function _scheduleUpdate(): void {
276
+ if (!_nextUpdateHandle) {
277
+ if (_deadline > 0) {
278
+ _nextUpdateHandle = setTimeout(_processUpdate)
279
+ } else {
280
+ _nextUpdateHandle = requestIdleCallback(_processUpdate)
281
+ }
282
+ }
61
283
  }
62
284
 
63
- export default InteractionManager
285
+ /**
286
+ * Notify listeners, process queue, etc
287
+ */
288
+ function _processUpdate(): void {
289
+ _nextUpdateHandle = null
290
+ const interactionCount = _interactionSet.size
291
+ _addInteractionSet.forEach((handle) => _interactionSet.add(handle))
292
+ _deleteInteractionSet.forEach((handle) => _interactionSet.delete(handle))
293
+ const nextInteractionCount = _interactionSet.size
294
+
295
+ if (interactionCount !== 0 && nextInteractionCount === 0) {
296
+ _emitter.emit('interactionComplete')
297
+ } else if (interactionCount === 0 && nextInteractionCount !== 0) {
298
+ _emitter.emit('interactionStart')
299
+ }
300
+
301
+ if (nextInteractionCount === 0) {
302
+ // It seems that we can't know the running time of the current event loop,
303
+ // we can only calculate the running time of the current task queue.
304
+ const begin = Date.now()
305
+ while (_taskQueue.hasTasksToProcess()) {
306
+ _taskQueue.processNext()
307
+ if (_deadline > 0 && Date.now() - begin >= _deadline) {
308
+ _scheduleUpdate()
309
+ break
310
+ }
311
+ }
312
+ }
313
+ _addInteractionSet.clear()
314
+ _deleteInteractionSet.clear()
315
+ }
@@ -4,21 +4,31 @@
4
4
  *
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- *
8
- * @flow
9
7
  */
8
+ type EventSubscription = {
9
+ remove: () => void;
10
+ };
11
+ type SimpleTask = {
12
+ name: string;
13
+ run: () => void;
14
+ };
15
+ type PromiseTask = {
16
+ name: string;
17
+ gen: () => Promise<void>;
18
+ };
19
+ export type Task = SimpleTask | PromiseTask | (() => void);
10
20
  export declare const InteractionManager: {
11
21
  Events: {
12
- interactionStart: string;
13
- interactionComplete: string;
22
+ interactionStart: "interactionStart";
23
+ interactionComplete: "interactionComplete";
14
24
  };
15
25
  /**
16
26
  * Schedule a function to run after all interactions have completed.
17
27
  */
18
- runAfterInteractions(task: any): {
19
- then: Function;
20
- done: Function;
21
- cancel: Function;
28
+ runAfterInteractions(task?: Task): {
29
+ then: <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null) => Promise<TResult1 | TResult2>;
30
+ done: <TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null) => Promise<TResult1 | TResult2>;
31
+ cancel: () => void;
22
32
  };
23
33
  /**
24
34
  * Notify manager that an interaction has started.
@@ -28,7 +38,11 @@ export declare const InteractionManager: {
28
38
  * Notify manager that an interaction has completed.
29
39
  */
30
40
  clearInteractionHandle(handle: number): void;
31
- addListener: () => void;
41
+ addListener: (eventType: "interactionStart" | "interactionComplete", listener: () => void, context?: any) => EventSubscription;
42
+ /**
43
+ * Set deadline for task processing
44
+ */
45
+ setDeadline(deadline: number): void;
32
46
  };
33
- export default InteractionManager;
47
+ export {};
34
48
  //# sourceMappingURL=InteractionManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/modules/InteractionManager.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,kBAAkB;;;;;IAM7B;;OAEG;qCACyB;QAC1B,IAAI,EAAE,QAAQ,CAAA;QACd,IAAI,EAAE,QAAQ,CAAA;QACd,MAAM,EAAE,QAAQ,CAAA;KACjB;IAsBD;;OAEG;+BACwB,MAAM;IAIjC;;OAEG;mCAC4B,MAAM;;CAGtC,CAAA;AAED,eAAe,kBAAkB,CAAA"}
1
+ {"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/modules/InteractionManager.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB,CAAA;AAsDD,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,IAAI,CAAA;CAChB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,CAAA;AAwG1D,eAAO,MAAM,kBAAkB;;;;;IAM7B;;OAEG;gCACyB,IAAI,GAAG;QACjC,IAAI,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EACtC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACxE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,KACpE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAA;QACjC,IAAI,EAAE,CAAC,QAAQ,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EACtC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACxE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,KACpE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAA;QACjC,MAAM,EAAE,MAAM,IAAI,CAAA;KACnB;IAwBD;;OAEG;+BACwB,MAAM;IAOjC;;OAEG;mCAC4B,MAAM,GAAG,IAAI;iBAOQ,CAClD,SAAS,EAAE,kBAAkB,GAAG,qBAAqB,EACrD,QAAQ,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE,GAAG,KACV,iBAAiB;IAEtB;;OAEG;0BACmB,MAAM,GAAG,IAAI;CAGpC,CAAA"}