@fremtind/jkl-react-hooks
Advanced tools
Comparing version 1.0.0-alpha.11 to 1.0.0
@@ -1,3 +0,53 @@ | ||
import React, { useRef, useState, useLayoutEffect, useEffect } from 'react'; | ||
import React, { useRef, useState, useLayoutEffect, useEffect, useReducer } from 'react'; | ||
import { breakpoints } from '@fremtind/jkl-core'; | ||
function _defineProperty(obj, key, value) { | ||
if (key in obj) { | ||
Object.defineProperty(obj, key, { | ||
value: value, | ||
enumerable: true, | ||
configurable: true, | ||
writable: true | ||
}); | ||
} else { | ||
obj[key] = value; | ||
} | ||
return obj; | ||
} | ||
function ownKeys(object, enumerableOnly) { | ||
var keys = Object.keys(object); | ||
if (Object.getOwnPropertySymbols) { | ||
var symbols = Object.getOwnPropertySymbols(object); | ||
if (enumerableOnly) symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
}); | ||
keys.push.apply(keys, symbols); | ||
} | ||
return keys; | ||
} | ||
function _objectSpread2(target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i] != null ? arguments[i] : {}; | ||
if (i % 2) { | ||
ownKeys(Object(source), true).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}); | ||
} else if (Object.getOwnPropertyDescriptors) { | ||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | ||
} else { | ||
ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
} | ||
return target; | ||
} | ||
function _slicedToArray(arr, i) { | ||
@@ -172,3 +222,3 @@ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
fn(); | ||
fn(event); | ||
} | ||
@@ -189,2 +239,147 @@ | ||
export { useAnimatedHeight, useClickOutside, useFocusOutside, useKeyListener }; | ||
var hasWindowWithMutationObserver = function hasWindowWithMutationObserver() { | ||
return typeof window !== "undefined" && typeof MutationObserver !== "undefined"; | ||
}; | ||
var useMutationObserver = function useMutationObserver(targetRef, onObservation, config) { | ||
var observerRef = useRef(null); | ||
useEffect(function () { | ||
if (hasWindowWithMutationObserver()) { | ||
var observer = observerRef.current; | ||
var target = targetRef.current; | ||
if (observer) { | ||
observer.disconnect(); | ||
} | ||
observer = new MutationObserver(onObservation); | ||
if (target) { | ||
observer.observe(target, config); | ||
} | ||
} | ||
return function () { | ||
if (hasWindowWithMutationObserver() && observerRef && observerRef.current) { | ||
observerRef.current.disconnect(); | ||
} | ||
}; | ||
}, [targetRef]); | ||
}; | ||
var hasWindowWithIntersectionObserver = function hasWindowWithIntersectionObserver() { | ||
return typeof window !== "undefined" && typeof IntersectionObserver !== "undefined"; | ||
}; | ||
var useIntersectionObserver = function useIntersectionObserver(targetRef, onIntersect, fallback, options) { | ||
var observerRef = useRef(null); | ||
useEffect(function () { | ||
if (hasWindowWithIntersectionObserver()) { | ||
var observer = observerRef.current; | ||
var target = targetRef.current; | ||
if (observer) { | ||
observer.disconnect(); | ||
} | ||
observer = new IntersectionObserver(onIntersect, options); | ||
if (target) { | ||
observer.observe(target); | ||
} | ||
} else { | ||
fallback(); | ||
} | ||
return function () { | ||
if (hasWindowWithIntersectionObserver() && observerRef && observerRef.current) { | ||
observerRef.current.disconnect(); | ||
} | ||
}; | ||
}, [targetRef]); | ||
}; | ||
var ActionTypes; | ||
(function (ActionTypes) { | ||
ActionTypes["resized"] = "WINDOW_RESIZED"; | ||
})(ActionTypes || (ActionTypes = {})); | ||
var actionTypes = { | ||
resized: ActionTypes.resized | ||
}; | ||
var setDeviceSize = function setDeviceSize(width, height) { | ||
return { | ||
isSmallDevice: width < breakpoints.small, | ||
isMediumDevice: width > breakpoints.small && width < breakpoints.medium, | ||
isLargeDevice: width > breakpoints.medium && width < breakpoints.large, | ||
isXlDevice: width > breakpoints.large, | ||
isPortrait: height >= width, | ||
isLandscape: height < width, | ||
inner: { | ||
height: height, | ||
width: width | ||
} | ||
}; | ||
}; | ||
var initialState = { | ||
isSmallDevice: false, | ||
isMediumDevice: false, | ||
isLargeDevice: false, | ||
isXlDevice: false, | ||
isLandscape: false, | ||
isPortrait: false, | ||
inner: { | ||
height: 0, | ||
width: 0 | ||
} | ||
}; | ||
var init = function init() { | ||
var width = typeof window !== "undefined" ? window.innerWidth : 0; | ||
var height = typeof window !== "undefined" ? window.innerHeight : 0; | ||
return setDeviceSize(width, height); | ||
}; | ||
var reducer = function reducer(state, _ref) { | ||
var type = _ref.type, | ||
width = _ref.width, | ||
height = _ref.height; | ||
switch (type) { | ||
case actionTypes.resized: | ||
return _objectSpread2({}, state, {}, setDeviceSize(width, height)); | ||
} | ||
}; | ||
var useScreen = function useScreen() { | ||
var _useReducer = useReducer(reducer, initialState, init), | ||
_useReducer2 = _slicedToArray(_useReducer, 2), | ||
device = _useReducer2[0], | ||
deviceDispatch = _useReducer2[1]; | ||
var handleScreenChange = function handleScreenChange() { | ||
return requestAnimationFrame(function () { | ||
return deviceDispatch({ | ||
type: actionTypes.resized, | ||
width: window.innerWidth, | ||
height: window.innerHeight | ||
}); | ||
}); | ||
}; | ||
useEffect(function () { | ||
if (typeof window !== "undefined") { | ||
window.addEventListener("resize", handleScreenChange); | ||
} | ||
return function () { | ||
if (typeof window !== "undefined") { | ||
window.removeEventListener("resize", handleScreenChange); | ||
} | ||
}; | ||
}, []); | ||
return _objectSpread2({}, device); | ||
}; | ||
export { initialState as initialScreenState, useAnimatedHeight, useClickOutside, useFocusOutside, useIntersectionObserver, useKeyListener, useMutationObserver, useScreen }; |
@@ -1,1 +0,1 @@ | ||
import n,{useRef as t,useState as e,useLayoutEffect as r,useEffect as o}from"react";function c(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){if(!(Symbol.iterator in Object(n)||"[object Arguments]"===Object.prototype.toString.call(n)))return;var e=[],r=!0,o=!1,c=void 0;try{for(var i,u=n[Symbol.iterator]();!(r=(i=u.next()).done)&&(e.push(i.value),!t||e.length!==t);r=!0);}catch(n){o=!0,c=n}finally{try{r||null==u.return||u.return()}finally{if(o)throw c}}return e}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function i(n){var i,a,f=t(null),l=c(e(!0),2),s=l[0],d=l[1];function m(){var n=u(f);n&&n.removeAttribute("style")}function v(){var t=u(f);t&&(t.style.display="block",t.style.overflow="hidden",n?(t.style.height="0",t.style.height="".concat(t.scrollHeight,"px")):(t.style.height="".concat(t.scrollHeight,"px"),i=requestAnimationFrame((function(){a=requestAnimationFrame((function(){t.style.height="".concat(0,"px")}))}))))}return r((function(){s||v()}),[n]),o((function(){var n=u(f);return n&&n.addEventListener("transitionend",m),function(){n&&n.removeEventListener("transitionend",m)}}),[n]),o((function(){return d(!1),function(){cancelAnimationFrame(i),cancelAnimationFrame(a)}}),[]),[f,v]}function u(n){return n.current&&(n.current.el||n.current)}function a(t,e){function r(n){t&&t.current&&!t.current.contains(n.target)&&e()}n.useEffect((function(){return t&&document&&document.addEventListener("click",r),function(){t&&document&&document.removeEventListener("click",r)}}))}function f(t,e){function r(n){t&&t.current&&!t.current.contains(n.target)&&e()}n.useEffect((function(){return t&&document&&document.addEventListener("focusin",r),function(){t&&document&&document.removeEventListener("focusin",r)}}))}function l(n,t,e){function r(n){t&&!t.includes(n.key)||e()}"string"==typeof t&&(t=[t]),o((function(){return n&&n.current&&n.current.addEventListener("keydown",r),function(){n&&n.current&&n.current.removeEventListener("keydown",r)}}))}export{i as useAnimatedHeight,a as useClickOutside,f as useFocusOutside,l as useKeyListener}; | ||
import e,{useRef as n,useState as t,useLayoutEffect as r,useEffect as i,useReducer as o}from"react";import{breakpoints as c}from"@fremtind/jkl-core";function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function f(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?f(Object(t),!0).forEach((function(n){u(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):f(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],r=!0,i=!1,o=void 0;try{for(var c,u=e[Symbol.iterator]();!(r=(c=u.next()).done)&&(t.push(c.value),!n||t.length!==n);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function d(e){var o,c,u=n(null),f=s(t(!0),2),a=f[0],d=f[1];function v(){var e=l(u);e&&e.removeAttribute("style")}function m(){var n=l(u);n&&(n.style.display="block",n.style.overflow="hidden",e?(n.style.height="0",n.style.height="".concat(n.scrollHeight,"px")):(n.style.height="".concat(n.scrollHeight,"px"),o=requestAnimationFrame((function(){c=requestAnimationFrame((function(){n.style.height="".concat(0,"px")}))}))))}return r((function(){a||m()}),[e]),i((function(){var e=l(u);return e&&e.addEventListener("transitionend",v),function(){e&&e.removeEventListener("transitionend",v)}}),[e]),i((function(){return d(!1),function(){cancelAnimationFrame(o),cancelAnimationFrame(c)}}),[]),[u,m]}function l(e){return e.current&&(e.current.el||e.current)}function v(n,t){function r(e){n&&n.current&&!n.current.contains(e.target)&&t()}e.useEffect((function(){return n&&document&&document.addEventListener("click",r),function(){n&&document&&document.removeEventListener("click",r)}}))}function m(n,t){function r(e){n&&n.current&&!n.current.contains(e.target)&&t()}e.useEffect((function(){return n&&document&&document.addEventListener("focusin",r),function(){n&&document&&document.removeEventListener("focusin",r)}}))}function w(e,n,t){function r(e){n&&!n.includes(e.key)||t(e)}"string"==typeof n&&(n=[n]),i((function(){return e&&e.current&&e.current.addEventListener("keydown",r),function(){e&&e.current&&e.current.removeEventListener("keydown",r)}}))}var y,p=function(){return"undefined"!=typeof window&&"undefined"!=typeof MutationObserver},h=function(e,t,r){var o=n(null);i((function(){if(p()){var n=o.current,i=e.current;n&&n.disconnect(),n=new MutationObserver(t),i&&n.observe(i,r)}return function(){p()&&o&&o.current&&o.current.disconnect()}}),[e])},b=function(){return"undefined"!=typeof window&&"undefined"!=typeof IntersectionObserver},g=function(e,t,r,o){var c=n(null);i((function(){if(b()){var n=c.current,i=e.current;n&&n.disconnect(),n=new IntersectionObserver(t,o),i&&n.observe(i)}else r();return function(){b()&&c&&c.current&&c.current.disconnect()}}),[e])};!function(e){e.resized="WINDOW_RESIZED"}(y||(y={}));var O={resized:y.resized},E=function(e,n){return{isSmallDevice:e<c.small,isMediumDevice:e>c.small&&e<c.medium,isLargeDevice:e>c.medium&&e<c.large,isXlDevice:e>c.large,isPortrait:n>=e,isLandscape:n<e,inner:{height:n,width:e}}},j={isSmallDevice:!1,isMediumDevice:!1,isLargeDevice:!1,isXlDevice:!1,isLandscape:!1,isPortrait:!1,inner:{height:0,width:0}},D=function(){var e="undefined"!=typeof window?window.innerWidth:0,n="undefined"!=typeof window?window.innerHeight:0;return E(e,n)},L=function(e,n){var t=n.type,r=n.width,i=n.height;switch(t){case O.resized:return a({},e,{},E(r,i))}},P=function(){var e=s(o(L,j,D),2),n=e[0],t=e[1],r=function(){return requestAnimationFrame((function(){return t({type:O.resized,width:window.innerWidth,height:window.innerHeight})}))};return i((function(){return"undefined"!=typeof window&&window.addEventListener("resize",r),function(){"undefined"!=typeof window&&window.removeEventListener("resize",r)}}),[]),a({},n)};export{j as initialScreenState,d as useAnimatedHeight,v as useClickOutside,m as useFocusOutside,g as useIntersectionObserver,w as useKeyListener,h as useMutationObserver,P as useScreen}; |
@@ -9,3 +9,53 @@ 'use strict'; | ||
var React__default = _interopDefault(React); | ||
var jklCore = require('@fremtind/jkl-core'); | ||
function _defineProperty(obj, key, value) { | ||
if (key in obj) { | ||
Object.defineProperty(obj, key, { | ||
value: value, | ||
enumerable: true, | ||
configurable: true, | ||
writable: true | ||
}); | ||
} else { | ||
obj[key] = value; | ||
} | ||
return obj; | ||
} | ||
function ownKeys(object, enumerableOnly) { | ||
var keys = Object.keys(object); | ||
if (Object.getOwnPropertySymbols) { | ||
var symbols = Object.getOwnPropertySymbols(object); | ||
if (enumerableOnly) symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
}); | ||
keys.push.apply(keys, symbols); | ||
} | ||
return keys; | ||
} | ||
function _objectSpread2(target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i] != null ? arguments[i] : {}; | ||
if (i % 2) { | ||
ownKeys(Object(source), true).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}); | ||
} else if (Object.getOwnPropertyDescriptors) { | ||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | ||
} else { | ||
ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
} | ||
return target; | ||
} | ||
function _slicedToArray(arr, i) { | ||
@@ -180,3 +230,3 @@ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
fn(); | ||
fn(event); | ||
} | ||
@@ -197,5 +247,154 @@ | ||
var hasWindowWithMutationObserver = function hasWindowWithMutationObserver() { | ||
return typeof window !== "undefined" && typeof MutationObserver !== "undefined"; | ||
}; | ||
var useMutationObserver = function useMutationObserver(targetRef, onObservation, config) { | ||
var observerRef = React.useRef(null); | ||
React.useEffect(function () { | ||
if (hasWindowWithMutationObserver()) { | ||
var observer = observerRef.current; | ||
var target = targetRef.current; | ||
if (observer) { | ||
observer.disconnect(); | ||
} | ||
observer = new MutationObserver(onObservation); | ||
if (target) { | ||
observer.observe(target, config); | ||
} | ||
} | ||
return function () { | ||
if (hasWindowWithMutationObserver() && observerRef && observerRef.current) { | ||
observerRef.current.disconnect(); | ||
} | ||
}; | ||
}, [targetRef]); | ||
}; | ||
var hasWindowWithIntersectionObserver = function hasWindowWithIntersectionObserver() { | ||
return typeof window !== "undefined" && typeof IntersectionObserver !== "undefined"; | ||
}; | ||
var useIntersectionObserver = function useIntersectionObserver(targetRef, onIntersect, fallback, options) { | ||
var observerRef = React.useRef(null); | ||
React.useEffect(function () { | ||
if (hasWindowWithIntersectionObserver()) { | ||
var observer = observerRef.current; | ||
var target = targetRef.current; | ||
if (observer) { | ||
observer.disconnect(); | ||
} | ||
observer = new IntersectionObserver(onIntersect, options); | ||
if (target) { | ||
observer.observe(target); | ||
} | ||
} else { | ||
fallback(); | ||
} | ||
return function () { | ||
if (hasWindowWithIntersectionObserver() && observerRef && observerRef.current) { | ||
observerRef.current.disconnect(); | ||
} | ||
}; | ||
}, [targetRef]); | ||
}; | ||
var ActionTypes; | ||
(function (ActionTypes) { | ||
ActionTypes["resized"] = "WINDOW_RESIZED"; | ||
})(ActionTypes || (ActionTypes = {})); | ||
var actionTypes = { | ||
resized: ActionTypes.resized | ||
}; | ||
var setDeviceSize = function setDeviceSize(width, height) { | ||
return { | ||
isSmallDevice: width < jklCore.breakpoints.small, | ||
isMediumDevice: width > jklCore.breakpoints.small && width < jklCore.breakpoints.medium, | ||
isLargeDevice: width > jklCore.breakpoints.medium && width < jklCore.breakpoints.large, | ||
isXlDevice: width > jklCore.breakpoints.large, | ||
isPortrait: height >= width, | ||
isLandscape: height < width, | ||
inner: { | ||
height: height, | ||
width: width | ||
} | ||
}; | ||
}; | ||
var initialState = { | ||
isSmallDevice: false, | ||
isMediumDevice: false, | ||
isLargeDevice: false, | ||
isXlDevice: false, | ||
isLandscape: false, | ||
isPortrait: false, | ||
inner: { | ||
height: 0, | ||
width: 0 | ||
} | ||
}; | ||
var init = function init() { | ||
var width = typeof window !== "undefined" ? window.innerWidth : 0; | ||
var height = typeof window !== "undefined" ? window.innerHeight : 0; | ||
return setDeviceSize(width, height); | ||
}; | ||
var reducer = function reducer(state, _ref) { | ||
var type = _ref.type, | ||
width = _ref.width, | ||
height = _ref.height; | ||
switch (type) { | ||
case actionTypes.resized: | ||
return _objectSpread2({}, state, {}, setDeviceSize(width, height)); | ||
} | ||
}; | ||
var useScreen = function useScreen() { | ||
var _useReducer = React.useReducer(reducer, initialState, init), | ||
_useReducer2 = _slicedToArray(_useReducer, 2), | ||
device = _useReducer2[0], | ||
deviceDispatch = _useReducer2[1]; | ||
var handleScreenChange = function handleScreenChange() { | ||
return requestAnimationFrame(function () { | ||
return deviceDispatch({ | ||
type: actionTypes.resized, | ||
width: window.innerWidth, | ||
height: window.innerHeight | ||
}); | ||
}); | ||
}; | ||
React.useEffect(function () { | ||
if (typeof window !== "undefined") { | ||
window.addEventListener("resize", handleScreenChange); | ||
} | ||
return function () { | ||
if (typeof window !== "undefined") { | ||
window.removeEventListener("resize", handleScreenChange); | ||
} | ||
}; | ||
}, []); | ||
return _objectSpread2({}, device); | ||
}; | ||
exports.initialScreenState = initialState; | ||
exports.useAnimatedHeight = useAnimatedHeight; | ||
exports.useClickOutside = useClickOutside; | ||
exports.useFocusOutside = useFocusOutside; | ||
exports.useIntersectionObserver = useIntersectionObserver; | ||
exports.useKeyListener = useKeyListener; | ||
exports.useMutationObserver = useMutationObserver; | ||
exports.useScreen = useScreen; |
@@ -1,3 +0,53 @@ | ||
import React, { useRef, useState, useLayoutEffect, useEffect } from 'react'; | ||
import React, { useRef, useState, useLayoutEffect, useEffect, useReducer } from 'react'; | ||
import { breakpoints } from '@fremtind/jkl-core'; | ||
function _defineProperty(obj, key, value) { | ||
if (key in obj) { | ||
Object.defineProperty(obj, key, { | ||
value: value, | ||
enumerable: true, | ||
configurable: true, | ||
writable: true | ||
}); | ||
} else { | ||
obj[key] = value; | ||
} | ||
return obj; | ||
} | ||
function ownKeys(object, enumerableOnly) { | ||
var keys = Object.keys(object); | ||
if (Object.getOwnPropertySymbols) { | ||
var symbols = Object.getOwnPropertySymbols(object); | ||
if (enumerableOnly) symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
}); | ||
keys.push.apply(keys, symbols); | ||
} | ||
return keys; | ||
} | ||
function _objectSpread2(target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i] != null ? arguments[i] : {}; | ||
if (i % 2) { | ||
ownKeys(Object(source), true).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}); | ||
} else if (Object.getOwnPropertyDescriptors) { | ||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | ||
} else { | ||
ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
} | ||
return target; | ||
} | ||
function _slicedToArray(arr, i) { | ||
@@ -172,3 +222,3 @@ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
fn(); | ||
fn(event); | ||
} | ||
@@ -189,2 +239,147 @@ | ||
export { useAnimatedHeight, useClickOutside, useFocusOutside, useKeyListener }; | ||
var hasWindowWithMutationObserver = function hasWindowWithMutationObserver() { | ||
return typeof window !== "undefined" && typeof MutationObserver !== "undefined"; | ||
}; | ||
var useMutationObserver = function useMutationObserver(targetRef, onObservation, config) { | ||
var observerRef = useRef(null); | ||
useEffect(function () { | ||
if (hasWindowWithMutationObserver()) { | ||
var observer = observerRef.current; | ||
var target = targetRef.current; | ||
if (observer) { | ||
observer.disconnect(); | ||
} | ||
observer = new MutationObserver(onObservation); | ||
if (target) { | ||
observer.observe(target, config); | ||
} | ||
} | ||
return function () { | ||
if (hasWindowWithMutationObserver() && observerRef && observerRef.current) { | ||
observerRef.current.disconnect(); | ||
} | ||
}; | ||
}, [targetRef]); | ||
}; | ||
var hasWindowWithIntersectionObserver = function hasWindowWithIntersectionObserver() { | ||
return typeof window !== "undefined" && typeof IntersectionObserver !== "undefined"; | ||
}; | ||
var useIntersectionObserver = function useIntersectionObserver(targetRef, onIntersect, fallback, options) { | ||
var observerRef = useRef(null); | ||
useEffect(function () { | ||
if (hasWindowWithIntersectionObserver()) { | ||
var observer = observerRef.current; | ||
var target = targetRef.current; | ||
if (observer) { | ||
observer.disconnect(); | ||
} | ||
observer = new IntersectionObserver(onIntersect, options); | ||
if (target) { | ||
observer.observe(target); | ||
} | ||
} else { | ||
fallback(); | ||
} | ||
return function () { | ||
if (hasWindowWithIntersectionObserver() && observerRef && observerRef.current) { | ||
observerRef.current.disconnect(); | ||
} | ||
}; | ||
}, [targetRef]); | ||
}; | ||
var ActionTypes; | ||
(function (ActionTypes) { | ||
ActionTypes["resized"] = "WINDOW_RESIZED"; | ||
})(ActionTypes || (ActionTypes = {})); | ||
var actionTypes = { | ||
resized: ActionTypes.resized | ||
}; | ||
var setDeviceSize = function setDeviceSize(width, height) { | ||
return { | ||
isSmallDevice: width < breakpoints.small, | ||
isMediumDevice: width > breakpoints.small && width < breakpoints.medium, | ||
isLargeDevice: width > breakpoints.medium && width < breakpoints.large, | ||
isXlDevice: width > breakpoints.large, | ||
isPortrait: height >= width, | ||
isLandscape: height < width, | ||
inner: { | ||
height: height, | ||
width: width | ||
} | ||
}; | ||
}; | ||
var initialState = { | ||
isSmallDevice: false, | ||
isMediumDevice: false, | ||
isLargeDevice: false, | ||
isXlDevice: false, | ||
isLandscape: false, | ||
isPortrait: false, | ||
inner: { | ||
height: 0, | ||
width: 0 | ||
} | ||
}; | ||
var init = function init() { | ||
var width = typeof window !== "undefined" ? window.innerWidth : 0; | ||
var height = typeof window !== "undefined" ? window.innerHeight : 0; | ||
return setDeviceSize(width, height); | ||
}; | ||
var reducer = function reducer(state, _ref) { | ||
var type = _ref.type, | ||
width = _ref.width, | ||
height = _ref.height; | ||
switch (type) { | ||
case actionTypes.resized: | ||
return _objectSpread2({}, state, {}, setDeviceSize(width, height)); | ||
} | ||
}; | ||
var useScreen = function useScreen() { | ||
var _useReducer = useReducer(reducer, initialState, init), | ||
_useReducer2 = _slicedToArray(_useReducer, 2), | ||
device = _useReducer2[0], | ||
deviceDispatch = _useReducer2[1]; | ||
var handleScreenChange = function handleScreenChange() { | ||
return requestAnimationFrame(function () { | ||
return deviceDispatch({ | ||
type: actionTypes.resized, | ||
width: window.innerWidth, | ||
height: window.innerHeight | ||
}); | ||
}); | ||
}; | ||
useEffect(function () { | ||
if (typeof window !== "undefined") { | ||
window.addEventListener("resize", handleScreenChange); | ||
} | ||
return function () { | ||
if (typeof window !== "undefined") { | ||
window.removeEventListener("resize", handleScreenChange); | ||
} | ||
}; | ||
}, []); | ||
return _objectSpread2({}, device); | ||
}; | ||
export { initialState as initialScreenState, useAnimatedHeight, useClickOutside, useFocusOutside, useIntersectionObserver, useKeyListener, useMutationObserver, useScreen }; |
@@ -1,1 +0,1 @@ | ||
import n,{useRef as t,useState as e,useLayoutEffect as r,useEffect as o}from"react";function c(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){if(!(Symbol.iterator in Object(n)||"[object Arguments]"===Object.prototype.toString.call(n)))return;var e=[],r=!0,o=!1,c=void 0;try{for(var i,u=n[Symbol.iterator]();!(r=(i=u.next()).done)&&(e.push(i.value),!t||e.length!==t);r=!0);}catch(n){o=!0,c=n}finally{try{r||null==u.return||u.return()}finally{if(o)throw c}}return e}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function i(n){var i,a,f=t(null),l=c(e(!0),2),s=l[0],d=l[1];function m(){var n=u(f);n&&n.removeAttribute("style")}function v(){var t=u(f);t&&(t.style.display="block",t.style.overflow="hidden",n?(t.style.height="0",t.style.height="".concat(t.scrollHeight,"px")):(t.style.height="".concat(t.scrollHeight,"px"),i=requestAnimationFrame((function(){a=requestAnimationFrame((function(){t.style.height="".concat(0,"px")}))}))))}return r((function(){s||v()}),[n]),o((function(){var n=u(f);return n&&n.addEventListener("transitionend",m),function(){n&&n.removeEventListener("transitionend",m)}}),[n]),o((function(){return d(!1),function(){cancelAnimationFrame(i),cancelAnimationFrame(a)}}),[]),[f,v]}function u(n){return n.current&&(n.current.el||n.current)}function a(t,e){function r(n){t&&t.current&&!t.current.contains(n.target)&&e()}n.useEffect((function(){return t&&document&&document.addEventListener("click",r),function(){t&&document&&document.removeEventListener("click",r)}}))}function f(t,e){function r(n){t&&t.current&&!t.current.contains(n.target)&&e()}n.useEffect((function(){return t&&document&&document.addEventListener("focusin",r),function(){t&&document&&document.removeEventListener("focusin",r)}}))}function l(n,t,e){function r(n){t&&!t.includes(n.key)||e()}"string"==typeof t&&(t=[t]),o((function(){return n&&n.current&&n.current.addEventListener("keydown",r),function(){n&&n.current&&n.current.removeEventListener("keydown",r)}}))}export{i as useAnimatedHeight,a as useClickOutside,f as useFocusOutside,l as useKeyListener}; | ||
import e,{useRef as n,useState as t,useLayoutEffect as r,useEffect as i,useReducer as o}from"react";import{breakpoints as c}from"@fremtind/jkl-core";function u(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function f(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?f(Object(t),!0).forEach((function(n){u(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):f(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],r=!0,i=!1,o=void 0;try{for(var c,u=e[Symbol.iterator]();!(r=(c=u.next()).done)&&(t.push(c.value),!n||t.length!==n);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return t}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function d(e){var o,c,u=n(null),f=s(t(!0),2),a=f[0],d=f[1];function v(){var e=l(u);e&&e.removeAttribute("style")}function m(){var n=l(u);n&&(n.style.display="block",n.style.overflow="hidden",e?(n.style.height="0",n.style.height="".concat(n.scrollHeight,"px")):(n.style.height="".concat(n.scrollHeight,"px"),o=requestAnimationFrame((function(){c=requestAnimationFrame((function(){n.style.height="".concat(0,"px")}))}))))}return r((function(){a||m()}),[e]),i((function(){var e=l(u);return e&&e.addEventListener("transitionend",v),function(){e&&e.removeEventListener("transitionend",v)}}),[e]),i((function(){return d(!1),function(){cancelAnimationFrame(o),cancelAnimationFrame(c)}}),[]),[u,m]}function l(e){return e.current&&(e.current.el||e.current)}function v(n,t){function r(e){n&&n.current&&!n.current.contains(e.target)&&t()}e.useEffect((function(){return n&&document&&document.addEventListener("click",r),function(){n&&document&&document.removeEventListener("click",r)}}))}function m(n,t){function r(e){n&&n.current&&!n.current.contains(e.target)&&t()}e.useEffect((function(){return n&&document&&document.addEventListener("focusin",r),function(){n&&document&&document.removeEventListener("focusin",r)}}))}function w(e,n,t){function r(e){n&&!n.includes(e.key)||t(e)}"string"==typeof n&&(n=[n]),i((function(){return e&&e.current&&e.current.addEventListener("keydown",r),function(){e&&e.current&&e.current.removeEventListener("keydown",r)}}))}var y,p=function(){return"undefined"!=typeof window&&"undefined"!=typeof MutationObserver},h=function(e,t,r){var o=n(null);i((function(){if(p()){var n=o.current,i=e.current;n&&n.disconnect(),n=new MutationObserver(t),i&&n.observe(i,r)}return function(){p()&&o&&o.current&&o.current.disconnect()}}),[e])},b=function(){return"undefined"!=typeof window&&"undefined"!=typeof IntersectionObserver},g=function(e,t,r,o){var c=n(null);i((function(){if(b()){var n=c.current,i=e.current;n&&n.disconnect(),n=new IntersectionObserver(t,o),i&&n.observe(i)}else r();return function(){b()&&c&&c.current&&c.current.disconnect()}}),[e])};!function(e){e.resized="WINDOW_RESIZED"}(y||(y={}));var O={resized:y.resized},E=function(e,n){return{isSmallDevice:e<c.small,isMediumDevice:e>c.small&&e<c.medium,isLargeDevice:e>c.medium&&e<c.large,isXlDevice:e>c.large,isPortrait:n>=e,isLandscape:n<e,inner:{height:n,width:e}}},j={isSmallDevice:!1,isMediumDevice:!1,isLargeDevice:!1,isXlDevice:!1,isLandscape:!1,isPortrait:!1,inner:{height:0,width:0}},D=function(){var e="undefined"!=typeof window?window.innerWidth:0,n="undefined"!=typeof window?window.innerHeight:0;return E(e,n)},L=function(e,n){var t=n.type,r=n.width,i=n.height;switch(t){case O.resized:return a({},e,{},E(r,i))}},P=function(){var e=s(o(L,j,D),2),n=e[0],t=e[1],r=function(){return requestAnimationFrame((function(){return t({type:O.resized,width:window.innerWidth,height:window.innerHeight})}))};return i((function(){return"undefined"!=typeof window&&window.addEventListener("resize",r),function(){"undefined"!=typeof window&&window.removeEventListener("resize",r)}}),[]),a({},n)};export{j as initialScreenState,d as useAnimatedHeight,v as useClickOutside,m as useFocusOutside,g as useIntersectionObserver,w as useKeyListener,h as useMutationObserver,P as useScreen}; |
@@ -5,1 +5,5 @@ export { useAnimatedHeight } from "./animation"; | ||
export { useKeyListener } from "./useKeyListener"; | ||
export { useMutationObserver } from "./useMutationObserver/useMutationObserver"; | ||
export { useIntersectionObserver } from "./useIntersectionObserver/useIntersectionObserver"; | ||
export { useScreen } from "./useScreen/useScreen"; | ||
export { initialState as initialScreenState } from "./useScreen/state"; |
import { RefObject } from "react"; | ||
export declare function useKeyListener(ref: RefObject<HTMLElement> | null, keys: string[] | string | null, fn: () => void): void; | ||
export declare function useKeyListener(ref: RefObject<HTMLElement> | null, keys: string[] | string | null, fn: (event: KeyboardEvent) => void): void; |
103
CHANGELOG.md
@@ -6,12 +6,27 @@ # Change Log | ||
# [1.0.0-alpha.11](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.10...@fremtind/jkl-react-hooks@1.0.0-alpha.11) (2019-11-01) | ||
# [1.0.0](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.4.1...@fremtind/jkl-react-hooks@1.0.0) (2020-03-05) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
### Bug Fixes | ||
* **react-hooks:** fix check for window object in useScreen ([fce24bc](https://github.com/fremtind/jokul/commit/fce24bc8bf96960a15334017c2c54fc7cd75762d)) | ||
* **react-hooks:** fix import ([c47c0bc](https://github.com/fremtind/jokul/commit/c47c0bcb9ebf320ef67800c8925179406504a520)) | ||
### Features | ||
# [1.0.0-alpha.10](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.2...@fremtind/jkl-react-hooks@1.0.0-alpha.10) (2019-11-01) | ||
* **core:** add new func colors, remove illustration colors ([7847426](https://github.com/fremtind/jokul/commit/7847426fe77f723cd68085d4d995b3d867693c86)) | ||
* **react-hooks:** add hook for responsivity in js ([4c36d27](https://github.com/fremtind/jokul/commit/4c36d27a8928a329e4ead16636f7f5a33d6b423f)) | ||
### BREAKING CHANGES | ||
* **core:** Removes illustration colors: sand, jord, sol, blomst, skog, hav | ||
## [0.4.1](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.4.0...@fremtind/jkl-react-hooks@0.4.1) (2020-02-19) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
@@ -23,4 +38,21 @@ | ||
# [1.0.0-alpha.9](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.8...@fremtind/jkl-react-hooks@1.0.0-alpha.9) (2019-11-01) | ||
# [0.4.0](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.3.1...@fremtind/jkl-react-hooks@0.4.0) (2020-02-18) | ||
### Bug Fixes | ||
* make use of new color token (changed name) ([f14c149](https://github.com/fremtind/jokul/commit/f14c149f779e65fe0775afde4421aef26be8ed1d)) | ||
* use new text-style mixins ([2873a57](https://github.com/fremtind/jokul/commit/2873a57f4570ddb87a7390a773433d26a9fde4ac)) | ||
### Features | ||
* **react-hooks:** pass event to function in useKeyListener ([432ce11](https://github.com/fremtind/jokul/commit/432ce1160d85c7674e98277b2309d93f9f355d46)) | ||
## [0.3.1](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.3.0...@fremtind/jkl-react-hooks@0.3.1) (2020-01-16) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
@@ -32,4 +64,25 @@ | ||
# [1.0.0-alpha.8](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.7...@fremtind/jkl-react-hooks@1.0.0-alpha.8) (2019-11-01) | ||
# [0.3.0](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.5...@fremtind/jkl-react-hooks@0.3.0) (2020-01-16) | ||
### Bug Fixes | ||
* fix lint issues after eslint update ([259db8b](https://github.com/fremtind/jokul/commit/259db8bf27f6751ec86c413129162728c3c903d6)) | ||
* **dividerline:** use intersection hook in dividerline ([4d983b6](https://github.com/fremtind/jokul/commit/4d983b6dec70efd8ff60093f9e103a1344867f86)) | ||
* **react-hooks:** fix click outside example ([51a1a71](https://github.com/fremtind/jokul/commit/51a1a71ccc2a6ad69bf6eb52e8e3f30d12f7d32a)) | ||
### Features | ||
* **portal:** use examples as documentation for all comp ([e99e56a](https://github.com/fremtind/jokul/commit/e99e56ab2f5bf13cd0e72bf010e6472a08ffabe9)) | ||
* **react-hooks:** add intersection observer hook ([6a6e787](https://github.com/fremtind/jokul/commit/6a6e7875542e8563d7f802500525194335c9ba19)) | ||
* **react-hooks:** add mutationobserver component ([d6caea6](https://github.com/fremtind/jokul/commit/d6caea6dca91cc7a92a193fc8ac9bdda6906f2e0)) | ||
* **react-hooks:** improve react hooks documentation, add to portal ([bb0ff2e](https://github.com/fremtind/jokul/commit/bb0ff2ea005343dd1ea2e5fda121b9aef478359d)) | ||
## 0.2.14 (2020-01-10) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
@@ -41,3 +94,3 @@ | ||
# [1.0.0-alpha.7](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.6...@fremtind/jkl-react-hooks@1.0.0-alpha.7) (2019-10-31) | ||
## 0.2.13 (2020-01-10) | ||
@@ -50,3 +103,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.6](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.5...@fremtind/jkl-react-hooks@1.0.0-alpha.6) (2019-10-25) | ||
## 0.2.12 (2020-01-08) | ||
@@ -59,3 +112,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.5](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.4...@fremtind/jkl-react-hooks@1.0.0-alpha.5) (2019-10-25) | ||
## 0.2.11 (2020-01-07) | ||
@@ -68,3 +121,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.4](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.3...@fremtind/jkl-react-hooks@1.0.0-alpha.4) (2019-10-25) | ||
## 0.2.10 (2020-01-07) | ||
@@ -77,3 +130,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.3](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.2...@fremtind/jkl-react-hooks@1.0.0-alpha.3) (2019-10-25) | ||
## 0.2.9 (2020-01-07) | ||
@@ -86,3 +139,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.2](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.1...@fremtind/jkl-react-hooks@1.0.0-alpha.2) (2019-10-24) | ||
## 0.2.8 (2019-12-20) | ||
@@ -95,3 +148,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.1](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@1.0.0-alpha.0...@fremtind/jkl-react-hooks@1.0.0-alpha.1) (2019-10-24) | ||
## 0.2.7 (2019-12-20) | ||
@@ -104,3 +157,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# [1.0.0-alpha.0](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.2...@fremtind/jkl-react-hooks@1.0.0-alpha.0) (2019-10-24) | ||
## 0.2.6 (2019-12-20) | ||
@@ -113,3 +166,3 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
## [0.2.2](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.1...@fremtind/jkl-react-hooks@0.2.2) (2019-10-09) | ||
## 0.2.5 (2019-12-20) | ||
@@ -122,23 +175,29 @@ **Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
## [0.2.1](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.0...@fremtind/jkl-react-hooks@0.2.1) (2019-09-26) | ||
## 0.2.4 (2019-12-20) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
## 0.2.3 (2019-12-19) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
## [0.2.2](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.1...@fremtind/jkl-react-hooks@0.2.2) (2019-10-09) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
## [0.2.1](https://github.com/fremtind/jokul/compare/@fremtind/jkl-react-hooks@0.2.0...@fremtind/jkl-react-hooks@0.2.1) (2019-09-26) | ||
**Note:** Version bump only for package @fremtind/jkl-react-hooks | ||
# 0.2.0 (2019-08-30) | ||
### Bug Fixes | ||
* **react-hooks:** add checks for document existence ([accbd3c](https://github.com/fremtind/jokul/commit/accbd3c)) | ||
* **react-hooks:** use correct event firing in tests ([3f74393](https://github.com/fremtind/jokul/commit/3f74393)) | ||
- **react-hooks:** add checks for document existence ([accbd3c](https://github.com/fremtind/jokul/commit/accbd3c)) | ||
- **react-hooks:** use correct event firing in tests ([3f74393](https://github.com/fremtind/jokul/commit/3f74393)) | ||
### Features | ||
* **react-hooks:** add key listener hook ([9ba7417](https://github.com/fremtind/jokul/commit/9ba7417)) | ||
* **react-hooks:** extract animation hook into separate package ([706ad61](https://github.com/fremtind/jokul/commit/706ad61)) | ||
* **react-hooks,core:** move useClickOutside to react-hooks ([47626b7](https://github.com/fremtind/jokul/commit/47626b7)) | ||
- **react-hooks:** add key listener hook ([9ba7417](https://github.com/fremtind/jokul/commit/9ba7417)) | ||
- **react-hooks:** extract animation hook into separate package ([706ad61](https://github.com/fremtind/jokul/commit/706ad61)) | ||
- **react-hooks,core:** move useClickOutside to react-hooks ([47626b7](https://github.com/fremtind/jokul/commit/47626b7)) |
{ | ||
"name": "@fremtind/jkl-react-hooks", | ||
"version": "1.0.0-alpha.11", | ||
"version": "1.0.0", | ||
"publishConfig": { | ||
@@ -8,3 +8,3 @@ "access": "public" | ||
"description": "Jøkul react button components", | ||
"homepage": "https://fremtind.github.io/jokul/", | ||
"homepage": "https://fremtind.github.io/jokul", | ||
"keywords": [ | ||
@@ -34,8 +34,11 @@ "hooks", | ||
"dev:style": "lerna exec --scope=@fremtind/jkl-button yarn build:watch", | ||
"dev:js": "parcel example/index.html", | ||
"dev:js": "parcel documentation/index.html", | ||
"dev": "run-p dev:*" | ||
}, | ||
"devDependencies": { | ||
"@fremtind/browserslist-config-jkl": "^1.0.0-alpha.11" | ||
"@fremtind/browserslist-config-jkl": "^0.4.14" | ||
}, | ||
"dependencies": { | ||
"@fremtind/jkl-core": "^4.0.0" | ||
}, | ||
"peerDependencies": { | ||
@@ -57,3 +60,3 @@ "@types/react": "^16.8.17", | ||
], | ||
"gitHead": "72d828b382d0df6d4201fa92c449bfd8e775bcd6" | ||
"gitHead": "8934422f5b382e4b2a21aa886e566775390ecf28" | ||
} |
@@ -0,4 +1,21 @@ | ||
# [`@fremtind/jkl-react-hooks`](https://fremtind.github.io/jokul/react-hooks/documentation/hooks/) | ||
## Beskrivelse | ||
[Bruk og prinsipper](https://fremtind.github.io/jokul/react-hooks/documentation/hooks/). | ||
## Kom i gang | ||
[Lær hvordan du kan ta i bruk Jøkul](https://fremtind.github.io/jokul/developer/getting-started/) | ||
## Bruk av React-pakken | ||
### Installasjon | ||
1. Installér pakken med `yarn add @fremtind/jkl-react-hooks` eller `npm i @fremtind/jkl-react-hooks`. | ||
2. Importer React-pakken: | ||
```js | ||
import { useIntersectionObserver } from "@fremtind/jkl-react-hooks"; | ||
``` |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
51002
18
1105
0
22
5
+ Added@fremtind/jkl-core@^4.0.0
+ Added@babel/runtime@7.25.6(transitive)
+ Added@fremtind/jkl-core@4.21.1(transitive)
+ Addedclassnames@2.5.1(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)