@wordpress/compose 5.0.3 → 5.0.7-next.33ec3857e2.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.
Files changed (102) hide show
  1. package/build/higher-order/with-global-events/index.js +3 -1
  2. package/build/higher-order/with-global-events/index.js.map +1 -1
  3. package/build/higher-order/with-state/index.js +3 -1
  4. package/build/higher-order/with-state/index.js.map +1 -1
  5. package/build/hooks/use-async-list/index.js +4 -3
  6. package/build/hooks/use-async-list/index.js.map +1 -1
  7. package/build/hooks/use-constrained-tabbing/index.js +47 -44
  8. package/build/hooks/use-constrained-tabbing/index.js.map +1 -1
  9. package/build/hooks/use-copy-on-click/index.js +9 -7
  10. package/build/hooks/use-copy-on-click/index.js.map +1 -1
  11. package/build/hooks/use-copy-to-clipboard/index.js +4 -3
  12. package/build/hooks/use-copy-to-clipboard/index.js.map +1 -1
  13. package/build/hooks/use-dialog/index.js +2 -2
  14. package/build/hooks/use-dialog/index.js.map +1 -1
  15. package/build/hooks/use-disabled/index.js +114 -0
  16. package/build/hooks/use-disabled/index.js.map +1 -0
  17. package/build/hooks/use-dragging/index.js +12 -11
  18. package/build/hooks/use-dragging/index.js.map +1 -1
  19. package/build/hooks/use-drop-zone/index.js +10 -9
  20. package/build/hooks/use-drop-zone/index.js.map +1 -1
  21. package/build/hooks/use-fixed-window-list/index.js +175 -0
  22. package/build/hooks/use-fixed-window-list/index.js.map +1 -0
  23. package/build/hooks/use-focus-on-mount/index.js +2 -1
  24. package/build/hooks/use-focus-on-mount/index.js.map +1 -1
  25. package/build/hooks/use-instance-id/index.js +2 -1
  26. package/build/hooks/use-instance-id/index.js.map +1 -1
  27. package/build/hooks/use-keyboard-shortcut/index.js +17 -15
  28. package/build/hooks/use-keyboard-shortcut/index.js.map +1 -1
  29. package/build/hooks/use-preferred-color-scheme/index.android.js +4 -3
  30. package/build/hooks/use-preferred-color-scheme/index.android.js.map +1 -1
  31. package/build/hooks/use-previous/index.js +3 -14
  32. package/build/hooks/use-previous/index.js.map +1 -1
  33. package/build/hooks/use-resize-observer/index.native.js +4 -3
  34. package/build/hooks/use-resize-observer/index.native.js.map +1 -1
  35. package/build/hooks/use-viewport-match/index.js +2 -1
  36. package/build/hooks/use-viewport-match/index.js.map +1 -1
  37. package/build/hooks/use-warn-on-change/index.js +5 -2
  38. package/build/hooks/use-warn-on-change/index.js.map +1 -1
  39. package/build/index.js +66 -50
  40. package/build/index.js.map +1 -1
  41. package/build/index.native.js +46 -46
  42. package/build-module/higher-order/with-global-events/index.js +3 -1
  43. package/build-module/higher-order/with-global-events/index.js.map +1 -1
  44. package/build-module/higher-order/with-state/index.js +3 -1
  45. package/build-module/higher-order/with-state/index.js.map +1 -1
  46. package/build-module/hooks/use-async-list/index.js +4 -3
  47. package/build-module/hooks/use-async-list/index.js.map +1 -1
  48. package/build-module/hooks/use-constrained-tabbing/index.js +42 -41
  49. package/build-module/hooks/use-constrained-tabbing/index.js.map +1 -1
  50. package/build-module/hooks/use-copy-on-click/index.js +9 -7
  51. package/build-module/hooks/use-copy-on-click/index.js.map +1 -1
  52. package/build-module/hooks/use-copy-to-clipboard/index.js +4 -3
  53. package/build-module/hooks/use-copy-to-clipboard/index.js.map +1 -1
  54. package/build-module/hooks/use-dialog/index.js +2 -2
  55. package/build-module/hooks/use-dialog/index.js.map +1 -1
  56. package/build-module/hooks/use-disabled/index.js +104 -0
  57. package/build-module/hooks/use-disabled/index.js.map +1 -0
  58. package/build-module/hooks/use-dragging/index.js +12 -11
  59. package/build-module/hooks/use-dragging/index.js.map +1 -1
  60. package/build-module/hooks/use-drop-zone/index.js +10 -9
  61. package/build-module/hooks/use-drop-zone/index.js.map +1 -1
  62. package/build-module/hooks/use-fixed-window-list/index.js +164 -0
  63. package/build-module/hooks/use-fixed-window-list/index.js.map +1 -0
  64. package/build-module/hooks/use-focus-on-mount/index.js +2 -1
  65. package/build-module/hooks/use-focus-on-mount/index.js.map +1 -1
  66. package/build-module/hooks/use-instance-id/index.js +2 -1
  67. package/build-module/hooks/use-instance-id/index.js.map +1 -1
  68. package/build-module/hooks/use-keyboard-shortcut/index.js +17 -15
  69. package/build-module/hooks/use-keyboard-shortcut/index.js.map +1 -1
  70. package/build-module/hooks/use-preferred-color-scheme/index.android.js +4 -3
  71. package/build-module/hooks/use-preferred-color-scheme/index.android.js.map +1 -1
  72. package/build-module/hooks/use-previous/index.js +3 -14
  73. package/build-module/hooks/use-previous/index.js.map +1 -1
  74. package/build-module/hooks/use-resize-observer/index.native.js +4 -3
  75. package/build-module/hooks/use-resize-observer/index.native.js.map +1 -1
  76. package/build-module/hooks/use-viewport-match/index.js +2 -1
  77. package/build-module/hooks/use-viewport-match/index.js.map +1 -1
  78. package/build-module/hooks/use-warn-on-change/index.js +5 -2
  79. package/build-module/hooks/use-warn-on-change/index.js.map +1 -1
  80. package/build-module/index.js +2 -0
  81. package/build-module/index.js.map +1 -1
  82. package/build-types/higher-order/with-state/index.d.ts.map +1 -1
  83. package/build-types/hooks/use-constrained-tabbing/index.d.ts.map +1 -1
  84. package/build-types/hooks/use-copy-on-click/index.d.ts.map +1 -1
  85. package/build-types/hooks/use-disabled/index.d.ts +23 -0
  86. package/build-types/hooks/use-disabled/index.d.ts.map +1 -0
  87. package/build-types/hooks/use-fixed-window-list/index.d.ts +57 -0
  88. package/build-types/hooks/use-fixed-window-list/index.d.ts.map +1 -0
  89. package/build-types/hooks/use-previous/index.d.ts +2 -4
  90. package/build-types/hooks/use-previous/index.d.ts.map +1 -1
  91. package/build-types/index.d.ts +2 -0
  92. package/package.json +9 -9
  93. package/src/higher-order/with-state/index.js +1 -0
  94. package/src/hooks/use-constrained-tabbing/index.js +39 -33
  95. package/src/hooks/use-copy-on-click/index.js +1 -2
  96. package/src/hooks/use-disabled/index.js +113 -0
  97. package/src/hooks/use-disabled/test/index.js +90 -0
  98. package/src/hooks/use-fixed-window-list/index.js +174 -0
  99. package/src/hooks/use-previous/index.ts +24 -0
  100. package/src/index.js +2 -0
  101. package/tsconfig.tsbuildinfo +1 -1
  102. package/src/hooks/use-previous/index.js +0 -31
@@ -60,15 +60,16 @@ function useFreshRef(value) {
60
60
  */
61
61
 
62
62
 
63
- function useDropZone({
64
- isDisabled,
65
- onDrop: _onDrop,
66
- onDragStart: _onDragStart,
67
- onDragEnter: _onDragEnter,
68
- onDragLeave: _onDragLeave,
69
- onDragEnd: _onDragEnd,
70
- onDragOver: _onDragOver
71
- }) {
63
+ function useDropZone(_ref) {
64
+ let {
65
+ isDisabled,
66
+ onDrop: _onDrop,
67
+ onDragStart: _onDragStart,
68
+ onDragEnter: _onDragEnter,
69
+ onDragLeave: _onDragLeave,
70
+ onDragEnd: _onDragEnd,
71
+ onDragOver: _onDragOver
72
+ } = _ref;
72
73
  const onDropRef = useFreshRef(_onDrop);
73
74
  const onDragStartRef = useFreshRef(_onDragStart);
74
75
  const onDragEnterRef = useFreshRef(_onDragEnter);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-drop-zone/index.js"],"names":["useFreshRef","value","ref","current","useDropZone","isDisabled","onDrop","_onDrop","onDragStart","_onDragStart","onDragEnter","_onDragEnter","onDragLeave","_onDragLeave","onDragEnd","_onDragEnd","onDragOver","_onDragOver","onDropRef","onDragStartRef","onDragEnterRef","onDragLeaveRef","onDragEndRef","onDragOverRef","element","isDragging","ownerDocument","isElementInZone","targetToCheck","defaultView","HTMLElement","contains","elementToCheck","dataset","isDropZone","parentElement","maybeDragStart","event","removeEventListener","addEventListener","maybeDragEnd","preventDefault","relatedTarget","defaultPrevented","dataTransfer","files","length"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useRefEffect from '../use-ref-effect';\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * @template T\n * @param {T} value\n * @return {import('react').MutableRefObject<T>} A ref with the value.\n */\nfunction useFreshRef( value ) {\n\t/* eslint-enable jsdoc/valid-types */\n\t/* eslint-disable jsdoc/no-undefined-types */\n\t/** @type {import('react').MutableRefObject<T>} */\n\t/* eslint-enable jsdoc/no-undefined-types */\n\t// Disable reason: We're doing something pretty JavaScript-y here where the\n\t// ref will always have a current value that is not null or undefined but it\n\t// needs to start as undefined. We don't want to change the return type so\n\t// it's easier to just ts-ignore this specific line that's complaining about\n\t// undefined not being part of T.\n\t// @ts-ignore\n\tconst ref = useRef();\n\tref.current = value;\n\treturn ref;\n}\n\n/**\n * A hook to facilitate drag and drop handling.\n *\n * @param {Object} props Named parameters.\n * @param {boolean} props.isDisabled Whether or not to disable the drop zone.\n * @param {(e: DragEvent) => void} props.onDragStart Called when dragging has started.\n * @param {(e: DragEvent) => void} props.onDragEnter Called when the zone is entered.\n * @param {(e: DragEvent) => void} props.onDragOver Called when the zone is moved within.\n * @param {(e: DragEvent) => void} props.onDragLeave Called when the zone is left.\n * @param {(e: MouseEvent) => void} props.onDragEnd Called when dragging has ended.\n * @param {(e: DragEvent) => void} props.onDrop Called when dropping in the zone.\n *\n * @return {import('react').RefCallback<HTMLElement>} Ref callback to be passed to the drop zone element.\n */\nexport default function useDropZone( {\n\tisDisabled,\n\tonDrop: _onDrop,\n\tonDragStart: _onDragStart,\n\tonDragEnter: _onDragEnter,\n\tonDragLeave: _onDragLeave,\n\tonDragEnd: _onDragEnd,\n\tonDragOver: _onDragOver,\n} ) {\n\tconst onDropRef = useFreshRef( _onDrop );\n\tconst onDragStartRef = useFreshRef( _onDragStart );\n\tconst onDragEnterRef = useFreshRef( _onDragEnter );\n\tconst onDragLeaveRef = useFreshRef( _onDragLeave );\n\tconst onDragEndRef = useFreshRef( _onDragEnd );\n\tconst onDragOverRef = useFreshRef( _onDragOver );\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( isDisabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet isDragging = false;\n\n\t\t\tconst { ownerDocument } = element;\n\n\t\t\t/**\n\t\t\t * Checks if an element is in the drop zone.\n\t\t\t *\n\t\t\t * @param {EventTarget|null} targetToCheck\n\t\t\t *\n\t\t\t * @return {boolean} True if in drop zone, false if not.\n\t\t\t */\n\t\t\tfunction isElementInZone( targetToCheck ) {\n\t\t\t\tconst { defaultView } = ownerDocument;\n\t\t\t\tif (\n\t\t\t\t\t! targetToCheck ||\n\t\t\t\t\t! defaultView ||\n\t\t\t\t\t! ( targetToCheck instanceof defaultView.HTMLElement ) ||\n\t\t\t\t\t! element.contains( targetToCheck )\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/** @type {HTMLElement|null} */\n\t\t\t\tlet elementToCheck = targetToCheck;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ( elementToCheck.dataset.isDropZone ) {\n\t\t\t\t\t\treturn elementToCheck === element;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elementToCheck = elementToCheck.parentElement ) );\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction maybeDragStart( /** @type {DragEvent} */ event ) {\n\t\t\t\tif ( isDragging ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tisDragging = true;\n\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'dragenter',\n\t\t\t\t\tmaybeDragStart\n\t\t\t\t);\n\n\t\t\t\t// Note that `dragend` doesn't fire consistently for file and\n\t\t\t\t// HTML drag events where the drag origin is outside the browser\n\t\t\t\t// window. In Firefox it may also not fire if the originating\n\t\t\t\t// node is removed.\n\t\t\t\townerDocument.addEventListener( 'dragend', maybeDragEnd );\n\t\t\t\townerDocument.addEventListener( 'mousemove', maybeDragEnd );\n\n\t\t\t\tif ( onDragStartRef.current ) {\n\t\t\t\t\tonDragStartRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDragEnter( /** @type {DragEvent} */ event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// The `dragenter` event will also fire when entering child\n\t\t\t\t// elements, but we only want to call `onDragEnter` when\n\t\t\t\t// entering the drop zone, which means the `relatedTarget`\n\t\t\t\t// (element that has been left) should be outside the drop zone.\n\t\t\t\tif (\n\t\t\t\t\telement.contains(\n\t\t\t\t\t\t/** @type {Node} */ ( event.relatedTarget )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( onDragEnterRef.current ) {\n\t\t\t\t\tonDragEnterRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDragOver( /** @type {DragEvent} */ event ) {\n\t\t\t\t// Only call onDragOver for the innermost hovered drop zones.\n\t\t\t\tif ( ! event.defaultPrevented && onDragOverRef.current ) {\n\t\t\t\t\tonDragOverRef.current( event );\n\t\t\t\t}\n\n\t\t\t\t// Prevent the browser default while also signalling to parent\n\t\t\t\t// drop zones that `onDragOver` is already handled.\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tfunction onDragLeave( /** @type {DragEvent} */ event ) {\n\t\t\t\t// The `dragleave` event will also fire when leaving child\n\t\t\t\t// elements, but we only want to call `onDragLeave` when\n\t\t\t\t// leaving the drop zone, which means the `relatedTarget`\n\t\t\t\t// (element that has been entered) should be outside the drop\n\t\t\t\t// zone.\n\t\t\t\tif ( isElementInZone( event.relatedTarget ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( onDragLeaveRef.current ) {\n\t\t\t\t\tonDragLeaveRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDrop( /** @type {DragEvent} */ event ) {\n\t\t\t\t// Don't handle drop if an inner drop zone already handled it.\n\t\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent the browser default while also signalling to parent\n\t\t\t\t// drop zones that `onDrop` is already handled.\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// This seemingly useless line has been shown to resolve a\n\t\t\t\t// Safari issue where files dragged directly from the dock are\n\t\t\t\t// not recognized.\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tevent.dataTransfer && event.dataTransfer.files.length;\n\n\t\t\t\tif ( onDropRef.current ) {\n\t\t\t\t\tonDropRef.current( event );\n\t\t\t\t}\n\n\t\t\t\tmaybeDragEnd( event );\n\t\t\t}\n\n\t\t\tfunction maybeDragEnd( /** @type {MouseEvent} */ event ) {\n\t\t\t\tif ( ! isDragging ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tisDragging = false;\n\n\t\t\t\townerDocument.addEventListener( 'dragenter', maybeDragStart );\n\t\t\t\townerDocument.removeEventListener( 'dragend', maybeDragEnd );\n\t\t\t\townerDocument.removeEventListener( 'mousemove', maybeDragEnd );\n\n\t\t\t\tif ( onDragEndRef.current ) {\n\t\t\t\t\tonDragEndRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telement.dataset.isDropZone = 'true';\n\t\t\telement.addEventListener( 'drop', onDrop );\n\t\t\telement.addEventListener( 'dragenter', onDragEnter );\n\t\t\telement.addEventListener( 'dragover', onDragOver );\n\t\t\telement.addEventListener( 'dragleave', onDragLeave );\n\t\t\t// The `dragstart` event doesn't fire if the drag started outside\n\t\t\t// the document.\n\t\t\townerDocument.addEventListener( 'dragenter', maybeDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tdelete element.dataset.isDropZone;\n\t\t\t\telement.removeEventListener( 'drop', onDrop );\n\t\t\t\telement.removeEventListener( 'dragenter', onDragEnter );\n\t\t\t\telement.removeEventListener( 'dragover', onDragOver );\n\t\t\t\telement.removeEventListener( 'dragleave', onDragLeave );\n\t\t\t\townerDocument.removeEventListener( 'dragend', maybeDragEnd );\n\t\t\t\townerDocument.removeEventListener( 'mousemove', maybeDragEnd );\n\t\t\t\townerDocument.addEventListener( 'dragenter', maybeDragStart );\n\t\t\t};\n\t\t},\n\t\t[ isDisabled ]\n\t);\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-drop-zone/index.js"],"names":["useFreshRef","value","ref","current","useDropZone","isDisabled","onDrop","_onDrop","onDragStart","_onDragStart","onDragEnter","_onDragEnter","onDragLeave","_onDragLeave","onDragEnd","_onDragEnd","onDragOver","_onDragOver","onDropRef","onDragStartRef","onDragEnterRef","onDragLeaveRef","onDragEndRef","onDragOverRef","element","isDragging","ownerDocument","isElementInZone","targetToCheck","defaultView","HTMLElement","contains","elementToCheck","dataset","isDropZone","parentElement","maybeDragStart","event","removeEventListener","addEventListener","maybeDragEnd","preventDefault","relatedTarget","defaultPrevented","dataTransfer","files","length"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRef } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useRefEffect from '../use-ref-effect';\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * @template T\n * @param {T} value\n * @return {import('react').MutableRefObject<T>} A ref with the value.\n */\nfunction useFreshRef( value ) {\n\t/* eslint-enable jsdoc/valid-types */\n\t/* eslint-disable jsdoc/no-undefined-types */\n\t/** @type {import('react').MutableRefObject<T>} */\n\t/* eslint-enable jsdoc/no-undefined-types */\n\t// Disable reason: We're doing something pretty JavaScript-y here where the\n\t// ref will always have a current value that is not null or undefined but it\n\t// needs to start as undefined. We don't want to change the return type so\n\t// it's easier to just ts-ignore this specific line that's complaining about\n\t// undefined not being part of T.\n\t// @ts-ignore\n\tconst ref = useRef();\n\tref.current = value;\n\treturn ref;\n}\n\n/**\n * A hook to facilitate drag and drop handling.\n *\n * @param {Object} props Named parameters.\n * @param {boolean} props.isDisabled Whether or not to disable the drop zone.\n * @param {(e: DragEvent) => void} props.onDragStart Called when dragging has started.\n * @param {(e: DragEvent) => void} props.onDragEnter Called when the zone is entered.\n * @param {(e: DragEvent) => void} props.onDragOver Called when the zone is moved within.\n * @param {(e: DragEvent) => void} props.onDragLeave Called when the zone is left.\n * @param {(e: MouseEvent) => void} props.onDragEnd Called when dragging has ended.\n * @param {(e: DragEvent) => void} props.onDrop Called when dropping in the zone.\n *\n * @return {import('react').RefCallback<HTMLElement>} Ref callback to be passed to the drop zone element.\n */\nexport default function useDropZone( {\n\tisDisabled,\n\tonDrop: _onDrop,\n\tonDragStart: _onDragStart,\n\tonDragEnter: _onDragEnter,\n\tonDragLeave: _onDragLeave,\n\tonDragEnd: _onDragEnd,\n\tonDragOver: _onDragOver,\n} ) {\n\tconst onDropRef = useFreshRef( _onDrop );\n\tconst onDragStartRef = useFreshRef( _onDragStart );\n\tconst onDragEnterRef = useFreshRef( _onDragEnter );\n\tconst onDragLeaveRef = useFreshRef( _onDragLeave );\n\tconst onDragEndRef = useFreshRef( _onDragEnd );\n\tconst onDragOverRef = useFreshRef( _onDragOver );\n\n\treturn useRefEffect(\n\t\t( element ) => {\n\t\t\tif ( isDisabled ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet isDragging = false;\n\n\t\t\tconst { ownerDocument } = element;\n\n\t\t\t/**\n\t\t\t * Checks if an element is in the drop zone.\n\t\t\t *\n\t\t\t * @param {EventTarget|null} targetToCheck\n\t\t\t *\n\t\t\t * @return {boolean} True if in drop zone, false if not.\n\t\t\t */\n\t\t\tfunction isElementInZone( targetToCheck ) {\n\t\t\t\tconst { defaultView } = ownerDocument;\n\t\t\t\tif (\n\t\t\t\t\t! targetToCheck ||\n\t\t\t\t\t! defaultView ||\n\t\t\t\t\t! ( targetToCheck instanceof defaultView.HTMLElement ) ||\n\t\t\t\t\t! element.contains( targetToCheck )\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\t/** @type {HTMLElement|null} */\n\t\t\t\tlet elementToCheck = targetToCheck;\n\n\t\t\t\tdo {\n\t\t\t\t\tif ( elementToCheck.dataset.isDropZone ) {\n\t\t\t\t\t\treturn elementToCheck === element;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elementToCheck = elementToCheck.parentElement ) );\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction maybeDragStart( /** @type {DragEvent} */ event ) {\n\t\t\t\tif ( isDragging ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tisDragging = true;\n\n\t\t\t\townerDocument.removeEventListener(\n\t\t\t\t\t'dragenter',\n\t\t\t\t\tmaybeDragStart\n\t\t\t\t);\n\n\t\t\t\t// Note that `dragend` doesn't fire consistently for file and\n\t\t\t\t// HTML drag events where the drag origin is outside the browser\n\t\t\t\t// window. In Firefox it may also not fire if the originating\n\t\t\t\t// node is removed.\n\t\t\t\townerDocument.addEventListener( 'dragend', maybeDragEnd );\n\t\t\t\townerDocument.addEventListener( 'mousemove', maybeDragEnd );\n\n\t\t\t\tif ( onDragStartRef.current ) {\n\t\t\t\t\tonDragStartRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDragEnter( /** @type {DragEvent} */ event ) {\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// The `dragenter` event will also fire when entering child\n\t\t\t\t// elements, but we only want to call `onDragEnter` when\n\t\t\t\t// entering the drop zone, which means the `relatedTarget`\n\t\t\t\t// (element that has been left) should be outside the drop zone.\n\t\t\t\tif (\n\t\t\t\t\telement.contains(\n\t\t\t\t\t\t/** @type {Node} */ ( event.relatedTarget )\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( onDragEnterRef.current ) {\n\t\t\t\t\tonDragEnterRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDragOver( /** @type {DragEvent} */ event ) {\n\t\t\t\t// Only call onDragOver for the innermost hovered drop zones.\n\t\t\t\tif ( ! event.defaultPrevented && onDragOverRef.current ) {\n\t\t\t\t\tonDragOverRef.current( event );\n\t\t\t\t}\n\n\t\t\t\t// Prevent the browser default while also signalling to parent\n\t\t\t\t// drop zones that `onDragOver` is already handled.\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tfunction onDragLeave( /** @type {DragEvent} */ event ) {\n\t\t\t\t// The `dragleave` event will also fire when leaving child\n\t\t\t\t// elements, but we only want to call `onDragLeave` when\n\t\t\t\t// leaving the drop zone, which means the `relatedTarget`\n\t\t\t\t// (element that has been entered) should be outside the drop\n\t\t\t\t// zone.\n\t\t\t\tif ( isElementInZone( event.relatedTarget ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( onDragLeaveRef.current ) {\n\t\t\t\t\tonDragLeaveRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction onDrop( /** @type {DragEvent} */ event ) {\n\t\t\t\t// Don't handle drop if an inner drop zone already handled it.\n\t\t\t\tif ( event.defaultPrevented ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent the browser default while also signalling to parent\n\t\t\t\t// drop zones that `onDrop` is already handled.\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// This seemingly useless line has been shown to resolve a\n\t\t\t\t// Safari issue where files dragged directly from the dock are\n\t\t\t\t// not recognized.\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\tevent.dataTransfer && event.dataTransfer.files.length;\n\n\t\t\t\tif ( onDropRef.current ) {\n\t\t\t\t\tonDropRef.current( event );\n\t\t\t\t}\n\n\t\t\t\tmaybeDragEnd( event );\n\t\t\t}\n\n\t\t\tfunction maybeDragEnd( /** @type {MouseEvent} */ event ) {\n\t\t\t\tif ( ! isDragging ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tisDragging = false;\n\n\t\t\t\townerDocument.addEventListener( 'dragenter', maybeDragStart );\n\t\t\t\townerDocument.removeEventListener( 'dragend', maybeDragEnd );\n\t\t\t\townerDocument.removeEventListener( 'mousemove', maybeDragEnd );\n\n\t\t\t\tif ( onDragEndRef.current ) {\n\t\t\t\t\tonDragEndRef.current( event );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telement.dataset.isDropZone = 'true';\n\t\t\telement.addEventListener( 'drop', onDrop );\n\t\t\telement.addEventListener( 'dragenter', onDragEnter );\n\t\t\telement.addEventListener( 'dragover', onDragOver );\n\t\t\telement.addEventListener( 'dragleave', onDragLeave );\n\t\t\t// The `dragstart` event doesn't fire if the drag started outside\n\t\t\t// the document.\n\t\t\townerDocument.addEventListener( 'dragenter', maybeDragStart );\n\n\t\t\treturn () => {\n\t\t\t\tdelete element.dataset.isDropZone;\n\t\t\t\telement.removeEventListener( 'drop', onDrop );\n\t\t\t\telement.removeEventListener( 'dragenter', onDragEnter );\n\t\t\t\telement.removeEventListener( 'dragover', onDragOver );\n\t\t\t\telement.removeEventListener( 'dragleave', onDragLeave );\n\t\t\t\townerDocument.removeEventListener( 'dragend', maybeDragEnd );\n\t\t\t\townerDocument.removeEventListener( 'mousemove', maybeDragEnd );\n\t\t\t\townerDocument.addEventListener( 'dragenter', maybeDragStart );\n\t\t\t};\n\t\t},\n\t\t[ isDisabled ]\n\t);\n}\n"]}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useFixedWindowList;
7
+
8
+ var _lodash = require("lodash");
9
+
10
+ var _element = require("@wordpress/element");
11
+
12
+ var _dom = require("@wordpress/dom");
13
+
14
+ var _keycodes = require("@wordpress/keycodes");
15
+
16
+ /**
17
+ * External dependencies
18
+ */
19
+
20
+ /**
21
+ * WordPress dependencies
22
+ */
23
+ const DEFAULT_INIT_WINDOW_SIZE = 30;
24
+ /**
25
+ * @typedef {Object} WPFixedWindowList
26
+ *
27
+ * @property {number} visibleItems Items visible in the current viewport
28
+ * @property {number} start Start index of the window
29
+ * @property {number} end End index of the window
30
+ * @property {(index:number)=>boolean} itemInView Returns true if item is in the window
31
+ */
32
+
33
+ /**
34
+ * @typedef {Object} WPFixedWindowListOptions
35
+ *
36
+ * @property {number} [windowOverscan] Renders windowOverscan number of items before and after the calculated visible window.
37
+ * @property {boolean} [useWindowing] When false avoids calculating the window size
38
+ * @property {number} [initWindowSize] Initial window size to use on first render before we can calculate the window size.
39
+ */
40
+
41
+ /**
42
+ *
43
+ * @param {import('react').RefObject<HTMLElement>} elementRef Used to find the closest scroll container that contains element.
44
+ * @param { number } itemHeight Fixed item height in pixels
45
+ * @param { number } totalItems Total items in list
46
+ * @param { WPFixedWindowListOptions } [options] Options object
47
+ * @return {[ WPFixedWindowList, setFixedListWindow:(nextWindow:WPFixedWindowList)=>void]} Array with the fixed window list and setter
48
+ */
49
+
50
+ function useFixedWindowList(elementRef, itemHeight, totalItems, options) {
51
+ var _options$initWindowSi, _options$useWindowing;
52
+
53
+ const initWindowSize = (_options$initWindowSi = options === null || options === void 0 ? void 0 : options.initWindowSize) !== null && _options$initWindowSi !== void 0 ? _options$initWindowSi : DEFAULT_INIT_WINDOW_SIZE;
54
+ const useWindowing = (_options$useWindowing = options === null || options === void 0 ? void 0 : options.useWindowing) !== null && _options$useWindowing !== void 0 ? _options$useWindowing : true;
55
+ const [fixedListWindow, setFixedListWindow] = (0, _element.useState)({
56
+ visibleItems: initWindowSize,
57
+ start: 0,
58
+ end: initWindowSize,
59
+ itemInView: (
60
+ /** @type {number} */
61
+ index) => {
62
+ return index >= 0 && index <= initWindowSize;
63
+ }
64
+ });
65
+ (0, _element.useLayoutEffect)(() => {
66
+ var _scrollContainer$owne, _scrollContainer$owne2, _scrollContainer$owne3, _scrollContainer$owne4;
67
+
68
+ if (!useWindowing) {
69
+ return;
70
+ }
71
+
72
+ const scrollContainer = (0, _dom.getScrollContainer)(elementRef.current);
73
+
74
+ const measureWindow = (
75
+ /** @type {boolean | undefined} */
76
+ initRender) => {
77
+ var _options$windowOversc;
78
+
79
+ if (!scrollContainer) {
80
+ return;
81
+ }
82
+
83
+ const visibleItems = Math.ceil(scrollContainer.clientHeight / itemHeight); // Aim to keep opening list view fast, afterward we can optimize for scrolling
84
+
85
+ const windowOverscan = initRender ? visibleItems : (_options$windowOversc = options === null || options === void 0 ? void 0 : options.windowOverscan) !== null && _options$windowOversc !== void 0 ? _options$windowOversc : visibleItems;
86
+ const firstViewableIndex = Math.floor(scrollContainer.scrollTop / itemHeight);
87
+ const start = Math.max(0, firstViewableIndex - windowOverscan);
88
+ const end = Math.min(totalItems - 1, firstViewableIndex + visibleItems + windowOverscan);
89
+ setFixedListWindow(lastWindow => {
90
+ const nextWindow = {
91
+ visibleItems,
92
+ start,
93
+ end,
94
+ itemInView: (
95
+ /** @type {number} */
96
+ index) => {
97
+ return start <= index && index <= end;
98
+ }
99
+ };
100
+
101
+ if (lastWindow.start !== nextWindow.start || lastWindow.end !== nextWindow.end || lastWindow.visibleItems !== nextWindow.visibleItems) {
102
+ return nextWindow;
103
+ }
104
+
105
+ return lastWindow;
106
+ });
107
+ };
108
+
109
+ measureWindow(true);
110
+ const debounceMeasureList = (0, _lodash.debounce)(() => {
111
+ measureWindow();
112
+ }, 16);
113
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.addEventListener('scroll', debounceMeasureList);
114
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : (_scrollContainer$owne = scrollContainer.ownerDocument) === null || _scrollContainer$owne === void 0 ? void 0 : (_scrollContainer$owne2 = _scrollContainer$owne.defaultView) === null || _scrollContainer$owne2 === void 0 ? void 0 : _scrollContainer$owne2.addEventListener('resize', debounceMeasureList);
115
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : (_scrollContainer$owne3 = scrollContainer.ownerDocument) === null || _scrollContainer$owne3 === void 0 ? void 0 : (_scrollContainer$owne4 = _scrollContainer$owne3.defaultView) === null || _scrollContainer$owne4 === void 0 ? void 0 : _scrollContainer$owne4.addEventListener('resize', debounceMeasureList);
116
+ return () => {
117
+ var _scrollContainer$owne5, _scrollContainer$owne6;
118
+
119
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.removeEventListener('scroll', debounceMeasureList);
120
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : (_scrollContainer$owne5 = scrollContainer.ownerDocument) === null || _scrollContainer$owne5 === void 0 ? void 0 : (_scrollContainer$owne6 = _scrollContainer$owne5.defaultView) === null || _scrollContainer$owne6 === void 0 ? void 0 : _scrollContainer$owne6.removeEventListener('resize', debounceMeasureList);
121
+ };
122
+ }, [itemHeight, elementRef, totalItems]);
123
+ (0, _element.useLayoutEffect)(() => {
124
+ var _scrollContainer$owne7, _scrollContainer$owne8;
125
+
126
+ if (!useWindowing) {
127
+ return;
128
+ }
129
+
130
+ const scrollContainer = (0, _dom.getScrollContainer)(elementRef.current);
131
+
132
+ const handleKeyDown = (
133
+ /** @type {KeyboardEvent} */
134
+ event) => {
135
+ switch (event.keyCode) {
136
+ case _keycodes.HOME:
137
+ {
138
+ return scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.scrollTo({
139
+ top: 0
140
+ });
141
+ }
142
+
143
+ case _keycodes.END:
144
+ {
145
+ return scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.scrollTo({
146
+ top: totalItems * itemHeight
147
+ });
148
+ }
149
+
150
+ case _keycodes.PAGEUP:
151
+ {
152
+ return scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.scrollTo({
153
+ top: scrollContainer.scrollTop - fixedListWindow.visibleItems * itemHeight
154
+ });
155
+ }
156
+
157
+ case _keycodes.PAGEDOWN:
158
+ {
159
+ return scrollContainer === null || scrollContainer === void 0 ? void 0 : scrollContainer.scrollTo({
160
+ top: scrollContainer.scrollTop + fixedListWindow.visibleItems * itemHeight
161
+ });
162
+ }
163
+ }
164
+ };
165
+
166
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : (_scrollContainer$owne7 = scrollContainer.ownerDocument) === null || _scrollContainer$owne7 === void 0 ? void 0 : (_scrollContainer$owne8 = _scrollContainer$owne7.defaultView) === null || _scrollContainer$owne8 === void 0 ? void 0 : _scrollContainer$owne8.addEventListener('keydown', handleKeyDown);
167
+ return () => {
168
+ var _scrollContainer$owne9, _scrollContainer$owne10;
169
+
170
+ scrollContainer === null || scrollContainer === void 0 ? void 0 : (_scrollContainer$owne9 = scrollContainer.ownerDocument) === null || _scrollContainer$owne9 === void 0 ? void 0 : (_scrollContainer$owne10 = _scrollContainer$owne9.defaultView) === null || _scrollContainer$owne10 === void 0 ? void 0 : _scrollContainer$owne10.removeEventListener('keydown', handleKeyDown);
171
+ };
172
+ }, [totalItems, itemHeight, elementRef, fixedListWindow.visibleItems]);
173
+ return [fixedListWindow, setFixedListWindow];
174
+ }
175
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-fixed-window-list/index.js"],"names":["DEFAULT_INIT_WINDOW_SIZE","useFixedWindowList","elementRef","itemHeight","totalItems","options","initWindowSize","useWindowing","fixedListWindow","setFixedListWindow","visibleItems","start","end","itemInView","index","scrollContainer","current","measureWindow","initRender","Math","ceil","clientHeight","windowOverscan","firstViewableIndex","floor","scrollTop","max","min","lastWindow","nextWindow","debounceMeasureList","addEventListener","ownerDocument","defaultView","removeEventListener","handleKeyDown","event","keyCode","HOME","scrollTo","top","END","PAGEUP","PAGEDOWN"],"mappings":"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","sourcesContent":["/**\n * External dependencies\n */\nimport { debounce } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useState, useLayoutEffect } from '@wordpress/element';\nimport { getScrollContainer } from '@wordpress/dom';\nimport { PAGEUP, PAGEDOWN, HOME, END } from '@wordpress/keycodes';\n\nconst DEFAULT_INIT_WINDOW_SIZE = 30;\n\n/**\n * @typedef {Object} WPFixedWindowList\n *\n * @property {number} visibleItems Items visible in the current viewport\n * @property {number} start Start index of the window\n * @property {number} end End index of the window\n * @property {(index:number)=>boolean} itemInView Returns true if item is in the window\n */\n\n/**\n * @typedef {Object} WPFixedWindowListOptions\n *\n * @property {number} [windowOverscan] Renders windowOverscan number of items before and after the calculated visible window.\n * @property {boolean} [useWindowing] When false avoids calculating the window size\n * @property {number} [initWindowSize] Initial window size to use on first render before we can calculate the window size.\n */\n\n/**\n *\n * @param {import('react').RefObject<HTMLElement>} elementRef Used to find the closest scroll container that contains element.\n * @param { number } itemHeight Fixed item height in pixels\n * @param { number } totalItems Total items in list\n * @param { WPFixedWindowListOptions } [options] Options object\n * @return {[ WPFixedWindowList, setFixedListWindow:(nextWindow:WPFixedWindowList)=>void]} Array with the fixed window list and setter\n */\nexport default function useFixedWindowList(\n\telementRef,\n\titemHeight,\n\ttotalItems,\n\toptions\n) {\n\tconst initWindowSize = options?.initWindowSize ?? DEFAULT_INIT_WINDOW_SIZE;\n\tconst useWindowing = options?.useWindowing ?? true;\n\n\tconst [ fixedListWindow, setFixedListWindow ] = useState( {\n\t\tvisibleItems: initWindowSize,\n\t\tstart: 0,\n\t\tend: initWindowSize,\n\t\titemInView: ( /** @type {number} */ index ) => {\n\t\t\treturn index >= 0 && index <= initWindowSize;\n\t\t},\n\t} );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! useWindowing ) {\n\t\t\treturn;\n\t\t}\n\t\tconst scrollContainer = getScrollContainer( elementRef.current );\n\t\tconst measureWindow = (\n\t\t\t/** @type {boolean | undefined} */ initRender\n\t\t) => {\n\t\t\tif ( ! scrollContainer ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst visibleItems = Math.ceil(\n\t\t\t\tscrollContainer.clientHeight / itemHeight\n\t\t\t);\n\t\t\t// Aim to keep opening list view fast, afterward we can optimize for scrolling\n\t\t\tconst windowOverscan = initRender\n\t\t\t\t? visibleItems\n\t\t\t\t: options?.windowOverscan ?? visibleItems;\n\t\t\tconst firstViewableIndex = Math.floor(\n\t\t\t\tscrollContainer.scrollTop / itemHeight\n\t\t\t);\n\t\t\tconst start = Math.max( 0, firstViewableIndex - windowOverscan );\n\t\t\tconst end = Math.min(\n\t\t\t\ttotalItems - 1,\n\t\t\t\tfirstViewableIndex + visibleItems + windowOverscan\n\t\t\t);\n\t\t\tsetFixedListWindow( ( lastWindow ) => {\n\t\t\t\tconst nextWindow = {\n\t\t\t\t\tvisibleItems,\n\t\t\t\t\tstart,\n\t\t\t\t\tend,\n\t\t\t\t\titemInView: ( /** @type {number} */ index ) => {\n\t\t\t\t\t\treturn start <= index && index <= end;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tif (\n\t\t\t\t\tlastWindow.start !== nextWindow.start ||\n\t\t\t\t\tlastWindow.end !== nextWindow.end ||\n\t\t\t\t\tlastWindow.visibleItems !== nextWindow.visibleItems\n\t\t\t\t) {\n\t\t\t\t\treturn nextWindow;\n\t\t\t\t}\n\t\t\t\treturn lastWindow;\n\t\t\t} );\n\t\t};\n\n\t\tmeasureWindow( true );\n\t\tconst debounceMeasureList = debounce( () => {\n\t\t\tmeasureWindow();\n\t\t}, 16 );\n\t\tscrollContainer?.addEventListener( 'scroll', debounceMeasureList );\n\t\tscrollContainer?.ownerDocument?.defaultView?.addEventListener(\n\t\t\t'resize',\n\t\t\tdebounceMeasureList\n\t\t);\n\t\tscrollContainer?.ownerDocument?.defaultView?.addEventListener(\n\t\t\t'resize',\n\t\t\tdebounceMeasureList\n\t\t);\n\n\t\treturn () => {\n\t\t\tscrollContainer?.removeEventListener(\n\t\t\t\t'scroll',\n\t\t\t\tdebounceMeasureList\n\t\t\t);\n\t\t\tscrollContainer?.ownerDocument?.defaultView?.removeEventListener(\n\t\t\t\t'resize',\n\t\t\t\tdebounceMeasureList\n\t\t\t);\n\t\t};\n\t}, [ itemHeight, elementRef, totalItems ] );\n\n\tuseLayoutEffect( () => {\n\t\tif ( ! useWindowing ) {\n\t\t\treturn;\n\t\t}\n\t\tconst scrollContainer = getScrollContainer( elementRef.current );\n\t\tconst handleKeyDown = ( /** @type {KeyboardEvent} */ event ) => {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase HOME: {\n\t\t\t\t\treturn scrollContainer?.scrollTo( { top: 0 } );\n\t\t\t\t}\n\t\t\t\tcase END: {\n\t\t\t\t\treturn scrollContainer?.scrollTo( {\n\t\t\t\t\t\ttop: totalItems * itemHeight,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\tcase PAGEUP: {\n\t\t\t\t\treturn scrollContainer?.scrollTo( {\n\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\tscrollContainer.scrollTop -\n\t\t\t\t\t\t\tfixedListWindow.visibleItems * itemHeight,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\tcase PAGEDOWN: {\n\t\t\t\t\treturn scrollContainer?.scrollTo( {\n\t\t\t\t\t\ttop:\n\t\t\t\t\t\t\tscrollContainer.scrollTop +\n\t\t\t\t\t\t\tfixedListWindow.visibleItems * itemHeight,\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tscrollContainer?.ownerDocument?.defaultView?.addEventListener(\n\t\t\t'keydown',\n\t\t\thandleKeyDown\n\t\t);\n\t\treturn () => {\n\t\t\tscrollContainer?.ownerDocument?.defaultView?.removeEventListener(\n\t\t\t\t'keydown',\n\t\t\t\thandleKeyDown\n\t\t\t);\n\t\t};\n\t}, [ totalItems, itemHeight, elementRef, fixedListWindow.visibleItems ] );\n\n\treturn [ fixedListWindow, setFixedListWindow ];\n}\n"]}
@@ -34,7 +34,8 @@ var _dom = require("@wordpress/dom");
34
34
  * }
35
35
  * ```
36
36
  */
37
- function useFocusOnMount(focusOnMount = 'firstElement') {
37
+ function useFocusOnMount() {
38
+ let focusOnMount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'firstElement';
38
39
  const focusOnMountRef = (0, _element.useRef)(focusOnMount);
39
40
  (0, _element.useEffect)(() => {
40
41
  focusOnMountRef.current = focusOnMount;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-focus-on-mount/index.js"],"names":["useFocusOnMount","focusOnMount","focusOnMountRef","current","node","contains","ownerDocument","activeElement","target","firstTabbable","focus","tabbable","find"],"mappings":";;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,eAAT,CAA0BC,YAAY,GAAG,cAAzC,EAA0D;AACxE,QAAMC,eAAe,GAAG,qBAAQD,YAAR,CAAxB;AACA,0BAAW,MAAM;AAChBC,IAAAA,eAAe,CAACC,OAAhB,GAA0BF,YAA1B;AACA,GAFD,EAEG,CAAEA,YAAF,CAFH;AAIA,SAAO,0BAAeG,IAAF,IAAY;AAAA;;AAC/B,QAAK,CAAEA,IAAF,IAAUF,eAAe,CAACC,OAAhB,KAA4B,KAA3C,EAAmD;AAClD;AACA;;AAED,QAAKC,IAAI,CAACC,QAAL,iDAAeD,IAAI,CAACE,aAApB,wDAAe,oBAAoBC,aAAnC,yEAAoD,IAApD,CAAL,EAAkE;AACjE;AACA;;AAED,QAAIC,MAAM,GAAGJ,IAAb;;AAEA,QAAKF,eAAe,CAACC,OAAhB,KAA4B,cAAjC,EAAkD;AACjD,YAAMM,aAAa,GAAGC,WAAMC,QAAN,CAAeC,IAAf,CAAqBR,IAArB,EAA6B,CAA7B,CAAtB;;AAEA,UAAKK,aAAL,EAAqB;AACpBD,QAAAA,MAAM;AAAG;AAA6BC,QAAAA,aAAtC;AACA;AACD;;AAEDD,IAAAA,MAAM,CAACE,KAAP;AACA,GApBM,EAoBJ,EApBI,CAAP;AAqBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRef, useEffect, useCallback } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\n\n/**\n * Hook used to focus the first tabbable element on mount.\n *\n * @param {boolean | 'firstElement'} focusOnMount Focus on mount mode.\n * @return {import('react').RefCallback<HTMLElement>} Ref callback.\n *\n * @example\n * ```js\n * import { useFocusOnMount } from '@wordpress/compose';\n *\n * const WithFocusOnMount = () => {\n * const ref = useFocusOnMount()\n * return (\n * <div ref={ ref }>\n * <Button />\n * <Button />\n * </div>\n * );\n * }\n * ```\n */\nexport default function useFocusOnMount( focusOnMount = 'firstElement' ) {\n\tconst focusOnMountRef = useRef( focusOnMount );\n\tuseEffect( () => {\n\t\tfocusOnMountRef.current = focusOnMount;\n\t}, [ focusOnMount ] );\n\n\treturn useCallback( ( node ) => {\n\t\tif ( ! node || focusOnMountRef.current === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( node.contains( node.ownerDocument?.activeElement ?? null ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet target = node;\n\n\t\tif ( focusOnMountRef.current === 'firstElement' ) {\n\t\t\tconst firstTabbable = focus.tabbable.find( node )[ 0 ];\n\n\t\t\tif ( firstTabbable ) {\n\t\t\t\ttarget = /** @type {HTMLElement} */ ( firstTabbable );\n\t\t\t}\n\t\t}\n\n\t\ttarget.focus();\n\t}, [] );\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-focus-on-mount/index.js"],"names":["useFocusOnMount","focusOnMount","focusOnMountRef","current","node","contains","ownerDocument","activeElement","target","firstTabbable","focus","tabbable","find"],"mappings":";;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,eAAT,GAA0D;AAAA,MAAhCC,YAAgC,uEAAjB,cAAiB;AACxE,QAAMC,eAAe,GAAG,qBAAQD,YAAR,CAAxB;AACA,0BAAW,MAAM;AAChBC,IAAAA,eAAe,CAACC,OAAhB,GAA0BF,YAA1B;AACA,GAFD,EAEG,CAAEA,YAAF,CAFH;AAIA,SAAO,0BAAeG,IAAF,IAAY;AAAA;;AAC/B,QAAK,CAAEA,IAAF,IAAUF,eAAe,CAACC,OAAhB,KAA4B,KAA3C,EAAmD;AAClD;AACA;;AAED,QAAKC,IAAI,CAACC,QAAL,iDAAeD,IAAI,CAACE,aAApB,wDAAe,oBAAoBC,aAAnC,yEAAoD,IAApD,CAAL,EAAkE;AACjE;AACA;;AAED,QAAIC,MAAM,GAAGJ,IAAb;;AAEA,QAAKF,eAAe,CAACC,OAAhB,KAA4B,cAAjC,EAAkD;AACjD,YAAMM,aAAa,GAAGC,WAAMC,QAAN,CAAeC,IAAf,CAAqBR,IAArB,EAA6B,CAA7B,CAAtB;;AAEA,UAAKK,aAAL,EAAqB;AACpBD,QAAAA,MAAM;AAAG;AAA6BC,QAAAA,aAAtC;AACA;AACD;;AAEDD,IAAAA,MAAM,CAACE,KAAP;AACA,GApBM,EAoBJ,EApBI,CAAP;AAqBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useRef, useEffect, useCallback } from '@wordpress/element';\nimport { focus } from '@wordpress/dom';\n\n/**\n * Hook used to focus the first tabbable element on mount.\n *\n * @param {boolean | 'firstElement'} focusOnMount Focus on mount mode.\n * @return {import('react').RefCallback<HTMLElement>} Ref callback.\n *\n * @example\n * ```js\n * import { useFocusOnMount } from '@wordpress/compose';\n *\n * const WithFocusOnMount = () => {\n * const ref = useFocusOnMount()\n * return (\n * <div ref={ ref }>\n * <Button />\n * <Button />\n * </div>\n * );\n * }\n * ```\n */\nexport default function useFocusOnMount( focusOnMount = 'firstElement' ) {\n\tconst focusOnMountRef = useRef( focusOnMount );\n\tuseEffect( () => {\n\t\tfocusOnMountRef.current = focusOnMount;\n\t}, [ focusOnMount ] );\n\n\treturn useCallback( ( node ) => {\n\t\tif ( ! node || focusOnMountRef.current === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( node.contains( node.ownerDocument?.activeElement ?? null ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet target = node;\n\n\t\tif ( focusOnMountRef.current === 'firstElement' ) {\n\t\t\tconst firstTabbable = focus.tabbable.find( node )[ 0 ];\n\n\t\t\tif ( firstTabbable ) {\n\t\t\t\ttarget = /** @type {HTMLElement} */ ( firstTabbable );\n\t\t\t}\n\t\t}\n\n\t\ttarget.focus();\n\t}, [] );\n}\n"]}
@@ -42,7 +42,8 @@ function createId(object) {
42
42
  */
43
43
 
44
44
 
45
- function useInstanceId(object, prefix, preferredId = '') {
45
+ function useInstanceId(object, prefix) {
46
+ let preferredId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
46
47
  return (0, _element.useMemo)(() => {
47
48
  if (preferredId) return preferredId;
48
49
  const id = createId(object);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-instance-id/index.js"],"names":["instanceMap","WeakMap","createId","object","instances","get","set","useInstanceId","prefix","preferredId","id"],"mappings":";;;;;;;AAMA;;AANA;AACA;;AACA;;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA,MAAMA,WAAW,GAAG,IAAIC,OAAJ,EAApB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,QAAT,CAAmBC,MAAnB,EAA4B;AAC3B,QAAMC,SAAS,GAAGJ,WAAW,CAACK,GAAZ,CAAiBF,MAAjB,KAA6B,CAA/C;AACAH,EAAAA,WAAW,CAACM,GAAZ,CAAiBH,MAAjB,EAAyBC,SAAS,GAAG,CAArC;AACA,SAAOA,SAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,SAASG,aAAT,CAAwBJ,MAAxB,EAAgCK,MAAhC,EAAwCC,WAAW,GAAG,EAAtD,EAA2D;AACzE,SAAO,sBAAS,MAAM;AACrB,QAAKA,WAAL,EAAmB,OAAOA,WAAP;AACnB,UAAMC,EAAE,GAAGR,QAAQ,CAAEC,MAAF,CAAnB;AAEA,WAAOK,MAAM,GAAI,GAAGA,MAAQ,IAAIE,EAAI,EAAvB,GAA2BA,EAAxC;AACA,GALM,EAKJ,CAAEP,MAAF,CALI,CAAP;AAMA;AACD","sourcesContent":["// Disable reason: Object and object are distinctly different types in TypeScript and we mean the lowercase object in thise case\n// but eslint wants to force us to use `Object`. See https://stackoverflow.com/questions/49464634/difference-between-object-and-object-in-typescript\n/* eslint-disable jsdoc/check-types */\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * @type {WeakMap<object, number>}\n */\nconst instanceMap = new WeakMap();\n\n/**\n * Creates a new id for a given object.\n *\n * @param {object} object Object reference to create an id for.\n * @return {number} The instance id (index).\n */\nfunction createId( object ) {\n\tconst instances = instanceMap.get( object ) || 0;\n\tinstanceMap.set( object, instances + 1 );\n\treturn instances;\n}\n\n/**\n * Provides a unique instance ID.\n *\n * @param {object} object Object reference to create an id for.\n * @param {string} [prefix] Prefix for the unique id.\n * @param {string | number} [preferredId=''] Default ID to use.\n * @return {string | number} The unique instance id.\n */\nexport default function useInstanceId( object, prefix, preferredId = '' ) {\n\treturn useMemo( () => {\n\t\tif ( preferredId ) return preferredId;\n\t\tconst id = createId( object );\n\n\t\treturn prefix ? `${ prefix }-${ id }` : id;\n\t}, [ object ] );\n}\n/* eslint-enable jsdoc/check-types */\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-instance-id/index.js"],"names":["instanceMap","WeakMap","createId","object","instances","get","set","useInstanceId","prefix","preferredId","id"],"mappings":";;;;;;;AAMA;;AANA;AACA;;AACA;;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA,MAAMA,WAAW,GAAG,IAAIC,OAAJ,EAApB;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,QAAT,CAAmBC,MAAnB,EAA4B;AAC3B,QAAMC,SAAS,GAAGJ,WAAW,CAACK,GAAZ,CAAiBF,MAAjB,KAA6B,CAA/C;AACAH,EAAAA,WAAW,CAACM,GAAZ,CAAiBH,MAAjB,EAAyBC,SAAS,GAAG,CAArC;AACA,SAAOA,SAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,SAASG,aAAT,CAAwBJ,MAAxB,EAAgCK,MAAhC,EAA2D;AAAA,MAAnBC,WAAmB,uEAAL,EAAK;AACzE,SAAO,sBAAS,MAAM;AACrB,QAAKA,WAAL,EAAmB,OAAOA,WAAP;AACnB,UAAMC,EAAE,GAAGR,QAAQ,CAAEC,MAAF,CAAnB;AAEA,WAAOK,MAAM,GAAI,GAAGA,MAAQ,IAAIE,EAAI,EAAvB,GAA2BA,EAAxC;AACA,GALM,EAKJ,CAAEP,MAAF,CALI,CAAP;AAMA;AACD","sourcesContent":["// Disable reason: Object and object are distinctly different types in TypeScript and we mean the lowercase object in thise case\n// but eslint wants to force us to use `Object`. See https://stackoverflow.com/questions/49464634/difference-between-object-and-object-in-typescript\n/* eslint-disable jsdoc/check-types */\n/**\n * WordPress dependencies\n */\nimport { useMemo } from '@wordpress/element';\n\n/**\n * @type {WeakMap<object, number>}\n */\nconst instanceMap = new WeakMap();\n\n/**\n * Creates a new id for a given object.\n *\n * @param {object} object Object reference to create an id for.\n * @return {number} The instance id (index).\n */\nfunction createId( object ) {\n\tconst instances = instanceMap.get( object ) || 0;\n\tinstanceMap.set( object, instances + 1 );\n\treturn instances;\n}\n\n/**\n * Provides a unique instance ID.\n *\n * @param {object} object Object reference to create an id for.\n * @param {string} [prefix] Prefix for the unique id.\n * @param {string | number} [preferredId=''] Default ID to use.\n * @return {string | number} The unique instance id.\n */\nexport default function useInstanceId( object, prefix, preferredId = '' ) {\n\treturn useMemo( () => {\n\t\tif ( preferredId ) return preferredId;\n\t\tconst id = createId( object );\n\n\t\treturn prefix ? `${ prefix }-${ id }` : id;\n\t}, [ object ] );\n}\n/* eslint-enable jsdoc/check-types */\n"]}
@@ -41,7 +41,9 @@ var _element = require("@wordpress/element");
41
41
  *
42
42
  * @return {boolean} True if MacOS; false otherwise.
43
43
  */
44
- function isAppleOS(_window = window) {
44
+ function isAppleOS() {
45
+ let _window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;
46
+
45
47
  const {
46
48
  platform
47
49
  } = _window.navigator;
@@ -62,13 +64,14 @@ function isAppleOS(_window = window) {
62
64
 
63
65
  function useKeyboardShortcut(
64
66
  /* eslint-enable jsdoc/valid-types */
65
- shortcuts, callback, {
66
- bindGlobal = false,
67
- eventName = 'keydown',
68
- isDisabled = false,
69
- // This is important for performance considerations.
70
- target
71
- } = {}) {
67
+ shortcuts, callback) {
68
+ let {
69
+ bindGlobal = false,
70
+ eventName = 'keydown',
71
+ isDisabled = false,
72
+ // This is important for performance considerations.
73
+ target
74
+ } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
72
75
  const currentCallback = (0, _element.useRef)(callback);
73
76
  (0, _element.useEffect)(() => {
74
77
  currentCallback.current = callback;
@@ -101,13 +104,12 @@ shortcuts, callback, {
101
104
 
102
105
  const bindFn = bindGlobal ? 'bindGlobal' : 'bind'; // @ts-ignore `bindGlobal` is an undocumented property
103
106
 
104
- mousetrap[bindFn](shortcut, (
105
- /* eslint-disable jsdoc/valid-types */
106
-
107
- /** @type {[e: import('mousetrap').ExtendedKeyboardEvent, combo: string]} */
108
- ...args) =>
109
- /* eslint-enable jsdoc/valid-types */
110
- currentCallback.current(...args), eventName);
107
+ mousetrap[bindFn](shortcut, function () {
108
+ return (
109
+ /* eslint-enable jsdoc/valid-types */
110
+ currentCallback.current(...arguments)
111
+ );
112
+ }, eventName);
111
113
  });
112
114
  return () => {
113
115
  mousetrap.reset();
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-keyboard-shortcut/index.js"],"names":["isAppleOS","_window","window","platform","navigator","indexOf","useKeyboardShortcut","shortcuts","callback","bindGlobal","eventName","isDisabled","target","currentCallback","current","mousetrap","Mousetrap","document","forEach","shortcut","keys","split","modifiers","Set","filter","value","length","hasAlt","has","hasShift","size","Error","bindFn","args","reset"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AAKA;;AAVA;AACA;AACA;;AAKA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAT,CAAoBC,OAAO,GAAGC,MAA9B,EAAuC;AACtC,QAAM;AAAEC,IAAAA;AAAF,MAAeF,OAAO,CAACG,SAA7B;AAEA,SACCD,QAAQ,CAACE,OAAT,CAAkB,KAAlB,MAA8B,CAAC,CAA/B,IACA,sBAAU,CAAE,MAAF,EAAU,QAAV,CAAV,EAAgCF,QAAhC,CAFD;AAIA;AAED;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASG,mBAAT;AACC;AACAC,SAFD,EAGCC,QAHD,EAIC;AACCC,EAAAA,UAAU,GAAG,KADd;AAECC,EAAAA,SAAS,GAAG,SAFb;AAGCC,EAAAA,UAAU,GAAG,KAHd;AAGqB;AACpBC,EAAAA;AAJD,IAKI,EATL,EAUE;AACD,QAAMC,eAAe,GAAG,qBAAQL,QAAR,CAAxB;AACA,0BAAW,MAAM;AAChBK,IAAAA,eAAe,CAACC,OAAhB,GAA0BN,QAA1B;AACA,GAFD,EAEG,CAAEA,QAAF,CAFH;AAIA,0BAAW,MAAM;AAChB,QAAKG,UAAL,EAAkB;AACjB;AACA;;AACD,UAAMI,SAAS,GAAG,IAAIC,kBAAJ,CACjBJ,MAAM,IAAIA,MAAM,CAACE,OAAjB,GACGF,MAAM,CAACE,OADV,GAEG;AACA;AACA;;AACA;;AAAwB;AAAyBG,IAAAA,QANnC,CAAlB;AAQA,2BAAWV,SAAX,EAAuBW,OAAvB,CAAkCC,QAAF,IAAgB;AAC/C,YAAMC,IAAI,GAAGD,QAAQ,CAACE,KAAT,CAAgB,GAAhB,CAAb,CAD+C,CAE/C;AACA;AACA;;AACA,YAAMC,SAAS,GAAG,IAAIC,GAAJ,CACjBH,IAAI,CAACI,MAAL,CAAeC,KAAF,IAAaA,KAAK,CAACC,MAAN,GAAe,CAAzC,CADiB,CAAlB;AAGA,YAAMC,MAAM,GAAGL,SAAS,CAACM,GAAV,CAAe,KAAf,CAAf;AACA,YAAMC,QAAQ,GAAGP,SAAS,CAACM,GAAV,CAAe,OAAf,CAAjB,CAT+C,CAW/C;;AACA,UACC5B,SAAS,OACLsB,SAAS,CAACQ,IAAV,KAAmB,CAAnB,IAAwBH,MAA1B,IACCL,SAAS,CAACQ,IAAV,KAAmB,CAAnB,IAAwBH,MAAxB,IAAkCE,QAF5B,CADV,EAIE;AACD,cAAM,IAAIE,KAAJ,CACJ,eAAeZ,QAAU,iEADrB,CAAN;AAGA;;AAED,YAAMa,MAAM,GAAGvB,UAAU,GAAG,YAAH,GAAkB,MAA3C,CAtB+C,CAuB/C;;AACAM,MAAAA,SAAS,CAAEiB,MAAF,CAAT,CACCb,QADD,EAEC;AACC;;AACA;AAA6E,SAAGc,IAFjF;AAIC;AACApB,MAAAA,eAAe,CAACC,OAAhB,CAAyB,GAAGmB,IAA5B,CAPF,EAQCvB,SARD;AAUA,KAlCD;AAoCA,WAAO,MAAM;AACZK,MAAAA,SAAS,CAACmB,KAAV;AACA,KAFD;AAGA,GAnDD,EAmDG,CAAE3B,SAAF,EAAaE,UAAb,EAAyBC,SAAzB,EAAoCE,MAApC,EAA4CD,UAA5C,CAnDH;AAoDA;;eAEcL,mB","sourcesContent":["/**\n * External dependencies\n */\nimport Mousetrap from 'mousetrap';\nimport 'mousetrap/plugins/global-bind/mousetrap-global-bind';\nimport { includes, castArray } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPKeyboardShortcutConfig\n *\n * @property {boolean} [bindGlobal] Handle keyboard events anywhere including inside textarea/input fields.\n * @property {string} [eventName] Event name used to trigger the handler, defaults to keydown.\n * @property {boolean} [isDisabled] Disables the keyboard handler if the value is true.\n * @property {import('react').RefObject<HTMLElement>} [target] React reference to the DOM element used to catch the keyboard event.\n */\n\n/**\n * Return true if platform is MacOS.\n *\n * @param {Window} [_window] window object by default; used for DI testing.\n *\n * @return {boolean} True if MacOS; false otherwise.\n */\nfunction isAppleOS( _window = window ) {\n\tconst { platform } = _window.navigator;\n\n\treturn (\n\t\tplatform.indexOf( 'Mac' ) !== -1 ||\n\t\tincludes( [ 'iPad', 'iPhone' ], platform )\n\t);\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Attach a keyboard shortcut handler.\n *\n * @see https://craig.is/killing/mice#api.bind for information about the `callback` parameter.\n *\n * @param {string[]|string} shortcuts Keyboard Shortcuts.\n * @param {(e: import('mousetrap').ExtendedKeyboardEvent, combo: string) => void} callback Shortcut callback.\n * @param {WPKeyboardShortcutConfig} options Shortcut options.\n */\nfunction useKeyboardShortcut(\n\t/* eslint-enable jsdoc/valid-types */\n\tshortcuts,\n\tcallback,\n\t{\n\t\tbindGlobal = false,\n\t\teventName = 'keydown',\n\t\tisDisabled = false, // This is important for performance considerations.\n\t\ttarget,\n\t} = {}\n) {\n\tconst currentCallback = useRef( callback );\n\tuseEffect( () => {\n\t\tcurrentCallback.current = callback;\n\t}, [ callback ] );\n\n\tuseEffect( () => {\n\t\tif ( isDisabled ) {\n\t\t\treturn;\n\t\t}\n\t\tconst mousetrap = new Mousetrap(\n\t\t\ttarget && target.current\n\t\t\t\t? target.current\n\t\t\t\t: // We were passing `document` here previously, so to successfully cast it to Element we must cast it first to `unknown`.\n\t\t\t\t // Not sure if this is a mistake but it was the behavior previous to the addition of types so we're just doing what's\n\t\t\t\t // necessary to maintain the existing behavior\n\t\t\t\t /** @type {Element} */ (/** @type {unknown} */ ( document ))\n\t\t);\n\t\tcastArray( shortcuts ).forEach( ( shortcut ) => {\n\t\t\tconst keys = shortcut.split( '+' );\n\t\t\t// Determines whether a key is a modifier by the length of the string.\n\t\t\t// E.g. if I add a pass a shortcut Shift+Cmd+M, it'll determine that\n\t\t\t// the modifiers are Shift and Cmd because they're not a single character.\n\t\t\tconst modifiers = new Set(\n\t\t\t\tkeys.filter( ( value ) => value.length > 1 )\n\t\t\t);\n\t\t\tconst hasAlt = modifiers.has( 'alt' );\n\t\t\tconst hasShift = modifiers.has( 'shift' );\n\n\t\t\t// This should be better moved to the shortcut registration instead.\n\t\t\tif (\n\t\t\t\tisAppleOS() &&\n\t\t\t\t( ( modifiers.size === 1 && hasAlt ) ||\n\t\t\t\t\t( modifiers.size === 2 && hasAlt && hasShift ) )\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot bind ${ shortcut }. Alt and Shift+Alt modifiers are reserved for character input.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst bindFn = bindGlobal ? 'bindGlobal' : 'bind';\n\t\t\t// @ts-ignore `bindGlobal` is an undocumented property\n\t\t\tmousetrap[ bindFn ](\n\t\t\t\tshortcut,\n\t\t\t\t(\n\t\t\t\t\t/* eslint-disable jsdoc/valid-types */\n\t\t\t\t\t/** @type {[e: import('mousetrap').ExtendedKeyboardEvent, combo: string]} */ ...args\n\t\t\t\t) =>\n\t\t\t\t\t/* eslint-enable jsdoc/valid-types */\n\t\t\t\t\tcurrentCallback.current( ...args ),\n\t\t\t\teventName\n\t\t\t);\n\t\t} );\n\n\t\treturn () => {\n\t\t\tmousetrap.reset();\n\t\t};\n\t}, [ shortcuts, bindGlobal, eventName, target, isDisabled ] );\n}\n\nexport default useKeyboardShortcut;\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-keyboard-shortcut/index.js"],"names":["isAppleOS","_window","window","platform","navigator","indexOf","useKeyboardShortcut","shortcuts","callback","bindGlobal","eventName","isDisabled","target","currentCallback","current","mousetrap","Mousetrap","document","forEach","shortcut","keys","split","modifiers","Set","filter","value","length","hasAlt","has","hasShift","size","Error","bindFn","reset"],"mappings":";;;;;;;;;AAGA;;AACA;;AACA;;AAKA;;AAVA;AACA;AACA;;AAKA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,SAAT,GAAuC;AAAA,MAAnBC,OAAmB,uEAATC,MAAS;;AACtC,QAAM;AAAEC,IAAAA;AAAF,MAAeF,OAAO,CAACG,SAA7B;AAEA,SACCD,QAAQ,CAACE,OAAT,CAAkB,KAAlB,MAA8B,CAAC,CAA/B,IACA,sBAAU,CAAE,MAAF,EAAU,QAAV,CAAV,EAAgCF,QAAhC,CAFD;AAIA;AAED;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASG,mBAAT;AACC;AACAC,SAFD,EAGCC,QAHD,EAUE;AAAA,MAND;AACCC,IAAAA,UAAU,GAAG,KADd;AAECC,IAAAA,SAAS,GAAG,SAFb;AAGCC,IAAAA,UAAU,GAAG,KAHd;AAGqB;AACpBC,IAAAA;AAJD,GAMC,uEADG,EACH;AACD,QAAMC,eAAe,GAAG,qBAAQL,QAAR,CAAxB;AACA,0BAAW,MAAM;AAChBK,IAAAA,eAAe,CAACC,OAAhB,GAA0BN,QAA1B;AACA,GAFD,EAEG,CAAEA,QAAF,CAFH;AAIA,0BAAW,MAAM;AAChB,QAAKG,UAAL,EAAkB;AACjB;AACA;;AACD,UAAMI,SAAS,GAAG,IAAIC,kBAAJ,CACjBJ,MAAM,IAAIA,MAAM,CAACE,OAAjB,GACGF,MAAM,CAACE,OADV,GAEG;AACA;AACA;;AACA;;AAAwB;AAAyBG,IAAAA,QANnC,CAAlB;AAQA,2BAAWV,SAAX,EAAuBW,OAAvB,CAAkCC,QAAF,IAAgB;AAC/C,YAAMC,IAAI,GAAGD,QAAQ,CAACE,KAAT,CAAgB,GAAhB,CAAb,CAD+C,CAE/C;AACA;AACA;;AACA,YAAMC,SAAS,GAAG,IAAIC,GAAJ,CACjBH,IAAI,CAACI,MAAL,CAAeC,KAAF,IAAaA,KAAK,CAACC,MAAN,GAAe,CAAzC,CADiB,CAAlB;AAGA,YAAMC,MAAM,GAAGL,SAAS,CAACM,GAAV,CAAe,KAAf,CAAf;AACA,YAAMC,QAAQ,GAAGP,SAAS,CAACM,GAAV,CAAe,OAAf,CAAjB,CAT+C,CAW/C;;AACA,UACC5B,SAAS,OACLsB,SAAS,CAACQ,IAAV,KAAmB,CAAnB,IAAwBH,MAA1B,IACCL,SAAS,CAACQ,IAAV,KAAmB,CAAnB,IAAwBH,MAAxB,IAAkCE,QAF5B,CADV,EAIE;AACD,cAAM,IAAIE,KAAJ,CACJ,eAAeZ,QAAU,iEADrB,CAAN;AAGA;;AAED,YAAMa,MAAM,GAAGvB,UAAU,GAAG,YAAH,GAAkB,MAA3C,CAtB+C,CAuB/C;;AACAM,MAAAA,SAAS,CAAEiB,MAAF,CAAT,CACCb,QADD,EAEC;AAAA;AAIC;AACAN,UAAAA,eAAe,CAACC,OAAhB,CAAyB,YAAzB;AALD;AAAA,OAFD,EAQCJ,SARD;AAUA,KAlCD;AAoCA,WAAO,MAAM;AACZK,MAAAA,SAAS,CAACkB,KAAV;AACA,KAFD;AAGA,GAnDD,EAmDG,CAAE1B,SAAF,EAAaE,UAAb,EAAyBC,SAAzB,EAAoCE,MAApC,EAA4CD,UAA5C,CAnDH;AAoDA;;eAEcL,mB","sourcesContent":["/**\n * External dependencies\n */\nimport Mousetrap from 'mousetrap';\nimport 'mousetrap/plugins/global-bind/mousetrap-global-bind';\nimport { includes, castArray } from 'lodash';\n\n/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * A block selection object.\n *\n * @typedef {Object} WPKeyboardShortcutConfig\n *\n * @property {boolean} [bindGlobal] Handle keyboard events anywhere including inside textarea/input fields.\n * @property {string} [eventName] Event name used to trigger the handler, defaults to keydown.\n * @property {boolean} [isDisabled] Disables the keyboard handler if the value is true.\n * @property {import('react').RefObject<HTMLElement>} [target] React reference to the DOM element used to catch the keyboard event.\n */\n\n/**\n * Return true if platform is MacOS.\n *\n * @param {Window} [_window] window object by default; used for DI testing.\n *\n * @return {boolean} True if MacOS; false otherwise.\n */\nfunction isAppleOS( _window = window ) {\n\tconst { platform } = _window.navigator;\n\n\treturn (\n\t\tplatform.indexOf( 'Mac' ) !== -1 ||\n\t\tincludes( [ 'iPad', 'iPhone' ], platform )\n\t);\n}\n\n/* eslint-disable jsdoc/valid-types */\n/**\n * Attach a keyboard shortcut handler.\n *\n * @see https://craig.is/killing/mice#api.bind for information about the `callback` parameter.\n *\n * @param {string[]|string} shortcuts Keyboard Shortcuts.\n * @param {(e: import('mousetrap').ExtendedKeyboardEvent, combo: string) => void} callback Shortcut callback.\n * @param {WPKeyboardShortcutConfig} options Shortcut options.\n */\nfunction useKeyboardShortcut(\n\t/* eslint-enable jsdoc/valid-types */\n\tshortcuts,\n\tcallback,\n\t{\n\t\tbindGlobal = false,\n\t\teventName = 'keydown',\n\t\tisDisabled = false, // This is important for performance considerations.\n\t\ttarget,\n\t} = {}\n) {\n\tconst currentCallback = useRef( callback );\n\tuseEffect( () => {\n\t\tcurrentCallback.current = callback;\n\t}, [ callback ] );\n\n\tuseEffect( () => {\n\t\tif ( isDisabled ) {\n\t\t\treturn;\n\t\t}\n\t\tconst mousetrap = new Mousetrap(\n\t\t\ttarget && target.current\n\t\t\t\t? target.current\n\t\t\t\t: // We were passing `document` here previously, so to successfully cast it to Element we must cast it first to `unknown`.\n\t\t\t\t // Not sure if this is a mistake but it was the behavior previous to the addition of types so we're just doing what's\n\t\t\t\t // necessary to maintain the existing behavior\n\t\t\t\t /** @type {Element} */ (/** @type {unknown} */ ( document ))\n\t\t);\n\t\tcastArray( shortcuts ).forEach( ( shortcut ) => {\n\t\t\tconst keys = shortcut.split( '+' );\n\t\t\t// Determines whether a key is a modifier by the length of the string.\n\t\t\t// E.g. if I add a pass a shortcut Shift+Cmd+M, it'll determine that\n\t\t\t// the modifiers are Shift and Cmd because they're not a single character.\n\t\t\tconst modifiers = new Set(\n\t\t\t\tkeys.filter( ( value ) => value.length > 1 )\n\t\t\t);\n\t\t\tconst hasAlt = modifiers.has( 'alt' );\n\t\t\tconst hasShift = modifiers.has( 'shift' );\n\n\t\t\t// This should be better moved to the shortcut registration instead.\n\t\t\tif (\n\t\t\t\tisAppleOS() &&\n\t\t\t\t( ( modifiers.size === 1 && hasAlt ) ||\n\t\t\t\t\t( modifiers.size === 2 && hasAlt && hasShift ) )\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Cannot bind ${ shortcut }. Alt and Shift+Alt modifiers are reserved for character input.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst bindFn = bindGlobal ? 'bindGlobal' : 'bind';\n\t\t\t// @ts-ignore `bindGlobal` is an undocumented property\n\t\t\tmousetrap[ bindFn ](\n\t\t\t\tshortcut,\n\t\t\t\t(\n\t\t\t\t\t/* eslint-disable jsdoc/valid-types */\n\t\t\t\t\t/** @type {[e: import('mousetrap').ExtendedKeyboardEvent, combo: string]} */ ...args\n\t\t\t\t) =>\n\t\t\t\t\t/* eslint-enable jsdoc/valid-types */\n\t\t\t\t\tcurrentCallback.current( ...args ),\n\t\t\t\teventName\n\t\t\t);\n\t\t} );\n\n\t\treturn () => {\n\t\t\tmousetrap.reset();\n\t\t};\n\t}, [ shortcuts, bindGlobal, eventName, target, isDisabled ] );\n}\n\nexport default useKeyboardShortcut;\n"]}
@@ -21,9 +21,10 @@ var _reactNativeBridge = require("@wordpress/react-native-bridge");
21
21
  function usePreferredColorScheme() {
22
22
  const [currentColorScheme, setCurrentColorScheme] = (0, _element.useState)(_reactNativeBridge.isInitialColorSchemeDark ? 'dark' : 'light');
23
23
  (0, _element.useEffect)(() => {
24
- (0, _reactNativeBridge.subscribePreferredColorScheme)(({
25
- isPreferredColorSchemeDark
26
- }) => {
24
+ (0, _reactNativeBridge.subscribePreferredColorScheme)(_ref => {
25
+ let {
26
+ isPreferredColorSchemeDark
27
+ } = _ref;
27
28
  const colorScheme = isPreferredColorSchemeDark ? 'dark' : 'light';
28
29
 
29
30
  if (colorScheme !== currentColorScheme) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-preferred-color-scheme/index.android.js"],"names":["usePreferredColorScheme","currentColorScheme","setCurrentColorScheme","isInitialColorSchemeDark","isPreferredColorSchemeDark","colorScheme"],"mappings":";;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA,SAASA,uBAAT,GAAmC;AAClC,QAAM,CAAEC,kBAAF,EAAsBC,qBAAtB,IAAgD,uBACrDC,8CAA2B,MAA3B,GAAoC,OADiB,CAAtD;AAGA,0BAAW,MAAM;AAChB,0DAA+B,CAAE;AAAEC,MAAAA;AAAF,KAAF,KAAsC;AACpE,YAAMC,WAAW,GAAGD,0BAA0B,GAAG,MAAH,GAAY,OAA1D;;AACA,UAAKC,WAAW,KAAKJ,kBAArB,EAA0C;AACzCC,QAAAA,qBAAqB,CAAEG,WAAF,CAArB;AACA;AACD,KALD;AAMA,GAPD;AAQA,SAAOJ,kBAAP;AACA;;eAEcD,uB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\nimport {\n\tsubscribePreferredColorScheme,\n\tisInitialColorSchemeDark,\n} from '@wordpress/react-native-bridge';\n\n/**\n * Returns the color scheme value when it changes. Possible values: [ 'light', 'dark' ]\n *\n * @return {string} return current color scheme.\n */\nfunction usePreferredColorScheme() {\n\tconst [ currentColorScheme, setCurrentColorScheme ] = useState(\n\t\tisInitialColorSchemeDark ? 'dark' : 'light'\n\t);\n\tuseEffect( () => {\n\t\tsubscribePreferredColorScheme( ( { isPreferredColorSchemeDark } ) => {\n\t\t\tconst colorScheme = isPreferredColorSchemeDark ? 'dark' : 'light';\n\t\t\tif ( colorScheme !== currentColorScheme ) {\n\t\t\t\tsetCurrentColorScheme( colorScheme );\n\t\t\t}\n\t\t} );\n\t} );\n\treturn currentColorScheme;\n}\n\nexport default usePreferredColorScheme;\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-preferred-color-scheme/index.android.js"],"names":["usePreferredColorScheme","currentColorScheme","setCurrentColorScheme","isInitialColorSchemeDark","isPreferredColorSchemeDark","colorScheme"],"mappings":";;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA,SAASA,uBAAT,GAAmC;AAClC,QAAM,CAAEC,kBAAF,EAAsBC,qBAAtB,IAAgD,uBACrDC,8CAA2B,MAA3B,GAAoC,OADiB,CAAtD;AAGA,0BAAW,MAAM;AAChB,0DAA+B,QAAsC;AAAA,UAApC;AAAEC,QAAAA;AAAF,OAAoC;AACpE,YAAMC,WAAW,GAAGD,0BAA0B,GAAG,MAAH,GAAY,OAA1D;;AACA,UAAKC,WAAW,KAAKJ,kBAArB,EAA0C;AACzCC,QAAAA,qBAAqB,CAAEG,WAAF,CAArB;AACA;AACD,KALD;AAMA,GAPD;AAQA,SAAOJ,kBAAP;AACA;;eAEcD,uB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useState, useEffect } from '@wordpress/element';\nimport {\n\tsubscribePreferredColorScheme,\n\tisInitialColorSchemeDark,\n} from '@wordpress/react-native-bridge';\n\n/**\n * Returns the color scheme value when it changes. Possible values: [ 'light', 'dark' ]\n *\n * @return {string} return current color scheme.\n */\nfunction usePreferredColorScheme() {\n\tconst [ currentColorScheme, setCurrentColorScheme ] = useState(\n\t\tisInitialColorSchemeDark ? 'dark' : 'light'\n\t);\n\tuseEffect( () => {\n\t\tsubscribePreferredColorScheme( ( { isPreferredColorSchemeDark } ) => {\n\t\t\tconst colorScheme = isPreferredColorSchemeDark ? 'dark' : 'light';\n\t\t\tif ( colorScheme !== currentColorScheme ) {\n\t\t\t\tsetCurrentColorScheme( colorScheme );\n\t\t\t}\n\t\t} );\n\t} );\n\treturn currentColorScheme;\n}\n\nexport default usePreferredColorScheme;\n"]}
@@ -15,23 +15,12 @@ var _element = require("@wordpress/element");
15
15
  * Use something's value from the previous render.
16
16
  * Based on https://usehooks.com/usePrevious/.
17
17
  *
18
- * @template T
18
+ * @param value The value to track.
19
19
  *
20
- * @param {T} value The value to track.
21
- *
22
- * @return {T | undefined} The value from the previous render.
20
+ * @return The value from the previous render.
23
21
  */
24
22
  function usePrevious(value) {
25
- // Disable reason: without an explicit type detail, the type of ref will be
26
- // inferred based on the initial useRef argument, which is undefined.
27
- // https://github.com/WordPress/gutenberg/pull/22597#issuecomment-633588366
28
-
29
- /* eslint-disable jsdoc/no-undefined-types */
30
- const ref = (0, _element.useRef)(
31
- /** @type {T | undefined} */
32
- undefined);
33
- /* eslint-enable jsdoc/no-undefined-types */
34
- // Store current value in ref.
23
+ const ref = (0, _element.useRef)(); // Store current value in ref.
35
24
 
36
25
  (0, _element.useEffect)(() => {
37
26
  ref.current = value;
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-previous/index.js"],"names":["usePrevious","value","ref","undefined","current"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,WAAT,CAAsBC,KAAtB,EAA8B;AAC5C;AACA;AACA;;AACA;AACA,QAAMC,GAAG,GAAG;AAAQ;AAA+BC,EAAAA,SAAvC,CAAZ;AACA;AAEA;;AACA,0BAAW,MAAM;AAChBD,IAAAA,GAAG,CAACE,OAAJ,GAAcH,KAAd;AACA,GAFD,EAEG,CAAEA,KAAF,CAFH,EAT4C,CAW5B;AAEhB;;AACA,SAAOC,GAAG,CAACE,OAAX;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Use something's value from the previous render.\n * Based on https://usehooks.com/usePrevious/.\n *\n * @template T\n *\n * @param {T} value The value to track.\n *\n * @return {T | undefined} The value from the previous render.\n */\nexport default function usePrevious( value ) {\n\t// Disable reason: without an explicit type detail, the type of ref will be\n\t// inferred based on the initial useRef argument, which is undefined.\n\t// https://github.com/WordPress/gutenberg/pull/22597#issuecomment-633588366\n\t/* eslint-disable jsdoc/no-undefined-types */\n\tconst ref = useRef( /** @type {T | undefined} */ ( undefined ) );\n\t/* eslint-enable jsdoc/no-undefined-types */\n\n\t// Store current value in ref.\n\tuseEffect( () => {\n\t\tref.current = value;\n\t}, [ value ] ); // Re-run when value changes.\n\n\t// Return previous value (happens before update in useEffect above).\n\treturn ref.current;\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-previous/index.ts"],"names":["usePrevious","value","ref","current"],"mappings":";;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,WAAT,CAA2BC,KAA3B,EAAqD;AACnE,QAAMC,GAAG,GAAG,sBAAZ,CADmE,CAGnE;;AACA,0BAAW,MAAM;AAChBA,IAAAA,GAAG,CAACC,OAAJ,GAAcF,KAAd;AACA,GAFD,EAEG,CAAEA,KAAF,CAFH,EAJmE,CAMnD;AAEhB;;AACA,SAAOC,GAAG,CAACC,OAAX;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useEffect, useRef } from '@wordpress/element';\n\n/**\n * Use something's value from the previous render.\n * Based on https://usehooks.com/usePrevious/.\n *\n * @param value The value to track.\n *\n * @return The value from the previous render.\n */\nexport default function usePrevious< T >( value: T ): T | undefined {\n\tconst ref = useRef< T >();\n\n\t// Store current value in ref.\n\tuseEffect( () => {\n\t\tref.current = value;\n\t}, [ value ] ); // Re-run when value changes.\n\n\t// Return previous value (happens before update in useEffect above).\n\treturn ref.current;\n}\n"]}
@@ -40,9 +40,10 @@ var _reactNative = require("react-native");
40
40
  */
41
41
  const useResizeObserver = () => {
42
42
  const [measurements, setMeasurements] = (0, _element.useState)(null);
43
- const onLayout = (0, _element.useCallback)(({
44
- nativeEvent
45
- }) => {
43
+ const onLayout = (0, _element.useCallback)(_ref => {
44
+ let {
45
+ nativeEvent
46
+ } = _ref;
46
47
  const {
47
48
  width,
48
49
  height
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-resize-observer/index.native.js"],"names":["useResizeObserver","measurements","setMeasurements","onLayout","nativeEvent","width","height","layout","prevState","Math","floor","observer","StyleSheet","absoluteFill"],"mappings":";;;;;;;AAOA;;AAJA;;AAHA;AACA;AACA;;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,GAAG,MAAM;AAC/B,QAAM,CAAEC,YAAF,EAAgBC,eAAhB,IAAoC,uBAAU,IAAV,CAA1C;AAEA,QAAMC,QAAQ,GAAG,0BAAa,CAAE;AAAEC,IAAAA;AAAF,GAAF,KAAuB;AACpD,UAAM;AAAEC,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAoBF,WAAW,CAACG,MAAtC;AACAL,IAAAA,eAAe,CAAIM,SAAF,IAAiB;AACjC,UACC,CAAEA,SAAF,IACAA,SAAS,CAACH,KAAV,KAAoBA,KADpB,IAEAG,SAAS,CAACF,MAAV,KAAqBA,MAHtB,EAIE;AACD,eAAO;AACND,UAAAA,KAAK,EAAEI,IAAI,CAACC,KAAL,CAAYL,KAAZ,CADD;AAENC,UAAAA,MAAM,EAAEG,IAAI,CAACC,KAAL,CAAYJ,MAAZ;AAFF,SAAP;AAIA;;AACD,aAAOE,SAAP;AACA,KAZc,CAAf;AAaA,GAfgB,EAed,EAfc,CAAjB;AAiBA,QAAMG,QAAQ,GACb,4BAAC,iBAAD;AAAM,IAAA,KAAK,EAAGC,wBAAWC,YAAzB;AAAwC,IAAA,QAAQ,EAAGV;AAAnD,IADD;AAIA,SAAO,CAAEQ,QAAF,EAAYV,YAAZ,CAAP;AACA,CAzBD;;eA2BeD,iB","sourcesContent":["/**\n * External dependencies\n */\nimport { View, StyleSheet } from 'react-native';\n/**\n * WordPress dependencies\n */\nimport { useState, useCallback } from '@wordpress/element';\n\n/**\n * Hook which allows to listen the resize event of any target element when it changes sizes.\n *\n * @return {[JSX.Element, { width: number, height: number } | null]} An array of {Element} `resizeListener` and {?Object} `sizes` with properties `width` and `height`\n *\n * @example\n *\n * ```js\n * const App = () => {\n * \tconst [ resizeListener, sizes ] = useResizeObserver();\n *\n * \treturn (\n * \t\t<View>\n * \t\t\t{ resizeListener }\n * \t\t\tYour content here\n * \t\t</View>\n * \t);\n * };\n * ```\n *\n */\nconst useResizeObserver = () => {\n\tconst [ measurements, setMeasurements ] = useState( null );\n\n\tconst onLayout = useCallback( ( { nativeEvent } ) => {\n\t\tconst { width, height } = nativeEvent.layout;\n\t\tsetMeasurements( ( prevState ) => {\n\t\t\tif (\n\t\t\t\t! prevState ||\n\t\t\t\tprevState.width !== width ||\n\t\t\t\tprevState.height !== height\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\twidth: Math.floor( width ),\n\t\t\t\t\theight: Math.floor( height ),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn prevState;\n\t\t} );\n\t}, [] );\n\n\tconst observer = (\n\t\t<View style={ StyleSheet.absoluteFill } onLayout={ onLayout } />\n\t);\n\n\treturn [ observer, measurements ];\n};\n\nexport default useResizeObserver;\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-resize-observer/index.native.js"],"names":["useResizeObserver","measurements","setMeasurements","onLayout","nativeEvent","width","height","layout","prevState","Math","floor","observer","StyleSheet","absoluteFill"],"mappings":";;;;;;;AAOA;;AAJA;;AAHA;AACA;AACA;;AAEA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,iBAAiB,GAAG,MAAM;AAC/B,QAAM,CAAEC,YAAF,EAAgBC,eAAhB,IAAoC,uBAAU,IAAV,CAA1C;AAEA,QAAMC,QAAQ,GAAG,0BAAa,QAAuB;AAAA,QAArB;AAAEC,MAAAA;AAAF,KAAqB;AACpD,UAAM;AAAEC,MAAAA,KAAF;AAASC,MAAAA;AAAT,QAAoBF,WAAW,CAACG,MAAtC;AACAL,IAAAA,eAAe,CAAIM,SAAF,IAAiB;AACjC,UACC,CAAEA,SAAF,IACAA,SAAS,CAACH,KAAV,KAAoBA,KADpB,IAEAG,SAAS,CAACF,MAAV,KAAqBA,MAHtB,EAIE;AACD,eAAO;AACND,UAAAA,KAAK,EAAEI,IAAI,CAACC,KAAL,CAAYL,KAAZ,CADD;AAENC,UAAAA,MAAM,EAAEG,IAAI,CAACC,KAAL,CAAYJ,MAAZ;AAFF,SAAP;AAIA;;AACD,aAAOE,SAAP;AACA,KAZc,CAAf;AAaA,GAfgB,EAed,EAfc,CAAjB;AAiBA,QAAMG,QAAQ,GACb,4BAAC,iBAAD;AAAM,IAAA,KAAK,EAAGC,wBAAWC,YAAzB;AAAwC,IAAA,QAAQ,EAAGV;AAAnD,IADD;AAIA,SAAO,CAAEQ,QAAF,EAAYV,YAAZ,CAAP;AACA,CAzBD;;eA2BeD,iB","sourcesContent":["/**\n * External dependencies\n */\nimport { View, StyleSheet } from 'react-native';\n/**\n * WordPress dependencies\n */\nimport { useState, useCallback } from '@wordpress/element';\n\n/**\n * Hook which allows to listen the resize event of any target element when it changes sizes.\n *\n * @return {[JSX.Element, { width: number, height: number } | null]} An array of {Element} `resizeListener` and {?Object} `sizes` with properties `width` and `height`\n *\n * @example\n *\n * ```js\n * const App = () => {\n * \tconst [ resizeListener, sizes ] = useResizeObserver();\n *\n * \treturn (\n * \t\t<View>\n * \t\t\t{ resizeListener }\n * \t\t\tYour content here\n * \t\t</View>\n * \t);\n * };\n * ```\n *\n */\nconst useResizeObserver = () => {\n\tconst [ measurements, setMeasurements ] = useState( null );\n\n\tconst onLayout = useCallback( ( { nativeEvent } ) => {\n\t\tconst { width, height } = nativeEvent.layout;\n\t\tsetMeasurements( ( prevState ) => {\n\t\t\tif (\n\t\t\t\t! prevState ||\n\t\t\t\tprevState.width !== width ||\n\t\t\t\tprevState.height !== height\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\twidth: Math.floor( width ),\n\t\t\t\t\theight: Math.floor( height ),\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn prevState;\n\t\t} );\n\t}, [] );\n\n\tconst observer = (\n\t\t<View style={ StyleSheet.absoluteFill } onLayout={ onLayout } />\n\t);\n\n\treturn [ observer, measurements ];\n};\n\nexport default useResizeObserver;\n"]}
@@ -81,7 +81,8 @@ null);
81
81
  * @return {boolean} Whether viewport matches query.
82
82
  */
83
83
 
84
- const useViewportMatch = (breakpoint, operator = '>=') => {
84
+ const useViewportMatch = function (breakpoint) {
85
+ let operator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '>=';
85
86
  const simulatedWidth = (0, _element.useContext)(ViewportMatchWidthContext);
86
87
  const mediaQuery = !simulatedWidth && `(${CONDITIONS[operator]}: ${BREAKPOINTS[breakpoint]}px)`;
87
88
  const mediaQueryResult = (0, _useMediaQuery.default)(mediaQuery || undefined);
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-viewport-match/index.js"],"names":["BREAKPOINTS","huge","wide","large","medium","small","mobile","CONDITIONS","OPERATOR_EVALUATORS","breakpointValue","width","ViewportMatchWidthContext","useViewportMatch","breakpoint","operator","simulatedWidth","mediaQuery","mediaQueryResult","undefined","__experimentalWidthProvider","Provider"],"mappings":";;;;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,WAAW,GAAG;AACnBC,EAAAA,IAAI,EAAE,IADa;AAEnBC,EAAAA,IAAI,EAAE,IAFa;AAGnBC,EAAAA,KAAK,EAAE,GAHY;AAInBC,EAAAA,MAAM,EAAE,GAJW;AAKnBC,EAAAA,KAAK,EAAE,GALY;AAMnBC,EAAAA,MAAM,EAAE;AANW,CAApB;AASA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AACA,MAAMC,UAAU,GAAG;AAClB,QAAM,WADY;AAElB,OAAK;AAFa,CAAnB;AAKA;AACA;AACA;AACA;AACA;;AACA,MAAMC,mBAAmB,GAAG;AAC3B,QAAM,CAAEC,eAAF,EAAmBC,KAAnB,KAA8BA,KAAK,IAAID,eADlB;AAE3B,OAAK,CAAEA,eAAF,EAAmBC,KAAnB,KAA8BA,KAAK,GAAGD;AAFhB,CAA5B;AAKA,MAAME,yBAAyB,GAAG;AACjC;AAA+B,IADE,CAAlC;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,CAAEC,UAAF,EAAcC,QAAQ,GAAG,IAAzB,KAAmC;AAC3D,QAAMC,cAAc,GAAG,yBAAYJ,yBAAZ,CAAvB;AACA,QAAMK,UAAU,GACf,CAAED,cAAF,IACC,IAAIR,UAAU,CAAEO,QAAF,CAAc,KAAKd,WAAW,CAAEa,UAAF,CAAgB,KAF9D;AAGA,QAAMI,gBAAgB,GAAG,4BAAeD,UAAU,IAAIE,SAA7B,CAAzB;;AACA,MAAKH,cAAL,EAAsB;AACrB,WAAOP,mBAAmB,CAAEM,QAAF,CAAnB,CACNd,WAAW,CAAEa,UAAF,CADL,EAENE,cAFM,CAAP;AAIA;;AACD,SAAOE,gBAAP;AACA,CAbD;;AAeAL,gBAAgB,CAACO,2BAAjB,GACCR,yBAAyB,CAACS,QAD3B;eAGeR,gB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMediaQuery from '../use-media-query';\n\n/**\n * @typedef {\"huge\" | \"wide\" | \"large\" | \"medium\" | \"small\" | \"mobile\"} WPBreakpoint\n */\n\n/**\n * Hash of breakpoint names with pixel width at which it becomes effective.\n *\n * @see _breakpoints.scss\n *\n * @type {Record<WPBreakpoint, number>}\n */\nconst BREAKPOINTS = {\n\thuge: 1440,\n\twide: 1280,\n\tlarge: 960,\n\tmedium: 782,\n\tsmall: 600,\n\tmobile: 480,\n};\n\n/**\n * @typedef {\">=\" | \"<\"} WPViewportOperator\n */\n\n/**\n * Object mapping media query operators to the condition to be used.\n *\n * @type {Record<WPViewportOperator, string>}\n */\nconst CONDITIONS = {\n\t'>=': 'min-width',\n\t'<': 'max-width',\n};\n\n/**\n * Object mapping media query operators to a function that given a breakpointValue and a width evaluates if the operator matches the values.\n *\n * @type {Record<WPViewportOperator, (breakpointValue: number, width: number) => boolean>}\n */\nconst OPERATOR_EVALUATORS = {\n\t'>=': ( breakpointValue, width ) => width >= breakpointValue,\n\t'<': ( breakpointValue, width ) => width < breakpointValue,\n};\n\nconst ViewportMatchWidthContext = createContext(\n\t/** @type {null | number} */ ( null )\n);\n\n/**\n * Returns true if the viewport matches the given query, or false otherwise.\n *\n * @param {WPBreakpoint} breakpoint Breakpoint size name.\n * @param {WPViewportOperator} [operator=\">=\"] Viewport operator.\n *\n * @example\n *\n * ```js\n * useViewportMatch( 'huge', '<' );\n * useViewportMatch( 'medium' );\n * ```\n *\n * @return {boolean} Whether viewport matches query.\n */\nconst useViewportMatch = ( breakpoint, operator = '>=' ) => {\n\tconst simulatedWidth = useContext( ViewportMatchWidthContext );\n\tconst mediaQuery =\n\t\t! simulatedWidth &&\n\t\t`(${ CONDITIONS[ operator ] }: ${ BREAKPOINTS[ breakpoint ] }px)`;\n\tconst mediaQueryResult = useMediaQuery( mediaQuery || undefined );\n\tif ( simulatedWidth ) {\n\t\treturn OPERATOR_EVALUATORS[ operator ](\n\t\t\tBREAKPOINTS[ breakpoint ],\n\t\t\tsimulatedWidth\n\t\t);\n\t}\n\treturn mediaQueryResult;\n};\n\nuseViewportMatch.__experimentalWidthProvider =\n\tViewportMatchWidthContext.Provider;\n\nexport default useViewportMatch;\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-viewport-match/index.js"],"names":["BREAKPOINTS","huge","wide","large","medium","small","mobile","CONDITIONS","OPERATOR_EVALUATORS","breakpointValue","width","ViewportMatchWidthContext","useViewportMatch","breakpoint","operator","simulatedWidth","mediaQuery","mediaQueryResult","undefined","__experimentalWidthProvider","Provider"],"mappings":";;;;;;;;;AAGA;;AAKA;;AARA;AACA;AACA;;AAGA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,WAAW,GAAG;AACnBC,EAAAA,IAAI,EAAE,IADa;AAEnBC,EAAAA,IAAI,EAAE,IAFa;AAGnBC,EAAAA,KAAK,EAAE,GAHY;AAInBC,EAAAA,MAAM,EAAE,GAJW;AAKnBC,EAAAA,KAAK,EAAE,GALY;AAMnBC,EAAAA,MAAM,EAAE;AANW,CAApB;AASA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AACA,MAAMC,UAAU,GAAG;AAClB,QAAM,WADY;AAElB,OAAK;AAFa,CAAnB;AAKA;AACA;AACA;AACA;AACA;;AACA,MAAMC,mBAAmB,GAAG;AAC3B,QAAM,CAAEC,eAAF,EAAmBC,KAAnB,KAA8BA,KAAK,IAAID,eADlB;AAE3B,OAAK,CAAEA,eAAF,EAAmBC,KAAnB,KAA8BA,KAAK,GAAGD;AAFhB,CAA5B;AAKA,MAAME,yBAAyB,GAAG;AACjC;AAA+B,IADE,CAAlC;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,UAAEC,UAAF,EAAmC;AAAA,MAArBC,QAAqB,uEAAV,IAAU;AAC3D,QAAMC,cAAc,GAAG,yBAAYJ,yBAAZ,CAAvB;AACA,QAAMK,UAAU,GACf,CAAED,cAAF,IACC,IAAIR,UAAU,CAAEO,QAAF,CAAc,KAAKd,WAAW,CAAEa,UAAF,CAAgB,KAF9D;AAGA,QAAMI,gBAAgB,GAAG,4BAAeD,UAAU,IAAIE,SAA7B,CAAzB;;AACA,MAAKH,cAAL,EAAsB;AACrB,WAAOP,mBAAmB,CAAEM,QAAF,CAAnB,CACNd,WAAW,CAAEa,UAAF,CADL,EAENE,cAFM,CAAP;AAIA;;AACD,SAAOE,gBAAP;AACA,CAbD;;AAeAL,gBAAgB,CAACO,2BAAjB,GACCR,yBAAyB,CAACS,QAD3B;eAGeR,gB","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { createContext, useContext } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport useMediaQuery from '../use-media-query';\n\n/**\n * @typedef {\"huge\" | \"wide\" | \"large\" | \"medium\" | \"small\" | \"mobile\"} WPBreakpoint\n */\n\n/**\n * Hash of breakpoint names with pixel width at which it becomes effective.\n *\n * @see _breakpoints.scss\n *\n * @type {Record<WPBreakpoint, number>}\n */\nconst BREAKPOINTS = {\n\thuge: 1440,\n\twide: 1280,\n\tlarge: 960,\n\tmedium: 782,\n\tsmall: 600,\n\tmobile: 480,\n};\n\n/**\n * @typedef {\">=\" | \"<\"} WPViewportOperator\n */\n\n/**\n * Object mapping media query operators to the condition to be used.\n *\n * @type {Record<WPViewportOperator, string>}\n */\nconst CONDITIONS = {\n\t'>=': 'min-width',\n\t'<': 'max-width',\n};\n\n/**\n * Object mapping media query operators to a function that given a breakpointValue and a width evaluates if the operator matches the values.\n *\n * @type {Record<WPViewportOperator, (breakpointValue: number, width: number) => boolean>}\n */\nconst OPERATOR_EVALUATORS = {\n\t'>=': ( breakpointValue, width ) => width >= breakpointValue,\n\t'<': ( breakpointValue, width ) => width < breakpointValue,\n};\n\nconst ViewportMatchWidthContext = createContext(\n\t/** @type {null | number} */ ( null )\n);\n\n/**\n * Returns true if the viewport matches the given query, or false otherwise.\n *\n * @param {WPBreakpoint} breakpoint Breakpoint size name.\n * @param {WPViewportOperator} [operator=\">=\"] Viewport operator.\n *\n * @example\n *\n * ```js\n * useViewportMatch( 'huge', '<' );\n * useViewportMatch( 'medium' );\n * ```\n *\n * @return {boolean} Whether viewport matches query.\n */\nconst useViewportMatch = ( breakpoint, operator = '>=' ) => {\n\tconst simulatedWidth = useContext( ViewportMatchWidthContext );\n\tconst mediaQuery =\n\t\t! simulatedWidth &&\n\t\t`(${ CONDITIONS[ operator ] }: ${ BREAKPOINTS[ breakpoint ] }px)`;\n\tconst mediaQueryResult = useMediaQuery( mediaQuery || undefined );\n\tif ( simulatedWidth ) {\n\t\treturn OPERATOR_EVALUATORS[ operator ](\n\t\t\tBREAKPOINTS[ breakpoint ],\n\t\t\tsimulatedWidth\n\t\t);\n\t}\n\treturn mediaQueryResult;\n};\n\nuseViewportMatch.__experimentalWidthProvider =\n\tViewportMatchWidthContext.Provider;\n\nexport default useViewportMatch;\n"]}
@@ -35,9 +35,12 @@ var _usePrevious = _interopRequireDefault(require("../use-previous"));
35
35
  * @param {object} object Object which changes to compare.
36
36
  * @param {string} prefix Just a prefix to show when console logging.
37
37
  */
38
- function useWarnOnChange(object, prefix = 'Change detection') {
38
+ function useWarnOnChange(object) {
39
+ let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Change detection';
39
40
  const previousValues = (0, _usePrevious.default)(object);
40
- Object.entries(previousValues !== null && previousValues !== void 0 ? previousValues : []).forEach(([key, value]) => {
41
+ Object.entries(previousValues !== null && previousValues !== void 0 ? previousValues : []).forEach(_ref => {
42
+ let [key, value] = _ref;
43
+
41
44
  if (value !== object[
42
45
  /** @type {keyof typeof object} */
43
46
  key]) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/compose/src/hooks/use-warn-on-change/index.js"],"names":["useWarnOnChange","object","prefix","previousValues","Object","entries","forEach","key","value","console","warn"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;AAGA;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,eAAT,CAA0BC,MAA1B,EAAkCC,MAAM,GAAG,kBAA3C,EAAgE;AAC/D,QAAMC,cAAc,GAAG,0BAAaF,MAAb,CAAvB;AAEAG,EAAAA,MAAM,CAACC,OAAP,CAAgBF,cAAhB,aAAgBA,cAAhB,cAAgBA,cAAhB,GAAkC,EAAlC,EAAuCG,OAAvC,CAAgD,CAAE,CAAEC,GAAF,EAAOC,KAAP,CAAF,KAAsB;AACrE,QAAKA,KAAK,KAAKP,MAAM;AAAE;AAAqCM,IAAAA,GAAvC,CAArB,EAAsE;AACrE;AACAE,MAAAA,OAAO,CAACC,IAAR,CACE,GAAGR,MAAQ,KAAKK,GAAK,eADvB,EAECC,KAFD,EAGCP,MAAM;AAAE;AAAqCM,MAAAA,GAAvC;AACN;AAJD;AAMA;AACD,GAVD;AAWA;;eAEcP,e","sourcesContent":["/**\n * Internal dependencies\n */\nimport usePrevious from '../use-previous';\n\n// Disable reason: Object and object are distinctly different types in TypeScript and we mean the lowercase object in thise case\n// but eslint wants to force us to use `Object`. See https://stackoverflow.com/questions/49464634/difference-between-object-and-object-in-typescript\n/* eslint-disable jsdoc/check-types */\n/**\n * Hook that performs a shallow comparison between the preview value of an object\n * and the new one, if there's a difference, it prints it to the console.\n * this is useful in performance related work, to check why a component re-renders.\n *\n * @example\n *\n * ```jsx\n * function MyComponent(props) {\n * useWarnOnChange(props);\n *\n * return \"Something\";\n * }\n * ```\n *\n * @param {object} object Object which changes to compare.\n * @param {string} prefix Just a prefix to show when console logging.\n */\nfunction useWarnOnChange( object, prefix = 'Change detection' ) {\n\tconst previousValues = usePrevious( object );\n\n\tObject.entries( previousValues ?? [] ).forEach( ( [ key, value ] ) => {\n\t\tif ( value !== object[ /** @type {keyof typeof object} */ ( key ) ] ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`${ prefix }: ${ key } key changed:`,\n\t\t\t\tvalue,\n\t\t\t\tobject[ /** @type {keyof typeof object} */ ( key ) ]\n\t\t\t\t/* eslint-enable jsdoc/check-types */\n\t\t\t);\n\t\t}\n\t} );\n}\n\nexport default useWarnOnChange;\n"]}
1
+ {"version":3,"sources":["@wordpress/compose/src/hooks/use-warn-on-change/index.js"],"names":["useWarnOnChange","object","prefix","previousValues","Object","entries","forEach","key","value","console","warn"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;AAGA;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,eAAT,CAA0BC,MAA1B,EAAgE;AAAA,MAA9BC,MAA8B,uEAArB,kBAAqB;AAC/D,QAAMC,cAAc,GAAG,0BAAaF,MAAb,CAAvB;AAEAG,EAAAA,MAAM,CAACC,OAAP,CAAgBF,cAAhB,aAAgBA,cAAhB,cAAgBA,cAAhB,GAAkC,EAAlC,EAAuCG,OAAvC,CAAgD,QAAsB;AAAA,QAApB,CAAEC,GAAF,EAAOC,KAAP,CAAoB;;AACrE,QAAKA,KAAK,KAAKP,MAAM;AAAE;AAAqCM,IAAAA,GAAvC,CAArB,EAAsE;AACrE;AACAE,MAAAA,OAAO,CAACC,IAAR,CACE,GAAGR,MAAQ,KAAKK,GAAK,eADvB,EAECC,KAFD,EAGCP,MAAM;AAAE;AAAqCM,MAAAA,GAAvC;AACN;AAJD;AAMA;AACD,GAVD;AAWA;;eAEcP,e","sourcesContent":["/**\n * Internal dependencies\n */\nimport usePrevious from '../use-previous';\n\n// Disable reason: Object and object are distinctly different types in TypeScript and we mean the lowercase object in thise case\n// but eslint wants to force us to use `Object`. See https://stackoverflow.com/questions/49464634/difference-between-object-and-object-in-typescript\n/* eslint-disable jsdoc/check-types */\n/**\n * Hook that performs a shallow comparison between the preview value of an object\n * and the new one, if there's a difference, it prints it to the console.\n * this is useful in performance related work, to check why a component re-renders.\n *\n * @example\n *\n * ```jsx\n * function MyComponent(props) {\n * useWarnOnChange(props);\n *\n * return \"Something\";\n * }\n * ```\n *\n * @param {object} object Object which changes to compare.\n * @param {string} prefix Just a prefix to show when console logging.\n */\nfunction useWarnOnChange( object, prefix = 'Change detection' ) {\n\tconst previousValues = usePrevious( object );\n\n\tObject.entries( previousValues ?? [] ).forEach( ( [ key, value ] ) => {\n\t\tif ( value !== object[ /** @type {keyof typeof object} */ ( key ) ] ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(\n\t\t\t\t`${ prefix }: ${ key } key changed:`,\n\t\t\t\tvalue,\n\t\t\t\tobject[ /** @type {keyof typeof object} */ ( key ) ]\n\t\t\t\t/* eslint-enable jsdoc/check-types */\n\t\t\t);\n\t\t}\n\t} );\n}\n\nexport default useWarnOnChange;\n"]}