storybook-addon-useragent
Version:
storybook-addon-useragent
2 lines • 6.52 kB
JavaScript
import {useArgs,addons,types,useParameter}from'@storybook/manager-api';import l,{forwardRef,useCallback,useMemo}from'react';import {WithTooltip,TooltipLinkList,Button}from'@storybook/components';var i={WINDOWS:"Windows",MACINTOSH:"Macintosh",LINUX:"Linux",ANDROID:"Android",IOS:"iOS"},d={X64:"x64",X86:"x86",ARM64:"arm64",ARM:"arm"},f={Chrome:"Chrome",Chromium:"Chromium",Edge:"Edge",Brave:"Brave",Opera:"Opera",Firefox:"Firefox",Safari:"Safari","Internet Explorer":"Internet Explorer"},n={MOBILE:/Mobile|Android|iPhone|iPad|iPod/i,PLATFORM:/Windows|Macintosh|Linux|Android|iPhone|iPad|iPod/i,ARCH_INFO:/\((.*?)\)/,DEVICE_MODEL:{APPLE:/iPhone|iPad|iPod|MacBook|MacBook Pro|MacBook Air|iMac|Mac Pro/i,MOBILE:/Android|Windows Phone|BlackBerry|Nexus|Pixel|Galaxy/i,PHONE_BRANDS:/Xiaomi|Huawei|Sony|LG|OnePlus|OPPO|vivo|Realme|Motorola/i,PC_BRANDS:/Lenovo|Asus|Acer|Dell|HP|Surface/i},BROWSER:/(Chrome|Chromium|Edge|Brave|Opera)\/(\d+\.\d+)|(Firefox)\/(\d+\.\d+)|(Version)\/(\d+\.\d+).*Safari|(MSIE|Trident)\/(\d+\.\d+)/i,PLATFORM_VERSION:{WINDOWS:/Windows NT (\d+\.\d+)/i,MACOS:/Mac OS X (\d+[._]\d+(?:[._]\d+)?)/i,IOS:/iPhone OS (\d+[._]\d+(?:[._]\d+)?)/i,ANDROID:/Android (\d+(?:\.\d+(?:\.\d+)?)?)/i},BITNESS:{WIN64:/Win64|x64|WOW64/i,X86_64:/x86_64/i,ARM64:/aarch64/i,I686:/i686|i386/i,ARM32:/armv\d+[^6]/i}};function u(e){let r=e.match(n.PLATFORM);if(!r)return;let t=r[0];if(/Windows/i.test(t))return i.WINDOWS;if(/Macintosh/i.test(t))return i.MACINTOSH;if(/Linux/i.test(t))return i.LINUX;if(/Android/i.test(t))return i.ANDROID;if(/iPhone|iPad|iPod/i.test(t))return i.IOS}function w(e,r){if(r||(r=u(e)),!r)return;let t;switch(r){case i.WINDOWS:return t=e.match(n.PLATFORM_VERSION.WINDOWS),t?.[1];case i.MACINTOSH:return t=e.match(n.PLATFORM_VERSION.MACOS),t?.[1]?t[1].replace(/_/g,"."):void 0;case i.IOS:return t=e.match(n.PLATFORM_VERSION.IOS),t?.[1]?t[1].replace(/_/g,"."):void 0;case i.ANDROID:return t=e.match(n.PLATFORM_VERSION.ANDROID),t?.[1];default:return}}function y(e){if(n.BITNESS.WIN64.test(e)||n.BITNESS.X86_64.test(e)||n.BITNESS.ARM64.test(e))return "64";if(n.BITNESS.I686.test(e)||n.BITNESS.ARM32.test(e))return "32";let r=u(e);if(r===i.MACINTOSH||r===i.IOS)return "64";if(r===i.ANDROID){let t=w(e,r);if(t)return parseInt(t.split(".")[0],10)>=5?"64":"32"}}function E(e){let r=n.ARCH_INFO.exec(e);if(!r?.[1])return;let t=r[1];if(t.includes(d.X64))return d.X64;if(t.includes(d.X86))return d.X86;if(t.includes(d.ARM64))return d.ARM64;if(t.includes(d.ARM))return d.ARM}function M(e){for(let r of Object.values(n.DEVICE_MODEL)){let t=r.exec(e);if(t?.[0])return t[0]}}function I(e){return u(e)!==i.WINDOWS?false:/WOW64/i.test(e)}function B(e){return e in f}function U(e){let r=[],t=e.match(n.BROWSER);if(!t)return r;if(t[1]&&t[2]){let o=t[1],a=t[2];B(o)?r.push({brand:f[o],version:a}):r.push({brand:"Chromium",version:a});}return t[3]&&t[4]&&r.push({brand:f.Firefox,version:t[4]}),t[5]&&t[6]&&r.push({brand:f.Safari,version:t[6]}),t[7]&&t[8]&&r.push({brand:f["Internet Explorer"],version:t[8]}),r}async function R(e){let r=U(e),t=n.MOBILE.test(e),o=u(e),a=E(e),g=M(e),c=w(e,o),A=y(e),h=I(e),s={userAgent:e,mobile:t,platform:o,architecture:a,model:g,platformVersion:c||"0",bitness:A||"64",wow64:h};return r&&r.length>0?(s.brands=r,s.fullVersionList=r):(s.brands=[],s.fullVersionList=[]),s}var C=typeof window<"u"?window.navigator.userAgent:"";typeof window<"u"&&((async()=>{try{let e=await R(C);window.navigator.userAgentData&&V(e);}catch(e){console.warn("Failed to initialize consistent userAgentData:",e);}})());function V(e){if(!(typeof window>"u"||!window.navigator.userAgentData))try{let r={...window.navigator.userAgentData,...e,getHighEntropyValues:async()=>e},t=new Proxy(window.navigator,{get(o,a){return a==="userAgentData"?r:Reflect.get(o,a)}});if(window.Navigator&&typeof window.Navigator=="function")try{Object.defineProperty(window,"navigator",{value:t,configurable:!0,writable:!0});}catch(o){console.warn("Unable to replace navigator object with proxy:",o);}}catch(r){console.warn("Failed to set userAgentData safely:",r);}}function x(e){return e?.useragent||""}var v=x;var p="userAgent",P="storybook/user-agent",m=`${P}/tool`,D="User-Agent";var T=[{name:"iOS_12.2-Safari_604.1",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Mobile/15E148 Safari/604.1"},{name:"Windows_10-IE_11",userAgent:"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"},{name:"macOS_10.15.6-Safari_14",userAgent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15"},{name:"Android_10-Chrome_91",userAgent:"Mozilla/5.0 (Linux; Android 10; Android SDK built for x86) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36"}];var G=forwardRef(({color:e="currentColor",size:r=14,...t},o)=>l.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",width:r,height:r,viewBox:"0 0 24 24",strokeWidth:"1.5",stroke:e,ref:o,...t},l.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18 18.72a9.094 9.094 0 0 0 3.741-.479 3 3 0 0 0-4.682-2.72m.94 3.198.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0 1 12 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 0 1 6 18.719m12 0a5.971 5.971 0 0 0-.941-3.197m0 0A5.995 5.995 0 0 0 12 12.75a5.995 5.995 0 0 0-5.058 2.772m0 0a3 3 0 0 0-4.681 2.72 8.986 8.986 0 0 0 3.74.477m.94-3.197a5.971 5.971 0 0 0-.94 3.197M15 6.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm6 3a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Zm-13.5 0a2.25 2.25 0 1 1-4.5 0 2.25 2.25 0 0 1 4.5 0Z"}))),b=G;function Z(){let e=useParameter(p);return useMemo(()=>Array.isArray(e)&&e.length>0?e:T,[e])}var O=l.memo(()=>{let[e,r]=useArgs(),t=v(e),o=Z(),a=useCallback(c=>{r({useragent:t!==c?c:""});},[r,t]),g=useMemo(()=>{let c=o.map(({name:s,userAgent:S},W)=>({id:`${W}_${s}`,title:s,active:S===t,onClick:()=>a(S)})),A=c.some(({active:s})=>s);return !!t&&!A&&c.push({id:"custom agent",title:"custom agent",active:true,onClick:()=>a(t)}),c},[a,o,t]);return l.createElement(WithTooltip,{key:m,placement:"bottom",trigger:"click",tooltip:l.createElement(TooltipLinkList,{links:g})},l.createElement(Button,{active:t.length>0,title:"Change UserAgent",padding:"small",variant:"ghost"},l.createElement(b,null)))});O.displayName="UserAgentTool";addons.register(P,()=>{addons.add(m,{type:types.TOOL,title:D,paramKey:p,match:({viewMode:e})=>e==="story",render:O});});//# sourceMappingURL=manager.js.map
//# sourceMappingURL=manager.js.map