Spaces:
Running
Running
Upload 315 files
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- assets/@braintree-DzxiOROe.js +2 -0
- assets/@braintree-DzxiOROe.js.map +1 -0
- assets/@google-CcUHq7Ay.js +0 -0
- assets/@google-CcUHq7Ay.js.map +0 -0
- assets/@octokit-MBEWYTsi.js +14 -0
- assets/@octokit-MBEWYTsi.js.map +0 -0
- assets/AccessibilityAuditor-9k2YK-kF.js +2 -0
- assets/AccessibilityAuditor-9k2YK-kF.js.map +1 -0
- assets/AiCodeExplainer-DGin5jQC.js +12 -0
- assets/AiCodeExplainer-DGin5jQC.js.map +1 -0
- assets/AiCodeMigrator-CbYUF8cx.js +8 -0
- assets/AiCodeMigrator-CbYUF8cx.js.map +1 -0
- assets/AiCodingChallenge-BGi7rQjl.js +2 -0
- assets/AiCodingChallenge-BGi7rQjl.js.map +1 -0
- assets/AiCommandCenter-ClG32klM.js +7 -0
- assets/AiCommandCenter-ClG32klM.js.map +1 -0
- assets/AiCommitGenerator-CjbukltX.js +14 -0
- assets/AiCommitGenerator-CjbukltX.js.map +1 -0
- assets/AiFeatureBuilder-j5l2owNE.js +6 -0
- assets/AiFeatureBuilder-j5l2owNE.js.map +1 -0
- assets/AiImageGenerator-DdG4FXBe.js +2 -0
- assets/AiImageGenerator-DdG4FXBe.js.map +1 -0
- assets/AiPersonalityForge-B5EDsRzm.js +4 -0
- assets/AiPersonalityForge-B5EDsRzm.js.map +1 -0
- assets/AiStyleTransfer-agazZFyF.js +4 -0
- assets/AiStyleTransfer-agazZFyF.js.map +1 -0
- assets/AiUnitTestGenerator-DT-WbvUh.js +9 -0
- assets/AiUnitTestGenerator-DT-WbvUh.js.map +1 -0
- assets/AsyncCallTreeViewer-C2e5--qQ.js +23 -0
- assets/AsyncCallTreeViewer-C2e5--qQ.js.map +1 -0
- assets/AudioToCode-H-nciw6c.js +2 -0
- assets/AudioToCode-H-nciw6c.js.map +1 -0
- assets/BugReproducer-DLaQepRF.js +7 -0
- assets/BugReproducer-DLaQepRF.js.map +1 -0
- assets/ChangelogGenerator-DJpWK4fB.js +13 -0
- assets/ChangelogGenerator-DJpWK4fB.js.map +1 -0
- assets/CiCdPipelineGenerator-DLcxfZ6N.js +2 -0
- assets/CiCdPipelineGenerator-DLcxfZ6N.js.map +1 -0
- assets/CodeDiffGhost-lnhWrBho.js +18 -0
- assets/CodeDiffGhost-lnhWrBho.js.map +1 -0
- assets/CodeFormatter-CUVz-f5Q.js +8 -0
- assets/CodeFormatter-CUVz-f5Q.js.map +1 -0
- assets/CodeReviewBot-sTSKCXp_.js +12 -0
- assets/CodeReviewBot-sTSKCXp_.js.map +1 -0
- assets/CodeSpellChecker-B0VPiJ9S.js +6 -0
- assets/CodeSpellChecker-B0VPiJ9S.js.map +1 -0
- assets/ColorPaletteGenerator-D2lyyWod.js +42 -0
- assets/ColorPaletteGenerator-D2lyyWod.js.map +1 -0
- assets/CronJobBuilder-DjK0NTVA.js +2 -0
- assets/CronJobBuilder-DjK0NTVA.js.map +1 -0
assets/@braintree-DzxiOROe.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var R=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function b(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var n={},u;function h(){return u||(u=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.sanitizeUrl=e.BLANK_URL=void 0;var o=/^([^\w]*)(javascript|data|vbscript)/im,c=/&#(\w+)(^\w|;)?/g,f=/&(newline|tab);/gi,l=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,d=/^.+(:|:)/gim,s=[".","/"];e.BLANK_URL="about:blank";function v(t){return s.indexOf(t[0])>-1}function m(t){var r=t.replace(l,"");return r.replace(c,function(a,i){return String.fromCharCode(i)})}function g(t){if(!t)return e.BLANK_URL;var r=m(t).replace(f,"").replace(l,"").trim();if(!r)return e.BLANK_URL;if(v(r))return r;var a=r.match(d);if(!a)return r;var i=a[0];return o.test(i)?e.BLANK_URL:r}e.sanitizeUrl=g})(n)),n}var p=h();export{R as c,p as d,b as g};
|
| 2 |
+
//# sourceMappingURL=@braintree-DzxiOROe.js.map
|
assets/@braintree-DzxiOROe.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"@braintree-DzxiOROe.js","sources":["../../node_modules/@braintree/sanitize-url/dist/index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sanitizeUrl = exports.BLANK_URL = void 0;\nvar invalidProtocolRegex = /^([^\\w]*)(javascript|data|vbscript)/im;\nvar htmlEntitiesRegex = /&#(\\w+)(^\\w|;)?/g;\nvar htmlCtrlEntityRegex = /&(newline|tab);/gi;\nvar ctrlCharactersRegex = /[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim;\nvar urlSchemeRegex = /^.+(:|:)/gim;\nvar relativeFirstCharacters = [\".\", \"/\"];\nexports.BLANK_URL = \"about:blank\";\nfunction isRelativeUrlWithoutProtocol(url) {\n return relativeFirstCharacters.indexOf(url[0]) > -1;\n}\n// adapted from https://stackoverflow.com/a/29824550/2601552\nfunction decodeHtmlCharacters(str) {\n var removedNullByte = str.replace(ctrlCharactersRegex, \"\");\n return removedNullByte.replace(htmlEntitiesRegex, function (match, dec) {\n return String.fromCharCode(dec);\n });\n}\nfunction sanitizeUrl(url) {\n if (!url) {\n return exports.BLANK_URL;\n }\n var sanitizedUrl = decodeHtmlCharacters(url)\n .replace(htmlCtrlEntityRegex, \"\")\n .replace(ctrlCharactersRegex, \"\")\n .trim();\n if (!sanitizedUrl) {\n return exports.BLANK_URL;\n }\n if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {\n return sanitizedUrl;\n }\n var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex);\n if (!urlSchemeParseResults) {\n return sanitizedUrl;\n }\n var urlScheme = urlSchemeParseResults[0];\n if (invalidProtocolRegex.test(urlScheme)) {\n return exports.BLANK_URL;\n }\n return sanitizedUrl;\n}\nexports.sanitizeUrl = sanitizeUrl;\n"],"names":["exports","invalidProtocolRegex","htmlEntitiesRegex","htmlCtrlEntityRegex","ctrlCharactersRegex","urlSchemeRegex","relativeFirstCharacters","isRelativeUrlWithoutProtocol","url","decodeHtmlCharacters","str","removedNullByte","match","dec","sanitizeUrl","sanitizedUrl","urlSchemeParseResults","urlScheme"],"mappings":"yQACA,OAAO,eAAcA,EAAU,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,YAAsBA,EAAA,UAAoB,OAC1C,IAAIC,EAAuB,wCACvBC,EAAoB,mBACpBC,EAAsB,oBACtBC,EAAsB,qDACtBC,EAAiB,oBACjBC,EAA0B,CAAC,IAAK,GAAG,EACvCN,EAAA,UAAoB,cACpB,SAASO,EAA6BC,EAAK,CACvC,OAAOF,EAAwB,QAAQE,EAAI,CAAC,CAAC,EAAI,EACrD,CAEA,SAASC,EAAqBC,EAAK,CAC/B,IAAIC,EAAkBD,EAAI,QAAQN,EAAqB,EAAE,EACzD,OAAOO,EAAgB,QAAQT,EAAmB,SAAUU,EAAOC,EAAK,CACpE,OAAO,OAAO,aAAaA,CAAG,CACtC,CAAK,CACL,CACA,SAASC,EAAYN,EAAK,CACtB,GAAI,CAACA,EACD,OAAOR,EAAQ,UAEnB,IAAIe,EAAeN,EAAqBD,CAAG,EACtC,QAAQL,EAAqB,EAAE,EAC/B,QAAQC,EAAqB,EAAE,EAC/B,KAAI,EACT,GAAI,CAACW,EACD,OAAOf,EAAQ,UAEnB,GAAIO,EAA6BQ,CAAY,EACzC,OAAOA,EAEX,IAAIC,EAAwBD,EAAa,MAAMV,CAAc,EAC7D,GAAI,CAACW,EACD,OAAOD,EAEX,IAAIE,EAAYD,EAAsB,CAAC,EACvC,OAAIf,EAAqB,KAAKgB,CAAS,EAC5BjB,EAAQ,UAEZe,CACX,CACAf,EAAA,YAAsBc","x_google_ignoreList":[0]}
|
assets/@google-CcUHq7Ay.js
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
assets/@google-CcUHq7Ay.js.map
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
assets/@octokit-MBEWYTsi.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{B as z}from"./bottleneck-D_vuF9V7.js";import{g as y}from"./universal-user-agent-CLgqIJsR.js";import{H as ue}from"./before-after-hook-y8XtM9xW.js";import{f as le}from"./fast-content-type-parse-3SwieiST.js";var ge="0.0.0-development",de=`octokit-endpoint.js/${ge} ${y()}`,me={method:"GET",baseUrl:"https://api.github.com",headers:{accept:"application/vnd.github.v3+json","user-agent":de},mediaType:{format:""}};function Te(e){return e?Object.keys(e).reduce((r,s)=>(r[s.toLowerCase()]=e[s],r),{}):{}}function Ee(e){if(typeof e!="object"||e===null||Object.prototype.toString.call(e)!=="[object Object]")return!1;const r=Object.getPrototypeOf(e);if(r===null)return!0;const s=Object.prototype.hasOwnProperty.call(r,"constructor")&&r.constructor;return typeof s=="function"&&s instanceof s&&Function.prototype.call(s)===Function.prototype.call(e)}function N(e,r){const s=Object.assign({},e);return Object.keys(r).forEach(o=>{Ee(r[o])?o in e?s[o]=N(e[o],r[o]):Object.assign(s,{[o]:r[o]}):Object.assign(s,{[o]:r[o]})}),s}function I(e){for(const r in e)e[r]===void 0&&delete e[r];return e}function U(e,r,s){if(typeof r=="string"){let[t,n]=r.split(" ");s=Object.assign(n?{method:t,url:n}:{url:t},s)}else s=Object.assign({},r);s.headers=Te(s.headers),I(s),I(s.headers);const o=N(e||{},s);return s.url==="/graphql"&&(e&&e.mediaType.previews?.length&&(o.mediaType.previews=e.mediaType.previews.filter(t=>!o.mediaType.previews.includes(t)).concat(o.mediaType.previews)),o.mediaType.previews=(o.mediaType.previews||[]).map(t=>t.replace(/-preview/,""))),o}function he(e,r){const s=/\?/.test(e)?"&":"?",o=Object.keys(r);return o.length===0?e:e+s+o.map(t=>t==="q"?"q="+r.q.split("+").map(encodeURIComponent).join("+"):`${t}=${encodeURIComponent(r[t])}`).join("&")}var we=/\{[^{}}]+\}/g;function _e(e){return e.replace(new RegExp("(?:^\\W+)|(?:(?<!\\W)\\W+$)","g"),"").split(/,/)}function be(e){const r=e.match(we);return r?r.map(_e).reduce((s,o)=>s.concat(o),[]):[]}function j(e,r){const s={__proto__:null};for(const o of Object.keys(e))r.indexOf(o)===-1&&(s[o]=e[o]);return s}function K(e){return e.split(/(%[0-9A-Fa-f]{2})/g).map(function(r){return/%[0-9A-Fa-f]/.test(r)||(r=encodeURI(r).replace(/%5B/g,"[").replace(/%5D/g,"]")),r}).join("")}function h(e){return encodeURIComponent(e).replace(/[!'()*]/g,function(r){return"%"+r.charCodeAt(0).toString(16).toUpperCase()})}function _(e,r,s){return r=e==="+"||e==="#"?K(r):h(r),s?h(s)+"="+r:r}function E(e){return e!=null}function O(e){return e===";"||e==="&"||e==="?"}function fe(e,r,s,o){var t=e[s],n=[];if(E(t)&&t!=="")if(typeof t=="string"||typeof t=="number"||typeof t=="boolean")t=t.toString(),o&&o!=="*"&&(t=t.substring(0,parseInt(o,10))),n.push(_(r,t,O(r)?s:""));else if(o==="*")Array.isArray(t)?t.filter(E).forEach(function(i){n.push(_(r,i,O(r)?s:""))}):Object.keys(t).forEach(function(i){E(t[i])&&n.push(_(r,t[i],i))});else{const i=[];Array.isArray(t)?t.filter(E).forEach(function(a){i.push(_(r,a))}):Object.keys(t).forEach(function(a){E(t[a])&&(i.push(h(a)),i.push(_(r,t[a].toString())))}),O(r)?n.push(h(s)+"="+i.join(",")):i.length!==0&&n.push(i.join(","))}else r===";"?E(t)&&n.push(h(s)):t===""&&(r==="&"||r==="?")?n.push(h(s)+"="):t===""&&n.push("");return n}function ye(e){return{expand:Ge.bind(null,e)}}function Ge(e,r){var s=["+","#",".","/",";","?","&"];return e=e.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g,function(o,t,n){if(t){let a="";const c=[];if(s.indexOf(t.charAt(0))!==-1&&(a=t.charAt(0),t=t.substr(1)),t.split(/,/g).forEach(function(u){var l=/([^:\*]*)(?::(\d+)|(\*))?/.exec(u);c.push(fe(r,a,l[1],l[2]||l[3]))}),a&&a!=="+"){var i=",";return a==="?"?i="&":a!=="#"&&(i=a),(c.length!==0?a:"")+c.join(i)}else return c.join(",")}else return K(n)}),e==="/"?e:e.replace(/\/$/,"")}function J(e){let r=e.method.toUpperCase(),s=(e.url||"/").replace(/:([a-z]\w+)/g,"{$1}"),o=Object.assign({},e.headers),t,n=j(e,["method","baseUrl","url","headers","request","mediaType"]);const i=be(s);s=ye(s).expand(n),/^http/.test(s)||(s=e.baseUrl+s);const a=Object.keys(e).filter(l=>i.includes(l)).concat("baseUrl"),c=j(n,a);if(!/application\/octet-stream/i.test(o.accept)&&(e.mediaType.format&&(o.accept=o.accept.split(/,/).map(l=>l.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,`application/vnd$1$2.${e.mediaType.format}`)).join(",")),s.endsWith("/graphql")&&e.mediaType.previews?.length)){const l=o.accept.match(new RegExp("(?<![\\w-])[\\w-]+(?=-preview)","g"))||[];o.accept=l.concat(e.mediaType.previews).map(p=>{const g=e.mediaType.format?`.${e.mediaType.format}`:"+json";return`application/vnd.github.${p}-preview${g}`}).join(",")}return["GET","HEAD"].includes(r)?s=he(s,c):"data"in c?t=c.data:Object.keys(c).length&&(t=c),!o["content-type"]&&typeof t<"u"&&(o["content-type"]="application/json; charset=utf-8"),["PATCH","PUT"].includes(r)&&typeof t>"u"&&(t=""),Object.assign({method:r,url:s,headers:o},typeof t<"u"?{body:t}:null,e.request?{request:e.request}:null)}function Pe(e,r,s){return J(U(e,r,s))}function Q(e,r){const s=U(e,r),o=Pe.bind(null,s);return Object.assign(o,{DEFAULTS:s,defaults:Q.bind(null,s),merge:U.bind(null,s),parse:J})}var ke=Q(null,me);class b extends Error{name;status;request;response;constructor(r,s,o){super(r),this.name="HttpError",this.status=Number.parseInt(s),Number.isNaN(this.status)&&(this.status=0),"response"in o&&(this.response=o.response);const t=Object.assign({},o.request);o.request.headers.authorization&&(t.headers=Object.assign({},o.request.headers,{authorization:o.request.headers.authorization.replace(new RegExp("(?<! ) .*$")," [REDACTED]")})),t.url=t.url.replace(/\bclient_secret=\w+/g,"client_secret=[REDACTED]").replace(/\baccess_token=\w+/g,"access_token=[REDACTED]"),this.request=t}}var ve="9.2.4",Oe={headers:{"user-agent":`octokit-request.js/${ve} ${y()}`}};function Ae(e){if(typeof e!="object"||e===null||Object.prototype.toString.call(e)!=="[object Object]")return!1;const r=Object.getPrototypeOf(e);if(r===null)return!0;const s=Object.prototype.hasOwnProperty.call(r,"constructor")&&r.constructor;return typeof s=="function"&&s instanceof s&&Function.prototype.call(s)===Function.prototype.call(e)}async function H(e){const r=e.request?.fetch||globalThis.fetch;if(!r)throw new Error("fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing");const s=e.request?.log||console,o=e.request?.parseSuccessResponseBody!==!1,t=Ae(e.body)||Array.isArray(e.body)?JSON.stringify(e.body):e.body,n=Object.fromEntries(Object.entries(e.headers).map(([p,g])=>[p,String(g)]));let i;try{i=await r(e.url,{method:e.method,body:t,redirect:e.request?.redirect,headers:n,signal:e.request?.signal,...e.body&&{duplex:"half"}})}catch(p){let g="Unknown Error";if(p instanceof Error){if(p.name==="AbortError")throw p.status=500,p;g=p.message,p.name==="TypeError"&&"cause"in p&&(p.cause instanceof Error?g=p.cause.message:typeof p.cause=="string"&&(g=p.cause))}const w=new b(g,500,{request:e});throw w.cause=p,w}const a=i.status,c=i.url,u={};for(const[p,g]of i.headers)u[p]=g;const l={url:c,status:a,headers:u,data:""};if("deprecation"in u){const p=u.link&&u.link.match(/<([^<>]+)>; rel="deprecation"/),g=p&&p.pop();s.warn(`[@octokit/request] "${e.method} ${e.url}" is deprecated. It is scheduled to be removed on ${u.sunset}${g?`. See ${g}`:""}`)}if(a===204||a===205)return l;if(e.method==="HEAD"){if(a<400)return l;throw new b(i.statusText,a,{response:l,request:e})}if(a===304)throw l.data=await A(i),new b("Not modified",a,{response:l,request:e});if(a>=400)throw l.data=await A(i),new b(Se(l.data),a,{response:l,request:e});return l.data=o?await A(i):i.body,l}async function A(e){const r=e.headers.get("content-type");if(!r)return e.text().catch(()=>"");const s=le.safeParse(r);if(Re(s)){let o="";try{return o=await e.text(),JSON.parse(o)}catch{return o}}else return s.type.startsWith("text/")||s.parameters.charset?.toLowerCase()==="utf-8"?e.text().catch(()=>""):e.arrayBuffer().catch(()=>new ArrayBuffer(0))}function Re(e){return e.type==="application/json"||e.type==="application/scim+json"}function Se(e){if(typeof e=="string")return e;if(e instanceof ArrayBuffer)return"Unknown error";if("message"in e){const r="documentation_url"in e?` - ${e.documentation_url}`:"";return Array.isArray(e.errors)?`${e.message}: ${e.errors.map(s=>JSON.stringify(s)).join(", ")}${r}`:`${e.message}${r}`}return`Unknown error: ${JSON.stringify(e)}`}function C(e,r){const s=e.defaults(r);return Object.assign(function(t,n){const i=s.merge(t,n);if(!i.request||!i.request.hook)return H(s.parse(i));const a=(c,u)=>H(s.parse(s.merge(c,u)));return Object.assign(a,{endpoint:s,defaults:C.bind(null,s)}),i.request.hook(a,i)},{endpoint:s,defaults:C.bind(null,s)})}var D=C(ke,Oe),Fe="0.0.0-development";function Ue(e){return`Request failed due to following response errors:
|
| 2 |
+
`+e.errors.map(r=>` - ${r.message}`).join(`
|
| 3 |
+
`)}var Ce=class extends Error{constructor(e,r,s){super(Ue(s)),this.request=e,this.headers=r,this.response=s,this.errors=s.errors,this.data=s.data,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="GraphqlResponseError";errors;data},De=["method","baseUrl","url","headers","request","query","mediaType","operationName"],Le=["query","method","url"],W=/\/api\/v3\/?$/;function qe(e,r,s){if(s){if(typeof r=="string"&&"query"in s)return Promise.reject(new Error('[@octokit/graphql] "query" cannot be used as variable name'));for(const i in s)if(Le.includes(i))return Promise.reject(new Error(`[@octokit/graphql] "${i}" cannot be used as variable name`))}const o=typeof r=="string"?Object.assign({query:r},s):r,t=Object.keys(o).reduce((i,a)=>De.includes(a)?(i[a]=o[a],i):(i.variables||(i.variables={}),i.variables[a]=o[a],i),{}),n=o.baseUrl||e.endpoint.DEFAULTS.baseUrl;return W.test(n)&&(t.url=n.replace(W,"/api/graphql")),e(t).then(i=>{if(i.data.errors){const a={};for(const c of Object.keys(i.headers))a[c]=i.headers[c];throw new Ce(t,a,i.data)}return i.data.data})}function L(e,r){const s=e.defaults(r);return Object.assign((t,n)=>qe(s,t,n),{defaults:L.bind(null,s),endpoint:s.endpoint})}L(D,{headers:{"user-agent":`octokit-graphql.js/${Fe} ${y()}`},method:"POST",url:"/graphql"});function Ie(e){return L(e,{method:"POST",url:"/graphql"})}var R="(?:[a-zA-Z0-9_-]+)",V="\\.",B=new RegExp(`^${R}${V}${R}${V}${R}$`),je=B.test.bind(B);async function He(e){const r=je(e),s=e.startsWith("v1.")||e.startsWith("ghs_"),o=e.startsWith("ghu_");return{type:"token",token:e,tokenType:r?"app":s?"installation":o?"user-to-server":"oauth"}}function We(e){return e.split(/\./).length===3?`bearer ${e}`:`token ${e}`}async function Ve(e,r,s,o){const t=r.endpoint.merge(s,o);return t.headers.authorization=We(e),r(t)}var Be=function(r){if(!r)throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");if(typeof r!="string")throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");return r=r.replace(/^(token|bearer) +/i,""),Object.assign(He.bind(null,r),{hook:Ve.bind(null,r)})};const Z="6.1.6",x=()=>{},xe=console.warn.bind(console),$e=console.error.bind(console);function Me(e={}){return typeof e.debug!="function"&&(e.debug=x),typeof e.info!="function"&&(e.info=x),typeof e.warn!="function"&&(e.warn=xe),typeof e.error!="function"&&(e.error=$e),e}const $=`octokit-core.js/${Z} ${y()}`;class ze{static VERSION=Z;static defaults(r){return class extends this{constructor(...o){const t=o[0]||{};if(typeof r=="function"){super(r(t));return}super(Object.assign({},r,t,t.userAgent&&r.userAgent?{userAgent:`${t.userAgent} ${r.userAgent}`}:null))}}}static plugins=[];static plugin(...r){const s=this.plugins;return class extends this{static plugins=s.concat(r.filter(t=>!s.includes(t)))}}constructor(r={}){const s=new ue.Collection,o={baseUrl:D.endpoint.DEFAULTS.baseUrl,headers:{},request:Object.assign({},r.request,{hook:s.bind(null,"request")}),mediaType:{previews:[],format:""}};if(o.headers["user-agent"]=r.userAgent?`${r.userAgent} ${$}`:$,r.baseUrl&&(o.baseUrl=r.baseUrl),r.previews&&(o.mediaType.previews=r.previews),r.timeZone&&(o.headers["time-zone"]=r.timeZone),this.request=D.defaults(o),this.graphql=Ie(this.request).defaults(o),this.log=Me(r.log),this.hook=s,r.authStrategy){const{authStrategy:n,...i}=r,a=n(Object.assign({request:this.request,log:this.log,octokit:this,octokitOptions:i},r.auth));s.wrap("request",a.hook),this.auth=a}else if(!r.auth)this.auth=async()=>({type:"unauthenticated"});else{const n=Be(r.auth);s.wrap("request",n.hook),this.auth=n}const t=this.constructor;for(let n=0;n<t.plugins.length;++n)Object.assign(this,t.plugins[n](this,r))}request;graphql;log;hook;auth}var Ne="0.0.0-development";function Ke(e){if(!e.data)return{...e,data:[]};if(!("total_count"in e.data&&!("url"in e.data)))return e;const s=e.data.incomplete_results,o=e.data.repository_selection,t=e.data.total_count;delete e.data.incomplete_results,delete e.data.repository_selection,delete e.data.total_count;const n=Object.keys(e.data)[0],i=e.data[n];return e.data=i,typeof s<"u"&&(e.data.incomplete_results=s),typeof o<"u"&&(e.data.repository_selection=o),e.data.total_count=t,e}function q(e,r,s){const o=typeof r=="function"?r.endpoint(s):e.request.endpoint(r,s),t=typeof r=="function"?r:e.request,n=o.method,i=o.headers;let a=o.url;return{[Symbol.asyncIterator]:()=>({async next(){if(!a)return{done:!0};try{const c=await t({method:n,url:a,headers:i}),u=Ke(c);return a=((u.headers.link||"").match(/<([^<>]+)>;\s*rel="next"/)||[])[1],{value:u}}catch(c){if(c.status!==409)throw c;return a="",{value:{status:200,headers:{},data:[]}}}}})}}function Y(e,r,s,o){return typeof s=="function"&&(o=s,s=void 0),X(e,[],q(e,r,s)[Symbol.asyncIterator](),o)}function X(e,r,s,o){return s.next().then(t=>{if(t.done)return r;let n=!1;function i(){n=!0}return r=r.concat(o?o(t.value,i):t.value.data),n?r:X(e,r,s,o)})}Object.assign(Y,{iterator:q});function Je(e){return{paginate:Object.assign(Y.bind(null,e),{iterator:q.bind(null,e)})}}Je.VERSION=Ne;var Qe=(e,r)=>`The cursor at "${e.join(",")}" did not change its value "${r}" after a page transition. Please make sure your that your query is set up correctly.`,Ze=class extends Error{constructor(e,r){super(Qe(e.pathInQuery,r)),this.pageInfo=e,this.cursorValue=r,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="MissingCursorChangeError"},Ye=class extends Error{constructor(e){super(`No pageInfo property found in response. Please make sure to specify the pageInfo in your query. Response-Data: ${JSON.stringify(e,null,2)}`),this.response=e,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}name="MissingPageInfo"},Xe=e=>Object.prototype.toString.call(e)==="[object Object]";function ee(e){const r=re(e,"pageInfo");if(r.length===0)throw new Ye(e);return r}var re=(e,r,s=[])=>{for(const o of Object.keys(e)){const t=[...s,o],n=e[o];if(Xe(n)){if(n.hasOwnProperty(r))return t;const i=re(n,r,t);if(i.length>0)return i}}return[]},f=(e,r)=>r.reduce((s,o)=>s[o],e),S=(e,r,s)=>{const o=r[r.length-1],t=[...r].slice(0,-1),n=f(e,t);typeof s=="function"?n[o]=s(n[o]):n[o]=s},er=e=>{const r=ee(e);return{pathInQuery:r,pageInfo:f(e,[...r,"pageInfo"])}},se=e=>e.hasOwnProperty("hasNextPage"),rr=e=>se(e)?e.endCursor:e.startCursor,sr=e=>se(e)?e.hasNextPage:e.hasPreviousPage,oe=e=>(r,s={})=>{let o=!0,t={...s};return{[Symbol.asyncIterator]:()=>({async next(){if(!o)return{done:!0,value:{}};const n=await e.graphql(r,t),i=er(n),a=rr(i.pageInfo);if(o=sr(i.pageInfo),o&&a===t.cursor)throw new Ze(i,a);return t={...t,cursor:a},{done:!1,value:n}}})}},or=(e,r)=>{if(Object.keys(e).length===0)return Object.assign(e,r);const s=ee(e),o=[...s,"nodes"],t=f(r,o);t&&S(e,o,c=>[...c,...t]);const n=[...s,"edges"],i=f(r,n);i&&S(e,n,c=>[...c,...i]);const a=[...s,"pageInfo"];return S(e,a,f(r,a)),e},tr=e=>{const r=oe(e);return async(s,o={})=>{let t={};for await(const n of r(s,o))t=or(t,n);return t}};function Sr(e){return{graphql:Object.assign(e.graphql,{paginate:Object.assign(tr(e),{iterator:oe(e)})})}}const nr="14.0.0",ir={actions:{addCustomLabelsToSelfHostedRunnerForOrg:["POST /orgs/{org}/actions/runners/{runner_id}/labels"],addCustomLabelsToSelfHostedRunnerForRepo:["POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],addRepoAccessToSelfHostedRunnerGroupInOrg:["PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],approveWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],cancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],createEnvironmentVariable:["POST /repos/{owner}/{repo}/environments/{environment_name}/variables"],createHostedRunnerForOrg:["POST /orgs/{org}/actions/hosted-runners"],createOrUpdateEnvironmentSecret:["PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],createOrgVariable:["POST /orgs/{org}/actions/variables"],createRegistrationTokenForOrg:["POST /orgs/{org}/actions/runners/registration-token"],createRegistrationTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/registration-token"],createRemoveTokenForOrg:["POST /orgs/{org}/actions/runners/remove-token"],createRemoveTokenForRepo:["POST /repos/{owner}/{repo}/actions/runners/remove-token"],createRepoVariable:["POST /repos/{owner}/{repo}/actions/variables"],createWorkflowDispatch:["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],deleteActionsCacheById:["DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"],deleteActionsCacheByKey:["DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"],deleteArtifact:["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],deleteEnvironmentSecret:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],deleteEnvironmentVariable:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],deleteHostedRunnerForOrg:["DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],deleteOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}"],deleteOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],deleteRepoVariable:["DELETE /repos/{owner}/{repo}/actions/variables/{name}"],deleteSelfHostedRunnerFromOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}"],deleteSelfHostedRunnerFromRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],deleteWorkflowRun:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],deleteWorkflowRunLogs:["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],disableSelectedRepositoryGithubActionsOrganization:["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],disableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],downloadArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],downloadJobLogsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],downloadWorkflowRunAttemptLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"],downloadWorkflowRunLogs:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],enableSelectedRepositoryGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],enableWorkflow:["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],forceCancelWorkflowRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"],generateRunnerJitconfigForOrg:["POST /orgs/{org}/actions/runners/generate-jitconfig"],generateRunnerJitconfigForRepo:["POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"],getActionsCacheList:["GET /repos/{owner}/{repo}/actions/caches"],getActionsCacheUsage:["GET /repos/{owner}/{repo}/actions/cache/usage"],getActionsCacheUsageByRepoForOrg:["GET /orgs/{org}/actions/cache/usage-by-repository"],getActionsCacheUsageForOrg:["GET /orgs/{org}/actions/cache/usage"],getAllowedActionsOrganization:["GET /orgs/{org}/actions/permissions/selected-actions"],getAllowedActionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],getArtifact:["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],getCustomOidcSubClaimForRepo:["GET /repos/{owner}/{repo}/actions/oidc/customization/sub"],getEnvironmentPublicKey:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key"],getEnvironmentSecret:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"],getEnvironmentVariable:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],getGithubActionsDefaultWorkflowPermissionsOrganization:["GET /orgs/{org}/actions/permissions/workflow"],getGithubActionsDefaultWorkflowPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions/workflow"],getGithubActionsPermissionsOrganization:["GET /orgs/{org}/actions/permissions"],getGithubActionsPermissionsRepository:["GET /repos/{owner}/{repo}/actions/permissions"],getHostedRunnerForOrg:["GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],getHostedRunnersGithubOwnedImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/github-owned"],getHostedRunnersLimitsForOrg:["GET /orgs/{org}/actions/hosted-runners/limits"],getHostedRunnersMachineSpecsForOrg:["GET /orgs/{org}/actions/hosted-runners/machine-sizes"],getHostedRunnersPartnerImagesForOrg:["GET /orgs/{org}/actions/hosted-runners/images/partner"],getHostedRunnersPlatformsForOrg:["GET /orgs/{org}/actions/hosted-runners/platforms"],getJobForWorkflowRun:["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],getOrgPublicKey:["GET /orgs/{org}/actions/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}"],getOrgVariable:["GET /orgs/{org}/actions/variables/{name}"],getPendingDeploymentsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],getRepoPermissions:["GET /repos/{owner}/{repo}/actions/permissions",{},{renamed:["actions","getGithubActionsPermissionsRepository"]}],getRepoPublicKey:["GET /repos/{owner}/{repo}/actions/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],getRepoVariable:["GET /repos/{owner}/{repo}/actions/variables/{name}"],getReviewsForRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],getSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}"],getSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],getWorkflow:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],getWorkflowAccessToRepository:["GET /repos/{owner}/{repo}/actions/permissions/access"],getWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],getWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"],getWorkflowRunUsage:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],getWorkflowUsage:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],listArtifactsForRepo:["GET /repos/{owner}/{repo}/actions/artifacts"],listEnvironmentSecrets:["GET /repos/{owner}/{repo}/environments/{environment_name}/secrets"],listEnvironmentVariables:["GET /repos/{owner}/{repo}/environments/{environment_name}/variables"],listGithubHostedRunnersInGroupForOrg:["GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners"],listHostedRunnersForOrg:["GET /orgs/{org}/actions/hosted-runners"],listJobsForWorkflowRun:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],listJobsForWorkflowRunAttempt:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"],listLabelsForSelfHostedRunnerForOrg:["GET /orgs/{org}/actions/runners/{runner_id}/labels"],listLabelsForSelfHostedRunnerForRepo:["GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],listOrgSecrets:["GET /orgs/{org}/actions/secrets"],listOrgVariables:["GET /orgs/{org}/actions/variables"],listRepoOrganizationSecrets:["GET /repos/{owner}/{repo}/actions/organization-secrets"],listRepoOrganizationVariables:["GET /repos/{owner}/{repo}/actions/organization-variables"],listRepoSecrets:["GET /repos/{owner}/{repo}/actions/secrets"],listRepoVariables:["GET /repos/{owner}/{repo}/actions/variables"],listRepoWorkflows:["GET /repos/{owner}/{repo}/actions/workflows"],listRunnerApplicationsForOrg:["GET /orgs/{org}/actions/runners/downloads"],listRunnerApplicationsForRepo:["GET /repos/{owner}/{repo}/actions/runners/downloads"],listSelectedReposForOrgSecret:["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],listSelectedReposForOrgVariable:["GET /orgs/{org}/actions/variables/{name}/repositories"],listSelectedRepositoriesEnabledGithubActionsOrganization:["GET /orgs/{org}/actions/permissions/repositories"],listSelfHostedRunnersForOrg:["GET /orgs/{org}/actions/runners"],listSelfHostedRunnersForRepo:["GET /repos/{owner}/{repo}/actions/runners"],listWorkflowRunArtifacts:["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],listWorkflowRuns:["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],listWorkflowRunsForRepo:["GET /repos/{owner}/{repo}/actions/runs"],reRunJobForWorkflowRun:["POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"],reRunWorkflow:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],reRunWorkflowFailedJobs:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"],removeAllCustomLabelsFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels"],removeAllCustomLabelsFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],removeCustomLabelFromSelfHostedRunnerForOrg:["DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"],removeCustomLabelFromSelfHostedRunnerForRepo:["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgVariable:["DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"],reviewCustomGatesForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"],reviewPendingDeploymentsForRun:["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],setAllowedActionsOrganization:["PUT /orgs/{org}/actions/permissions/selected-actions"],setAllowedActionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],setCustomLabelsForSelfHostedRunnerForOrg:["PUT /orgs/{org}/actions/runners/{runner_id}/labels"],setCustomLabelsForSelfHostedRunnerForRepo:["PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"],setCustomOidcSubClaimForRepo:["PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"],setGithubActionsDefaultWorkflowPermissionsOrganization:["PUT /orgs/{org}/actions/permissions/workflow"],setGithubActionsDefaultWorkflowPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions/workflow"],setGithubActionsPermissionsOrganization:["PUT /orgs/{org}/actions/permissions"],setGithubActionsPermissionsRepository:["PUT /repos/{owner}/{repo}/actions/permissions"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],setSelectedReposForOrgVariable:["PUT /orgs/{org}/actions/variables/{name}/repositories"],setSelectedRepositoriesEnabledGithubActionsOrganization:["PUT /orgs/{org}/actions/permissions/repositories"],setWorkflowAccessToRepository:["PUT /repos/{owner}/{repo}/actions/permissions/access"],updateEnvironmentVariable:["PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"],updateHostedRunnerForOrg:["PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}"],updateOrgVariable:["PATCH /orgs/{org}/actions/variables/{name}"],updateRepoVariable:["PATCH /repos/{owner}/{repo}/actions/variables/{name}"]},activity:{checkRepoIsStarredByAuthenticatedUser:["GET /user/starred/{owner}/{repo}"],deleteRepoSubscription:["DELETE /repos/{owner}/{repo}/subscription"],deleteThreadSubscription:["DELETE /notifications/threads/{thread_id}/subscription"],getFeeds:["GET /feeds"],getRepoSubscription:["GET /repos/{owner}/{repo}/subscription"],getThread:["GET /notifications/threads/{thread_id}"],getThreadSubscriptionForAuthenticatedUser:["GET /notifications/threads/{thread_id}/subscription"],listEventsForAuthenticatedUser:["GET /users/{username}/events"],listNotificationsForAuthenticatedUser:["GET /notifications"],listOrgEventsForAuthenticatedUser:["GET /users/{username}/events/orgs/{org}"],listPublicEvents:["GET /events"],listPublicEventsForRepoNetwork:["GET /networks/{owner}/{repo}/events"],listPublicEventsForUser:["GET /users/{username}/events/public"],listPublicOrgEvents:["GET /orgs/{org}/events"],listReceivedEventsForUser:["GET /users/{username}/received_events"],listReceivedPublicEventsForUser:["GET /users/{username}/received_events/public"],listRepoEvents:["GET /repos/{owner}/{repo}/events"],listRepoNotificationsForAuthenticatedUser:["GET /repos/{owner}/{repo}/notifications"],listReposStarredByAuthenticatedUser:["GET /user/starred"],listReposStarredByUser:["GET /users/{username}/starred"],listReposWatchedByUser:["GET /users/{username}/subscriptions"],listStargazersForRepo:["GET /repos/{owner}/{repo}/stargazers"],listWatchedReposForAuthenticatedUser:["GET /user/subscriptions"],listWatchersForRepo:["GET /repos/{owner}/{repo}/subscribers"],markNotificationsAsRead:["PUT /notifications"],markRepoNotificationsAsRead:["PUT /repos/{owner}/{repo}/notifications"],markThreadAsDone:["DELETE /notifications/threads/{thread_id}"],markThreadAsRead:["PATCH /notifications/threads/{thread_id}"],setRepoSubscription:["PUT /repos/{owner}/{repo}/subscription"],setThreadSubscription:["PUT /notifications/threads/{thread_id}/subscription"],starRepoForAuthenticatedUser:["PUT /user/starred/{owner}/{repo}"],unstarRepoForAuthenticatedUser:["DELETE /user/starred/{owner}/{repo}"]},apps:{addRepoToInstallation:["PUT /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","addRepoToInstallationForAuthenticatedUser"]}],addRepoToInstallationForAuthenticatedUser:["PUT /user/installations/{installation_id}/repositories/{repository_id}"],checkToken:["POST /applications/{client_id}/token"],createFromManifest:["POST /app-manifests/{code}/conversions"],createInstallationAccessToken:["POST /app/installations/{installation_id}/access_tokens"],deleteAuthorization:["DELETE /applications/{client_id}/grant"],deleteInstallation:["DELETE /app/installations/{installation_id}"],deleteToken:["DELETE /applications/{client_id}/token"],getAuthenticated:["GET /app"],getBySlug:["GET /apps/{app_slug}"],getInstallation:["GET /app/installations/{installation_id}"],getOrgInstallation:["GET /orgs/{org}/installation"],getRepoInstallation:["GET /repos/{owner}/{repo}/installation"],getSubscriptionPlanForAccount:["GET /marketplace_listing/accounts/{account_id}"],getSubscriptionPlanForAccountStubbed:["GET /marketplace_listing/stubbed/accounts/{account_id}"],getUserInstallation:["GET /users/{username}/installation"],getWebhookConfigForApp:["GET /app/hook/config"],getWebhookDelivery:["GET /app/hook/deliveries/{delivery_id}"],listAccountsForPlan:["GET /marketplace_listing/plans/{plan_id}/accounts"],listAccountsForPlanStubbed:["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],listInstallationReposForAuthenticatedUser:["GET /user/installations/{installation_id}/repositories"],listInstallationRequestsForAuthenticatedApp:["GET /app/installation-requests"],listInstallations:["GET /app/installations"],listInstallationsForAuthenticatedUser:["GET /user/installations"],listPlans:["GET /marketplace_listing/plans"],listPlansStubbed:["GET /marketplace_listing/stubbed/plans"],listReposAccessibleToInstallation:["GET /installation/repositories"],listSubscriptionsForAuthenticatedUser:["GET /user/marketplace_purchases"],listSubscriptionsForAuthenticatedUserStubbed:["GET /user/marketplace_purchases/stubbed"],listWebhookDeliveries:["GET /app/hook/deliveries"],redeliverWebhookDelivery:["POST /app/hook/deliveries/{delivery_id}/attempts"],removeRepoFromInstallation:["DELETE /user/installations/{installation_id}/repositories/{repository_id}",{},{renamed:["apps","removeRepoFromInstallationForAuthenticatedUser"]}],removeRepoFromInstallationForAuthenticatedUser:["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],resetToken:["PATCH /applications/{client_id}/token"],revokeInstallationAccessToken:["DELETE /installation/token"],scopeToken:["POST /applications/{client_id}/token/scoped"],suspendInstallation:["PUT /app/installations/{installation_id}/suspended"],unsuspendInstallation:["DELETE /app/installations/{installation_id}/suspended"],updateWebhookConfigForApp:["PATCH /app/hook/config"]},billing:{getGithubActionsBillingOrg:["GET /orgs/{org}/settings/billing/actions"],getGithubActionsBillingUser:["GET /users/{username}/settings/billing/actions"],getGithubBillingUsageReportOrg:["GET /organizations/{org}/settings/billing/usage"],getGithubPackagesBillingOrg:["GET /orgs/{org}/settings/billing/packages"],getGithubPackagesBillingUser:["GET /users/{username}/settings/billing/packages"],getSharedStorageBillingOrg:["GET /orgs/{org}/settings/billing/shared-storage"],getSharedStorageBillingUser:["GET /users/{username}/settings/billing/shared-storage"]},campaigns:{createCampaign:["POST /orgs/{org}/campaigns"],deleteCampaign:["DELETE /orgs/{org}/campaigns/{campaign_number}"],getCampaignSummary:["GET /orgs/{org}/campaigns/{campaign_number}"],listOrgCampaigns:["GET /orgs/{org}/campaigns"],updateCampaign:["PATCH /orgs/{org}/campaigns/{campaign_number}"]},checks:{create:["POST /repos/{owner}/{repo}/check-runs"],createSuite:["POST /repos/{owner}/{repo}/check-suites"],get:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],getSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],listAnnotations:["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],listForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],listForSuite:["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],listSuitesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],rerequestRun:["POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"],rerequestSuite:["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],setSuitesPreferences:["PATCH /repos/{owner}/{repo}/check-suites/preferences"],update:["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]},codeScanning:{commitAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits"],createAutofix:["POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],createVariantAnalysis:["POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses"],deleteAnalysis:["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],deleteCodeqlDatabase:["DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getAlert:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",{},{renamedParameters:{alert_id:"alert_number"}}],getAnalysis:["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],getAutofix:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix"],getCodeqlDatabase:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"],getDefaultSetup:["GET /repos/{owner}/{repo}/code-scanning/default-setup"],getSarif:["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],getVariantAnalysis:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}"],getVariantAnalysisRepoTask:["GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}"],listAlertInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],listAlertsForOrg:["GET /orgs/{org}/code-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/code-scanning/alerts"],listAlertsInstances:["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",{},{renamed:["codeScanning","listAlertInstances"]}],listCodeqlDatabases:["GET /repos/{owner}/{repo}/code-scanning/codeql/databases"],listRecentAnalyses:["GET /repos/{owner}/{repo}/code-scanning/analyses"],updateAlert:["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],updateDefaultSetup:["PATCH /repos/{owner}/{repo}/code-scanning/default-setup"],uploadSarif:["POST /repos/{owner}/{repo}/code-scanning/sarifs"]},codeSecurity:{attachConfiguration:["POST /orgs/{org}/code-security/configurations/{configuration_id}/attach"],attachEnterpriseConfiguration:["POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach"],createConfiguration:["POST /orgs/{org}/code-security/configurations"],createConfigurationForEnterprise:["POST /enterprises/{enterprise}/code-security/configurations"],deleteConfiguration:["DELETE /orgs/{org}/code-security/configurations/{configuration_id}"],deleteConfigurationForEnterprise:["DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],detachConfiguration:["DELETE /orgs/{org}/code-security/configurations/detach"],getConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}"],getConfigurationForRepository:["GET /repos/{owner}/{repo}/code-security-configuration"],getConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations"],getConfigurationsForOrg:["GET /orgs/{org}/code-security/configurations"],getDefaultConfigurations:["GET /orgs/{org}/code-security/configurations/defaults"],getDefaultConfigurationsForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/defaults"],getRepositoriesForConfiguration:["GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories"],getRepositoriesForEnterpriseConfiguration:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories"],getSingleConfigurationForEnterprise:["GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}"],setConfigurationAsDefault:["PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults"],setConfigurationAsDefaultForEnterprise:["PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults"],updateConfiguration:["PATCH /orgs/{org}/code-security/configurations/{configuration_id}"],updateEnterpriseConfiguration:["PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}"]},codesOfConduct:{getAllCodesOfConduct:["GET /codes_of_conduct"],getConductCode:["GET /codes_of_conduct/{key}"]},codespaces:{addRepositoryForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],addSelectedRepoToOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],checkPermissionsForDevcontainer:["GET /repos/{owner}/{repo}/codespaces/permissions_check"],codespaceMachinesForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/machines"],createForAuthenticatedUser:["POST /user/codespaces"],createOrUpdateOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],createOrUpdateSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}"],createWithPrForAuthenticatedUser:["POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"],createWithRepoForAuthenticatedUser:["POST /repos/{owner}/{repo}/codespaces"],deleteForAuthenticatedUser:["DELETE /user/codespaces/{codespace_name}"],deleteFromOrganization:["DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"],deleteOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],deleteSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}"],exportForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/exports"],getCodespacesForUserInOrg:["GET /orgs/{org}/members/{username}/codespaces"],getExportDetailsForAuthenticatedUser:["GET /user/codespaces/{codespace_name}/exports/{export_id}"],getForAuthenticatedUser:["GET /user/codespaces/{codespace_name}"],getOrgPublicKey:["GET /orgs/{org}/codespaces/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}"],getPublicKeyForAuthenticatedUser:["GET /user/codespaces/secrets/public-key"],getRepoPublicKey:["GET /repos/{owner}/{repo}/codespaces/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"],getSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}"],listDevcontainersInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/devcontainers"],listForAuthenticatedUser:["GET /user/codespaces"],listInOrganization:["GET /orgs/{org}/codespaces",{},{renamedParameters:{org_id:"org"}}],listInRepositoryForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces"],listOrgSecrets:["GET /orgs/{org}/codespaces/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/codespaces/secrets"],listRepositoriesForSecretForAuthenticatedUser:["GET /user/codespaces/secrets/{secret_name}/repositories"],listSecretsForAuthenticatedUser:["GET /user/codespaces/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],preFlightWithRepoForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/new"],publishForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/publish"],removeRepositoryForSecretForAuthenticatedUser:["DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"],repoMachinesForAuthenticatedUser:["GET /repos/{owner}/{repo}/codespaces/machines"],setRepositoriesForSecretForAuthenticatedUser:["PUT /user/codespaces/secrets/{secret_name}/repositories"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"],startForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/start"],stopForAuthenticatedUser:["POST /user/codespaces/{codespace_name}/stop"],stopInOrganization:["POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"],updateForAuthenticatedUser:["PATCH /user/codespaces/{codespace_name}"]},copilot:{addCopilotSeatsForTeams:["POST /orgs/{org}/copilot/billing/selected_teams"],addCopilotSeatsForUsers:["POST /orgs/{org}/copilot/billing/selected_users"],cancelCopilotSeatAssignmentForTeams:["DELETE /orgs/{org}/copilot/billing/selected_teams"],cancelCopilotSeatAssignmentForUsers:["DELETE /orgs/{org}/copilot/billing/selected_users"],copilotMetricsForOrganization:["GET /orgs/{org}/copilot/metrics"],copilotMetricsForTeam:["GET /orgs/{org}/team/{team_slug}/copilot/metrics"],getCopilotOrganizationDetails:["GET /orgs/{org}/copilot/billing"],getCopilotSeatDetailsForUser:["GET /orgs/{org}/members/{username}/copilot"],listCopilotSeats:["GET /orgs/{org}/copilot/billing/seats"]},dependabot:{addSelectedRepoToOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],createOrUpdateOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}"],createOrUpdateRepoSecret:["PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],deleteOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],deleteRepoSecret:["DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],getAlert:["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],getOrgPublicKey:["GET /orgs/{org}/dependabot/secrets/public-key"],getOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}"],getRepoPublicKey:["GET /repos/{owner}/{repo}/dependabot/secrets/public-key"],getRepoSecret:["GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/dependabot/alerts"],listAlertsForOrg:["GET /orgs/{org}/dependabot/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/dependabot/alerts"],listOrgSecrets:["GET /orgs/{org}/dependabot/secrets"],listRepoSecrets:["GET /repos/{owner}/{repo}/dependabot/secrets"],listSelectedReposForOrgSecret:["GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],removeSelectedRepoFromOrgSecret:["DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"],setSelectedReposForOrgSecret:["PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"],updateAlert:["PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"]},dependencyGraph:{createRepositorySnapshot:["POST /repos/{owner}/{repo}/dependency-graph/snapshots"],diffRange:["GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"],exportSbom:["GET /repos/{owner}/{repo}/dependency-graph/sbom"]},emojis:{get:["GET /emojis"]},gists:{checkIsStarred:["GET /gists/{gist_id}/star"],create:["POST /gists"],createComment:["POST /gists/{gist_id}/comments"],delete:["DELETE /gists/{gist_id}"],deleteComment:["DELETE /gists/{gist_id}/comments/{comment_id}"],fork:["POST /gists/{gist_id}/forks"],get:["GET /gists/{gist_id}"],getComment:["GET /gists/{gist_id}/comments/{comment_id}"],getRevision:["GET /gists/{gist_id}/{sha}"],list:["GET /gists"],listComments:["GET /gists/{gist_id}/comments"],listCommits:["GET /gists/{gist_id}/commits"],listForUser:["GET /users/{username}/gists"],listForks:["GET /gists/{gist_id}/forks"],listPublic:["GET /gists/public"],listStarred:["GET /gists/starred"],star:["PUT /gists/{gist_id}/star"],unstar:["DELETE /gists/{gist_id}/star"],update:["PATCH /gists/{gist_id}"],updateComment:["PATCH /gists/{gist_id}/comments/{comment_id}"]},git:{createBlob:["POST /repos/{owner}/{repo}/git/blobs"],createCommit:["POST /repos/{owner}/{repo}/git/commits"],createRef:["POST /repos/{owner}/{repo}/git/refs"],createTag:["POST /repos/{owner}/{repo}/git/tags"],createTree:["POST /repos/{owner}/{repo}/git/trees"],deleteRef:["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],getBlob:["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],getCommit:["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],getRef:["GET /repos/{owner}/{repo}/git/ref/{ref}"],getTag:["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],getTree:["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],listMatchingRefs:["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],updateRef:["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]},gitignore:{getAllTemplates:["GET /gitignore/templates"],getTemplate:["GET /gitignore/templates/{name}"]},hostedCompute:{createNetworkConfigurationForOrg:["POST /orgs/{org}/settings/network-configurations"],deleteNetworkConfigurationFromOrg:["DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkConfigurationForOrg:["GET /orgs/{org}/settings/network-configurations/{network_configuration_id}"],getNetworkSettingsForOrg:["GET /orgs/{org}/settings/network-settings/{network_settings_id}"],listNetworkConfigurationsForOrg:["GET /orgs/{org}/settings/network-configurations"],updateNetworkConfigurationForOrg:["PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}"]},interactions:{getRestrictionsForAuthenticatedUser:["GET /user/interaction-limits"],getRestrictionsForOrg:["GET /orgs/{org}/interaction-limits"],getRestrictionsForRepo:["GET /repos/{owner}/{repo}/interaction-limits"],getRestrictionsForYourPublicRepos:["GET /user/interaction-limits",{},{renamed:["interactions","getRestrictionsForAuthenticatedUser"]}],removeRestrictionsForAuthenticatedUser:["DELETE /user/interaction-limits"],removeRestrictionsForOrg:["DELETE /orgs/{org}/interaction-limits"],removeRestrictionsForRepo:["DELETE /repos/{owner}/{repo}/interaction-limits"],removeRestrictionsForYourPublicRepos:["DELETE /user/interaction-limits",{},{renamed:["interactions","removeRestrictionsForAuthenticatedUser"]}],setRestrictionsForAuthenticatedUser:["PUT /user/interaction-limits"],setRestrictionsForOrg:["PUT /orgs/{org}/interaction-limits"],setRestrictionsForRepo:["PUT /repos/{owner}/{repo}/interaction-limits"],setRestrictionsForYourPublicRepos:["PUT /user/interaction-limits",{},{renamed:["interactions","setRestrictionsForAuthenticatedUser"]}]},issues:{addAssignees:["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],addLabels:["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],addSubIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],checkUserCanBeAssigned:["GET /repos/{owner}/{repo}/assignees/{assignee}"],checkUserCanBeAssignedToIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"],create:["POST /repos/{owner}/{repo}/issues"],createComment:["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],createLabel:["POST /repos/{owner}/{repo}/labels"],createMilestone:["POST /repos/{owner}/{repo}/milestones"],deleteComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],deleteLabel:["DELETE /repos/{owner}/{repo}/labels/{name}"],deleteMilestone:["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],get:["GET /repos/{owner}/{repo}/issues/{issue_number}"],getComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],getEvent:["GET /repos/{owner}/{repo}/issues/events/{event_id}"],getLabel:["GET /repos/{owner}/{repo}/labels/{name}"],getMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],list:["GET /issues"],listAssignees:["GET /repos/{owner}/{repo}/assignees"],listComments:["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],listCommentsForRepo:["GET /repos/{owner}/{repo}/issues/comments"],listEvents:["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],listEventsForRepo:["GET /repos/{owner}/{repo}/issues/events"],listEventsForTimeline:["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"],listForAuthenticatedUser:["GET /user/issues"],listForOrg:["GET /orgs/{org}/issues"],listForRepo:["GET /repos/{owner}/{repo}/issues"],listLabelsForMilestone:["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],listLabelsForRepo:["GET /repos/{owner}/{repo}/labels"],listLabelsOnIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],listMilestones:["GET /repos/{owner}/{repo}/milestones"],listSubIssues:["GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues"],lock:["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],removeAllLabels:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],removeAssignees:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],removeLabel:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],removeSubIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue"],reprioritizeSubIssue:["PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority"],setLabels:["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],unlock:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],update:["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],updateComment:["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],updateLabel:["PATCH /repos/{owner}/{repo}/labels/{name}"],updateMilestone:["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]},licenses:{get:["GET /licenses/{license}"],getAllCommonlyUsed:["GET /licenses"],getForRepo:["GET /repos/{owner}/{repo}/license"]},markdown:{render:["POST /markdown"],renderRaw:["POST /markdown/raw",{headers:{"content-type":"text/plain; charset=utf-8"}}]},meta:{get:["GET /meta"],getAllVersions:["GET /versions"],getOctocat:["GET /octocat"],getZen:["GET /zen"],root:["GET /"]},migrations:{deleteArchiveForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/archive"],deleteArchiveForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/archive"],downloadArchiveForOrg:["GET /orgs/{org}/migrations/{migration_id}/archive"],getArchiveForAuthenticatedUser:["GET /user/migrations/{migration_id}/archive"],getStatusForAuthenticatedUser:["GET /user/migrations/{migration_id}"],getStatusForOrg:["GET /orgs/{org}/migrations/{migration_id}"],listForAuthenticatedUser:["GET /user/migrations"],listForOrg:["GET /orgs/{org}/migrations"],listReposForAuthenticatedUser:["GET /user/migrations/{migration_id}/repositories"],listReposForOrg:["GET /orgs/{org}/migrations/{migration_id}/repositories"],listReposForUser:["GET /user/migrations/{migration_id}/repositories",{},{renamed:["migrations","listReposForAuthenticatedUser"]}],startForAuthenticatedUser:["POST /user/migrations"],startForOrg:["POST /orgs/{org}/migrations"],unlockRepoForAuthenticatedUser:["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"],unlockRepoForOrg:["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"]},oidc:{getOidcCustomSubTemplateForOrg:["GET /orgs/{org}/actions/oidc/customization/sub"],updateOidcCustomSubTemplateForOrg:["PUT /orgs/{org}/actions/oidc/customization/sub"]},orgs:{addSecurityManagerTeam:["PUT /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team"}],assignTeamToOrgRole:["PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],assignUserToOrgRole:["PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"],blockUser:["PUT /orgs/{org}/blocks/{username}"],cancelInvitation:["DELETE /orgs/{org}/invitations/{invitation_id}"],checkBlockedUser:["GET /orgs/{org}/blocks/{username}"],checkMembershipForUser:["GET /orgs/{org}/members/{username}"],checkPublicMembershipForUser:["GET /orgs/{org}/public_members/{username}"],convertMemberToOutsideCollaborator:["PUT /orgs/{org}/outside_collaborators/{username}"],createInvitation:["POST /orgs/{org}/invitations"],createIssueType:["POST /orgs/{org}/issue-types"],createOrUpdateCustomProperties:["PATCH /orgs/{org}/properties/schema"],createOrUpdateCustomPropertiesValuesForRepos:["PATCH /orgs/{org}/properties/values"],createOrUpdateCustomProperty:["PUT /orgs/{org}/properties/schema/{custom_property_name}"],createWebhook:["POST /orgs/{org}/hooks"],delete:["DELETE /orgs/{org}"],deleteIssueType:["DELETE /orgs/{org}/issue-types/{issue_type_id}"],deleteWebhook:["DELETE /orgs/{org}/hooks/{hook_id}"],enableOrDisableSecurityProductOnAllOrgRepos:["POST /orgs/{org}/{security_product}/{enablement}",{},{deprecated:"octokit.rest.orgs.enableOrDisableSecurityProductOnAllOrgRepos() is deprecated, see https://docs.github.com/rest/orgs/orgs#enable-or-disable-a-security-feature-for-an-organization"}],get:["GET /orgs/{org}"],getAllCustomProperties:["GET /orgs/{org}/properties/schema"],getCustomProperty:["GET /orgs/{org}/properties/schema/{custom_property_name}"],getMembershipForAuthenticatedUser:["GET /user/memberships/orgs/{org}"],getMembershipForUser:["GET /orgs/{org}/memberships/{username}"],getOrgRole:["GET /orgs/{org}/organization-roles/{role_id}"],getOrgRulesetHistory:["GET /orgs/{org}/rulesets/{ruleset_id}/history"],getOrgRulesetVersion:["GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}"],getWebhook:["GET /orgs/{org}/hooks/{hook_id}"],getWebhookConfigForOrg:["GET /orgs/{org}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"],list:["GET /organizations"],listAppInstallations:["GET /orgs/{org}/installations"],listAttestations:["GET /orgs/{org}/attestations/{subject_digest}"],listBlockedUsers:["GET /orgs/{org}/blocks"],listCustomPropertiesValuesForRepos:["GET /orgs/{org}/properties/values"],listFailedInvitations:["GET /orgs/{org}/failed_invitations"],listForAuthenticatedUser:["GET /user/orgs"],listForUser:["GET /users/{username}/orgs"],listInvitationTeams:["GET /orgs/{org}/invitations/{invitation_id}/teams"],listIssueTypes:["GET /orgs/{org}/issue-types"],listMembers:["GET /orgs/{org}/members"],listMembershipsForAuthenticatedUser:["GET /user/memberships/orgs"],listOrgRoleTeams:["GET /orgs/{org}/organization-roles/{role_id}/teams"],listOrgRoleUsers:["GET /orgs/{org}/organization-roles/{role_id}/users"],listOrgRoles:["GET /orgs/{org}/organization-roles"],listOrganizationFineGrainedPermissions:["GET /orgs/{org}/organization-fine-grained-permissions"],listOutsideCollaborators:["GET /orgs/{org}/outside_collaborators"],listPatGrantRepositories:["GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"],listPatGrantRequestRepositories:["GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"],listPatGrantRequests:["GET /orgs/{org}/personal-access-token-requests"],listPatGrants:["GET /orgs/{org}/personal-access-tokens"],listPendingInvitations:["GET /orgs/{org}/invitations"],listPublicMembers:["GET /orgs/{org}/public_members"],listSecurityManagerTeams:["GET /orgs/{org}/security-managers",{},{deprecated:"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams"}],listWebhookDeliveries:["GET /orgs/{org}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /orgs/{org}/hooks"],pingWebhook:["POST /orgs/{org}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeCustomProperty:["DELETE /orgs/{org}/properties/schema/{custom_property_name}"],removeMember:["DELETE /orgs/{org}/members/{username}"],removeMembershipForUser:["DELETE /orgs/{org}/memberships/{username}"],removeOutsideCollaborator:["DELETE /orgs/{org}/outside_collaborators/{username}"],removePublicMembershipForAuthenticatedUser:["DELETE /orgs/{org}/public_members/{username}"],removeSecurityManagerTeam:["DELETE /orgs/{org}/security-managers/teams/{team_slug}",{},{deprecated:"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team"}],reviewPatGrantRequest:["POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"],reviewPatGrantRequestsInBulk:["POST /orgs/{org}/personal-access-token-requests"],revokeAllOrgRolesTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}"],revokeAllOrgRolesUser:["DELETE /orgs/{org}/organization-roles/users/{username}"],revokeOrgRoleTeam:["DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"],revokeOrgRoleUser:["DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"],setMembershipForUser:["PUT /orgs/{org}/memberships/{username}"],setPublicMembershipForAuthenticatedUser:["PUT /orgs/{org}/public_members/{username}"],unblockUser:["DELETE /orgs/{org}/blocks/{username}"],update:["PATCH /orgs/{org}"],updateIssueType:["PUT /orgs/{org}/issue-types/{issue_type_id}"],updateMembershipForAuthenticatedUser:["PATCH /user/memberships/orgs/{org}"],updatePatAccess:["POST /orgs/{org}/personal-access-tokens/{pat_id}"],updatePatAccesses:["POST /orgs/{org}/personal-access-tokens"],updateWebhook:["PATCH /orgs/{org}/hooks/{hook_id}"],updateWebhookConfigForOrg:["PATCH /orgs/{org}/hooks/{hook_id}/config"]},packages:{deletePackageForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}"],deletePackageForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],deletePackageForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}"],deletePackageVersionForAuthenticatedUser:["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForOrg:["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],deletePackageVersionForUser:["DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getAllPackageVersionsForAPackageOwnedByAnOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByOrg"]}],getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions",{},{renamed:["packages","getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]}],getAllPackageVersionsForPackageOwnedByAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByOrg:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],getAllPackageVersionsForPackageOwnedByUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions"],getPackageForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}"],getPackageForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}"],getPackageForUser:["GET /users/{username}/packages/{package_type}/{package_name}"],getPackageVersionForAuthenticatedUser:["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForOrganization:["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],getPackageVersionForUser:["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],listDockerMigrationConflictingPackagesForAuthenticatedUser:["GET /user/docker/conflicts"],listDockerMigrationConflictingPackagesForOrganization:["GET /orgs/{org}/docker/conflicts"],listDockerMigrationConflictingPackagesForUser:["GET /users/{username}/docker/conflicts"],listPackagesForAuthenticatedUser:["GET /user/packages"],listPackagesForOrganization:["GET /orgs/{org}/packages"],listPackagesForUser:["GET /users/{username}/packages"],restorePackageForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageForUser:["POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"],restorePackageVersionForAuthenticatedUser:["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForOrg:["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],restorePackageVersionForUser:["POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]},privateRegistries:{createOrgPrivateRegistry:["POST /orgs/{org}/private-registries"],deleteOrgPrivateRegistry:["DELETE /orgs/{org}/private-registries/{secret_name}"],getOrgPrivateRegistry:["GET /orgs/{org}/private-registries/{secret_name}"],getOrgPublicKey:["GET /orgs/{org}/private-registries/public-key"],listOrgPrivateRegistries:["GET /orgs/{org}/private-registries"],updateOrgPrivateRegistry:["PATCH /orgs/{org}/private-registries/{secret_name}"]},pulls:{checkIfMerged:["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],create:["POST /repos/{owner}/{repo}/pulls"],createReplyForReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],createReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],createReviewComment:["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],deletePendingReview:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],deleteReviewComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],dismissReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],get:["GET /repos/{owner}/{repo}/pulls/{pull_number}"],getReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],getReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],list:["GET /repos/{owner}/{repo}/pulls"],listCommentsForReview:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],listCommits:["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],listFiles:["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],listRequestedReviewers:["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],listReviewComments:["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],listReviewCommentsForRepo:["GET /repos/{owner}/{repo}/pulls/comments"],listReviews:["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],merge:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],removeRequestedReviewers:["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],requestReviewers:["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],submitReview:["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],update:["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],updateBranch:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"],updateReview:["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],updateReviewComment:["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]},rateLimit:{get:["GET /rate_limit"]},reactions:{createForCommitComment:["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"],createForIssue:["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"],createForIssueComment:["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],createForPullRequestReviewComment:["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],createForRelease:["POST /repos/{owner}/{repo}/releases/{release_id}/reactions"],createForTeamDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],createForTeamDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"],deleteForCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"],deleteForIssue:["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"],deleteForIssueComment:["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"],deleteForPullRequestComment:["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"],deleteForRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"],deleteForTeamDiscussion:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"],deleteForTeamDiscussionComment:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"],listForCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"],listForIssue:["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],listForIssueComment:["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"],listForPullRequestReviewComment:["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"],listForRelease:["GET /repos/{owner}/{repo}/releases/{release_id}/reactions"],listForTeamDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"],listForTeamDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"]},repos:{acceptInvitation:["PATCH /user/repository_invitations/{invitation_id}",{},{renamed:["repos","acceptInvitationForAuthenticatedUser"]}],acceptInvitationForAuthenticatedUser:["PATCH /user/repository_invitations/{invitation_id}"],addAppAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],addCollaborator:["PUT /repos/{owner}/{repo}/collaborators/{username}"],addStatusCheckContexts:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],addTeamAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],addUserAccessRestrictions:["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],cancelPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"],checkAutomatedSecurityFixes:["GET /repos/{owner}/{repo}/automated-security-fixes"],checkCollaborator:["GET /repos/{owner}/{repo}/collaborators/{username}"],checkPrivateVulnerabilityReporting:["GET /repos/{owner}/{repo}/private-vulnerability-reporting"],checkVulnerabilityAlerts:["GET /repos/{owner}/{repo}/vulnerability-alerts"],codeownersErrors:["GET /repos/{owner}/{repo}/codeowners/errors"],compareCommits:["GET /repos/{owner}/{repo}/compare/{base}...{head}"],compareCommitsWithBasehead:["GET /repos/{owner}/{repo}/compare/{basehead}"],createAttestation:["POST /repos/{owner}/{repo}/attestations"],createAutolink:["POST /repos/{owner}/{repo}/autolinks"],createCommitComment:["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],createCommitSignatureProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],createCommitStatus:["POST /repos/{owner}/{repo}/statuses/{sha}"],createDeployKey:["POST /repos/{owner}/{repo}/keys"],createDeployment:["POST /repos/{owner}/{repo}/deployments"],createDeploymentBranchPolicy:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],createDeploymentProtectionRule:["POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],createDeploymentStatus:["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],createDispatchEvent:["POST /repos/{owner}/{repo}/dispatches"],createForAuthenticatedUser:["POST /user/repos"],createFork:["POST /repos/{owner}/{repo}/forks"],createInOrg:["POST /orgs/{org}/repos"],createOrUpdateCustomPropertiesValues:["PATCH /repos/{owner}/{repo}/properties/values"],createOrUpdateEnvironment:["PUT /repos/{owner}/{repo}/environments/{environment_name}"],createOrUpdateFileContents:["PUT /repos/{owner}/{repo}/contents/{path}"],createOrgRuleset:["POST /orgs/{org}/rulesets"],createPagesDeployment:["POST /repos/{owner}/{repo}/pages/deployments"],createPagesSite:["POST /repos/{owner}/{repo}/pages"],createRelease:["POST /repos/{owner}/{repo}/releases"],createRepoRuleset:["POST /repos/{owner}/{repo}/rulesets"],createUsingTemplate:["POST /repos/{template_owner}/{template_repo}/generate"],createWebhook:["POST /repos/{owner}/{repo}/hooks"],declineInvitation:["DELETE /user/repository_invitations/{invitation_id}",{},{renamed:["repos","declineInvitationForAuthenticatedUser"]}],declineInvitationForAuthenticatedUser:["DELETE /user/repository_invitations/{invitation_id}"],delete:["DELETE /repos/{owner}/{repo}"],deleteAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],deleteAdminBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],deleteAnEnvironment:["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],deleteAutolink:["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],deleteBranchProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],deleteCommitComment:["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],deleteCommitSignatureProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],deleteDeployKey:["DELETE /repos/{owner}/{repo}/keys/{key_id}"],deleteDeployment:["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],deleteDeploymentBranchPolicy:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],deleteFile:["DELETE /repos/{owner}/{repo}/contents/{path}"],deleteInvitation:["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],deleteOrgRuleset:["DELETE /orgs/{org}/rulesets/{ruleset_id}"],deletePagesSite:["DELETE /repos/{owner}/{repo}/pages"],deletePullRequestReviewProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],deleteRelease:["DELETE /repos/{owner}/{repo}/releases/{release_id}"],deleteReleaseAsset:["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],deleteRepoRuleset:["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],deleteWebhook:["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],disableAutomatedSecurityFixes:["DELETE /repos/{owner}/{repo}/automated-security-fixes"],disableDeploymentProtectionRule:["DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],disablePrivateVulnerabilityReporting:["DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"],disableVulnerabilityAlerts:["DELETE /repos/{owner}/{repo}/vulnerability-alerts"],downloadArchive:["GET /repos/{owner}/{repo}/zipball/{ref}",{},{renamed:["repos","downloadZipballArchive"]}],downloadTarballArchive:["GET /repos/{owner}/{repo}/tarball/{ref}"],downloadZipballArchive:["GET /repos/{owner}/{repo}/zipball/{ref}"],enableAutomatedSecurityFixes:["PUT /repos/{owner}/{repo}/automated-security-fixes"],enablePrivateVulnerabilityReporting:["PUT /repos/{owner}/{repo}/private-vulnerability-reporting"],enableVulnerabilityAlerts:["PUT /repos/{owner}/{repo}/vulnerability-alerts"],generateReleaseNotes:["POST /repos/{owner}/{repo}/releases/generate-notes"],get:["GET /repos/{owner}/{repo}"],getAccessRestrictions:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],getAdminBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],getAllDeploymentProtectionRules:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"],getAllEnvironments:["GET /repos/{owner}/{repo}/environments"],getAllStatusCheckContexts:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],getAllTopics:["GET /repos/{owner}/{repo}/topics"],getAppsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],getAutolink:["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],getBranch:["GET /repos/{owner}/{repo}/branches/{branch}"],getBranchProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection"],getBranchRules:["GET /repos/{owner}/{repo}/rules/branches/{branch}"],getClones:["GET /repos/{owner}/{repo}/traffic/clones"],getCodeFrequencyStats:["GET /repos/{owner}/{repo}/stats/code_frequency"],getCollaboratorPermissionLevel:["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],getCombinedStatusForRef:["GET /repos/{owner}/{repo}/commits/{ref}/status"],getCommit:["GET /repos/{owner}/{repo}/commits/{ref}"],getCommitActivityStats:["GET /repos/{owner}/{repo}/stats/commit_activity"],getCommitComment:["GET /repos/{owner}/{repo}/comments/{comment_id}"],getCommitSignatureProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"],getCommunityProfileMetrics:["GET /repos/{owner}/{repo}/community/profile"],getContent:["GET /repos/{owner}/{repo}/contents/{path}"],getContributorsStats:["GET /repos/{owner}/{repo}/stats/contributors"],getCustomDeploymentProtectionRule:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"],getCustomPropertiesValues:["GET /repos/{owner}/{repo}/properties/values"],getDeployKey:["GET /repos/{owner}/{repo}/keys/{key_id}"],getDeployment:["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],getDeploymentBranchPolicy:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],getDeploymentStatus:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],getEnvironment:["GET /repos/{owner}/{repo}/environments/{environment_name}"],getLatestPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/latest"],getLatestRelease:["GET /repos/{owner}/{repo}/releases/latest"],getOrgRuleSuite:["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],getOrgRuleSuites:["GET /orgs/{org}/rulesets/rule-suites"],getOrgRuleset:["GET /orgs/{org}/rulesets/{ruleset_id}"],getOrgRulesets:["GET /orgs/{org}/rulesets"],getPages:["GET /repos/{owner}/{repo}/pages"],getPagesBuild:["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],getPagesDeployment:["GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"],getPagesHealthCheck:["GET /repos/{owner}/{repo}/pages/health"],getParticipationStats:["GET /repos/{owner}/{repo}/stats/participation"],getPullRequestReviewProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],getPunchCardStats:["GET /repos/{owner}/{repo}/stats/punch_card"],getReadme:["GET /repos/{owner}/{repo}/readme"],getReadmeInDirectory:["GET /repos/{owner}/{repo}/readme/{dir}"],getRelease:["GET /repos/{owner}/{repo}/releases/{release_id}"],getReleaseAsset:["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],getReleaseByTag:["GET /repos/{owner}/{repo}/releases/tags/{tag}"],getRepoRuleSuite:["GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"],getRepoRuleSuites:["GET /repos/{owner}/{repo}/rulesets/rule-suites"],getRepoRuleset:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],getRepoRulesetHistory:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history"],getRepoRulesetVersion:["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}"],getRepoRulesets:["GET /repos/{owner}/{repo}/rulesets"],getStatusChecksProtection:["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],getTeamsWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],getTopPaths:["GET /repos/{owner}/{repo}/traffic/popular/paths"],getTopReferrers:["GET /repos/{owner}/{repo}/traffic/popular/referrers"],getUsersWithAccessToProtectedBranch:["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],getViews:["GET /repos/{owner}/{repo}/traffic/views"],getWebhook:["GET /repos/{owner}/{repo}/hooks/{hook_id}"],getWebhookConfigForRepo:["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],getWebhookDelivery:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"],listActivities:["GET /repos/{owner}/{repo}/activity"],listAttestations:["GET /repos/{owner}/{repo}/attestations/{subject_digest}"],listAutolinks:["GET /repos/{owner}/{repo}/autolinks"],listBranches:["GET /repos/{owner}/{repo}/branches"],listBranchesForHeadCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"],listCollaborators:["GET /repos/{owner}/{repo}/collaborators"],listCommentsForCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],listCommitCommentsForRepo:["GET /repos/{owner}/{repo}/comments"],listCommitStatusesForRef:["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],listCommits:["GET /repos/{owner}/{repo}/commits"],listContributors:["GET /repos/{owner}/{repo}/contributors"],listCustomDeploymentRuleIntegrations:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"],listDeployKeys:["GET /repos/{owner}/{repo}/keys"],listDeploymentBranchPolicies:["GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"],listDeploymentStatuses:["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],listDeployments:["GET /repos/{owner}/{repo}/deployments"],listForAuthenticatedUser:["GET /user/repos"],listForOrg:["GET /orgs/{org}/repos"],listForUser:["GET /users/{username}/repos"],listForks:["GET /repos/{owner}/{repo}/forks"],listInvitations:["GET /repos/{owner}/{repo}/invitations"],listInvitationsForAuthenticatedUser:["GET /user/repository_invitations"],listLanguages:["GET /repos/{owner}/{repo}/languages"],listPagesBuilds:["GET /repos/{owner}/{repo}/pages/builds"],listPublic:["GET /repositories"],listPullRequestsAssociatedWithCommit:["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"],listReleaseAssets:["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],listReleases:["GET /repos/{owner}/{repo}/releases"],listTags:["GET /repos/{owner}/{repo}/tags"],listTeams:["GET /repos/{owner}/{repo}/teams"],listWebhookDeliveries:["GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"],listWebhooks:["GET /repos/{owner}/{repo}/hooks"],merge:["POST /repos/{owner}/{repo}/merges"],mergeUpstream:["POST /repos/{owner}/{repo}/merge-upstream"],pingWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],redeliverWebhookDelivery:["POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"],removeAppAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],removeCollaborator:["DELETE /repos/{owner}/{repo}/collaborators/{username}"],removeStatusCheckContexts:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],removeStatusCheckProtection:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],removeTeamAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],removeUserAccessRestrictions:["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],renameBranch:["POST /repos/{owner}/{repo}/branches/{branch}/rename"],replaceAllTopics:["PUT /repos/{owner}/{repo}/topics"],requestPagesBuild:["POST /repos/{owner}/{repo}/pages/builds"],setAdminBranchProtection:["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],setAppAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",{},{mapToData:"apps"}],setStatusCheckContexts:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",{},{mapToData:"contexts"}],setTeamAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",{},{mapToData:"teams"}],setUserAccessRestrictions:["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",{},{mapToData:"users"}],testPushWebhook:["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],transfer:["POST /repos/{owner}/{repo}/transfer"],update:["PATCH /repos/{owner}/{repo}"],updateBranchProtection:["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],updateCommitComment:["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],updateDeploymentBranchPolicy:["PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"],updateInformationAboutPagesSite:["PUT /repos/{owner}/{repo}/pages"],updateInvitation:["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],updateOrgRuleset:["PUT /orgs/{org}/rulesets/{ruleset_id}"],updatePullRequestReviewProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],updateRelease:["PATCH /repos/{owner}/{repo}/releases/{release_id}"],updateReleaseAsset:["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],updateRepoRuleset:["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],updateStatusCheckPotection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",{},{renamed:["repos","updateStatusCheckProtection"]}],updateStatusCheckProtection:["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],updateWebhook:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],updateWebhookConfigForRepo:["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],uploadReleaseAsset:["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",{baseUrl:"https://uploads.github.com"}]},search:{code:["GET /search/code"],commits:["GET /search/commits"],issuesAndPullRequests:["GET /search/issues",{},{deprecated:"octokit.rest.search.issuesAndPullRequests() is deprecated, see https://docs.github.com/rest/search/search#search-issues-and-pull-requests"}],labels:["GET /search/labels"],repos:["GET /search/repositories"],topics:["GET /search/topics"],users:["GET /search/users"]},secretScanning:{createPushProtectionBypass:["POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses"],getAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],getScanHistory:["GET /repos/{owner}/{repo}/secret-scanning/scan-history"],listAlertsForEnterprise:["GET /enterprises/{enterprise}/secret-scanning/alerts"],listAlertsForOrg:["GET /orgs/{org}/secret-scanning/alerts"],listAlertsForRepo:["GET /repos/{owner}/{repo}/secret-scanning/alerts"],listLocationsForAlert:["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"],updateAlert:["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]},securityAdvisories:{createFork:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"],createPrivateVulnerabilityReport:["POST /repos/{owner}/{repo}/security-advisories/reports"],createRepositoryAdvisory:["POST /repos/{owner}/{repo}/security-advisories"],createRepositoryAdvisoryCveRequest:["POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"],getGlobalAdvisory:["GET /advisories/{ghsa_id}"],getRepositoryAdvisory:["GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"],listGlobalAdvisories:["GET /advisories"],listOrgRepositoryAdvisories:["GET /orgs/{org}/security-advisories"],listRepositoryAdvisories:["GET /repos/{owner}/{repo}/security-advisories"],updateRepositoryAdvisory:["PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"]},teams:{addOrUpdateMembershipForUserInOrg:["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],addOrUpdateRepoPermissionsInOrg:["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],checkPermissionsForRepoInOrg:["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],create:["POST /orgs/{org}/teams"],createDiscussionCommentInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],createDiscussionInOrg:["POST /orgs/{org}/teams/{team_slug}/discussions"],deleteDiscussionCommentInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],deleteDiscussionInOrg:["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],deleteInOrg:["DELETE /orgs/{org}/teams/{team_slug}"],getByName:["GET /orgs/{org}/teams/{team_slug}"],getDiscussionCommentInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],getDiscussionInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],getMembershipForUserInOrg:["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],list:["GET /orgs/{org}/teams"],listChildInOrg:["GET /orgs/{org}/teams/{team_slug}/teams"],listDiscussionCommentsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],listDiscussionsInOrg:["GET /orgs/{org}/teams/{team_slug}/discussions"],listForAuthenticatedUser:["GET /user/teams"],listMembersInOrg:["GET /orgs/{org}/teams/{team_slug}/members"],listPendingInvitationsInOrg:["GET /orgs/{org}/teams/{team_slug}/invitations"],listReposInOrg:["GET /orgs/{org}/teams/{team_slug}/repos"],removeMembershipForUserInOrg:["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],removeRepoInOrg:["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],updateDiscussionCommentInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],updateDiscussionInOrg:["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],updateInOrg:["PATCH /orgs/{org}/teams/{team_slug}"]},users:{addEmailForAuthenticated:["POST /user/emails",{},{renamed:["users","addEmailForAuthenticatedUser"]}],addEmailForAuthenticatedUser:["POST /user/emails"],addSocialAccountForAuthenticatedUser:["POST /user/social_accounts"],block:["PUT /user/blocks/{username}"],checkBlocked:["GET /user/blocks/{username}"],checkFollowingForUser:["GET /users/{username}/following/{target_user}"],checkPersonIsFollowedByAuthenticated:["GET /user/following/{username}"],createGpgKeyForAuthenticated:["POST /user/gpg_keys",{},{renamed:["users","createGpgKeyForAuthenticatedUser"]}],createGpgKeyForAuthenticatedUser:["POST /user/gpg_keys"],createPublicSshKeyForAuthenticated:["POST /user/keys",{},{renamed:["users","createPublicSshKeyForAuthenticatedUser"]}],createPublicSshKeyForAuthenticatedUser:["POST /user/keys"],createSshSigningKeyForAuthenticatedUser:["POST /user/ssh_signing_keys"],deleteEmailForAuthenticated:["DELETE /user/emails",{},{renamed:["users","deleteEmailForAuthenticatedUser"]}],deleteEmailForAuthenticatedUser:["DELETE /user/emails"],deleteGpgKeyForAuthenticated:["DELETE /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","deleteGpgKeyForAuthenticatedUser"]}],deleteGpgKeyForAuthenticatedUser:["DELETE /user/gpg_keys/{gpg_key_id}"],deletePublicSshKeyForAuthenticated:["DELETE /user/keys/{key_id}",{},{renamed:["users","deletePublicSshKeyForAuthenticatedUser"]}],deletePublicSshKeyForAuthenticatedUser:["DELETE /user/keys/{key_id}"],deleteSocialAccountForAuthenticatedUser:["DELETE /user/social_accounts"],deleteSshSigningKeyForAuthenticatedUser:["DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"],follow:["PUT /user/following/{username}"],getAuthenticated:["GET /user"],getById:["GET /user/{account_id}"],getByUsername:["GET /users/{username}"],getContextForUser:["GET /users/{username}/hovercard"],getGpgKeyForAuthenticated:["GET /user/gpg_keys/{gpg_key_id}",{},{renamed:["users","getGpgKeyForAuthenticatedUser"]}],getGpgKeyForAuthenticatedUser:["GET /user/gpg_keys/{gpg_key_id}"],getPublicSshKeyForAuthenticated:["GET /user/keys/{key_id}",{},{renamed:["users","getPublicSshKeyForAuthenticatedUser"]}],getPublicSshKeyForAuthenticatedUser:["GET /user/keys/{key_id}"],getSshSigningKeyForAuthenticatedUser:["GET /user/ssh_signing_keys/{ssh_signing_key_id}"],list:["GET /users"],listAttestations:["GET /users/{username}/attestations/{subject_digest}"],listBlockedByAuthenticated:["GET /user/blocks",{},{renamed:["users","listBlockedByAuthenticatedUser"]}],listBlockedByAuthenticatedUser:["GET /user/blocks"],listEmailsForAuthenticated:["GET /user/emails",{},{renamed:["users","listEmailsForAuthenticatedUser"]}],listEmailsForAuthenticatedUser:["GET /user/emails"],listFollowedByAuthenticated:["GET /user/following",{},{renamed:["users","listFollowedByAuthenticatedUser"]}],listFollowedByAuthenticatedUser:["GET /user/following"],listFollowersForAuthenticatedUser:["GET /user/followers"],listFollowersForUser:["GET /users/{username}/followers"],listFollowingForUser:["GET /users/{username}/following"],listGpgKeysForAuthenticated:["GET /user/gpg_keys",{},{renamed:["users","listGpgKeysForAuthenticatedUser"]}],listGpgKeysForAuthenticatedUser:["GET /user/gpg_keys"],listGpgKeysForUser:["GET /users/{username}/gpg_keys"],listPublicEmailsForAuthenticated:["GET /user/public_emails",{},{renamed:["users","listPublicEmailsForAuthenticatedUser"]}],listPublicEmailsForAuthenticatedUser:["GET /user/public_emails"],listPublicKeysForUser:["GET /users/{username}/keys"],listPublicSshKeysForAuthenticated:["GET /user/keys",{},{renamed:["users","listPublicSshKeysForAuthenticatedUser"]}],listPublicSshKeysForAuthenticatedUser:["GET /user/keys"],listSocialAccountsForAuthenticatedUser:["GET /user/social_accounts"],listSocialAccountsForUser:["GET /users/{username}/social_accounts"],listSshSigningKeysForAuthenticatedUser:["GET /user/ssh_signing_keys"],listSshSigningKeysForUser:["GET /users/{username}/ssh_signing_keys"],setPrimaryEmailVisibilityForAuthenticated:["PATCH /user/email/visibility",{},{renamed:["users","setPrimaryEmailVisibilityForAuthenticatedUser"]}],setPrimaryEmailVisibilityForAuthenticatedUser:["PATCH /user/email/visibility"],unblock:["DELETE /user/blocks/{username}"],unfollow:["DELETE /user/following/{username}"],updateAuthenticated:["PATCH /user"]}};var ar=ir;const m=new Map;for(const[e,r]of Object.entries(ar))for(const[s,o]of Object.entries(r)){const[t,n,i]=o,[a,c]=t.split(/ /),u=Object.assign({method:a,url:c},n);m.has(e)||m.set(e,new Map),m.get(e).set(s,{scope:e,methodName:s,endpointDefaults:u,decorations:i})}const cr={has({scope:e},r){return m.get(e).has(r)},getOwnPropertyDescriptor(e,r){return{value:this.get(e,r),configurable:!0,writable:!0,enumerable:!0}},defineProperty(e,r,s){return Object.defineProperty(e.cache,r,s),!0},deleteProperty(e,r){return delete e.cache[r],!0},ownKeys({scope:e}){return[...m.get(e).keys()]},set(e,r,s){return e.cache[r]=s},get({octokit:e,scope:r,cache:s},o){if(s[o])return s[o];const t=m.get(r).get(o);if(!t)return;const{endpointDefaults:n,decorations:i}=t;return i?s[o]=ur(e,r,o,n,i):s[o]=e.request.defaults(n),s[o]}};function pr(e){const r={};for(const s of m.keys())r[s]=new Proxy({octokit:e,scope:s,cache:{}},cr);return r}function ur(e,r,s,o,t){const n=e.request.defaults(o);function i(...a){let c=n.endpoint.merge(...a);if(t.mapToData)return c=Object.assign({},c,{data:c[t.mapToData],[t.mapToData]:void 0}),n(c);if(t.renamed){const[u,l]=t.renamed;e.log.warn(`octokit.${r}.${s}() has been renamed to octokit.${u}.${l}()`)}if(t.deprecated&&e.log.warn(t.deprecated),t.renamedParameters){const u=n.endpoint.merge(...a);for(const[l,p]of Object.entries(t.renamedParameters))l in u&&(e.log.warn(`"${l}" parameter is deprecated for "octokit.${r}.${s}()". Use "${p}" instead`),p in u||(u[p]=u[l]),delete u[l]);return n(u)}return n(...a)}return Object.assign(i,n)}function lr(e){return{rest:pr(e)}}lr.VERSION=nr;var gr="0.0.0-development";async function te(e,r,s,o){if(!s.request||!s.request.request)throw s;if(s.status>=400&&!e.doNotRetry.includes(s.status)){const t=o.request.retries!=null?o.request.retries:e.retries,n=Math.pow((o.request.retryCount||0)+1,2);throw r.retry.retryRequest(s,t,n)}throw s}async function dr(e,r,s,o){const t=new z;return t.on("failed",function(n,i){const a=~~n.request.request.retries,c=~~n.request.request.retryAfter;if(o.request.retryCount=i.retryCount+1,a>i.retryCount)return c*e.retryAfterBaseValue}),t.schedule(mr.bind(null,e,r,s),o)}async function mr(e,r,s,o){const t=await s(s,o);if(t.data&&t.data.errors&&t.data.errors.length>0&&/Something went wrong while executing your query/.test(t.data.errors[0].message)){const n=new b(t.data.errors[0].message,500,{request:o,response:t});return te(e,r,n,o)}return t}function Tr(e,r){const s=Object.assign({enabled:!0,retryAfterBaseValue:1e3,doNotRetry:[400,401,403,404,410,422,451],retries:3},r.retry);return s.enabled&&(e.hook.error("request",te.bind(null,s,e)),e.hook.wrap("request",dr.bind(null,s,e))),{retry:{retryRequest:(o,t,n)=>(o.request.request=Object.assign({},o.request.request,{retries:t,retryAfter:n}),o)}}}Tr.VERSION=gr;var Er="0.0.0-development",F=()=>Promise.resolve();function hr(e,r,s){return e.retryLimiter.schedule(wr,e,r,s)}async function wr(e,r,s){const{pathname:o}=new URL(s.url,"http://github.test"),t=_r(s.method,o),n=!t&&s.method!=="GET"&&s.method!=="HEAD",i=s.method==="GET"&&o.startsWith("/search/"),a=o.startsWith("/graphql"),u=~~r.retryCount>0?{priority:0,weight:0}:{};e.clustering&&(u.expiration=1e3*60),(n||a)&&await e.write.key(e.id).schedule(u,F),n&&e.triggersNotification(o)&&await e.notifications.key(e.id).schedule(u,F),i&&await e.search.key(e.id).schedule(u,F);const l=(t?e.auth:e.global).key(e.id).schedule(u,r,s);if(a){const p=await l;if(p.data.errors!=null&&p.data.errors.some(g=>g.type==="RATE_LIMITED"))throw Object.assign(new Error("GraphQL Rate Limit Exceeded"),{response:p,data:p.data})}return l}function _r(e,r){return e==="PATCH"&&/^\/applications\/[^/]+\/token\/scoped$/.test(r)||e==="POST"&&(/^\/applications\/[^/]+\/token$/.test(r)||/^\/app\/installations\/[^/]+\/access_tokens$/.test(r)||r==="/login/oauth/access_token")}var br=["/orgs/{org}/invitations","/orgs/{org}/invitations/{invitation_id}","/orgs/{org}/teams/{team_slug}/discussions","/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments","/repos/{owner}/{repo}/collaborators/{username}","/repos/{owner}/{repo}/commits/{commit_sha}/comments","/repos/{owner}/{repo}/issues","/repos/{owner}/{repo}/issues/{issue_number}/comments","/repos/{owner}/{repo}/issues/{issue_number}/sub_issue","/repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority","/repos/{owner}/{repo}/pulls","/repos/{owner}/{repo}/pulls/{pull_number}/comments","/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies","/repos/{owner}/{repo}/pulls/{pull_number}/merge","/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","/repos/{owner}/{repo}/pulls/{pull_number}/reviews","/repos/{owner}/{repo}/releases","/teams/{team_id}/discussions","/teams/{team_id}/discussions/{discussion_number}/comments"];function fr(e){const s=`^(?:${e.map(o=>o.split("/").map(t=>t.startsWith("{")?"(?:.+?)":t).join("/")).map(o=>`(?:${o})`).join("|")})[^/]*$`;return new RegExp(s,"i")}var M=fr(br),ne=M.test.bind(M),d={},yr=function(e,r){d.global=new e.Group({id:"octokit-global",maxConcurrent:10,...r}),d.auth=new e.Group({id:"octokit-auth",maxConcurrent:1,...r}),d.search=new e.Group({id:"octokit-search",maxConcurrent:1,minTime:2e3,...r}),d.write=new e.Group({id:"octokit-write",maxConcurrent:1,minTime:1e3,...r}),d.notifications=new e.Group({id:"octokit-notifications",maxConcurrent:1,minTime:3e3,...r})};function ie(e,r){const{enabled:s=!0,Bottleneck:o=z,id:t="no-id",timeout:n=1e3*60*2,connection:i}=r.throttle||{};if(!s)return{};const a={timeout:n};typeof i<"u"&&(a.connection=i),d.global==null&&yr(o,a);const c=Object.assign({clustering:i!=null,triggersNotification:ne,fallbackSecondaryRateRetryAfter:60,retryAfterBaseValue:1e3,retryLimiter:new o,id:t,...d},r.throttle);if(typeof c.onSecondaryRateLimit!="function"||typeof c.onRateLimit!="function")throw new Error(`octokit/plugin-throttling error:
|
| 4 |
+
You must pass the onSecondaryRateLimit and onRateLimit error handlers.
|
| 5 |
+
See https://octokit.github.io/rest.js/#throttling
|
| 6 |
+
|
| 7 |
+
const octokit = new Octokit({
|
| 8 |
+
throttle: {
|
| 9 |
+
onSecondaryRateLimit: (retryAfter, options) => {/* ... */},
|
| 10 |
+
onRateLimit: (retryAfter, options) => {/* ... */}
|
| 11 |
+
}
|
| 12 |
+
})
|
| 13 |
+
`);const u={},l=new o.Events(u);return u.on("secondary-limit",c.onSecondaryRateLimit),u.on("rate-limit",c.onRateLimit),u.on("error",p=>e.log.warn("Error in throttling-plugin limit handler",p)),c.retryLimiter.on("failed",async function(p,g){const[w,k,G]=g.args,{pathname:ae}=new URL(G.url,"http://github.test");if(!(ae.startsWith("/graphql")&&p.status!==401||p.status===403||p.status===429))return;const P=~~k.retryCount;k.retryCount=P,G.request.retryCount=P;const{wantRetry:ce,retryAfter:pe=0}=await(async function(){if(/\bsecondary rate\b/i.test(p.message)){const T=Number(p.response.headers["retry-after"])||w.fallbackSecondaryRateRetryAfter;return{wantRetry:await l.trigger("secondary-limit",T,G,e,P),retryAfter:T}}if(p.response.headers!=null&&p.response.headers["x-ratelimit-remaining"]==="0"||(p.response.data?.errors??[]).some(T=>T.type==="RATE_LIMITED")){const T=new Date(~~p.response.headers["x-ratelimit-reset"]*1e3).getTime(),v=Math.max(Math.ceil((T-Date.now())/1e3)+1,0);return{wantRetry:await l.trigger("rate-limit",v,G,e,P),retryAfter:v}}return{}})();if(ce)return k.retryCount++,pe*w.retryAfterBaseValue}),e.hook.wrap("request",hr.bind(null,c)),{}}ie.VERSION=Er;ie.triggersNotification=ne;var Gr="7.1.6";ze.defaults({userAgent:`octokit-oauth-app.js/${Gr} ${y()}`});export{ze as O,Sr as a,Tr as b,Je as p,lr as r,ie as t};
|
| 14 |
+
//# sourceMappingURL=@octokit-MBEWYTsi.js.map
|
assets/@octokit-MBEWYTsi.js.map
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
assets/AccessibilityAuditor-9k2YK-kF.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as i,j as t}from"./react-CIdJ77ke.js";import{ai as N,L as w,S as v,M as S,an as L}from"./index-CX7Qxd1D.js";import{r as R}from"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const Pt=()=>{const[o,f]=i.useState("https://react.dev"),[g,b]=i.useState(""),[l,d]=i.useState(null),[s,n]=i.useState(!1),[c,x]=i.useState(null),[u,a]=i.useState({}),m=i.useRef(null),j=()=>{const r=o.startsWith("http")?o:`https://${o}`;b(r),n(!0),d(null),a({})},y=async()=>{if(s&&m.current)try{const r=await R(m.current.contentWindow.document);d(r)}catch(r){console.error(r),alert("Could not audit this page. This may be due to security restrictions (CORS).")}finally{n(!1)}},A=async r=>{const e=r.id;x(e);try{const h=await L(r);a(p=>({...p,[e]:h}))}catch{a(p=>({...p,[e]:"Could not get suggestion."}))}finally{x(null)}};return t.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[t.jsxs("header",{className:"mb-6",children:[t.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[t.jsx(N,{}),t.jsx("span",{className:"ml-3",children:"Automated Accessibility Auditor"})]}),t.jsx("p",{className:"text-text-secondary mt-1",children:"Audit a live URL for accessibility issues and get AI-powered fixes."})]}),t.jsxs("div",{className:"flex gap-2 mb-4",children:[t.jsx("input",{type:"text",value:o,onChange:r=>f(r.target.value),placeholder:"https://example.com",className:"flex-grow p-2 border rounded"}),t.jsx("button",{onClick:j,disabled:s,className:"btn-primary px-6 py-2",children:s?"Auditing...":"Audit"})]}),t.jsxs("div",{className:"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0",children:[t.jsx("div",{className:"bg-background border-2 border-dashed border-border rounded-lg overflow-hidden",children:t.jsx("iframe",{ref:m,src:g,title:"Audit Target",className:"w-full h-full bg-white",onLoad:y,sandbox:"allow-scripts allow-same-origin"})}),t.jsxs("div",{className:"bg-surface p-4 border border-border rounded-lg flex flex-col",children:[t.jsx("h3",{className:"text-lg font-bold mb-2",children:"Audit Results"}),t.jsxs("div",{className:"flex-grow overflow-y-auto pr-2",children:[s&&t.jsx("div",{className:"flex justify-center items-center h-full",children:t.jsx(w,{})}),l&&(l.violations.length===0?t.jsx("p",{children:"No violations found!"}):l.violations.map((r,e)=>t.jsxs("div",{className:"p-3 mb-2 bg-background border border-border rounded",children:[t.jsx("p",{className:"font-bold text-red-600",children:r.help}),t.jsx("p",{className:"text-sm my-1",children:r.description}),t.jsxs("button",{onClick:()=>A(r),disabled:!!c,className:"text-xs flex items-center gap-1 text-primary font-semibold",children:[t.jsx(v,{})," ",c===r.id?"Getting fix...":"Ask AI for a fix"]}),u[r.id]&&t.jsx("div",{className:"mt-2 text-xs border-t pt-2",children:t.jsx(S,{content:u[r.id]})})]},r.id+e)))]})]})]})]})};export{Pt as AccessibilityAuditor};
|
| 2 |
+
//# sourceMappingURL=AccessibilityAuditor-9k2YK-kF.js.map
|
assets/AccessibilityAuditor-9k2YK-kF.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AccessibilityAuditor-9k2YK-kF.js","sources":["../../components/features/AccessibilityAuditor.tsx"],"sourcesContent":["import React, { useState, useRef } from 'react';\nimport { suggestA11yFix } from '../../services/index.ts';\nimport { runAxeAudit, AxeResult } from '../../services/auditing/accessibilityService.ts';\nimport { EyeIcon, SparklesIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\nexport const AccessibilityAuditor: React.FC = () => {\n const [url, setUrl] = useState('https://react.dev');\n const [auditUrl, setAuditUrl] = useState('');\n const [results, setResults] = useState<AxeResult | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isLoadingAi, setIsLoadingAi] = useState<string | null>(null);\n const [aiFixes, setAiFixes] = useState<Record<string, string>>({});\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n const handleAudit = () => {\n const targetUrl = url.startsWith('http') ? url : `https://${url}`;\n setAuditUrl(targetUrl);\n setIsLoading(true);\n setResults(null);\n setAiFixes({});\n };\n \n const handleIframeLoad = async () => {\n if (isLoading && iframeRef.current) {\n try {\n const auditResults = await runAxeAudit(iframeRef.current.contentWindow!.document);\n setResults(auditResults);\n } catch (error) {\n console.error(error);\n alert('Could not audit this page. This may be due to security restrictions (CORS).');\n } finally {\n setIsLoading(false);\n }\n }\n };\n \n const handleGetFix = async (issue: any) => {\n const issueId = issue.id;\n setIsLoadingAi(issueId);\n try {\n const fix = await suggestA11yFix(issue);\n setAiFixes(prev => ({...prev, [issueId]: fix}));\n } catch(e) {\n setAiFixes(prev => ({...prev, [issueId]: 'Could not get suggestion.'}));\n } finally {\n setIsLoadingAi(null);\n }\n };\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\"><h1 className=\"text-3xl font-bold flex items-center\"><EyeIcon /><span className=\"ml-3\">Automated Accessibility Auditor</span></h1><p className=\"text-text-secondary mt-1\">Audit a live URL for accessibility issues and get AI-powered fixes.</p></header>\n <div className=\"flex gap-2 mb-4\"><input type=\"text\" value={url} onChange={e => setUrl(e.target.value)} placeholder=\"https://example.com\" className=\"flex-grow p-2 border rounded\"/><button onClick={handleAudit} disabled={isLoading} className=\"btn-primary px-6 py-2\">{isLoading ? 'Auditing...' : 'Audit'}</button></div>\n <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0\">\n <div className=\"bg-background border-2 border-dashed border-border rounded-lg overflow-hidden\"><iframe ref={iframeRef} src={auditUrl} title=\"Audit Target\" className=\"w-full h-full bg-white\" onLoad={handleIframeLoad} sandbox=\"allow-scripts allow-same-origin\"/></div>\n <div className=\"bg-surface p-4 border border-border rounded-lg flex flex-col\">\n <h3 className=\"text-lg font-bold mb-2\">Audit Results</h3>\n <div className=\"flex-grow overflow-y-auto pr-2\">\n {isLoading && <div className=\"flex justify-center items-center h-full\"><LoadingSpinner/></div>}\n {results && (results.violations.length === 0 ? <p>No violations found!</p> :\n results.violations.map((v, i) => (\n <div key={v.id + i} className=\"p-3 mb-2 bg-background border border-border rounded\">\n <p className=\"font-bold text-red-600\">{v.help}</p>\n <p className=\"text-sm my-1\">{v.description}</p>\n <button onClick={() => handleGetFix(v)} disabled={!!isLoadingAi} className=\"text-xs flex items-center gap-1 text-primary font-semibold\"><SparklesIcon/> {isLoadingAi === v.id ? 'Getting fix...' : 'Ask AI for a fix'}</button>\n {aiFixes[v.id] && <div className=\"mt-2 text-xs border-t pt-2\"><MarkdownRenderer content={aiFixes[v.id]}/></div>}\n </div>\n ))\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["AccessibilityAuditor","url","setUrl","useState","auditUrl","setAuditUrl","results","setResults","isLoading","setIsLoading","isLoadingAi","setIsLoadingAi","aiFixes","setAiFixes","iframeRef","useRef","handleAudit","targetUrl","handleIframeLoad","auditResults","runAxeAudit","error","handleGetFix","issue","issueId","fix","suggestA11yFix","prev","jsxs","jsx","EyeIcon","e","LoadingSpinner","v","i","SparklesIcon","MarkdownRenderer"],"mappings":"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"}
|
assets/AiCodeExplainer-DGin5jQC.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as t,j as e}from"./react-CIdJ77ke.js";import{m as j}from"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./@braintree-DzxiOROe.js";import"./d3-transition-CiCB8KJE.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import{h as M,i as R,j as T,k as $,L as g,M as E}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./d3-selection-C52G7wmG.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-ease-DRPgKoYJ.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const A=`const bubbleSort = (arr) => {
|
| 2 |
+
for (let i = 0; i < arr.length; i++) {
|
| 3 |
+
for (let j = 0; j < arr.length - i - 1; j++) {
|
| 4 |
+
if (arr[j] > arr[j + 1]) {
|
| 5 |
+
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
|
| 6 |
+
}
|
| 7 |
+
}
|
| 8 |
+
}
|
| 9 |
+
return arr;
|
| 10 |
+
};`,z=o=>o.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\b(const|let|var|function|return|if|for|=>|import|from|export|default)\b/g,'<span class="text-indigo-400 font-semibold">$1</span>').replace(/(\`|'|")(.*?)(\`|'|")/g,'<span class="text-emerald-400">$1$2$3</span>').replace(/(\/\/.*)/g,'<span class="text-gray-400 italic">$1</span>').replace(/(\{|\}|\(|\)|\[|\])/g,'<span class="text-gray-400">$1</span>');j.initialize({startOnLoad:!1,securityLevel:"loose"});const er=({initialCode:o})=>{const[i,y]=t.useState(o||A),[a,b]=t.useState(null),[d,v]=t.useState(""),[n,N]=t.useState(!1),[x,u]=t.useState(""),[m,w]=t.useState("summary"),[C]=M(),c=t.useRef(null),p=t.useRef(null),l=t.useRef(null),f=t.useCallback(async r=>{if(!r.trim()){u("Please enter some code to explain.");return}N(!0),u(""),b(null),v(""),w("summary");try{const[s,h]=await Promise.all([R(r),T(r)]);b(s),v(h.replace(/```mermaid\n|```/g,""))}catch(s){const h=s instanceof Error?s.message:"An unknown error occurred.";u(`Failed to get explanation: ${h}`)}finally{N(!1)}},[]);t.useEffect(()=>{o&&(y(o),f(o))},[o,f]),t.useEffect(()=>{(async()=>{if(m==="flowchart"&&d&&l.current)try{j.initialize({startOnLoad:!1,theme:C.mode==="dark"?"dark":"neutral",securityLevel:"loose"}),l.current.innerHTML="";const{svg:s}=await j.render(`mermaid-graph-${Date.now()}`,d);l.current.innerHTML=s}catch(s){console.error("Mermaid rendering error:",s),l.current.innerHTML='<p class="text-red-500">Error rendering flowchart.</p>'}})()},[m,d,C.mode]);const L=()=>{p.current&&c.current&&(p.current.scrollTop=c.current.scrollTop,p.current.scrollLeft=c.current.scrollLeft)},k=t.useMemo(()=>z(i),[i]),S=()=>{if(!a)return null;switch(m){case"summary":return e.jsx(E,{content:a.summary});case"lineByLine":return e.jsx("div",{className:"space-y-3",children:a.lineByLine.map((r,s)=>e.jsxs("div",{className:"p-3 bg-background rounded-md border border-border",children:[e.jsxs("p",{className:"font-mono text-xs text-primary mb-1",children:["Lines: ",r.lines]}),e.jsx("p",{className:"text-sm",children:r.explanation})]},s))});case"complexity":return e.jsxs("div",{children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Time Complexity:"})," ",e.jsx("span",{className:"font-mono text-amber-600",children:a.complexity.time})]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Space Complexity:"})," ",e.jsx("span",{className:"font-mono text-amber-600",children:a.complexity.space})]})]});case"suggestions":return e.jsx("ul",{className:"list-disc list-inside space-y-2",children:a.suggestions.map((r,s)=>e.jsx("li",{children:r},s))});case"flowchart":return e.jsx("div",{ref:l,className:"w-full h-full flex items-center justify-center",children:e.jsx(g,{})})}};return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6 flex-shrink-0",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx($,{}),e.jsx("span",{className:"ml-3",children:"AI Code Explainer"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Get a detailed, structured analysis of any code snippet."})]}),e.jsxs("div",{className:"flex-grow grid grid-cols-1 md:grid-cols-2 gap-6 min-h-0",children:[e.jsxs("div",{className:"flex flex-col min-h-0 md:col-span-1",children:[e.jsx("label",{htmlFor:"code-input",className:"text-sm font-medium text-text-secondary mb-2",children:"Your Code"}),e.jsxs("div",{className:"relative flex-grow bg-surface border border-border rounded-md focus-within:ring-2 focus-within:ring-primary overflow-hidden",children:[e.jsx("textarea",{ref:c,id:"code-input",value:i,onChange:r=>y(r.target.value),onScroll:L,placeholder:"Paste your code here...",spellCheck:"false",className:"absolute inset-0 w-full h-full p-4 bg-transparent resize-none font-mono text-sm text-transparent caret-primary outline-none z-10"}),e.jsx("pre",{ref:p,"aria-hidden":"true",className:"absolute inset-0 w-full h-full p-4 font-mono text-sm text-text-primary pointer-events-none z-0 whitespace-pre-wrap overflow-auto no-scrollbar",dangerouslySetInnerHTML:{__html:k+`
|
| 11 |
+
`}})]}),e.jsx("div",{className:"mt-4 flex-shrink-0",children:e.jsx("button",{onClick:()=>f(i),disabled:n,className:"btn-primary w-full flex items-center justify-center px-6 py-3",children:n?e.jsx(g,{}):"Analyze Code"})})]}),e.jsxs("div",{className:"flex flex-col min-h-0 md:col-span-1",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"AI Analysis"}),e.jsxs("div",{className:"relative flex-grow flex flex-col bg-surface border border-border rounded-md overflow-hidden",children:[e.jsx("div",{className:"flex-shrink-0 flex border-b border-border",children:["summary","lineByLine","complexity","suggestions","flowchart"].map(r=>e.jsx("button",{onClick:()=>w(r),disabled:!a,className:`px-4 py-2 text-sm font-medium capitalize transition-colors ${m===r?"bg-background text-primary font-semibold":"text-text-secondary hover:bg-gray-100 dark:hover:bg-slate-700 disabled:text-gray-400 dark:disabled:text-slate-500"}`,children:r.replace(/([A-Z])/g," $1")},r))}),e.jsxs("div",{className:"p-4 flex-grow overflow-y-auto",children:[n&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(g,{})}),x&&e.jsx("p",{className:"text-red-500",children:x}),a&&!n&&S(),!n&&!a&&!x&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"The analysis will appear here."})]})]})]})]})]})};export{er as AiCodeExplainer};
|
| 12 |
+
//# sourceMappingURL=AiCodeExplainer-DGin5jQC.js.map
|
assets/AiCodeExplainer-DGin5jQC.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiCodeExplainer-DGin5jQC.js","sources":["../../components/features/AiCodeExplainer.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect, useMemo, useRef } from 'react';\nimport mermaid from 'mermaid';\nimport { explainCodeStructured, generateMermaidJs } from '../../services/index.ts';\nimport type { StructuredExplanation } from '../../types.ts';\nimport { useTheme } from '../../hooks/useTheme.ts';\nimport { CpuChipIcon } from '../icons.tsx';\nimport { MarkdownRenderer, LoadingSpinner } from '../shared/index.tsx';\n\nconst exampleCode = `const bubbleSort = (arr) => {\n for (let i = 0; i < arr.length; i++) {\n for (let j = 0; j < arr.length - i - 1; j++) {\n if (arr[j] > arr[j + 1]) {\n [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];\n }\n }\n }\n return arr;\n};`;\n\ntype ExplanationTab = 'summary' | 'lineByLine' | 'complexity' | 'suggestions' | 'flowchart';\n\nconst simpleSyntaxHighlight = (code: string) => {\n const escapedCode = code\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n\n return escapedCode\n .replace(/\\b(const|let|var|function|return|if|for|=>|import|from|export|default)\\b/g, '<span class=\"text-indigo-400 font-semibold\">$1</span>')\n .replace(/(\\`|'|\")(.*?)(\\`|'|\")/g, '<span class=\"text-emerald-400\">$1$2$3</span>')\n .replace(/(\\/\\/.*)/g, '<span class=\"text-gray-400 italic\">$1</span>')\n .replace(/(\\{|\\}|\\(|\\)|\\[|\\])/g, '<span class=\"text-gray-400\">$1</span>');\n};\n\nmermaid.initialize({ startOnLoad: false, securityLevel: 'loose' });\n\nexport const AiCodeExplainer: React.FC<{ initialCode?: string }> = ({ initialCode }) => {\n const [code, setCode] = useState<string>(initialCode || exampleCode);\n const [explanation, setExplanation] = useState<StructuredExplanation | null>(null);\n const [mermaidCode, setMermaidCode] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n const [activeTab, setActiveTab] = useState<ExplanationTab>('summary');\n const [themeState] = useTheme();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const preRef = useRef<HTMLPreElement>(null);\n const mermaidContainerRef = useRef<HTMLDivElement>(null);\n\n const handleExplain = useCallback(async (codeToExplain: string) => {\n if (!codeToExplain.trim()) {\n setError('Please enter some code to explain.');\n return;\n }\n setIsLoading(true);\n setError('');\n setExplanation(null);\n setMermaidCode('');\n setActiveTab('summary');\n try {\n const [explanationResult, mermaidResult] = await Promise.all([\n explainCodeStructured(codeToExplain),\n generateMermaidJs(codeToExplain)\n ]);\n setExplanation(explanationResult);\n setMermaidCode(mermaidResult.replace(/```mermaid\\n|```/g, ''));\n\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to get explanation: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, []);\n \n useEffect(() => {\n if (initialCode) {\n setCode(initialCode);\n handleExplain(initialCode);\n }\n }, [initialCode, handleExplain]);\n\n useEffect(() => {\n const renderMermaid = async () => {\n if (activeTab === 'flowchart' && mermaidCode && mermaidContainerRef.current) {\n try {\n mermaid.initialize({ startOnLoad: false, theme: themeState.mode === 'dark' ? 'dark' : 'neutral', securityLevel: 'loose' });\n mermaidContainerRef.current.innerHTML = ''; // Clear previous\n const { svg } = await mermaid.render(`mermaid-graph-${Date.now()}`, mermaidCode);\n mermaidContainerRef.current.innerHTML = svg;\n } catch (e) {\n console.error(\"Mermaid rendering error:\", e);\n mermaidContainerRef.current.innerHTML = `<p class=\"text-red-500\">Error rendering flowchart.</p>`;\n }\n }\n }\n renderMermaid();\n }, [activeTab, mermaidCode, themeState.mode]);\n\n\n const handleScroll = () => {\n if (preRef.current && textareaRef.current) {\n preRef.current.scrollTop = textareaRef.current.scrollTop;\n preRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n };\n\n const highlightedCode = useMemo(() => simpleSyntaxHighlight(code), [code]);\n\n const renderTabContent = () => {\n if (!explanation) return null;\n switch(activeTab) {\n case 'summary':\n return <MarkdownRenderer content={explanation.summary} />;\n case 'lineByLine':\n return (\n <div className=\"space-y-3\">\n {explanation.lineByLine.map((item, index) => (\n <div key={index} className=\"p-3 bg-background rounded-md border border-border\">\n <p className=\"font-mono text-xs text-primary mb-1\">Lines: {item.lines}</p>\n <p className=\"text-sm\">{item.explanation}</p>\n </div>\n ))}\n </div>\n );\n case 'complexity':\n return (\n <div>\n <p><strong>Time Complexity:</strong> <span className=\"font-mono text-amber-600\">{explanation.complexity.time}</span></p>\n <p><strong>Space Complexity:</strong> <span className=\"font-mono text-amber-600\">{explanation.complexity.space}</span></p>\n </div>\n );\n case 'suggestions':\n return (\n <ul className=\"list-disc list-inside space-y-2\">\n {explanation.suggestions.map((item, index) => <li key={index}>{item}</li>)}\n </ul>\n );\n case 'flowchart':\n return (\n <div ref={mermaidContainerRef} className=\"w-full h-full flex items-center justify-center\">\n <LoadingSpinner />\n </div>\n );\n }\n }\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6 flex-shrink-0\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <CpuChipIcon />\n <span className=\"ml-3\">AI Code Explainer</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Get a detailed, structured analysis of any code snippet.</p>\n </header>\n <div className=\"flex-grow grid grid-cols-1 md:grid-cols-2 gap-6 min-h-0\">\n \n {/* Left Column: Code Input */}\n <div className=\"flex flex-col min-h-0 md:col-span-1\">\n <label htmlFor=\"code-input\" className=\"text-sm font-medium text-text-secondary mb-2\">Your Code</label>\n <div className=\"relative flex-grow bg-surface border border-border rounded-md focus-within:ring-2 focus-within:ring-primary overflow-hidden\">\n <textarea\n ref={textareaRef}\n id=\"code-input\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n onScroll={handleScroll}\n placeholder=\"Paste your code here...\"\n spellCheck=\"false\"\n className=\"absolute inset-0 w-full h-full p-4 bg-transparent resize-none font-mono text-sm text-transparent caret-primary outline-none z-10\"\n />\n <pre \n ref={preRef}\n aria-hidden=\"true\"\n className=\"absolute inset-0 w-full h-full p-4 font-mono text-sm text-text-primary pointer-events-none z-0 whitespace-pre-wrap overflow-auto no-scrollbar\"\n dangerouslySetInnerHTML={{ __html: highlightedCode + '\\n' }}\n />\n </div>\n <div className=\"mt-4 flex-shrink-0\">\n <button\n onClick={() => handleExplain(code)}\n disabled={isLoading}\n className=\"btn-primary w-full flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner/> : 'Analyze Code'}\n </button>\n </div>\n </div>\n\n {/* Right Column: AI Analysis */}\n <div className=\"flex flex-col min-h-0 md:col-span-1\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">AI Analysis</label>\n <div className=\"relative flex-grow flex flex-col bg-surface border border-border rounded-md overflow-hidden\">\n <div className=\"flex-shrink-0 flex border-b border-border\">\n {(['summary', 'lineByLine', 'complexity', 'suggestions', 'flowchart'] as ExplanationTab[]).map(tab => (\n <button key={tab} onClick={() => setActiveTab(tab)} disabled={!explanation}\n className={`px-4 py-2 text-sm font-medium capitalize transition-colors ${activeTab === tab ? 'bg-background text-primary font-semibold' : 'text-text-secondary hover:bg-gray-100 dark:hover:bg-slate-700 disabled:text-gray-400 dark:disabled:text-slate-500'}`}>\n {tab.replace(/([A-Z])/g, ' $1')}\n </button>\n ))}\n </div>\n <div className=\"p-4 flex-grow overflow-y-auto\">\n {isLoading && <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"text-red-500\">{error}</p>}\n {explanation && !isLoading && renderTabContent()}\n {!isLoading && !explanation && !error && <div className=\"text-text-secondary h-full flex items-center justify-center\">The analysis will appear here.</div>}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleCode","simpleSyntaxHighlight","code","mermaid","AiCodeExplainer","initialCode","setCode","useState","explanation","setExplanation","mermaidCode","setMermaidCode","isLoading","setIsLoading","error","setError","activeTab","setActiveTab","themeState","useTheme","textareaRef","useRef","preRef","mermaidContainerRef","handleExplain","useCallback","codeToExplain","explanationResult","mermaidResult","explainCodeStructured","generateMermaidJs","err","errorMessage","useEffect","svg","e","handleScroll","highlightedCode","useMemo","renderTabContent","jsx","MarkdownRenderer","item","index","jsxs","LoadingSpinner","CpuChipIcon","tab"],"mappings":"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"}
|
assets/AiCodeMigrator-CbYUF8cx.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as e}from"./react-CIdJ77ke.js";import{a5 as L,a6 as A,L as w,M}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const k=["SASS","CSS","JavaScript","TypeScript","Python","Go","React","Vue","Angular","Tailwind CSS"],E=`// SASS
|
| 2 |
+
$primary-color: #333;
|
| 3 |
+
|
| 4 |
+
body {
|
| 5 |
+
color: $primary-color;
|
| 6 |
+
font-family: sans-serif;
|
| 7 |
+
}`,Ye=({inputCode:s,fromLang:m,toLang:a})=>{const[f,g]=r.useState(s||E),[n,h]=r.useState(""),[j,S]=r.useState(m||"SASS"),[b,y]=r.useState(a||"CSS"),[i,N]=r.useState(!1),[c,d]=r.useState(""),x=r.useCallback(async(o,u,t)=>{if(!o.trim()){d("Please enter some code to migrate.");return}N(!0),d(""),h("");try{const p=L(o,u,t);let l="";for await(const C of p)l+=C,h(l)}catch(p){const l=p instanceof Error?p.message:"An unknown error occurred.";d(`Failed to migrate code: ${l}`)}finally{N(!1)}},[]);r.useEffect(()=>{s&&m&&a&&(g(s),S(m),y(a),x(s,m,a))},[s,m,a,x]);const v=({value:o,onChange:u})=>e.jsx("select",{value:o,onChange:t=>u(t.target.value),className:"w-full px-3 py-2 rounded-md bg-surface border border-border",children:k.map(t=>e.jsx("option",{value:t,children:t},t))});return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(A,{}),e.jsx("span",{className:"ml-3",children:"AI Code Migrator"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Translate code between languages, frameworks, and syntax styles."})]}),e.jsxs("div",{className:"flex-grow flex flex-col min-h-0",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6 flex-grow min-h-0",children:[e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary",children:"From:"}),e.jsx(v,{value:j,onChange:S})]}),e.jsx("textarea",{value:f,onChange:o=>g(o.target.value),placeholder:"Paste your source code here...",className:"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm"})]}),e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary",children:"To:"}),e.jsx(v,{value:b,onChange:y})]}),e.jsxs("div",{className:"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto",children:[i&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(w,{})}),c&&e.jsx("p",{className:"p-4 text-red-500",children:c}),n&&!i&&e.jsx(M,{content:n}),!i&&!n&&!c&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"Migrated code will appear here."})]})]})]}),e.jsx("button",{onClick:()=>x(f,j,b),disabled:i,className:"btn-primary mt-4 w-full max-w-sm mx-auto flex items-center justify-center px-6 py-3",children:i?e.jsx(w,{}):"Migrate Code"})]})]})};export{Ye as AiCodeMigrator};
|
| 8 |
+
//# sourceMappingURL=AiCodeMigrator-CbYUF8cx.js.map
|
assets/AiCodeMigrator-CbYUF8cx.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiCodeMigrator-CbYUF8cx.js","sources":["../../components/features/AiCodeMigrator.tsx"],"sourcesContent":["\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport { migrateCodeStream } from '../../services/index.ts';\nimport { ArrowPathIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nconst languages = ['SASS', 'CSS', 'JavaScript', 'TypeScript', 'Python', 'Go', 'React', 'Vue', 'Angular', 'Tailwind CSS'];\n\nconst exampleCode = `// SASS\n$primary-color: #333;\n\nbody {\n color: $primary-color;\n font-family: sans-serif;\n}`;\n\nexport const AiCodeMigrator: React.FC<{ inputCode?: string, fromLang?: string, toLang?: string }> = ({ inputCode: initialCode, fromLang: initialFrom, toLang: initialTo }) => {\n const [inputCode, setInputCode] = useState<string>(initialCode || exampleCode);\n const [outputCode, setOutputCode] = useState<string>('');\n const [fromLang, setFromLang] = useState(initialFrom || 'SASS');\n const [toLang, setToLang] = useState(initialTo || 'CSS');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n\n const handleMigrate = useCallback(async (code: string, from: string, to: string) => {\n if (!code.trim()) {\n setError('Please enter some code to migrate.');\n return;\n }\n setIsLoading(true);\n setError('');\n setOutputCode('');\n try {\n const stream = migrateCodeStream(code, from, to);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setOutputCode(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to migrate code: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (initialCode && initialFrom && initialTo) {\n setInputCode(initialCode);\n setFromLang(initialFrom);\n setToLang(initialTo);\n handleMigrate(initialCode, initialFrom, initialTo);\n }\n }, [initialCode, initialFrom, initialTo, handleMigrate]);\n\n const LanguageSelector: React.FC<{ value: string, onChange: (val: string) => void }> = ({ value, onChange }) => (\n <select value={value} onChange={e => onChange(e.target.value)} className=\"w-full px-3 py-2 rounded-md bg-surface border border-border\">\n {languages.map(lang => <option key={lang} value={lang}>{lang}</option>)}\n </select>\n );\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\"><ArrowPathIcon /><span className=\"ml-3\">AI Code Migrator</span></h1>\n <p className=\"text-text-secondary mt-1\">Translate code between languages, frameworks, and syntax styles.</p>\n </header>\n <div className=\"flex-grow flex flex-col min-h-0\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 flex-grow min-h-0\">\n <div className=\"flex flex-col h-full\">\n <div className=\"mb-2\">\n <label className=\"text-sm font-medium text-text-secondary\">From:</label>\n <LanguageSelector value={fromLang} onChange={setFromLang} />\n </div>\n <textarea\n value={inputCode}\n onChange={(e) => setInputCode(e.target.value)}\n placeholder=\"Paste your source code here...\"\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm\"\n />\n </div>\n <div className=\"flex flex-col h-full\">\n <div className=\"mb-2\">\n <label className=\"text-sm font-medium text-text-secondary\">To:</label>\n <LanguageSelector value={toLang} onChange={setToLang} />\n </div>\n <div className=\"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"p-4 text-red-500\">{error}</p>}\n {outputCode && !isLoading && <MarkdownRenderer content={outputCode} />}\n {!isLoading && !outputCode && !error && <div className=\"text-text-secondary h-full flex items-center justify-center\">Migrated code will appear here.</div>}\n </div>\n </div>\n </div>\n <button\n onClick={() => handleMigrate(inputCode, fromLang, toLang)}\n disabled={isLoading}\n className=\"btn-primary mt-4 w-full max-w-sm mx-auto flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Migrate Code'}\n </button>\n </div>\n </div>\n );\n};"],"names":["languages","exampleCode","AiCodeMigrator","initialCode","initialFrom","initialTo","inputCode","setInputCode","useState","outputCode","setOutputCode","fromLang","setFromLang","toLang","setToLang","isLoading","setIsLoading","error","setError","handleMigrate","useCallback","code","from","to","stream","migrateCodeStream","fullResponse","chunk","err","errorMessage","useEffect","LanguageSelector","value","onChange","jsx","e","lang","jsxs","ArrowPathIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}
|
assets/AiCodingChallenge-BGi7rQjl.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as e,j as t}from"./react-CIdJ77ke.js";import{a1 as x,B as f,L as c,M as h}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const qt=()=>{const[m,p]=e.useState(""),[r,n]=e.useState(!1),[s,a]=e.useState(""),l=e.useCallback(async()=>{n(!0),a(""),p("");try{const o=x(null);let i="";for await(const d of o)i+=d,p(i)}catch(o){const i=o instanceof Error?o.message:"An unknown error occurred.";a(`Failed to generate challenge: ${i}`)}finally{n(!1)}},[]);return e.useEffect(()=>{l()},[]),t.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[t.jsxs("header",{className:"mb-6 flex justify-between items-center",children:[t.jsxs("div",{children:[t.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[t.jsx(f,{}),t.jsx("span",{className:"ml-3",children:"AI Coding Challenge Generator"})]}),t.jsx("p",{className:"text-text-secondary mt-1",children:"Generate a unique coding problem to test your skills."})]}),t.jsx("button",{onClick:l,disabled:r,className:"btn-primary flex items-center justify-center px-6 py-3",children:r?t.jsx(c,{}):"Generate New Challenge"})]}),t.jsxs("div",{className:"flex-grow p-4 bg-surface border border-border rounded-md overflow-y-auto",children:[r&&t.jsx("div",{className:"flex items-center justify-center h-full",children:t.jsx(c,{})}),s&&t.jsx("p",{className:"text-red-500",children:s}),m&&!r&&t.jsx(h,{content:m}),!r&&!m&&!s&&t.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:'Click "Generate New Challenge" to start.'})]})]})};export{qt as AiCodingChallenge};
|
| 2 |
+
//# sourceMappingURL=AiCodingChallenge-BGi7rQjl.js.map
|
assets/AiCodingChallenge-BGi7rQjl.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiCodingChallenge-BGi7rQjl.js","sources":["../../components/features/AiCodingChallenge.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from 'react';\nimport { generateCodingChallengeStream } from '../../services/index.ts';\nimport { BeakerIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nexport const AiCodingChallenge: React.FC = () => {\n const [challenge, setChallenge] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n\n const handleGenerate = useCallback(async () => {\n setIsLoading(true);\n setError('');\n setChallenge('');\n try {\n const stream = generateCodingChallengeStream(null);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setChallenge(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to generate challenge: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n // Generate a challenge on initial load for a better user experience\n handleGenerate();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6 flex justify-between items-center\">\n <div>\n <h1 className=\"text-3xl font-bold flex items-center\">\n <BeakerIcon />\n <span className=\"ml-3\">AI Coding Challenge Generator</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Generate a unique coding problem to test your skills.</p>\n </div>\n <button\n onClick={handleGenerate}\n disabled={isLoading}\n className=\"btn-primary flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Generate New Challenge'}\n </button>\n </header>\n <div className=\"flex-grow p-4 bg-surface border border-border rounded-md overflow-y-auto\">\n {isLoading && (\n <div className=\"flex items-center justify-center h-full\">\n <LoadingSpinner />\n </div>\n )}\n {error && <p className=\"text-red-500\">{error}</p>}\n {challenge && !isLoading && (\n <MarkdownRenderer content={challenge} />\n )}\n {!isLoading && !challenge && !error && (\n <div className=\"text-text-secondary h-full flex items-center justify-center\">\n Click \"Generate New Challenge\" to start.\n </div>\n )}\n </div>\n </div>\n );\n};"],"names":["AiCodingChallenge","challenge","setChallenge","useState","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","stream","generateCodingChallengeStream","fullResponse","chunk","err","errorMessage","useEffect","jsxs","jsx","BeakerIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"4vFAMO,MAAMA,GAA8B,IAAM,CAC7C,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAiB,EAAE,EAC/C,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAkB,EAAK,EACnD,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAAiB,EAAE,EAEvCK,EAAiBC,EAAAA,YAAY,SAAY,CAC3CJ,EAAa,EAAI,EACjBE,EAAS,EAAE,EACXL,EAAa,EAAE,EACf,GAAI,CACA,MAAMQ,EAASC,EAA8B,IAAI,EACjD,IAAIC,EAAe,GACnB,gBAAiBC,KAASH,EACtBE,GAAgBC,EAChBX,EAAaU,CAAY,CAEjC,OAASE,EAAK,CACV,MAAMC,EAAeD,aAAe,MAAQA,EAAI,QAAU,6BAC1DP,EAAS,iCAAiCQ,CAAY,EAAE,CAC5D,QAAA,CACIV,EAAa,EAAK,CACtB,CACJ,EAAG,CAAA,CAAE,EAELW,OAAAA,EAAAA,UAAU,IAAM,CAEZR,EAAA,CAEJ,EAAG,CAAA,CAAE,EAGDS,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACX,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,yCACd,SAAA,CAAAA,OAAC,MAAA,CACG,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,uCACV,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAW,EACZD,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAO,SAAA,+BAAA,CAA6B,CAAA,EACxD,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,2BAA2B,SAAA,uDAAA,CAAqD,CAAA,EACjG,EACAA,EAAAA,IAAC,SAAA,CACG,QAASV,EACT,SAAUJ,EACV,UAAU,yDAET,SAAAA,EAAYc,EAAAA,IAACE,EAAA,CAAA,CAAe,EAAK,wBAAA,CAAA,CACtC,EACJ,EACAH,EAAAA,KAAC,MAAA,CAAI,UAAU,2EACV,SAAA,CAAAb,SACK,MAAA,CAAI,UAAU,0CACZ,SAAAc,MAACE,IAAe,EACnB,EAEJd,GAASY,EAAAA,IAAC,IAAA,CAAE,UAAU,eAAgB,SAAAZ,EAAM,EAC5CL,GAAa,CAACG,GACXc,EAAAA,IAACG,EAAA,CAAiB,QAASpB,EAAW,EAExC,CAACG,GAAa,CAACH,GAAa,CAACK,GAC3BY,EAAAA,IAAC,MAAA,CAAI,UAAU,8DAA8D,SAAA,0CAAA,CAE7E,CAAA,CAAA,CAER,CAAA,EACJ,CAER"}
|
assets/AiCommandCenter-ClG32klM.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as p,j as e}from"./react-CIdJ77ke.js";import{T as r}from"./@google-CcUHq7Ay.js";import{u as b,g as T,A as g,l as j,C as N,L as C}from"./index-CX7Qxd1D.js";import{F as E}from"./taxonomyService-CBHwv5t5.js";import{A as k,e as S}from"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const w=[{name:"navigateTo",description:"Navigates to a specific feature page.",parameters:{type:r.OBJECT,properties:{featureId:{type:r.STRING,description:"The ID of the feature to navigate to.",enum:g}},required:["featureId"]}},{name:"runFeatureWithInput",description:"Navigates to a feature and passes initial data to it.",parameters:{type:r.OBJECT,properties:{featureId:{type:r.STRING,description:"The ID of the feature to run.",enum:g},props:{type:r.OBJECT,description:"An object containing the initial properties for the feature, based on its required inputs.",properties:{initialCode:{type:r.STRING},initialPrompt:{type:r.STRING},beforeCode:{type:r.STRING},afterCode:{type:r.STRING},logInput:{type:r.STRING},diff:{type:r.STRING},codeInput:{type:r.STRING},jsonInput:{type:r.STRING}}}},required:["featureId","props"]}}],v=[...w,{name:"runWorkspaceAction",description:"Executes a defined action on a connected workspace service like Jira, Slack, or GitHub.",parameters:{type:r.OBJECT,properties:{actionId:{type:r.STRING,description:"The unique identifier for the action to execute.",enum:[...k.keys()]},params:{type:r.OBJECT,description:"An object containing the parameters for the action, matching its required inputs."}},required:["actionId","params"]}}],R=E.map(o=>`- ${o.name} (${o.id}): ${o.description} Inputs: ${o.inputs}`).join(`
|
| 2 |
+
`),u=({text:o,onClick:i})=>e.jsx("button",{onClick:()=>i(o),className:"px-3 py-1.5 bg-surface border border-border rounded-full text-xs hover:bg-gray-100 dark:hover:bg-slate-700 transition-colors",children:o}),He=()=>{const{dispatch:o}=b(),[i,m]=p.useState(""),[c,f]=p.useState(!1),[x,a]=p.useState(""),h=p.useCallback(async()=>{if(i.trim()){f(!0),a("");try{const t=await T(i,v,R);if(t.functionCalls&&t.functionCalls.length>0){const I=t.functionCalls[0],{name:d,args:n}=I;switch(a(`Understood! Executing command: ${d}`),d){case"navigateTo":o({type:"SET_VIEW",payload:{view:n.featureId}});break;case"runFeatureWithInput":o({type:"SET_VIEW",payload:{view:n.featureId,props:n.props}});break;case"runWorkspaceAction":try{const s=await S(n.actionId,n.params);a(`Action '${n.actionId}' executed successfully.
|
| 3 |
+
|
| 4 |
+
Result: \`\`\`json
|
| 5 |
+
${JSON.stringify(s,null,2)}
|
| 6 |
+
\`\`\``)}catch(s){a(`Action failed: ${s instanceof Error?s.message:"Unknown error"}`)}break;default:a(`Unknown command: ${d}`)}m("")}else a(t.text)}catch(t){j(t,{prompt:i}),a(t instanceof Error?t.message:"An unknown error occurred.")}finally{f(!1)}}},[i,o]),y=t=>{t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),h())},l=t=>{m(t)};return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6 text-center",children:[e.jsxs("h1",{className:"text-4xl font-extrabold tracking-tight flex items-center justify-center",children:[e.jsx(N,{}),e.jsx("span",{className:"ml-3",children:"AI Command Center"})]}),e.jsx("p",{className:"mt-2 text-lg text-text-secondary",children:"What would you like to do?"})]}),e.jsxs("div",{className:"flex-grow flex flex-col justify-end max-w-3xl w-full mx-auto",children:[x&&e.jsx("div",{className:"mb-4 p-4 bg-surface rounded-lg text-text-primary border border-border",children:e.jsxs("p",{children:[e.jsx("strong",{children:"AI:"})," ",x]})}),e.jsxs("div",{className:"relative",children:[e.jsx("textarea",{value:i,onChange:t=>m(t.target.value),onKeyDown:y,disabled:c,placeholder:'Try "explain this code: const a = 1;" or "open the theme designer"',className:"w-full p-4 pr-28 rounded-lg bg-surface border border-border focus:ring-2 focus:ring-primary focus:outline-none resize-none shadow-sm",rows:2}),e.jsx("button",{onClick:h,disabled:c,className:"btn-primary absolute right-3 top-1/2 -translate-y-1/2 px-4 py-2",children:c?e.jsx(C,{}):"Send"})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 mt-4",children:[e.jsx(u,{text:"Open Theme Designer",onClick:l}),e.jsx(u,{text:"Generate a commit for a bug fix",onClick:l}),e.jsx(u,{text:"Create a regex for email validation",onClick:l})]}),e.jsx("p",{className:"text-xs text-text-secondary text-center mt-2",children:"Press Enter to send, Shift+Enter for new line."})]})]})};export{He as AiCommandCenter};
|
| 7 |
+
//# sourceMappingURL=AiCommandCenter-ClG32klM.js.map
|
assets/AiCommandCenter-ClG32klM.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiCommandCenter-ClG32klM.js","sources":["../../components/features/AiCommandCenter.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { Type, FunctionDeclaration } from \"@google/genai\";\nimport { logError } from '../../services/telemetryService.ts';\nimport { getInferenceFunction, CommandResponse } from '../../services/aiService.ts';\nimport { FEATURE_TAXONOMY } from '../../services/taxonomyService.ts';\nimport { useGlobalState } from '../../contexts/GlobalStateContext.tsx';\nimport { CommandLineIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { ALL_FEATURE_IDS } from '../../constants.tsx';\nimport { executeWorkspaceAction, ACTION_REGISTRY } from '../../services/workspaceConnectorService.ts';\n\nconst baseFunctionDeclarations: FunctionDeclaration[] = [\n {\n name: 'navigateTo',\n description: 'Navigates to a specific feature page.',\n parameters: {\n type: Type.OBJECT,\n properties: {\n featureId: { \n type: Type.STRING, \n description: 'The ID of the feature to navigate to.',\n enum: ALL_FEATURE_IDS\n },\n },\n required: ['featureId'],\n },\n },\n {\n name: 'runFeatureWithInput',\n description: 'Navigates to a feature and passes initial data to it.',\n parameters: {\n type: Type.OBJECT,\n properties: {\n featureId: { \n type: Type.STRING, \n description: 'The ID of the feature to run.',\n enum: ALL_FEATURE_IDS\n },\n props: {\n type: Type.OBJECT,\n description: 'An object containing the initial properties for the feature, based on its required inputs.',\n properties: {\n initialCode: { type: Type.STRING },\n initialPrompt: { type: Type.STRING },\n beforeCode: { type: Type.STRING },\n afterCode: { type: Type.STRING },\n logInput: { type: Type.STRING },\n diff: { type: Type.STRING },\n codeInput: { type: Type.STRING },\n jsonInput: { type: Type.STRING },\n }\n }\n },\n required: ['featureId', 'props']\n }\n }\n];\n\n// Dynamically add the workspace action\nconst functionDeclarations: FunctionDeclaration[] = [\n ...baseFunctionDeclarations,\n {\n name: 'runWorkspaceAction',\n description: 'Executes a defined action on a connected workspace service like Jira, Slack, or GitHub.',\n parameters: {\n type: Type.OBJECT,\n properties: {\n actionId: {\n type: Type.STRING,\n description: 'The unique identifier for the action to execute.',\n enum: [ ...ACTION_REGISTRY.keys() ]\n },\n params: {\n type: Type.OBJECT,\n description: 'An object containing the parameters for the action, matching its required inputs.'\n }\n },\n required: ['actionId', 'params']\n }\n }\n]\n\nconst knowledgeBase = FEATURE_TAXONOMY.map(f => `- ${f.name} (${f.id}): ${f.description} Inputs: ${f.inputs}`).join('\\n');\n\nconst ExamplePromptButton: React.FC<{ text: string, onClick: (text: string) => void }> = ({ text, onClick }) => (\n <button\n onClick={() => onClick(text)}\n className=\"px-3 py-1.5 bg-surface border border-border rounded-full text-xs hover:bg-gray-100 dark:hover:bg-slate-700 transition-colors\"\n >\n {text}\n </button>\n)\n\nexport const AiCommandCenter: React.FC = () => {\n const { dispatch } = useGlobalState();\n const [prompt, setPrompt] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [lastResponse, setLastResponse] = useState('');\n\n const handleCommand = useCallback(async () => {\n if (!prompt.trim()) return;\n\n setIsLoading(true);\n setLastResponse('');\n\n try {\n const response: CommandResponse = await getInferenceFunction(prompt, functionDeclarations, knowledgeBase);\n \n if (response.functionCalls && response.functionCalls.length > 0) {\n const call = response.functionCalls[0];\n const { name, args } = call;\n\n setLastResponse(`Understood! Executing command: ${name}`);\n\n switch (name) {\n case 'navigateTo':\n dispatch({ type: 'SET_VIEW', payload: { view: args.featureId }});\n break;\n case 'runFeatureWithInput':\n dispatch({ type: 'SET_VIEW', payload: { view: args.featureId, props: args.props } });\n break;\n case 'runWorkspaceAction':\n try {\n const result = await executeWorkspaceAction(args.actionId, args.params);\n setLastResponse(`Action '${args.actionId}' executed successfully.\\n\\nResult: \\`\\`\\`json\\n${JSON.stringify(result, null, 2)}\\n\\`\\`\\``);\n } catch (e) {\n setLastResponse(`Action failed: ${e instanceof Error ? e.message : 'Unknown error'}`);\n }\n break;\n default:\n setLastResponse(`Unknown command: ${name}`);\n }\n setPrompt('');\n } else {\n setLastResponse(response.text);\n }\n\n } catch (err) {\n logError(err as Error, { prompt });\n setLastResponse(err instanceof Error ? err.message : 'An unknown error occurred.');\n } finally {\n setIsLoading(false);\n }\n }, [prompt, dispatch]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleCommand();\n }\n };\n \n const handleExampleClick = (text: string) => {\n setPrompt(text);\n }\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6 text-center\">\n <h1 className=\"text-4xl font-extrabold tracking-tight flex items-center justify-center\">\n <CommandLineIcon />\n <span className=\"ml-3\">AI Command Center</span>\n </h1>\n <p className=\"mt-2 text-lg text-text-secondary\">What would you like to do?</p>\n </header>\n \n <div className=\"flex-grow flex flex-col justify-end max-w-3xl w-full mx-auto\">\n {lastResponse && (\n <div className=\"mb-4 p-4 bg-surface rounded-lg text-text-primary border border-border\">\n <p><strong>AI:</strong> {lastResponse}</p>\n </div>\n )}\n <div className=\"relative\">\n <textarea\n value={prompt}\n onChange={e => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n disabled={isLoading}\n placeholder='Try \"explain this code: const a = 1;\" or \"open the theme designer\"'\n className=\"w-full p-4 pr-28 rounded-lg bg-surface border border-border focus:ring-2 focus:ring-primary focus:outline-none resize-none shadow-sm\"\n rows={2}\n />\n <button\n onClick={handleCommand}\n disabled={isLoading}\n className=\"btn-primary absolute right-3 top-1/2 -translate-y-1/2 px-4 py-2\"\n >\n {isLoading ? <LoadingSpinner/> : 'Send'}\n </button>\n </div>\n <div className=\"flex flex-wrap items-center justify-center gap-2 mt-4\">\n <ExamplePromptButton text=\"Open Theme Designer\" onClick={handleExampleClick} />\n <ExamplePromptButton text=\"Generate a commit for a bug fix\" onClick={handleExampleClick} />\n <ExamplePromptButton text=\"Create a regex for email validation\" onClick={handleExampleClick} />\n </div>\n <p className=\"text-xs text-text-secondary text-center mt-2\">Press Enter to send, Shift+Enter for new line.</p>\n </div>\n </div>\n );\n};"],"names":["baseFunctionDeclarations","Type","ALL_FEATURE_IDS","functionDeclarations","ACTION_REGISTRY","knowledgeBase","FEATURE_TAXONOMY","f","ExamplePromptButton","text","onClick","jsx","AiCommandCenter","dispatch","useGlobalState","prompt","setPrompt","useState","isLoading","setIsLoading","lastResponse","setLastResponse","handleCommand","useCallback","response","getInferenceFunction","call","name","args","result","executeWorkspaceAction","e","err","logError","handleKeyDown","handleExampleClick","jsxs","CommandLineIcon","LoadingSpinner"],"mappings":"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"}
|
assets/AiCommitGenerator-CjbukltX.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as s,j as e}from"./react-CIdJ77ke.js";import{c as b,w as y,L as u,J as N}from"./index-CX7Qxd1D.js";import{d as w}from"./fileUtils-DLahR3l0.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const v=`diff --git a/src/components/Button.tsx b/src/components/Button.tsx
|
| 2 |
+
index 1b2c3d4..5e6f7g8 100644
|
| 3 |
+
--- a/src/components/Button.tsx
|
| 4 |
+
+++ b/src/components/Button.tsx
|
| 5 |
+
@@ -1,7 +1,7 @@
|
| 6 |
+
import React from 'react';
|
| 7 |
+
|
| 8 |
+
interface ButtonProps {
|
| 9 |
+
- text: string;
|
| 10 |
+
+ label: string;
|
| 11 |
+
onClick: () => void;
|
| 12 |
+
}
|
| 13 |
+
`,He=({diff:o})=>{const[c,x]=s.useState(o||v),[t,d]=s.useState(""),[r,f]=s.useState(!1),[n,p]=s.useState(""),l=s.useCallback(async i=>{if(!i.trim()){p("Please paste a diff to generate a message.");return}f(!0),p(""),d("");try{const m=b(i);let a="";for await(const j of m)a+=j,d(a)}catch(m){const a=m instanceof Error?m.message:"An unknown error occurred.";p(`Failed to generate message: ${a}`)}finally{f(!1)}},[]);s.useEffect(()=>{o&&(x(o),l(o))},[o,l]);const h=()=>{navigator.clipboard.writeText(t)},g=()=>{w(t,"commit_message.txt","text/plain")};return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(y,{}),e.jsx("span",{className:"ml-3",children:"AI Commit Message Generator"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Paste your diff and let Gemini craft the perfect commit message."})]}),e.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"diff-input",className:"text-sm font-medium text-text-secondary mb-2",children:"Git Diff"}),e.jsx("textarea",{id:"diff-input",value:c,onChange:i=>x(i.target.value),placeholder:"Paste your git diff here...",className:"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm text-text-primary focus:ring-2 focus:ring-primary focus:outline-none"})]}),e.jsx("div",{className:"flex-shrink-0",children:e.jsx("button",{onClick:()=>l(c),disabled:r,className:"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3",children:r?e.jsx(u,{}):"Generate Commit Message"})}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary",children:"Generated Message"}),t&&!r&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:h,className:"px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200",children:"Copy"}),e.jsxs("button",{onClick:g,className:"flex items-center gap-1 px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200",children:[e.jsx(N,{className:"w-4 h-4"})," Download"]})]})]}),e.jsxs("div",{className:"relative flex-grow p-4 bg-surface border border-border rounded-md overflow-y-auto",children:[r&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(u,{})}),n&&e.jsx("p",{className:"text-red-500",children:n}),t&&!r&&e.jsx("pre",{className:"whitespace-pre-wrap font-sans text-text-primary",children:t}),!r&&!t&&!n&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"The commit message will appear here."})]})]})]})]})};export{He as AiCommitGenerator};
|
| 14 |
+
//# sourceMappingURL=AiCommitGenerator-CjbukltX.js.map
|
assets/AiCommitGenerator-CjbukltX.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiCommitGenerator-CjbukltX.js","sources":["../../components/features/AiCommitGenerator.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from 'react';\nimport { generateCommitMessageStream } from '../../services/index.ts';\nimport { downloadFile } from '../../services/fileUtils.ts';\nimport { GitBranchIcon, ArrowDownTrayIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\n\nconst exampleDiff = `diff --git a/src/components/Button.tsx b/src/components/Button.tsx\nindex 1b2c3d4..5e6f7g8 100644\n--- a/src/components/Button.tsx\n+++ b/src/components/Button.tsx\n@@ -1,7 +1,7 @@\n import React from 'react';\n\n interface ButtonProps {\n- text: string;\n+ label: string;\n onClick: () => void;\n }\n`;\n\nexport const AiCommitGenerator: React.FC<{ diff?: string }> = ({ diff: initialDiff }) => {\n const [diff, setDiff] = useState<string>(initialDiff || exampleDiff);\n const [message, setMessage] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n\n const handleGenerate = useCallback(async (diffToAnalyze: string) => {\n if (!diffToAnalyze.trim()) {\n setError('Please paste a diff to generate a message.');\n return;\n }\n setIsLoading(true);\n setError('');\n setMessage('');\n try {\n const stream = generateCommitMessageStream(diffToAnalyze);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setMessage(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to generate message: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (initialDiff) {\n setDiff(initialDiff);\n handleGenerate(initialDiff);\n }\n }, [initialDiff, handleGenerate]);\n \n const handleCopy = () => {\n navigator.clipboard.writeText(message);\n };\n \n const handleDownload = () => {\n downloadFile(message, 'commit_message.txt', 'text/plain');\n };\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <GitBranchIcon />\n <span className=\"ml-3\">AI Commit Message Generator</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Paste your diff and let Gemini craft the perfect commit message.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"diff-input\" className=\"text-sm font-medium text-text-secondary mb-2\">Git Diff</label>\n <textarea\n id=\"diff-input\"\n value={diff}\n onChange={(e) => setDiff(e.target.value)}\n placeholder=\"Paste your git diff here...\"\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm text-text-primary focus:ring-2 focus:ring-primary focus:outline-none\"\n />\n </div>\n <div className=\"flex-shrink-0\">\n <button\n onClick={() => handleGenerate(diff)}\n disabled={isLoading}\n className=\"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Generate Commit Message'}\n </button>\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <div className=\"flex justify-between items-center mb-2\">\n <label className=\"text-sm font-medium text-text-secondary\">Generated Message</label>\n {message && !isLoading && (\n <div className=\"flex items-center gap-2\">\n <button onClick={handleCopy} className=\"px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200\">Copy</button>\n <button onClick={handleDownload} className=\"flex items-center gap-1 px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200\">\n <ArrowDownTrayIcon className=\"w-4 h-4\" /> Download\n </button>\n </div>\n )}\n </div>\n <div className=\"relative flex-grow p-4 bg-surface border border-border rounded-md overflow-y-auto\">\n {isLoading && (\n <div className=\"flex items-center justify-center h-full\">\n <LoadingSpinner />\n </div>\n )}\n {error && <p className=\"text-red-500\">{error}</p>}\n {message && !isLoading && (\n <pre className=\"whitespace-pre-wrap font-sans text-text-primary\">{message}</pre>\n )}\n {!isLoading && !message && !error && (\n <div className=\"text-text-secondary h-full flex items-center justify-center\">\n The commit message will appear here.\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleDiff","AiCommitGenerator","initialDiff","diff","setDiff","useState","message","setMessage","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","diffToAnalyze","stream","generateCommitMessageStream","fullResponse","chunk","err","errorMessage","useEffect","handleCopy","handleDownload","downloadFile","jsxs","jsx","GitBranchIcon","e","LoadingSpinner","ArrowDownTrayIcon"],"mappings":"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"}
|
assets/AiFeatureBuilder-j5l2owNE.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as e}from"./react-CIdJ77ke.js";import{m as A,n as L,o as $,p as G,q as R,c as W,r as Y,k as U,t as q,B as z,w as H,x as J,L as F,y as K,M as f}from"./index-CX7Qxd1D.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const pt=()=>{const[n,T]=r.useState('A simple "Hello World" React component with a button that shows an alert.'),[l]=r.useState("React"),[m]=r.useState("Tailwind CSS"),[c,E]=r.useState(!1),[u,p]=r.useState([]),[h,g]=r.useState(""),[b,j]=r.useState(""),[k,y]=r.useState(""),[a,i]=r.useState("CODE"),[x,w]=r.useState(!1),[S,d]=r.useState("");r.useEffect(()=>{(async()=>{const o=await K();p(o),o.length>0&&i(o[0])})()},[]);const M=r.useCallback(async()=>{if(!n.trim()){d("Please enter a feature description.");return}w(!0),d(""),await A(),p([]),g(""),j(""),y(""),i("CODE");try{const t=c?await L(n,l,m):await $(n,l,m);for(const o of t)await G(o);if(p(t),t.length>0){const o=t.find(s=>s.filePath.endsWith(".tsx")||s.filePath.endsWith(".jsx"));i(o||t[0]);const P=R(o?.content||t[0].content),D=t.map(s=>`File: ${s.filePath}
|
| 2 |
+
|
| 3 |
+
${s.content}`).join(`
|
| 4 |
+
---
|
| 5 |
+
`),B=W(D);let N="";for await(const s of P)N+=s,g(N);let C="";for await(const s of B)C+=s,j(C);if(!c){const s=Y(l);let v="";for await(const O of s)v+=O,y(v)}}}catch(t){d(t instanceof Error?t.message:"Failed to generate feature.")}finally{w(!1)}},[n,l,m,c]),I=()=>{if(typeof a=="string")switch(a){case"TESTS":return e.jsx(f,{content:h});case"COMMIT":return e.jsx("pre",{className:"w-full h-full p-4 whitespace-pre-wrap font-sans text-sm",children:b});case"DEPLOYMENT":return e.jsx(f,{content:k});default:return e.jsx("div",{className:"p-4",children:"Select a file"})}return e.jsx(f,{content:"```tsx\n"+a.content+"\n```"})};return e.jsxs("div",{className:"h-full flex flex-col text-text-primary bg-surface",children:[e.jsx("header",{className:"p-4 border-b border-border flex-shrink-0",children:e.jsxs("h1",{className:"text-xl font-bold flex items-center",children:[e.jsx(U,{}),e.jsx("span",{className:"ml-3",children:"AI Feature Builder"})]})}),e.jsx("div",{className:"flex-grow flex min-h-0",children:e.jsxs("main",{className:"flex-1 flex flex-col min-w-0",children:[e.jsxs("div",{className:"flex-grow flex flex-col bg-background",children:[e.jsxs("div",{className:"border-b border-border flex items-center bg-surface overflow-x-auto",children:[u.map(t=>e.jsxs("button",{onClick:()=>i(t),className:`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${a===t?"bg-background border-b-2 border-primary text-text-primary":"text-text-secondary hover:bg-gray-50"}`,children:[e.jsx(q,{})," ",t.filePath]},t.filePath)),h&&e.jsxs("button",{onClick:()=>i("TESTS"),className:`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${a==="TESTS"?"bg-background border-b-2 border-primary text-text-primary":"text-text-secondary hover:bg-gray-50"}`,children:[e.jsx(z,{})," Tests"]}),b&&e.jsxs("button",{onClick:()=>i("COMMIT"),className:`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${a==="COMMIT"?"bg-background border-b-2 border-primary text-text-primary":"text-text-secondary hover:bg-gray-50"}`,children:[e.jsx(H,{})," Commit"]}),k&&!c&&e.jsxs("button",{onClick:()=>i("DEPLOYMENT"),className:`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${a==="DEPLOYMENT"?"bg-background border-b-2 border-primary text-text-primary":"text-text-secondary hover:bg-gray-50"}`,children:[e.jsx(J,{})," Dockerfile"]})]}),e.jsx("div",{className:"flex-grow p-2 overflow-auto",children:x&&!u.length?e.jsx("div",{className:"flex justify-center items-center h-full",children:e.jsx(F,{})}):I()})]}),e.jsxs("div",{className:"flex-shrink-0 p-4 border-t border-border bg-surface",children:[e.jsx("div",{className:"flex items-center gap-2 mb-2",children:e.jsxs("label",{className:"flex items-center gap-2 text-sm",children:[e.jsx("input",{type:"checkbox",checked:c,onChange:t=>E(t.target.checked)})," Include Backend (Cloud Function + Firestore)"]})}),e.jsx("textarea",{value:n,onChange:t=>T(t.target.value),placeholder:"e.g., A user profile card with an avatar, name, and bio.",className:"w-full p-2 bg-background border border-border rounded-md resize-none text-sm h-20"}),e.jsx("div",{className:"flex gap-2 mt-2",children:e.jsx("button",{onClick:M,disabled:x,className:"btn-primary flex-grow flex items-center justify-center gap-2 px-4 py-2",children:x?e.jsxs(e.Fragment,{children:[e.jsx(F,{})," Generating..."]}):"Generate Feature"})}),S&&e.jsx("p",{className:"text-red-600 text-xs mt-2 text-center",children:S})]})]})})]})};export{pt as AiFeatureBuilder};
|
| 6 |
+
//# sourceMappingURL=AiFeatureBuilder-j5l2owNE.js.map
|
assets/AiFeatureBuilder-j5l2owNE.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiFeatureBuilder-j5l2owNE.js","sources":["../../components/features/AiFeatureBuilder.tsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from 'react';\nimport type { GeneratedFile } from '../../types.ts';\nimport { generateFeature, generateFullStackFeature, generateUnitTestsStream, generateCommitMessageStream, generateDockerfile } from '../../services/aiService.ts';\nimport { saveFile, getAllFiles, clearAllFiles } from '../../services/dbService.ts';\nimport { useNotification } from '../../contexts/NotificationContext.tsx';\nimport { CpuChipIcon, DocumentTextIcon, BeakerIcon, GitBranchIcon, CloudIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\ntype SupplementalTab = 'TESTS' | 'COMMIT' | 'DEPLOYMENT' | 'CODE';\ntype OutputTab = GeneratedFile | SupplementalTab;\n\nexport const AiFeatureBuilder: React.FC = () => {\n const [prompt, setPrompt] = useState<string>('A simple \"Hello World\" React component with a button that shows an alert.');\n const [framework] = useState('React');\n const [styling] = useState('Tailwind CSS');\n const [includeBackend, setIncludeBackend] = useState(false);\n\n const [generatedFiles, setGeneratedFiles] = useState<GeneratedFile[]>([]);\n const [unitTests, setUnitTests] = useState<string>('');\n const [commitMessage, setCommitMessage] = useState<string>('');\n const [dockerfile, setDockerfile] = useState<string>('');\n\n const [activeTab, setActiveTab] = useState<OutputTab>('CODE');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n \n useEffect(() => {\n const loadFiles = async () => {\n const files = await getAllFiles();\n setGeneratedFiles(files);\n if (files.length > 0) setActiveTab(files[0]);\n };\n loadFiles();\n }, []);\n\n const handleGenerate = useCallback(async () => {\n if (!prompt.trim()) { setError('Please enter a feature description.'); return; }\n setIsLoading(true);\n setError('');\n await clearAllFiles();\n setGeneratedFiles([]); setUnitTests(''); setCommitMessage(''); setDockerfile(''); setActiveTab('CODE');\n\n try {\n const resultFiles = includeBackend\n ? await generateFullStackFeature(prompt, framework, styling)\n : await generateFeature(prompt, framework, styling);\n \n for (const file of resultFiles) { await saveFile(file); }\n setGeneratedFiles(resultFiles);\n\n if (resultFiles.length > 0) {\n const componentFile = resultFiles.find(f => f.filePath.endsWith('.tsx') || f.filePath.endsWith('.jsx'));\n setActiveTab(componentFile || resultFiles[0]);\n\n const testStream = generateUnitTestsStream(componentFile?.content || resultFiles[0].content);\n const diffContext = resultFiles.map(f => `File: ${f.filePath}\\n\\n${f.content}`).join('\\n---\\n');\n const commitStream = generateCommitMessageStream(diffContext);\n \n let tests = ''; for await (const chunk of testStream) { tests += chunk; setUnitTests(tests); }\n let commit = ''; for await (const chunk of commitStream) { commit += chunk; setCommitMessage(commit); }\n \n if (!includeBackend) {\n const dockerfileStream = generateDockerfile(framework);\n let docker = ''; for await (const chunk of dockerfileStream) { docker += chunk; setDockerfile(docker); }\n }\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to generate feature.');\n } finally {\n setIsLoading(false);\n }\n }, [prompt, framework, styling, includeBackend]);\n \n const renderContent = () => {\n if (typeof activeTab === 'string') {\n switch (activeTab) {\n case 'TESTS': return <MarkdownRenderer content={unitTests} />;\n case 'COMMIT': return <pre className=\"w-full h-full p-4 whitespace-pre-wrap font-sans text-sm\">{commitMessage}</pre>;\n case 'DEPLOYMENT': return <MarkdownRenderer content={dockerfile} />;\n default: return <div className=\"p-4\">Select a file</div>;\n }\n }\n return <MarkdownRenderer content={'```tsx\\n' + activeTab.content + '\\n```'} />;\n }\n\n return (\n <div className=\"h-full flex flex-col text-text-primary bg-surface\">\n <header className=\"p-4 border-b border-border flex-shrink-0\">\n <h1 className=\"text-xl font-bold flex items-center\"><CpuChipIcon /><span className=\"ml-3\">AI Feature Builder</span></h1>\n </header>\n <div className=\"flex-grow flex min-h-0\">\n <main className=\"flex-1 flex flex-col min-w-0\">\n <div className=\"flex-grow flex flex-col bg-background\">\n <div className=\"border-b border-border flex items-center bg-surface overflow-x-auto\">\n {generatedFiles.map(file => (\n <button key={file.filePath} onClick={() => setActiveTab(file)} className={`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${activeTab === file ? 'bg-background border-b-2 border-primary text-text-primary' : 'text-text-secondary hover:bg-gray-50'}`}><DocumentTextIcon /> {file.filePath}</button>\n ))}\n {unitTests && <button onClick={() => setActiveTab('TESTS')} className={`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${activeTab === 'TESTS' ? 'bg-background border-b-2 border-primary text-text-primary' : 'text-text-secondary hover:bg-gray-50'}`}><BeakerIcon /> Tests</button>}\n {commitMessage && <button onClick={() => setActiveTab('COMMIT')} className={`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${activeTab === 'COMMIT' ? 'bg-background border-b-2 border-primary text-text-primary' : 'text-text-secondary hover:bg-gray-50'}`}><GitBranchIcon /> Commit</button>}\n {dockerfile && !includeBackend && <button onClick={() => setActiveTab('DEPLOYMENT')} className={`flex-shrink-0 flex items-center gap-2 px-4 py-2 text-sm ${activeTab === 'DEPLOYMENT' ? 'bg-background border-b-2 border-primary text-text-primary' : 'text-text-secondary hover:bg-gray-50'}`}><CloudIcon /> Dockerfile</button>}\n </div>\n <div className=\"flex-grow p-2 overflow-auto\">\n {isLoading && !generatedFiles.length ? <div className=\"flex justify-center items-center h-full\"><LoadingSpinner/></div> : renderContent()}\n </div>\n </div>\n \n <div className=\"flex-shrink-0 p-4 border-t border-border bg-surface\">\n <div className=\"flex items-center gap-2 mb-2\">\n <label className=\"flex items-center gap-2 text-sm\"><input type=\"checkbox\" checked={includeBackend} onChange={e => setIncludeBackend(e.target.checked)} /> Include Backend (Cloud Function + Firestore)</label>\n </div>\n <textarea value={prompt} onChange={(e) => setPrompt(e.target.value)} placeholder=\"e.g., A user profile card with an avatar, name, and bio.\" className=\"w-full p-2 bg-background border border-border rounded-md resize-none text-sm h-20\"/>\n <div className=\"flex gap-2 mt-2\">\n <button onClick={handleGenerate} disabled={isLoading} className=\"btn-primary flex-grow flex items-center justify-center gap-2 px-4 py-2\">\n {isLoading ? <><LoadingSpinner /> Generating...</> : 'Generate Feature'}\n </button>\n </div>\n {error && <p className=\"text-red-600 text-xs mt-2 text-center\">{error}</p>}\n </div>\n </main>\n </div>\n </div>\n );\n};\n"],"names":["AiFeatureBuilder","prompt","setPrompt","useState","framework","styling","includeBackend","setIncludeBackend","generatedFiles","setGeneratedFiles","unitTests","setUnitTests","commitMessage","setCommitMessage","dockerfile","setDockerfile","activeTab","setActiveTab","isLoading","setIsLoading","error","setError","useEffect","files","getAllFiles","handleGenerate","useCallback","clearAllFiles","resultFiles","generateFullStackFeature","generateFeature","file","saveFile","componentFile","f","testStream","generateUnitTestsStream","diffContext","commitStream","generateCommitMessageStream","tests","chunk","commit","dockerfileStream","generateDockerfile","docker","err","renderContent","jsx","MarkdownRenderer","jsxs","CpuChipIcon","DocumentTextIcon","BeakerIcon","GitBranchIcon","CloudIcon","LoadingSpinner","e","Fragment"],"mappings":"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"}
|
assets/AiImageGenerator-DdG4FXBe.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as a,j as e}from"./react-CIdJ77ke.js";import{ab as k,ac as C,ad as A,ae as G,L as b,S,J as P}from"./index-CX7Qxd1D.js";import{b as U,f as F}from"./fileUtils-DLahR3l0.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const j=["A majestic lion wearing a crown, painted in the style of Van Gogh.","A futuristic cityscape on another planet with two moons in the sky.","A cozy, magical library inside a giant tree.","A surreal image of a ship sailing on a sea of clouds.","An astronaut riding a space-themed bicycle on the moon."],Ke=()=>{const[o,d]=a.useState("A photorealistic image of a futuristic city at sunset, with flying cars."),[s,p]=a.useState(null),[l,x]=a.useState(null),[i,u]=a.useState(!1),[c,n]=a.useState(""),g=a.useRef(null),y=a.useCallback(async()=>{if(!o.trim()){n("Please enter a prompt to generate an image.");return}u(!0),n(""),x(null);try{let t;s?t=await k(o,s.base64,s.mimeType):t=await C(o),x(t)}catch(t){const r=t instanceof Error?t.message:"An unknown error occurred.";n(`Failed to generate image: ${r}`)}finally{u(!1)}},[o,s]),w=()=>{const t=j[Math.floor(Math.random()*j.length)];d(t)},h=async t=>{try{const[r,m]=await Promise.all([U(t),F(t)]);p({dataUrl:r,base64:m,mimeType:t.type})}catch{n("Could not process the image.")}},N=a.useCallback(async t=>{const r=t.clipboardData.items;for(const m of r)if(m.type.indexOf("image")!==-1){const f=m.getAsFile();if(f){await h(f);return}}},[]),I=async t=>{const r=t.target.files?.[0];r&&await h(r)},v=()=>{if(!l)return;const t=document.createElement("a");t.href=l,t.download=`${o.slice(0,30).replace(/\s/g,"_")}.png`,document.body.appendChild(t),t.click(),document.body.removeChild(t)};return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(A,{}),e.jsx("span",{className:"ml-3",children:"AI Image Generator"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Generate images from text, or provide an image for inspiration."})]}),e.jsxs("div",{className:"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0",children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"prompt-input",className:"text-sm font-medium text-text-secondary",children:"Your Prompt"}),e.jsx("textarea",{id:"prompt-input",value:o,onChange:t=>d(t.target.value),placeholder:"e.g., A cute cat wearing a wizard hat",className:"w-full p-3 mt-1 rounded-md bg-surface border border-border focus:ring-2 focus:ring-primary focus:outline-none resize-y",rows:3})]}),e.jsxs("div",{className:"flex flex-col flex-grow min-h-[200px]",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-1",children:"Inspiration Image (Optional)"}),e.jsx("div",{onPaste:N,className:"relative flex-grow flex flex-col items-center justify-center bg-surface p-4 rounded-lg border-2 border-dashed border-border focus:outline-none focus:border-primary",tabIndex:0,children:s?e.jsxs(e.Fragment,{children:[e.jsx("img",{src:s.dataUrl,alt:"Uploaded content",className:"max-w-full max-h-full object-contain rounded-md shadow-lg"}),e.jsx("button",{onClick:()=>p(null),className:"absolute top-2 right-2 p-1 bg-black/30 text-white rounded-full hover:bg-black/50",children:e.jsx(G,{})})]}):e.jsxs("div",{className:"text-center text-text-secondary",children:[e.jsx("h2",{className:"text-lg font-bold text-text-primary",children:"Paste an image here"}),e.jsx("p",{className:"text-sm",children:"(Cmd/Ctrl + V)"}),e.jsx("p",{className:"text-xs my-1",children:"or"}),e.jsx("button",{onClick:()=>g.current?.click(),className:"text-sm font-semibold text-primary hover:underline",children:"Upload File"}),e.jsx("input",{type:"file",ref:g,onChange:I,accept:"image/*",className:"hidden"})]})})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:y,disabled:i,className:"btn-primary w-full flex items-center justify-center px-6 py-3",children:i?e.jsx(b,{}):"Generate Image"}),e.jsx("button",{onClick:w,disabled:i,className:"px-4 py-3 bg-surface border border-border rounded-md hover:bg-gray-100 transition-colors",title:"Surprise Me!",children:e.jsx(S,{})})]})]}),e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Generated Image"}),e.jsxs("div",{className:"flex-grow flex items-center justify-center bg-background border-2 border-dashed border-border rounded-lg p-4 relative overflow-auto",children:[i&&e.jsx(b,{}),c&&e.jsx("p",{className:"text-red-500 text-center",children:c}),l&&!i&&e.jsxs(e.Fragment,{children:[e.jsx("img",{src:l,alt:o||"Generated by AI",className:"max-w-full max-h-full object-contain rounded-md shadow-lg"}),e.jsx("button",{onClick:v,className:"absolute top-4 right-4 p-2 bg-black/30 text-white rounded-full hover:bg-black/50 backdrop-blur-sm",title:"Download Image",children:e.jsx(P,{})})]}),!i&&!l&&!c&&e.jsx("div",{className:"text-center text-text-secondary",children:e.jsx("p",{children:"Your generated image will appear here."})})]})]})]})]})};export{Ke as AiImageGenerator};
|
| 2 |
+
//# sourceMappingURL=AiImageGenerator-DdG4FXBe.js.map
|
assets/AiImageGenerator-DdG4FXBe.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiImageGenerator-DdG4FXBe.js","sources":["../../components/features/AiImageGenerator.tsx"],"sourcesContent":["import React, { useState, useCallback, useRef } from 'react';\nimport { generateImage, generateImageFromImageAndText } from '../../services/aiService.ts';\nimport { fileToBase64, blobToDataURL } from '../../services/fileUtils.ts';\nimport { ImageGeneratorIcon, SparklesIcon, ArrowDownTrayIcon, XMarkIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\n\nconst surprisePrompts = [\n 'A majestic lion wearing a crown, painted in the style of Van Gogh.',\n 'A futuristic cityscape on another planet with two moons in the sky.',\n 'A cozy, magical library inside a giant tree.',\n 'A surreal image of a ship sailing on a sea of clouds.',\n 'An astronaut riding a space-themed bicycle on the moon.',\n];\n\ninterface UploadedImage {\n base64: string;\n dataUrl: string;\n mimeType: string;\n}\n\nexport const AiImageGenerator: React.FC = () => {\n const [prompt, setPrompt] = useState<string>('A photorealistic image of a futuristic city at sunset, with flying cars.');\n const [uploadedImage, setUploadedImage] = useState<UploadedImage | null>(null);\n const [generatedImageUrl, setGeneratedImageUrl] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const handleGenerate = useCallback(async () => {\n if (!prompt.trim()) {\n setError('Please enter a prompt to generate an image.');\n return;\n }\n setIsLoading(true);\n setError('');\n setGeneratedImageUrl(null);\n try {\n let resultUrl: string;\n if (uploadedImage) {\n resultUrl = await generateImageFromImageAndText(prompt, uploadedImage.base64, uploadedImage.mimeType);\n } else {\n resultUrl = await generateImage(prompt);\n }\n setGeneratedImageUrl(resultUrl);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to generate image: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, [prompt, uploadedImage]);\n\n const handleSurpriseMe = () => {\n const randomPrompt = surprisePrompts[Math.floor(Math.random() * surprisePrompts.length)];\n setPrompt(randomPrompt);\n };\n\n const processImageBlob = async (blob: Blob) => {\n try {\n const [dataUrl, base64] = await Promise.all([\n blobToDataURL(blob),\n fileToBase64(blob as File)\n ]);\n setUploadedImage({ dataUrl, base64, mimeType: blob.type });\n } catch (e) {\n setError('Could not process the image.');\n }\n };\n\n const handlePaste = useCallback(async (event: React.ClipboardEvent) => {\n const items = event.clipboardData.items;\n for (const item of items) {\n if (item.type.indexOf('image') !== -1) {\n const blob = item.getAsFile();\n if (blob) {\n await processImageBlob(blob);\n return;\n }\n }\n }\n }, []);\n\n const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (file) {\n await processImageBlob(file);\n }\n };\n \n const handleDownload = () => {\n if (!generatedImageUrl) return;\n const link = document.createElement('a');\n link.href = generatedImageUrl;\n link.download = `${prompt.slice(0, 30).replace(/\\s/g, '_')}.png`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <ImageGeneratorIcon />\n <span className=\"ml-3\">AI Image Generator</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Generate images from text, or provide an image for inspiration.</p>\n </header>\n \n <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0\">\n {/* Left Column: Inputs */}\n <div className=\"flex flex-col gap-4\">\n <div>\n <label htmlFor=\"prompt-input\" className=\"text-sm font-medium text-text-secondary\">Your Prompt</label>\n <textarea\n id=\"prompt-input\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n placeholder=\"e.g., A cute cat wearing a wizard hat\"\n className=\"w-full p-3 mt-1 rounded-md bg-surface border border-border focus:ring-2 focus:ring-primary focus:outline-none resize-y\"\n rows={3}\n />\n </div>\n \n <div className=\"flex flex-col flex-grow min-h-[200px]\">\n <label className=\"text-sm font-medium text-text-secondary mb-1\">Inspiration Image (Optional)</label>\n <div onPaste={handlePaste} className=\"relative flex-grow flex flex-col items-center justify-center bg-surface p-4 rounded-lg border-2 border-dashed border-border focus:outline-none focus:border-primary\" tabIndex={0}>\n {uploadedImage ? (\n <>\n <img src={uploadedImage.dataUrl} alt=\"Uploaded content\" className=\"max-w-full max-h-full object-contain rounded-md shadow-lg\" />\n <button onClick={() => setUploadedImage(null)} className=\"absolute top-2 right-2 p-1 bg-black/30 text-white rounded-full hover:bg-black/50\"><XMarkIcon /></button>\n </>\n ) : (\n <div className=\"text-center text-text-secondary\">\n <h2 className=\"text-lg font-bold text-text-primary\">Paste an image here</h2>\n <p className=\"text-sm\">(Cmd/Ctrl + V)</p>\n <p className=\"text-xs my-1\">or</p>\n <button onClick={() => fileInputRef.current?.click()} className=\"text-sm font-semibold text-primary hover:underline\">Upload File</button>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} accept=\"image/*\" className=\"hidden\"/>\n </div>\n )}\n </div>\n </div>\n \n <div className=\"flex gap-2\">\n <button\n onClick={handleGenerate}\n disabled={isLoading}\n className=\"btn-primary w-full flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Generate Image'}\n </button>\n <button\n onClick={handleSurpriseMe}\n disabled={isLoading}\n className=\"px-4 py-3 bg-surface border border-border rounded-md hover:bg-gray-100 transition-colors\"\n title=\"Surprise Me!\"\n >\n <SparklesIcon />\n </button>\n </div>\n </div>\n\n {/* Right Column: Output */}\n <div className=\"flex flex-col h-full\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Generated Image</label>\n <div className=\"flex-grow flex items-center justify-center bg-background border-2 border-dashed border-border rounded-lg p-4 relative overflow-auto\">\n {isLoading && <LoadingSpinner />}\n {error && <p className=\"text-red-500 text-center\">{error}</p>}\n {generatedImageUrl && !isLoading && (\n <>\n <img src={generatedImageUrl} alt={prompt || \"Generated by AI\"} className=\"max-w-full max-h-full object-contain rounded-md shadow-lg\" />\n <button \n onClick={handleDownload}\n className=\"absolute top-4 right-4 p-2 bg-black/30 text-white rounded-full hover:bg-black/50 backdrop-blur-sm\"\n title=\"Download Image\"\n >\n <ArrowDownTrayIcon />\n </button>\n </>\n )}\n {!isLoading && !generatedImageUrl && !error && (\n <div className=\"text-center text-text-secondary\">\n <p>Your generated image will appear here.</p>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["surprisePrompts","AiImageGenerator","prompt","setPrompt","useState","uploadedImage","setUploadedImage","generatedImageUrl","setGeneratedImageUrl","isLoading","setIsLoading","error","setError","fileInputRef","useRef","handleGenerate","useCallback","resultUrl","generateImageFromImageAndText","generateImage","err","errorMessage","handleSurpriseMe","randomPrompt","processImageBlob","blob","dataUrl","base64","blobToDataURL","fileToBase64","handlePaste","event","items","item","handleFileChange","file","handleDownload","link","jsxs","jsx","ImageGeneratorIcon","e","Fragment","XMarkIcon","LoadingSpinner","SparklesIcon","ArrowDownTrayIcon"],"mappings":"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"}
|
assets/AiPersonalityForge-B5EDsRzm.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as m,j as e}from"./react-CIdJ77ke.js";import{a as P,T as O,am as A,ar as E,J as T,M as F,L as R,as as D}from"./index-CX7Qxd1D.js";import{u as J,f as M}from"./promptUtils-BE1ZWeM-.js";import{e as U}from"./fileUtils-DLahR3l0.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const $={persona:"You are a helpful assistant.",rules:[],outputFormat:"markdown",exampleIO:[]},nt=()=>{const[n,u]=J(),[c,p]=m.useState(null),{addNotification:x}=P(),b=m.useRef(null),[f,j]=m.useState(""),[y,h]=m.useState([]),[g,N]=m.useState(!1),o=n.find(t=>t.id===c);m.useEffect(()=>{!c&&n.length>0&&p(n[0].id)},[n,c]);const l=(t,r)=>{if(!o)return;const i={...o,[t]:r};u(n.map(a=>a.id===c?i:a))},I=()=>{const t=Date.now().toString(),r={...$,id:t,name:"Untitled Personality"};u([...n,r]),p(t)},k=t=>{window.confirm("Are you sure you want to delete this personality?")&&(u(n.filter(r=>r.id!==t)),c===t&&p(n.length>1?n[0].id:null))},v=async()=>{if(!f.trim()||!o||g)return;const t=M(o),r=[...y,{role:"user",content:f}];h(r),j(""),N(!0);try{const i=D(f,t,.7);let a="";h(s=>[...s,{role:"model",content:""}]);for await(const s of i)a+=s,h(d=>d[d.length-1].role==="model"?[...d.slice(0,-1),{role:"model",content:a}]:d)}catch(i){const a=i instanceof Error?i.message:"An error occurred";h(s=>[...s,{role:"model",content:`**Error:** ${a}`}])}finally{N(!1)}},C=()=>{o&&(U(o,`${o.name.replace(/\s+/g,"_")}.json`),x("Personality exported!","success"))},S=t=>{const r=t.target.files?.[0];if(!r)return;const i=new FileReader;i.onload=a=>{try{const s=JSON.parse(a.target?.result);s.id&&s.name&&s.persona?(u(d=>[...d.filter(w=>w.id!==s.id),s]),p(s.id),x("Personality imported!","success")):x("Invalid personality file.","error")}catch{x("Failed to parse JSON file.","error")}},i.readAsText(r)};return e.jsxs("div",{className:"h-full flex text-text-primary",children:[e.jsxs("aside",{className:"w-64 bg-surface border-r border-border flex flex-col",children:[e.jsx("div",{className:"p-4 border-b border-border",children:e.jsx("h2",{className:"text-lg font-bold",children:"Personalities"})}),e.jsx("div",{className:"flex-grow overflow-y-auto",children:n.map(t=>e.jsxs("div",{onClick:()=>p(t.id),className:`group flex justify-between items-center p-3 text-sm cursor-pointer ${c===t.id?"bg-primary/10 text-primary":"hover:bg-gray-100 dark:hover:bg-slate-700"}`,children:[e.jsx("span",{className:"truncate",children:t.name}),e.jsx("button",{onClick:r=>{r.stopPropagation(),k(t.id)},className:"opacity-0 group-hover:opacity-100 text-text-secondary hover:text-red-500",children:e.jsx(O,{})})]},t.id))}),e.jsxs("div",{className:"p-4 border-t border-border space-y-2",children:[e.jsxs("button",{onClick:I,className:"btn-primary w-full py-2 text-sm flex items-center justify-center gap-2",children:[e.jsx(A,{})," New"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:()=>b.current?.click(),className:"flex-1 py-2 text-sm bg-gray-100 dark:bg-slate-700 rounded-md flex items-center justify-center gap-2",children:[e.jsx(E,{})," Import"]}),e.jsxs("button",{onClick:C,className:"flex-1 py-2 text-sm bg-gray-100 dark:bg-slate-700 rounded-md flex items-center justify-center gap-2",children:[e.jsx(T,{})," Export"]}),e.jsx("input",{type:"file",ref:b,onChange:S,accept:".json",className:"hidden"})]})]})]}),o?e.jsxs("div",{className:"flex-1 grid grid-cols-2 gap-px bg-border",children:[e.jsxs("div",{className:"bg-background p-4 flex flex-col gap-4 overflow-y-auto",children:[e.jsxs("div",{children:[e.jsx("label",{className:"font-bold",children:"Name"}),e.jsx("input",{type:"text",value:o.name,onChange:t=>l("name",t.target.value),className:"w-full mt-1 p-2 bg-surface border rounded"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"font-bold",children:"Persona"}),e.jsx("textarea",{value:o.persona,onChange:t=>l("persona",t.target.value),className:"w-full mt-1 p-2 bg-surface border rounded h-24"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"font-bold",children:"Rules (one per line)"}),e.jsx("textarea",{value:o.rules.join(`
|
| 2 |
+
`),onChange:t=>l("rules",t.target.value.split(`
|
| 3 |
+
`)),className:"w-full mt-1 p-2 bg-surface border rounded h-32"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"font-bold",children:"Output Format"}),e.jsxs("select",{value:o.outputFormat,onChange:t=>l("outputFormat",t.target.value),className:"w-full mt-1 p-2 bg-surface border rounded",children:[e.jsx("option",{children:"markdown"}),e.jsx("option",{children:"json"}),e.jsx("option",{children:"text"})]})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"font-bold mb-2",children:"Examples"}),o.exampleIO.map((t,r)=>e.jsxs("div",{className:"grid grid-cols-2 gap-2 mb-2 p-2 border rounded bg-surface",children:[e.jsx("textarea",{placeholder:"User Input",value:t.input,onChange:i=>l("exampleIO",o.exampleIO.map((a,s)=>s===r?{...a,input:i.target.value}:a)),className:"h-20 p-1 bg-background border rounded"}),e.jsx("textarea",{placeholder:"Model Output",value:t.output,onChange:i=>l("exampleIO",o.exampleIO.map((a,s)=>s===r?{...a,output:i.target.value}:a)),className:"h-20 p-1 bg-background border rounded"})]},r)),e.jsx("button",{onClick:()=>l("exampleIO",[...o.exampleIO,{input:"",output:""}]),className:"text-sm text-primary",children:"+ Add Example"})]})]}),e.jsxs("div",{className:"bg-background p-4 flex flex-col",children:[e.jsx("h2",{className:"text-lg font-bold mb-2 border-b pb-2",children:"Live Testbed"}),e.jsxs("div",{className:"flex-grow overflow-y-auto space-y-4 pr-2",children:[y.map((t,r)=>e.jsxs("div",{className:`p-3 rounded-lg ${t.role==="user"?"bg-primary/10":"bg-surface"}`,children:[e.jsx("strong",{className:"capitalize",children:t.role}),e.jsx(F,{content:t.content})]},r)),g&&e.jsx("div",{className:"flex justify-center",children:e.jsx(R,{})})]}),e.jsxs("div",{className:"flex gap-2 mt-4",children:[e.jsx("input",{value:f,onChange:t=>j(t.target.value),onKeyDown:t=>t.key==="Enter"&&v(),className:"flex-grow p-2 bg-surface border rounded",placeholder:"Test your AI..."}),e.jsx("button",{onClick:v,disabled:g,className:"btn-primary px-4",children:"Send"})]})]})]}):e.jsx("div",{className:"flex-1 flex items-center justify-center text-text-secondary",children:"Select or create a personality to begin."})]})};export{nt as AiPersonalityForge};
|
| 4 |
+
//# sourceMappingURL=AiPersonalityForge-B5EDsRzm.js.map
|
assets/AiPersonalityForge-B5EDsRzm.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiPersonalityForge-B5EDsRzm.js","sources":["../../components/features/AiPersonalityForge.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { SparklesIcon, PlusIcon, TrashIcon, ArrowDownTrayIcon, ArrowUpOnSquareIcon } from '../icons.tsx';\nimport { useAiPersonalities } from '../../hooks/useAiPersonalities.ts';\nimport { formatSystemPromptToString } from '../../utils/promptUtils.ts';\nimport { streamContent } from '../../services/index.ts';\nimport { downloadJson } from '../../services/fileUtils.ts';\nimport type { SystemPrompt } from '../../types.ts';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\nimport { useNotification } from '../../contexts/NotificationContext.tsx';\n\nconst defaultNewPrompt: Omit<SystemPrompt, 'id' | 'name'> = {\n persona: 'You are a helpful assistant.',\n rules: [],\n outputFormat: 'markdown',\n exampleIO: [],\n};\n\nexport const AiPersonalityForge: React.FC = () => {\n const [personalities, setPersonalities] = useAiPersonalities();\n const [activeId, setActiveId] = useState<string | null>(null);\n const { addNotification } = useNotification();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // Testbed State\n const [testbedInput, setTestbedInput] = useState('');\n const [chatHistory, setChatHistory] = useState<{ role: 'user' | 'model'; content: string }[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n\n const activePersonality = personalities.find(p => p.id === activeId);\n\n useEffect(() => {\n if (!activeId && personalities.length > 0) {\n setActiveId(personalities[0].id);\n }\n }, [personalities, activeId]);\n \n const handleUpdate = (field: keyof SystemPrompt, value: any) => {\n if (!activePersonality) return;\n const updated = { ...activePersonality, [field]: value };\n setPersonalities(personalities.map(p => (p.id === activeId ? updated : p)));\n };\n\n const handleAddNew = () => {\n const newId = Date.now().toString();\n const newPersonality: SystemPrompt = { ...defaultNewPrompt, id: newId, name: 'Untitled Personality' };\n setPersonalities([...personalities, newPersonality]);\n setActiveId(newId);\n };\n\n const handleDelete = (id: string) => {\n if (window.confirm('Are you sure you want to delete this personality?')) {\n setPersonalities(personalities.filter(p => p.id !== id));\n if (activeId === id) {\n setActiveId(personalities.length > 1 ? personalities[0].id : null);\n }\n }\n };\n \n const handleTestbedSend = async () => {\n if (!testbedInput.trim() || !activePersonality || isStreaming) return;\n \n const systemInstruction = formatSystemPromptToString(activePersonality);\n const newHistory = [...chatHistory, { role: 'user' as const, content: testbedInput }];\n setChatHistory(newHistory);\n setTestbedInput('');\n setIsStreaming(true);\n\n try {\n const stream = streamContent(testbedInput, systemInstruction, 0.7);\n let fullResponse = '';\n setChatHistory(prev => [...prev, { role: 'model', content: '' }]);\n for await (const chunk of stream) {\n fullResponse += chunk;\n setChatHistory(prev => {\n const last = prev[prev.length - 1];\n if (last.role === 'model') {\n return [...prev.slice(0, -1), { role: 'model', content: fullResponse }];\n }\n return prev;\n });\n }\n } catch (e) {\n const errorMsg = e instanceof Error ? e.message : 'An error occurred';\n setChatHistory(prev => [...prev, { role: 'model', content: `**Error:** ${errorMsg}` }]);\n } finally {\n setIsStreaming(false);\n }\n };\n \n const handleExport = () => {\n if (!activePersonality) return;\n downloadJson(activePersonality, `${activePersonality.name.replace(/\\s+/g, '_')}.json`);\n addNotification('Personality exported!', 'success');\n };\n\n const handleImport = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (!file) return;\n const reader = new FileReader();\n reader.onload = (event) => {\n try {\n const imported = JSON.parse(event.target?.result as string) as SystemPrompt;\n // Basic validation\n if (imported.id && imported.name && imported.persona) {\n setPersonalities(prev => [...prev.filter(p => p.id !== imported.id), imported]);\n setActiveId(imported.id);\n addNotification('Personality imported!', 'success');\n } else {\n addNotification('Invalid personality file.', 'error');\n }\n } catch {\n addNotification('Failed to parse JSON file.', 'error');\n }\n };\n reader.readAsText(file);\n };\n\n return (\n <div className=\"h-full flex text-text-primary\">\n {/* Sidebar */}\n <aside className=\"w-64 bg-surface border-r border-border flex flex-col\">\n <div className=\"p-4 border-b border-border\">\n <h2 className=\"text-lg font-bold\">Personalities</h2>\n </div>\n <div className=\"flex-grow overflow-y-auto\">\n {personalities.map(p => (\n <div key={p.id} onClick={() => setActiveId(p.id)} className={`group flex justify-between items-center p-3 text-sm cursor-pointer ${activeId === p.id ? 'bg-primary/10 text-primary' : 'hover:bg-gray-100 dark:hover:bg-slate-700'}`}>\n <span className=\"truncate\">{p.name}</span>\n <button onClick={(e) => { e.stopPropagation(); handleDelete(p.id)}} className=\"opacity-0 group-hover:opacity-100 text-text-secondary hover:text-red-500\"><TrashIcon /></button>\n </div>\n ))}\n </div>\n <div className=\"p-4 border-t border-border space-y-2\">\n <button onClick={handleAddNew} className=\"btn-primary w-full py-2 text-sm flex items-center justify-center gap-2\"><PlusIcon /> New</button>\n <div className=\"flex gap-2\">\n <button onClick={() => fileInputRef.current?.click()} className=\"flex-1 py-2 text-sm bg-gray-100 dark:bg-slate-700 rounded-md flex items-center justify-center gap-2\"><ArrowUpOnSquareIcon/> Import</button>\n <button onClick={handleExport} className=\"flex-1 py-2 text-sm bg-gray-100 dark:bg-slate-700 rounded-md flex items-center justify-center gap-2\"><ArrowDownTrayIcon/> Export</button>\n <input type=\"file\" ref={fileInputRef} onChange={handleImport} accept=\".json\" className=\"hidden\"/>\n </div>\n </div>\n </aside>\n {/* Main Content */}\n {activePersonality ? (\n <div className=\"flex-1 grid grid-cols-2 gap-px bg-border\">\n {/* Editor */}\n <div className=\"bg-background p-4 flex flex-col gap-4 overflow-y-auto\">\n <div><label className=\"font-bold\">Name</label><input type=\"text\" value={activePersonality.name} onChange={e => handleUpdate('name', e.target.value)} className=\"w-full mt-1 p-2 bg-surface border rounded\"/></div>\n <div><label className=\"font-bold\">Persona</label><textarea value={activePersonality.persona} onChange={e => handleUpdate('persona', e.target.value)} className=\"w-full mt-1 p-2 bg-surface border rounded h-24\"/></div>\n <div><label className=\"font-bold\">Rules (one per line)</label><textarea value={activePersonality.rules.join('\\n')} onChange={e => handleUpdate('rules', e.target.value.split('\\n'))} className=\"w-full mt-1 p-2 bg-surface border rounded h-32\"/></div>\n <div><label className=\"font-bold\">Output Format</label><select value={activePersonality.outputFormat} onChange={e => handleUpdate('outputFormat', e.target.value)} className=\"w-full mt-1 p-2 bg-surface border rounded\"><option>markdown</option><option>json</option><option>text</option></select></div>\n <div>\n <h3 className=\"font-bold mb-2\">Examples</h3>\n {activePersonality.exampleIO.map((ex, i) => (\n <div key={i} className=\"grid grid-cols-2 gap-2 mb-2 p-2 border rounded bg-surface\">\n <textarea placeholder=\"User Input\" value={ex.input} onChange={e => handleUpdate('exampleIO', activePersonality.exampleIO.map((item, idx) => idx === i ? {...item, input: e.target.value} : item))} className=\"h-20 p-1 bg-background border rounded\"/>\n <textarea placeholder=\"Model Output\" value={ex.output} onChange={e => handleUpdate('exampleIO', activePersonality.exampleIO.map((item, idx) => idx === i ? {...item, output: e.target.value} : item))} className=\"h-20 p-1 bg-background border rounded\"/>\n </div>\n ))}\n <button onClick={() => handleUpdate('exampleIO', [...activePersonality.exampleIO, {input: '', output: ''}])} className=\"text-sm text-primary\">+ Add Example</button>\n </div>\n </div>\n {/* Testbed */}\n <div className=\"bg-background p-4 flex flex-col\">\n <h2 className=\"text-lg font-bold mb-2 border-b pb-2\">Live Testbed</h2>\n <div className=\"flex-grow overflow-y-auto space-y-4 pr-2\">\n {chatHistory.map((msg, i) => (\n <div key={i} className={`p-3 rounded-lg ${msg.role === 'user' ? 'bg-primary/10' : 'bg-surface'}`}>\n <strong className=\"capitalize\">{msg.role}</strong>\n <MarkdownRenderer content={msg.content} />\n </div>\n ))}\n {isStreaming && <div className=\"flex justify-center\"><LoadingSpinner/></div>}\n </div>\n <div className=\"flex gap-2 mt-4\">\n <input value={testbedInput} onChange={e => setTestbedInput(e.target.value)} onKeyDown={e => e.key === 'Enter' && handleTestbedSend()} className=\"flex-grow p-2 bg-surface border rounded\" placeholder=\"Test your AI...\"/>\n <button onClick={handleTestbedSend} disabled={isStreaming} className=\"btn-primary px-4\">Send</button>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"flex-1 flex items-center justify-center text-text-secondary\">Select or create a personality to begin.</div>\n )}\n </div>\n );\n};"],"names":["defaultNewPrompt","AiPersonalityForge","personalities","setPersonalities","useAiPersonalities","activeId","setActiveId","useState","addNotification","useNotification","fileInputRef","useRef","testbedInput","setTestbedInput","chatHistory","setChatHistory","isStreaming","setIsStreaming","activePersonality","p","useEffect","handleUpdate","field","value","updated","handleAddNew","newId","newPersonality","handleDelete","id","handleTestbedSend","systemInstruction","formatSystemPromptToString","newHistory","stream","streamContent","fullResponse","prev","chunk","e","errorMsg","handleExport","downloadJson","handleImport","file","reader","event","imported","jsxs","jsx","TrashIcon","PlusIcon","ArrowUpOnSquareIcon","ArrowDownTrayIcon","ex","i","item","idx","msg","MarkdownRenderer","LoadingSpinner"],"mappings":"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"}
|
assets/AiStyleTransfer-agazZFyF.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as e}from"./react-CIdJ77ke.js";import{a0 as y,S as j,L as d,M as b}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const g="function my_func(x,y){return x+y;}",N=`- Use camelCase for function names.
|
| 2 |
+
- Add a space after commas in argument lists.
|
| 3 |
+
- Use semicolons at the end of statements.`,$e=()=>{const[o,x]=r.useState(g),[s,f]=r.useState(N),[i,p]=r.useState(""),[m,c]=r.useState(!1),[l,n]=r.useState(""),u=r.useCallback(async()=>{if(!o.trim()||!s.trim()){n("Please provide both code and a style guide.");return}c(!0),n(""),p("");try{const t=y({code:o,styleGuide:s});let a="";for await(const h of t)a+=h,p(a)}catch(t){const a=t instanceof Error?t.message:"An unknown error occurred.";n(`Failed to transfer style: ${a}`)}finally{c(!1)}},[o,s]);return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(j,{}),e.jsx("span",{className:"ml-3",children:"AI Code Style Transfer"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Rewrite code to match a specific style guide using AI."})]}),e.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"input-code",className:"text-sm font-medium text-text-secondary mb-2",children:"Original Code"}),e.jsx("textarea",{id:"input-code",value:o,onChange:t=>x(t.target.value),className:"flex-grow p-4 bg-surface border border-border rounded-md resize-y font-mono text-sm"})]}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"style-guide",className:"text-sm font-medium text-text-secondary mb-2",children:"Style Guide"}),e.jsx("textarea",{id:"style-guide",value:s,onChange:t=>f(t.target.value),className:"flex-grow p-4 bg-surface border border-border rounded-md resize-y font-mono text-sm"})]}),e.jsx("div",{className:"flex-shrink-0",children:e.jsx("button",{onClick:u,disabled:m,className:"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3",children:m?e.jsx(d,{}):"Rewrite Code"})}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Rewritten Code"}),e.jsxs("div",{className:"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto",children:[m&&!i&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(d,{})}),l&&e.jsx("p",{className:"p-4 text-red-500",children:l}),i&&e.jsx(b,{content:i}),!m&&!i&&!l&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"Rewritten code will appear here."})]})]})]})]})};export{$e as AiStyleTransfer};
|
| 4 |
+
//# sourceMappingURL=AiStyleTransfer-agazZFyF.js.map
|
assets/AiStyleTransfer-agazZFyF.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiStyleTransfer-agazZFyF.js","sources":["../../components/features/AiStyleTransfer.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { transferCodeStyleStream } from '../../services/index.ts';\nimport { SparklesIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleCode = `function my_func(x,y){return x+y;}`;\nconst exampleStyleGuide = `- Use camelCase for function names.\n- Add a space after commas in argument lists.\n- Use semicolons at the end of statements.`;\n\nexport const AiStyleTransfer: React.FC = () => {\n const [inputCode, setInputCode] = useState<string>(exampleCode);\n const [styleGuide, setStyleGuide] = useState<string>(exampleStyleGuide);\n const [outputCode, setOutputCode] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n\n const handleGenerate = useCallback(async () => {\n if (!inputCode.trim() || !styleGuide.trim()) {\n setError('Please provide both code and a style guide.');\n return;\n }\n setIsLoading(true);\n setError('');\n setOutputCode('');\n try {\n const stream = transferCodeStyleStream({ code: inputCode, styleGuide });\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setOutputCode(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to transfer style: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, [inputCode, styleGuide]);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <SparklesIcon />\n <span className=\"ml-3\">AI Code Style Transfer</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Rewrite code to match a specific style guide using AI.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"input-code\" className=\"text-sm font-medium text-text-secondary mb-2\">Original Code</label>\n <textarea\n id=\"input-code\"\n value={inputCode}\n onChange={(e) => setInputCode(e.target.value)}\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-y font-mono text-sm\"\n />\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"style-guide\" className=\"text-sm font-medium text-text-secondary mb-2\">Style Guide</label>\n <textarea\n id=\"style-guide\"\n value={styleGuide}\n onChange={(e) => setStyleGuide(e.target.value)}\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-y font-mono text-sm\"\n />\n </div>\n <div className=\"flex-shrink-0\">\n <button\n onClick={handleGenerate}\n disabled={isLoading}\n className=\"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Rewrite Code'}\n </button>\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Rewritten Code</label>\n <div className=\"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && !outputCode && <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"p-4 text-red-500\">{error}</p>}\n {outputCode && <MarkdownRenderer content={outputCode} />}\n {!isLoading && !outputCode && !error && <div className=\"text-text-secondary h-full flex items-center justify-center\">Rewritten code will appear here.</div>}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleCode","exampleStyleGuide","AiStyleTransfer","inputCode","setInputCode","useState","styleGuide","setStyleGuide","outputCode","setOutputCode","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","stream","transferCodeStyleStream","fullResponse","chunk","err","errorMessage","jsxs","jsx","SparklesIcon","e","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}
|
assets/AiUnitTestGenerator-DT-WbvUh.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as s,j as e}from"./react-CIdJ77ke.js";import{q as h,B as g,L as d,J as j,M as b}from"./index-CX7Qxd1D.js";import{d as y}from"./fileUtils-DLahR3l0.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const N=`import React from 'react';
|
| 2 |
+
|
| 3 |
+
export const Greeting = ({ name }) => {
|
| 4 |
+
if (!name) {
|
| 5 |
+
return <div>Hello, Guest!</div>;
|
| 6 |
+
}
|
| 7 |
+
return <div>Hello, {name}!</div>;
|
| 8 |
+
};`,qe=()=>{const[i,x]=s.useState(N),[r,l]=s.useState(""),[o,p]=s.useState(!1),[a,n]=s.useState(""),f=s.useCallback(async()=>{if(!i.trim()){n("Please enter some code to generate tests for.");return}p(!0),n(""),l("");try{const t=h(i);let m="";for await(const u of t)m+=u,l(m)}catch(t){const m=t instanceof Error?t.message:"An unknown error occurred.";n(`Failed to generate tests: ${m}`)}finally{p(!1)}},[i]),c=t=>t.replace(/^```(?:\w+\n)?/,"").replace(/```$/,"");return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(g,{}),e.jsx("span",{className:"ml-3",children:"AI Unit Test Generator"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Provide a function or component and let AI write the tests."})]}),e.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"code-input",className:"text-sm font-medium text-text-secondary mb-2",children:"Source Code"}),e.jsx("textarea",{id:"code-input",value:i,onChange:t=>x(t.target.value),placeholder:"Paste your source code here...",className:"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm focus:ring-2 focus:ring-primary focus:outline-none"})]}),e.jsx("div",{className:"flex-shrink-0",children:e.jsx("button",{onClick:f,disabled:o,className:"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3",children:o?e.jsx(d,{}):"Generate Unit Tests"})}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary",children:"Generated Tests"}),r&&!o&&e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>navigator.clipboard.writeText(c(r)),className:"px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200",children:"Copy Code"}),e.jsxs("button",{onClick:()=>y(c(r),"tests.tsx","text/typescript"),className:"flex items-center gap-1 px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200",children:[e.jsx(j,{className:"w-4 h-4"})," Download"]})]})]}),e.jsxs("div",{className:"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto",children:[o&&!r&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(d,{})}),a&&e.jsx("p",{className:"p-4 text-red-500",children:a}),r&&e.jsx(b,{content:r}),!o&&!r&&!a&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"The generated tests will appear here."})]})]})]})]})};export{qe as AiUnitTestGenerator};
|
| 9 |
+
//# sourceMappingURL=AiUnitTestGenerator-DT-WbvUh.js.map
|
assets/AiUnitTestGenerator-DT-WbvUh.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AiUnitTestGenerator-DT-WbvUh.js","sources":["../../components/features/AiUnitTestGenerator.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { generateUnitTestsStream, downloadFile } from '../../services/index.ts';\nimport { BeakerIcon, ArrowDownTrayIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleCode = `import React from 'react';\n\nexport const Greeting = ({ name }) => {\n if (!name) {\n return <div>Hello, Guest!</div>;\n }\n return <div>Hello, {name}!</div>;\n};`;\n\nexport const AiUnitTestGenerator: React.FC = () => {\n const [code, setCode] = useState<string>(exampleCode);\n const [tests, setTests] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n\n const handleGenerate = useCallback(async () => {\n if (!code.trim()) {\n setError('Please enter some code to generate tests for.');\n return;\n }\n setIsLoading(true);\n setError('');\n setTests('');\n try {\n const stream = generateUnitTestsStream(code);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setTests(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to generate tests: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, [code]);\n \n const cleanCodeForDownload = (markdown: string) => {\n return markdown.replace(/^```(?:\\w+\\n)?/, '').replace(/```$/, '');\n }\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <BeakerIcon />\n <span className=\"ml-3\">AI Unit Test Generator</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Provide a function or component and let AI write the tests.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"code-input\" className=\"text-sm font-medium text-text-secondary mb-2\">Source Code</label>\n <textarea\n id=\"code-input\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n placeholder=\"Paste your source code here...\"\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm focus:ring-2 focus:ring-primary focus:outline-none\"\n />\n </div>\n <div className=\"flex-shrink-0\">\n <button\n onClick={handleGenerate}\n disabled={isLoading}\n className=\"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Generate Unit Tests'}\n </button>\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <div className=\"flex justify-between items-center mb-2\">\n <label className=\"text-sm font-medium text-text-secondary\">Generated Tests</label>\n {tests && !isLoading && (\n <div className=\"flex items-center gap-2\">\n <button onClick={() => navigator.clipboard.writeText(cleanCodeForDownload(tests))} className=\"px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200\">Copy Code</button>\n <button onClick={() => downloadFile(cleanCodeForDownload(tests), 'tests.tsx', 'text/typescript')} className=\"flex items-center gap-1 px-3 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200\">\n <ArrowDownTrayIcon className=\"w-4 h-4\" /> Download\n </button>\n </div>\n )}\n </div>\n <div className=\"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && !tests && (\n <div className=\"flex items-center justify-center h-full\">\n <LoadingSpinner />\n </div>\n )}\n {error && <p className=\"p-4 text-red-500\">{error}</p>}\n {tests && <MarkdownRenderer content={tests} />}\n {!isLoading && !tests && !error && (\n <div className=\"text-text-secondary h-full flex items-center justify-center\">\n The generated tests will appear here.\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleCode","AiUnitTestGenerator","code","setCode","useState","tests","setTests","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","stream","generateUnitTestsStream","fullResponse","chunk","err","errorMessage","cleanCodeForDownload","markdown","jsxs","jsx","BeakerIcon","e","LoadingSpinner","downloadFile","ArrowDownTrayIcon","MarkdownRenderer"],"mappings":"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"}
|
assets/AsyncCallTreeViewer-C2e5--qQ.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as p,j as t,R as x}from"./react-CIdJ77ke.js";import{af as h}from"./index-CX7Qxd1D.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const u=`{
|
| 2 |
+
"name": "startApp",
|
| 3 |
+
"duration": 500,
|
| 4 |
+
"children": [
|
| 5 |
+
{
|
| 6 |
+
"name": "fetchUserData",
|
| 7 |
+
"duration": 300,
|
| 8 |
+
"children": [
|
| 9 |
+
{ "name": "authenticate", "duration": 100 },
|
| 10 |
+
{ "name": "fetchProfile", "duration": 150 }
|
| 11 |
+
]
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
"name": "loadInitialAssets",
|
| 15 |
+
"duration": 450,
|
| 16 |
+
"children": [
|
| 17 |
+
{ "name": "loadImage.png", "duration": 200 },
|
| 18 |
+
{ "name": "loadScript.js", "duration": 250 }
|
| 19 |
+
]
|
| 20 |
+
}
|
| 21 |
+
]
|
| 22 |
+
}`,d=({node:e,level:m,maxDuration:r})=>{const[s,n]=x.useState(!0),o=e.children&&e.children.length>0;return t.jsxs("div",{className:"my-1",children:[t.jsxs("div",{className:"flex items-center p-2 rounded-md hover:bg-gray-100",style:{paddingLeft:`${m*20+8}px`},children:[o&&t.jsx("button",{onClick:()=>n(!s),className:`mr-2 text-text-secondary w-4 h-4 flex-shrink-0 transform transition-transform ${s?"rotate-90":""}`,children:"▶"}),!o&&t.jsx("div",{className:"w-6 mr-2 flex-shrink-0"}),t.jsxs("div",{className:"flex-grow flex items-center justify-between gap-4",children:[t.jsx("span",{className:"truncate",children:e.name}),t.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[t.jsx("div",{className:"w-24 h-4 bg-gray-200 rounded-full overflow-hidden",children:t.jsx("div",{className:"h-4 bg-primary",style:{width:`${e.duration/r*100}%`}})}),t.jsxs("span",{className:"text-primary w-16 text-right",children:[e.duration.toFixed(0),"ms"]})]})]})]}),s&&o&&t.jsx("div",{children:e.children.map((i,a)=>t.jsx(d,{node:i,level:m+1,maxDuration:r},a))})]})},At=()=>{const[e,m]=p.useState(u),[r,s]=p.useState(""),{treeData:n,maxDuration:o}=p.useMemo(()=>{try{const i=JSON.parse(e);let a=0;const c=l=>{l.duration>a&&(a=l.duration),l.children&&l.children.forEach(c)};return c(i),s(""),{treeData:i,maxDuration:a}}catch{return s("Invalid JSON format."),{treeData:null,maxDuration:0}}},[e]);return t.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[t.jsxs("header",{className:"mb-6",children:[t.jsxs("h1",{className:"text-3xl flex items-center",children:[t.jsx(h,{}),t.jsx("span",{className:"ml-3",children:"Async Call Tree Viewer"})]}),t.jsx("p",{className:"text-text-secondary mt-1",children:"Paste a JSON structure to visualize an asynchronous function call tree."})]}),t.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[t.jsxs("div",{className:"flex flex-col h-2/5 min-h-[200px]",children:[t.jsx("label",{htmlFor:"json-input",className:"text-sm font-medium text-text-secondary mb-2",children:"JSON Input"}),t.jsx("textarea",{id:"json-input",value:e,onChange:i=>m(i.target.value),className:`flex-grow p-4 bg-surface border ${r?"border-red-500":"border-border"} rounded-md resize-y font-mono text-sm`,spellCheck:"false"}),r&&t.jsx("p",{className:"text-red-500 text-xs mt-1",children:r})]}),t.jsxs("div",{className:"flex flex-col flex-grow min-h-0",children:[t.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Visual Tree"}),t.jsx("div",{className:"flex-grow bg-surface p-4 rounded-lg text-sm overflow-y-auto border border-border",children:n?t.jsx(d,{node:n,level:0,maxDuration:o}):t.jsx("div",{className:"text-text-secondary",children:r||"Enter valid JSON to see the tree."})})]})]})]})};export{At as AsyncCallTreeViewer};
|
| 23 |
+
//# sourceMappingURL=AsyncCallTreeViewer-C2e5--qQ.js.map
|
assets/AsyncCallTreeViewer-C2e5--qQ.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AsyncCallTreeViewer-C2e5--qQ.js","sources":["../../components/features/AsyncCallTreeViewer.tsx"],"sourcesContent":["\n\nimport React, { useState, useMemo } from 'react';\nimport { ChartBarIcon } from '../icons.tsx';\n\ninterface CallNode {\n name: string;\n duration: number;\n children?: CallNode[];\n}\n\nconst exampleJson = `{\n \"name\": \"startApp\",\n \"duration\": 500,\n \"children\": [\n {\n \"name\": \"fetchUserData\",\n \"duration\": 300,\n \"children\": [\n { \"name\": \"authenticate\", \"duration\": 100 },\n { \"name\": \"fetchProfile\", \"duration\": 150 }\n ]\n },\n {\n \"name\": \"loadInitialAssets\",\n \"duration\": 450,\n \"children\": [\n { \"name\": \"loadImage.png\", \"duration\": 200 },\n { \"name\": \"loadScript.js\", \"duration\": 250 }\n ]\n }\n ]\n}`;\n\n\nconst TreeNode: React.FC<{ node: CallNode, level: number, maxDuration: number }> = ({ node, level, maxDuration }) => {\n const [isOpen, setIsOpen] = React.useState(true);\n const hasChildren = node.children && node.children.length > 0;\n\n return (\n <div className=\"my-1\">\n <div\n className=\"flex items-center p-2 rounded-md hover:bg-gray-100\"\n style={{ paddingLeft: `${level * 20 + 8}px` }}\n >\n {hasChildren && (\n <button onClick={() => setIsOpen(!isOpen)} className={`mr-2 text-text-secondary w-4 h-4 flex-shrink-0 transform transition-transform ${isOpen ? 'rotate-90' : ''}`}>\n ▶\n </button>\n )}\n {!hasChildren && <div className=\"w-6 mr-2 flex-shrink-0\" />}\n <div className=\"flex-grow flex items-center justify-between gap-4\">\n <span className=\"truncate\">{node.name}</span>\n <div className=\"flex items-center gap-2 flex-shrink-0\">\n <div className=\"w-24 h-4 bg-gray-200 rounded-full overflow-hidden\">\n <div className=\"h-4 bg-primary\" style={{ width: `${(node.duration / maxDuration) * 100}%` }}/>\n </div>\n <span className=\"text-primary w-16 text-right\">{node.duration.toFixed(0)}ms</span>\n </div>\n </div>\n </div>\n {isOpen && hasChildren && (\n <div>\n {node.children!.map((child, index) => (\n <TreeNode key={index} node={child} level={level + 1} maxDuration={maxDuration} />\n ))}\n </div>\n )}\n </div>\n );\n};\n\n\nexport const AsyncCallTreeViewer: React.FC = () => {\n const [jsonInput, setJsonInput] = useState(exampleJson);\n const [error, setError] = useState('');\n\n const { treeData, maxDuration } = useMemo(() => {\n try {\n const data: CallNode = JSON.parse(jsonInput);\n let max = 0;\n const findMax = (node: CallNode) => {\n if (node.duration > max) max = node.duration;\n if (node.children) node.children.forEach(findMax);\n };\n findMax(data);\n setError('');\n return { treeData: data, maxDuration: max };\n } catch (e) {\n setError('Invalid JSON format.');\n return { treeData: null, maxDuration: 0 };\n }\n }, [jsonInput]);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl flex items-center\">\n <ChartBarIcon />\n <span className=\"ml-3\">Async Call Tree Viewer</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Paste a JSON structure to visualize an asynchronous function call tree.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col h-2/5 min-h-[200px]\">\n <label htmlFor=\"json-input\" className=\"text-sm font-medium text-text-secondary mb-2\">JSON Input</label>\n <textarea\n id=\"json-input\"\n value={jsonInput}\n onChange={e => setJsonInput(e.target.value)}\n className={`flex-grow p-4 bg-surface border ${error ? 'border-red-500' : 'border-border'} rounded-md resize-y font-mono text-sm`}\n spellCheck=\"false\"\n />\n {error && <p className=\"text-red-500 text-xs mt-1\">{error}</p>}\n </div>\n <div className=\"flex flex-col flex-grow min-h-0\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Visual Tree</label>\n <div className=\"flex-grow bg-surface p-4 rounded-lg text-sm overflow-y-auto border border-border\">\n {treeData ? <TreeNode node={treeData} level={0} maxDuration={maxDuration} /> : <div className=\"text-text-secondary\">{error || 'Enter valid JSON to see the tree.'}</div>}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleJson","TreeNode","node","level","maxDuration","isOpen","setIsOpen","React","hasChildren","jsxs","jsx","child","index","AsyncCallTreeViewer","jsonInput","setJsonInput","useState","error","setError","treeData","useMemo","data","max","findMax","ChartBarIcon","e"],"mappings":"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"}
|
assets/AudioToCode-H-nciw6c.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as t,j as e}from"./react-CIdJ77ke.js";import{ag as y,ah as v,L as h,M as N}from"./index-CX7Qxd1D.js";import{a as R}from"./fileUtils-DLahR3l0.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const Ke=()=>{const[s,u]=t.useState(!1),[a,p]=t.useState(!1),[n,x]=t.useState(""),[l,m]=t.useState(""),r=t.useRef(null),c=t.useRef([]),g=async()=>{if(m(""),x(""),!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia){m("Audio recording is not supported by your browser.");return}try{const o=await navigator.mediaDevices.getUserMedia({audio:!0});r.current=new MediaRecorder(o),r.current.ondataavailable=i=>{c.current.push(i.data)},r.current.onstop=j,r.current.start(),u(!0)}catch{m("Microphone access was denied. Please enable it in your browser settings.")}},b=()=>{r.current&&s&&(r.current.stop(),r.current.stream.getTracks().forEach(o=>o.stop()),u(!1),p(!0))},j=t.useCallback(async()=>{if(c.current.length===0){p(!1);return}const o=new Blob(c.current,{type:"audio/webm"});c.current=[];try{const i=await R(o),d=y(i,"audio/webm");let f="";for await(const w of d)f+=w,x(f)}catch(i){const d=i instanceof Error?i.message:"An unknown error occurred.";m(`Failed to transcribe audio: ${d}`)}finally{p(!1)}},[]);return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6 text-center",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center justify-center",children:[e.jsx(v,{}),e.jsx("span",{className:"ml-3",children:"AI Audio-to-Code"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Speak your programming ideas and watch them turn into code."})]}),e.jsxs("div",{className:"flex-grow flex flex-col items-center gap-6 min-h-0",children:[e.jsxs("div",{className:"flex flex-col items-center justify-center bg-surface p-6 rounded-lg w-full max-w-lg border border-border",children:[e.jsx("button",{onClick:s?b:g,className:`w-24 h-24 rounded-full flex items-center justify-center text-white font-bold text-lg transition-all ${s?"bg-red-500 animate-pulse":"bg-primary"}`,disabled:a,children:a?e.jsx(h,{}):s?"Stop":"Record"}),e.jsx("p",{className:"mt-4 text-text-secondary",children:a?"Transcribing...":s?"Recording in progress...":"Click to start recording"})]}),e.jsxs("div",{className:"flex flex-col h-full w-full max-w-3xl",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Generated Code"}),e.jsxs("div",{className:"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto min-h-[200px]",children:[a&&!n&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(h,{})}),l&&e.jsx("p",{className:"p-4 text-red-500",children:l}),n&&e.jsx(N,{content:n}),!a&&!n&&!l&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"Code will appear here."})]})]})]})]})};export{Ke as AudioToCode};
|
| 2 |
+
//# sourceMappingURL=AudioToCode-H-nciw6c.js.map
|
assets/AudioToCode-H-nciw6c.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"AudioToCode-H-nciw6c.js","sources":["../../components/features/AudioToCode.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\nimport { transcribeAudioToCodeStream, blobToBase64 } from '../../services/index.ts';\nimport { MicrophoneIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nexport const AudioToCode: React.FC = () => {\n const [isRecording, setIsRecording] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [code, setCode] = useState('');\n const [error, setError] = useState('');\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const audioChunksRef = useRef<Blob[]>([]);\n\n const handleStartRecording = async () => {\n setError('');\n setCode('');\n if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {\n setError('Audio recording is not supported by your browser.');\n return;\n }\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n mediaRecorderRef.current = new MediaRecorder(stream);\n mediaRecorderRef.current.ondataavailable = event => {\n audioChunksRef.current.push(event.data);\n };\n mediaRecorderRef.current.onstop = handleTranscribe;\n mediaRecorderRef.current.start();\n setIsRecording(true);\n } catch (err) {\n setError('Microphone access was denied. Please enable it in your browser settings.');\n }\n };\n\n const handleStopRecording = () => {\n if (mediaRecorderRef.current && isRecording) {\n mediaRecorderRef.current.stop();\n mediaRecorderRef.current.stream.getTracks().forEach(track => track.stop());\n setIsRecording(false);\n setIsLoading(true);\n }\n };\n\n const handleTranscribe = useCallback(async () => {\n if (audioChunksRef.current.length === 0) {\n setIsLoading(false);\n return;\n }\n const audioBlob = new Blob(audioChunksRef.current, { type: 'audio/webm' });\n audioChunksRef.current = [];\n try {\n const base64Audio = await blobToBase64(audioBlob);\n const stream = transcribeAudioToCodeStream(base64Audio, 'audio/webm');\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setCode(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to transcribe audio: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6 text-center\">\n <h1 className=\"text-3xl font-bold flex items-center justify-center\">\n <MicrophoneIcon />\n <span className=\"ml-3\">AI Audio-to-Code</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Speak your programming ideas and watch them turn into code.</p>\n </header>\n <div className=\"flex-grow flex flex-col items-center gap-6 min-h-0\">\n <div className=\"flex flex-col items-center justify-center bg-surface p-6 rounded-lg w-full max-w-lg border border-border\">\n <button\n onClick={isRecording ? handleStopRecording : handleStartRecording}\n className={`w-24 h-24 rounded-full flex items-center justify-center text-white font-bold text-lg transition-all ${isRecording ? 'bg-red-500 animate-pulse' : 'bg-primary'}`}\n disabled={isLoading}\n >\n {isLoading ? <LoadingSpinner/> : isRecording ? 'Stop' : 'Record'}\n </button>\n <p className=\"mt-4 text-text-secondary\">\n {isLoading ? 'Transcribing...' : isRecording ? 'Recording in progress...' : 'Click to start recording'}\n </p>\n </div>\n <div className=\"flex flex-col h-full w-full max-w-3xl\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Generated Code</label>\n <div className=\"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto min-h-[200px]\">\n {isLoading && !code && (\n <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>\n )}\n {error && <p className=\"p-4 text-red-500\">{error}</p>}\n {code && <MarkdownRenderer content={code} />}\n {!isLoading && !code && !error && (\n <div className=\"text-text-secondary h-full flex items-center justify-center\">Code will appear here.</div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["AudioToCode","isRecording","setIsRecording","useState","isLoading","setIsLoading","code","setCode","error","setError","mediaRecorderRef","useRef","audioChunksRef","handleStartRecording","stream","event","handleTranscribe","handleStopRecording","track","useCallback","audioBlob","base64Audio","blobToBase64","transcribeAudioToCodeStream","fullResponse","chunk","err","errorMessage","jsxs","jsx","MicrophoneIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}
|
assets/BugReproducer-DLaQepRF.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as e}from"./react-CIdJ77ke.js";import{az as h,a8 as j,L as d,M as b}from"./index-CX7Qxd1D.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const v=`TypeError: Cannot read properties of undefined (reading 'name')
|
| 2 |
+
at UserProfile (UserProfile.jsx:5:21)
|
| 3 |
+
at renderWithHooks (react-dom.development.js:14985:18)
|
| 4 |
+
at mountIndeterminateComponent (react-dom.development.js:17811:13)
|
| 5 |
+
at beginWork (react-dom.development.js:19049:16)`,Ie=()=>{const[o,x]=r.useState(v),[s,f]=r.useState(`// The UserProfile component code:
|
| 6 |
+
const UserProfile = ({ user }) => <div>{user.name}</div>;`),[a,n]=r.useState(""),[i,l]=r.useState(!1),[p,m]=r.useState(""),u=r.useCallback(async()=>{if(!o.trim()){m("Please provide a stack trace.");return}l(!0),m(""),n("");try{const t=h(o,s);let c="";for await(const g of t)c+=g,n(c)}catch(t){m(t instanceof Error?t.message:"An unknown error occurred.")}finally{l(!1)}},[o,s]);return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(j,{}),e.jsx("span",{className:"ml-3",children:"Automated Bug Reproducer"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Paste a stack trace to automatically generate a failing unit test."})]}),e.jsxs("div",{className:"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0",children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"stack-trace",className:"text-sm font-medium mb-2",children:"Stack Trace"}),e.jsx("textarea",{id:"stack-trace",value:o,onChange:t=>x(t.target.value),className:"flex-grow p-2 bg-surface border rounded font-mono text-xs"})]}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"context",className:"text-sm font-medium mb-2",children:"Relevant Code / Context (Optional)"}),e.jsx("textarea",{id:"context",value:s,onChange:t=>f(t.target.value),className:"flex-grow p-2 bg-surface border rounded font-mono text-xs"})]}),e.jsx("button",{onClick:u,disabled:i,className:"btn-primary w-full py-3",children:i?e.jsx(d,{}):"Generate Test"})]}),e.jsxs("div",{className:"flex flex-col",children:[e.jsx("label",{className:"text-sm font-medium mb-2",children:"Generated Test File"}),e.jsxs("div",{className:"flex-grow p-1 bg-background border rounded overflow-auto",children:[i&&!a&&e.jsx("div",{className:"flex justify-center items-center h-full",children:e.jsx(d,{})}),p&&e.jsx("p",{className:"text-red-500 p-4",children:p}),a&&e.jsx(b,{content:a})]})]})]})]})};export{Ie as BugReproducer};
|
| 7 |
+
//# sourceMappingURL=BugReproducer-DLaQepRF.js.map
|
assets/BugReproducer-DLaQepRF.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"BugReproducer-DLaQepRF.js","sources":["../../components/features/BugReproducer.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { generateBugReproductionTestStream } from '../../services/aiService.ts';\nimport { BugAntIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleStackTrace = `TypeError: Cannot read properties of undefined (reading 'name')\n at UserProfile (UserProfile.jsx:5:21)\n at renderWithHooks (react-dom.development.js:14985:18)\n at mountIndeterminateComponent (react-dom.development.js:17811:13)\n at beginWork (react-dom.development.js:19049:16)`;\n\nexport const BugReproducer: React.FC = () => {\n const [stackTrace, setStackTrace] = useState(exampleStackTrace);\n const [context, setContext] = useState('// The UserProfile component code:\\nconst UserProfile = ({ user }) => <div>{user.name}</div>;');\n const [generatedTest, setGeneratedTest] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n\n const handleGenerate = useCallback(async () => {\n if (!stackTrace.trim()) {\n setError('Please provide a stack trace.');\n return;\n }\n setIsLoading(true);\n setError('');\n setGeneratedTest('');\n try {\n const stream = generateBugReproductionTestStream(stackTrace, context);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setGeneratedTest(fullResponse);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An unknown error occurred.');\n } finally {\n setIsLoading(false);\n }\n }, [stackTrace, context]);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <BugAntIcon />\n <span className=\"ml-3\">Automated Bug Reproducer</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Paste a stack trace to automatically generate a failing unit test.</p>\n </header>\n <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 min-h-0\">\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"stack-trace\" className=\"text-sm font-medium mb-2\">Stack Trace</label>\n <textarea id=\"stack-trace\" value={stackTrace} onChange={e => setStackTrace(e.target.value)} className=\"flex-grow p-2 bg-surface border rounded font-mono text-xs\"/>\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"context\" className=\"text-sm font-medium mb-2\">Relevant Code / Context (Optional)</label>\n <textarea id=\"context\" value={context} onChange={e => setContext(e.target.value)} className=\"flex-grow p-2 bg-surface border rounded font-mono text-xs\"/>\n </div>\n <button onClick={handleGenerate} disabled={isLoading} className=\"btn-primary w-full py-3\">{isLoading ? <LoadingSpinner/> : 'Generate Test'}</button>\n </div>\n <div className=\"flex flex-col\">\n <label className=\"text-sm font-medium mb-2\">Generated Test File</label>\n <div className=\"flex-grow p-1 bg-background border rounded overflow-auto\">\n {isLoading && !generatedTest && <div className=\"flex justify-center items-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"text-red-500 p-4\">{error}</p>}\n {generatedTest && <MarkdownRenderer content={generatedTest} />}\n </div>\n </div>\n </div>\n </div>\n );\n};\n"],"names":["exampleStackTrace","BugReproducer","stackTrace","setStackTrace","useState","context","setContext","generatedTest","setGeneratedTest","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","stream","generateBugReproductionTestStream","fullResponse","chunk","err","jsxs","jsx","BugAntIcon","e","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}
|
assets/ChangelogGenerator-DJpWK4fB.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as o,j as e}from"./react-CIdJ77ke.js";import{a3 as h,w as u,L as c,M as f}from"./index-CX7Qxd1D.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const b=`commit 3a4b5c...
|
| 2 |
+
Author: Dev One <dev.one@example.com>
|
| 3 |
+
Date: Mon Jul 15 11:30:00 2024 -0400
|
| 4 |
+
|
| 5 |
+
feat: add user login page
|
| 6 |
+
|
| 7 |
+
commit 1a2b3c...
|
| 8 |
+
Author: Dev Two <dev.two@example.com>
|
| 9 |
+
Date: Mon Jul 15 10:00:00 2024 -0400
|
| 10 |
+
|
| 11 |
+
fix: correct typo in header
|
| 12 |
+
`,Fe=()=>{const[i,x]=o.useState(b),[r,s]=o.useState(""),[m,l]=o.useState(!1),[n,a]=o.useState(""),d=o.useCallback(async()=>{if(!i.trim()){a("Please paste your git log output.");return}l(!0),a(""),s("");try{const t=h(i);let p="";for await(const g of t)p+=g,s(p)}catch(t){a(t instanceof Error?t.message:"An unknown error occurred.")}finally{l(!1)}},[i]);return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(u,{}),e.jsx("span",{className:"ml-3",children:"AI Changelog Generator"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Generate a markdown changelog from your raw git log."})]}),e.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"commit-input",className:"text-sm font-medium text-text-secondary mb-2",children:"Raw Git Log"}),e.jsx("textarea",{id:"commit-input",value:i,onChange:t=>x(t.target.value),className:"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm"})]}),e.jsx("div",{className:"flex-shrink-0",children:e.jsx("button",{onClick:d,disabled:m,className:"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3",children:m?e.jsx(c,{}):"Generate Changelog"})}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Generated Changelog.md"}),e.jsxs("div",{className:"relative flex-grow p-4 bg-background border border-border rounded-md overflow-y-auto",children:[m&&!r&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(c,{})}),n&&e.jsx("p",{className:"text-red-500",children:n}),r&&e.jsx(f,{content:r}),!m&&r&&e.jsx("button",{onClick:()=>navigator.clipboard.writeText(r),className:"absolute top-2 right-2 px-2 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200",children:"Copy"})]})]})]})]})};export{Fe as ChangelogGenerator};
|
| 13 |
+
//# sourceMappingURL=ChangelogGenerator-DJpWK4fB.js.map
|
assets/ChangelogGenerator-DJpWK4fB.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"ChangelogGenerator-DJpWK4fB.js","sources":["../../components/features/ChangelogGenerator.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { generateChangelogFromLogStream } from '../../services/aiService.ts';\nimport { GitBranchIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleLog = `commit 3a4b5c...\nAuthor: Dev One <dev.one@example.com>\nDate: Mon Jul 15 11:30:00 2024 -0400\n\n feat: add user login page\n\ncommit 1a2b3c...\nAuthor: Dev Two <dev.two@example.com>\nDate: Mon Jul 15 10:00:00 2024 -0400\n\n fix: correct typo in header\n`;\n\nexport const ChangelogGenerator: React.FC = () => {\n const [log, setLog] = useState(exampleLog);\n const [changelog, setChangelog] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n\n const handleGenerate = useCallback(async () => {\n if (!log.trim()) {\n setError('Please paste your git log output.');\n return;\n }\n setIsLoading(true);\n setError('');\n setChangelog('');\n try {\n const stream = generateChangelogFromLogStream(log);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setChangelog(fullResponse);\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'An unknown error occurred.');\n } finally {\n setIsLoading(false);\n }\n }, [log]);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <GitBranchIcon />\n <span className=\"ml-3\">AI Changelog Generator</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Generate a markdown changelog from your raw git log.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"commit-input\" className=\"text-sm font-medium text-text-secondary mb-2\">Raw Git Log</label>\n <textarea\n id=\"commit-input\"\n value={log}\n onChange={(e) => setLog(e.target.value)}\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm\"\n />\n </div>\n <div className=\"flex-shrink-0\">\n <button onClick={handleGenerate} disabled={isLoading} className=\"btn-primary w-full max-w-xs mx-auto flex items-center justify-center px-6 py-3\">\n {isLoading ? <LoadingSpinner /> : 'Generate Changelog'}\n </button>\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Generated Changelog.md</label>\n <div className=\"relative flex-grow p-4 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && !changelog && <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"text-red-500\">{error}</p>}\n {changelog && <MarkdownRenderer content={changelog} />}\n {!isLoading && changelog && <button onClick={() => navigator.clipboard.writeText(changelog)} className=\"absolute top-2 right-2 px-2 py-1 bg-gray-100 text-xs rounded-md hover:bg-gray-200\">Copy</button>}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleLog","ChangelogGenerator","log","setLog","useState","changelog","setChangelog","isLoading","setIsLoading","error","setError","handleGenerate","useCallback","stream","generateChangelogFromLogStream","fullResponse","chunk","err","jsxs","jsx","GitBranchIcon","e","LoadingSpinner","MarkdownRenderer"],"mappings":"koFAMA,MAAMA,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaNC,GAA+B,IAAM,CAC9C,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAASJ,CAAU,EACnC,CAACK,EAAWC,CAAY,EAAIF,EAAAA,SAAS,EAAE,EACvC,CAACG,EAAWC,CAAY,EAAIJ,EAAAA,SAAS,EAAK,EAC1C,CAACK,EAAOC,CAAQ,EAAIN,EAAAA,SAAS,EAAE,EAE/BO,EAAiBC,EAAAA,YAAY,SAAY,CAC3C,GAAI,CAACV,EAAI,OAAQ,CACbQ,EAAS,mCAAmC,EAC5C,MACJ,CACAF,EAAa,EAAI,EACjBE,EAAS,EAAE,EACXJ,EAAa,EAAE,EACf,GAAI,CACA,MAAMO,EAASC,EAA+BZ,CAAG,EACjD,IAAIa,EAAe,GACnB,gBAAiBC,KAASH,EACtBE,GAAgBC,EAChBV,EAAaS,CAAY,CAEjC,OAASE,EAAK,CACVP,EAASO,aAAe,MAAQA,EAAI,QAAU,4BAA4B,CAC9E,QAAA,CACIT,EAAa,EAAK,CACtB,CACJ,EAAG,CAACN,CAAG,CAAC,EAER,OACIgB,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACX,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,OACd,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,uCACV,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAc,EACfD,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAO,SAAA,wBAAA,CAAsB,CAAA,EACjD,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,2BAA2B,SAAA,sDAAA,CAAoD,CAAA,EAChG,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACX,SAAA,CAAAC,MAAC,QAAA,CAAM,QAAQ,eAAe,UAAU,+CAA+C,SAAA,cAAW,EAClGA,EAAAA,IAAC,WAAA,CACG,GAAG,eACH,MAAOjB,EACP,SAAWmB,GAAMlB,EAAOkB,EAAE,OAAO,KAAK,EACtC,UAAU,wFAAA,CAAA,CACd,EACJ,QACC,MAAA,CAAI,UAAU,gBACX,SAAAF,EAAAA,IAAC,UAAO,QAASR,EAAgB,SAAUJ,EAAW,UAAU,iFAC3D,SAAAA,QAAae,EAAA,EAAe,EAAK,qBACtC,EACJ,EACAJ,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACX,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,+CAA+C,SAAA,yBAAsB,EACtFD,EAAAA,KAAC,MAAA,CAAI,UAAU,uFACV,SAAA,CAAAX,GAAa,CAACF,GAAac,EAAAA,IAAC,MAAA,CAAI,UAAU,0CAA0C,SAAAA,EAAAA,IAACG,IAAe,CAAA,CAAE,EACtGb,GAASU,EAAAA,IAAC,IAAA,CAAE,UAAU,eAAgB,SAAAV,EAAM,EAC5CJ,GAAac,EAAAA,IAACI,EAAA,CAAiB,QAASlB,CAAA,CAAW,EACnD,CAACE,GAAaF,GAAac,EAAAA,IAAC,UAAO,QAAS,IAAM,UAAU,UAAU,UAAUd,CAAS,EAAG,UAAU,oFAAoF,SAAA,MAAA,CAAI,CAAA,CAAA,CACnM,CAAA,CAAA,CACJ,CAAA,CAAA,CACJ,CAAA,EACJ,CAER"}
|
assets/CiCdPipelineGenerator-DLcxfZ6N.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as e}from"./react-CIdJ77ke.js";import{ao as f,S as u,L as h,M as g,ap as j}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const b=["GitHub Actions","GitLab CI","CircleCI","Jenkins"],N="Install Node.js dependencies, run linting and tests, build the production app, and then deploy to Vercel.",qe=()=>{const[l,p]=r.useState(b[0]),[s,c]=r.useState(N),[i,d]=r.useState(""),[o,n]=r.useState(!1),[a,m]=r.useState(""),x=async()=>{if(!s.trim()){m("Please provide a description of the pipeline stages.");return}n(!0),m("");try{const t=await j(l,s);d(t)}catch(t){m(t instanceof Error?t.message:"Failed to generate config.")}finally{n(!1)}};return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(f,{}),e.jsx("span",{className:"ml-3",children:"AI CI/CD Pipeline Architect"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Describe your deployment process and get a modern configuration file."})]}),e.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm",children:"Platform"}),e.jsxs("select",{value:l,onChange:t=>p(t.target.value),className:"w-full mt-1 p-2 bg-surface border rounded",children:[e.jsx("option",{children:"GitHub Actions"}),e.jsx("option",{children:"GitLab CI"}),e.jsx("option",{children:"CircleCI"})]})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{className:"block text-sm",children:"Describe Stages"}),e.jsx("input",{type:"text",value:s,onChange:t=>c(t.target.value),className:"w-full mt-1 p-2 bg-surface border rounded"})]})]}),e.jsxs("button",{onClick:x,disabled:o,className:"btn-primary w-full max-w-xs mx-auto flex items-center justify-center py-2",children:[e.jsx(u,{})," ",o?"Generating...":"Generate Configuration"]})]}),e.jsxs("div",{className:"flex flex-col flex-grow min-h-0",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Generated Configuration File"}),e.jsxs("div",{className:"relative flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto",children:[o&&!i&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(h,{})}),a&&e.jsx("p",{className:"p-4 text-red-500",children:a}),i&&e.jsx(g,{content:i}),!o&&!i&&!a&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"Generated config will appear here."})]})]})]})]})};export{qe as CiCdPipelineGenerator};
|
| 2 |
+
//# sourceMappingURL=CiCdPipelineGenerator-DLcxfZ6N.js.map
|
assets/CiCdPipelineGenerator-DLcxfZ6N.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"CiCdPipelineGenerator-DLcxfZ6N.js","sources":["../../components/features/CiCdPipelineGenerator.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { generateCiCdConfig } from '../../services/index.ts';\nimport { PaperAirplaneIcon, SparklesIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\nconst platforms = ['GitHub Actions', 'GitLab CI', 'CircleCI', 'Jenkins'];\nconst exampleDescription = \"Install Node.js dependencies, run linting and tests, build the production app, and then deploy to Vercel.\";\n\nexport const CiCdPipelineGenerator: React.FC = () => {\n const [platform, setPlatform] = useState(platforms[0]);\n const [description, setDescription] = useState(exampleDescription);\n const [config, setConfig] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState('');\n\n const handleGenerate = async () => {\n if (!description.trim()) {\n setError('Please provide a description of the pipeline stages.');\n return;\n }\n setIsLoading(true);\n setError('');\n try {\n const result = await generateCiCdConfig(platform, description);\n setConfig(result);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to generate config.');\n } finally {\n setIsLoading(false);\n }\n };\n \n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\"><PaperAirplaneIcon /><span className=\"ml-3\">AI CI/CD Pipeline Architect</span></h1>\n <p className=\"text-text-secondary mt-1\">Describe your deployment process and get a modern configuration file.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4 mb-4\">\n <div><label className=\"block text-sm\">Platform</label><select value={platform} onChange={e => setPlatform(e.target.value)} className=\"w-full mt-1 p-2 bg-surface border rounded\"><option>GitHub Actions</option><option>GitLab CI</option><option>CircleCI</option></select></div>\n <div className=\"md:col-span-2\"><label className=\"block text-sm\">Describe Stages</label><input type=\"text\" value={description} onChange={e => setDescription(e.target.value)} className=\"w-full mt-1 p-2 bg-surface border rounded\"/></div>\n </div>\n <button onClick={handleGenerate} disabled={isLoading} className=\"btn-primary w-full max-w-xs mx-auto flex items-center justify-center py-2\"><SparklesIcon /> {isLoading ? 'Generating...' : 'Generate Configuration'}</button>\n </div>\n <div className=\"flex flex-col flex-grow min-h-0\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Generated Configuration File</label>\n <div className=\"relative flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && !config && <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"p-4 text-red-500\">{error}</p>}\n {config && <MarkdownRenderer content={config} />}\n {!isLoading && !config && !error && <div className=\"text-text-secondary h-full flex items-center justify-center\">Generated config will appear here.</div>}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["platforms","exampleDescription","CiCdPipelineGenerator","platform","setPlatform","useState","description","setDescription","config","setConfig","isLoading","setIsLoading","error","setError","handleGenerate","result","generateCiCdConfig","err","jsxs","jsx","PaperAirplaneIcon","e","SparklesIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}
|
assets/CodeDiffGhost-lnhWrBho.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as i,j as e}from"./react-CIdJ77ke.js";import{ai as f}from"./index-CX7Qxd1D.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const u=`function UserProfile({ user }) {
|
| 2 |
+
return (
|
| 3 |
+
<div className="profile">
|
| 4 |
+
<h1>{user.name}</h1>
|
| 5 |
+
<p>{user.email}</p>
|
| 6 |
+
</div>
|
| 7 |
+
);
|
| 8 |
+
}`,x=`function UserProfile({ user }) {
|
| 9 |
+
const { name, email, avatar } = user;
|
| 10 |
+
return (
|
| 11 |
+
<div className="profile-card">
|
| 12 |
+
<img src={avatar} alt={name} />
|
| 13 |
+
<h2>{name}</h2>
|
| 14 |
+
<a href={\`mailto:\${email}\`}>{email}</a>
|
| 15 |
+
</div>
|
| 16 |
+
);
|
| 17 |
+
}`,De=()=>{const[p,n]=i.useState(u),[o,c]=i.useState(x),[a,m]=i.useState(""),[s,l]=i.useState(!1),t=i.useRef(null),d=()=>{t.current&&clearInterval(t.current),l(!0),m(""),t.current=window.setInterval(()=>{m(r=>r.length<o.length?o.substring(0,r.length+1):(t.current&&clearInterval(t.current),l(!1),o))},15)};return i.useEffect(()=>()=>{t.current&&clearInterval(t.current)},[]),e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl flex items-center",children:[e.jsx(f,{}),e.jsx("span",{className:"ml-3",children:"Code Diff Ghost"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:'Visualize code changes with a "ghost typing" effect.'})]}),e.jsx("div",{className:"flex justify-center mb-4",children:e.jsx("button",{onClick:d,disabled:s,className:"btn-primary px-6 py-2",children:s?"Visualizing...":"Show Changes"})}),e.jsxs("div",{className:"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 h-full overflow-hidden font-mono text-sm",children:[e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsx("label",{htmlFor:"before-code",className:"text-sm font-medium text-text-secondary mb-2",children:"Before"}),e.jsx("textarea",{id:"before-code",value:p,onChange:r=>n(r.target.value),className:"flex-grow p-4 bg-surface border border-border rounded-md text-red-600 whitespace-pre-wrap resize-none",spellCheck:"false"})]}),e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsx("label",{htmlFor:"after-code",className:"text-sm font-medium text-text-secondary mb-2",children:"After"}),e.jsxs("div",{className:"relative flex-grow",children:[e.jsx("textarea",{id:"after-code",value:o,onChange:r=>c(r.target.value),className:"absolute inset-0 w-full h-full p-4 bg-surface border border-border rounded-md text-emerald-700 whitespace-pre-wrap resize-none z-0",spellCheck:"false"}),(s||a)&&e.jsxs("pre",{className:"absolute inset-0 w-full h-full p-4 bg-surface pointer-events-none text-emerald-700 whitespace-pre-wrap z-10",children:[a,s&&e.jsx("span",{className:"animate-pulse",children:"|"})]})]})]})]})]})};export{De as CodeDiffGhost};
|
| 18 |
+
//# sourceMappingURL=CodeDiffGhost-lnhWrBho.js.map
|
assets/CodeDiffGhost-lnhWrBho.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"CodeDiffGhost-lnhWrBho.js","sources":["../../components/features/CodeDiffGhost.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { EyeIcon } from '../icons.tsx';\n\nconst initialOldCode = `function UserProfile({ user }) {\n return (\n <div className=\"profile\">\n <h1>{user.name}</h1>\n <p>{user.email}</p>\n </div>\n );\n}`;\n\nconst initialNewCode = `function UserProfile({ user }) {\n const { name, email, avatar } = user;\n return (\n <div className=\"profile-card\">\n <img src={avatar} alt={name} />\n <h2>{name}</h2>\n <a href={\\`mailto:\\${email}\\`}>{email}</a>\n </div>\n );\n}`;\n\nexport const CodeDiffGhost: React.FC = () => {\n const [oldCode, setOldCode] = useState(initialOldCode);\n const [newCode, setNewCode] = useState(initialNewCode);\n const [typedCode, setTypedCode] = useState('');\n const [isRunning, setIsRunning] = useState(false);\n const intervalRef = useRef<number | null>(null);\n\n const startAnimation = () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n setIsRunning(true);\n setTypedCode('');\n \n intervalRef.current = window.setInterval(() => {\n setTypedCode(prev => {\n if (prev.length < newCode.length) {\n return newCode.substring(0, prev.length + 1);\n }\n if (intervalRef.current) clearInterval(intervalRef.current);\n setIsRunning(false);\n return newCode;\n });\n }, 15);\n };\n\n useEffect(() => {\n return () => {\n if (intervalRef.current) clearInterval(intervalRef.current);\n };\n }, []);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl flex items-center\">\n <EyeIcon />\n <span className=\"ml-3\">Code Diff Ghost</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Visualize code changes with a \"ghost typing\" effect.</p>\n </header>\n <div className=\"flex justify-center mb-4\">\n <button\n onClick={startAnimation}\n disabled={isRunning}\n className=\"btn-primary px-6 py-2\"\n >\n {isRunning ? 'Visualizing...' : 'Show Changes'}\n </button>\n </div>\n <div className=\"flex-grow grid grid-cols-1 lg:grid-cols-2 gap-6 h-full overflow-hidden font-mono text-sm\">\n <div className=\"flex flex-col h-full\">\n <label htmlFor=\"before-code\" className=\"text-sm font-medium text-text-secondary mb-2\">Before</label>\n <textarea\n id=\"before-code\"\n value={oldCode}\n onChange={e => setOldCode(e.target.value)}\n className=\"flex-grow p-4 bg-surface border border-border rounded-md text-red-600 whitespace-pre-wrap resize-none\"\n spellCheck=\"false\"\n />\n </div>\n <div className=\"flex flex-col h-full\">\n <label htmlFor=\"after-code\" className=\"text-sm font-medium text-text-secondary mb-2\">After</label>\n <div className=\"relative flex-grow\">\n <textarea\n id=\"after-code\"\n value={newCode}\n onChange={e => setNewCode(e.target.value)}\n className=\"absolute inset-0 w-full h-full p-4 bg-surface border border-border rounded-md text-emerald-700 whitespace-pre-wrap resize-none z-0\"\n spellCheck=\"false\"\n />\n {(isRunning || typedCode) && (\n <pre className=\"absolute inset-0 w-full h-full p-4 bg-surface pointer-events-none text-emerald-700 whitespace-pre-wrap z-10\">\n {typedCode}{isRunning && <span className=\"animate-pulse\">|</span>}\n </pre>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["initialOldCode","initialNewCode","CodeDiffGhost","oldCode","setOldCode","useState","newCode","setNewCode","typedCode","setTypedCode","isRunning","setIsRunning","intervalRef","useRef","startAnimation","prev","useEffect","jsxs","jsx","EyeIcon","e"],"mappings":"6mFAGA,MAAMA,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASjBC,EAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWVC,GAA0B,IAAM,CACzC,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAASL,CAAc,EAC/C,CAACM,EAASC,CAAU,EAAIF,EAAAA,SAASJ,CAAc,EAC/C,CAACO,EAAWC,CAAY,EAAIJ,EAAAA,SAAS,EAAE,EACvC,CAACK,EAAWC,CAAY,EAAIN,EAAAA,SAAS,EAAK,EAC1CO,EAAcC,EAAAA,OAAsB,IAAI,EAExCC,EAAiB,IAAM,CACrBF,EAAY,SAAS,cAAcA,EAAY,OAAO,EAC1DD,EAAa,EAAI,EACjBF,EAAa,EAAE,EAEfG,EAAY,QAAU,OAAO,YAAY,IAAM,CAC3CH,EAAaM,GACLA,EAAK,OAAST,EAAQ,OACfA,EAAQ,UAAU,EAAGS,EAAK,OAAS,CAAC,GAE3CH,EAAY,SAAS,cAAcA,EAAY,OAAO,EAC1DD,EAAa,EAAK,EACXL,EACV,CACL,EAAG,EAAE,CACT,EAEAU,OAAAA,EAAAA,UAAU,IACC,IAAM,CACLJ,EAAY,SAAS,cAAcA,EAAY,OAAO,CAC9D,EACD,CAAA,CAAE,EAGDK,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACX,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,OACd,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,6BACV,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAQ,EACTD,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAO,SAAA,iBAAA,CAAe,CAAA,EAC1C,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,2BAA2B,SAAA,sDAAA,CAAoD,CAAA,EAChG,EACAA,EAAAA,IAAC,MAAA,CAAI,UAAU,2BACX,SAAAA,EAAAA,IAAC,SAAA,CACG,QAASJ,EACT,SAAUJ,EACV,UAAU,wBAET,WAAY,iBAAmB,cAAA,CAAA,EAExC,EACAO,EAAAA,KAAC,MAAA,CAAI,UAAU,2FACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACX,SAAA,CAAAC,MAAC,QAAA,CAAM,QAAQ,cAAc,UAAU,+CAA+C,SAAA,SAAM,EAC5FA,EAAAA,IAAC,WAAA,CACG,GAAG,cACH,MAAOf,EACP,SAAUiB,GAAKhB,EAAWgB,EAAE,OAAO,KAAK,EACxC,UAAU,wGACV,WAAW,OAAA,CAAA,CACf,EACJ,EACCH,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACZ,SAAA,CAAAC,MAAC,QAAA,CAAM,QAAQ,aAAa,UAAU,+CAA+C,SAAA,QAAK,EACzFD,EAAAA,KAAC,MAAA,CAAI,UAAU,qBACZ,SAAA,CAAAC,EAAAA,IAAC,WAAA,CACG,GAAG,aACH,MAAOZ,EACP,SAAUc,GAAKb,EAAWa,EAAE,OAAO,KAAK,EACxC,UAAU,qIACV,WAAW,OAAA,CAAA,GAEbV,GAAaF,IACXS,EAAAA,KAAC,MAAA,CAAI,UAAU,8GACV,SAAA,CAAAT,EAAWE,GAAaQ,EAAAA,IAAC,OAAA,CAAK,UAAU,gBAAgB,SAAA,GAAA,CAAC,CAAA,CAAA,CAC9D,CAAA,CAAA,CAER,CAAA,CAAA,CACJ,CAAA,CAAA,CACJ,CAAA,EACJ,CAER"}
|
assets/CodeFormatter-CUVz-f5Q.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as t}from"./react-CIdJ77ke.js";import{U as u,O as h,L as c,M as j}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const g=`const MyComponent = (props) => {
|
| 2 |
+
const {name, items}=props
|
| 3 |
+
if(!items || items.length === 0){
|
| 4 |
+
return <p>No items found for {name}</p>;
|
| 5 |
+
}
|
| 6 |
+
return <ul>{items.map(item=> <li key={item.id}>{item.name}</li>)}</ul>
|
| 7 |
+
}`,Bt=()=>{const[o,d]=r.useState(g),[m,l]=r.useState(""),[i,n]=r.useState(!1),[a,p]=r.useState(""),x=r.useCallback(async()=>{if(!o.trim()){p("Please enter some code to format.");return}n(!0),p(""),l("");try{const e=u(o);let s="";for await(const f of e)s+=f,l(s)}catch(e){const s=e instanceof Error?e.message:"An unknown error occurred.";p(`Failed to format code: ${s}`)}finally{n(!1)}},[o]);return t.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[t.jsxs("header",{className:"mb-6",children:[t.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[t.jsx(h,{}),t.jsx("span",{className:"ml-3",children:"AI Code Formatter"})]}),t.jsx("p",{className:"text-text-secondary mt-1",children:"Clean up your code with AI-powered formatting, like a smart Prettier."})]}),t.jsxs("div",{className:"flex-grow flex flex-col min-h-0",children:[t.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6 flex-grow min-h-0",children:[t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx("label",{htmlFor:"code-input",className:"text-sm font-medium text-text-secondary mb-2",children:"Input"}),t.jsx("textarea",{id:"code-input",value:o,onChange:e=>d(e.target.value),placeholder:"Paste your unformatted code here...",className:"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm"})]}),t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Output"}),t.jsxs("div",{className:"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto",children:[i&&!m&&t.jsx("div",{className:"flex items-center justify-center h-full",children:t.jsx(c,{})}),a&&t.jsx("p",{className:"p-4 text-red-500",children:a}),m&&t.jsx(j,{content:m}),!i&&!m&&!a&&t.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"Formatted code will appear here."})]})]})]}),t.jsx("button",{onClick:x,disabled:i,className:"btn-primary mt-4 w-full max-w-sm mx-auto flex items-center justify-center px-6 py-3",children:i?t.jsx(c,{}):"Format Code"})]})]})};export{Bt as CodeFormatter};
|
| 8 |
+
//# sourceMappingURL=CodeFormatter-CUVz-f5Q.js.map
|
assets/CodeFormatter-CUVz-f5Q.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"CodeFormatter-CUVz-f5Q.js","sources":["../../components/features/CodeFormatter.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { formatCodeStream } from '../../services/index.ts';\nimport { CodeBracketSquareIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleCode = `const MyComponent = (props) => {\n const {name, items}=props\n if(!items || items.length === 0){\n return <p>No items found for {name}</p>;\n }\n return <ul>{items.map(item=> <li key={item.id}>{item.name}</li>)}</ul>\n}`;\n\nexport const CodeFormatter: React.FC = () => {\n const [inputCode, setInputCode] = useState<string>(exampleCode);\n const [formattedCode, setFormattedCode] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n\n const handleFormat = useCallback(async () => {\n if (!inputCode.trim()) {\n setError('Please enter some code to format.');\n return;\n }\n setIsLoading(true);\n setError('');\n setFormattedCode('');\n try {\n const stream = formatCodeStream(inputCode);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setFormattedCode(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to format code: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, [inputCode]);\n \n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <CodeBracketSquareIcon />\n <span className=\"ml-3\">AI Code Formatter</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Clean up your code with AI-powered formatting, like a smart Prettier.</p>\n </header>\n <div className=\"flex-grow flex flex-col min-h-0\">\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 flex-grow min-h-0\">\n <div className=\"flex flex-col h-full\">\n <label htmlFor=\"code-input\" className=\"text-sm font-medium text-text-secondary mb-2\">Input</label>\n <textarea\n id=\"code-input\"\n value={inputCode}\n onChange={(e) => setInputCode(e.target.value)}\n placeholder=\"Paste your unformatted code here...\"\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm\"\n />\n </div>\n <div className=\"flex flex-col h-full\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Output</label>\n <div className=\"flex-grow p-1 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && !formattedCode && (\n <div className=\"flex items-center justify-center h-full\">\n <LoadingSpinner />\n </div>\n )}\n {error && <p className=\"p-4 text-red-500\">{error}</p>}\n {formattedCode && <MarkdownRenderer content={formattedCode} />}\n {!isLoading && !formattedCode && !error && (\n <div className=\"text-text-secondary h-full flex items-center justify-center\">\n Formatted code will appear here.\n </div>\n )}\n </div>\n </div>\n </div>\n <button\n onClick={handleFormat}\n disabled={isLoading}\n className=\"btn-primary mt-4 w-full max-w-sm mx-auto flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Format Code'}\n </button>\n </div>\n </div>\n );\n};"],"names":["exampleCode","CodeFormatter","inputCode","setInputCode","useState","formattedCode","setFormattedCode","isLoading","setIsLoading","error","setError","handleFormat","useCallback","stream","formatCodeStream","fullResponse","chunk","err","errorMessage","jsxs","jsx","CodeBracketSquareIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"svFAMA,MAAMA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQPC,GAA0B,IAAM,CACzC,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAiBJ,CAAW,EACxD,CAACK,EAAeC,CAAgB,EAAIF,EAAAA,SAAiB,EAAE,EACvD,CAACG,EAAWC,CAAY,EAAIJ,EAAAA,SAAkB,EAAK,EACnD,CAACK,EAAOC,CAAQ,EAAIN,EAAAA,SAAiB,EAAE,EAEvCO,EAAeC,EAAAA,YAAY,SAAY,CACzC,GAAI,CAACV,EAAU,OAAQ,CACnBQ,EAAS,mCAAmC,EAC5C,MACJ,CACAF,EAAa,EAAI,EACjBE,EAAS,EAAE,EACXJ,EAAiB,EAAE,EACnB,GAAI,CACA,MAAMO,EAASC,EAAiBZ,CAAS,EACzC,IAAIa,EAAe,GACnB,gBAAiBC,KAASH,EACtBE,GAAgBC,EAChBV,EAAiBS,CAAY,CAErC,OAASE,EAAK,CACV,MAAMC,EAAeD,aAAe,MAAQA,EAAI,QAAU,6BAC1DP,EAAS,0BAA0BQ,CAAY,EAAE,CACrD,QAAA,CACIV,EAAa,EAAK,CACtB,CACJ,EAAG,CAACN,CAAS,CAAC,EAEd,OACIiB,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACX,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,OACd,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,uCACV,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAsB,EACvBD,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAO,SAAA,mBAAA,CAAiB,CAAA,EAC5C,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,2BAA2B,SAAA,uEAAA,CAAqE,CAAA,EACjH,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0DACX,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACX,SAAA,CAAAC,MAAC,QAAA,CAAM,QAAQ,aAAa,UAAU,+CAA+C,SAAA,QAAK,EAC1FA,EAAAA,IAAC,WAAA,CACG,GAAG,aACH,MAAOlB,EACP,SAAW,GAAMC,EAAa,EAAE,OAAO,KAAK,EAC5C,YAAY,sCACZ,UAAU,wFAAA,CAAA,CACd,EACJ,EACAgB,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACX,SAAA,CAAAC,EAAAA,IAAC,QAAA,CAAM,UAAU,+CAA+C,SAAA,SAAM,EACtED,EAAAA,KAAC,MAAA,CAAI,UAAU,8EACX,SAAA,CAAAZ,GAAa,CAACF,GACVe,EAAAA,IAAC,MAAA,CAAI,UAAU,0CACX,SAAAA,EAAAA,IAACE,IAAe,CAAA,CACpB,EAEHb,GAASW,EAAAA,IAAC,IAAA,CAAE,UAAU,mBAAoB,SAAAX,EAAM,EAChDJ,GAAiBe,EAAAA,IAACG,EAAA,CAAiB,QAASlB,CAAA,CAAe,EAC3D,CAACE,GAAa,CAACF,GAAiB,CAACI,GAC9BW,EAAAA,IAAC,MAAA,CAAI,UAAU,8DAA8D,SAAA,kCAAA,CAE7E,CAAA,CAAA,CAER,CAAA,CAAA,CACJ,CAAA,EACJ,EACCA,EAAAA,IAAC,SAAA,CACE,QAAST,EACT,SAAUJ,EACV,UAAU,sFAET,SAAAA,EAAYa,EAAAA,IAACE,EAAA,CAAA,CAAe,EAAK,aAAA,CAAA,CACtC,CAAA,CACJ,CAAA,EACJ,CAER"}
|
assets/CodeReviewBot-sTSKCXp_.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as s,j as e}from"./react-CIdJ77ke.js";import{a2 as b,k as w,L as u,M as y}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import{u as g,f as N}from"./promptUtils-BE1ZWeM-.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const C=`function UserList(users) {
|
| 2 |
+
if (users.length = 0) {
|
| 3 |
+
return "no users";
|
| 4 |
+
} else {
|
| 5 |
+
return (
|
| 6 |
+
users.map(u => {
|
| 7 |
+
return <li>{u.name}</li>
|
| 8 |
+
})
|
| 9 |
+
)
|
| 10 |
+
}
|
| 11 |
+
}`,Ke=()=>{const[i,f]=s.useState(C),[m,d]=s.useState(""),[l,x]=s.useState(!1),[n,p]=s.useState(""),[c]=g(),[a,h]=s.useState("default"),j=s.useCallback(async()=>{if(!i.trim()){p("Please enter some code to review.");return}x(!0),p(""),d("");let t;if(a!=="default"){const r=c.find(o=>o.id===a);r&&(t=N(r))}try{const r=b(i,t);let o="";for await(const v of r)o+=v,d(o)}catch(r){const o=r instanceof Error?r.message:"An unknown error occurred.";p(`Failed to get review: ${o}`)}finally{x(!1)}},[i,a,c]);return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(w,{}),e.jsx("span",{className:"ml-3",children:"AI Code Review Bot"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Get an automated code review from Gemini."})]}),e.jsxs("div",{className:"flex-grow flex flex-col gap-4 min-h-0",children:[e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{htmlFor:"code-input",className:"text-sm font-medium text-text-secondary mb-2",children:"Code to Review"}),e.jsx("textarea",{id:"code-input",value:i,onChange:t=>f(t.target.value),placeholder:"Paste your code here...",className:"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm"})]}),e.jsxs("div",{className:"flex-shrink-0 flex items-center justify-center gap-4",children:[e.jsxs("div",{className:"w-full max-w-xs",children:[e.jsx("label",{htmlFor:"personality-select",className:"text-sm font-medium text-text-secondary",children:"Reviewer Personality"}),e.jsxs("select",{id:"personality-select",value:a,onChange:t=>h(t.target.value),className:"w-full mt-1 p-2 bg-surface border border-border rounded-md text-sm",children:[e.jsx("option",{value:"default",children:"Default"}),c.map(t=>e.jsx("option",{value:t.id,children:t.name},t.id))]})]}),e.jsx("button",{onClick:j,disabled:l,className:"btn-primary self-end h-[42px] w-full max-w-xs flex items-center justify-center px-6 py-3",children:l?e.jsx(u,{}):"Request Review"})]}),e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"AI Feedback"}),e.jsxs("div",{className:"flex-grow p-4 bg-background border border-border rounded-md overflow-y-auto",children:[l&&!m&&e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx(u,{})}),n&&e.jsx("p",{className:"text-red-500",children:n}),m&&e.jsx(y,{content:m}),!l&&!m&&!n&&e.jsx("div",{className:"text-text-secondary h-full flex items-center justify-center",children:"Review will appear here."})]})]})]})]})};export{Ke as CodeReviewBot};
|
| 12 |
+
//# sourceMappingURL=CodeReviewBot-sTSKCXp_.js.map
|
assets/CodeReviewBot-sTSKCXp_.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"CodeReviewBot-sTSKCXp_.js","sources":["../../components/features/CodeReviewBot.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { reviewCodeStream } from '../../services/index.ts';\nimport { useAiPersonalities } from '../../hooks/useAiPersonalities.ts';\nimport { formatSystemPromptToString } from '../../utils/promptUtils.ts';\nimport { CpuChipIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\nimport { MarkdownRenderer } from '../shared/index.tsx';\n\nconst exampleCode = `function UserList(users) {\n if (users.length = 0) {\n return \"no users\";\n } else {\n return (\n users.map(u => {\n return <li>{u.name}</li>\n })\n )\n }\n}`;\n\nexport const CodeReviewBot: React.FC = () => {\n const [code, setCode] = useState<string>(exampleCode);\n const [review, setReview] = useState<string>('');\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n const [personalities] = useAiPersonalities();\n const [selectedPersonalityId, setSelectedPersonalityId] = useState<string>('default');\n\n const handleGenerate = useCallback(async () => {\n if (!code.trim()) {\n setError('Please enter some code to review.');\n return;\n }\n setIsLoading(true);\n setError('');\n setReview('');\n\n let systemInstruction: string | undefined = undefined;\n if (selectedPersonalityId !== 'default') {\n const personality = personalities.find(p => p.id === selectedPersonalityId);\n if (personality) {\n systemInstruction = formatSystemPromptToString(personality);\n }\n }\n\n try {\n const stream = reviewCodeStream(code, systemInstruction);\n let fullResponse = '';\n for await (const chunk of stream) {\n fullResponse += chunk;\n setReview(fullResponse);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to get review: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, [code, selectedPersonalityId, personalities]);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <CpuChipIcon />\n <span className=\"ml-3\">AI Code Review Bot</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Get an automated code review from Gemini.</p>\n </header>\n <div className=\"flex-grow flex flex-col gap-4 min-h-0\">\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label htmlFor=\"code-input\" className=\"text-sm font-medium text-text-secondary mb-2\">Code to Review</label>\n <textarea\n id=\"code-input\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n placeholder=\"Paste your code here...\"\n className=\"flex-grow p-4 bg-surface border border-border rounded-md resize-none font-mono text-sm\"\n />\n </div>\n <div className=\"flex-shrink-0 flex items-center justify-center gap-4\">\n <div className=\"w-full max-w-xs\">\n <label htmlFor=\"personality-select\" className=\"text-sm font-medium text-text-secondary\">Reviewer Personality</label>\n <select\n id=\"personality-select\"\n value={selectedPersonalityId}\n onChange={e => setSelectedPersonalityId(e.target.value)}\n className=\"w-full mt-1 p-2 bg-surface border border-border rounded-md text-sm\"\n >\n <option value=\"default\">Default</option>\n {personalities.map(p => (\n <option key={p.id} value={p.id}>{p.name}</option>\n ))}\n </select>\n </div>\n <button\n onClick={handleGenerate}\n disabled={isLoading}\n className=\"btn-primary self-end h-[42px] w-full max-w-xs flex items-center justify-center px-6 py-3\"\n >\n {isLoading ? <LoadingSpinner /> : 'Request Review'}\n </button>\n </div>\n <div className=\"flex flex-col flex-1 min-h-0\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">AI Feedback</label>\n <div className=\"flex-grow p-4 bg-background border border-border rounded-md overflow-y-auto\">\n {isLoading && !review && <div className=\"flex items-center justify-center h-full\"><LoadingSpinner /></div>}\n {error && <p className=\"text-red-500\">{error}</p>}\n {review && <MarkdownRenderer content={review} />}\n {!isLoading && !review && !error && <div className=\"text-text-secondary h-full flex items-center justify-center\">Review will appear here.</div>}\n </div>\n </div>\n </div>\n </div>\n );\n};"],"names":["exampleCode","CodeReviewBot","code","setCode","useState","review","setReview","isLoading","setIsLoading","error","setError","personalities","useAiPersonalities","selectedPersonalityId","setSelectedPersonalityId","handleGenerate","useCallback","systemInstruction","personality","p","formatSystemPromptToString","stream","reviewCodeStream","fullResponse","chunk","err","errorMessage","jsxs","jsx","CpuChipIcon","e","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}
|
assets/CodeSpellChecker-B0VPiJ9S.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as m,j as t,R as p}from"./react-CIdJ77ke.js";import{B as s}from"./index-CX7Qxd1D.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";const a=["funtion","functoin","funciton","contructor","cosntructor","consle","conosle","cosnole","varable","varaible","vairable","docment","docuemnt","docmunet","componnet","componenet","compnent","retunr","retrun","asnyc","asycn","awai","awiat","promse","resolv","rejct","catach","thne","lenght","lengt","prperty","undefinded","nul","booleon","numbar","srtring","arrya","objcet","elemnt","attriubte","eveent","listner","handeler","clieck","submitt","resposne","requset","stauts","eror","sucess","implemnt","overide","extned","pbulic","prvate","procted","statci","abstact","interace","enmu","moduel","packge","importt","exprot","defualt","namspace","tyep","clsas","whiel","swich","cse","brek","contiune","thrwo","finnaly"],i=new RegExp(`\\b(${a.join("|")})\\b`,"gi"),c=p.memo(({text:e})=>{const o=m.useMemo(()=>e.split(i).map((r,n)=>i.test(r)?t.jsx("span",{className:"underline decoration-red-500 decoration-wavy",title:"Possible typo",children:r},n):r),[e]);return t.jsx(t.Fragment,{children:o})}),Et=()=>{const[e,o]=m.useState(`funtion myFunction() {
|
| 2 |
+
consle.log("Hello World");
|
| 3 |
+
const myVarable = docment.getElementById("root");
|
| 4 |
+
// This is a React componnet
|
| 5 |
+
}`);return t.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[t.jsxs("header",{className:"mb-6",children:[t.jsxs("h1",{className:"text-3xl flex items-center",children:[t.jsx(s,{}),t.jsx("span",{className:"ml-3",children:"Code Spell Checker"})]}),t.jsx("p",{className:"text-text-secondary mt-1",children:"A simple tool that finds and highlights common typos in code."})]}),t.jsxs("div",{className:"relative flex-grow font-mono text-sm bg-surface border border-border rounded-lg p-4 overflow-auto",children:[t.jsx("textarea",{value:e,onChange:r=>o(r.target.value),className:"absolute inset-0 w-full h-full p-4 bg-transparent text-transparent caret-primary resize-none z-10",spellCheck:"false"}),t.jsx("pre",{className:"absolute inset-0 w-full h-full p-4 pointer-events-none whitespace-pre-wrap","aria-hidden":"true",children:t.jsx(c,{text:e})})]}),t.jsx("p",{className:"text-xs text-text-secondary mt-2 text-center",children:"This checker uses a predefined list of common typos and does not use AI."})]})};export{Et as CodeSpellChecker};
|
| 6 |
+
//# sourceMappingURL=CodeSpellChecker-B0VPiJ9S.js.map
|
assets/CodeSpellChecker-B0VPiJ9S.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"CodeSpellChecker-B0VPiJ9S.js","sources":["../../components/features/CodeSpellChecker.tsx"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport { BeakerIcon } from '../icons.tsx';\n\nconst commonTypos = [\n 'funtion', 'functoin', 'funciton', 'contructor', 'cosntructor',\n 'consle', 'conosle', 'cosnole', 'varable', 'varaible', 'vairable',\n 'docment', 'docuemnt', 'docmunet', 'componnet', 'componenet', 'compnent',\n 'retunr', 'retrun', 'asnyc', 'asycn', 'awai', 'awiat', 'promse',\n 'resolv', 'rejct', 'catach', 'thne', 'lenght', 'lengt', 'prperty',\n 'undefinded', 'nul', 'booleon', 'numbar', 'srtring', 'arrya', 'objcet',\n 'elemnt', 'attriubte', 'eveent', 'listner', 'handeler', 'clieck',\n 'submitt', 'resposne', 'requset', 'stauts', 'eror', 'sucess',\n 'implemnt', 'overide', 'extned', 'pbulic', 'prvate', 'procted',\n 'statci', 'abstact', 'interace', 'enmu', 'moduel', 'packge',\n 'importt', 'exprot', 'defualt', 'namspace', 'tyep', 'clsas',\n 'whiel', 'swich', 'cse', 'brek', 'contiune', 'thrwo', 'finnaly'\n];\n\nconst typoRegex = new RegExp(`\\\\b(${commonTypos.join('|')})\\\\b`, 'gi');\n\nconst HighlightedText: React.FC<{ text: string }> = React.memo(({ text }) => {\n const parts = useMemo(() => {\n return text.split(typoRegex).map((part, i) => {\n if (typoRegex.test(part)) {\n return <span key={i} className=\"underline decoration-red-500 decoration-wavy\" title={`Possible typo`}>{part}</span>;\n }\n return part;\n });\n }, [text]);\n\n return <>{parts}</>;\n});\n\nexport const CodeSpellChecker: React.FC = () => {\n const [code, setCode] = useState('funtion myFunction() {\\n consle.log(\"Hello World\");\\n const myVarable = docment.getElementById(\"root\");\\n // This is a React componnet\\n}');\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl flex items-center\">\n <BeakerIcon />\n <span className=\"ml-3\">Code Spell Checker</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">A simple tool that finds and highlights common typos in code.</p>\n </header>\n <div className=\"relative flex-grow font-mono text-sm bg-surface border border-border rounded-lg p-4 overflow-auto\">\n <textarea\n value={code}\n onChange={(e) => setCode(e.target.value)}\n className=\"absolute inset-0 w-full h-full p-4 bg-transparent text-transparent caret-primary resize-none z-10\"\n spellCheck=\"false\"\n />\n <pre className=\"absolute inset-0 w-full h-full p-4 pointer-events-none whitespace-pre-wrap\" aria-hidden=\"true\">\n <HighlightedText text={code} />\n </pre>\n </div>\n <p className=\"text-xs text-text-secondary mt-2 text-center\">This checker uses a predefined list of common typos and does not use AI.</p>\n </div>\n );\n};"],"names":["commonTypos","typoRegex","HighlightedText","React","text","parts","useMemo","part","i","CodeSpellChecker","code","setCode","useState","jsxs","jsx","BeakerIcon","e"],"mappings":"mnFAGA,MAAMA,EAAc,CAChB,UAAW,WAAY,WAAY,aAAc,cACjD,SAAU,UAAW,UAAW,UAAW,WAAY,WACvD,UAAW,WAAY,WAAY,YAAa,aAAc,WAC9D,SAAU,SAAU,QAAS,QAAS,OAAQ,QAAS,SACvD,SAAU,QAAS,SAAU,OAAQ,SAAU,QAAS,UACxD,aAAc,MAAO,UAAW,SAAU,UAAW,QAAS,SAC9D,SAAU,YAAa,SAAU,UAAW,WAAY,SACxD,UAAW,WAAY,UAAW,SAAU,OAAQ,SACpD,WAAY,UAAW,SAAU,SAAU,SAAU,UACrD,SAAU,UAAW,WAAY,OAAQ,SAAU,SACnD,UAAW,SAAU,UAAW,WAAY,OAAQ,QACpD,QAAS,QAAS,MAAO,OAAQ,WAAY,QAAS,SAC1D,EAEMC,EAAY,IAAI,OAAO,OAAOD,EAAY,KAAK,GAAG,CAAC,OAAQ,IAAI,EAE/DE,EAA8CC,EAAM,KAAK,CAAC,CAAE,KAAAC,KAAW,CACzE,MAAMC,EAAQC,EAAAA,QAAQ,IACXF,EAAK,MAAMH,CAAS,EAAE,IAAI,CAACM,EAAMC,IAChCP,EAAU,KAAKM,CAAI,QACX,OAAA,CAAa,UAAU,+CAA+C,MAAO,gBAAkB,YAArFC,CAA0F,EAEzGD,CACV,EACF,CAACH,CAAI,CAAC,EAET,yBAAU,SAAAC,CAAA,CAAM,CACpB,CAAC,EAEYI,GAA6B,IAAM,CAC5C,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS;AAAA;AAAA;AAAA;AAAA,EAA8I,EAE/K,OACIC,EAAAA,KAAC,MAAA,CAAI,UAAU,2DACX,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,OACd,SAAA,CAAAA,EAAAA,KAAC,KAAA,CAAG,UAAU,6BACV,SAAA,CAAAC,EAAAA,IAACC,EAAA,EAAW,EACZD,EAAAA,IAAC,OAAA,CAAK,UAAU,OAAO,SAAA,oBAAA,CAAkB,CAAA,EAC7C,EACAA,EAAAA,IAAC,IAAA,CAAE,UAAU,2BAA2B,SAAA,+DAAA,CAA6D,CAAA,EACzG,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,oGACX,SAAA,CAAAC,EAAAA,IAAC,WAAA,CACG,MAAOJ,EACP,SAAWM,GAAML,EAAQK,EAAE,OAAO,KAAK,EACvC,UAAU,oGACV,WAAW,OAAA,CAAA,EAEfF,EAAAA,IAAC,MAAA,CAAI,UAAU,6EAA6E,cAAY,OACpG,SAAAA,EAAAA,IAACZ,EAAA,CAAgB,KAAMQ,CAAA,CAAM,CAAA,CACjC,CAAA,EACJ,EACCI,EAAAA,IAAC,IAAA,CAAE,UAAU,+CAA+C,SAAA,0EAAA,CAAwE,CAAA,EACzI,CAER"}
|
assets/ColorPaletteGenerator-D2lyyWod.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r as c,j as e}from"./react-CIdJ77ke.js";import{Z as C}from"./react-colorful-vLUrq4A0.js";import{aj as v,S as w,L as g,J as u}from"./index-CX7Qxd1D.js";import{d as f}from"./fileUtils-DLahR3l0.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const N=({palette:i,colors:s,setColors:l})=>{const n=({label:r,value:o,onChange:p})=>e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("label",{className:"text-text-primary",children:r}),e.jsx("div",{className:"flex items-center gap-2",children:i.map(a=>e.jsx("button",{onClick:()=>p(a),className:`w-5 h-5 rounded-full border border-gray-300 ${o===a?"ring-2 ring-primary ring-offset-1":""}`,style:{backgroundColor:a},title:a},a))})]});return e.jsxs("div",{className:"bg-surface p-4 rounded-lg border border-border w-full max-w-sm",children:[e.jsx("h3",{className:"text-lg font-bold mb-4 text-text-primary",children:"Live Preview"}),e.jsxs("div",{className:"p-8 rounded-xl mb-4",style:{backgroundColor:s.cardBg},children:[e.jsx("div",{className:"px-4 py-1 rounded-full text-center text-sm inline-block",style:{backgroundColor:s.pillBg,color:s.pillText},children:"New Feature"}),e.jsx("div",{className:"mt-8 text-center",children:e.jsx("button",{className:"px-6 py-2 rounded-lg font-bold",style:{backgroundColor:s.buttonBg,color:s.cardBg},children:"Get Started"})})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(n,{label:"Card Background",value:s.cardBg,onChange:r=>l(o=>({...o,cardBg:r}))}),e.jsx(n,{label:"Pill Background",value:s.pillBg,onChange:r=>l(o=>({...o,pillBg:r}))}),e.jsx(n,{label:"Pill Text",value:s.pillText,onChange:r=>l(o=>({...o,pillText:r}))}),e.jsx(n,{label:"Button Background",value:s.buttonBg,onChange:r=>l(o=>({...o,buttonBg:r}))})]})]})},Ke=()=>{const[i,s]=c.useState("#0047AB"),[l,n]=c.useState(["#F0F2F5","#CCD3E8","#99AADD","#6688D1","#3366CC","#0047AB"]),[r,o]=c.useState(!1),[p,a]=c.useState(""),[m,b]=c.useState({cardBg:"#F0F2F5",pillBg:"#CCD3E8",pillText:"#0047AB",buttonBg:"#0047AB"}),h=c.useCallback(async()=>{o(!0),a("");try{const t=await v(i);n(t.colors),b({cardBg:t.colors[0],pillBg:t.colors[2],pillText:t.colors[5],buttonBg:t.colors[5]})}catch(t){const d=t instanceof Error?t.message:"An unknown error occurred.";a(`Failed to generate palette: ${d}`)}finally{o(!1)}},[i]),j=()=>{const t=`:root {
|
| 2 |
+
${l.map((d,x)=>` --color-palette-${x+1}: ${d};`).join(`
|
| 3 |
+
`)}
|
| 4 |
+
}`;f(t,"palette.css","text/css")},y=()=>{const t=`
|
| 5 |
+
<div class="card">
|
| 6 |
+
<div class="pill">New Feature</div>
|
| 7 |
+
<button class="button">Get Started</button>
|
| 8 |
+
</div>
|
| 9 |
+
`,d=`
|
| 10 |
+
.card {
|
| 11 |
+
background-color: ${m.cardBg};
|
| 12 |
+
padding: 2rem;
|
| 13 |
+
border-radius: 1rem;
|
| 14 |
+
text-align: center;
|
| 15 |
+
}
|
| 16 |
+
.pill {
|
| 17 |
+
background-color: ${m.pillBg};
|
| 18 |
+
color: ${m.pillText};
|
| 19 |
+
display: inline-block;
|
| 20 |
+
padding: 0.25rem 1rem;
|
| 21 |
+
border-radius: 9999px;
|
| 22 |
+
text-align: center;
|
| 23 |
+
font-size: 0.875rem;
|
| 24 |
+
}
|
| 25 |
+
.button {
|
| 26 |
+
margin-top: 2rem;
|
| 27 |
+
background-color: ${m.buttonBg};
|
| 28 |
+
color: ${m.cardBg};
|
| 29 |
+
padding: 0.5rem 1.5rem;
|
| 30 |
+
border-radius: 0.5rem;
|
| 31 |
+
font-weight: bold;
|
| 32 |
+
border: none;
|
| 33 |
+
cursor: pointer;
|
| 34 |
+
}
|
| 35 |
+
`,x=`<!-- HTML -->
|
| 36 |
+
${t}
|
| 37 |
+
|
| 38 |
+
<!-- CSS -->
|
| 39 |
+
<style>
|
| 40 |
+
${d}
|
| 41 |
+
</style>`;f(x,"preview-card.html","text/html")};return e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6 text-center",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center justify-center",children:[e.jsx(w,{}),e.jsx("span",{className:"ml-3",children:"AI Color Palette Generator"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Pick a base color, let Gemini design a palette, and preview it on a UI card."})]}),e.jsxs("div",{className:"flex-grow flex flex-col lg:flex-row items-center justify-center gap-8",children:[e.jsxs("div",{className:"flex flex-col items-center gap-4",children:[e.jsx(C,{color:i,onChange:s,className:"!w-64 !h-64"}),e.jsx("div",{className:"p-2 bg-surface rounded-md font-mono text-lg border border-border",style:{color:i},children:i}),e.jsx("button",{onClick:h,disabled:r,className:"btn-primary w-full flex items-center justify-center px-6 py-3",children:r?e.jsx(g,{}):"Generate Palette"}),p&&e.jsx("p",{className:"text-red-500 text-sm mt-2",children:p})]}),e.jsxs("div",{className:"flex flex-col gap-2 w-full max-w-sm",children:[e.jsx("label",{className:"text-sm font-medium text-text-secondary mb-2",children:"Generated Palette:"}),r?e.jsx("div",{className:"flex items-center justify-center h-48",children:e.jsx(g,{})}):l.map(t=>e.jsxs("div",{className:"group flex items-center justify-between p-4 rounded-md shadow-sm border border-border",style:{backgroundColor:t},children:[e.jsx("span",{className:"font-mono font-bold text-black/70 mix-blend-overlay",children:t}),e.jsx("button",{onClick:()=>navigator.clipboard.writeText(t),className:"opacity-0 group-hover:opacity-100 transition-opacity bg-white/30 hover:bg-white/50 px-3 py-1 rounded text-xs text-black font-semibold backdrop-blur-sm",children:"Copy"})]},t)),e.jsxs("div",{className:"flex gap-2 mt-2",children:[e.jsxs("button",{onClick:j,className:"flex-1 flex items-center justify-center gap-2 text-sm py-2 bg-gray-100 border border-border rounded-md hover:bg-gray-200",children:[e.jsx(u,{className:"w-4 h-4"})," Download Colors"]}),e.jsxs("button",{onClick:y,className:"flex-1 flex items-center justify-center gap-2 text-sm py-2 bg-gray-100 border border-border rounded-md hover:bg-gray-200",children:[e.jsx(u,{className:"w-4 h-4"})," Download Card"]})]})]}),!r&&e.jsx(N,{palette:l,colors:m,setColors:b})]})]})};export{Ke as ColorPaletteGenerator};
|
| 42 |
+
//# sourceMappingURL=ColorPaletteGenerator-D2lyyWod.js.map
|
assets/ColorPaletteGenerator-D2lyyWod.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"ColorPaletteGenerator-D2lyyWod.js","sources":["../../components/features/ColorPaletteGenerator.tsx"],"sourcesContent":["import React, { useState, useCallback } from 'react';\nimport { HexColorPicker } from 'react-colorful';\nimport { generateColorPalette, downloadFile } from '../../services/index.ts';\nimport { SparklesIcon, ArrowDownTrayIcon } from '../icons.tsx';\nimport { LoadingSpinner } from '../shared/index.tsx';\n\ninterface PreviewColors {\n cardBg: string;\n pillBg: string;\n pillText: string;\n buttonBg: string;\n}\n\nconst PreviewCard: React.FC<{ palette: string[], colors: PreviewColors, setColors: React.Dispatch<React.SetStateAction<PreviewColors>> }> = ({ palette, colors, setColors }) => {\n \n const ColorSelector: React.FC<{ label: string, value: string, onChange: (val: string) => void }> = ({ label, value, onChange }) => (\n <div className=\"flex items-center justify-between text-sm\">\n <label className=\"text-text-primary\">{label}</label>\n <div className=\"flex items-center gap-2\">\n {palette.map(color => (\n <button \n key={color}\n onClick={() => onChange(color)}\n className={`w-5 h-5 rounded-full border border-gray-300 ${value === color ? 'ring-2 ring-primary ring-offset-1' : ''}`}\n style={{ backgroundColor: color }}\n title={color}\n />\n ))}\n </div>\n </div>\n );\n \n return (\n <div className=\"bg-surface p-4 rounded-lg border border-border w-full max-w-sm\">\n <h3 className=\"text-lg font-bold mb-4 text-text-primary\">Live Preview</h3>\n <div className=\"p-8 rounded-xl mb-4\" style={{ backgroundColor: colors.cardBg }}>\n <div className=\"px-4 py-1 rounded-full text-center text-sm inline-block\" style={{ backgroundColor: colors.pillBg, color: colors.pillText }}>\n New Feature\n </div>\n <div className=\"mt-8 text-center\">\n <button className=\"px-6 py-2 rounded-lg font-bold\" style={{ backgroundColor: colors.buttonBg, color: colors.cardBg }}>\n Get Started\n </button>\n </div>\n </div>\n <div className=\"space-y-3\">\n <ColorSelector label=\"Card Background\" value={colors.cardBg} onChange={val => setColors(c => ({...c, cardBg: val}))} />\n <ColorSelector label=\"Pill Background\" value={colors.pillBg} onChange={val => setColors(c => ({...c, pillBg: val}))} />\n <ColorSelector label=\"Pill Text\" value={colors.pillText} onChange={val => setColors(c => ({...c, pillText: val}))} />\n <ColorSelector label=\"Button Background\" value={colors.buttonBg} onChange={val => setColors(c => ({...c, buttonBg: val}))} />\n </div>\n </div>\n );\n};\n\nexport const ColorPaletteGenerator: React.FC = () => {\n const [baseColor, setBaseColor] = useState(\"#0047AB\");\n const [palette, setPalette] = useState<string[]>(['#F0F2F5', '#CCD3E8', '#99AADD', '#6688D1', '#3366CC', '#0047AB']);\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<string>('');\n const [previewColors, setPreviewColors] = useState<PreviewColors>({\n cardBg: '#F0F2F5', pillBg: '#CCD3E8', pillText: '#0047AB', buttonBg: '#0047AB'\n });\n \n const handleGenerate = useCallback(async () => {\n setIsLoading(true);\n setError('');\n try {\n const result = await generateColorPalette(baseColor);\n setPalette(result.colors);\n setPreviewColors({\n cardBg: result.colors[0],\n pillBg: result.colors[2],\n pillText: result.colors[5],\n buttonBg: result.colors[5],\n })\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'An unknown error occurred.';\n setError(`Failed to generate palette: ${errorMessage}`);\n } finally {\n setIsLoading(false);\n }\n }, [baseColor]);\n \n const downloadColors = () => {\n const cssContent = `:root {\\n${palette.map((c, i) => ` --color-palette-${i+1}: ${c};`).join('\\n')}\\n}`;\n downloadFile(cssContent, 'palette.css', 'text/css');\n };\n \n const downloadCard = () => {\n const htmlContent = `\n<div class=\"card\">\n <div class=\"pill\">New Feature</div>\n <button class=\"button\">Get Started</button>\n</div>\n `;\n const cssContent = `\n.card {\n background-color: ${previewColors.cardBg};\n padding: 2rem;\n border-radius: 1rem;\n text-align: center;\n}\n.pill {\n background-color: ${previewColors.pillBg};\n color: ${previewColors.pillText};\n display: inline-block;\n padding: 0.25rem 1rem;\n border-radius: 9999px;\n text-align: center;\n font-size: 0.875rem;\n}\n.button {\n margin-top: 2rem;\n background-color: ${previewColors.buttonBg};\n color: ${previewColors.cardBg};\n padding: 0.5rem 1.5rem;\n border-radius: 0.5rem;\n font-weight: bold;\n border: none;\n cursor: pointer;\n}\n `;\n const combined = `<!-- HTML -->\\n${htmlContent}\\n\\n<!-- CSS -->\\n<style>\\n${cssContent}\\n</style>`;\n downloadFile(combined, 'preview-card.html', 'text/html');\n }\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6 text-center\">\n <h1 className=\"text-3xl font-bold flex items-center justify-center\">\n <SparklesIcon />\n <span className=\"ml-3\">AI Color Palette Generator</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Pick a base color, let Gemini design a palette, and preview it on a UI card.</p>\n </header>\n <div className=\"flex-grow flex flex-col lg:flex-row items-center justify-center gap-8\">\n <div className=\"flex flex-col items-center gap-4\">\n <HexColorPicker color={baseColor} onChange={setBaseColor} className=\"!w-64 !h-64\"/>\n <div className=\"p-2 bg-surface rounded-md font-mono text-lg border border-border\" style={{color: baseColor}}>{baseColor}</div>\n <button onClick={handleGenerate} disabled={isLoading} className=\"btn-primary w-full flex items-center justify-center px-6 py-3\">\n {isLoading ? <LoadingSpinner /> : 'Generate Palette'}\n </button>\n {error && <p className=\"text-red-500 text-sm mt-2\">{error}</p>}\n </div>\n <div className=\"flex flex-col gap-2 w-full max-w-sm\">\n <label className=\"text-sm font-medium text-text-secondary mb-2\">Generated Palette:</label>\n {isLoading ? (\n <div className=\"flex items-center justify-center h-48\"><LoadingSpinner /></div>\n ) : (\n palette.map((color) => (\n <div key={color} className=\"group flex items-center justify-between p-4 rounded-md shadow-sm border border-border\" style={{ backgroundColor: color }}>\n <span className=\"font-mono font-bold text-black/70 mix-blend-overlay\">{color}</span>\n <button onClick={() => navigator.clipboard.writeText(color)} className=\"opacity-0 group-hover:opacity-100 transition-opacity bg-white/30 hover:bg-white/50 px-3 py-1 rounded text-xs text-black font-semibold backdrop-blur-sm\">Copy</button>\n </div>\n ))\n )}\n <div className=\"flex gap-2 mt-2\">\n <button onClick={downloadColors} className=\"flex-1 flex items-center justify-center gap-2 text-sm py-2 bg-gray-100 border border-border rounded-md hover:bg-gray-200\"><ArrowDownTrayIcon className=\"w-4 h-4\"/> Download Colors</button>\n <button onClick={downloadCard} className=\"flex-1 flex items-center justify-center gap-2 text-sm py-2 bg-gray-100 border border-border rounded-md hover:bg-gray-200\"><ArrowDownTrayIcon className=\"w-4 h-4\"/> Download Card</button>\n </div>\n </div>\n {!isLoading && <PreviewCard palette={palette} colors={previewColors} setColors={setPreviewColors} />}\n </div>\n </div>\n );\n};"],"names":["PreviewCard","palette","colors","setColors","ColorSelector","label","value","onChange","jsxs","jsx","color","val","c","ColorPaletteGenerator","baseColor","setBaseColor","useState","setPalette","isLoading","setIsLoading","error","setError","previewColors","setPreviewColors","handleGenerate","useCallback","result","generateColorPalette","err","errorMessage","downloadColors","cssContent","i","downloadFile","downloadCard","htmlContent","combined","SparklesIcon","HexColorPicker","LoadingSpinner","ArrowDownTrayIcon"],"mappings":"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"}
|
assets/CronJobBuilder-DjK0NTVA.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import{r,j as e}from"./react-CIdJ77ke.js";import{a4 as C,C as N,L as S,S as k}from"./index-CX7Qxd1D.js";import"./accessibilityService-PX6aNbbc.js";import"./workspaceConnectorService-KhhKdOYD.js";import"./@braintree-DzxiOROe.js";import"./react-dom-R9L8nDNe.js";import"./scheduler-CoSDG3-6.js";import"./@google-CcUHq7Ay.js";import"./idb-Dob3nYDb.js";import"./marked-BrGMJkBT.js";import"./mermaid-KwKZWwy0.js";import"./dayjs-CeEF-NGT.js";import"./d3-transition-CiCB8KJE.js";import"./d3-timer-DdKHrDhs.js";import"./d3-dispatch-kxCwF96_.js";import"./d3-interpolate-CtIaNujU.js";import"./d3-color-amxIadob.js";import"./d3-selection-C52G7wmG.js";import"./d3-ease-DRPgKoYJ.js";import"./d3-zoom-BYoC3mS3.js";import"./dompurify-J5RlrwSC.js";import"./dagre-d3-es-CTpFWynZ.js";import"./lodash-es-Dt6r0yiR.js";import"./d3-shape-CX8xTzfR.js";import"./d3-path-CimkQT29.js";import"./d3-fetch-BOsq7VnW.js";import"./khroma-DUX6PT6k.js";import"./uuid-DhYbOkY1.js";import"./d3-scale-DRZz3QW5.js";import"./internmap-BkD7Hj8s.js";import"./d3-array-DGRYoJHh.js";import"./d3-format-CzD4bSOQ.js";import"./d3-time-format-CUNN4Ell.js";import"./d3-time-6cSPyVSY.js";import"./d3-axis-DSWTncID.js";import"./elkjs-oKFFZvz7.js";import"./cytoscape-DtBltrT8.js";import"./cytoscape-cose-bilkent-Cgr1thlj.js";import"./cose-base-CwCxnKwh.js";import"./layout-base-CMXQqlmj.js";import"./d3-sankey-DgqkLiUE.js";import"./d3-scale-chromatic-B-NsZVaP.js";import"./ts-dedent-DrFu-skq.js";import"./stylis-D5iaQeiq.js";import"./mdast-util-from-markdown-CLAsVoWb.js";import"./micromark-CTBPIv-_.js";import"./micromark-util-combine-extensions-Bka6Sc1c.js";import"./micromark-util-chunked-DrRIdSP-.js";import"./micromark-factory-space-x2vfxbz5.js";import"./micromark-util-character-Bcm1tP9o.js";import"./micromark-core-commonmark-AH8VCgT7.js";import"./micromark-util-classify-character-Cq7Fg3xE.js";import"./micromark-util-resolve-all-PQCKh0dx.js";import"./decode-named-character-reference-C3-224fz.js";import"./micromark-util-subtokenize-QwsxNXk2.js";import"./micromark-factory-destination-CypD_wgM.js";import"./micromark-factory-label-CRHH4ZHP.js";import"./micromark-factory-title-B7kCBvC9.js";import"./micromark-factory-whitespace-B322EA6O.js";import"./micromark-util-normalize-identifier-C9ANKk3v.js";import"./micromark-util-html-tag-name-DbKNfynz.js";import"./micromark-util-decode-numeric-character-reference-DRnCnno4.js";import"./micromark-util-decode-string-DJl8Y_PO.js";import"./unist-util-stringify-position-Ch_qCilz.js";import"./mdast-util-to-string-C_aolqmU.js";import"./jszip-CFFhfFtd.js";import"./octokit-B6bKu3NB.js";import"./@octokit-MBEWYTsi.js";import"./bottleneck-D_vuF9V7.js";import"./universal-user-agent-CLgqIJsR.js";import"./before-after-hook-y8XtM9xW.js";import"./fast-content-type-parse-3SwieiST.js";import"./axe-core-Cc5paZPx.js";const n=({label:i,value:a,onChange:p,options:m})=>e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-text-secondary",children:i}),e.jsxs("select",{value:a,onChange:s=>p(s.target.value),className:"w-full mt-1 px-3 py-2 rounded-md bg-surface border border-border",children:[e.jsx("option",{value:"*",children:"* (every)"}),m.map(s=>e.jsx("option",{value:s,children:s},s))]})]}),qe=({initialPrompt:i})=>{const[a,p]=r.useState("0"),[m,s]=r.useState("17"),[l,u]=r.useState("*"),[c,h]=r.useState("*"),[d,g]=r.useState("1-5"),[b,f]=r.useState(i||"every weekday at 5pm"),[y,j]=r.useState(!1),v=r.useMemo(()=>`${a} ${m} ${l} ${c} ${d}`,[a,m,l,c,d]),x=r.useCallback(async o=>{if(o){j(!0);try{const t=await C(o);p(t.minute),s(t.hour),u(t.dayOfMonth),h(t.month),g(t.dayOfWeek)}catch(t){console.error(t)}finally{j(!1)}}},[]);return r.useEffect(()=>{i&&(f(i),x(i))},[i,x]),e.jsxs("div",{className:"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary",children:[e.jsxs("header",{className:"mb-6",children:[e.jsxs("h1",{className:"text-3xl font-bold flex items-center",children:[e.jsx(N,{}),e.jsx("span",{className:"ml-3",children:"AI Cron Job Builder"})]}),e.jsx("p",{className:"text-text-secondary mt-1",children:"Visually construct a cron expression or describe it in plain English."})]}),e.jsxs("div",{className:"flex gap-2 mb-6",children:[e.jsx("input",{type:"text",value:b,onChange:o=>f(o.target.value),placeholder:"Describe a schedule...",className:"flex-grow px-3 py-1.5 rounded-md bg-surface border border-border text-sm"}),e.jsxs("button",{onClick:()=>x(b),disabled:y,className:"btn-primary px-4 py-1.5 flex items-center gap-2",children:[y?e.jsx(S,{}):e.jsx(k,{})," AI Generate"]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-4 mb-6",children:[e.jsx(n,{label:"Minute",value:a,onChange:p,options:Array.from({length:60},(o,t)=>t)}),e.jsx(n,{label:"Hour",value:m,onChange:s,options:Array.from({length:24},(o,t)=>t)}),e.jsx(n,{label:"Day (Month)",value:l,onChange:u,options:Array.from({length:31},(o,t)=>t+1)}),e.jsx(n,{label:"Month",value:c,onChange:h,options:Array.from({length:12},(o,t)=>t+1)}),e.jsx(n,{label:"Day (Week)",value:d,onChange:g,options:Array.from({length:7},(o,t)=>t)})]}),e.jsxs("div",{className:"bg-surface p-4 rounded-lg text-center border border-border",children:[e.jsx("p",{className:"text-text-secondary text-sm",children:"Generated Expression"}),e.jsx("p",{className:"font-mono text-primary text-2xl mt-1",children:v}),e.jsx("button",{onClick:()=>navigator.clipboard.writeText(v),className:"mt-4 px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded-md text-xs",children:"Copy"})]})]})};export{qe as CronJobBuilder};
|
| 2 |
+
//# sourceMappingURL=CronJobBuilder-DjK0NTVA.js.map
|
assets/CronJobBuilder-DjK0NTVA.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"version":3,"file":"CronJobBuilder-DjK0NTVA.js","sources":["../../components/features/CronJobBuilder.tsx"],"sourcesContent":["import React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { CommandLineIcon, SparklesIcon } from '../icons.tsx';\nimport { generateCronFromDescription, CronParts } from '../../services/index.ts';\nimport { LoadingSpinner } from '../shared/index.tsx';\n\nconst CronPartSelector: React.FC<{ label: string, value: string, onChange: (value: string) => void, options: (string|number)[] }> = ({ label, value, onChange, options }) => {\n return (\n <div>\n <label className=\"block text-sm font-medium text-text-secondary\">{label}</label>\n <select value={value} onChange={e => onChange(e.target.value)} className=\"w-full mt-1 px-3 py-2 rounded-md bg-surface border border-border\">\n <option value=\"*\">* (every)</option>\n {options.map(o => <option key={o} value={o}>{o}</option>)}\n </select>\n </div>\n );\n};\n\nexport const CronJobBuilder: React.FC<{ initialPrompt?: string }> = ({ initialPrompt }) => {\n const [minute, setMinute] = useState('0');\n const [hour, setHour] = useState('17');\n const [dayOfMonth, setDayOfMonth] = useState('*');\n const [month, setMonth] = useState('*');\n const [dayOfWeek, setDayOfWeek] = useState('1-5');\n const [aiPrompt, setAiPrompt] = useState(initialPrompt || 'every weekday at 5pm');\n const [isLoading, setIsLoading] = useState(false);\n \n const cronExpression = useMemo(() => {\n return `${minute} ${hour} ${dayOfMonth} ${month} ${dayOfWeek}`;\n }, [minute, hour, dayOfMonth, month, dayOfWeek]);\n\n const handleAiGenerate = useCallback(async (p: string) => {\n if (!p) return;\n setIsLoading(true);\n try {\n const result: CronParts = await generateCronFromDescription(p);\n setMinute(result.minute);\n setHour(result.hour);\n setDayOfMonth(result.dayOfMonth);\n setMonth(result.month);\n setDayOfWeek(result.dayOfWeek);\n } catch (e) {\n console.error(e);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (initialPrompt) {\n setAiPrompt(initialPrompt);\n handleAiGenerate(initialPrompt);\n }\n }, [initialPrompt, handleAiGenerate]);\n\n return (\n <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n <header className=\"mb-6\">\n <h1 className=\"text-3xl font-bold flex items-center\">\n <CommandLineIcon />\n <span className=\"ml-3\">AI Cron Job Builder</span>\n </h1>\n <p className=\"text-text-secondary mt-1\">Visually construct a cron expression or describe it in plain English.</p>\n </header>\n <div className=\"flex gap-2 mb-6\">\n <input type=\"text\" value={aiPrompt} onChange={e => setAiPrompt(e.target.value)} placeholder=\"Describe a schedule...\" className=\"flex-grow px-3 py-1.5 rounded-md bg-surface border border-border text-sm\"/>\n <button onClick={() => handleAiGenerate(aiPrompt)} disabled={isLoading} className=\"btn-primary px-4 py-1.5 flex items-center gap-2\">\n {isLoading ? <LoadingSpinner /> : <SparklesIcon />} AI Generate\n </button>\n </div>\n <div className=\"grid grid-cols-2 md:grid-cols-5 gap-4 mb-6\">\n <CronPartSelector label=\"Minute\" value={minute} onChange={setMinute} options={Array.from({length: 60}, (_, i) => i)} />\n <CronPartSelector label=\"Hour\" value={hour} onChange={setHour} options={Array.from({length: 24}, (_, i) => i)} />\n <CronPartSelector label=\"Day (Month)\" value={dayOfMonth} onChange={setDayOfMonth} options={Array.from({length: 31}, (_, i) => i + 1)} />\n <CronPartSelector label=\"Month\" value={month} onChange={setMonth} options={Array.from({length: 12}, (_, i) => i + 1)} />\n <CronPartSelector label=\"Day (Week)\" value={dayOfWeek} onChange={setDayOfWeek} options={Array.from({length: 7}, (_, i) => i)} />\n </div>\n <div className=\"bg-surface p-4 rounded-lg text-center border border-border\">\n <p className=\"text-text-secondary text-sm\">Generated Expression</p>\n <p className=\"font-mono text-primary text-2xl mt-1\">{cronExpression}</p>\n <button onClick={() => navigator.clipboard.writeText(cronExpression)} className=\"mt-4 px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded-md text-xs\">Copy</button>\n </div>\n </div>\n );\n};"],"names":["CronPartSelector","label","value","onChange","options","jsx","jsxs","e","o","CronJobBuilder","initialPrompt","minute","setMinute","useState","hour","setHour","dayOfMonth","setDayOfMonth","month","setMonth","dayOfWeek","setDayOfWeek","aiPrompt","setAiPrompt","isLoading","setIsLoading","cronExpression","useMemo","handleAiGenerate","useCallback","p","result","generateCronFromDescription","useEffect","CommandLineIcon","LoadingSpinner","SparklesIcon","_","i"],"mappings":"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"}
|