UNPKG

next-prefers-theme

Version:

Next.js css media query prefers-* system preference detection & theming.

3 lines (2 loc) 5.09 kB
var __defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,r,t)=>r in e?__defProp(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,__spreadValues=(e,r)=>{for(var t in r||(r={}))__hasOwnProp.call(r,t)&&__defNormalProp(e,t,r[t]);if(__getOwnPropSymbols)for(var t of __getOwnPropSymbols(r))__propIsEnum.call(r,t)&&__defNormalProp(e,t,r[t]);return e},__spreadProps=(e,r)=>__defProps(e,__getOwnPropDescs(r));!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self)["next-prefers-theme"]={},e.React)}(this,(function(e,r){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=t(r);const o=Object.freeze({theme:{_default:"light",attribute:"data-theme",query:"(prefers-color-scheme: dark)",set:e=>!0===e?"dark":"light"},motion:{_default:"no-preference",attribute:"data-reduced-motion",query:"(prefers-reduced-motion: reduce)",set:e=>!0===e?"reduce":"no-preference"},contrast:{_default:"no-preference",attribute:"data-contrast",query:"(prefers-contrast: more)",set:e=>!0===e?"more":window.matchMedia("(prefers-contrast: less)").matches?"less":"no-preference"},data:{_default:"no-preference",attribute:"data-reduced-data",query:"(prefers-reduced-data: reduce)",set:e=>!0===e?"reduce":"no-preference"}}),a=Object.freeze(Object.keys(o).reduce(((e,r)=>(e[r]=o[r]._default,e)),{})),n=Object.freeze(Object.keys(o).reduce(((e,r)=>(e[r]=o[r].attribute,e)),{})),c=Object.freeze(Object.keys(o).reduce(((e,r)=>(e[r]=null,e)),{})),d=["not all",'"(navigation-controls)"'],f=e=>d.indexOf(e.media)<0;var u={exports:{}},l={},p=s.default,i=60103;if(l.Fragment=60107,"function"==typeof Symbol&&Symbol.for){var _=Symbol.for;i=_("react.element"),l.Fragment=_("react.fragment")}var y=p.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,b=Object.prototype.hasOwnProperty,m={key:!0,ref:!0,__self:!0,__source:!0};function h(e,r,t){var s,o={},a=null,n=null;for(s in void 0!==t&&(a=""+t),void 0!==r.key&&(a=""+r.key),void 0!==r.ref&&(n=r.ref),r)b.call(r,s)&&!m.hasOwnProperty(s)&&(o[s]=r[s]);if(e&&e.defaultProps)for(s in r=e.defaultProps)void 0===o[s]&&(o[s]=r[s]);return{$$typeof:i,type:e,key:a,ref:n,props:o,_owner:y.current}}l.jsx=h,l.jsxs=h,u.exports=l;const O=u.exports.jsx,P=e=>{if(e&&"undefined"!=typeof window)try{const r=localStorage.getItem(e)||void 0;if(r)return JSON.parse(r)}catch{return}},g=(e,r)=>{if(e&&"undefined"!=typeof window)try{localStorage.setItem(e,JSON.stringify(r))}finally{return}},j=(e,r=!1)=>{if(r){const r=P(e);if(r)return r}return Object.keys(a).reduce(((e,r)=>(e[r]=null,e)),{})},v=r.createContext({prefs:__spreadValues({},a),userPrefs:__spreadValues({},c),themes:[],setPrefs:()=>{},resetStorage:()=>{}});e.PrefersThemeContext=v,e.PrefersThemeProvider=({children:e,prefs:t=__spreadValues({},c),themes:s=["light","dark"],enforceThemes:d=!0,disabledPrefs:u=[],resetValue:l="auto",attributes:p=__spreadValues({},n),cacheKey:i="prefers-theme",cacheEnabled:_=!0})=>{const[y,b]=r.useState(__spreadValues({},a)),[m,h]=r.useState(j(i,_)),P=r.useCallback((e=>{if(e.theme&&!0===d&&s.concat(l).indexOf(e.theme)<0)throw`"${e.theme} is not in the list of supported themes (${s})`;const r=__spreadValues(__spreadValues({},m),e);h(r),!0===_&&i&&g(i,r)}),[m]),w=r.useCallback((()=>{if(i)try{localStorage.removeItem(i)}catch{}}),[i]),S=r.useCallback((e=>{b(__spreadValues(__spreadValues({},y),e))}),[y]),k=r.useCallback(((e=!0)=>()=>{const r=__spreadValues({},y),s={},a=((e,r,t)=>{const s={};return Object.keys(o).forEach((a=>{s[a]=__spreadProps(__spreadValues({},o[a]),{disabled:r.indexOf(a)>=0,value:e[a],handler:e=>{const r={};r[a]=s[a].set(e.matches),t(r)}})})),s})(t,u,S);return Object.keys(a).forEach((t=>{!0!==a[t].disabled&&(s[t]=window.matchMedia(a[t].query),e&&a[t].set&&(r[t]=a[t].set(s[t].matches)),e||f(s[t])&&s[t].addEventListener("change",a[t].handler))})),e&&S(r),()=>{Object.keys(a).forEach((r=>{!0!==a[r].disabled&&(e||f(s[r])&&s[r].removeEventListener("change",a[r].handler))}))}}),[y]);r.useEffect(k(),[]),r.useEffect(k(!1),[y]);return O(v.Provider,{value:{prefs:(()=>{const e=__spreadValues({},y);return Object.keys(m).forEach((r=>{m[r]!==l&&null!==m[r]&&void 0!==m[r]&&(e[r]=m[r])})),Object.keys(t).forEach((r=>{t[r]&&(e[r]=t[r])})),Object.keys(e).forEach((r=>{"undefined"!=typeof document&&p[r]&&document.body.setAttribute(p[r],e[r])})),e})(),userPrefs:m,setPrefs:P,themes:s,resetStorage:w},children:e})},e.getDefaultOverridePrefs=j,e.getStoredPrefs=P,e.setPrefsFactory=(e,r,t,s)=>()=>{const o=__spreadValues({},t);t[e]!==r&&(o[e]=r),s(o)},e.setStoredPrefs=g,e.usePrefersTheme=()=>r.useContext(v),Object.defineProperty(e,"__esModule",{value:!0}),e[Symbol.toStringTag]="Module"})); //# sourceMappingURL=next-prefers-theme.umd.js.map