{"version":3,"file":"IssueLinkButton.CMJa1eAx.mjs","names":["React.useCallback"],"sources":["https:/framerusercontent.com/modules/IiRTLSWyiqx4JwpsAigQ/Q00WafISzJCg9ezNA0I4/IssueLinkButton.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";const MODEL_STORAGE_KEY=\"gd:model\";/** SSR safe window */function win(){return typeof window===\"undefined\"?null:window;}/** 現在の言語プレフィックスを返す（例: \"\" or \"/ja\"） */function getLocalePrefixFromPathname(pathname){// Framerの多言語は先頭に /ja /en ... が入ることが多い\n// ここでは「先頭セグメントが2文字のとき言語とみなす」方式\n// 例: /ja/model/support/... -> \"/ja\"\nconst parts=pathname.split(\"/\").filter(Boolean);const first=parts[0]||\"\";if(/^[a-z]{2}$/i.test(first))return`/${first.toLowerCase()}`;return\"\";}/** 現在ページの言語プレフィックス（\"\" or \"/ja\"） */function getCurrentLocalePrefix(){const w=win();if(!w)return\"\";return getLocalePrefixFromPathname(w.location.pathname);}function getQueryModel(){const w=win();if(!w)return\"\";return(new URLSearchParams(w.location.search).get(\"model\")||\"\").trim();}// /model/support/<model>/portal から <model> を取り出す（多言語 prefix 対応）\nfunction getModelFromPath(){const w=win();if(!w)return\"\";const parts=w.location.pathname.split(\"/\").filter(Boolean);// 言語 prefix があれば除外して判定\nconst start=parts.length>0&&/^[a-z]{2}$/i.test(parts[0])?1:0;const p=parts.slice(start);// [\"model\",\"support\",\"granboard3s\",\"portal\"]\nif(p.length>=3&&p[0]===\"model\"&&p[1]===\"support\"){return p[2]||\"\";}// 念のため、\"support\" の次の要素でも拾う\nconst i=p.indexOf(\"support\");return i>=0?p[i+1]||\"\":\"\";}function getStoredModel(){const w=win();if(!w)return\"\";try{return(w.sessionStorage.getItem(MODEL_STORAGE_KEY)||\"\").trim();}catch{return\"\";}}function setStoredModel(model){const w=win();if(!w)return;try{if(model)w.sessionStorage.setItem(MODEL_STORAGE_KEY,model);}catch{}}// 現在の model を決定（優先順：query → path → sessionStorage）\nfunction resolveCurrentModel(){const q=getQueryModel();if(q){setStoredModel(q);return q;}const p=getModelFromPath();if(p){setStoredModel(p);return p;}return getStoredModel();}/** FramerのLink型が色々あるので候補を拾う */function linkToString(link){if(!link)return\"\";if(typeof link===\"string\")return link.trim();const candidates=[link?.url,link?.href,link?.path,link?.pathname,link?.value,link?.link];const s=candidates.find(v=>typeof v===\"string\"&&v.trim());if(s)return String(s).trim();try{const t=String(link).trim();return t===\"[object Object]\"?\"\":t;}catch{return\"\";}}/**\n * 重要:\n * - issueLink が相対URLでもOK\n * - 「現在ページの言語 prefix (/ja 等)」を保ったまま遷移する\n *   例: 現在 /ja/... なら /model/... への遷移も /ja/model/... に補正\n */function buildFinalUrl(issueLink,model){const w=win();if(!w)return\"\";const currentLocale=getCurrentLocalePrefix();try{const u=new URL(issueLink,w.location.origin);// 1) model クエリを付与\nif(model)u.searchParams.set(\"model\",model);// 2) 多言語 prefix を維持\n//    - すでに /ja/... のようにprefixが入っていればそのまま\n//    - 入っていなければ currentLocale を付与\nconst targetLocale=getLocalePrefixFromPathname(u.pathname);if(currentLocale&&!targetLocale){// \"/xxx\" -> \"/ja/xxx\"\nu.pathname=`${currentLocale}${u.pathname.startsWith(\"/\")?\"\":\"/\"}${u.pathname}`;}return u.toString();}catch{// ここはフォールバック（できるだけ壊さない）\nconst sep=issueLink.includes(\"?\")?\"&\":\"?\";const withModel=model?`${issueLink}${sep}model=${encodeURIComponent(model)}`:issueLink;// 相対パスっぽい場合だけ prefix を足す（http始まりなら触らない）\nif(!/^https?:\\/\\//i.test(withModel)&&currentLocale){// 先頭が /ja でなければ足す\nconst hasLocale=/^[\\/]?[a-z]{2}\\//i.test(withModel.replace(/^\\//,\"\"));if(!hasLocale){if(withModel.startsWith(\"/\"))return`${currentLocale}${withModel}`;return`${currentLocale}/${withModel}`;}}return withModel;}}export function IssueLinkButton(props){const issueLink=linkToString(props.issueLink);const model=resolveCurrentModel();const onClick=React.useCallback(e=>{// 親のLink To/Framer標準遷移を止めて確実にこちらで遷移\ntry{e?.preventDefault?.();e?.stopPropagation?.();}catch{}if(!issueLink)return;if(model)setStoredModel(model);const finalUrl=buildFinalUrl(issueLink,model);const w=win();if(w)w.location.assign(finalUrl);},[issueLink,model]);const disabled=!issueLink;return /*#__PURE__*/_jsx(\"div\",{role:\"button\",onClick:onClick,style:{display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",width:\"100%\",height:\"100%\",borderRadius:props.radius,padding:`${props.py}px ${props.px}px`,background:props.fill,color:props.color,fontSize:props.fontSize,fontWeight:props.fontWeight,cursor:disabled?\"not-allowed\":\"pointer\",opacity:disabled?.6:1,userSelect:\"none\"},children:props.label});}IssueLinkButton.defaultProps={label:\"Get Solution\",fill:\"rgba(0,0,0,0.85)\",color:\"white\",px:14,py:10,radius:10,fontSize:14,fontWeight:600};addPropertyControls(IssueLinkButton,{issueLink:{type:ControlType.Link,title:\"Issue Link\"},label:{type:ControlType.String,title:\"Label\",defaultValue:\"Get Solution\"},fill:{type:ControlType.Color,title:\"Fill\"},color:{type:ControlType.Color,title:\"Text\"},px:{type:ControlType.Number,title:\"Pad X\",min:0,max:40,step:1},py:{type:ControlType.Number,title:\"Pad Y\",min:0,max:40,step:1},radius:{type:ControlType.Number,title:\"Radius\",min:0,max:40,step:1},fontSize:{type:ControlType.Number,title:\"Font\",min:8,max:32,step:1},fontWeight:{type:ControlType.Number,title:\"Weight\",min:100,max:900,step:100}});\nexport const __FramerMetadata__ = {\"exports\":{\"IssueLinkButton\":{\"type\":\"reactComponent\",\"name\":\"IssueLinkButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./IssueLinkButton.map"],"mappings":"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"}