@fluentui/react-utilities 9.8.1 → 9.9.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.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,30 @@
2
2
  "name": "@fluentui/react-utilities",
3
3
  "entries": [
4
4
  {
5
- "date": "Fri, 12 May 2023 20:22:33 GMT",
5
+ "date": "Thu, 18 May 2023 00:35:49 GMT",
6
+ "tag": "@fluentui/react-utilities_v9.9.0",
7
+ "version": "9.9.0",
8
+ "comments": {
9
+ "minor": [
10
+ {
11
+ "author": "lingfangao@hotmail.com",
12
+ "package": "@fluentui/react-utilities",
13
+ "commit": "bdc00a85606c5a225be1df2a24db1ccecbc65b64",
14
+ "comment": "feat: Implement a priority queue"
15
+ }
16
+ ],
17
+ "none": [
18
+ {
19
+ "author": "olfedias@microsoft.com",
20
+ "package": "@fluentui/react-utilities",
21
+ "commit": "06cd515eda59a3078bfe32f9cc7c1f281cd20208",
22
+ "comment": "chore: add test-ssr script to v9 packages"
23
+ }
24
+ ]
25
+ }
26
+ },
27
+ {
28
+ "date": "Fri, 12 May 2023 20:28:04 GMT",
6
29
  "tag": "@fluentui/react-utilities_v9.8.1",
7
30
  "version": "9.8.1",
8
31
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,21 @@
1
1
  # Change Log - @fluentui/react-utilities
2
2
 
3
- This log was last generated on Fri, 12 May 2023 20:22:33 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 18 May 2023 00:35:49 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [9.9.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-utilities_v9.9.0)
8
+
9
+ Thu, 18 May 2023 00:35:49 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-utilities_v9.8.1..@fluentui/react-utilities_v9.9.0)
11
+
12
+ ### Minor changes
13
+
14
+ - feat: Implement a priority queue ([PR #27848](https://github.com/microsoft/fluentui/pull/27848) by lingfangao@hotmail.com)
15
+
7
16
  ## [9.8.1](https://github.com/microsoft/fluentui/tree/@fluentui/react-utilities_v9.8.1)
8
17
 
9
- Fri, 12 May 2023 20:22:33 GMT
18
+ Fri, 12 May 2023 20:28:04 GMT
10
19
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-utilities_v9.8.0..@fluentui/react-utilities_v9.8.1)
11
20
 
12
21
  ### Patches
package/dist/index.d.ts CHANGED
@@ -51,6 +51,13 @@ export declare type ComponentState<Slots extends SlotPropsRecord> = {
51
51
  [Key in keyof Slots]: ReplaceNullWithUndefined<Exclude<Slots[Key], SlotShorthandValue | (Key extends 'root' ? null : never)>>;
52
52
  };
53
53
 
54
+ /**
55
+ * @internal
56
+ * @param compare - comparison function for items
57
+ * @returns Priority queue implemented with a min heap
58
+ */
59
+ export declare function createPriorityQueue<T>(compare: PriorityQueueCompareFn<T>): PriorityQueue<T>;
60
+
54
61
  /**
55
62
  * HTML element types that are not allowed to have children.
56
63
  *
@@ -356,6 +363,25 @@ declare type ObscureEventName = 'onLostPointerCaptureCapture';
356
363
  */
357
364
  export declare function omit<TObj extends Record<string, any>, Exclusions extends (keyof TObj)[]>(obj: TObj, exclusions: Exclusions): Omit<TObj, Exclusions[number]>;
358
365
 
366
+ /**
367
+ * @internal
368
+ */
369
+ export declare interface PriorityQueue<T> {
370
+ all: () => T[];
371
+ clear: () => void;
372
+ contains: (item: T) => boolean;
373
+ dequeue: () => T;
374
+ enqueue: (item: T) => void;
375
+ peek: () => T | null;
376
+ remove: (item: T) => void;
377
+ size: () => number;
378
+ }
379
+
380
+ /**
381
+ * @internal
382
+ */
383
+ declare type PriorityQueueCompareFn<T> = (a: T, b: T) => number;
384
+
359
385
  /**
360
386
  * Removes the 'ref' prop from the given Props type, leaving unions intact (such as the discriminated union created by
361
387
  * IntrinsicSlotProps). This allows IntrinsicSlotProps to be used with React.forwardRef.
package/lib/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { getSlots, getSlotsNext, resolveShorthand, isResolvedShorthand, SLOT_RENDER_FUNCTION_SYMBOL } from './compose/index';
2
2
  export { IdPrefixProvider, resetIdsForTests, useControllableState, useEventCallback, useFirstMount, useForceUpdate, useId, useIsomorphicLayoutEffect, useMergedRefs, useOnClickOutside, useOnScrollOutside, usePrevious, useScrollbarWidth, useTimeout } from './hooks/index';
3
3
  export { canUseDOM, useIsSSR, SSRProvider } from './ssr/index';
4
- export { clamp, getNativeElementProps, getPartitionedNativeProps, getRTLSafeKey, mergeCallbacks, isHTMLElement, isInteractiveHTMLElement, omit } from './utils/index';
4
+ export { clamp, getNativeElementProps, getPartitionedNativeProps, getRTLSafeKey, mergeCallbacks, isHTMLElement, isInteractiveHTMLElement, omit, createPriorityQueue } from './utils/index';
5
5
  export { applyTriggerPropsToChildren, getTriggerChild, isFluentTrigger } from './trigger/index';
6
6
  export { isTouchEvent, isMouseEvent, getEventClientCoords } from './events/index';
7
7
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["getSlots","getSlotsNext","resolveShorthand","isResolvedShorthand","SLOT_RENDER_FUNCTION_SYMBOL","IdPrefixProvider","resetIdsForTests","useControllableState","useEventCallback","useFirstMount","useForceUpdate","useId","useIsomorphicLayoutEffect","useMergedRefs","useOnClickOutside","useOnScrollOutside","usePrevious","useScrollbarWidth","useTimeout","canUseDOM","useIsSSR","SSRProvider","clamp","getNativeElementProps","getPartitionedNativeProps","getRTLSafeKey","mergeCallbacks","isHTMLElement","isInteractiveHTMLElement","omit","applyTriggerPropsToChildren","getTriggerChild","isFluentTrigger","isTouchEvent","isMouseEvent","getEventClientCoords"],"sources":["../src/index.ts"],"sourcesContent":["export {\n getSlots,\n getSlotsNext,\n resolveShorthand,\n isResolvedShorthand,\n SLOT_RENDER_FUNCTION_SYMBOL,\n} from './compose/index';\nexport type {\n ExtractSlotProps,\n ComponentProps,\n ComponentState,\n ForwardRefComponent,\n ResolveShorthandFunction,\n ResolveShorthandOptions,\n Slot,\n Slots,\n SlotClassNames,\n SlotPropsRecord,\n SlotRenderFunction,\n SlotShorthandValue,\n UnknownSlotProps,\n} from './compose/index';\n\nexport {\n IdPrefixProvider,\n resetIdsForTests,\n useControllableState,\n useEventCallback,\n useFirstMount,\n useForceUpdate,\n useId,\n useIsomorphicLayoutEffect,\n useMergedRefs,\n useOnClickOutside,\n useOnScrollOutside,\n usePrevious,\n useScrollbarWidth,\n useTimeout,\n} from './hooks/index';\nexport type { RefObjectFunction, UseControllableStateOptions, UseOnClickOrScrollOutsideOptions } from './hooks/index';\n\nexport { canUseDOM, useIsSSR, SSRProvider } from './ssr/index';\n\nexport {\n clamp,\n getNativeElementProps,\n getPartitionedNativeProps,\n getRTLSafeKey,\n mergeCallbacks,\n isHTMLElement,\n isInteractiveHTMLElement,\n omit,\n} from './utils/index';\n\nexport { applyTriggerPropsToChildren, getTriggerChild, isFluentTrigger } from './trigger/index';\n\nexport type { FluentTriggerComponent, TriggerProps } from './trigger/index';\n\n/**\n * Event utils\n */\nexport type { NativeTouchOrMouseEvent, ReactTouchOrMouseEvent, TouchOrMouseEvent } from './events/index';\nexport { isTouchEvent, isMouseEvent, getEventClientCoords } from './events/index';\n"],"mappings":"AAAA,SACEA,QAAQ,EACRC,YAAY,EACZC,gBAAgB,EAChBC,mBAAmB,EACnBC,2BAA2B,QACtB;AAiBP,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,oBAAoB,EACpBC,gBAAgB,EAChBC,aAAa,EACbC,cAAc,EACdC,KAAK,EACLC,yBAAyB,EACzBC,aAAa,EACbC,iBAAiB,EACjBC,kBAAkB,EAClBC,WAAW,EACXC,iBAAiB,EACjBC,UAAU,QACL;AAGP,SAASC,SAAS,EAAEC,QAAQ,EAAEC,WAAW,QAAQ;AAEjD,SACEC,KAAK,EACLC,qBAAqB,EACrBC,yBAAyB,EACzBC,aAAa,EACbC,cAAc,EACdC,aAAa,EACbC,wBAAwB,EACxBC,IAAI,QACC;AAEP,SAASC,2BAA2B,EAAEC,eAAe,EAAEC,eAAe,QAAQ;AAQ9E,SAASC,YAAY,EAAEC,YAAY,EAAEC,oBAAoB,QAAQ"}
1
+ {"version":3,"names":["getSlots","getSlotsNext","resolveShorthand","isResolvedShorthand","SLOT_RENDER_FUNCTION_SYMBOL","IdPrefixProvider","resetIdsForTests","useControllableState","useEventCallback","useFirstMount","useForceUpdate","useId","useIsomorphicLayoutEffect","useMergedRefs","useOnClickOutside","useOnScrollOutside","usePrevious","useScrollbarWidth","useTimeout","canUseDOM","useIsSSR","SSRProvider","clamp","getNativeElementProps","getPartitionedNativeProps","getRTLSafeKey","mergeCallbacks","isHTMLElement","isInteractiveHTMLElement","omit","createPriorityQueue","applyTriggerPropsToChildren","getTriggerChild","isFluentTrigger","isTouchEvent","isMouseEvent","getEventClientCoords"],"sources":["../src/index.ts"],"sourcesContent":["export {\n getSlots,\n getSlotsNext,\n resolveShorthand,\n isResolvedShorthand,\n SLOT_RENDER_FUNCTION_SYMBOL,\n} from './compose/index';\nexport type {\n ExtractSlotProps,\n ComponentProps,\n ComponentState,\n ForwardRefComponent,\n ResolveShorthandFunction,\n ResolveShorthandOptions,\n Slot,\n Slots,\n SlotClassNames,\n SlotPropsRecord,\n SlotRenderFunction,\n SlotShorthandValue,\n UnknownSlotProps,\n} from './compose/index';\n\nexport {\n IdPrefixProvider,\n resetIdsForTests,\n useControllableState,\n useEventCallback,\n useFirstMount,\n useForceUpdate,\n useId,\n useIsomorphicLayoutEffect,\n useMergedRefs,\n useOnClickOutside,\n useOnScrollOutside,\n usePrevious,\n useScrollbarWidth,\n useTimeout,\n} from './hooks/index';\nexport type { RefObjectFunction, UseControllableStateOptions, UseOnClickOrScrollOutsideOptions } from './hooks/index';\n\nexport { canUseDOM, useIsSSR, SSRProvider } from './ssr/index';\n\nexport {\n clamp,\n getNativeElementProps,\n getPartitionedNativeProps,\n getRTLSafeKey,\n mergeCallbacks,\n isHTMLElement,\n isInteractiveHTMLElement,\n omit,\n createPriorityQueue,\n} from './utils/index';\n\nexport type { PriorityQueue } from './utils/priorityQueue';\n\nexport { applyTriggerPropsToChildren, getTriggerChild, isFluentTrigger } from './trigger/index';\n\nexport type { FluentTriggerComponent, TriggerProps } from './trigger/index';\n\n/**\n * Event utils\n */\nexport type { NativeTouchOrMouseEvent, ReactTouchOrMouseEvent, TouchOrMouseEvent } from './events/index';\nexport { isTouchEvent, isMouseEvent, getEventClientCoords } from './events/index';\n"],"mappings":"AAAA,SACEA,QAAQ,EACRC,YAAY,EACZC,gBAAgB,EAChBC,mBAAmB,EACnBC,2BAA2B,QACtB;AAiBP,SACEC,gBAAgB,EAChBC,gBAAgB,EAChBC,oBAAoB,EACpBC,gBAAgB,EAChBC,aAAa,EACbC,cAAc,EACdC,KAAK,EACLC,yBAAyB,EACzBC,aAAa,EACbC,iBAAiB,EACjBC,kBAAkB,EAClBC,WAAW,EACXC,iBAAiB,EACjBC,UAAU,QACL;AAGP,SAASC,SAAS,EAAEC,QAAQ,EAAEC,WAAW,QAAQ;AAEjD,SACEC,KAAK,EACLC,qBAAqB,EACrBC,yBAAyB,EACzBC,aAAa,EACbC,cAAc,EACdC,aAAa,EACbC,wBAAwB,EACxBC,IAAI,EACJC,mBAAmB,QACd;AAIP,SAASC,2BAA2B,EAAEC,eAAe,EAAEC,eAAe,QAAQ;AAQ9E,SAASC,YAAY,EAAEC,YAAY,EAAEC,oBAAoB,QAAQ"}
@@ -6,4 +6,5 @@ export * from './omit';
6
6
  export * from './properties';
7
7
  export * from './isHTMLElement';
8
8
  export * from './isInteractiveHTMLElement';
9
+ export * from './priorityQueue';
9
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/utils/index.ts"],"sourcesContent":["export * from './clamp';\nexport * from './getNativeElementProps';\nexport * from './getRTLSafeKey';\nexport * from './mergeCallbacks';\nexport * from './omit';\nexport * from './properties';\nexport * from './isHTMLElement';\nexport * from './isInteractiveHTMLElement';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc"}
1
+ {"version":3,"names":[],"sources":["../../src/utils/index.ts"],"sourcesContent":["export * from './clamp';\nexport * from './getNativeElementProps';\nexport * from './getRTLSafeKey';\nexport * from './mergeCallbacks';\nexport * from './omit';\nexport * from './properties';\nexport * from './isHTMLElement';\nexport * from './isInteractiveHTMLElement';\nexport * from './priorityQueue';\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @internal
3
+ */ /**
4
+ * @internal
5
+ * @param compare - comparison function for items
6
+ * @returns Priority queue implemented with a min heap
7
+ */export function createPriorityQueue(compare) {
8
+ const arr = [];
9
+ let size = 0;
10
+ const swap = (a, b) => {
11
+ const tmp = arr[a];
12
+ arr[a] = arr[b];
13
+ arr[b] = tmp;
14
+ };
15
+ const heapify = i => {
16
+ let smallest = i;
17
+ const l = left(i);
18
+ const r = right(i);
19
+ if (l < size && compare(arr[l], arr[smallest]) < 0) {
20
+ smallest = l;
21
+ }
22
+ if (r < size && compare(arr[r], arr[smallest]) < 0) {
23
+ smallest = r;
24
+ }
25
+ if (smallest !== i) {
26
+ swap(smallest, i);
27
+ heapify(smallest);
28
+ }
29
+ };
30
+ const dequeue = () => {
31
+ if (size === 0) {
32
+ throw new Error('Priority queue empty');
33
+ }
34
+ const res = arr[0];
35
+ arr[0] = arr[--size];
36
+ heapify(0);
37
+ return res;
38
+ };
39
+ const peek = () => {
40
+ if (size === 0) {
41
+ return null;
42
+ }
43
+ return arr[0];
44
+ };
45
+ const enqueue = item => {
46
+ arr[size++] = item;
47
+ let i = size - 1;
48
+ let p = parent(i);
49
+ while (i > 0 && compare(arr[p], arr[i]) > 0) {
50
+ swap(p, i);
51
+ i = p;
52
+ p = parent(i);
53
+ }
54
+ };
55
+ const contains = item => {
56
+ const index = arr.indexOf(item);
57
+ return index >= 0 && index < size;
58
+ };
59
+ const remove = item => {
60
+ const i = arr.indexOf(item);
61
+ if (i === -1 || i >= size) {
62
+ return;
63
+ }
64
+ arr[i] = arr[--size];
65
+ heapify(i);
66
+ };
67
+ const clear = () => {
68
+ size = 0;
69
+ };
70
+ const all = () => {
71
+ return arr.slice(0, size);
72
+ };
73
+ return {
74
+ all,
75
+ clear,
76
+ contains,
77
+ dequeue,
78
+ enqueue,
79
+ peek,
80
+ remove,
81
+ size: () => size
82
+ };
83
+ }
84
+ const left = i => {
85
+ return 2 * i + 1;
86
+ };
87
+ const right = i => {
88
+ return 2 * i + 2;
89
+ };
90
+ const parent = i => {
91
+ return Math.floor((i - 1) / 2);
92
+ };
93
+ //# sourceMappingURL=priorityQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createPriorityQueue","compare","arr","size","swap","a","b","tmp","heapify","i","smallest","l","left","r","right","dequeue","Error","res","peek","enqueue","item","p","parent","contains","index","indexOf","remove","clear","all","slice","Math","floor"],"sources":["../../src/utils/priorityQueue.ts"],"sourcesContent":["/**\n * @internal\n */\nexport type PriorityQueueCompareFn<T> = (a: T, b: T) => number;\n\n/**\n * @internal\n */\nexport interface PriorityQueue<T> {\n all: () => T[];\n clear: () => void;\n contains: (item: T) => boolean;\n dequeue: () => T;\n enqueue: (item: T) => void;\n peek: () => T | null;\n remove: (item: T) => void;\n size: () => number;\n}\n\n/**\n * @internal\n * @param compare - comparison function for items\n * @returns Priority queue implemented with a min heap\n */\nexport function createPriorityQueue<T>(compare: PriorityQueueCompareFn<T>): PriorityQueue<T> {\n const arr: T[] = [];\n let size = 0;\n\n const swap = (a: number, b: number) => {\n const tmp = arr[a];\n arr[a] = arr[b];\n arr[b] = tmp;\n };\n\n const heapify = (i: number) => {\n let smallest = i;\n const l = left(i);\n const r = right(i);\n\n if (l < size && compare(arr[l], arr[smallest]) < 0) {\n smallest = l;\n }\n\n if (r < size && compare(arr[r], arr[smallest]) < 0) {\n smallest = r;\n }\n\n if (smallest !== i) {\n swap(smallest, i);\n heapify(smallest);\n }\n };\n\n const dequeue = () => {\n if (size === 0) {\n throw new Error('Priority queue empty');\n }\n\n const res = arr[0];\n arr[0] = arr[--size];\n heapify(0);\n\n return res;\n };\n\n const peek = () => {\n if (size === 0) {\n return null;\n }\n\n return arr[0];\n };\n\n const enqueue = (item: T) => {\n arr[size++] = item;\n let i = size - 1;\n let p = parent(i);\n while (i > 0 && compare(arr[p], arr[i]) > 0) {\n swap(p, i);\n i = p;\n p = parent(i);\n }\n };\n\n const contains = (item: T) => {\n const index = arr.indexOf(item);\n return index >= 0 && index < size;\n };\n\n const remove = (item: T) => {\n const i = arr.indexOf(item);\n\n if (i === -1 || i >= size) {\n return;\n }\n\n arr[i] = arr[--size];\n heapify(i);\n };\n\n const clear = () => {\n size = 0;\n };\n\n const all = () => {\n return arr.slice(0, size);\n };\n\n return {\n all,\n clear,\n contains,\n dequeue,\n enqueue,\n peek,\n remove,\n size: () => size,\n };\n}\n\nconst left = (i: number) => {\n return 2 * i + 1;\n};\n\nconst right = (i: number) => {\n return 2 * i + 2;\n};\n\nconst parent = (i: number) => {\n return Math.floor((i - 1) / 2);\n};\n"],"mappings":"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"}
@@ -39,6 +39,7 @@ _export(exports, {
39
39
  isHTMLElement: ()=>_index3.isHTMLElement,
40
40
  isInteractiveHTMLElement: ()=>_index3.isInteractiveHTMLElement,
41
41
  omit: ()=>_index3.omit,
42
+ createPriorityQueue: ()=>_index3.createPriorityQueue,
42
43
  applyTriggerPropsToChildren: ()=>_index4.applyTriggerPropsToChildren,
43
44
  getTriggerChild: ()=>_index4.getTriggerChild,
44
45
  isFluentTrigger: ()=>_index4.isFluentTrigger,
@@ -1 +1 @@
1
- {"version":3,"sources":["../lib/index.js"],"sourcesContent":["export { getSlots, getSlotsNext, resolveShorthand, isResolvedShorthand, SLOT_RENDER_FUNCTION_SYMBOL } from './compose/index';\nexport { IdPrefixProvider, resetIdsForTests, useControllableState, useEventCallback, useFirstMount, useForceUpdate, useId, useIsomorphicLayoutEffect, useMergedRefs, useOnClickOutside, useOnScrollOutside, usePrevious, useScrollbarWidth, useTimeout } from './hooks/index';\nexport { canUseDOM, useIsSSR, SSRProvider } from './ssr/index';\nexport { clamp, getNativeElementProps, getPartitionedNativeProps, getRTLSafeKey, mergeCallbacks, isHTMLElement, isInteractiveHTMLElement, omit } from './utils/index';\nexport { applyTriggerPropsToChildren, getTriggerChild, isFluentTrigger } from './trigger/index';\nexport { isTouchEvent, isMouseEvent, getEventClientCoords } from './events/index';\n//# sourceMappingURL=index.js.map"],"names":["getSlots","getSlotsNext","resolveShorthand","isResolvedShorthand","SLOT_RENDER_FUNCTION_SYMBOL","IdPrefixProvider","resetIdsForTests","useControllableState","useEventCallback","useFirstMount","useForceUpdate","useId","useIsomorphicLayoutEffect","useMergedRefs","useOnClickOutside","useOnScrollOutside","usePrevious","useScrollbarWidth","useTimeout","canUseDOM","useIsSSR","SSRProvider","clamp","getNativeElementProps","getPartitionedNativeProps","getRTLSafeKey","mergeCallbacks","isHTMLElement","isInteractiveHTMLElement","omit","applyTriggerPropsToChildren","getTriggerChild","isFluentTrigger","isTouchEvent","isMouseEvent","getEventClientCoords"],"mappings":";;;;;;;;;;;IAASA,QAAQ,MAARA,eAAQ;IAAEC,YAAY,MAAZA,mBAAY;IAAEC,gBAAgB,MAAhBA,uBAAgB;IAAEC,mBAAmB,MAAnBA,0BAAmB;IAAEC,2BAA2B,MAA3BA,kCAA2B;IAC1FC,gBAAgB,MAAhBA,wBAAgB;IAAEC,gBAAgB,MAAhBA,wBAAgB;IAAEC,oBAAoB,MAApBA,4BAAoB;IAAEC,gBAAgB,MAAhBA,wBAAgB;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,cAAc,MAAdA,sBAAc;IAAEC,KAAK,MAALA,aAAK;IAAEC,yBAAyB,MAAzBA,iCAAyB;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,iBAAiB,MAAjBA,yBAAiB;IAAEC,kBAAkB,MAAlBA,0BAAkB;IAAEC,WAAW,MAAXA,mBAAW;IAAEC,iBAAiB,MAAjBA,yBAAiB;IAAEC,UAAU,MAAVA,kBAAU;IAC7OC,SAAS,MAATA,iBAAS;IAAEC,QAAQ,MAARA,gBAAQ;IAAEC,WAAW,MAAXA,mBAAW;IAChCC,KAAK,MAALA,aAAK;IAAEC,qBAAqB,MAArBA,6BAAqB;IAAEC,yBAAyB,MAAzBA,iCAAyB;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,cAAc,MAAdA,sBAAc;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,wBAAwB,MAAxBA,gCAAwB;IAAEC,IAAI,MAAJA,YAAI;IACrIC,2BAA2B,MAA3BA,mCAA2B;IAAEC,eAAe,MAAfA,uBAAe;IAAEC,eAAe,MAAfA,uBAAe;IAC7DC,YAAY,MAAZA,oBAAY;IAAEC,YAAY,MAAZA,oBAAY;IAAEC,oBAAoB,MAApBA,4BAAoB;;uBALkD;wBACmJ;wBAC7M;wBACqG;wBACxE;wBACb;CACjE,iCAAiC"}
1
+ {"version":3,"sources":["../lib/index.js"],"sourcesContent":["export { getSlots, getSlotsNext, resolveShorthand, isResolvedShorthand, SLOT_RENDER_FUNCTION_SYMBOL } from './compose/index';\nexport { IdPrefixProvider, resetIdsForTests, useControllableState, useEventCallback, useFirstMount, useForceUpdate, useId, useIsomorphicLayoutEffect, useMergedRefs, useOnClickOutside, useOnScrollOutside, usePrevious, useScrollbarWidth, useTimeout } from './hooks/index';\nexport { canUseDOM, useIsSSR, SSRProvider } from './ssr/index';\nexport { clamp, getNativeElementProps, getPartitionedNativeProps, getRTLSafeKey, mergeCallbacks, isHTMLElement, isInteractiveHTMLElement, omit, createPriorityQueue } from './utils/index';\nexport { applyTriggerPropsToChildren, getTriggerChild, isFluentTrigger } from './trigger/index';\nexport { isTouchEvent, isMouseEvent, getEventClientCoords } from './events/index';\n//# sourceMappingURL=index.js.map"],"names":["getSlots","getSlotsNext","resolveShorthand","isResolvedShorthand","SLOT_RENDER_FUNCTION_SYMBOL","IdPrefixProvider","resetIdsForTests","useControllableState","useEventCallback","useFirstMount","useForceUpdate","useId","useIsomorphicLayoutEffect","useMergedRefs","useOnClickOutside","useOnScrollOutside","usePrevious","useScrollbarWidth","useTimeout","canUseDOM","useIsSSR","SSRProvider","clamp","getNativeElementProps","getPartitionedNativeProps","getRTLSafeKey","mergeCallbacks","isHTMLElement","isInteractiveHTMLElement","omit","createPriorityQueue","applyTriggerPropsToChildren","getTriggerChild","isFluentTrigger","isTouchEvent","isMouseEvent","getEventClientCoords"],"mappings":";;;;;;;;;;;IAASA,QAAQ,MAARA,eAAQ;IAAEC,YAAY,MAAZA,mBAAY;IAAEC,gBAAgB,MAAhBA,uBAAgB;IAAEC,mBAAmB,MAAnBA,0BAAmB;IAAEC,2BAA2B,MAA3BA,kCAA2B;IAC1FC,gBAAgB,MAAhBA,wBAAgB;IAAEC,gBAAgB,MAAhBA,wBAAgB;IAAEC,oBAAoB,MAApBA,4BAAoB;IAAEC,gBAAgB,MAAhBA,wBAAgB;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,cAAc,MAAdA,sBAAc;IAAEC,KAAK,MAALA,aAAK;IAAEC,yBAAyB,MAAzBA,iCAAyB;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,iBAAiB,MAAjBA,yBAAiB;IAAEC,kBAAkB,MAAlBA,0BAAkB;IAAEC,WAAW,MAAXA,mBAAW;IAAEC,iBAAiB,MAAjBA,yBAAiB;IAAEC,UAAU,MAAVA,kBAAU;IAC7OC,SAAS,MAATA,iBAAS;IAAEC,QAAQ,MAARA,gBAAQ;IAAEC,WAAW,MAAXA,mBAAW;IAChCC,KAAK,MAALA,aAAK;IAAEC,qBAAqB,MAArBA,6BAAqB;IAAEC,yBAAyB,MAAzBA,iCAAyB;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,cAAc,MAAdA,sBAAc;IAAEC,aAAa,MAAbA,qBAAa;IAAEC,wBAAwB,MAAxBA,gCAAwB;IAAEC,IAAI,MAAJA,YAAI;IAAEC,mBAAmB,MAAnBA,2BAAmB;IAC1JC,2BAA2B,MAA3BA,mCAA2B;IAAEC,eAAe,MAAfA,uBAAe;IAAEC,eAAe,MAAfA,uBAAe;IAC7DC,YAAY,MAAZA,oBAAY;IAAEC,YAAY,MAAZA,oBAAY;IAAEC,oBAAoB,MAApBA,4BAAoB;;uBALkD;wBACmJ;wBAC7M;wBAC0H;wBAC7F;wBACb;CACjE,iCAAiC"}
@@ -11,6 +11,7 @@ _exportStar(require("./omit"), exports);
11
11
  _exportStar(require("./properties"), exports);
12
12
  _exportStar(require("./isHTMLElement"), exports);
13
13
  _exportStar(require("./isInteractiveHTMLElement"), exports);
14
+ _exportStar(require("./priorityQueue"), exports);
14
15
  //# sourceMappingURL=index.js.map
15
16
 
16
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../lib/utils/index.js"],"sourcesContent":["export * from './clamp';\nexport * from './getNativeElementProps';\nexport * from './getRTLSafeKey';\nexport * from './mergeCallbacks';\nexport * from './omit';\nexport * from './properties';\nexport * from './isHTMLElement';\nexport * from './isInteractiveHTMLElement';\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":";;;;;oBAAc;oBACA;oBACA;oBACA;oBACA;oBACA;oBACA;oBACA;CACd,iCAAiC"}
1
+ {"version":3,"sources":["../../lib/utils/index.js"],"sourcesContent":["export * from './clamp';\nexport * from './getNativeElementProps';\nexport * from './getRTLSafeKey';\nexport * from './mergeCallbacks';\nexport * from './omit';\nexport * from './properties';\nexport * from './isHTMLElement';\nexport * from './isInteractiveHTMLElement';\nexport * from './priorityQueue';\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":";;;;;oBAAc;oBACA;oBACA;oBACA;oBACA;oBACA;oBACA;oBACA;oBACA;CACd,iCAAiC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @internal
3
+ */ /**
4
+ * @internal
5
+ * @param compare - comparison function for items
6
+ * @returns Priority queue implemented with a min heap
7
+ */ "use strict";
8
+ Object.defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ Object.defineProperty(exports, "createPriorityQueue", {
12
+ enumerable: true,
13
+ get: ()=>createPriorityQueue
14
+ });
15
+ function createPriorityQueue(compare) {
16
+ const arr = [];
17
+ let size = 0;
18
+ const swap = (a, b)=>{
19
+ const tmp = arr[a];
20
+ arr[a] = arr[b];
21
+ arr[b] = tmp;
22
+ };
23
+ const heapify = (i)=>{
24
+ let smallest = i;
25
+ const l = left(i);
26
+ const r = right(i);
27
+ if (l < size && compare(arr[l], arr[smallest]) < 0) {
28
+ smallest = l;
29
+ }
30
+ if (r < size && compare(arr[r], arr[smallest]) < 0) {
31
+ smallest = r;
32
+ }
33
+ if (smallest !== i) {
34
+ swap(smallest, i);
35
+ heapify(smallest);
36
+ }
37
+ };
38
+ const dequeue = ()=>{
39
+ if (size === 0) {
40
+ throw new Error('Priority queue empty');
41
+ }
42
+ const res = arr[0];
43
+ arr[0] = arr[--size];
44
+ heapify(0);
45
+ return res;
46
+ };
47
+ const peek = ()=>{
48
+ if (size === 0) {
49
+ return null;
50
+ }
51
+ return arr[0];
52
+ };
53
+ const enqueue = (item)=>{
54
+ arr[size++] = item;
55
+ let i = size - 1;
56
+ let p = parent(i);
57
+ while(i > 0 && compare(arr[p], arr[i]) > 0){
58
+ swap(p, i);
59
+ i = p;
60
+ p = parent(i);
61
+ }
62
+ };
63
+ const contains = (item)=>{
64
+ const index = arr.indexOf(item);
65
+ return index >= 0 && index < size;
66
+ };
67
+ const remove = (item)=>{
68
+ const i = arr.indexOf(item);
69
+ if (i === -1 || i >= size) {
70
+ return;
71
+ }
72
+ arr[i] = arr[--size];
73
+ heapify(i);
74
+ };
75
+ const clear = ()=>{
76
+ size = 0;
77
+ };
78
+ const all = ()=>{
79
+ return arr.slice(0, size);
80
+ };
81
+ return {
82
+ all,
83
+ clear,
84
+ contains,
85
+ dequeue,
86
+ enqueue,
87
+ peek,
88
+ remove,
89
+ size: ()=>size
90
+ };
91
+ }
92
+ const left = (i)=>{
93
+ return 2 * i + 1;
94
+ };
95
+ const right = (i)=>{
96
+ return 2 * i + 2;
97
+ };
98
+ const parent = (i)=>{
99
+ return Math.floor((i - 1) / 2);
100
+ }; //# sourceMappingURL=priorityQueue.js.map
101
+
102
+ //# sourceMappingURL=priorityQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../lib/utils/priorityQueue.js"],"sourcesContent":["/**\n * @internal\n */ /**\n * @internal\n * @param compare - comparison function for items\n * @returns Priority queue implemented with a min heap\n */export function createPriorityQueue(compare) {\n const arr = [];\n let size = 0;\n const swap = (a, b) => {\n const tmp = arr[a];\n arr[a] = arr[b];\n arr[b] = tmp;\n };\n const heapify = i => {\n let smallest = i;\n const l = left(i);\n const r = right(i);\n if (l < size && compare(arr[l], arr[smallest]) < 0) {\n smallest = l;\n }\n if (r < size && compare(arr[r], arr[smallest]) < 0) {\n smallest = r;\n }\n if (smallest !== i) {\n swap(smallest, i);\n heapify(smallest);\n }\n };\n const dequeue = () => {\n if (size === 0) {\n throw new Error('Priority queue empty');\n }\n const res = arr[0];\n arr[0] = arr[--size];\n heapify(0);\n return res;\n };\n const peek = () => {\n if (size === 0) {\n return null;\n }\n return arr[0];\n };\n const enqueue = item => {\n arr[size++] = item;\n let i = size - 1;\n let p = parent(i);\n while (i > 0 && compare(arr[p], arr[i]) > 0) {\n swap(p, i);\n i = p;\n p = parent(i);\n }\n };\n const contains = item => {\n const index = arr.indexOf(item);\n return index >= 0 && index < size;\n };\n const remove = item => {\n const i = arr.indexOf(item);\n if (i === -1 || i >= size) {\n return;\n }\n arr[i] = arr[--size];\n heapify(i);\n };\n const clear = () => {\n size = 0;\n };\n const all = () => {\n return arr.slice(0, size);\n };\n return {\n all,\n clear,\n contains,\n dequeue,\n enqueue,\n peek,\n remove,\n size: () => size\n };\n}\nconst left = i => {\n return 2 * i + 1;\n};\nconst right = i => {\n return 2 * i + 2;\n};\nconst parent = i => {\n return Math.floor((i - 1) / 2);\n};\n//# sourceMappingURL=priorityQueue.js.map"],"names":["createPriorityQueue","compare","arr","size","swap","a","b","tmp","heapify","i","smallest","l","left","r","right","dequeue","Error","res","peek","enqueue","item","p","parent","contains","index","indexOf","remove","clear","all","slice","Math","floor"],"mappings":"AAAA;;CAEC,GAAG;;;;IAIA;;;;+BAAkBA;;aAAAA;;AAAT,SAASA,oBAAoBC,OAAO,EAAE;IACjD,MAAMC,MAAM,EAAE;IACd,IAAIC,OAAO;IACX,MAAMC,OAAO,CAACC,GAAGC,IAAM;QACrB,MAAMC,MAAML,GAAG,CAACG,EAAE;QAClBH,GAAG,CAACG,EAAE,GAAGH,GAAG,CAACI,EAAE;QACfJ,GAAG,CAACI,EAAE,GAAGC;IACX;IACA,MAAMC,UAAUC,CAAAA,IAAK;QACnB,IAAIC,WAAWD;QACf,MAAME,IAAIC,KAAKH;QACf,MAAMI,IAAIC,MAAML;QAChB,IAAIE,IAAIR,QAAQF,QAAQC,GAAG,CAACS,EAAE,EAAET,GAAG,CAACQ,SAAS,IAAI,GAAG;YAClDA,WAAWC;QACb,CAAC;QACD,IAAIE,IAAIV,QAAQF,QAAQC,GAAG,CAACW,EAAE,EAAEX,GAAG,CAACQ,SAAS,IAAI,GAAG;YAClDA,WAAWG;QACb,CAAC;QACD,IAAIH,aAAaD,GAAG;YAClBL,KAAKM,UAAUD;YACfD,QAAQE;QACV,CAAC;IACH;IACA,MAAMK,UAAU,IAAM;QACpB,IAAIZ,SAAS,GAAG;YACd,MAAM,IAAIa,MAAM,wBAAwB;QAC1C,CAAC;QACD,MAAMC,MAAMf,GAAG,CAAC,EAAE;QAClBA,GAAG,CAAC,EAAE,GAAGA,GAAG,CAAC,EAAEC,KAAK;QACpBK,QAAQ;QACR,OAAOS;IACT;IACA,MAAMC,OAAO,IAAM;QACjB,IAAIf,SAAS,GAAG;YACd,OAAO,IAAI;QACb,CAAC;QACD,OAAOD,GAAG,CAAC,EAAE;IACf;IACA,MAAMiB,UAAUC,CAAAA,OAAQ;QACtBlB,GAAG,CAACC,OAAO,GAAGiB;QACd,IAAIX,IAAIN,OAAO;QACf,IAAIkB,IAAIC,OAAOb;QACf,MAAOA,IAAI,KAAKR,QAAQC,GAAG,CAACmB,EAAE,EAAEnB,GAAG,CAACO,EAAE,IAAI,EAAG;YAC3CL,KAAKiB,GAAGZ;YACRA,IAAIY;YACJA,IAAIC,OAAOb;QACb;IACF;IACA,MAAMc,WAAWH,CAAAA,OAAQ;QACvB,MAAMI,QAAQtB,IAAIuB,OAAO,CAACL;QAC1B,OAAOI,SAAS,KAAKA,QAAQrB;IAC/B;IACA,MAAMuB,SAASN,CAAAA,OAAQ;QACrB,MAAMX,IAAIP,IAAIuB,OAAO,CAACL;QACtB,IAAIX,MAAM,CAAC,KAAKA,KAAKN,MAAM;YACzB;QACF,CAAC;QACDD,GAAG,CAACO,EAAE,GAAGP,GAAG,CAAC,EAAEC,KAAK;QACpBK,QAAQC;IACV;IACA,MAAMkB,QAAQ,IAAM;QAClBxB,OAAO;IACT;IACA,MAAMyB,MAAM,IAAM;QAChB,OAAO1B,IAAI2B,KAAK,CAAC,GAAG1B;IACtB;IACA,OAAO;QACLyB;QACAD;QACAJ;QACAR;QACAI;QACAD;QACAQ;QACAvB,MAAM,IAAMA;IACd;AACF;AACA,MAAMS,OAAOH,CAAAA,IAAK;IAChB,OAAO,IAAIA,IAAI;AACjB;AACA,MAAMK,QAAQL,CAAAA,IAAK;IACjB,OAAO,IAAIA,IAAI;AACjB;AACA,MAAMa,SAASb,CAAAA,IAAK;IAClB,OAAOqB,KAAKC,KAAK,CAAC,AAACtB,CAAAA,IAAI,CAAA,IAAK;AAC9B,GACA,yCAAyC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/react-utilities",
3
- "version": "9.8.1",
3
+ "version": "9.9.0",
4
4
  "description": "A set of general React-specific utilities.",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -20,7 +20,8 @@
20
20
  "lint": "just-scripts lint",
21
21
  "test": "jest --passWithNoTests",
22
22
  "type-check": "tsc -b tsconfig.json",
23
- "generate-api": "just-scripts generate-api"
23
+ "generate-api": "just-scripts generate-api",
24
+ "test-ssr": "test-ssr ./stories/**/*.stories.tsx"
24
25
  },
25
26
  "devDependencies": {
26
27
  "@fluentui/eslint-plugin": "*",