UNPKG

@gv-sh/specgen-user

Version:

[![Version](https://img.shields.io/badge/version-0.14.1-blue.svg)](https://github.com/gv-sh/specgen-user)

2 lines 10.5 kB
/*! For license information please see 46.04b9fdfc.chunk.js.LICENSE.txt */ "use strict";(self.webpackChunk_gv_sh_specgen_user=self.webpackChunk_gv_sh_specgen_user||[]).push([[46],{3046:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});var r=a(9379),s=a(9950),n=a(9294),o=a(7413),c=a(1111);const l=(0,a(6230).A)("frown",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M16 16s-1.5-2-4-2-4 2-4 2",key:"epbg0q"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]]);var i=a(4414);const d=(0,s.memo)((e=>{let{parameter:t,onAddParameter:a,isSelected:r}=e;return(0,i.jsxs)("div",{className:"py-2 flex items-center justify-between border-b last:border-0",children:[(0,i.jsx)("h3",{className:"text-sm truncate",children:t.name}),(0,i.jsx)(c.$,{onClick:()=>!r&&a(t),variant:r?"secondary":"link_hover",size:"sm",disabled:r,className:"min-w-[60px] h-8",children:r?"Added":"Add"})]})})),m=e=>{let{selectedCategory:t,selectedParameters:a,onParameterSelect:m,onParameterRemove:u}=e;const[h,g]=(0,s.useState)(!0),[f,y]=(0,s.useState)(null),[p,x]=(0,s.useState)([]),[v,w]=(0,s.useState)(""),[A,N]=(0,s.useState)(""),S=t&&t.length>0?t[0]:null;(0,s.useEffect)((()=>{const e=setTimeout((()=>{N(v)}),300);return()=>{clearTimeout(e)}}),[v]),(0,s.useEffect)((()=>{(async()=>{if(!S)return x([]),void g(!1);g(!0),y(null);try{const e=await(0,n.nM)(S.id),t=(e.data||[]).map((e=>(0,r.A)((0,r.A)({},e),{},{categoryId:S.id,categoryName:S.name})));x(t)}catch(e){console.error("Error fetching parameters:",e),y("Failed to load parameters. Please try again.")}finally{g(!1)}})()}),[S]);const b=(0,s.useMemo)((()=>p.filter((e=>{if(A){var t,a,r;const s=A.toLowerCase(),n=null===(t=e.name)||void 0===t?void 0:t.toLowerCase().includes(s),o=null===(a=e.description)||void 0===a?void 0:a.toLowerCase().includes(s),c=null===(r=e.type)||void 0===r?void 0:r.toLowerCase().includes(s);return n||o||c}return!0}))),[p,A]),j=e=>a.some((t=>t.id===e.id)),D=e=>{m(e)};return h?(0,i.jsx)("div",{className:"flex justify-center items-center h-full py-4",children:(0,i.jsx)("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-primary/50 border-t-primary"})}):f?(0,i.jsx)(o.Fc,{variant:"destructive",children:(0,i.jsx)(o.TN,{children:f})}):(0,i.jsx)("div",{className:"space-y-4",children:S?0===(null===b||void 0===b?void 0:b.length)?(0,i.jsx)("div",{className:"flex flex-col items-center justify-center h-[calc(100%-5rem)] text-center",children:v?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(l,{className:"h-6 w-6 text-muted-foreground mb-2"}),(0,i.jsx)("h3",{className:"text-sm font-medium mb-1",children:"No matching parameters"}),(0,i.jsx)("p",{className:"text-muted-foreground text-xs mb-2",children:"Try adjusting your search or clear the filter."}),(0,i.jsx)(c.$,{variant:"link",size:"sm",onClick:()=>w(""),children:"Clear search"})]}):(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("h3",{className:"text-sm font-medium mb-1",children:"No parameters available"}),(0,i.jsx)("p",{className:"text-muted-foreground text-xs",children:"Select a different category to explore parameters."})]})}):(0,i.jsxs)("div",{className:"flex flex-col h-full pt-3",children:[(0,i.jsx)("div",{className:"sticky top-0 z-10 bg-card pb-2",children:(0,i.jsxs)("div",{className:"flex flex-col items-left",children:[(0,i.jsx)("h3",{className:"text-sm font-medium mb-1",children:"Add Parameters"}),(0,i.jsx)("p",{className:"text-muted-foreground text-xs border-b pb-3",children:"Add the parameters you want to shape your story with."})]})}),(0,i.jsx)("div",{className:"overflow-auto",style:{maxHeight:"calc(100vh - 200px)"},children:b.map((e=>(0,i.jsx)(d,{parameter:e,onAddParameter:D,isSelected:j(e)},e.id)))})]}):(0,i.jsxs)("div",{className:"flex flex-col items-left justify-center h-[calc(100%-5rem)]",children:[(0,i.jsx)("h3",{className:"text-sm font-medium mb-1 pt-3",children:"Add Parameters"}),(0,i.jsx)("p",{className:"text-muted-foreground text-xs",children:"Choose a category from the left panel to see the parameters within it."})]})})}},7413:(e,t,a)=>{a.d(t,{Fc:()=>m,TN:()=>u});var r=a(9379),s=a(3986),n=a(9950),o=a(90),c=a(4414);const l=["className","variant"],i=["className","children"],d=["className"],m=n.forwardRef(((e,t)=>{let{className:a,variant:n="default"}=e,i=(0,s.A)(e,l);return(0,c.jsx)("div",(0,r.A)({ref:t,role:"alert",className:(0,o.cn)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{"bg-destructive/15 text-destructive border-destructive/50":"destructive"===n,"bg-muted border-border":"default"===n},a)},i))}));m.displayName="Alert";n.forwardRef(((e,t)=>{let{className:a,children:n}=e,l=(0,s.A)(e,i);return(0,c.jsx)("h5",(0,r.A)((0,r.A)({ref:t,className:(0,o.cn)("mb-1 font-medium leading-none tracking-tight",a)},l),{},{children:n}))})).displayName="AlertTitle";const u=n.forwardRef(((e,t)=>{let{className:a}=e,n=(0,s.A)(e,d);return(0,c.jsx)("div",(0,r.A)({ref:t,className:(0,o.cn)("text-sm [&_p]:leading-relaxed",a)},n))}));u.displayName="AlertDescription"},9294:(e,t,a)=>{a.d(t,{jE:()=>d,nM:()=>m,B8:()=>g,lX:()=>u});var r=a(9379),s=a(6910);const n={API_URL:"/api",PORT:{NODE_ENV:"production",PUBLIC_URL:"",WDS_SOCKET_HOST:void 0,WDS_SOCKET_PATH:void 0,WDS_SOCKET_PORT:void 0,FAST_REFRESH:!0,REACT_APP_API_URL:"/api"}.PORT||3002,TIMEOUT:5e3};console.log("Using API URL:",n.API_URL);const o=n;const c=new class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:50;this.cache=new Map,this.maxSize=e}get(e){if(this.cache.has(e)){const{value:t,expiry:a}=this.cache.get(e);if(!a||a>Date.now())return t;this.cache.delete(e)}}set(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(this.cache.size>=this.maxSize){const e=this.cache.keys().next().value;this.cache.delete(e)}const r=a?Date.now()+a:null;this.cache.set(e,{value:t,expiry:r})}clear(){this.cache.clear()}},l="".concat(o.API_URL,"/api");console.log("API Base URL:",l);const i=s.A.create({baseURL:l,headers:{"Content-Type":"application/json"}}),d=async()=>{try{const e="categories",t=c.get(e);if(t)return console.log("Using cached categories data"),t;const a=await i.get("/categories");return c.set(e,a.data,3e5),a.data}catch(e){throw console.error("Error fetching categories:",e),e}},m=async e=>{try{const t="parameters_".concat(e),a=c.get(t);if(a)return console.log("Using cached parameters data for category ".concat(e)),a;const r=await i.get("/parameters?categoryId=".concat(e));return c.set(t,r.data,3e5),r.data}catch(t){throw console.error("Error fetching parameters for category ".concat(e,":"),t),t}},u=async function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"combined",s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;try{const t="request-".concat(Date.now());if(!e||0===Object.keys(e).length)return{success:!1,error:"No parameters provided for generation"};const o={parameterValues:e,contentType:a};s&&(o.year=parseInt(s,10)),n&&(o.title=n),console.log("Generation payload:",JSON.stringify(o,null,2));const c=await i.post("/generate",o),l={id:t,title:c.data.title||n||"Untitled Story",createdAt:(new Date).toISOString(),content:c.data.content,imageData:c.data.imageData?"data:image/png;base64,".concat(c.data.imageData):null,parameterValues:e,metadata:c.data.metadata,year:c.data.year||s||null};return h(l),(0,r.A)((0,r.A)({},c.data),{},{success:!0,generatedStory:l})}catch(c){var o;return console.error("Content generation error:",c),c.response?{success:!1,error:(null===(o=c.response.data)||void 0===o?void 0:o.error)||"Server error: ".concat(c.response.status)}:c.request?{success:!1,error:"No response from server. Please check your connection."}:{success:!1,error:c.message||"Failed to generate content. Please try again."}}},h=e=>{try{const a=localStorage.getItem("specgen-history");let s=a?JSON.parse(a):[];s=[e,...s],s.length>10&&(s=s.slice(0,10)),s=s.map((e=>(0,r.A)((0,r.A)({},e),{},{imageData:e.imageData?"stored-externally":null})));try{localStorage.setItem("specgen-history",JSON.stringify(s)),console.log("Saved story to history:",e.id)}catch(t){"QuotaExceededError"===t.name&&(localStorage.removeItem("specgen-cached-stories"),s=s.slice(0,5),localStorage.setItem("specgen-history",JSON.stringify(s)),console.warn("Storage quota nearly exceeded, reduced history size"))}}catch(a){console.error("Error saving to generation history:",a)}},g=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{const t=await i.get("/content");if(t.data&&t.data.success){let a=t.data.data||[];if(a=a.filter((e=>e.content)),e.year&&(a=a.filter((t=>{var a;return t.year===parseInt(e.year,10)||(null===(a=t.year)||void 0===a?void 0:a.toString())===e.year}))),e.search){const t=e.search.toLowerCase();a=a.filter((e=>e.title&&e.title.toLowerCase().includes(t)||e.content&&e.content.toLowerCase().includes(t)))}return"oldest"===e.sort?a.sort(((e,t)=>new Date(e.createdAt)-new Date(t.createdAt))):a.sort(((e,t)=>new Date(t.createdAt)-new Date(e.createdAt))),{success:!0,data:a}}return f(e)}catch(t){return console.error("Error fetching stories from API:",t),f(e)}},f=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{const t=localStorage.getItem("specgen-history"),a=(t?JSON.parse(t):[]).map((e=>({id:e.id||"gen-".concat(Date.now()+Math.random()),title:e.title||p(e.content),content:e.content||"",imageData:y(e.imageData),createdAt:e.timestamp||e.createdAt||(new Date).toISOString(),year:e.year||null,parameterValues:e.parameterValues||{},metadata:e.metadata||{}})));console.log("Fallback: Using localStorage for stories");let r=[...a];if(e.year&&(r=r.filter((t=>t.year===parseInt(e.year,10)))),e.search){const t=e.search.toLowerCase();r=r.filter((e=>e.title&&e.title.toLowerCase().includes(t)||e.content&&e.content.toLowerCase().includes(t)))}return"oldest"===e.sort?r.sort(((e,t)=>new Date(e.createdAt)-new Date(t.createdAt))):r.sort(((e,t)=>new Date(t.createdAt)-new Date(e.createdAt))),{success:!0,data:r}}catch(t){return console.error("Error in localStorage fallback:",t),{success:!1,error:"Failed to fetch stories",data:[]}}},y=e=>e&&"string"===typeof e?e.startsWith("data:image")?e:"data:image/png;base64,".concat(e):null,p=e=>{if(!e)return"Untitled Story";if(e.includes("**Title:")){const t=e.match(/\*\*Title:(.*?)\*\*/);if(t&&t[1])return t[1].trim()}const t=e.split(/[.!?]|\n/)[0].trim();return t.length<=40?t:t.substring(0,37)+"..."}}}]);