@dub/utils 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +24 -0
- package/dist/chunk-2U2IYZHN.mjs +1 -0
- package/dist/chunk-35O76FBU.mjs +2 -0
- package/dist/chunk-3P54C65P.mjs +1 -0
- package/dist/chunk-64C57Q4W.mjs +2 -0
- package/dist/chunk-64KMNIJU.mjs +2 -0
- package/dist/chunk-6MWSVUBA.mjs +1 -0
- package/dist/chunk-6YUAHP47.mjs +1 -0
- package/dist/chunk-D7V6QEC3.mjs +2 -0
- package/dist/chunk-G2EXSXOB.mjs +1 -0
- package/dist/chunk-GIGD5PB3.mjs +1 -0
- package/dist/chunk-H4LU5LOY.mjs +2 -0
- package/dist/chunk-H53DALDZ.mjs +1 -0
- package/dist/chunk-LEHV3NWH.mjs +2 -0
- package/dist/chunk-LXDQ4KMN.mjs +0 -0
- package/dist/chunk-M5FLGH3T.mjs +1 -0
- package/dist/chunk-MODISIUH.mjs +1 -0
- package/dist/chunk-MQNZDHLT.mjs +2 -0
- package/dist/chunk-OH6TH3J6.mjs +1 -0
- package/dist/chunk-ONIHRKH7.mjs +1 -0
- package/dist/chunk-TN4P6NPQ.mjs +1 -0
- package/dist/chunk-U4XQUV65.mjs +1 -0
- package/dist/chunk-UE5AMEFG.mjs +2 -0
- package/dist/chunk-UYE4FVX2.mjs +2 -0
- package/dist/chunk-V4HIRCCV.mjs +1 -0
- package/dist/chunk-W5IYXLXA.mjs +1 -0
- package/dist/chunk-XACKIZEQ.mjs +2 -0
- package/dist/chunk-Y2N4Y4WZ.mjs +1 -0
- package/dist/chunk-ZGU5QGQR.mjs +1 -0
- package/dist/constants/cctlds.d.ts +3 -0
- package/dist/constants/cctlds.mjs +1 -0
- package/dist/constants/content.d.ts +70 -0
- package/dist/constants/content.mjs +1 -0
- package/dist/constants/countries.d.ts +5 -0
- package/dist/constants/countries.mjs +1 -0
- package/dist/constants/index.d.ts +136 -0
- package/dist/constants/index.mjs +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/index.mjs +2 -0
- package/dist/hooks/use-current-anchor.d.ts +3 -0
- package/dist/hooks/use-current-anchor.mjs +2 -0
- package/dist/hooks/use-intersection-observer.d.ts +8 -0
- package/dist/hooks/use-intersection-observer.mjs +2 -0
- package/dist/hooks/use-local-storage.d.ts +3 -0
- package/dist/hooks/use-local-storage.mjs +2 -0
- package/dist/hooks/use-media-query.d.ts +10 -0
- package/dist/hooks/use-media-query.mjs +2 -0
- package/dist/hooks/use-scroll.d.ts +3 -0
- package/dist/hooks/use-scroll.mjs +2 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.mjs +1 -0
- package/dist/utils.d.ts +72 -0
- package/dist/utils.mjs +1 -0
- package/package.json +52 -0
- package/src/constants/cctlds.ts +276 -0
- package/src/constants/countries.ts +254 -0
- package/src/constants/index.ts +208 -0
- package/src/index.ts +540 -0
- package/tsconfig.json +5 -0
- package/tsup.config.ts +10 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
> @dub/utils@0.0.0 build /Users/steventey/Desktop/dub/packages/utils
|
|
3
|
+
> tsup
|
|
4
|
+
|
|
5
|
+
CLI Building entry: src/index.ts, src/constants/cctlds.ts, src/constants/countries.ts, src/constants/index.ts
|
|
6
|
+
CLI Using tsconfig: tsconfig.json
|
|
7
|
+
CLI tsup v6.1.3
|
|
8
|
+
CLI Using tsup config: /Users/steventey/Desktop/dub/packages/utils/tsup.config.ts
|
|
9
|
+
CLI Target: node14
|
|
10
|
+
ESM Build start
|
|
11
|
+
ESM ⚡️ Build success in 8ms
|
|
12
|
+
ESM dist/chunk-MODISIUH.mjs 1.37 KB
|
|
13
|
+
ESM dist/constants/index.mjs 950.00 B
|
|
14
|
+
ESM dist/constants/countries.mjs 59.00 B
|
|
15
|
+
ESM dist/index.mjs 7.47 KB
|
|
16
|
+
ESM dist/chunk-Y2N4Y4WZ.mjs 3.04 KB
|
|
17
|
+
ESM dist/chunk-3P54C65P.mjs 3.96 KB
|
|
18
|
+
ESM dist/constants/cctlds.mjs 59.00 B
|
|
19
|
+
DTS Build start
|
|
20
|
+
DTS ⚡️ Build success in 766ms
|
|
21
|
+
DTS dist/index.d.ts 4.02 KB
|
|
22
|
+
DTS dist/constants/index.d.ts 3.55 KB
|
|
23
|
+
DTS dist/constants/cctlds.d.ts 66.00 B
|
|
24
|
+
DTS dist/constants/countries.d.ts 91.00 B
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useCallback as t,useEffect as o,useState as s}from"react";function c(l){let[r,n]=s(!1),e=t(()=>{n(window.scrollY>l)},[l]);return o(()=>(window.addEventListener("scroll",e),()=>window.removeEventListener("scroll",e)),[e]),o(()=>{e()},[e]),r}export{c as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{useEffect as I,useState as a}from"react";function f(e,{threshold:t=0,root:s=null,rootMargin:o="0%",freezeOnceVisible:b=!1}){let[r,u]=a(),c=(r==null?void 0:r.isIntersecting)&&b,O=([n])=>{u(n)};return I(()=>{let n=e==null?void 0:e.current;if(!!!window.IntersectionObserver||c||!n)return;let v={threshold:t,root:s,rootMargin:o},i=new IntersectionObserver(O,v);return i.observe(n),()=>i.disconnect()},[e,JSON.stringify(t),s,o,c]),r}export{f as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var a={AF:"Afghanistan",AL:"Albania",DZ:"Algeria",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AQ:"Antarctica",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia",AW:"Aruba",AU:"Australia",AT:"Austria",AZ:"Azerbaijan",BS:"Bahamas",BH:"Bahrain",BD:"Bangladesh",BB:"Barbados",BY:"Belarus",BE:"Belgium",BZ:"Belize",BJ:"Benin",BM:"Bermuda",BT:"Bhutan",BO:"Bolivia",BA:"Bosnia and Herzegovina",BW:"Botswana",BV:"Bouvet Island",BR:"Brazil",IO:"British Indian Ocean Territory",BN:"Brunei Darussalam",BG:"Bulgaria",BF:"Burkina Faso",BI:"Burundi",KH:"Cambodia",CM:"Cameroon",CA:"Canada",CV:"Cape Verde",KY:"Cayman Islands",CF:"Central African Republic",TD:"Chad",CL:"Chile",CN:"China",CX:"Christmas Island",CC:"Cocos (Keeling) Islands",CO:"Colombia",KM:"Comoros",CG:"Congo (Republic)",CD:"Congo (Democratic Republic)",CK:"Cook Islands",CR:"Costa Rica",CI:"Ivory Coast",HR:"Croatia",CU:"Cuba",CY:"Cyprus",CZ:"Czech Republic",DK:"Denmark",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic",EC:"Ecuador",EG:"Egypt",SV:"El Salvador",GQ:"Equatorial Guinea",ER:"Eritrea",EE:"Estonia",ET:"Ethiopia",FK:"Falkland Islands",FO:"Faroe Islands",FJ:"Fiji",FI:"Finland",FR:"France",GF:"French Guiana",PF:"French Polynesia",TF:"French Southern Territories",GA:"Gabon",GM:"Gambia",GE:"Georgia",DE:"Germany",GH:"Ghana",GI:"Gibraltar",GR:"Greece",GL:"Greenland",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea",GW:"Guinea-Bissau",GY:"Guyana",HT:"Haiti",HM:"Heard Island and McDonald Islands",VA:"Vatican City",HN:"Honduras",HK:"Hong Kong",HU:"Hungary",IS:"Iceland",IN:"India",ID:"Indonesia",IR:"Iran",IQ:"Iraq",IE:"Ireland",IL:"Israel",IT:"Italy",JM:"Jamaica",JP:"Japan",JO:"Jordan",KZ:"Kazakhstan",KE:"Kenya",KI:"Kiribati",KP:"North Korea",KR:"South Korea",KW:"Kuwait",KG:"Kyrgyzstan",LA:"Laos",LV:"Latvia",LB:"Lebanon",LS:"Lesotho",LR:"Liberia",LY:"Libya",LI:"Liechtenstein",LT:"Lithuania",LU:"Luxembourg",MO:"Macao",MG:"Madagascar",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania",MU:"Mauritius",YT:"Mayotte",MX:"Mexico",FM:"Micronesia",MD:"Moldova",MC:"Monaco",MN:"Mongolia",MS:"Montserrat",MA:"Morocco",MZ:"Mozambique",MM:"Myanmar",NA:"Namibia",NR:"Nauru",NP:"Nepal",NL:"Netherlands",NC:"New Caledonia",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",MK:"Macedonia",MP:"Northern Mariana Islands",NO:"Norway",OM:"Oman",PK:"Pakistan",PW:"Palau",PS:"Palestine",PA:"Panama",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru",PH:"Philippines",PN:"Pitcairn",PL:"Poland",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar",RE:"Reunion",RO:"Romania",RU:"Russia",RW:"Rwanda",SH:"Saint Helena",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",PM:"Saint Pierre and Miquelon",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",ST:"Sao Tome and Principe",SA:"Saudi Arabia",SN:"Senegal",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SK:"Slovakia",SI:"Slovenia",SB:"Solomon Islands",SO:"Somalia",ZA:"South Africa",GS:"South Georgia and the South Sandwich Islands",ES:"Spain",LK:"Sri Lanka",SD:"Sudan",SR:"Suriname",SJ:"Svalbard and Jan Mayen",SZ:"Eswatini",SE:"Sweden",CH:"Switzerland",SY:"Syrian Arab Republic",TW:"Taiwan",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand",TL:"Timor-Leste",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia",TR:"T\xFCrkiye",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",UG:"Uganda",UA:"Ukraine",AE:"United Arab Emirates",GB:"United Kingdom",US:"United States",UM:"United States Minor Outlying Islands",UY:"Uruguay",UZ:"Uzbekistan",VU:"Vanuatu",VE:"Venezuela",VN:"Vietnam",VG:"Virgin Islands, British",VI:"Virgin Islands, U.S.",WF:"Wallis and Futuna",EH:"Western Sahara",YE:"Yemen",ZM:"Zambia",ZW:"Zimbabwe",AX:"\xC5land Islands",BQ:"Bonaire, Sint Eustatius and Saba",CW:"Cura\xE7ao",GG:"Guernsey",IM:"Isle of Man",JE:"Jersey",ME:"Montenegro",BL:"Saint Barth\xE9lemy",MF:"Saint Martin (French part)",RS:"Serbia",SX:"Sint Maarten (Dutch part)",SS:"South Sudan",XK:"Kosovo"},n=a;export{n as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{useEffect as o,useState as d}from"react";function l(){let[t,i]=d(null),[e,h]=d(null);return o(()=>{let n=()=>{window.matchMedia("(max-width: 640px)").matches?i("mobile"):window.matchMedia("(min-width: 641px) and (max-width: 1024px)").matches?i("tablet"):i("desktop"),h({width:window.innerWidth,height:window.innerHeight})};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),{device:t,width:e==null?void 0:e.width,height:e==null?void 0:e.height,isMobile:t==="mobile",isTablet:t==="tablet",isDesktop:t==="desktop"}}export{l as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useEffect as I,useState as a}from"react";function f(e,{threshold:t=0,root:s=null,rootMargin:o="0%",freezeOnceVisible:b=!1}){let[r,u]=a(),c=(r==null?void 0:r.isIntersecting)&&b,O=([n])=>{u(n)};return I(()=>{let n=e==null?void 0:e.current;if(!!!window.IntersectionObserver||c||!n)return;let v={threshold:t,root:s,rootMargin:o},i=new IntersectionObserver(O,v);return i.observe(n),()=>i.disconnect()},[e,JSON.stringify(t),s,o,c]),r}export{f as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as c,w as l,x as u}from"./chunk-W5IYXLXA.mjs";import{a}from"./chunk-MODISIUH.mjs";import{clsx as p}from"clsx";import{twMerge as m}from"tailwind-merge";import f from"ms";import{customAlphabet as h}from"nanoid";import y from"@sindresorhus/slugify";function v(...e){return m(p(e))}function M({title:e="Dub - Link Management for Modern Marketing Teams",description:t="Dub is an open-source link management tool for modern marketing teams to create, share, and track short links.",image:r="https://dub.co/_static/thumbnail.png",icons:o="/favicon.ico",noIndex:n=!1}={}){return{title:e,description:t,openGraph:{title:e,description:t,images:[{url:r}]},twitter:{card:"summary_large_image",title:e,description:t,images:[r],creator:"@dubdotco"},icons:o,metadataBase:new URL(c),themeColor:"#FFF",...n&&{robots:{index:!1,follow:!1}}}}var O=h("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7);async function _(e,t){let r=await fetch(e,t);if(!r.ok){let o=await r.text(),n=new Error(o);throw n.status=r.status,n}return r.json()}function $(e,t={digits:1}){if(!e)return"0";if(t.full)return Intl.NumberFormat("en-US").format(e);let r=[{value:1,symbol:""},{value:1e3,symbol:"K"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"},{value:1e12,symbol:"T"},{value:1e15,symbol:"P"},{value:1e18,symbol:"E"}],o=/\.0+$|(\.[0-9]*[1-9])0+$/;var n=r.slice().reverse().find(function(s){return e>=s.value});return n?(e/n.value).toFixed(t.digits).replace(o,"$1")+n.symbol:"0"}function T(e){return!e||typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}var A=(e,t)=>e.reduce((r,o,n)=>{let s=Math.floor(n/t);return r[s]||(r[s]=[]),r[s].push(o),r},[]);function E({key:e,domain:t="dub.sh",localhost:r,pretty:o,noDomain:n}){let s=`${r?"http://home.localhost:8888":`https://${t}`}${e!=="_root"?`/${e}`:""}`;return n?`/${e}`:o?s.replace(/^https?:\/\//,""):s}var F=(e,{withAgo:t}={})=>{if(!e)return"Never";let r=Date.now()-new Date(e).getTime();return r<1e3?"Just now":r>828e5?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:new Date(e).getFullYear()!==new Date().getFullYear()?"numeric":void 0}):`${f(r)}${t?" ago":""}`},N=e=>{let t=e?new Date(e):new Date;return t.toString()==="Invalid Date"?"":new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().split(":").slice(0,2).join(":")},C=e=>new Date(`${e}T00:00:00Z`).toLocaleDateString("en-US",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}),q=e=>{let t=new Date,r=t.getDate(),o=t.getMonth(),n=t.getFullYear();if(r>=e)return{firstDay:new Date(n,o,e),lastDay:new Date(n,o+1,e-1)};{let s=o===0?n-1:n,i=o===0?11:o-1;return{firstDay:new Date(s,i,e),lastDay:new Date(n,o,e-1)}}},d=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()},I=e=>{let t=d();return e>t?t:e},K=e=>{let t=y(e,{separator:""});if(t.length<3)return"";if(a.has(t.slice(-2)))return`${t.slice(0,-2)}.${t.slice(-2)}`;let r=t.replace(/[aeiou]/g,"");return r.length>=3&&a.has(r.slice(-2))?`${r.slice(0,-2)}.${r.slice(-2)}`:`${[t,r].reduce((n,s)=>n.length<s.length?n:s)}.to`},P=new RegExp(/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/),z=new RegExp(/^[0-9A-Za-z\u0080-\uFFFF\/\-]*$/u),H=new RegExp(/^[a-zA-Z0-9\-]+$/),Z=(e,t)=>e===t?null:e.slice(0,e.length-t.length-1),j=e=>{let t;try{t=new URL(e.replace(/^[a-zA-Z]+:\/\//,"https://")).hostname}catch{return""}if(t==="youtu.be")return"youtube.com";if(t==="raw.githubusercontent.com")return"github.com";if(t.endsWith(".vercel.app"))return"vercel.app";let r=t.split(".");return r.length>2?l.has(r[r.length-2])&&a.has(r[r.length-1])||u.has(r.slice(-2).join("."))?r.slice(-3).join("."):r.slice(-2).join("."):t},g=e=>{try{return new URL(e),!0}catch{return!1}},W=e=>{if(g(e))return e;try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).toString()}catch{return null}},B=e=>{if(g(e))return new URL(e).hostname.replace(/^www\./,"");try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).hostname.replace(/^www\./,"")}catch{return null}},J=(e,t)=>{let r=new URLSearchParams({...e.query,...t}).toString();return`${r?"?":""}${r}`},Y=({router:e,param:t,value:r})=>{t!=="page"&&delete e.query.page;let o;r.length>0?o={...e.query,[t]:r}:(delete e.query[t],o={...e.query});let{slug:n,...s}=o;e.replace({pathname:`/${e.query.slug||"links"}`,query:s})},V=(e,t)=>!e||e.length<=t?e:`${e.slice(0,t-3)}...`,Q=e=>{if(!e)return{};try{let t=new URL(e).searchParams,r={};for(let[o,n]of t.entries())n&&n!==""&&(r[o]=n);return r}catch{return{}}},G=(e,t)=>{if(!e)return"";try{let r=new URL(e);for(let[o,n]of Object.entries(t))n===""?r.searchParams.delete(o):r.searchParams.set(o,n);return r.toString()}catch{return""}},x=[{display:"Referral (ref)",key:"ref",examples:"twitter, facebook"},{display:"UTM Source",key:"utm_source",examples:"twitter, facebook"},{display:"UTM Medium",key:"utm_medium",examples:"social, email"},{display:"UTM Campaign",key:"utm_campaign",examples:"summer_sale"},{display:"UTM Term",key:"utm_term",examples:"blue_shoes"},{display:"UTM Content",key:"utm_content",examples:"logolink"}],X=e=>{try{let t=new URL(e);return x.forEach(r=>t.searchParams.delete(r.key)),t.toString()}catch{return e}};async function ee(e){let r=new TextEncoder().encode(e),o=await crypto.subtle.digest("MD5",r);return Array.from(new Uint8Array(o)).map(i=>i.toString(16).padStart(2,"0")).join("")}var D={cron:process.env.DUB_SLACK_HOOK_CRON,links:process.env.DUB_SLACK_HOOK_LINKS},te=async({message:e,type:t,mention:r=!1})=>{(process.env.NODE_ENV==="development"||!process.env.DUB_SLACK_HOOK_CRON||!process.env.DUB_SLACK_HOOK_LINKS)&&console.log(e);let o=D[t];if(!!o)try{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({blocks:[{type:"section",text:{type:"mrkdwn",text:`${r?"<@U0404G6J3NJ> ":""}${e}`}}]})})}catch(n){console.log(`Failed to log to Dub Slack. Error: ${n}`)}},w=(e,t)=>{if(e===t)return!0;if(typeof e!="object"||typeof t!="object"||e===null||t===null)return!1;let r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(let n of r)if(!o.includes(n)||!w(e[n],t[n]))return!1;return!0};export{v as a,M as b,O as c,_ as d,$ as e,T as f,A as g,E as h,F as i,N as j,C as k,q as l,d as m,I as n,K as o,P as p,z as q,H as r,Z as s,j as t,g as u,W as v,B as w,J as x,Y as y,V as z,Q as A,G as B,x as C,X as D,ee as E,te as F,w as G};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{Airplay as e,BarChart as t,Link2 as o,QrCode as i,Users as r}from"lucide-react";var a=[{title:"Powerful Analytics For The Modern Marketer",shortTitle:"Advanced Analytics",accordionTitle:"Analytics that matter",description:"Dub provides powerful analytics for your links, including geolocation, device, browser, and referrer information.",icon:t,slug:"analytics",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/analytics.png",thumbnailBlurhash:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE+0lEQVR4nL2Y63qiShBF5/2f8czkpjGCgoLQV+yzq6saGpVMYjznx/ok0JBa7GrQ/mWsC7fQhLE3MEEJl8eMteP51hH+L8g4e81SXUv8WhS5KFJpwlyhdSZicpGpYCf8VSgT+09EliQYPs5j3ZVIknA+41O5+9K5S6RXE0lEJZEok6Xhhwx/zaLU99L5lkguMJGOuyiiMxHnWMB/wi2py3TMF5L5skifiXQzbJTpIZJkpkQykWGBeHxJRtpLtn8s0pNILtGbcIrYSEcoJzIe53hcY2CRJCOFDxfM0xlGmVtz50EiNt79Too/dUxLn72LRBnlRWaYZPwZEsxwwf8iYpKItE+SaEWgOREu0naEx3EPoQEyQyZDBU8yudRcYrieJ9bHVr17sjOTCKWRJBpwhMShJdzIsfXY73GchIYo1Eehc5QhHOEzpP1szlh8zo9FXBQZJSBwhEDd2FAdbdgfXNhl7I8e+32o2wFSA6SGKNXrc0QRhtH2HFOb468Rkfw99U0RPpl6n+YAtc8RbVQ3VDAKr10oKhe2xF6oPPb5UNYeYgOkBqTFQi3RE2dc74zrnmNqiT4m6EdorqlR5oEiNBeohaqG7z5JfKD4zc6F91LYefztsd9HKRLaQ4YSOkhKKak2kzsJnfIjc5kHiVAaSYTSKGuWoOLXhQurrQtvwqrwYV36KEVClBClQ0KUUNVcivkoRnMrPTBOSUY5kZEX7iNExraSNCgJkqDiXz9ceNlM0N9vWwgVnFBquaJObedZiuZTQ3PKQ2x6WLCQm95PhnmoCLXVVtJYicTzuwtPxFrA9rMI0RgaG1vuou121HoHzw+JJskg/Y7/J8lwKm5M5X6RNNHH+WEhYlGcxV23SMCicBv+rG34vWJom/Y9gyhTcHrrMknxQ4KSpTblJx7fqPgoP00ieSp3iWiJs5NHL4nQY/emCAr/IxL/yOfvNQs9b0iGxxKrwkLIRpmPPQslmUpkUiozEf0TEW0zEXslskJhrxuDO29QtIFAxpr3PeHYy4eJMq+ZzPuOZPhaRWVDeZEKPVwelAh/841vdXkZHhp6CRr8Y4N+N+G9MCgMhYrMkxSfBIjnDUmALfOGc9alYZG9iNR8g/afJXKXSP4VPooYiBikYkJ9NJikkNlPMqstF5uEqHjiZaORhoasUGikwSIbnPuBa2xxU0oRqXCj6ofOkZkIf3VvSQYih0YjFR3KSk8yKGxNRVKxeeHCqmDWJbPZ6VGiwE3hNLh16Tscpc8i9gdPrdmPKjOKUCrtSSMVjVRYZldDBkLbPQpDcRsU+V5OBSfedxMbGkvngDJKGEiYmAZJHE/p54Edf7j9UMRkIjp0nQ4niDQQOSKVA2TqwyQUExKpSBKMRauRgsaCHZ2La1SQqBskjbRJohGJUWS2LpCWnr4gkiR0WnBQOvQkEmUUZBRkmCjUcEKVSEUxoYyoGbujYgE6j6B2pfl3MlMSszQmrtfSFkTGQeOqiRYRFSGRJEO0klBMqWWpQyqw4WKrRuGuK/4UahpL55yYhtpWfj4vSdwSSSyIpDRYQilIKCUy/UyIkbYDbSdyHcOFqjkYk463PUNrAGlBo8/baXEN7SsicQVRi4jK6IPqM2bHcmk90gknyEdwvItgP67fC2Oxhlcvk4ReWBi8KXJl+ImIvkSrYCI6bjPYNowai1UZ2G8meKy5zeIK51zoX56UB7vUOlYfAAAAAElFTkSuQmCC",videoUrl:"https://www.youtube.com/embed/i05FamHTn_I?si=gRnWs5Kf2n6Qyqmd&autoplay=1",videoLength:"2:56",bentoTitle:"Detailed insights for every click",bentoDescription:"Dub provides detailed analytics for every click on your links. See where your audience is coming from and what devices they are using.",bentoFeatures:[{title:"Time-series data",description:"See how your links are performing over time with a beautiful time-series chart.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/time-series-data.png"},{title:"Geographic data",description:"Understand your audience with geographic data \u2013\xA0on both a country and city level.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/geo-data.png"},{title:"Device data",description:"See what devices your audience is using to click on your links"},{title:"Referrer data",description:"Understand which websites are driving the most traffic to your links."},{title:"404 monitoring",description:"Monitor your links for 404 errors and notifies you when they occur."}]},{title:"Branded Links That Stand Out",shortTitle:"Branded Links",accordionTitle:"Use your own domain",description:"Dub offers free and unlimited custom domains on all plans for you to create branded links that stand out.",icon:e,slug:"branded-links",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/branded-links.png",thumbnailBlurhash:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAACXBIWXMAAAsTAAALEwEAmpwYAAADYElEQVR4nMWY2XLDIAxF/f9/28QGs5myCSQBXtLM9OFO09axdXwlIVjccXjnotyJjqZw/UHkv6B83/gsY63XWvt9V15K6YUQfts2v64rVfjbtgkvwjX7vvsFgrVRNsoyuV7p+iPJcR0j2GulGMLzjDFeKZWCwxDv99u/ol7v9DlqXQNMuCYCLzMAg2Xgs6vK3zkqUAf2RxBwI775BPF6UUWYABhB43WL5QGHG0VpIjtQADKOwR0V7inQFGSlID8/ABNdKSkWQXLwWTVwTaWIbFWEwSJAD2F6kJZab0itgSMIxHQAOWAdbpi1KzOQRVAuCbuUa+k+TAeSakSmguY18io1QkD6N48BivYsuZsqgOFAZzBTiA5Ep2LnXSumUi70NUOsuXNtAXhRGIBDVACuBiQLDABp3dIMOtyVKxQkt1/oXA2mACWorbbf6EZswQsEX99+ukG0tkiqcCGW9ltQ/CmIQwimuPIcpKwjJr/YncAUIIAS2YkIIUI9LRxCIggCIFT4YpBUCSTDmAYzAAFXnoBAeun6ggGmAFWoBhH/t7Q64C7sSZtoWgvMWqGoM7FucEdrIO6y4OvCDOuYgbqFNCtAAAWfS8yXIBRGUU1AtM5rDQe504LppEHXN9pZNanrBYq6r4nY/rgjIIABEH0DxN1owf3c10YjDGUrFDSrhUBwEJZa3BVRHJEcpDzMfhuEL95PQMQEYisdDFpyghiBuPupNYKxCAaPUpcgo5QaCbqZLGtNdsOktDKD+rg/c30T5ARGJDWI7IauNxyn1ZMp+EMQ+YEjojgiU0ssIMwR2Mu4/0st2noBLAe/lwUIIFQdaVJbTFuAEYR7tDdpQPPOxYfcOQh6+y2lKExapDCIxiAWFfonjhydIyOQi641d0RiRwpEXJSuHLm3IJ61X/dJ+/0wtYojBu/3B4cYVy58ZR3BqTXURWrR9HJdwXOYuxB1xK8aguh5sU8gKsgO6WXmrkxg7kFQNxJEGoMGINNZawIiCojEICS9TH0wP1I6Oz8bHT2Zk5SiIGgnWIHkaEPV/o5rBIN0riBNz8guxO/zfRCUWgRGzWHwin8n6A6CpVQFUQbvR/oUmwoBcAgMMoN5Ihx8fzQ1Aqn7Ev0YpINh52K6jC51oDwNmmtwxlYn7fb7L/LDQmuPkz48AAAAAElFTkSuQmCC",videoUrl:"https://www.youtube.com/embed/LbgvQxLVqq4?si=7_sJVXFZINPxbAdM&autoplay=1",videoLength:"3:23",bentoTitle:"Impress your audience with branded links",bentoDescription:"Create custom short links that match your brand and stand out from the crowd, with free and unlimited custom domains on all plans.",bentoFeatures:[{title:"Unlimited custom domains",description:"Add as many custom domains as you want to your project at no extra cost.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/domains.png",href:"/help/article/how-to-add-custom-domain"},{title:"Custom Social Media Cards",description:"Customize the title, description, and image of your links when shared on social media.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/social-cards.png",href:"/help/article/how-to-create-link#custom-social-media-cards"},{title:"Free SSL certificates",description:"Dub automatically provisions SSL certificates for your custom domains."},{title:"Link cloaking",description:"Hide your destination URL with link cloaking to make your links look cleaner.",href:"/help/article/how-to-create-link#link-cloaking"},{title:"Custom QR codes",description:"With Dub Pro, you can create branded QR codes for your links.",href:"/features/qr-codes"}]},{title:"Free QR Code Generator",shortTitle:"QR Codes",accordionTitle:"Free QR Code Generator",description:"QR codes and short links are like peas in a pod. Dub offers free QR codes for every short link you create.",icon:i,slug:"qr-codes",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/qr-codes.png",thumbnailBlurhash:"data:image/png;base64,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",videoUrl:"https://www.youtube.com/embed/fcWkUZoJJ7w?si=LKNOO67aL6Q-3xN4&autoplay=1",videoLength:"1:07",bentoTitle:"Gorgeous QR codes for your links",bentoDescription:"Create beautiful flyers and posters with QR codes for your links."},{title:"Personalize Your Short Links",shortTitle:"Personalization",accordionTitle:"Personalize Your Short links",description:"Customize your link's behavior with device targeting, geo targeting, link cloaking, and more.",icon:o,slug:"personalization",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/personalization.png",thumbnailBlurhash:"data:image/png;base64,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",videoUrl:"https://www.youtube.com/embed/K2UdLK8k1I4?si=79hu5XSW9pSjODOm&autoplay=1",videoLength:"2:25",bentoTitle:"Optimize your links for every audience",bentoDescription:"Get the most out of every click by delivering the right experience to the right audience.",bentoFeatures:[{title:"Device targeting",description:"Redirect your audience to different destinations based on their device type (e.g. iOS/Android).",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/device-targeting.png",href:"/help/article/how-to-create-link#device-targeting-ios--android"},{title:"Geo targeting",description:"Redirect your audience to different destinations based on their country of origin.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/geo-targeting.png",href:"/help/article/how-to-create-link#geo-targeting"},{title:"Expiration dates",description:"Automatically disable your links after a certain date & time.",href:"/help/article/how-to-create-link#expiration-date"},{title:"Password protection",description:"Protect your links with passwords to prevent unauthorized access.",href:"/help/article/how-to-create-link#password-protection"},{title:"Link cloaking",description:"Hide your destination URL with link cloaking to make your links look cleaner.",href:"/help/article/how-to-create-link#link-cloaking"}]},{title:"Collaborate With Your Team",shortTitle:"Team Collaboration",accordionTitle:"Collaborate With Your Team",description:"Invite your teammates to collaborate on your links. For enterprises, Dub offers SAML SSO for better security.",icon:r,slug:"collaboration",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/collaboration.png",thumbnailBlurhash:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE0UlEQVR4nM2YC3eiWBCE5///yIlRQN6vyxu0p6ovILLZTMzDXc+pg6AJ/VnVfYFf8g2v6/Uql8tl1TRNq8ZxvNP2s+X7/HvqK69f3wGxgOyLH4bhTW2hvgvmW0D2EEvBfd+/qbdg/hOQ5aQW4opiLijqBsFiu65TtW27UTcfvwfaw3wG6CGQPYB1wkJYgEE6FMiCGxTeNI2qrqH5/QJFoC3M00DuIS4rBH/NYRhXFxRCi6+lqqhqo1qPL0DWme9x5UMg70GwiH5xAQWyWGOMFGUpRVFInlO5brlf4jg/r2agxZnFlc/2yxdAFohBWhTD+BhTKUCW5ZKmmSRJInFMxbrlPo8TjEB0aYFhxL7S+A+B3ENMa2M3TatOlKXRIpMk1cLDKJIwDCWAuI2wz+Npms4wRqPGmP04yJsQu0jRDQtRKEQUxRIEofh+IOezv4r7BKJDdIZRW1zZxut5IPOYZbNaNxCpotTiothCsHDXO4vjepArLrYe9i1MpDGjK+yXLQj//2ca/iGQ26ide2N1o0JfFPilU0BEcvZ8cRxPTkdXjkdnleO4KwxdIzh7hfFin/w8yOW6cwMgHUCaDm40cMOgqFyiMBH/HIrrnBXi9eDI4XCCjnh/UhgXgHSLrqSIIZ2sq/qu4Xm+HwHRxW8Zt4AY4Ea/xMrUUuQASXIJgxhuBOKcznJ8deXwAoiX46rjK1w5eepYGETaTytI+0yQ8QbStYM0dSumrCXPjCQxQRI5u+E9yO8F5rQBCRQ6SbLng0wzyNAzVqOC1FUnpmgkTwESAcSfQY6+HA+evL4gWr8hbBmzE+AYO8YvCtEjACkRyxrxtCCjnucG8mGOx0DGLUizBykAkgIkEvcUoGi48kIYNPzBVYec41k8N5DAx3oSpZKluQ4KDgxOwKeBTOMFINMK0gCkKlopMkytuJQoyCXw4IpDGDjz6lvBIffki+dgbTlH+B4WRUQxz0rtMfYahwdje9mDfBDmQUf2IP0MUgPESBzClXMmvmthPMCoAMDI+V6s8UuiTLKk0CFRmUann714nJ4DMg1bkHEG6aTMEK+kkiSEK36uMHSGQL4bK0BwTjR6cZihNwodEKbA1XCFq+CWV8HjT4PIPLWuGq1RQSYFaSv0SdmLyeFKSlcsTBwUChQBSOVnOJbpQEhjC1EWlbrR1J0ODvbe9FwQuAKQvpmkrQFitq4AJsKaApgEMSNQjL7hew6DFH3EwVDklY5tuqGx6v4HII0ZFMRkdGWGgTMpgaJSxUGQJcZCYDAwUuoGhkXb9BZkuEWL53t0cr0Pcv1LtGYQxkthEDE6QyBGTYVBUFJ5o6O6Klt1gpEiBGPF/hgGe2swzSCXnwJZxu+4aXYFQcMv8TKYYAqjQuFafKsiQGVaXXuaup8hrBsWZLyBLK48sLp/AOTfxi9BAMHJZex6woIJsBedMGWjcbrBdHcw7BGuI9Pqyg3myyDX90AQiQWkJkjZasElldc3FVYEMcbC2GjxKQsfVvChhX0Cc+fK5fJQvB4EmWaQ5aKx11+XvzILVYii1qm0VUlh3JZlrdPKwjR3MP0MM+5gPhqvv4D88yHcclPFSLCIum71nsSCAKKo9P6Eq/aqwoq3w7y2MqaeHw01enliH9z1O1ceezz0B49+MX0EZnFXAAAAAElFTkSuQmCC",videoUrl:"https://www.youtube.com/embed/_m9RM8L6TOw?si=49_XIkQ7g-61dRtV&autoplay=1",videoLength:"2:13",bentoTitle:"Seamless collaboration for marketing teams",bentoDescription:"View and manage your team's links in one place, with fine-grained permissions and SAML SSO for enterprises.",bentoFeatures:[{title:"Unlimited teammates",description:"All paid plans come with unlimited teammates, so you can work with your team without worrying about extra costs.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/teammates.png",href:"/help/article/how-to-invite-teammates"},{title:"SAML SSO",description:"Dub offers SAML SSO for enterprises to provide better security and control over their projects.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/saml.png",href:"/help/category/saml-sso"},{title:"Tags & comments",description:"Organize your links with tags and comments to provide context for your team.",href:"/help/article/how-to-use-tags"},{title:"Fine-grained permissions",description:"Enterprises on Dub can set role-based access controls (RBAC) to control who can create, edit, and delete links."},{title:"Team analytics",description:"See how your team is performing with team analytics, including link clicks and top referrers."}]}];export{a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useEffect as o,useState as d}from"react";function l(){let[t,i]=d(null),[e,h]=d(null);return o(()=>{let n=()=>{window.matchMedia("(max-width: 640px)").matches?i("mobile"):window.matchMedia("(min-width: 641px) and (max-width: 1024px)").matches?i("tablet"):i("desktop"),h({width:window.innerWidth,height:window.innerHeight})};return n(),window.addEventListener("resize",n),()=>{window.removeEventListener("resize",n)}},[]),{device:t,width:e==null?void 0:e.width,height:e==null?void 0:e.height,isMobile:t==="mobile",isTablet:t==="tablet",isDesktop:t==="desktop"}}export{l as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Airplay as e,BarChart as t,Link2 as o,QrCode as i,Users as r}from"lucide-react";var a=[{title:"Powerful Analytics For The Modern Marketer",shortTitle:"Advanced Analytics",accordionTitle:"Analytics that matter",description:"Dub provides powerful analytics for your links, including geolocation, device, browser, and referrer information.",icon:t,slug:"analytics",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/analytics.png",thumbnailBlurhash:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE+0lEQVR4nL2Y63qiShBF5/2f8czkpjGCgoLQV+yzq6saGpVMYjznx/ok0JBa7GrQ/mWsC7fQhLE3MEEJl8eMteP51hH+L8g4e81SXUv8WhS5KFJpwlyhdSZicpGpYCf8VSgT+09EliQYPs5j3ZVIknA+41O5+9K5S6RXE0lEJZEok6Xhhwx/zaLU99L5lkguMJGOuyiiMxHnWMB/wi2py3TMF5L5skifiXQzbJTpIZJkpkQykWGBeHxJRtpLtn8s0pNILtGbcIrYSEcoJzIe53hcY2CRJCOFDxfM0xlGmVtz50EiNt79Too/dUxLn72LRBnlRWaYZPwZEsxwwf8iYpKItE+SaEWgOREu0naEx3EPoQEyQyZDBU8yudRcYrieJ9bHVr17sjOTCKWRJBpwhMShJdzIsfXY73GchIYo1Eehc5QhHOEzpP1szlh8zo9FXBQZJSBwhEDd2FAdbdgfXNhl7I8e+32o2wFSA6SGKNXrc0QRhtH2HFOb468Rkfw99U0RPpl6n+YAtc8RbVQ3VDAKr10oKhe2xF6oPPb5UNYeYgOkBqTFQi3RE2dc74zrnmNqiT4m6EdorqlR5oEiNBeohaqG7z5JfKD4zc6F91LYefztsd9HKRLaQ4YSOkhKKak2kzsJnfIjc5kHiVAaSYTSKGuWoOLXhQurrQtvwqrwYV36KEVClBClQ0KUUNVcivkoRnMrPTBOSUY5kZEX7iNExraSNCgJkqDiXz9ceNlM0N9vWwgVnFBquaJObedZiuZTQ3PKQ2x6WLCQm95PhnmoCLXVVtJYicTzuwtPxFrA9rMI0RgaG1vuou121HoHzw+JJskg/Y7/J8lwKm5M5X6RNNHH+WEhYlGcxV23SMCicBv+rG34vWJom/Y9gyhTcHrrMknxQ4KSpTblJx7fqPgoP00ieSp3iWiJs5NHL4nQY/emCAr/IxL/yOfvNQs9b0iGxxKrwkLIRpmPPQslmUpkUiozEf0TEW0zEXslskJhrxuDO29QtIFAxpr3PeHYy4eJMq+ZzPuOZPhaRWVDeZEKPVwelAh/841vdXkZHhp6CRr8Y4N+N+G9MCgMhYrMkxSfBIjnDUmALfOGc9alYZG9iNR8g/afJXKXSP4VPooYiBikYkJ9NJikkNlPMqstF5uEqHjiZaORhoasUGikwSIbnPuBa2xxU0oRqXCj6ofOkZkIf3VvSQYih0YjFR3KSk8yKGxNRVKxeeHCqmDWJbPZ6VGiwE3hNLh16Tscpc8i9gdPrdmPKjOKUCrtSSMVjVRYZldDBkLbPQpDcRsU+V5OBSfedxMbGkvngDJKGEiYmAZJHE/p54Edf7j9UMRkIjp0nQ4niDQQOSKVA2TqwyQUExKpSBKMRauRgsaCHZ2La1SQqBskjbRJohGJUWS2LpCWnr4gkiR0WnBQOvQkEmUUZBRkmCjUcEKVSEUxoYyoGbujYgE6j6B2pfl3MlMSszQmrtfSFkTGQeOqiRYRFSGRJEO0klBMqWWpQyqw4WKrRuGuK/4UahpL55yYhtpWfj4vSdwSSSyIpDRYQilIKCUy/UyIkbYDbSdyHcOFqjkYk463PUNrAGlBo8/baXEN7SsicQVRi4jK6IPqM2bHcmk90gknyEdwvItgP67fC2Oxhlcvk4ReWBi8KXJl+ImIvkSrYCI6bjPYNowai1UZ2G8meKy5zeIK51zoX56UB7vUOlYfAAAAAElFTkSuQmCC",videoUrl:"https://www.youtube.com/embed/i05FamHTn_I?si=gRnWs5Kf2n6Qyqmd&autoplay=1",videoLength:"2:56",bentoTitle:"Detailed insights for every click",bentoDescription:"Dub provides detailed analytics for every click on your links. See where your audience is coming from and what devices they are using.",bentoFeatures:[{title:"Time-series data",description:"See how your links are performing over time with a beautiful time-series chart.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/time-series-data.png"},{title:"Geographic data",description:"Understand your audience with geographic data \u2013\xA0on both a country and city level.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/geo-data.png"},{title:"Device data",description:"See what devices your audience is using to click on your links"},{title:"Referrer data",description:"Understand which websites are driving the most traffic to your links."},{title:"404 monitoring",description:"Monitor your links for 404 errors and notifies you when they occur."}]},{title:"Branded Links That Stand Out",shortTitle:"Branded Links",accordionTitle:"Use your own domain",description:"Dub offers free and unlimited custom domains on all plans for you to create branded links that stand out.",icon:e,slug:"branded-links",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/branded-links.png",thumbnailBlurhash:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAACXBIWXMAAAsTAAALEwEAmpwYAAADYElEQVR4nMWY2XLDIAxF/f9/28QGs5myCSQBXtLM9OFO09axdXwlIVjccXjnotyJjqZw/UHkv6B83/gsY63XWvt9V15K6YUQfts2v64rVfjbtgkvwjX7vvsFgrVRNsoyuV7p+iPJcR0j2GulGMLzjDFeKZWCwxDv99u/ol7v9DlqXQNMuCYCLzMAg2Xgs6vK3zkqUAf2RxBwI775BPF6UUWYABhB43WL5QGHG0VpIjtQADKOwR0V7inQFGSlID8/ABNdKSkWQXLwWTVwTaWIbFWEwSJAD2F6kJZab0itgSMIxHQAOWAdbpi1KzOQRVAuCbuUa+k+TAeSakSmguY18io1QkD6N48BivYsuZsqgOFAZzBTiA5Ep2LnXSumUi70NUOsuXNtAXhRGIBDVACuBiQLDABp3dIMOtyVKxQkt1/oXA2mACWorbbf6EZswQsEX99+ukG0tkiqcCGW9ltQ/CmIQwimuPIcpKwjJr/YncAUIIAS2YkIIUI9LRxCIggCIFT4YpBUCSTDmAYzAAFXnoBAeun6ggGmAFWoBhH/t7Q64C7sSZtoWgvMWqGoM7FucEdrIO6y4OvCDOuYgbqFNCtAAAWfS8yXIBRGUU1AtM5rDQe504LppEHXN9pZNanrBYq6r4nY/rgjIIABEH0DxN1owf3c10YjDGUrFDSrhUBwEJZa3BVRHJEcpDzMfhuEL95PQMQEYisdDFpyghiBuPupNYKxCAaPUpcgo5QaCbqZLGtNdsOktDKD+rg/c30T5ARGJDWI7IauNxyn1ZMp+EMQ+YEjojgiU0ssIMwR2Mu4/0st2noBLAe/lwUIIFQdaVJbTFuAEYR7tDdpQPPOxYfcOQh6+y2lKExapDCIxiAWFfonjhydIyOQi641d0RiRwpEXJSuHLm3IJ61X/dJ+/0wtYojBu/3B4cYVy58ZR3BqTXURWrR9HJdwXOYuxB1xK8aguh5sU8gKsgO6WXmrkxg7kFQNxJEGoMGINNZawIiCojEICS9TH0wP1I6Oz8bHT2Zk5SiIGgnWIHkaEPV/o5rBIN0riBNz8guxO/zfRCUWgRGzWHwin8n6A6CpVQFUQbvR/oUmwoBcAgMMoN5Ihx8fzQ1Aqn7Ev0YpINh52K6jC51oDwNmmtwxlYn7fb7L/LDQmuPkz48AAAAAElFTkSuQmCC",videoUrl:"https://www.youtube.com/embed/LbgvQxLVqq4?si=7_sJVXFZINPxbAdM&autoplay=1",videoLength:"3:23",bentoTitle:"Impress your audience with branded links",bentoDescription:"Create custom short links that match your brand and stand out from the crowd, with free and unlimited custom domains on all plans.",bentoFeatures:[{title:"Unlimited custom domains",description:"Add as many custom domains as you want to your project at no extra cost.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/domains.png",href:"/help/article/how-to-add-custom-domain"},{title:"Custom Social Media Cards",description:"Customize the title, description, and image of your links when shared on social media.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/social-cards.png",href:"/help/article/how-to-create-link#custom-social-media-cards"},{title:"Free SSL certificates",description:"Dub automatically provisions SSL certificates for your custom domains."},{title:"Link cloaking",description:"Hide your destination URL with link cloaking to make your links look cleaner.",href:"/help/article/how-to-create-link#link-cloaking"},{title:"Custom QR codes",description:"With Dub Pro, you can create branded QR codes for your links.",href:"/features/qr-codes"}]},{title:"Free QR Code Generator",shortTitle:"QR Codes",accordionTitle:"Free QR Code Generator",description:"QR codes and short links are like peas in a pod. Dub offers free QR codes for every short link you create.",icon:i,slug:"qr-codes",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/qr-codes.png",thumbnailBlurhash:"data:image/png;base64,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",videoUrl:"https://www.youtube.com/embed/fcWkUZoJJ7w?si=LKNOO67aL6Q-3xN4&autoplay=1",videoLength:"1:07",bentoTitle:"Gorgeous QR codes for your links",bentoDescription:"Create beautiful flyers and posters with QR codes for your links."},{title:"Personalize Your Short Links",shortTitle:"Personalization",accordionTitle:"Personalize Your Short links",description:"Customize your link's behavior with device targeting, geo targeting, link cloaking, and more.",icon:o,slug:"personalization",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/personalization.png",thumbnailBlurhash:"data:image/png;base64,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",videoUrl:"https://www.youtube.com/embed/K2UdLK8k1I4?si=79hu5XSW9pSjODOm&autoplay=1",videoLength:"2:25",bentoTitle:"Optimize your links for every audience",bentoDescription:"Get the most out of every click by delivering the right experience to the right audience.",bentoFeatures:[{title:"Device targeting",description:"Redirect your audience to different destinations based on their device type (e.g. iOS/Android).",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/device-targeting.png",href:"/help/article/how-to-create-link#device-targeting-ios--android"},{title:"Geo targeting",description:"Redirect your audience to different destinations based on their country of origin.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/geo-targeting.png",href:"/help/article/how-to-create-link#geo-targeting"},{title:"Expiration dates",description:"Automatically disable your links after a certain date & time.",href:"/help/article/how-to-create-link#expiration-date"},{title:"Password protection",description:"Protect your links with passwords to prevent unauthorized access.",href:"/help/article/how-to-create-link#password-protection"},{title:"Link cloaking",description:"Hide your destination URL with link cloaking to make your links look cleaner.",href:"/help/article/how-to-create-link#link-cloaking"}]},{title:"Collaborate With Your Team",shortTitle:"Team Collaboration",accordionTitle:"Collaborate With Your Team",description:"Invite your teammates to collaborate on your links. For enterprises, Dub offers SAML SSO for better security.",icon:r,slug:"collaboration",thumbnail:"https://d2vwwcvoksz7ty.cloudfront.net/features/collaboration.png",thumbnailBlurhash:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAdCAYAAADoxT9SAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE0UlEQVR4nM2YC3eiWBCE5///yIlRQN6vyxu0p6ovILLZTMzDXc+pg6AJ/VnVfYFf8g2v6/Uql8tl1TRNq8ZxvNP2s+X7/HvqK69f3wGxgOyLH4bhTW2hvgvmW0D2EEvBfd+/qbdg/hOQ5aQW4opiLijqBsFiu65TtW27UTcfvwfaw3wG6CGQPYB1wkJYgEE6FMiCGxTeNI2qrqH5/QJFoC3M00DuIS4rBH/NYRhXFxRCi6+lqqhqo1qPL0DWme9x5UMg70GwiH5xAQWyWGOMFGUpRVFInlO5brlf4jg/r2agxZnFlc/2yxdAFohBWhTD+BhTKUCW5ZKmmSRJInFMxbrlPo8TjEB0aYFhxL7S+A+B3ENMa2M3TatOlKXRIpMk1cLDKJIwDCWAuI2wz+Npms4wRqPGmP04yJsQu0jRDQtRKEQUxRIEofh+IOezv4r7BKJDdIZRW1zZxut5IPOYZbNaNxCpotTiothCsHDXO4vjepArLrYe9i1MpDGjK+yXLQj//2ca/iGQ26ide2N1o0JfFPilU0BEcvZ8cRxPTkdXjkdnleO4KwxdIzh7hfFin/w8yOW6cwMgHUCaDm40cMOgqFyiMBH/HIrrnBXi9eDI4XCCjnh/UhgXgHSLrqSIIZ2sq/qu4Xm+HwHRxW8Zt4AY4Ea/xMrUUuQASXIJgxhuBOKcznJ8deXwAoiX46rjK1w5eepYGETaTytI+0yQ8QbStYM0dSumrCXPjCQxQRI5u+E9yO8F5rQBCRQ6SbLng0wzyNAzVqOC1FUnpmgkTwESAcSfQY6+HA+evL4gWr8hbBmzE+AYO8YvCtEjACkRyxrxtCCjnucG8mGOx0DGLUizBykAkgIkEvcUoGi48kIYNPzBVYec41k8N5DAx3oSpZKluQ4KDgxOwKeBTOMFINMK0gCkKlopMkytuJQoyCXw4IpDGDjz6lvBIffki+dgbTlH+B4WRUQxz0rtMfYahwdje9mDfBDmQUf2IP0MUgPESBzClXMmvmthPMCoAMDI+V6s8UuiTLKk0CFRmUann714nJ4DMg1bkHEG6aTMEK+kkiSEK36uMHSGQL4bK0BwTjR6cZihNwodEKbA1XCFq+CWV8HjT4PIPLWuGq1RQSYFaSv0SdmLyeFKSlcsTBwUChQBSOVnOJbpQEhjC1EWlbrR1J0ODvbe9FwQuAKQvpmkrQFitq4AJsKaApgEMSNQjL7hew6DFH3EwVDklY5tuqGx6v4HII0ZFMRkdGWGgTMpgaJSxUGQJcZCYDAwUuoGhkXb9BZkuEWL53t0cr0Pcv1LtGYQxkthEDE6QyBGTYVBUFJ5o6O6Klt1gpEiBGPF/hgGe2swzSCXnwJZxu+4aXYFQcMv8TKYYAqjQuFafKsiQGVaXXuaup8hrBsWZLyBLK48sLp/AOTfxi9BAMHJZex6woIJsBedMGWjcbrBdHcw7BGuI9Pqyg3myyDX90AQiQWkJkjZasElldc3FVYEMcbC2GjxKQsfVvChhX0Cc+fK5fJQvB4EmWaQ5aKx11+XvzILVYii1qm0VUlh3JZlrdPKwjR3MP0MM+5gPhqvv4D88yHcclPFSLCIum71nsSCAKKo9P6Eq/aqwoq3w7y2MqaeHw01enliH9z1O1ceezz0B49+MX0EZnFXAAAAAElFTkSuQmCC",videoUrl:"https://www.youtube.com/embed/_m9RM8L6TOw?si=49_XIkQ7g-61dRtV&autoplay=1",videoLength:"2:13",bentoTitle:"Seamless collaboration for marketing teams",bentoDescription:"View and manage your team's links in one place, with fine-grained permissions and SAML SSO for enterprises.",bentoFeatures:[{title:"Unlimited teammates",description:"All paid plans come with unlimited teammates, so you can work with your team without worrying about extra costs.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/teammates.png",href:"/help/article/how-to-invite-teammates"},{title:"SAML SSO",description:"Dub offers SAML SSO for enterprises to provide better security and control over their projects.",image:"https://d2vwwcvoksz7ty.cloudfront.net/features/saml.png",href:"/help/category/saml-sso"},{title:"Tags & comments",description:"Organize your links with tags and comments to provide context for your team.",href:"/help/article/how-to-use-tags"},{title:"Fine-grained permissions",description:"Enterprises on Dub can set role-based access controls (RBAC) to control who can create, edit, and delete links."},{title:"Team analytics",description:"See how your team is performing with team analytics, including link clicks and top referrers."}]}];export{a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
var a={AF:"Afghanistan",AL:"Albania",DZ:"Algeria",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AQ:"Antarctica",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia",AW:"Aruba",AU:"Australia",AT:"Austria",AZ:"Azerbaijan",BS:"Bahamas",BH:"Bahrain",BD:"Bangladesh",BB:"Barbados",BY:"Belarus",BE:"Belgium",BZ:"Belize",BJ:"Benin",BM:"Bermuda",BT:"Bhutan",BO:"Bolivia",BA:"Bosnia and Herzegovina",BW:"Botswana",BV:"Bouvet Island",BR:"Brazil",IO:"British Indian Ocean Territory",BN:"Brunei Darussalam",BG:"Bulgaria",BF:"Burkina Faso",BI:"Burundi",KH:"Cambodia",CM:"Cameroon",CA:"Canada",CV:"Cape Verde",KY:"Cayman Islands",CF:"Central African Republic",TD:"Chad",CL:"Chile",CN:"China",CX:"Christmas Island",CC:"Cocos (Keeling) Islands",CO:"Colombia",KM:"Comoros",CG:"Congo (Republic)",CD:"Congo (Democratic Republic)",CK:"Cook Islands",CR:"Costa Rica",CI:"Ivory Coast",HR:"Croatia",CU:"Cuba",CY:"Cyprus",CZ:"Czech Republic",DK:"Denmark",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic",EC:"Ecuador",EG:"Egypt",SV:"El Salvador",GQ:"Equatorial Guinea",ER:"Eritrea",EE:"Estonia",ET:"Ethiopia",FK:"Falkland Islands",FO:"Faroe Islands",FJ:"Fiji",FI:"Finland",FR:"France",GF:"French Guiana",PF:"French Polynesia",TF:"French Southern Territories",GA:"Gabon",GM:"Gambia",GE:"Georgia",DE:"Germany",GH:"Ghana",GI:"Gibraltar",GR:"Greece",GL:"Greenland",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea",GW:"Guinea-Bissau",GY:"Guyana",HT:"Haiti",HM:"Heard Island and McDonald Islands",VA:"Vatican City",HN:"Honduras",HK:"Hong Kong",HU:"Hungary",IS:"Iceland",IN:"India",ID:"Indonesia",IR:"Iran",IQ:"Iraq",IE:"Ireland",IL:"Israel",IT:"Italy",JM:"Jamaica",JP:"Japan",JO:"Jordan",KZ:"Kazakhstan",KE:"Kenya",KI:"Kiribati",KP:"North Korea",KR:"South Korea",KW:"Kuwait",KG:"Kyrgyzstan",LA:"Laos",LV:"Latvia",LB:"Lebanon",LS:"Lesotho",LR:"Liberia",LY:"Libya",LI:"Liechtenstein",LT:"Lithuania",LU:"Luxembourg",MO:"Macao",MG:"Madagascar",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania",MU:"Mauritius",YT:"Mayotte",MX:"Mexico",FM:"Micronesia",MD:"Moldova",MC:"Monaco",MN:"Mongolia",MS:"Montserrat",MA:"Morocco",MZ:"Mozambique",MM:"Myanmar",NA:"Namibia",NR:"Nauru",NP:"Nepal",NL:"Netherlands",NC:"New Caledonia",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",MK:"Macedonia",MP:"Northern Mariana Islands",NO:"Norway",OM:"Oman",PK:"Pakistan",PW:"Palau",PS:"Palestine",PA:"Panama",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru",PH:"Philippines",PN:"Pitcairn",PL:"Poland",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar",RE:"Reunion",RO:"Romania",RU:"Russia",RW:"Rwanda",SH:"Saint Helena",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",PM:"Saint Pierre and Miquelon",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",ST:"Sao Tome and Principe",SA:"Saudi Arabia",SN:"Senegal",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SK:"Slovakia",SI:"Slovenia",SB:"Solomon Islands",SO:"Somalia",ZA:"South Africa",GS:"South Georgia and the South Sandwich Islands",ES:"Spain",LK:"Sri Lanka",SD:"Sudan",SR:"Suriname",SJ:"Svalbard and Jan Mayen",SZ:"Eswatini",SE:"Sweden",CH:"Switzerland",SY:"Syrian Arab Republic",TW:"Taiwan",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand",TL:"Timor-Leste",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia",TR:"T\xFCrkiye",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",UG:"Uganda",UA:"Ukraine",AE:"United Arab Emirates",GB:"United Kingdom",US:"United States",UM:"United States Minor Outlying Islands",UY:"Uruguay",UZ:"Uzbekistan",VU:"Vanuatu",VE:"Venezuela",VN:"Vietnam",VG:"Virgin Islands, British",VI:"Virgin Islands, U.S.",WF:"Wallis and Futuna",EH:"Western Sahara",YE:"Yemen",ZM:"Zambia",ZW:"Zimbabwe",AX:"\xC5land Islands",BQ:"Bonaire, Sint Eustatius and Saba",CW:"Cura\xE7ao",GG:"Guernsey",IM:"Isle of Man",JE:"Jersey",ME:"Montenegro",BL:"Saint Barth\xE9lemy",MF:"Saint Martin (French part)",RS:"Serbia",SX:"Sint Maarten (Dutch part)",SS:"South Sudan",XK:"Kosovo"},n=a;export{n as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{clsx as e}from"clsx";import{twMerge as t}from"tailwind-merge";function s(...r){return t(e(r))}export{s as a};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as c,y as l,z as u}from"./chunk-ONIHRKH7.mjs";import{a}from"./chunk-MODISIUH.mjs";import{clsx as p}from"clsx";import{twMerge as m}from"tailwind-merge";import f from"ms";import{customAlphabet as h}from"nanoid";import y from"@sindresorhus/slugify";function v(...e){return m(p(e))}function M({title:e="Dub - Link Management for Modern Marketing Teams",description:t="Dub is an open-source link management tool for modern marketing teams to create, share, and track short links.",image:r="https://dub.co/_static/thumbnail.png",icons:o="/favicon.ico",noIndex:n=!1}={}){return{title:e,description:t,openGraph:{title:e,description:t,images:[{url:r}]},twitter:{card:"summary_large_image",title:e,description:t,images:[r],creator:"@dubdotco"},icons:o,metadataBase:new URL(c),themeColor:"#FFF",...n&&{robots:{index:!1,follow:!1}}}}var O=h("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7);async function _(e,t){let r=await fetch(e,t);if(!r.ok){let o=await r.text(),n=new Error(o);throw n.status=r.status,n}return r.json()}function $(e,t={digits:1}){if(!e)return"0";if(t.full)return Intl.NumberFormat("en-US").format(e);let r=[{value:1,symbol:""},{value:1e3,symbol:"K"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"},{value:1e12,symbol:"T"},{value:1e15,symbol:"P"},{value:1e18,symbol:"E"}],o=/\.0+$|(\.[0-9]*[1-9])0+$/;var n=r.slice().reverse().find(function(s){return e>=s.value});return n?(e/n.value).toFixed(t.digits).replace(o,"$1")+n.symbol:"0"}function T(e){return!e||typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}var A=(e,t)=>e.reduce((r,o,n)=>{let s=Math.floor(n/t);return r[s]||(r[s]=[]),r[s].push(o),r},[]);function E({key:e,domain:t="dub.sh",localhost:r,pretty:o,noDomain:n}){let s=`${r?"http://home.localhost:8888":`https://${t}`}${e!=="_root"?`/${e}`:""}`;return n?`/${e}`:o?s.replace(/^https?:\/\//,""):s}var F=(e,{withAgo:t}={})=>{if(!e)return"Never";let r=Date.now()-new Date(e).getTime();return r<1e3?"Just now":r>828e5?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:new Date(e).getFullYear()!==new Date().getFullYear()?"numeric":void 0}):`${f(r)}${t?" ago":""}`},N=e=>{let t=e?new Date(e):new Date;return t.toString()==="Invalid Date"?"":new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().split(":").slice(0,2).join(":")},C=e=>new Date(`${e}T00:00:00Z`).toLocaleDateString("en-US",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}),q=e=>{let t=new Date,r=t.getDate(),o=t.getMonth(),n=t.getFullYear();if(r>=e)return{firstDay:new Date(n,o,e),lastDay:new Date(n,o+1,e-1)};{let s=o===0?n-1:n,i=o===0?11:o-1;return{firstDay:new Date(s,i,e),lastDay:new Date(n,o,e-1)}}},d=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()},I=e=>{let t=d();return e>t?t:e},K=e=>{let t=y(e,{separator:""});if(t.length<3)return"";if(a.has(t.slice(-2)))return`${t.slice(0,-2)}.${t.slice(-2)}`;let r=t.replace(/[aeiou]/g,"");return r.length>=3&&a.has(r.slice(-2))?`${r.slice(0,-2)}.${r.slice(-2)}`:`${[t,r].reduce((n,s)=>n.length<s.length?n:s)}.to`},P=new RegExp(/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/),z=new RegExp(/^[0-9A-Za-z\u0080-\uFFFF\/\-]*$/u),H=new RegExp(/^[a-zA-Z0-9\-]+$/),Z=(e,t)=>e===t?null:e.slice(0,e.length-t.length-1),j=e=>{let t;try{t=new URL(e.replace(/^[a-zA-Z]+:\/\//,"https://")).hostname}catch{return""}if(t==="youtu.be")return"youtube.com";if(t==="raw.githubusercontent.com")return"github.com";if(t.endsWith(".vercel.app"))return"vercel.app";let r=t.split(".");return r.length>2?l.has(r[r.length-2])&&a.has(r[r.length-1])||u.has(r.slice(-2).join("."))?r.slice(-3).join("."):r.slice(-2).join("."):t},g=e=>{try{return new URL(e),!0}catch{return!1}},W=e=>{if(g(e))return e;try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).toString()}catch{return null}},B=e=>{if(g(e))return new URL(e).hostname.replace(/^www\./,"");try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).hostname.replace(/^www\./,"")}catch{return null}},J=(e,t)=>{let r=new URLSearchParams({...e.query,...t}).toString();return`${r?"?":""}${r}`},Y=({router:e,param:t,value:r})=>{t!=="page"&&delete e.query.page;let o;r.length>0?o={...e.query,[t]:r}:(delete e.query[t],o={...e.query});let{slug:n,...s}=o;e.replace({pathname:`/${e.query.slug||"links"}`,query:s})},V=(e,t)=>!e||e.length<=t?e:`${e.slice(0,t-3)}...`,Q=e=>{if(!e)return{};try{let t=new URL(e).searchParams,r={};for(let[o,n]of t.entries())n&&n!==""&&(r[o]=n);return r}catch{return{}}},G=(e,t)=>{if(!e)return"";try{let r=new URL(e);for(let[o,n]of Object.entries(t))n===""?r.searchParams.delete(o):r.searchParams.set(o,n);return r.toString()}catch{return""}},x=[{display:"Referral (ref)",key:"ref",examples:"twitter, facebook"},{display:"UTM Source",key:"utm_source",examples:"twitter, facebook"},{display:"UTM Medium",key:"utm_medium",examples:"social, email"},{display:"UTM Campaign",key:"utm_campaign",examples:"summer_sale"},{display:"UTM Term",key:"utm_term",examples:"blue_shoes"},{display:"UTM Content",key:"utm_content",examples:"logolink"}],X=e=>{try{let t=new URL(e);return x.forEach(r=>t.searchParams.delete(r.key)),t.toString()}catch{return e}};async function ee(e){let r=new TextEncoder().encode(e),o=await crypto.subtle.digest("MD5",r);return Array.from(new Uint8Array(o)).map(i=>i.toString(16).padStart(2,"0")).join("")}var D={cron:process.env.DUB_SLACK_HOOK_CRON,links:process.env.DUB_SLACK_HOOK_LINKS},te=async({message:e,type:t,mention:r=!1})=>{(process.env.NODE_ENV==="development"||!process.env.DUB_SLACK_HOOK_CRON||!process.env.DUB_SLACK_HOOK_LINKS)&&console.log(e);let o=D[t];if(!!o)try{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({blocks:[{type:"section",text:{type:"mrkdwn",text:`${r?"<@U0404G6J3NJ> ":""}${e}`}}]})})}catch(n){console.log(`Failed to log to Dub Slack. Error: ${n}`)}},w=(e,t)=>{if(e===t)return!0;if(typeof e!="object"||typeof t!="object"||e===null||t===null)return!1;let r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(let n of r)if(!o.includes(n)||!w(e[n],t[n]))return!1;return!0};export{v as a,M as b,O as c,_ as d,$ as e,T as f,A as g,E as h,F as i,N as j,C as k,q as l,d as m,I as n,K as o,P as p,z as q,H as r,Z as s,j as t,g as u,W as v,B as w,J as x,Y as y,V as z,Q as A,G as B,x as C,X as D,ee as E,te as F,w as G};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var m=new Set(["af","ax","al","dz","as","ad","ao","ai","aq","ag","ar","am","aw","ac","au","at","az","bs","bh","bd","bb","eus","by","be","bz","bj","bm","bt","bo","bq","an","nl","ba","bw","bv","br","io","vg","bn","bg","bf","mm","bi","kh","cm","ca","cv","cat","ky","cf","td","cl","cn","cx","cc","co","km","cd","cg","ck","cr","ci","hr","cu","cw","cy","cz","dk","dj","dm","do","tl","tp","ec","eg","sv","gq","er","ee","et","eu","fk","fo","fm","fj","fi","fr","gf","pf","tf","ga","gal","gm","ps","ge","de","gh","gi","gr","gl","gd","gp","gu","gt","gg","gn","gw","gy","ht","hm","hn","hk","hu","is","in","id","ir","iq","ie","im","il","it","jm","jp","je","jo","kz","ke","ki","kw","kg","la","lv","lb","ls","lr","ly","li","lt","lu","mo","mk","mg","mw","my","mv","ml","mt","mh","mq","mr","mu","yt","mx","md","mc","mn","me","ms","ma","mz","mm","na","nr","np","nl","nc","nz","ni","ne","ng","nu","nf","nc","tr","kp","mp","no","om","pk","pw","ps","pa","pg","py","pe","ph","pn","pl","pt","pr","qa","ro","ru","rw","re","bq","an","bl","gp","fr","sh","kn","lc","mf","gp","fr","pm","vc","ws","sm","st","sa","sn","rs","sc","sl","sg","bq","an","nl","sx","an","sk","si","sb","so","so","za","gs","kr","ss","es","lk","sd","sr","sj","sz","se","ch","sy","tw","tj","tz","th","tg","tk","to","tt","tn","tr","tm","tc","tv","ug","ua","ae","uk","us","vi","uy","uz","vu","va","ve","vn","wf","eh","ma","ye","zm","zw"]),s=m;export{s as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{h as c,w as l,x as u}from"./chunk-UE5AMEFG.mjs";import{a}from"./chunk-XACKIZEQ.mjs";import{clsx as p}from"clsx";import{twMerge as m}from"tailwind-merge";import f from"ms";import{customAlphabet as h}from"nanoid";import y from"@sindresorhus/slugify";function v(...e){return m(p(e))}function M({title:e="Dub - Link Management for Modern Marketing Teams",description:t="Dub is an open-source link management tool for modern marketing teams to create, share, and track short links.",image:r="https://dub.co/_static/thumbnail.png",icons:o="/favicon.ico",noIndex:n=!1}={}){return{title:e,description:t,openGraph:{title:e,description:t,images:[{url:r}]},twitter:{card:"summary_large_image",title:e,description:t,images:[r],creator:"@dubdotco"},icons:o,metadataBase:new URL(c),themeColor:"#FFF",...n&&{robots:{index:!1,follow:!1}}}}var O=h("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7);async function _(e,t){let r=await fetch(e,t);if(!r.ok){let o=await r.text(),n=new Error(o);throw n.status=r.status,n}return r.json()}function $(e,t={digits:1}){if(!e)return"0";if(t.full)return Intl.NumberFormat("en-US").format(e);let r=[{value:1,symbol:""},{value:1e3,symbol:"K"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"},{value:1e12,symbol:"T"},{value:1e15,symbol:"P"},{value:1e18,symbol:"E"}],o=/\.0+$|(\.[0-9]*[1-9])0+$/;var n=r.slice().reverse().find(function(s){return e>=s.value});return n?(e/n.value).toFixed(t.digits).replace(o,"$1")+n.symbol:"0"}function T(e){return!e||typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}var A=(e,t)=>e.reduce((r,o,n)=>{let s=Math.floor(n/t);return r[s]||(r[s]=[]),r[s].push(o),r},[]);function E({key:e,domain:t="dub.sh",localhost:r,pretty:o,noDomain:n}){let s=`${r?"http://home.localhost:8888":`https://${t}`}${e!=="_root"?`/${e}`:""}`;return n?`/${e}`:o?s.replace(/^https?:\/\//,""):s}var F=(e,{withAgo:t}={})=>{if(!e)return"Never";let r=Date.now()-new Date(e).getTime();return r<1e3?"Just now":r>828e5?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:new Date(e).getFullYear()!==new Date().getFullYear()?"numeric":void 0}):`${f(r)}${t?" ago":""}`},N=e=>{let t=e?new Date(e):new Date;return t.toString()==="Invalid Date"?"":new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().split(":").slice(0,2).join(":")},C=e=>new Date(`${e}T00:00:00Z`).toLocaleDateString("en-US",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}),q=e=>{let t=new Date,r=t.getDate(),o=t.getMonth(),n=t.getFullYear();if(r>=e)return{firstDay:new Date(n,o,e),lastDay:new Date(n,o+1,e-1)};{let s=o===0?n-1:n,i=o===0?11:o-1;return{firstDay:new Date(s,i,e),lastDay:new Date(n,o,e-1)}}},d=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()},I=e=>{let t=d();return e>t?t:e},K=e=>{let t=y(e,{separator:""});if(t.length<3)return"";if(a.has(t.slice(-2)))return`${t.slice(0,-2)}.${t.slice(-2)}`;let r=t.replace(/[aeiou]/g,"");return r.length>=3&&a.has(r.slice(-2))?`${r.slice(0,-2)}.${r.slice(-2)}`:`${[t,r].reduce((n,s)=>n.length<s.length?n:s)}.to`},P=new RegExp(/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/),z=new RegExp(/^[0-9A-Za-z\u0080-\uFFFF\/\-]*$/u),H=new RegExp(/^[a-zA-Z0-9\-]+$/),Z=(e,t)=>e===t?null:e.slice(0,e.length-t.length-1),j=e=>{let t;try{t=new URL(e.replace(/^[a-zA-Z]+:\/\//,"https://")).hostname}catch{return""}if(t==="youtu.be")return"youtube.com";if(t==="raw.githubusercontent.com")return"github.com";if(t.endsWith(".vercel.app"))return"vercel.app";let r=t.split(".");return r.length>2?l.has(r[r.length-2])&&a.has(r[r.length-1])||u.has(r.slice(-2).join("."))?r.slice(-3).join("."):r.slice(-2).join("."):t},g=e=>{try{return new URL(e),!0}catch{return!1}},W=e=>{if(g(e))return e;try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).toString()}catch{return null}},B=e=>{if(g(e))return new URL(e).hostname.replace(/^www\./,"");try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).hostname.replace(/^www\./,"")}catch{return null}},J=(e,t)=>{let r=new URLSearchParams({...e.query,...t}).toString();return`${r?"?":""}${r}`},Y=({router:e,param:t,value:r})=>{t!=="page"&&delete e.query.page;let o;r.length>0?o={...e.query,[t]:r}:(delete e.query[t],o={...e.query});let{slug:n,...s}=o;e.replace({pathname:`/${e.query.slug||"links"}`,query:s})},V=(e,t)=>!e||e.length<=t?e:`${e.slice(0,t-3)}...`,Q=e=>{if(!e)return{};try{let t=new URL(e).searchParams,r={};for(let[o,n]of t.entries())n&&n!==""&&(r[o]=n);return r}catch{return{}}},G=(e,t)=>{if(!e)return"";try{let r=new URL(e);for(let[o,n]of Object.entries(t))n===""?r.searchParams.delete(o):r.searchParams.set(o,n);return r.toString()}catch{return""}},x=[{display:"Referral (ref)",key:"ref",examples:"twitter, facebook"},{display:"UTM Source",key:"utm_source",examples:"twitter, facebook"},{display:"UTM Medium",key:"utm_medium",examples:"social, email"},{display:"UTM Campaign",key:"utm_campaign",examples:"summer_sale"},{display:"UTM Term",key:"utm_term",examples:"blue_shoes"},{display:"UTM Content",key:"utm_content",examples:"logolink"}],X=e=>{try{let t=new URL(e);return x.forEach(r=>t.searchParams.delete(r.key)),t.toString()}catch{return e}};async function ee(e){let r=new TextEncoder().encode(e),o=await crypto.subtle.digest("MD5",r);return Array.from(new Uint8Array(o)).map(i=>i.toString(16).padStart(2,"0")).join("")}var D={cron:process.env.DUB_SLACK_HOOK_CRON,links:process.env.DUB_SLACK_HOOK_LINKS},te=async({message:e,type:t,mention:r=!1})=>{(process.env.NODE_ENV==="development"||!process.env.DUB_SLACK_HOOK_CRON||!process.env.DUB_SLACK_HOOK_LINKS)&&console.log(e);let o=D[t];if(!!o)try{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({blocks:[{type:"section",text:{type:"mrkdwn",text:`${r?"<@U0404G6J3NJ> ":""}${e}`}}]})})}catch(n){console.log(`Failed to log to Dub Slack. Error: ${n}`)}},w=(e,t)=>{if(e===t)return!0;if(typeof e!="object"||typeof t!="object"||e===null||t===null)return!1;let r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(let n of r)if(!o.includes(n)||!w(e[n],t[n]))return!1;return!0};export{v as a,M as b,O as c,_ as d,$ as e,T as f,A as g,E as h,F as i,N as j,C as k,q as l,d as m,I as n,K as o,P as p,z as q,H as r,Z as s,j as t,g as u,W as v,B as w,J as x,Y as y,V as z,Q as A,G as B,x as C,X as D,ee as E,te as F,w as G};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h as c,w as l,x as u}from"./chunk-Y2N4Y4WZ.mjs";import{a}from"./chunk-MODISIUH.mjs";import p from"@sindresorhus/slugify";import{clsx as m}from"clsx";import f from"ms";import{customAlphabet as h}from"nanoid";import{twMerge as y}from"tailwind-merge";function v(...e){return y(m(e))}function M({title:e="Dub - Link Management for Modern Marketing Teams",description:t="Dub is an open-source link management tool for modern marketing teams to create, share, and track short links.",image:r="https://dub.co/_static/thumbnail.png",icons:o="/favicon.ico",noIndex:n=!1}={}){return{title:e,description:t,openGraph:{title:e,description:t,images:[{url:r}]},twitter:{card:"summary_large_image",title:e,description:t,images:[r],creator:"@dubdotco"},icons:o,metadataBase:new URL(c),themeColor:"#FFF",...n&&{robots:{index:!1,follow:!1}}}}var O=h("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7);async function _(e,t){let r=await fetch(e,t);if(!r.ok){let o=await r.text(),n=new Error(o);throw n.status=r.status,n}return r.json()}function $(e,t={digits:1}){if(!e)return"0";if(t.full)return Intl.NumberFormat("en-US").format(e);let r=[{value:1,symbol:""},{value:1e3,symbol:"K"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"},{value:1e12,symbol:"T"},{value:1e15,symbol:"P"},{value:1e18,symbol:"E"}],o=/\.0+$|(\.[0-9]*[1-9])0+$/;var n=r.slice().reverse().find(function(s){return e>=s.value});return n?(e/n.value).toFixed(t.digits).replace(o,"$1")+n.symbol:"0"}function T(e){return!e||typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}var A=(e,t)=>e.reduce((r,o,n)=>{let s=Math.floor(n/t);return r[s]||(r[s]=[]),r[s].push(o),r},[]);function E({key:e,domain:t="dub.sh",localhost:r,pretty:o,noDomain:n}){let s=`${r?"http://home.localhost:8888":`https://${t}`}${e!=="_root"?`/${e}`:""}`;return n?`/${e}`:o?s.replace(/^https?:\/\//,""):s}var F=(e,{withAgo:t}={})=>{if(!e)return"Never";let r=Date.now()-new Date(e).getTime();return r<1e3?"Just now":r>828e5?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:new Date(e).getFullYear()!==new Date().getFullYear()?"numeric":void 0}):`${f(r)}${t?" ago":""}`},N=e=>{let t=e?new Date(e):new Date;return t.toString()==="Invalid Date"?"":new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().split(":").slice(0,2).join(":")},C=e=>new Date(`${e}T00:00:00Z`).toLocaleDateString("en-US",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}),q=e=>{let t=new Date,r=t.getDate(),o=t.getMonth(),n=t.getFullYear();if(r>=e)return{firstDay:new Date(n,o,e),lastDay:new Date(n,o+1,e-1)};{let s=o===0?n-1:n,i=o===0?11:o-1;return{firstDay:new Date(s,i,e),lastDay:new Date(n,o,e-1)}}},d=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()},I=e=>{let t=d();return e>t?t:e},K=e=>{let t=p(e,{separator:""});if(t.length<3)return"";if(a.has(t.slice(-2)))return`${t.slice(0,-2)}.${t.slice(-2)}`;let r=t.replace(/[aeiou]/g,"");return r.length>=3&&a.has(r.slice(-2))?`${r.slice(0,-2)}.${r.slice(-2)}`:`${[t,r].reduce((n,s)=>n.length<s.length?n:s)}.to`},P=new RegExp(/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/),z=new RegExp(/^[0-9A-Za-z\u0080-\uFFFF\/\-]*$/u),H=new RegExp(/^[a-zA-Z0-9\-]+$/),Z=(e,t)=>e===t?null:e.slice(0,e.length-t.length-1),j=e=>{let t;try{t=new URL(e.replace(/^[a-zA-Z]+:\/\//,"https://")).hostname}catch{return""}if(t==="youtu.be")return"youtube.com";if(t==="raw.githubusercontent.com")return"github.com";if(t.endsWith(".vercel.app"))return"vercel.app";let r=t.split(".");return r.length>2?l.has(r[r.length-2])&&a.has(r[r.length-1])||u.has(r.slice(-2).join("."))?r.slice(-3).join("."):r.slice(-2).join("."):t},g=e=>{try{return new URL(e),!0}catch{return!1}},W=e=>{if(g(e))return e;try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).toString()}catch{return null}},B=e=>{if(g(e))return new URL(e).hostname.replace(/^www\./,"");try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).hostname.replace(/^www\./,"")}catch{return null}},J=(e,t)=>{let r=new URLSearchParams({...e.query,...t}).toString();return`${r?"?":""}${r}`},Y=({router:e,param:t,value:r})=>{t!=="page"&&delete e.query.page;let o;r.length>0?o={...e.query,[t]:r}:(delete e.query[t],o={...e.query});let{slug:n,...s}=o;e.replace({pathname:`/${e.query.slug||"links"}`,query:s})},V=(e,t)=>!e||e.length<=t?e:`${e.slice(0,t-3)}...`,Q=e=>{if(!e)return{};try{let t=new URL(e).searchParams,r={};for(let[o,n]of t.entries())n&&n!==""&&(r[o]=n);return r}catch{return{}}},G=(e,t)=>{if(!e)return"";try{let r=new URL(e);for(let[o,n]of Object.entries(t))n===""?r.searchParams.delete(o):r.searchParams.set(o,n);return r.toString()}catch{return""}},x=[{display:"Referral (ref)",key:"ref",examples:"twitter, facebook"},{display:"UTM Source",key:"utm_source",examples:"twitter, facebook"},{display:"UTM Medium",key:"utm_medium",examples:"social, email"},{display:"UTM Campaign",key:"utm_campaign",examples:"summer_sale"},{display:"UTM Term",key:"utm_term",examples:"blue_shoes"},{display:"UTM Content",key:"utm_content",examples:"logolink"}],X=e=>{try{let t=new URL(e);return x.forEach(r=>t.searchParams.delete(r.key)),t.toString()}catch{return e}};async function ee(e){let r=new TextEncoder().encode(e),o=await crypto.subtle.digest("MD5",r);return Array.from(new Uint8Array(o)).map(i=>i.toString(16).padStart(2,"0")).join("")}var D={cron:process.env.DUB_SLACK_HOOK_CRON,links:process.env.DUB_SLACK_HOOK_LINKS},te=async({message:e,type:t,mention:r=!1})=>{(process.env.NODE_ENV==="development"||!process.env.DUB_SLACK_HOOK_CRON||!process.env.DUB_SLACK_HOOK_LINKS)&&console.log(e);let o=D[t];if(!!o)try{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({blocks:[{type:"section",text:{type:"mrkdwn",text:`${r?"<@U0404G6J3NJ> ":""}${e}`}}]})})}catch(n){console.log(`Failed to log to Dub Slack. Error: ${n}`)}},w=(e,t)=>{if(e===t)return!0;if(typeof e!="object"||typeof t!="object"||e===null||t===null)return!1;let r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(let n of r)if(!o.includes(n)||!w(e[n],t[n]))return!1;return!0};export{v as a,M as b,O as c,_ as d,$ as e,T as f,A as g,E as h,F as i,N as j,C as k,q as l,d as m,I as n,K as o,P as p,z as q,H as r,Z as s,j as t,g as u,W as v,B as w,J as x,Y as y,V as z,Q as A,G as B,x as C,X as D,ee as E,te as F,w as G};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var p={city:"San Francisco",region:"CA",country:"US",latitude:"37.7695",longitude:"-122.385"},a="63.141.57.109",n={hidden:{scale:.8,opacity:0},show:{scale:1,opacity:1,transition:{type:"spring"}}},c={hidden:{opacity:0,y:20},show:{opacity:1,y:0,transition:{duration:.4,type:"spring"}}},i={initial:{height:0},animate:{height:"auto"},exit:{height:0},transition:{duration:.15,ease:"easeOut"}},r={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2}},l=100,o=new Set(["dub.co","home.localhost:8888","localhost"]),d=t=>o.has(t)||t.endsWith(".vercel.app"),_=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?`https://${process.env.NEXT_PUBLIC_VERCEL_URL}`:"http://home.localhost:8888",u=new Set(["app.dub.co","preview.dub.co","localhost:8888","localhost"]),E=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"||process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://app.dub.co":"http://localhost:8888",h=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://app.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://preview.dub.co":process.env.NGROK_URL,g=new Set(["api.dub.co","api.dub.sh","api.localhost:8888"]),A=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://api.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://api.dub.sh":"http://api.localhost:8888",I=new Set(["admin.dub.co","admin.localhost:8888"]),N={home:"https://dub.co",dub:"https://dub.co",signin:"https://app.dub.co/login",login:"https://app.dub.co/login",register:"https://app.dub.co/register",signup:"https://app.dub.co/register",app:"https://app.dub.co",dashboard:"https://app.dub.co",links:"https://app.dub.co/links",settings:"https://app.dub.co/settings",welcome:"https://app.dub.co/welcome",discord:"https://twitter.com/dubdotco",tags:"https://dub.co/help/how-to-use-tags"},L={headers:{"x-powered-by":"Dub.co - Link management for modern marketing teams"}},m="/_static/favicons",T="https://www.google.com/s2/favicons?sz=64&domain_url=",S="https://d2vwwcvoksz7ty.cloudfront.net/logo.png",O="https://d2vwwcvoksz7ty.cloudfront.net/thumbnail.png",C=["tools","pricing","help","features","customers","blog","(blog-post)","login","register","auth"],b=["metatags","inspector"],x=new Set(["com","co","net","org","edu","gov","in"]),w=new Set(["my.id","github.io","vercel.app","now.sh","pages.dev","webflow.io","netlify.app","fly.dev","web.app"]),R={key:"",url:"",domain:"",archived:!1,expiresAt:null,password:null,title:null,description:null,image:null,rewrite:!1,ios:null,android:null,clicks:0,userId:"",proxy:!1},M="cl7pj5kq4006835rbjlt2ofka",v=[{name:"Okta",logo:"/_static/icons/okta.svg",saml:"okta",samlModalCopy:"Metadata URL",scim:"okta-scim-v2",scimModalCopy:{url:"SCIM 2.0 Base URL",token:"OAuth Bearer Token"},wip:!1},{name:"Azure AD",logo:"/_static/icons/azure.svg",saml:"azure",samlModalCopy:"App Federation Metadata URL",scim:"azure-scim-v2",scimModalCopy:{url:"Tenant URL",token:"Secret Token"},wip:!1},{name:"Google",logo:"/_static/icons/google.svg",saml:"google",samlModalCopy:"XML Metadata File",scim:"google",scimModalCopy:{url:"SCIM 2.0 Base URL",token:"OAuth Bearer Token"},wip:!1}];export{p as a,a as b,n as c,c as d,i as e,r as f,l as g,o as h,d as i,_ as j,u as k,E as l,h as m,g as n,A as o,I as p,N as q,L as r,m as s,T as t,S as u,O as v,C as w,b as x,x as y,w as z,R as A,M as B,v as C};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useEffect as h,useState as b}from"react";function m(){let[i,d]=b(null);return h(()=>{let n=document.querySelector("[data-mdx-container]");if(!n)return;let r=n.offsetTop-1,s=new IntersectionObserver(o=>{var f,g,a;let e=o[0];if(!e)return;let p=(((f=e.rootBounds)==null?void 0:f.height)||0)*.3+r;for(let c=1;c<o.length;c++){let l=o[c];if(!l)break;(l.boundingClientRect.top<e.boundingClientRect.top||e.boundingClientRect.bottom<r)&&(e=l)}let t=e.target;for(;t&&t.getBoundingClientRect().bottom<r;)t=(g=u.get(t))==null?void 0:g.next;for(;t&&t.getBoundingClientRect().top>p;)t=(a=u.get(t))==null?void 0:a.prev;t&&d(t.getAttribute("href"))},{threshold:1,rootMargin:`-${r}px 0px 0px 0px`}),u=new Map;return(n==null?void 0:n.querySelectorAll("[data-mdx-heading]")).forEach(o=>s.observe(o)),()=>{s.disconnect()}},[]),i==null?void 0:i.replace("#","")}export{m as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useEffect as r,useState as i}from"react";function l(e,s){let[a,o]=i(s);return r(()=>{let t=window.localStorage.getItem(e);t&&o(JSON.parse(t))},[e]),[a,t=>{o(t),window.localStorage.setItem(e,JSON.stringify(t))}]}export{l as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
var e={city:"San Francisco",region:"CA",country:"US",latitude:"37.7695",longitude:"-122.385"},p="63.141.57.109",s={hidden:{scale:.8,opacity:0},show:{scale:1,opacity:1,transition:{type:"spring"}}},c={hidden:{opacity:0,y:20},show:{opacity:1,y:0,transition:{duration:.4,type:"spring"}}},n={initial:{height:0},animate:{height:"auto"},exit:{height:0},transition:{duration:.15,ease:"easeOut"}},i={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2}},a=100,r="https://dub.co",d=new Set(["app.dub.co","preview.dub.co","localhost:8888","localhost"]),_=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://app.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://preview.dub.co":"http://localhost:8888",h=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://app.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://preview.dub.co":process.env.NGROK_URL,E=new Set(["api.dub.co","api.dub.sh","api.localhost:8888"]),u=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://api.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://api.dub.sh":"http://api.localhost:8888",l=new Set(["admin.dub.co","admin.localhost:8888"]),N={home:"https://dub.co",dub:"https://dub.co",signin:"https://app.dub.co/login",login:"https://app.dub.co/login",register:"https://app.dub.co/register",signup:"https://app.dub.co/register",app:"https://app.dub.co",dashboard:"https://app.dub.co",links:"https://app.dub.co/links",settings:"https://app.dub.co/settings",welcome:"https://app.dub.co/welcome",discord:"https://twitter.com/dubdotco",tags:"https://dub.co/help/how-to-use-tags"},A={headers:{"x-powered-by":"Dub.co - Link management for modern marketing teams"}},I="/_static/favicons",g="https://www.google.com/s2/favicons?sz=64&domain_url=",b="https://d2vwwcvoksz7ty.cloudfront.net/logo.png",O="https://d2vwwcvoksz7ty.cloudfront.net/thumbnail.png",S=["tools","pricing","help","features","customers","blog","(blog-post)","login","register","auth"],T=["metatags","inspector"],L=new Set(["com","co","net","org","edu","gov","in"]),w=new Set(["my.id","github.io","vercel.app","now.sh","pages.dev","webflow.io","netlify.app","fly.dev","web.app"]);export{e as a,p as b,s as c,c as d,n as e,i as f,a as g,r as h,d as i,_ as j,h as k,E as l,u as m,l as n,N as o,A as p,I as q,g as r,b as s,O as t,S as u,T as v,L as w,w as x};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
import{useEffect as h,useState as b}from"react";function m(){let[i,d]=b(null);return h(()=>{let n=document.querySelector("[data-mdx-container]");if(!n)return;let r=n.offsetTop-1,s=new IntersectionObserver(o=>{var f,g,a;let e=o[0];if(!e)return;let p=(((f=e.rootBounds)==null?void 0:f.height)||0)*.3+r;for(let c=1;c<o.length;c++){let l=o[c];if(!l)break;(l.boundingClientRect.top<e.boundingClientRect.top||e.boundingClientRect.bottom<r)&&(e=l)}let t=e.target;for(;t&&t.getBoundingClientRect().bottom<r;)t=(g=u.get(t))==null?void 0:g.next;for(;t&&t.getBoundingClientRect().top>p;)t=(a=u.get(t))==null?void 0:a.prev;t&&d(t.getAttribute("href"))},{threshold:1,rootMargin:`-${r}px 0px 0px 0px`}),u=new Map;return(n==null?void 0:n.querySelectorAll("[data-mdx-heading]")).forEach(o=>s.observe(o)),()=>{s.disconnect()}},[]),i==null?void 0:i.replace("#","")}export{m as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use client"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={city:"San Francisco",region:"CA",country:"US",latitude:"37.7695",longitude:"-122.385"},p="63.141.57.109",s={hidden:{scale:.8,opacity:0},show:{scale:1,opacity:1,transition:{type:"spring"}}},c={hidden:{opacity:0,y:20},show:{opacity:1,y:0,transition:{duration:.4,type:"spring"}}},n={initial:{height:0},animate:{height:"auto"},exit:{height:0},transition:{duration:.15,ease:"easeOut"}},i={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2}},a=100,r="https://dub.co",d=new Set(["app.dub.co","preview.dub.co","localhost:8888","localhost"]),_=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://app.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://preview.dub.co":"http://localhost:8888",h=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://app.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://preview.dub.co":process.env.NGROK_URL,E=new Set(["api.dub.co","api.dub.sh","api.localhost:8888"]),u=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://api.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://api.dub.sh":"http://api.localhost:8888",l=new Set(["admin.dub.co","admin.localhost:8888"]),N={home:"https://dub.co",dub:"https://dub.co",signin:"https://app.dub.co/login",login:"https://app.dub.co/login",register:"https://app.dub.co/register",signup:"https://app.dub.co/register",app:"https://app.dub.co",dashboard:"https://app.dub.co",links:"https://app.dub.co/links",settings:"https://app.dub.co/settings",welcome:"https://app.dub.co/welcome",discord:"https://twitter.com/dubdotco",tags:"https://dub.co/help/how-to-use-tags"},A={headers:{"x-powered-by":"Dub.co - Link management for modern marketing teams"}},I="/_static/favicons",g="https://www.google.com/s2/favicons?sz=64&domain_url=",b="https://d2vwwcvoksz7ty.cloudfront.net/logo.png",O="https://d2vwwcvoksz7ty.cloudfront.net/thumbnail.png",S=["tools","pricing","help","features","customers","blog","(blog-post)","login","register","auth"],T=["metatags","inspector"],L=new Set(["com","co","net","org","edu","gov","in"]),w=new Set(["my.id","github.io","vercel.app","now.sh","pages.dev","webflow.io","netlify.app","fly.dev","web.app"]);export{e as a,p as b,s as c,c as d,n as e,i as f,a as g,r as h,d as i,_ as j,h as k,E as l,u as m,l as n,N as o,A as p,I as q,g as r,b as s,O as t,S as u,T as v,L as w,w as x};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
var m=new Set(["af","ax","al","dz","as","ad","ao","ai","aq","ag","ar","am","aw","ac","au","at","az","bs","bh","bd","bb","eus","by","be","bz","bj","bm","bt","bo","bq","an","nl","ba","bw","bv","br","io","vg","bn","bg","bf","mm","bi","kh","cm","ca","cv","cat","ky","cf","td","cl","cn","cx","cc","co","km","cd","cg","ck","cr","ci","hr","cu","cw","cy","cz","dk","dj","dm","do","tl","tp","ec","eg","sv","gq","er","ee","et","eu","fk","fo","fm","fj","fi","fr","gf","pf","tf","ga","gal","gm","ps","ge","de","gh","gi","gr","gl","gd","gp","gu","gt","gg","gn","gw","gy","ht","hm","hn","hk","hu","is","in","id","ir","iq","ie","im","il","it","jm","jp","je","jo","kz","ke","ki","kw","kg","la","lv","lb","ls","lr","ly","li","lt","lu","mo","mk","mg","mw","my","mv","ml","mt","mh","mq","mr","mu","yt","mx","md","mc","mn","me","ms","ma","mz","mm","na","nr","np","nl","nc","nz","ni","ne","ng","nu","nf","nc","tr","kp","mp","no","om","pk","pw","ps","pa","pg","py","pe","ph","pn","pl","pt","pr","qa","ro","ru","rw","re","bq","an","bl","gp","fr","sh","kn","lc","mf","gp","fr","pm","vc","ws","sm","st","sa","sn","rs","sc","sl","sg","bq","an","nl","sx","an","sk","si","sb","so","so","za","gs","kr","ss","es","lk","sd","sr","sj","sz","se","ch","sy","tw","tj","tz","th","tg","tk","to","tt","tn","tr","tm","tc","tv","ug","ua","ae","uk","us","vi","uy","uz","vu","va","ve","vn","wf","eh","ma","ye","zm","zw"]),s=m;export{s as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={city:"San Francisco",region:"CA",country:"US",latitude:"37.7695",longitude:"-122.385"},s="63.141.57.109",p={hidden:{scale:.8,opacity:0},show:{scale:1,opacity:1,transition:{type:"spring"}}},a={hidden:{opacity:0,y:20},show:{opacity:1,y:0,transition:{duration:.4,type:"spring"}}},n={initial:{height:0},animate:{height:"auto"},exit:{height:0},transition:{duration:.15,ease:"easeOut"}},c={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.2}},i=100,r="https://dub.co",l=new Set(["app.dub.co","preview.dub.co","localhost:8888","localhost"]),d=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"||process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://app.dub.co":"http://localhost:8888",u=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://app.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://preview.dub.co":process.env.NGROK_URL,_=new Set(["api.dub.co","api.dub.sh","api.localhost:8888"]),h=process.env.NEXT_PUBLIC_VERCEL_ENV==="production"?"https://api.dub.co":process.env.NEXT_PUBLIC_VERCEL_ENV==="preview"?"https://api.dub.sh":"http://api.localhost:8888",E=new Set(["admin.dub.co","admin.localhost:8888"]),g={home:"https://dub.co",dub:"https://dub.co",signin:"https://app.dub.co/login",login:"https://app.dub.co/login",register:"https://app.dub.co/register",signup:"https://app.dub.co/register",app:"https://app.dub.co",dashboard:"https://app.dub.co",links:"https://app.dub.co/links",settings:"https://app.dub.co/settings",welcome:"https://app.dub.co/welcome",discord:"https://twitter.com/dubdotco",tags:"https://dub.co/help/how-to-use-tags"},A={headers:{"x-powered-by":"Dub.co - Link management for modern marketing teams"}},I="/_static/favicons",N="https://www.google.com/s2/favicons?sz=64&domain_url=",m="https://d2vwwcvoksz7ty.cloudfront.net/logo.png",L="https://d2vwwcvoksz7ty.cloudfront.net/thumbnail.png",O=["tools","pricing","help","features","customers","blog","(blog-post)","login","register","auth"],S=["metatags","inspector"],T=new Set(["com","co","net","org","edu","gov","in"]),b=new Set(["my.id","github.io","vercel.app","now.sh","pages.dev","webflow.io","netlify.app","fly.dev","web.app"]),x={key:"",url:"",domain:"",archived:!1,expiresAt:null,password:null,title:null,description:null,image:null,rewrite:!1,ios:null,android:null,clicks:0,userId:"",proxy:!1},w="cl7pj5kq4006835rbjlt2ofka",C=[{name:"Okta",logo:"/_static/icons/okta.svg",saml:"okta",samlModalCopy:"Metadata URL",scim:"okta-scim-v2",scimModalCopy:{url:"SCIM 2.0 Base URL",token:"OAuth Bearer Token"},wip:!1},{name:"Azure AD",logo:"/_static/icons/azure.svg",saml:"azure",samlModalCopy:"App Federation Metadata URL",scim:"azure-scim-v2",scimModalCopy:{url:"Tenant URL",token:"Secret Token"},wip:!1},{name:"Google",logo:"/_static/icons/google.svg",saml:"google",samlModalCopy:"XML Metadata File",scim:"google",scimModalCopy:{url:"SCIM 2.0 Base URL",token:"OAuth Bearer Token"},wip:!1}];export{e as a,s as b,p as c,a as d,n as e,c as f,i as g,r as h,l as i,d as j,u as k,_ as l,h as m,E as n,g as o,A as p,I as q,N as r,m as s,L as t,O as u,S as v,T as w,b as x,x as y,w as z,C as A};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as c,y as l,z as u}from"./chunk-ONIHRKH7.mjs";import{a}from"./chunk-MODISIUH.mjs";import p from"@sindresorhus/slugify";import{clsx as m}from"clsx";import f from"ms";import{customAlphabet as h}from"nanoid";import{twMerge as y}from"tailwind-merge";function v(...e){return y(m(e))}function M({title:e="Dub - Link Management for Modern Marketing Teams",description:t="Dub is an open-source link management tool for modern marketing teams to create, share, and track short links.",image:r="https://dub.co/_static/thumbnail.png",icons:o="/favicon.ico",noIndex:n=!1}={}){return{title:e,description:t,openGraph:{title:e,description:t,images:[{url:r}]},twitter:{card:"summary_large_image",title:e,description:t,images:[r],creator:"@dubdotco"},icons:o,metadataBase:new URL(c),themeColor:"#FFF",...n&&{robots:{index:!1,follow:!1}}}}var O=h("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",7);async function _(e,t){let r=await fetch(e,t);if(!r.ok){let o=await r.text(),n=new Error(o);throw n.status=r.status,n}return r.json()}function $(e,t={digits:1}){if(!e)return"0";if(t.full)return Intl.NumberFormat("en-US").format(e);let r=[{value:1,symbol:""},{value:1e3,symbol:"K"},{value:1e6,symbol:"M"},{value:1e9,symbol:"G"},{value:1e12,symbol:"T"},{value:1e15,symbol:"P"},{value:1e18,symbol:"E"}],o=/\.0+$|(\.[0-9]*[1-9])0+$/;var n=r.slice().reverse().find(function(s){return e>=s.value});return n?(e/n.value).toFixed(t.digits).replace(o,"$1")+n.symbol:"0"}function T(e){return!e||typeof e!="string"?e:e.charAt(0).toUpperCase()+e.slice(1)}var A=(e,t)=>e.reduce((r,o,n)=>{let s=Math.floor(n/t);return r[s]||(r[s]=[]),r[s].push(o),r},[]);function E({key:e,domain:t="dub.sh",localhost:r,pretty:o,noDomain:n}){let s=`${r?"http://home.localhost:8888":`https://${t}`}${e!=="_root"?`/${e}`:""}`;return n?`/${e}`:o?s.replace(/^https?:\/\//,""):s}var F=(e,{withAgo:t}={})=>{if(!e)return"Never";let r=Date.now()-new Date(e).getTime();return r<1e3?"Just now":r>828e5?new Date(e).toLocaleDateString("en-US",{month:"short",day:"numeric",year:new Date(e).getFullYear()!==new Date().getFullYear()?"numeric":void 0}):`${f(r)}${t?" ago":""}`},N=e=>{let t=e?new Date(e):new Date;return t.toString()==="Invalid Date"?"":new Date(t.getTime()-t.getTimezoneOffset()*6e4).toISOString().split(":").slice(0,2).join(":")},C=e=>new Date(`${e}T00:00:00Z`).toLocaleDateString("en-US",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}),q=e=>{let t=new Date,r=t.getDate(),o=t.getMonth(),n=t.getFullYear();if(r>=e)return{firstDay:new Date(n,o,e),lastDay:new Date(n,o+1,e-1)};{let s=o===0?n-1:n,i=o===0?11:o-1;return{firstDay:new Date(s,i,e),lastDay:new Date(n,o,e-1)}}},d=()=>{let e=new Date;return new Date(e.getFullYear(),e.getMonth()+1,0).getDate()},I=e=>{let t=d();return e>t?t:e},K=e=>{let t=p(e,{separator:""});if(t.length<3)return"";if(a.has(t.slice(-2)))return`${t.slice(0,-2)}.${t.slice(-2)}`;let r=t.replace(/[aeiou]/g,"");return r.length>=3&&a.has(r.slice(-2))?`${r.slice(0,-2)}.${r.slice(-2)}`:`${[t,r].reduce((n,s)=>n.length<s.length?n:s)}.to`},P=new RegExp(/^([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/),z=new RegExp(/^[0-9A-Za-z\u0080-\uFFFF\/\-]*$/u),H=new RegExp(/^[a-zA-Z0-9\-]+$/),Z=(e,t)=>e===t?null:e.slice(0,e.length-t.length-1),j=e=>{let t;try{t=new URL(e.replace(/^[a-zA-Z]+:\/\//,"https://")).hostname}catch{return""}if(t==="youtu.be")return"youtube.com";if(t==="raw.githubusercontent.com")return"github.com";if(t.endsWith(".vercel.app"))return"vercel.app";let r=t.split(".");return r.length>2?l.has(r[r.length-2])&&a.has(r[r.length-1])||u.has(r.slice(-2).join("."))?r.slice(-3).join("."):r.slice(-2).join("."):t},g=e=>{try{return new URL(e),!0}catch{return!1}},W=e=>{if(g(e))return e;try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).toString()}catch{return null}},B=e=>{if(g(e))return new URL(e).hostname.replace(/^www\./,"");try{if(e.includes(".")&&!e.includes(" "))return new URL(`https://${e}`).hostname.replace(/^www\./,"")}catch{return null}},J=(e,t)=>{let r=new URLSearchParams({...e.query,...t}).toString();return`${r?"?":""}${r}`},Y=({router:e,param:t,value:r})=>{t!=="page"&&delete e.query.page;let o;r.length>0?o={...e.query,[t]:r}:(delete e.query[t],o={...e.query});let{slug:n,...s}=o;e.replace({pathname:`/${e.query.slug||"links"}`,query:s})},V=(e,t)=>!e||e.length<=t?e:`${e.slice(0,t-3)}...`,Q=e=>{if(!e)return{};try{let t=new URL(e).searchParams,r={};for(let[o,n]of t.entries())n&&n!==""&&(r[o]=n);return r}catch{return{}}},G=(e,t)=>{if(!e)return"";try{let r=new URL(e);for(let[o,n]of Object.entries(t))n===""?r.searchParams.delete(o):r.searchParams.set(o,n);return r.toString()}catch{return""}},x=[{display:"Referral (ref)",key:"ref",examples:"twitter, facebook"},{display:"UTM Source",key:"utm_source",examples:"twitter, facebook"},{display:"UTM Medium",key:"utm_medium",examples:"social, email"},{display:"UTM Campaign",key:"utm_campaign",examples:"summer_sale"},{display:"UTM Term",key:"utm_term",examples:"blue_shoes"},{display:"UTM Content",key:"utm_content",examples:"logolink"}],X=e=>{try{let t=new URL(e);return x.forEach(r=>t.searchParams.delete(r.key)),t.toString()}catch{return e}};async function ee(e){let r=new TextEncoder().encode(e),o=await crypto.subtle.digest("MD5",r);return Array.from(new Uint8Array(o)).map(i=>i.toString(16).padStart(2,"0")).join("")}var D={cron:process.env.DUB_SLACK_HOOK_CRON,links:process.env.DUB_SLACK_HOOK_LINKS},te=async({message:e,type:t,mention:r=!1})=>{(process.env.NODE_ENV==="development"||!process.env.DUB_SLACK_HOOK_CRON||!process.env.DUB_SLACK_HOOK_LINKS)&&console.log(e);let o=D[t];if(!!o)try{return await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({blocks:[{type:"section",text:{type:"mrkdwn",text:`${r?"<@U0404G6J3NJ> ":""}${e}`}}]})})}catch(n){console.log(`Failed to log to Dub Slack. Error: ${n}`)}},w=(e,t)=>{if(e===t)return!0;if(typeof e!="object"||typeof t!="object"||e===null||t===null)return!1;let r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(let n of r)if(!o.includes(n)||!w(e[n],t[n]))return!1;return!0};export{v as a,M as b,O as c,_ as d,$ as e,T as f,A as g,E as h,F as i,N as j,C as k,q as l,d as m,I as n,K as o,P as p,z as q,H as r,Z as s,j as t,g as u,W as v,B as w,J as x,Y as y,V as z,Q as A,G as B,x as C,X as D,ee as E,te as F,w as G};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-MODISIUH.mjs";export{a as default};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as lucide_react from 'lucide-react';
|
|
2
|
+
|
|
3
|
+
declare const FEATURES_LIST: ({
|
|
4
|
+
title: string;
|
|
5
|
+
shortTitle: string;
|
|
6
|
+
accordionTitle: string;
|
|
7
|
+
description: string;
|
|
8
|
+
icon: lucide_react.LucideIcon;
|
|
9
|
+
slug: string;
|
|
10
|
+
thumbnail: string;
|
|
11
|
+
thumbnailBlurhash: string;
|
|
12
|
+
videoUrl: string;
|
|
13
|
+
videoLength: string;
|
|
14
|
+
bentoTitle: string;
|
|
15
|
+
bentoDescription: string;
|
|
16
|
+
bentoFeatures: ({
|
|
17
|
+
title: string;
|
|
18
|
+
description: string;
|
|
19
|
+
image: string;
|
|
20
|
+
} | {
|
|
21
|
+
title: string;
|
|
22
|
+
description: string;
|
|
23
|
+
image?: undefined;
|
|
24
|
+
})[];
|
|
25
|
+
} | {
|
|
26
|
+
title: string;
|
|
27
|
+
shortTitle: string;
|
|
28
|
+
accordionTitle: string;
|
|
29
|
+
description: string;
|
|
30
|
+
icon: lucide_react.LucideIcon;
|
|
31
|
+
slug: string;
|
|
32
|
+
thumbnail: string;
|
|
33
|
+
thumbnailBlurhash: string;
|
|
34
|
+
videoUrl: string;
|
|
35
|
+
videoLength: string;
|
|
36
|
+
bentoTitle: string;
|
|
37
|
+
bentoDescription: string;
|
|
38
|
+
bentoFeatures: ({
|
|
39
|
+
title: string;
|
|
40
|
+
description: string;
|
|
41
|
+
image: string;
|
|
42
|
+
href: string;
|
|
43
|
+
} | {
|
|
44
|
+
title: string;
|
|
45
|
+
description: string;
|
|
46
|
+
image?: undefined;
|
|
47
|
+
href?: undefined;
|
|
48
|
+
} | {
|
|
49
|
+
title: string;
|
|
50
|
+
description: string;
|
|
51
|
+
href: string;
|
|
52
|
+
image?: undefined;
|
|
53
|
+
})[];
|
|
54
|
+
} | {
|
|
55
|
+
title: string;
|
|
56
|
+
shortTitle: string;
|
|
57
|
+
accordionTitle: string;
|
|
58
|
+
description: string;
|
|
59
|
+
icon: lucide_react.LucideIcon;
|
|
60
|
+
slug: string;
|
|
61
|
+
thumbnail: string;
|
|
62
|
+
thumbnailBlurhash: string;
|
|
63
|
+
videoUrl: string;
|
|
64
|
+
videoLength: string;
|
|
65
|
+
bentoTitle: string;
|
|
66
|
+
bentoDescription: string;
|
|
67
|
+
bentoFeatures?: undefined;
|
|
68
|
+
})[];
|
|
69
|
+
|
|
70
|
+
export { FEATURES_LIST };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-GIGD5PB3.mjs";export{a as FEATURES_LIST};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a}from"../chunk-3P54C65P.mjs";export{a as default};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export { default as ccTLDs } from './cctlds.js';
|
|
2
|
+
export { default as COUNTRIES } from './countries.js';
|
|
3
|
+
|
|
4
|
+
declare const LOCALHOST_GEO_DATA: {
|
|
5
|
+
city: string;
|
|
6
|
+
region: string;
|
|
7
|
+
country: string;
|
|
8
|
+
latitude: string;
|
|
9
|
+
longitude: string;
|
|
10
|
+
};
|
|
11
|
+
declare const LOCALHOST_IP = "63.141.57.109";
|
|
12
|
+
declare const FRAMER_MOTION_LIST_ITEM_VARIANTS: {
|
|
13
|
+
hidden: {
|
|
14
|
+
scale: number;
|
|
15
|
+
opacity: number;
|
|
16
|
+
};
|
|
17
|
+
show: {
|
|
18
|
+
scale: number;
|
|
19
|
+
opacity: number;
|
|
20
|
+
transition: {
|
|
21
|
+
type: string;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
declare const STAGGER_CHILD_VARIANTS: {
|
|
26
|
+
hidden: {
|
|
27
|
+
opacity: number;
|
|
28
|
+
y: number;
|
|
29
|
+
};
|
|
30
|
+
show: {
|
|
31
|
+
opacity: number;
|
|
32
|
+
y: number;
|
|
33
|
+
transition: {
|
|
34
|
+
duration: number;
|
|
35
|
+
type: string;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
declare const SWIPE_REVEAL_ANIMATION_SETTINGS: {
|
|
40
|
+
initial: {
|
|
41
|
+
height: number;
|
|
42
|
+
};
|
|
43
|
+
animate: {
|
|
44
|
+
height: string;
|
|
45
|
+
};
|
|
46
|
+
exit: {
|
|
47
|
+
height: number;
|
|
48
|
+
};
|
|
49
|
+
transition: {
|
|
50
|
+
duration: number;
|
|
51
|
+
ease: string;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
declare const FADE_IN_ANIMATION_SETTINGS: {
|
|
55
|
+
initial: {
|
|
56
|
+
opacity: number;
|
|
57
|
+
};
|
|
58
|
+
animate: {
|
|
59
|
+
opacity: number;
|
|
60
|
+
};
|
|
61
|
+
exit: {
|
|
62
|
+
opacity: number;
|
|
63
|
+
};
|
|
64
|
+
transition: {
|
|
65
|
+
duration: number;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
declare const PAGINATION_LIMIT = 100;
|
|
69
|
+
declare const HOME_DOMAIN = "https://dub.co";
|
|
70
|
+
declare const APP_HOSTNAMES: Set<string>;
|
|
71
|
+
declare const APP_DOMAIN: string;
|
|
72
|
+
declare const APP_DOMAIN_WITH_NGROK: string | undefined;
|
|
73
|
+
declare const API_HOSTNAMES: Set<string>;
|
|
74
|
+
declare const API_DOMAIN: string;
|
|
75
|
+
declare const ADMIN_HOSTNAMES: Set<string>;
|
|
76
|
+
declare const DEFAULT_REDIRECTS: {
|
|
77
|
+
home: string;
|
|
78
|
+
dub: string;
|
|
79
|
+
signin: string;
|
|
80
|
+
login: string;
|
|
81
|
+
register: string;
|
|
82
|
+
signup: string;
|
|
83
|
+
app: string;
|
|
84
|
+
dashboard: string;
|
|
85
|
+
links: string;
|
|
86
|
+
settings: string;
|
|
87
|
+
welcome: string;
|
|
88
|
+
discord: string;
|
|
89
|
+
tags: string;
|
|
90
|
+
};
|
|
91
|
+
declare const DUB_HEADERS: {
|
|
92
|
+
headers: {
|
|
93
|
+
"x-powered-by": string;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
declare const FAVICON_FOLDER = "/_static/favicons";
|
|
97
|
+
declare const GOOGLE_FAVICON_URL = "https://www.google.com/s2/favicons?sz=64&domain_url=";
|
|
98
|
+
declare const DUB_LOGO = "https://d2vwwcvoksz7ty.cloudfront.net/logo.png";
|
|
99
|
+
declare const DUB_THUMBNAIL = "https://d2vwwcvoksz7ty.cloudfront.net/thumbnail.png";
|
|
100
|
+
declare const SHOW_BACKGROUND_SEGMENTS: string[];
|
|
101
|
+
declare const allTools: string[];
|
|
102
|
+
|
|
103
|
+
declare const SECOND_LEVEL_DOMAINS: Set<string>;
|
|
104
|
+
declare const SPECIAL_APEX_DOMAINS: Set<string>;
|
|
105
|
+
declare const DEFAULT_LINK_PROPS: {
|
|
106
|
+
key: string;
|
|
107
|
+
url: string;
|
|
108
|
+
domain: string;
|
|
109
|
+
archived: boolean;
|
|
110
|
+
expiresAt: null;
|
|
111
|
+
password: null;
|
|
112
|
+
title: null;
|
|
113
|
+
description: null;
|
|
114
|
+
image: null;
|
|
115
|
+
rewrite: boolean;
|
|
116
|
+
ios: null;
|
|
117
|
+
android: null;
|
|
118
|
+
clicks: number;
|
|
119
|
+
userId: string;
|
|
120
|
+
proxy: boolean;
|
|
121
|
+
};
|
|
122
|
+
declare const DUB_PROJECT_ID = "cl7pj5kq4006835rbjlt2ofka";
|
|
123
|
+
declare const SAML_PROVIDERS: {
|
|
124
|
+
name: string;
|
|
125
|
+
logo: string;
|
|
126
|
+
saml: string;
|
|
127
|
+
samlModalCopy: string;
|
|
128
|
+
scim: string;
|
|
129
|
+
scimModalCopy: {
|
|
130
|
+
url: string;
|
|
131
|
+
token: string;
|
|
132
|
+
};
|
|
133
|
+
wip: boolean;
|
|
134
|
+
}[];
|
|
135
|
+
|
|
136
|
+
export { ADMIN_HOSTNAMES, API_DOMAIN, API_HOSTNAMES, APP_DOMAIN, APP_DOMAIN_WITH_NGROK, APP_HOSTNAMES, DEFAULT_LINK_PROPS, DEFAULT_REDIRECTS, DUB_HEADERS, DUB_LOGO, DUB_PROJECT_ID, DUB_THUMBNAIL, FADE_IN_ANIMATION_SETTINGS, FAVICON_FOLDER, FRAMER_MOTION_LIST_ITEM_VARIANTS, GOOGLE_FAVICON_URL, HOME_DOMAIN, LOCALHOST_GEO_DATA, LOCALHOST_IP, PAGINATION_LIMIT, SAML_PROVIDERS, SECOND_LEVEL_DOMAINS, SHOW_BACKGROUND_SEGMENTS, SPECIAL_APEX_DOMAINS, STAGGER_CHILD_VARIANTS, SWIPE_REVEAL_ANIMATION_SETTINGS, allTools };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as C,a as c,b as d,c as e,d as f,e as g,f as h,g as i,h as j,i as k,j as l,k as m,l as n,m as o,n as p,o as q,p as r,q as s,r as t,s as u,t as v,u as w,v as x,w as y,x as z,y as A,z as B}from"../chunk-Y2N4Y4WZ.mjs";import{a}from"../chunk-MODISIUH.mjs";import{a as b}from"../chunk-3P54C65P.mjs";export{p as ADMIN_HOSTNAMES,o as API_DOMAIN,n as API_HOSTNAMES,l as APP_DOMAIN,m as APP_DOMAIN_WITH_NGROK,k as APP_HOSTNAMES,b as COUNTRIES,A as DEFAULT_LINK_PROPS,q as DEFAULT_REDIRECTS,r as DUB_HEADERS,u as DUB_LOGO,B as DUB_PROJECT_ID,v as DUB_THUMBNAIL,h as FADE_IN_ANIMATION_SETTINGS,s as FAVICON_FOLDER,e as FRAMER_MOTION_LIST_ITEM_VARIANTS,t as GOOGLE_FAVICON_URL,j as HOME_DOMAIN,c as LOCALHOST_GEO_DATA,d as LOCALHOST_IP,i as PAGINATION_LIMIT,C as SAML_PROVIDERS,y as SECOND_LEVEL_DOMAINS,w as SHOW_BACKGROUND_SEGMENTS,z as SPECIAL_APEX_DOMAINS,f as STAGGER_CHILD_VARIANTS,g as SWIPE_REVEAL_ANIMATION_SETTINGS,x as allTools,a as ccTLDs};
|