{"version":3,"file":"IssueLinkButton.D2mnABEn.mjs","names":["p","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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"}