@nice2dev/ui-ai 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ import { default as React } from 'react';
2
+ import { NiceDataLabelerProps } from './ml-types';
3
+
4
+ export declare const NiceDataLabeler: React.FC<NiceDataLabelerProps>;
5
+ export default NiceDataLabeler;
6
+ //# sourceMappingURL=NiceDataLabeler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NiceDataLabeler.d.ts","sourceRoot":"","sources":["../src/NiceDataLabeler.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,KAAK,EACV,oBAAoB,EAOrB,MAAM,YAAY,CAAC;AAyCpB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAwxB1D,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { default as React } from 'react';
2
+ import { NiceMLStudioProps } from './ml-types';
3
+
4
+ export declare const NiceMLStudio: React.FC<NiceMLStudioProps>;
5
+ export default NiceMLStudio;
6
+ //# sourceMappingURL=NiceMLStudio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NiceMLStudio.d.ts","sourceRoot":"","sources":["../src/NiceMLStudio.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAgC,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EACV,iBAAiB,EAQlB,MAAM,YAAY,CAAC;AA2CpB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAslBpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { default as React } from 'react';
2
+ import { NiceModelInferenceProps } from './ml-types';
3
+
4
+ export declare const NiceModelInference: React.FC<NiceModelInferenceProps>;
5
+ export default NiceModelInference;
6
+ //# sourceMappingURL=NiceModelInference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NiceModelInference.d.ts","sourceRoot":"","sources":["../src/NiceModelInference.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EACV,uBAAuB,EAQxB,MAAM,YAAY,CAAC;AAsBpB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA4lBhE,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,10 +1,15 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),a=require("react");class B{constructor(e={},n){this.timestamps=[],this.tokenCount=0,this.warningEmitted=!1,this.config={maxRequestsPerMinute:e.maxRequestsPerMinute??30,maxTokensPerSession:e.maxTokensPerSession??1e4,warnThresholdPercent:e.warnThresholdPercent??80},this.onWarning=n}canRequest(){return this.pruneOldTimestamps(),!(this.timestamps.length>=this.config.maxRequestsPerMinute||this.tokenCount>=this.config.maxTokensPerSession)}recordRequest(){return this.canRequest()?(this.timestamps.push(Date.now()),!0):!1}recordTokens(e){this.tokenCount+=e,this.checkWarning()}getStatus(){this.pruneOldTimestamps();const e=this.config.maxTokensPerSession>0?this.tokenCount/this.config.maxTokensPerSession*100:0,n=this.config.maxRequestsPerMinute>0?this.timestamps.length/this.config.maxRequestsPerMinute*100:0;return{requestsThisMinute:this.timestamps.length,tokensThisSession:this.tokenCount,isLimited:!this.canRequest(),isWarning:e>=this.config.warnThresholdPercent||n>=this.config.warnThresholdPercent}}reset(){this.timestamps=[],this.tokenCount=0,this.warningEmitted=!1}pruneOldTimestamps(){const e=Date.now()-6e4;this.timestamps=this.timestamps.filter(n=>n>e)}checkWarning(){var n;if(this.warningEmitted)return;this.getStatus().isWarning&&(this.warningEmitted=!0,(n=this.onWarning)==null||n.call(this))}}const F=a.createContext(null);function ue({config:i,rateLimits:e,enabled:n=!0,onRateLimitWarning:r,children:t}){const l=a.useRef(null);l.current||(l.current=new B(e,r));const c=a.useCallback(()=>l.current.getStatus(),[]),w=a.useMemo(()=>({config:i,enabled:n,rateLimiter:l.current,getRateLimitStatus:c}),[i,n,c]);return o.jsx(F.Provider,{value:w,children:t})}function E(){return a.useContext(F)}async function*Y(i,e){var l,c,w,s,g,y,I,f,S;const n=(l=i.body)==null?void 0:l.getReader();if(!n)throw new Error("Response body is not readable");const r=new TextDecoder;let t="";try{for(;!(e!=null&&e.aborted);){const{done:C,value:d}=await n.read();if(C)break;t+=r.decode(d,{stream:!0});const P=t.split(`
2
- `);t=P.pop()??"";for(const T of P){const u=T.trim();if(!(!u||u===":")){if(u.startsWith("data:")){const h=u.slice(5).trim();if(h==="[DONE]"){yield{token:"",done:!0};return}try{const k=JSON.parse(h),b=((s=(w=(c=k.choices)==null?void 0:c[0])==null?void 0:w.delta)==null?void 0:s.content)??"",x=((y=(g=k.choices)==null?void 0:g[0])==null?void 0:y.finish_reason)==="stop";(b||x)&&(yield{token:b,done:x,usage:k.usage})}catch{h&&(yield{token:h,done:!1})}continue}try{const h=JSON.parse(u),k=h.text??h.content??h.token??"";k&&(yield{token:k,done:!1})}catch{u&&(yield{token:u,done:!1})}}}}if(t.trim()){const C=t.trim();if(C.startsWith("data:")){const d=C.slice(5).trim();if(d&&d!=="[DONE]")try{const T=((S=(f=(I=JSON.parse(d).choices)==null?void 0:I[0])==null?void 0:f.delta)==null?void 0:S.content)??"";T&&(yield{token:T,done:!0})}catch{yield{token:d,done:!0}}}}}finally{n.releaseLock()}}async function K(i){var n,r,t,l;const e=await i.json();if((t=(r=(n=e.choices)==null?void 0:n[0])==null?void 0:r.message)!=null&&t.content)return{text:e.choices[0].message.content,usage:e.usage};if((l=e.message)!=null&&l.content)return{text:e.message.content};if(typeof e.text=="string")return{text:e.text};if(typeof e.content=="string")return{text:e.content};if(typeof e.response=="string")return{text:e.response};throw new Error("Unrecognized AI response format")}const O=new Map;function W(i,e){const n=e?{...i,fieldValue:void 0,formContext:void 0}:i;return JSON.stringify(n)}function ce(i,e){const n=[],r=e.systemPrompt??"You are a helpful assistant providing concise contextual hints for form fields. Keep responses short (1-3 sentences). Be specific and actionable.";n.push({role:"system",content:r});const t=[];if(i.fieldLabel&&t.push(`Field: "${i.fieldLabel}"`),i.fieldType&&t.push(`Type: ${i.fieldType}`),!e.privacyMode&&i.fieldValue!==void 0){const c=typeof i.fieldValue=="string"?i.fieldValue:JSON.stringify(i.fieldValue);t.push(`Current value: ${c}`)}i.validationRules&&Object.keys(i.validationRules).length>0&&t.push(`Validation: ${JSON.stringify(i.validationRules)}`),i.schema&&Object.keys(i.schema).length>0&&t.push(`Schema: ${JSON.stringify(i.schema)}`),!e.privacyMode&&i.formContext&&Object.keys(i.formContext).length>0&&t.push(`Form context: ${JSON.stringify(i.formContext)}`),i.customPrompt&&t.push(i.customPrompt);const l=t.length>0?`Provide a helpful hint for this field:
3
- ${t.join(`
4
- `)}`:"Provide a helpful suggestion.";return n.push({role:"user",content:l}),n}function m(i={},e={}){i=i??{},e=e??{};const{debounceMs:n=500,disabled:r=!1}=e,t=E(),[l,c]=a.useState(""),[w,s]=a.useState(!1),[g,y]=a.useState(null),[I,f]=a.useState(!1),S=a.useRef(null),C=a.useRef(0),d=a.useCallback(async()=>{var N,q,G;if(!t||!t.enabled||r)return;const{config:u,rateLimiter:h}=t;if(!h.recordRequest()){y("Rate limit exceeded. Please wait before requesting another hint.");return}const k=W(i,u.privacyMode??!1),b=O.get(k);if(b){c(b),s(!1),y(null),f(!1);return}(N=S.current)==null||N.abort();const x=new AbortController;S.current=x,s(!0),y(null),c(""),f(!1);const M=ce(i,u),L=u.stream!==!1;try{const $={"Content-Type":"application/json",...u.headers};u.apiKey&&($.Authorization=`Bearer ${u.apiKey}`);const le=JSON.stringify({model:u.model??"gpt-3.5-turbo",messages:M,temperature:u.temperature??.7,max_tokens:u.maxTokens??256,stream:L}),A=await fetch(u.endpoint,{method:"POST",headers:$,body:le,signal:x.signal});if(!A.ok){const v=await A.text().catch(()=>A.statusText);throw new Error(`AI request failed (${A.status}): ${v}`)}if(L){f(!0);let v="";for await(const R of Y(A,x.signal))if(x.signal.aborted||(v+=R.token,c(v),(q=R.usage)!=null&&q.completion_tokens&&h.recordTokens(R.usage.completion_tokens),R.done))break;if(v.length>0){const R=Math.ceil(v.length/4);h.recordTokens(R)}O.set(k,v)}else{const v=await K(A);c(v.text),O.set(k,v.text),(G=v.usage)!=null&&G.completion_tokens?h.recordTokens(v.usage.completion_tokens):h.recordTokens(Math.ceil(v.text.length/4))}}catch($){if($ instanceof DOMException&&$.name==="AbortError")return;y($ instanceof Error?$.message:"AI hint request failed")}finally{x.signal.aborted||(s(!1),f(!1))}},[t,i,r]);a.useEffect(()=>{if(!t||!t.enabled||r)return;const u=setTimeout(d,n);return()=>clearTimeout(u)},[i==null?void 0:i.fieldLabel,i==null?void 0:i.fieldType,i==null?void 0:i.fieldValue,i==null?void 0:i.customPrompt,n,r,t==null?void 0:t.enabled,C.current]),a.useEffect(()=>()=>{var u;(u=S.current)==null||u.abort()},[]);const P=a.useCallback(()=>{var u;(u=S.current)==null||u.abort(),s(!1),f(!1)},[]),T=a.useCallback(()=>{if(t){const u=W(i,t.config.privacyMode??!1);O.delete(u)}C.current+=1,d()},[t,i,d]);return!t||!t.enabled?{text:"",loading:!1,error:null,streaming:!1,abort:()=>{},refresh:()=>{},hint:null,fetchHint:async()=>{}}:{text:l,loading:w,error:g,streaming:I,abort:P,refresh:T,hint:l?{content:l}:null,fetchHint:async()=>{await d()}}}function de(){return o.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[o.jsx("path",{d:"M12 3l1.5 5.5L19 10l-5.5 1.5L12 17l-1.5-5.5L5 10l5.5-1.5z"}),o.jsx("path",{d:"M19 15l.5 2 2 .5-2 .5-.5 2-.5-2-2-.5 2-.5z"}),o.jsx("path",{d:"M5 19l.5 1.5 1.5.5-1.5.5-.5 1.5-.5-1.5-1.5-.5 1.5-.5z"})]})}function se(i,e){if(i!=="auto"||!e)return i==="auto"?"top":i;const n=e.top,r=window.innerHeight-e.bottom,t=e.left,l=window.innerWidth-e.right,c=Math.max(n,r,t,l);return c===n?"top":c===r?"bottom":c===l?"right":"left"}function oe(i){const e={position:"absolute",zIndex:9999,minWidth:200,maxWidth:320,padding:"8px 12px",borderRadius:8,fontSize:13,lineHeight:1.5,backgroundColor:"var(--ntd-ai-bg, #1e1e2e)",color:"var(--ntd-ai-fg, #cdd6f4)",border:"1px solid var(--ntd-ai-border, #45475a)",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",wordWrap:"break-word"};switch(i){case"top":return{...e,bottom:"100%",left:"50%",transform:"translateX(-50%)",marginBottom:6};case"bottom":return{...e,top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:6};case"left":return{...e,right:"100%",top:"50%",transform:"translateY(-50%)",marginRight:6};case"right":return{...e,left:"100%",top:"50%",transform:"translateY(-50%)",marginLeft:6};default:return{...e,bottom:"100%",left:"50%",transform:"translateX(-50%)",marginBottom:6}}}const J=a.forwardRef(({context:i,position:e="auto",debounceMs:n=500,showOnHover:r=!1,triggerIcon:t,className:l,style:c},w)=>{var k;const s=E(),[g,y]=a.useState(!1),[I,f]=a.useState(!1),S=a.useRef(null),C=a.useRef(null),d=m(i,{debounceMs:n,disabled:!I});a.useEffect(()=>{if(!g)return;const b=x=>{var L,N;const M=x.target;(L=S.current)!=null&&L.contains(M)||(N=C.current)!=null&&N.contains(M)||(y(!1),f(!1))};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[g]),a.useEffect(()=>{if(!g)return;const b=x=>{x.key==="Escape"&&(y(!1),f(!1),d.abort())};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[g,d]);const P=a.useCallback(b=>{if(b.stopPropagation(),r)return;const x=!g;y(x),f(x)},[g,r]),T=a.useCallback(()=>{r&&(y(!0),f(!0))},[r]),u=a.useCallback(()=>{r&&(y(!1),f(!1))},[r]);if(!s||!s.enabled)return null;const h=se(e,((k=S.current)==null?void 0:k.getBoundingClientRect())??null);return o.jsxs("span",{ref:w,className:l,style:{position:"relative",display:"inline-flex",...c},onMouseEnter:T,onMouseLeave:u,children:[o.jsx("button",{ref:S,type:"button",onClick:P,"aria-label":"AI hint","aria-expanded":g,className:"ntd-ai-trigger",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",cursor:"pointer",padding:2,borderRadius:4,color:"var(--ntd-ai-trigger-color, #a78bfa)",opacity:.7,transition:"opacity 0.2s, transform 0.2s"},children:t??o.jsx(de,{})}),g&&o.jsxs("div",{ref:C,role:"tooltip",className:"ntd-ai-popover",style:oe(h),children:[d.loading&&!d.text&&o.jsxs("div",{className:"ntd-ai-loading",style:{display:"flex",alignItems:"center",gap:6},children:[o.jsx("span",{style:{display:"inline-block",width:12,height:12,border:"2px solid var(--ntd-ai-border, #45475a)",borderTopColor:"var(--ntd-ai-trigger-color, #a78bfa)",borderRadius:"50%",animation:"ntd-ai-spin 0.8s linear infinite"}}),o.jsx("span",{style:{opacity:.6},children:"Thinking..."})]}),d.text&&o.jsxs("div",{className:"ntd-ai-content",children:[d.text,d.streaming&&o.jsx("span",{className:"ntd-ai-cursor",style:{display:"inline-block",width:2,height:"1em",backgroundColor:"var(--ntd-ai-trigger-color, #a78bfa)",marginLeft:1,animation:"ntd-ai-blink 0.8s step-end infinite",verticalAlign:"text-bottom"}})]}),d.error&&o.jsx("div",{className:"ntd-ai-error",style:{color:"var(--ntd-ai-error, #f38ba8)"},children:d.error}),d.text&&!d.streaming&&o.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:4,marginTop:6,paddingTop:6,borderTop:"1px solid var(--ntd-ai-border, #45475a)"},children:[o.jsx("button",{type:"button",onClick:()=>d.refresh(),className:"ntd-ai-action",style:{fontSize:11,padding:"2px 6px",border:"1px solid var(--ntd-ai-border, #45475a)",borderRadius:4,background:"transparent",color:"inherit",cursor:"pointer"},children:"↻ Refresh"}),o.jsx("button",{type:"button",onClick:()=>{var b;(b=navigator.clipboard)==null||b.writeText(d.text)},className:"ntd-ai-action",style:{fontSize:11,padding:"2px 6px",border:"1px solid var(--ntd-ai-border, #45475a)",borderRadius:4,background:"transparent",color:"inherit",cursor:"pointer"},children:"⎘ Copy"})]})]})]})});J.displayName="NiceAIHintBubble";function D(i,e,n){return{fieldLabel:i,fieldType:"text",fieldValue:e,validationRules:{...(n==null?void 0:n.maxLength)!=null?{maxLength:n.maxLength}:{},...n!=null&&n.pattern?{pattern:n.pattern}:{}},customPrompt:n!=null&&n.placeholder?`Placeholder: "${n.placeholder}". Suggest content or correct grammar.`:"Suggest content, correct grammar, or auto-complete the text."}}function H(i,e,n){return{fieldLabel:i,fieldType:"number",fieldValue:e,validationRules:{...(n==null?void 0:n.min)!=null?{min:n.min}:{},...(n==null?void 0:n.max)!=null?{max:n.max}:{},...(n==null?void 0:n.step)!=null?{step:n.step}:{}},customPrompt:n!=null&&n.unit?`Unit: ${n.unit}. Suggest a reasonable value or range for this field.`:"Suggest a reasonable value or range for this field based on the label and constraints."}}function j(i,e,n){return{fieldLabel:i,fieldType:n!=null&&n.multiple?"multi-select":"select",fieldValue:e,schema:n!=null&&n.options?{availableOptions:n.options.slice(0,20).map(r=>r.label)}:{},customPrompt:"Suggest the most likely selection. Explain why this option is recommended."}}function z(i,e,n){const r=e instanceof Date?e.toISOString().split("T")[0]:e;return{fieldLabel:i,fieldType:"date",fieldValue:r,validationRules:{...n!=null&&n.min?{min:n.min}:{},...n!=null&&n.max?{max:n.max}:{},...n!=null&&n.disableWeekends?{noWeekends:!0}:{}},customPrompt:'Suggest a date. For example: "next business day", "end of month", "in 2 weeks". Explain your suggestion briefly.'}}function V(i,e,n){return{fieldLabel:i,fieldType:"color",fieldValue:e,schema:n!=null&&n.palette?{currentPalette:n.palette}:{},customPrompt:n!=null&&n.industry?`Industry: ${n.industry}. Suggest a color palette (3-5 hex colors) suitable for this context.`:"Suggest a color or palette of colors that works well for this context. Provide hex values."}}function me(i,e){return{fieldLabel:i,fieldType:"data-grid",schema:{...e!=null&&e.columns?{columns:e.columns}:{},...(e==null?void 0:e.rowCount)!=null?{totalRows:e.rowCount}:{}},formContext:{...e!=null&&e.currentFilters?{filters:e.currentFilters}:{},...e!=null&&e.currentSorts?{sorts:e.currentSorts}:{}},customPrompt:"Suggest column configuration, useful filters, or highlight potential data anomalies."}}function ge(i,e){return{fieldLabel:i,fieldType:"chart",schema:{...e!=null&&e.currentType?{chartType:e.currentType}:{},...(e==null?void 0:e.seriesCount)!=null?{series:e.seriesCount}:{},...(e==null?void 0:e.pointCount)!=null?{dataPoints:e.pointCount}:{}},customPrompt:e!=null&&e.dataDescription?`Data: ${e.dataDescription}. Suggest the best chart type and labeling strategy.`:"Suggest the most effective chart type for this data. Explain your recommendation."}}function _(i,e){return{fieldLabel:"Form auto-fill",fieldType:"form",schema:{fields:e},customPrompt:`User description: "${i}"
5
- Parse this description and return suggested values for each field as JSON: { ${e.map(n=>`"${n.label}": "value"`).join(", ")} }`}}function X(i,e,n,r,t){return{fieldLabel:i,fieldType:e,fieldValue:n,validationRules:t==null?void 0:t.rules,customPrompt:`Current validation error: "${r}". Provide a friendly, specific error message with an example of a valid value. Do NOT say "field is required" — instead explain what the user should enter.`}}function fe(i,e,n){const r=a.useMemo(()=>D(i,e,n),[i,e,n==null?void 0:n.placeholder,n==null?void 0:n.maxLength,n==null?void 0:n.pattern]);return m(r,n)}function he(i,e,n){const r=a.useMemo(()=>H(i,e,n),[i,e,n==null?void 0:n.min,n==null?void 0:n.max,n==null?void 0:n.step,n==null?void 0:n.unit]);return m(r,n)}function be(i,e,n){const r=a.useMemo(()=>j(i,e,n),[i,e,n==null?void 0:n.multiple]);return m(r,n)}function ye(i,e,n){const r=a.useMemo(()=>z(i,e,n),[i,e,n==null?void 0:n.min,n==null?void 0:n.max,n==null?void 0:n.disableWeekends]);return m(r,n)}function xe(i,e,n){const r=a.useMemo(()=>V(i,e,n),[i,e,n==null?void 0:n.industry]);return m(r,n)}function Se(i,e,n,r,t){const l=a.useMemo(()=>r?X(i,e,n,r,t):{fieldLabel:i,fieldType:e},[i,e,n,r]);return m(l,{...t,disabled:!r||(t==null?void 0:t.disabled)})}function Ce(i,e,n){const r=a.useMemo(()=>i?_(i,e):{fieldLabel:"Form"},[i,e]);return m(r,{...n,disabled:!i||(n==null?void 0:n.disabled)})}function U(i,e,n){const t=(e==null?void 0:e.split(`
6
- `))??[],l=(n==null?void 0:n.cursorLine)!=null?t.slice(Math.max(0,n.cursorLine-8),n.cursorLine+3).join(`
7
- `):t.slice(0,8*2).join(`
8
- `);return{fieldLabel:`Code editor (${i})`,fieldType:"code-editor",fieldValue:l||e,schema:{language:i,...n!=null&&n.framework?{framework:n.framework}:{},...(n==null?void 0:n.cursorLine)!=null?{cursorLine:n.cursorLine,cursorCol:n.cursorCol}:{}},customPrompt:`Language: ${i}${n!=null&&n.framework?`, framework: ${n.framework}`:""}.
9
- Provide a concise inline completion or improvement hint for the code near the cursor. Limit response to ${(n==null?void 0:n.maxSuggestLines)??5} lines of code. If unsure, suggest the most idiomatic approach for this language/framework.`}}function Q(i,e,n){var l;const r=(n==null?void 0:n.mode)??"grammar",t={seo:"Analyze this HTML for SEO: missing meta tags, heading hierarchy (h1→h2→h3), keyword density, image alt attributes. Return a prioritized list of improvements.",accessibility:"Audit this HTML for WCAG 2.1 AA issues: missing aria labels, alt text, heading structure, color contrast hints, keyboard navigation. List specific fixes.",grammar:"Fix grammar, punctuation, and writing style in the visible text content. Return the corrected text only (no HTML tags in response).",cleanup:"Clean up malformed, redundant, or overly nested HTML. Simplify structure while preserving semantics and content."};return{fieldLabel:i,fieldType:"html-editor",fieldValue:e==null?void 0:e.slice(0,2e3),schema:{mode:r,...(l=n==null?void 0:n.targetKeywords)!=null&&l.length?{targetKeywords:n.targetKeywords}:{},...n!=null&&n.locale?{locale:n.locale}:{}},customPrompt:t[r]}}function Z(i,e){const n=(e==null?void 0:e.mode)??"tag",r=`"${i}"`+((e==null?void 0:e.bpm)!=null?`, BPM: ${e.bpm}`:"")+(e!=null&&e.key?`, Key: ${e.key}`:"")+(e!=null&&e.genre?`, Genre: ${e.genre}`:"")+((e==null?void 0:e.duration)!=null?`, Duration: ${e.duration}s`:""),t={tag:`Audio: ${r}. Suggest genre tags, mood descriptors and playlist categories. Return as JSON array of strings.`,bpm:`Audio: ${r}. Suggest likely BPM range and musical key based on metadata. Return as JSON: { bpm: number, key: string }.`,mix:`Track: ${r}. Suggest EQ curve (JSON array of {freq, gain, q}), compression settings, and 2-3 compatible tracks for mixing.`,transcribe:"Return a transcription of the spoken audio content as JSON: { transcript: string, language: string, confidence: number }."};return{fieldLabel:`Audio: ${i}`,fieldType:"audio",schema:{mode:n,...(e==null?void 0:e.bpm)!=null?{bpm:e.bpm}:{},...e!=null&&e.key?{key:e.key}:{},...(e==null?void 0:e.duration)!=null?{duration:e.duration}:{},...e!=null&&e.genre?{genre:e.genre}:{}},customPrompt:t[n]}}function p(i,e){var l;const n=(e==null?void 0:e.mode)??"material",r=(e==null?void 0:e.targetDevice)??"web",t={material:`Scene "${i}", ${(e==null?void 0:e.meshCount)??"?"} meshes. Materials: ${((l=e==null?void 0:e.materials)==null?void 0:l.join(", "))||"none"}. Suggest PBR properties (roughness, metalness, baseColor) and texture maps for each material.`,optimize:`Scene "${i}", triangles: ${(e==null?void 0:e.triangleCount)??"?"}, target: ${r}. Identify budget issues and suggest LOD levels, mesh merging, and texture atlas strategy.`,lighting:`Scene "${i}", target: ${r}. Suggest a complete lighting setup (types, intensity, color, shadow settings) for realistic rendering.`,animation:`Rig in scene "${i}". Suggest animation approach (FK/IK, bone count), keyframe timing and easing curves for natural movement.`};return{fieldLabel:`3D scene: ${i}`,fieldType:"3d-scene",schema:{mode:n,...(e==null?void 0:e.meshCount)!=null?{meshes:e.meshCount}:{},...(e==null?void 0:e.triangleCount)!=null?{triangles:e.triangleCount}:{},...e!=null&&e.targetDevice?{target:e.targetDevice}:{}},customPrompt:t[n]}}function ee(i,e){const n=(e==null?void 0:e.mode)??"palette",r=(e==null?void 0:e.width)!=null?`${e.width}×${e.height??"?"}px`:"unknown dimensions",t={filter:`Image "${i}" (${r}). Suggest CSS/SVG filter parameters (brightness, contrast, saturate, hue-rotate, blur) as JSON: { brightness, contrast, saturate, hueRotate, blur }.`,palette:`Image "${i}". Extract or suggest a harmonious 5-color palette as JSON: { primary, secondary, accent, background, text }.`,upscale:`Image "${i}" at ${r}. Recommend upscaling strategy: model (ESRGAN/RealSR/SRCNN), scale factor, and expected quality gain.`,"style-transfer":`Image "${i}", target style: "${(e==null?void 0:e.targetStyle)??"artistic"}". Suggest style-transfer settings as JSON: { contentWeight, styleWeight, iterations, patchSize }.`};return{fieldLabel:`Graphics: ${i}`,fieldType:"graphics",schema:{mode:n,...(e==null?void 0:e.width)!=null?{width:e.width,height:e.height}:{},...e!=null&&e.targetStyle?{targetStyle:e.targetStyle}:{}},customPrompt:t[n]}}function ne(i,e){var n;return{fieldLabel:"Icon search",fieldType:"icon-picker",fieldValue:i,schema:{...e!=null&&e.style?{iconStyle:e.style}:{},...(e==null?void 0:e.limit)!=null?{maxResults:e.limit}:{},...(n=e==null?void 0:e.availableIcons)!=null&&n.length?{sampleIcons:e.availableIcons.slice(0,30)}:{}},customPrompt:`User query: "${i}"
10
- Return the ${(e==null?void 0:e.limit)??5} most semantically relevant icon names from the available set as a JSON array of strings, ordered by relevance. Prefer specific over generic names.`}}function ke(i,e,n){const r=a.useMemo(()=>U(i,e,n),[i,e,n==null?void 0:n.cursorLine,n==null?void 0:n.cursorCol,n==null?void 0:n.framework]);return m(r,n)}function ve(i,e,n){const r=a.useMemo(()=>Q(i,e,n),[i,e,n==null?void 0:n.mode,n==null?void 0:n.locale]);return m(r,n)}function we(i,e){const n=a.useMemo(()=>Z(i,e),[i,e==null?void 0:e.bpm,e==null?void 0:e.key,e==null?void 0:e.duration,e==null?void 0:e.mode]);return m(n,e)}function Ie(i,e){const n=a.useMemo(()=>p(i,e),[i,e==null?void 0:e.meshCount,e==null?void 0:e.triangleCount,e==null?void 0:e.targetDevice,e==null?void 0:e.mode]);return m(n,e)}function Te(i,e){const n=a.useMemo(()=>ee(i,e),[i,e==null?void 0:e.width,e==null?void 0:e.height,e==null?void 0:e.mode,e==null?void 0:e.targetStyle]);return m(n,e)}function Pe(i,e){const n=a.useMemo(()=>ne(i,e),[i,e==null?void 0:e.limit,e==null?void 0:e.style]);return m(n,{...e,disabled:!i||(e==null?void 0:e.disabled)})}function ie(i,e){var l;const n=(e==null?void 0:e.mode)??"npc-decision",r=(e==null?void 0:e.genre)??"fantasy",t={"npc-decision":`You are an AI game director. The NPC "${i}" must make a decision. Available BT nodes: ${JSON.stringify((e==null?void 0:e.btStatus)??[])}. Game state: ${JSON.stringify((e==null?void 0:e.gameState)??{})}. Return the name of the BT node to activate next, and one sentence of reasoning.`,dialogue:`You are a ${r} RPG writer. Write a short in-character dialogue line for NPC "${i}". Game state: ${JSON.stringify((e==null?void 0:e.gameState)??{})}. Max 2 sentences, no narrative descriptions.`,"procedural-level":`You are a ${r} game designer. Suggest a procedural level layout for a zone containing "${i}". Describe room count, enemy placement, loot, and one unique mechanic. Keep it under 150 words.`,"quest-description":`You are a ${r} quest designer. Write a compelling quest description involving "${i}". Include: objective, giver NPC, rewards, and a short flavour paragraph. Keep it under 120 words.`,"item-description":`You are a ${r} lore writer. Write a short item description for an item related to "${i}". Include: item name, rarity, flavour text, and one special property. Keep it under 80 words.`};return{fieldLabel:i,fieldType:`game-engine:${n}`,fieldValue:e==null?void 0:e.gameState,customPrompt:t[n],schema:{genre:r,mode:n,btNodes:(l=e==null?void 0:e.btStatus)==null?void 0:l.map(c=>c.node)}}}function $e(i,e){const n=a.useMemo(()=>ie(i,e),[i,e==null?void 0:e.mode,e==null?void 0:e.genre,JSON.stringify(e==null?void 0:e.btStatus),JSON.stringify(e==null?void 0:e.gameState)]);return m(n,e)}function re(i,e,n){const r=(n==null?void 0:n.mode)??"layout",t=(n==null?void 0:n.diagramType)??"flowchart",l={layout:`You are a diagram layout optimizer. Given this ${t} with ${i.length} nodes and ${e.length} edges, suggest optimal positions for each node to minimize edge crossings and improve readability. Return JSON: { suggestions: [{ id: string, x: number, y: number, reason: string }] }. Consider flow direction (top-to-bottom or left-to-right) and grouping related nodes.`,structure:`You are a diagram analyst. Analyze this ${t} structure. Identify: 1) Missing connections, 2) Potential bottlenecks, 3) Orphan nodes, 4) Cycles or loops. Return JSON: { issues: [{ type: string, description: string, nodeIds: string[] }], score: number }`,simplify:`You are a diagram simplifier. Suggest how to simplify this ${t} while preserving meaning. Identify: nodes that could be merged, redundant edges, or overly complex branches. Return JSON: { simplifications: [{ action: 'merge'|'remove'|'group', ids: string[], reason: string }] }`,group:`You are a diagram organizer. Suggest logical groupings for nodes in this ${t}. Consider semantic relationships, data flow patterns, and visual clustering. Return JSON: { groups: [{ name: string, nodeIds: string[], color?: string }] }`},c=i.map(s=>{var g;return{id:s.id,type:s.type,label:(g=s.label)==null?void 0:g.slice(0,30),pos:[Math.round(s.x),Math.round(s.y)]}}),w=e.map(s=>({id:s.id,src:s.source,tgt:s.target}));return{fieldLabel:`Diagram (${t})`,fieldType:`diagram:${r}`,fieldValue:JSON.stringify({nodes:c,edges:w}),schema:{diagramType:t,mode:r,nodeCount:i.length,edgeCount:e.length,containerSize:n==null?void 0:n.containerSize},customPrompt:l[r]}}function Ae(i,e,n){const r=a.useMemo(()=>re(i,e,n),[JSON.stringify(i),JSON.stringify(e),n==null?void 0:n.mode,n==null?void 0:n.diagramType]);return m(r,{...n,disabled:i.length===0||(n==null?void 0:n.disabled)})}function te(i,e){const n=(e==null?void 0:e.mode)??"generate",r=(e==null?void 0:e.presentationType)??"business",t=(e==null?void 0:e.duration)??15,l=Math.ceil(t/2),c={generate:`You are a presentation designer. Create a ${r} presentation outline based on: "${i}". Target audience: ${(e==null?void 0:e.audience)??"general"}. Duration: ${t} minutes (~${l} slides). Return JSON: { title: string, slides: [{ title: string, layout: 'title'|'content'|'two-column'|'chart'|'image', bullets?: string[], chartType?: string, speakerNotes?: string }] }. Include: clear slide titles, 3-5 bullet points per content slide, and brief speaker notes.`,summarize:`You are a presentation optimizer. Summarize this presentation to be more concise: "${i}". Reduce slide count by 30% while preserving key messages. Return JSON: { summary: string, reducedSlides: [{ title: string, keyPoints: string[] }] }`,expand:`You are a presentation expert. Expand this brief outline into a detailed presentation: "${i}". Add supporting details, examples, and transitions. Target: ${l} slides. Return JSON: { slides: [{ title: string, content: string, transitions?: string, animations?: string[] }] }`,improve:`You are a presentation coach. Review and improve this presentation structure: "${i}". Suggest: better flow, stronger opening/closing, clearer data visualization. Return JSON: { improvements: [{ slide: number, issue: string, suggestion: string }], score: number }`};return{fieldLabel:`Presentation (${r})`,fieldType:`presentation:${n}`,fieldValue:i,schema:{presentationType:r,mode:n,duration:t,slideCount:l,audience:e==null?void 0:e.audience,hasData:(e==null?void 0:e.dataContext)!=null},customPrompt:c[n]}}function Re(i,e){const n=a.useMemo(()=>te(i,e),[i,e==null?void 0:e.mode,e==null?void 0:e.presentationType,e==null?void 0:e.duration,e==null?void 0:e.audience]);return m(n,{...e,disabled:!i||(e==null?void 0:e.disabled)})}function ae(i,e){var t;const n=(e==null?void 0:e.mode)??"all",r={alignment:"Analyze element alignment on this slide. Suggest adjustments to create visual harmony. Return JSON: { suggestions: [{ elementIndex: number, issue: string, fixX?: number, fixY?: number }] }",contrast:"Analyze color contrast and readability. Suggest improvements for accessibility (WCAG AA). Return JSON: { suggestions: [{ area: string, currentContrast: number, suggestedFix: string }] }",spacing:"Analyze whitespace and element spacing. Apply the rule of thirds and consistent margins. Return JSON: { suggestions: [{ elementIndex: number, issue: string, suggestedMargin: number }] }",typography:"Analyze typography: hierarchy, font sizes, line heights, readability. Return JSON: { suggestions: [{ area: string, issue: string, suggestedFontSize?: number }] }",all:"Perform a complete design review of this slide. Check alignment, contrast, spacing, and typography. Return JSON: { score: number, suggestions: [{ category: string, issue: string, fix: string }] }. Prioritize issues by impact on visual clarity."};return{fieldLabel:i.title??"Slide Design",fieldType:`slide-design:${n}`,fieldValue:JSON.stringify(i),schema:{mode:n,hasElements:(((t=i.elements)==null?void 0:t.length)??0)>0,layout:i.layout,brandColors:e==null?void 0:e.brandColors},customPrompt:r[n]}}function Le(i,e){const n=a.useMemo(()=>ae(i,e),[JSON.stringify(i),e==null?void 0:e.mode,JSON.stringify(e==null?void 0:e.brandColors)]);return m(n,e)}function Ne(i,e,n){const r=a.forwardRef((t,l)=>{const{aiEnabled:c=!0,aiPosition:w="right",aiPrompt:s,aiDebounceMs:g=500,aiShowOnHover:y=!1,aiTriggerIcon:I,...f}=t,S=a.useMemo(()=>{const C=e(f);return s&&(C.customPrompt=s),C},[f,s]);return o.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[o.jsx(i,{...f,ref:l}),c&&o.jsx(J,{context:S,position:w,debounceMs:g,showOnHover:y,triggerIcon:I})]})});return r.displayName=n??`withAIHint(${i.displayName??i.name??"Component"})`,r}function Me(i){return D(i.label??"Text",i.value,{placeholder:i.placeholder,maxLength:i.maxLength})}function Oe(i){return H(i.label??"Number",i.value,{min:i.min,max:i.max,step:i.step})}function Ee(i){return j(i.label??"Select",i.value,{options:i.options,multiple:i.multiple})}function Je(i){return z(i.label??"Date",i.value,{min:i.min,max:i.max})}function De(i){return V(i.label??"Color",i.value)}exports.NiceAIHintBubble=J;exports.NiceAIProvider=ue;exports.RateLimiter=B;exports.build3DSceneContext=p;exports.buildAudioContext=Z;exports.buildChartContext=ge;exports.buildCodeEditorContext=U;exports.buildColorPickerContext=V;exports.buildDataGridContext=me;exports.buildDatePickerContext=z;exports.buildDiagramLayoutContext=re;exports.buildFormFillContext=_;exports.buildGameEngineContext=ie;exports.buildGraphicsContext=ee;exports.buildHtmlEditorContext=Q;exports.buildIconSearchContext=ne;exports.buildNumberInputContext=H;exports.buildPresentationGenerateContext=te;exports.buildSelectContext=j;exports.buildSlideDesignContext=ae;exports.buildTextInputContext=D;exports.buildValidationContext=X;exports.colorControlContext=De;exports.dateControlContext=Je;exports.numberControlContext=Oe;exports.parseJSONResponse=K;exports.parseSSEStream=Y;exports.selectControlContext=Ee;exports.textControlContext=Me;exports.useAI3DHint=Ie;exports.useAIAudioHint=we;exports.useAICodeHint=ke;exports.useAIColorHint=xe;exports.useAIContext=E;exports.useAIDateHint=ye;exports.useAIDiagramLayout=Ae;exports.useAIFormFill=Ce;exports.useAIGraphicsHint=Te;exports.useAIHtmlHint=ve;exports.useAIIconSearch=Pe;exports.useAINpcHint=$e;exports.useAINumberHint=he;exports.useAIPresentationGenerate=Re;exports.useAISelectHint=be;exports.useAISlideDesign=Le;exports.useAITextHint=fe;exports.useAIValidation=Se;exports.useNiceAIHint=m;exports.withAIHint=Ne;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),d=require("react");class de{constructor(t={},a){this.timestamps=[],this.tokenCount=0,this.warningEmitted=!1,this.config={maxRequestsPerMinute:t.maxRequestsPerMinute??30,maxTokensPerSession:t.maxTokensPerSession??1e4,warnThresholdPercent:t.warnThresholdPercent??80},this.onWarning=a}canRequest(){return this.pruneOldTimestamps(),!(this.timestamps.length>=this.config.maxRequestsPerMinute||this.tokenCount>=this.config.maxTokensPerSession)}recordRequest(){return this.canRequest()?(this.timestamps.push(Date.now()),!0):!1}recordTokens(t){this.tokenCount+=t,this.checkWarning()}getStatus(){this.pruneOldTimestamps();const t=this.config.maxTokensPerSession>0?this.tokenCount/this.config.maxTokensPerSession*100:0,a=this.config.maxRequestsPerMinute>0?this.timestamps.length/this.config.maxRequestsPerMinute*100:0;return{requestsThisMinute:this.timestamps.length,tokensThisSession:this.tokenCount,isLimited:!this.canRequest(),isWarning:t>=this.config.warnThresholdPercent||a>=this.config.warnThresholdPercent}}reset(){this.timestamps=[],this.tokenCount=0,this.warningEmitted=!1}pruneOldTimestamps(){const t=Date.now()-6e4;this.timestamps=this.timestamps.filter(a=>a>t)}checkWarning(){var a;if(this.warningEmitted)return;this.getStatus().isWarning&&(this.warningEmitted=!0,(a=this.onWarning)==null||a.call(this))}}const oe=d.createContext(null);function we({config:s,rateLimits:t,enabled:a=!0,onRateLimitWarning:l,children:c}){const n=d.useRef(null);n.current||(n.current=new de(t,l));const v=d.useCallback(()=>n.current.getStatus(),[]),N=d.useMemo(()=>({config:s,enabled:a,rateLimiter:n.current,getRateLimitStatus:v}),[s,a,v]);return e.jsx(oe.Provider,{value:N,children:c})}function Q(){return d.useContext(oe)}async function*ue(s,t){var n,v,N,C,f,I,D,T,k;const a=(n=s.body)==null?void 0:n.getReader();if(!a)throw new Error("Response body is not readable");const l=new TextDecoder;let c="";try{for(;!(t!=null&&t.aborted);){const{done:M,value:y}=await a.read();if(M)break;c+=l.decode(y,{stream:!0});const z=c.split(`
2
+ `);c=z.pop()??"";for(const h of z){const b=h.trim();if(!(!b||b===":")){if(b.startsWith("data:")){const g=b.slice(5).trim();if(g==="[DONE]"){yield{token:"",done:!0};return}try{const L=JSON.parse(g),R=((C=(N=(v=L.choices)==null?void 0:v[0])==null?void 0:N.delta)==null?void 0:C.content)??"",$=((I=(f=L.choices)==null?void 0:f[0])==null?void 0:I.finish_reason)==="stop";(R||$)&&(yield{token:R,done:$,usage:L.usage})}catch{g&&(yield{token:g,done:!1})}continue}try{const g=JSON.parse(b),L=g.text??g.content??g.token??"";L&&(yield{token:L,done:!1})}catch{b&&(yield{token:b,done:!1})}}}}if(c.trim()){const M=c.trim();if(M.startsWith("data:")){const y=M.slice(5).trim();if(y&&y!=="[DONE]")try{const h=((k=(T=(D=JSON.parse(y).choices)==null?void 0:D[0])==null?void 0:T.delta)==null?void 0:k.content)??"";h&&(yield{token:h,done:!0})}catch{yield{token:y,done:!0}}}}}finally{a.releaseLock()}}async function me(s){var a,l,c,n;const t=await s.json();if((c=(l=(a=t.choices)==null?void 0:a[0])==null?void 0:l.message)!=null&&c.content)return{text:t.choices[0].message.content,usage:t.usage};if((n=t.message)!=null&&n.content)return{text:t.message.content};if(typeof t.text=="string")return{text:t.text};if(typeof t.content=="string")return{text:t.content};if(typeof t.response=="string")return{text:t.response};throw new Error("Unrecognized AI response format")}const Y=new Map;function ie(s,t){const a=t?{...s,fieldValue:void 0,formContext:void 0}:s;return JSON.stringify(a)}function ke(s,t){const a=[],l=t.systemPrompt??"You are a helpful assistant providing concise contextual hints for form fields. Keep responses short (1-3 sentences). Be specific and actionable.";a.push({role:"system",content:l});const c=[];if(s.fieldLabel&&c.push(`Field: "${s.fieldLabel}"`),s.fieldType&&c.push(`Type: ${s.fieldType}`),!t.privacyMode&&s.fieldValue!==void 0){const v=typeof s.fieldValue=="string"?s.fieldValue:JSON.stringify(s.fieldValue);c.push(`Current value: ${v}`)}s.validationRules&&Object.keys(s.validationRules).length>0&&c.push(`Validation: ${JSON.stringify(s.validationRules)}`),s.schema&&Object.keys(s.schema).length>0&&c.push(`Schema: ${JSON.stringify(s.schema)}`),!t.privacyMode&&s.formContext&&Object.keys(s.formContext).length>0&&c.push(`Form context: ${JSON.stringify(s.formContext)}`),s.customPrompt&&c.push(s.customPrompt);const n=c.length>0?`Provide a helpful hint for this field:
3
+ ${c.join(`
4
+ `)}`:"Provide a helpful suggestion.";return a.push({role:"user",content:n}),a}function q(s={},t={}){s=s??{},t=t??{};const{debounceMs:a=500,disabled:l=!1}=t,c=Q(),[n,v]=d.useState(""),[N,C]=d.useState(!1),[f,I]=d.useState(null),[D,T]=d.useState(!1),k=d.useRef(null),M=d.useRef(0),y=d.useCallback(async()=>{var H,V,j;if(!c||!c.enabled||l)return;const{config:b,rateLimiter:g}=c;if(!g.recordRequest()){I("Rate limit exceeded. Please wait before requesting another hint.");return}const L=ie(s,b.privacyMode??!1),R=Y.get(L);if(R){v(R),C(!1),I(null),T(!1);return}(H=k.current)==null||H.abort();const $=new AbortController;k.current=$,C(!0),I(null),v(""),T(!1);const F=ke(s,b),B=b.stream!==!1;try{const i={"Content-Type":"application/json",...b.headers};b.apiKey&&(i.Authorization=`Bearer ${b.apiKey}`);const m=JSON.stringify({model:b.model??"gpt-3.5-turbo",messages:F,temperature:b.temperature??.7,max_tokens:b.maxTokens??256,stream:B}),w=await fetch(b.endpoint,{method:"POST",headers:i,body:m,signal:$.signal});if(!w.ok){const p=await w.text().catch(()=>w.statusText);throw new Error(`AI request failed (${w.status}): ${p}`)}if(B){T(!0);let p="";for await(const E of ue(w,$.signal))if($.signal.aborted||(p+=E.token,v(p),(V=E.usage)!=null&&V.completion_tokens&&g.recordTokens(E.usage.completion_tokens),E.done))break;if(p.length>0){const E=Math.ceil(p.length/4);g.recordTokens(E)}Y.set(L,p)}else{const p=await me(w);v(p.text),Y.set(L,p.text),(j=p.usage)!=null&&j.completion_tokens?g.recordTokens(p.usage.completion_tokens):g.recordTokens(Math.ceil(p.text.length/4))}}catch(i){if(i instanceof DOMException&&i.name==="AbortError")return;I(i instanceof Error?i.message:"AI hint request failed")}finally{$.signal.aborted||(C(!1),T(!1))}},[c,s,l]);d.useEffect(()=>{if(!c||!c.enabled||l)return;const b=setTimeout(y,a);return()=>clearTimeout(b)},[s==null?void 0:s.fieldLabel,s==null?void 0:s.fieldType,s==null?void 0:s.fieldValue,s==null?void 0:s.customPrompt,a,l,c==null?void 0:c.enabled,M.current]),d.useEffect(()=>()=>{var b;(b=k.current)==null||b.abort()},[]);const z=d.useCallback(()=>{var b;(b=k.current)==null||b.abort(),C(!1),T(!1)},[]),h=d.useCallback(()=>{if(c){const b=ie(s,c.config.privacyMode??!1);Y.delete(b)}M.current+=1,y()},[c,s,y]);return!c||!c.enabled?{text:"",loading:!1,error:null,streaming:!1,abort:()=>{},refresh:()=>{},hint:null,fetchHint:async()=>{}}:{text:n,loading:N,error:f,streaming:D,abort:z,refresh:h,hint:n?{content:n}:null,fetchHint:async()=>{await y()}}}function Ie(){return e.jsxs("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:[e.jsx("path",{d:"M12 3l1.5 5.5L19 10l-5.5 1.5L12 17l-1.5-5.5L5 10l5.5-1.5z"}),e.jsx("path",{d:"M19 15l.5 2 2 .5-2 .5-.5 2-.5-2-2-.5 2-.5z"}),e.jsx("path",{d:"M5 19l.5 1.5 1.5.5-1.5.5-.5 1.5-.5-1.5-1.5-.5 1.5-.5z"})]})}function Te(s,t){if(s!=="auto"||!t)return s==="auto"?"top":s;const a=t.top,l=window.innerHeight-t.bottom,c=t.left,n=window.innerWidth-t.right,v=Math.max(a,l,c,n);return v===a?"top":v===l?"bottom":v===n?"right":"left"}function $e(s){const t={position:"absolute",zIndex:9999,minWidth:200,maxWidth:320,padding:"8px 12px",borderRadius:8,fontSize:13,lineHeight:1.5,backgroundColor:"var(--ntd-ai-bg, #1e1e2e)",color:"var(--ntd-ai-fg, #cdd6f4)",border:"1px solid var(--ntd-ai-border, #45475a)",boxShadow:"0 4px 16px rgba(0,0,0,0.25)",wordWrap:"break-word"};switch(s){case"top":return{...t,bottom:"100%",left:"50%",transform:"translateX(-50%)",marginBottom:6};case"bottom":return{...t,top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:6};case"left":return{...t,right:"100%",top:"50%",transform:"translateY(-50%)",marginRight:6};case"right":return{...t,left:"100%",top:"50%",transform:"translateY(-50%)",marginLeft:6};default:return{...t,bottom:"100%",left:"50%",transform:"translateX(-50%)",marginBottom:6}}}const Z=d.forwardRef(({context:s,position:t="auto",debounceMs:a=500,showOnHover:l=!1,triggerIcon:c,className:n,style:v},N)=>{var L;const C=Q(),[f,I]=d.useState(!1),[D,T]=d.useState(!1),k=d.useRef(null),M=d.useRef(null),y=q(s,{debounceMs:a,disabled:!D});d.useEffect(()=>{if(!f)return;const R=$=>{var B,H;const F=$.target;(B=k.current)!=null&&B.contains(F)||(H=M.current)!=null&&H.contains(F)||(I(!1),T(!1))};return document.addEventListener("mousedown",R),()=>document.removeEventListener("mousedown",R)},[f]),d.useEffect(()=>{if(!f)return;const R=$=>{$.key==="Escape"&&(I(!1),T(!1),y.abort())};return document.addEventListener("keydown",R),()=>document.removeEventListener("keydown",R)},[f,y]);const z=d.useCallback(R=>{if(R.stopPropagation(),l)return;const $=!f;I($),T($)},[f,l]),h=d.useCallback(()=>{l&&(I(!0),T(!0))},[l]),b=d.useCallback(()=>{l&&(I(!1),T(!1))},[l]);if(!C||!C.enabled)return null;const g=Te(t,((L=k.current)==null?void 0:L.getBoundingClientRect())??null);return e.jsxs("span",{ref:N,className:n,style:{position:"relative",display:"inline-flex",...v},onMouseEnter:h,onMouseLeave:b,children:[e.jsx("button",{ref:k,type:"button",onClick:z,"aria-label":"AI hint","aria-expanded":f,className:"ntd-ai-trigger",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",background:"transparent",cursor:"pointer",padding:2,borderRadius:4,color:"var(--ntd-ai-trigger-color, #a78bfa)",opacity:.7,transition:"opacity 0.2s, transform 0.2s"},children:c??e.jsx(Ie,{})}),f&&e.jsxs("div",{ref:M,role:"tooltip",className:"ntd-ai-popover",style:$e(g),children:[y.loading&&!y.text&&e.jsxs("div",{className:"ntd-ai-loading",style:{display:"flex",alignItems:"center",gap:6},children:[e.jsx("span",{style:{display:"inline-block",width:12,height:12,border:"2px solid var(--ntd-ai-border, #45475a)",borderTopColor:"var(--ntd-ai-trigger-color, #a78bfa)",borderRadius:"50%",animation:"ntd-ai-spin 0.8s linear infinite"}}),e.jsx("span",{style:{opacity:.6},children:"Thinking..."})]}),y.text&&e.jsxs("div",{className:"ntd-ai-content",children:[y.text,y.streaming&&e.jsx("span",{className:"ntd-ai-cursor",style:{display:"inline-block",width:2,height:"1em",backgroundColor:"var(--ntd-ai-trigger-color, #a78bfa)",marginLeft:1,animation:"ntd-ai-blink 0.8s step-end infinite",verticalAlign:"text-bottom"}})]}),y.error&&e.jsx("div",{className:"ntd-ai-error",style:{color:"var(--ntd-ai-error, #f38ba8)"},children:y.error}),y.text&&!y.streaming&&e.jsxs("div",{style:{display:"flex",justifyContent:"flex-end",gap:4,marginTop:6,paddingTop:6,borderTop:"1px solid var(--ntd-ai-border, #45475a)"},children:[e.jsx("button",{type:"button",onClick:()=>y.refresh(),className:"ntd-ai-action",style:{fontSize:11,padding:"2px 6px",border:"1px solid var(--ntd-ai-border, #45475a)",borderRadius:4,background:"transparent",color:"inherit",cursor:"pointer"},children:"↻ Refresh"}),e.jsx("button",{type:"button",onClick:()=>{var R;(R=navigator.clipboard)==null||R.writeText(y.text)},className:"ntd-ai-action",style:{fontSize:11,padding:"2px 6px",border:"1px solid var(--ntd-ai-border, #45475a)",borderRadius:4,background:"transparent",color:"inherit",cursor:"pointer"},children:"⎘ Copy"})]})]})]})});Z.displayName="NiceAIHintBubble";function ee(s,t,a){return{fieldLabel:s,fieldType:"text",fieldValue:t,validationRules:{...(a==null?void 0:a.maxLength)!=null?{maxLength:a.maxLength}:{},...a!=null&&a.pattern?{pattern:a.pattern}:{}},customPrompt:a!=null&&a.placeholder?`Placeholder: "${a.placeholder}". Suggest content or correct grammar.`:"Suggest content, correct grammar, or auto-complete the text."}}function te(s,t,a){return{fieldLabel:s,fieldType:"number",fieldValue:t,validationRules:{...(a==null?void 0:a.min)!=null?{min:a.min}:{},...(a==null?void 0:a.max)!=null?{max:a.max}:{},...(a==null?void 0:a.step)!=null?{step:a.step}:{}},customPrompt:a!=null&&a.unit?`Unit: ${a.unit}. Suggest a reasonable value or range for this field.`:"Suggest a reasonable value or range for this field based on the label and constraints."}}function ae(s,t,a){return{fieldLabel:s,fieldType:a!=null&&a.multiple?"multi-select":"select",fieldValue:t,schema:a!=null&&a.options?{availableOptions:a.options.slice(0,20).map(l=>l.label)}:{},customPrompt:"Suggest the most likely selection. Explain why this option is recommended."}}function se(s,t,a){const l=t instanceof Date?t.toISOString().split("T")[0]:t;return{fieldLabel:s,fieldType:"date",fieldValue:l,validationRules:{...a!=null&&a.min?{min:a.min}:{},...a!=null&&a.max?{max:a.max}:{},...a!=null&&a.disableWeekends?{noWeekends:!0}:{}},customPrompt:'Suggest a date. For example: "next business day", "end of month", "in 2 weeks". Explain your suggestion briefly.'}}function ne(s,t,a){return{fieldLabel:s,fieldType:"color",fieldValue:t,schema:a!=null&&a.palette?{currentPalette:a.palette}:{},customPrompt:a!=null&&a.industry?`Industry: ${a.industry}. Suggest a color palette (3-5 hex colors) suitable for this context.`:"Suggest a color or palette of colors that works well for this context. Provide hex values."}}function Re(s,t){return{fieldLabel:s,fieldType:"data-grid",schema:{...t!=null&&t.columns?{columns:t.columns}:{},...(t==null?void 0:t.rowCount)!=null?{totalRows:t.rowCount}:{}},formContext:{...t!=null&&t.currentFilters?{filters:t.currentFilters}:{},...t!=null&&t.currentSorts?{sorts:t.currentSorts}:{}},customPrompt:"Suggest column configuration, useful filters, or highlight potential data anomalies."}}function Ae(s,t){return{fieldLabel:s,fieldType:"chart",schema:{...t!=null&&t.currentType?{chartType:t.currentType}:{},...(t==null?void 0:t.seriesCount)!=null?{series:t.seriesCount}:{},...(t==null?void 0:t.pointCount)!=null?{dataPoints:t.pointCount}:{}},customPrompt:t!=null&&t.dataDescription?`Data: ${t.dataDescription}. Suggest the best chart type and labeling strategy.`:"Suggest the most effective chart type for this data. Explain your recommendation."}}function he(s,t){return{fieldLabel:"Form auto-fill",fieldType:"form",schema:{fields:t},customPrompt:`User description: "${s}"
5
+ Parse this description and return suggested values for each field as JSON: { ${t.map(a=>`"${a.label}": "value"`).join(", ")} }`}}function xe(s,t,a,l,c){return{fieldLabel:s,fieldType:t,fieldValue:a,validationRules:c==null?void 0:c.rules,customPrompt:`Current validation error: "${l}". Provide a friendly, specific error message with an example of a valid value. Do NOT say "field is required" — instead explain what the user should enter.`}}function Pe(s,t,a){const l=d.useMemo(()=>ee(s,t,a),[s,t,a==null?void 0:a.placeholder,a==null?void 0:a.maxLength,a==null?void 0:a.pattern]);return q(l,a)}function Me(s,t,a){const l=d.useMemo(()=>te(s,t,a),[s,t,a==null?void 0:a.min,a==null?void 0:a.max,a==null?void 0:a.step,a==null?void 0:a.unit]);return q(l,a)}function Le(s,t,a){const l=d.useMemo(()=>ae(s,t,a),[s,t,a==null?void 0:a.multiple]);return q(l,a)}function De(s,t,a){const l=d.useMemo(()=>se(s,t,a),[s,t,a==null?void 0:a.min,a==null?void 0:a.max,a==null?void 0:a.disableWeekends]);return q(l,a)}function Oe(s,t,a){const l=d.useMemo(()=>ne(s,t,a),[s,t,a==null?void 0:a.industry]);return q(l,a)}function Ee(s,t,a,l,c){const n=d.useMemo(()=>l?xe(s,t,a,l,c):{fieldLabel:s,fieldType:t},[s,t,a,l]);return q(n,{...c,disabled:!l||(c==null?void 0:c.disabled)})}function Je(s,t,a){const l=d.useMemo(()=>s?he(s,t):{fieldLabel:"Form"},[s,t]);return q(l,{...a,disabled:!s||(a==null?void 0:a.disabled)})}function ge(s,t,a){const c=(t==null?void 0:t.split(`
6
+ `))??[],n=(a==null?void 0:a.cursorLine)!=null?c.slice(Math.max(0,a.cursorLine-8),a.cursorLine+3).join(`
7
+ `):c.slice(0,8*2).join(`
8
+ `);return{fieldLabel:`Code editor (${s})`,fieldType:"code-editor",fieldValue:n||t,schema:{language:s,...a!=null&&a.framework?{framework:a.framework}:{},...(a==null?void 0:a.cursorLine)!=null?{cursorLine:a.cursorLine,cursorCol:a.cursorCol}:{}},customPrompt:`Language: ${s}${a!=null&&a.framework?`, framework: ${a.framework}`:""}.
9
+ Provide a concise inline completion or improvement hint for the code near the cursor. Limit response to ${(a==null?void 0:a.maxSuggestLines)??5} lines of code. If unsure, suggest the most idiomatic approach for this language/framework.`}}function fe(s,t,a){var n;const l=(a==null?void 0:a.mode)??"grammar",c={seo:"Analyze this HTML for SEO: missing meta tags, heading hierarchy (h1→h2→h3), keyword density, image alt attributes. Return a prioritized list of improvements.",accessibility:"Audit this HTML for WCAG 2.1 AA issues: missing aria labels, alt text, heading structure, color contrast hints, keyboard navigation. List specific fixes.",grammar:"Fix grammar, punctuation, and writing style in the visible text content. Return the corrected text only (no HTML tags in response).",cleanup:"Clean up malformed, redundant, or overly nested HTML. Simplify structure while preserving semantics and content."};return{fieldLabel:s,fieldType:"html-editor",fieldValue:t==null?void 0:t.slice(0,2e3),schema:{mode:l,...(n=a==null?void 0:a.targetKeywords)!=null&&n.length?{targetKeywords:a.targetKeywords}:{},...a!=null&&a.locale?{locale:a.locale}:{}},customPrompt:c[l]}}function be(s,t){const a=(t==null?void 0:t.mode)??"tag",l=`"${s}"`+((t==null?void 0:t.bpm)!=null?`, BPM: ${t.bpm}`:"")+(t!=null&&t.key?`, Key: ${t.key}`:"")+(t!=null&&t.genre?`, Genre: ${t.genre}`:"")+((t==null?void 0:t.duration)!=null?`, Duration: ${t.duration}s`:""),c={tag:`Audio: ${l}. Suggest genre tags, mood descriptors and playlist categories. Return as JSON array of strings.`,bpm:`Audio: ${l}. Suggest likely BPM range and musical key based on metadata. Return as JSON: { bpm: number, key: string }.`,mix:`Track: ${l}. Suggest EQ curve (JSON array of {freq, gain, q}), compression settings, and 2-3 compatible tracks for mixing.`,transcribe:"Return a transcription of the spoken audio content as JSON: { transcript: string, language: string, confidence: number }."};return{fieldLabel:`Audio: ${s}`,fieldType:"audio",schema:{mode:a,...(t==null?void 0:t.bpm)!=null?{bpm:t.bpm}:{},...t!=null&&t.key?{key:t.key}:{},...(t==null?void 0:t.duration)!=null?{duration:t.duration}:{},...t!=null&&t.genre?{genre:t.genre}:{}},customPrompt:c[a]}}function je(s,t){var n;const a=(t==null?void 0:t.mode)??"material",l=(t==null?void 0:t.targetDevice)??"web",c={material:`Scene "${s}", ${(t==null?void 0:t.meshCount)??"?"} meshes. Materials: ${((n=t==null?void 0:t.materials)==null?void 0:n.join(", "))||"none"}. Suggest PBR properties (roughness, metalness, baseColor) and texture maps for each material.`,optimize:`Scene "${s}", triangles: ${(t==null?void 0:t.triangleCount)??"?"}, target: ${l}. Identify budget issues and suggest LOD levels, mesh merging, and texture atlas strategy.`,lighting:`Scene "${s}", target: ${l}. Suggest a complete lighting setup (types, intensity, color, shadow settings) for realistic rendering.`,animation:`Rig in scene "${s}". Suggest animation approach (FK/IK, bone count), keyframe timing and easing curves for natural movement.`};return{fieldLabel:`3D scene: ${s}`,fieldType:"3d-scene",schema:{mode:a,...(t==null?void 0:t.meshCount)!=null?{meshes:t.meshCount}:{},...(t==null?void 0:t.triangleCount)!=null?{triangles:t.triangleCount}:{},...t!=null&&t.targetDevice?{target:t.targetDevice}:{}},customPrompt:c[a]}}function ye(s,t){const a=(t==null?void 0:t.mode)??"palette",l=(t==null?void 0:t.width)!=null?`${t.width}×${t.height??"?"}px`:"unknown dimensions",c={filter:`Image "${s}" (${l}). Suggest CSS/SVG filter parameters (brightness, contrast, saturate, hue-rotate, blur) as JSON: { brightness, contrast, saturate, hueRotate, blur }.`,palette:`Image "${s}". Extract or suggest a harmonious 5-color palette as JSON: { primary, secondary, accent, background, text }.`,upscale:`Image "${s}" at ${l}. Recommend upscaling strategy: model (ESRGAN/RealSR/SRCNN), scale factor, and expected quality gain.`,"style-transfer":`Image "${s}", target style: "${(t==null?void 0:t.targetStyle)??"artistic"}". Suggest style-transfer settings as JSON: { contentWeight, styleWeight, iterations, patchSize }.`};return{fieldLabel:`Graphics: ${s}`,fieldType:"graphics",schema:{mode:a,...(t==null?void 0:t.width)!=null?{width:t.width,height:t.height}:{},...t!=null&&t.targetStyle?{targetStyle:t.targetStyle}:{}},customPrompt:c[a]}}function ve(s,t){var a;return{fieldLabel:"Icon search",fieldType:"icon-picker",fieldValue:s,schema:{...t!=null&&t.style?{iconStyle:t.style}:{},...(t==null?void 0:t.limit)!=null?{maxResults:t.limit}:{},...(a=t==null?void 0:t.availableIcons)!=null&&a.length?{sampleIcons:t.availableIcons.slice(0,30)}:{}},customPrompt:`User query: "${s}"
10
+ Return the ${(t==null?void 0:t.limit)??5} most semantically relevant icon names from the available set as a JSON array of strings, ordered by relevance. Prefer specific over generic names.`}}function qe(s,t,a){const l=d.useMemo(()=>ge(s,t,a),[s,t,a==null?void 0:a.cursorLine,a==null?void 0:a.cursorCol,a==null?void 0:a.framework]);return q(l,a)}function ze(s,t,a){const l=d.useMemo(()=>fe(s,t,a),[s,t,a==null?void 0:a.mode,a==null?void 0:a.locale]);return q(l,a)}function Fe(s,t){const a=d.useMemo(()=>be(s,t),[s,t==null?void 0:t.bpm,t==null?void 0:t.key,t==null?void 0:t.duration,t==null?void 0:t.mode]);return q(a,t)}function Be(s,t){const a=d.useMemo(()=>je(s,t),[s,t==null?void 0:t.meshCount,t==null?void 0:t.triangleCount,t==null?void 0:t.targetDevice,t==null?void 0:t.mode]);return q(a,t)}function He(s,t){const a=d.useMemo(()=>ye(s,t),[s,t==null?void 0:t.width,t==null?void 0:t.height,t==null?void 0:t.mode,t==null?void 0:t.targetStyle]);return q(a,t)}function Ue(s,t){const a=d.useMemo(()=>ve(s,t),[s,t==null?void 0:t.limit,t==null?void 0:t.style]);return q(a,{...t,disabled:!s||(t==null?void 0:t.disabled)})}function Ne(s,t){var n;const a=(t==null?void 0:t.mode)??"npc-decision",l=(t==null?void 0:t.genre)??"fantasy",c={"npc-decision":`You are an AI game director. The NPC "${s}" must make a decision. Available BT nodes: ${JSON.stringify((t==null?void 0:t.btStatus)??[])}. Game state: ${JSON.stringify((t==null?void 0:t.gameState)??{})}. Return the name of the BT node to activate next, and one sentence of reasoning.`,dialogue:`You are a ${l} RPG writer. Write a short in-character dialogue line for NPC "${s}". Game state: ${JSON.stringify((t==null?void 0:t.gameState)??{})}. Max 2 sentences, no narrative descriptions.`,"procedural-level":`You are a ${l} game designer. Suggest a procedural level layout for a zone containing "${s}". Describe room count, enemy placement, loot, and one unique mechanic. Keep it under 150 words.`,"quest-description":`You are a ${l} quest designer. Write a compelling quest description involving "${s}". Include: objective, giver NPC, rewards, and a short flavour paragraph. Keep it under 120 words.`,"item-description":`You are a ${l} lore writer. Write a short item description for an item related to "${s}". Include: item name, rarity, flavour text, and one special property. Keep it under 80 words.`};return{fieldLabel:s,fieldType:`game-engine:${a}`,fieldValue:t==null?void 0:t.gameState,customPrompt:c[a],schema:{genre:l,mode:a,btNodes:(n=t==null?void 0:t.btStatus)==null?void 0:n.map(v=>v.node)}}}function _e(s,t){const a=d.useMemo(()=>Ne(s,t),[s,t==null?void 0:t.mode,t==null?void 0:t.genre,JSON.stringify(t==null?void 0:t.btStatus),JSON.stringify(t==null?void 0:t.gameState)]);return q(a,t)}function Ce(s,t,a){const l=(a==null?void 0:a.mode)??"layout",c=(a==null?void 0:a.diagramType)??"flowchart",n={layout:`You are a diagram layout optimizer. Given this ${c} with ${s.length} nodes and ${t.length} edges, suggest optimal positions for each node to minimize edge crossings and improve readability. Return JSON: { suggestions: [{ id: string, x: number, y: number, reason: string }] }. Consider flow direction (top-to-bottom or left-to-right) and grouping related nodes.`,structure:`You are a diagram analyst. Analyze this ${c} structure. Identify: 1) Missing connections, 2) Potential bottlenecks, 3) Orphan nodes, 4) Cycles or loops. Return JSON: { issues: [{ type: string, description: string, nodeIds: string[] }], score: number }`,simplify:`You are a diagram simplifier. Suggest how to simplify this ${c} while preserving meaning. Identify: nodes that could be merged, redundant edges, or overly complex branches. Return JSON: { simplifications: [{ action: 'merge'|'remove'|'group', ids: string[], reason: string }] }`,group:`You are a diagram organizer. Suggest logical groupings for nodes in this ${c}. Consider semantic relationships, data flow patterns, and visual clustering. Return JSON: { groups: [{ name: string, nodeIds: string[], color?: string }] }`},v=s.map(C=>{var f;return{id:C.id,type:C.type,label:(f=C.label)==null?void 0:f.slice(0,30),pos:[Math.round(C.x),Math.round(C.y)]}}),N=t.map(C=>({id:C.id,src:C.source,tgt:C.target}));return{fieldLabel:`Diagram (${c})`,fieldType:`diagram:${l}`,fieldValue:JSON.stringify({nodes:v,edges:N}),schema:{diagramType:c,mode:l,nodeCount:s.length,edgeCount:t.length,containerSize:a==null?void 0:a.containerSize},customPrompt:n[l]}}function Ve(s,t,a){const l=d.useMemo(()=>Ce(s,t,a),[JSON.stringify(s),JSON.stringify(t),a==null?void 0:a.mode,a==null?void 0:a.diagramType]);return q(l,{...a,disabled:s.length===0||(a==null?void 0:a.disabled)})}function pe(s,t){const a=(t==null?void 0:t.mode)??"generate",l=(t==null?void 0:t.presentationType)??"business",c=(t==null?void 0:t.duration)??15,n=Math.ceil(c/2),v={generate:`You are a presentation designer. Create a ${l} presentation outline based on: "${s}". Target audience: ${(t==null?void 0:t.audience)??"general"}. Duration: ${c} minutes (~${n} slides). Return JSON: { title: string, slides: [{ title: string, layout: 'title'|'content'|'two-column'|'chart'|'image', bullets?: string[], chartType?: string, speakerNotes?: string }] }. Include: clear slide titles, 3-5 bullet points per content slide, and brief speaker notes.`,summarize:`You are a presentation optimizer. Summarize this presentation to be more concise: "${s}". Reduce slide count by 30% while preserving key messages. Return JSON: { summary: string, reducedSlides: [{ title: string, keyPoints: string[] }] }`,expand:`You are a presentation expert. Expand this brief outline into a detailed presentation: "${s}". Add supporting details, examples, and transitions. Target: ${n} slides. Return JSON: { slides: [{ title: string, content: string, transitions?: string, animations?: string[] }] }`,improve:`You are a presentation coach. Review and improve this presentation structure: "${s}". Suggest: better flow, stronger opening/closing, clearer data visualization. Return JSON: { improvements: [{ slide: number, issue: string, suggestion: string }], score: number }`};return{fieldLabel:`Presentation (${l})`,fieldType:`presentation:${a}`,fieldValue:s,schema:{presentationType:l,mode:a,duration:c,slideCount:n,audience:t==null?void 0:t.audience,hasData:(t==null?void 0:t.dataContext)!=null},customPrompt:v[a]}}function Ge(s,t){const a=d.useMemo(()=>pe(s,t),[s,t==null?void 0:t.mode,t==null?void 0:t.presentationType,t==null?void 0:t.duration,t==null?void 0:t.audience]);return q(a,{...t,disabled:!s||(t==null?void 0:t.disabled)})}function Se(s,t){var c;const a=(t==null?void 0:t.mode)??"all",l={alignment:"Analyze element alignment on this slide. Suggest adjustments to create visual harmony. Return JSON: { suggestions: [{ elementIndex: number, issue: string, fixX?: number, fixY?: number }] }",contrast:"Analyze color contrast and readability. Suggest improvements for accessibility (WCAG AA). Return JSON: { suggestions: [{ area: string, currentContrast: number, suggestedFix: string }] }",spacing:"Analyze whitespace and element spacing. Apply the rule of thirds and consistent margins. Return JSON: { suggestions: [{ elementIndex: number, issue: string, suggestedMargin: number }] }",typography:"Analyze typography: hierarchy, font sizes, line heights, readability. Return JSON: { suggestions: [{ area: string, issue: string, suggestedFontSize?: number }] }",all:"Perform a complete design review of this slide. Check alignment, contrast, spacing, and typography. Return JSON: { score: number, suggestions: [{ category: string, issue: string, fix: string }] }. Prioritize issues by impact on visual clarity."};return{fieldLabel:s.title??"Slide Design",fieldType:`slide-design:${a}`,fieldValue:JSON.stringify(s),schema:{mode:a,hasElements:(((c=s.elements)==null?void 0:c.length)??0)>0,layout:s.layout,brandColors:t==null?void 0:t.brandColors},customPrompt:l[a]}}function Ke(s,t){const a=d.useMemo(()=>Se(s,t),[JSON.stringify(s),t==null?void 0:t.mode,JSON.stringify(t==null?void 0:t.brandColors)]);return q(a,t)}function We(s,t,a){const l=d.forwardRef((c,n)=>{const{aiEnabled:v=!0,aiPosition:N="right",aiPrompt:C,aiDebounceMs:f=500,aiShowOnHover:I=!1,aiTriggerIcon:D,...T}=c,k=d.useMemo(()=>{const M=t(T);return C&&(M.customPrompt=C),M},[T,C]);return e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:4},children:[e.jsx(s,{...T,ref:n}),v&&e.jsx(Z,{context:k,position:N,debounceMs:f,showOnHover:I,triggerIcon:D})]})});return l.displayName=a??`withAIHint(${s.displayName??s.name??"Component"})`,l}function Ye(s){return ee(s.label??"Text",s.value,{placeholder:s.placeholder,maxLength:s.maxLength})}function Xe(s){return te(s.label??"Number",s.value,{min:s.min,max:s.max,step:s.step})}function Qe(s){return ae(s.label??"Select",s.value,{options:s.options,multiple:s.multiple})}function Ze(s){return se(s.label??"Date",s.value,{min:s.min,max:s.max})}function et(s){return ne(s.label??"Color",s.value)}const tt={id:crypto.randomUUID(),name:"New ML Project",type:"classification",status:"draft",datasets:[],experiments:[],models:[],createdAt:new Date,updatedAt:new Date},re={classification:[{id:"logistic-regression",name:"Logistic Regression"},{id:"random-forest",name:"Random Forest"},{id:"gradient-boosting",name:"Gradient Boosting"},{id:"svm",name:"Support Vector Machine"},{id:"neural-network",name:"Neural Network"},{id:"xgboost",name:"XGBoost"}],regression:[{id:"linear-regression",name:"Linear Regression"},{id:"ridge",name:"Ridge Regression"},{id:"lasso",name:"Lasso Regression"},{id:"random-forest-reg",name:"Random Forest"},{id:"gradient-boosting-reg",name:"Gradient Boosting"}],clustering:[{id:"kmeans",name:"K-Means"},{id:"dbscan",name:"DBSCAN"},{id:"hierarchical",name:"Hierarchical Clustering"}]},le={classification:["accuracy","precision","recall","f1-score","auc-roc"],regression:["mse","rmse","mae","r2"],clustering:["silhouette","calinski-harabasz","davies-bouldin"]},at=({project:s,onProjectChange:t,onExperimentRun:a,onModelDeploy:l,className:c=""})=>{var j;const[n,v]=d.useState(s||tt),[N,C]=d.useState("data"),[f,I]=d.useState(null),[D,T]=d.useState(null),[k,M]=d.useState(null),[y,z]=d.useState(!1),[h,b]=d.useState({algorithm:"",hyperparameters:{},preprocessing:[]}),g=d.useCallback(i=>{const m={...n,...i,updatedAt:new Date};v(m),t==null||t(m)},[n,t]),L=async i=>{for(const m of Array.from(i)){const w={id:crypto.randomUUID(),name:m.name.replace(/\.[^.]+$/,""),type:"tabular",source:{type:"file",uri:m.name},size:m.size,rowCount:0,columns:[],splits:[{name:"train",ratio:.8,rowCount:0},{name:"validation",ratio:.1,rowCount:0},{name:"test",ratio:.1,rowCount:0}],createdAt:new Date};if(m.name.endsWith(".csv")){const E=(await m.text()).split(`
11
+ `),G=E[0].split(",").map(K=>K.trim());w.rowCount=E.length-1,w.columns=G.map(K=>({name:K,type:"text",nullable:!0,unique:0,missing:0})),w.splits=w.splits.map(K=>({...K,rowCount:Math.floor(w.rowCount*K.ratio)}))}g({datasets:[...n.datasets,w]})}},R=i=>{g({datasets:n.datasets.filter(m=>m.id!==i)}),f===i&&I(null)},$=async()=>{if(!h.algorithm||!f)return;const i={id:crypto.randomUUID(),name:`Experiment ${n.experiments.length+1}`,status:"pending",config:h,metrics:[],artifacts:[],logs:[]};if(g({experiments:[...n.experiments,i]}),z(!1),a){g({experiments:n.experiments.map(m=>m.id===i.id?{...m,status:"running",startedAt:new Date}:m)});try{await a(i);const m=(le[n.type]||le.classification).map(w=>({name:w,value:Math.random()*.3+.7,split:"validation"}));g({experiments:n.experiments.map(w=>w.id===i.id?{...w,status:"completed",completedAt:new Date,metrics:m}:w)})}catch{g({experiments:n.experiments.map(m=>m.id===i.id?{...m,status:"failed"}:m)})}}},F=i=>{const m=n.experiments.find(p=>p.id===i);if(!m)return;const w={id:crypto.randomUUID(),name:`Model from ${m.name}`,version:"1.0.0",algorithm:m.config.algorithm,experimentId:i,status:"registered",metrics:m.metrics,size:Math.floor(Math.random()*100)*1024*1024,artifacts:[],deployments:[],createdAt:new Date};g({models:[...n.models,w]})},B=async i=>{const m=n.models.find(p=>p.id===i);if(!m||!l)return;const w=await l(m);g({models:n.models.map(p=>p.id===i?{...p,status:"production",deployments:[...p.deployments,w]}:p)})},H=i=>i<1024?`${i} B`:i<1024*1024?`${(i/1024).toFixed(1)} KB`:i<1024*1024*1024?`${(i/1024/1024).toFixed(1)} MB`:`${(i/1024/1024/1024).toFixed(1)} GB`,V=i=>{switch(i){case"completed":case"production":case"running":return"status-badge--success";case"pending":case"staging":return"status-badge--warning";case"failed":return"status-badge--error";default:return""}};return e.jsxs("div",{className:`nice-ml-studio ${c}`,children:[e.jsxs("header",{className:"ml-studio__header",children:[e.jsxs("div",{className:"header__info",children:[e.jsx("input",{type:"text",value:n.name,onChange:i=>g({name:i.target.value}),className:"project-name-input"}),e.jsxs("select",{value:n.type,onChange:i=>g({type:i.target.value}),className:"project-type-select",children:[e.jsx("option",{value:"classification",children:"Classification"}),e.jsx("option",{value:"regression",children:"Regression"}),e.jsx("option",{value:"clustering",children:"Clustering"}),e.jsx("option",{value:"object-detection",children:"Object Detection"}),e.jsx("option",{value:"nlp",children:"NLP"}),e.jsx("option",{value:"time-series",children:"Time Series"})]})]}),e.jsx("div",{className:"header__tabs",children:["data","experiments","models","deploy"].map(i=>e.jsx("button",{className:`tab-button ${N===i?"tab-button--active":""}`,onClick:()=>C(i),children:i.charAt(0).toUpperCase()+i.slice(1)},i))})]}),e.jsxs("div",{className:"ml-studio__content",children:[N==="data"&&e.jsxs("div",{className:"data-panel",children:[e.jsxs("div",{className:"panel-header",children:[e.jsx("h2",{children:"Datasets"}),e.jsxs("label",{className:"upload-button",children:[e.jsx("input",{type:"file",multiple:!0,accept:".csv,.json,.parquet",onChange:i=>i.target.files&&L(i.target.files),hidden:!0}),"+ Upload Dataset"]})]}),e.jsx("div",{className:"datasets-grid",children:n.datasets.length===0?e.jsxs("div",{className:"empty-state",children:[e.jsx("span",{className:"icon",children:"📊"}),e.jsx("p",{children:"No datasets uploaded yet"}),e.jsx("p",{className:"hint",children:"Upload CSV, JSON, or Parquet files to get started"})]}):n.datasets.map(i=>e.jsxs("div",{className:`dataset-card ${f===i.id?"dataset-card--selected":""}`,onClick:()=>I(i.id),children:[e.jsxs("div",{className:"card-header",children:[e.jsx("span",{className:"dataset-icon",children:"📁"}),e.jsx("h3",{children:i.name}),e.jsx("button",{className:"remove-button",onClick:m=>{m.stopPropagation(),R(i.id)},children:"×"})]}),e.jsxs("div",{className:"card-stats",children:[e.jsxs("span",{children:[i.rowCount.toLocaleString()," rows"]}),e.jsxs("span",{children:[i.columns.length," columns"]}),e.jsx("span",{children:H(i.size)})]}),e.jsx("div",{className:"splits-bar",children:i.splits.map(m=>e.jsx("div",{className:`split split--${m.name}`,style:{width:`${m.ratio*100}%`},title:`${m.name}: ${(m.ratio*100).toFixed(0)}%`},m.name))})]},i.id))}),f&&e.jsx("div",{className:"dataset-details",children:(()=>{const i=n.datasets.find(m=>m.id===f);return i?e.jsxs(e.Fragment,{children:[e.jsx("h3",{children:"Columns"}),e.jsxs("table",{className:"columns-table",children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Name"}),e.jsx("th",{children:"Type"}),e.jsx("th",{children:"Missing"}),e.jsx("th",{children:"Unique"})]})}),e.jsx("tbody",{children:i.columns.map(m=>e.jsxs("tr",{children:[e.jsx("td",{children:m.name}),e.jsx("td",{children:e.jsxs("select",{value:m.type,onChange:w=>{g({datasets:n.datasets.map(p=>p.id===i.id?{...p,columns:p.columns.map(E=>E.name===m.name?{...E,type:w.target.value}:E)}:p)})},children:[e.jsx("option",{value:"numeric",children:"Numeric"}),e.jsx("option",{value:"categorical",children:"Categorical"}),e.jsx("option",{value:"text",children:"Text"}),e.jsx("option",{value:"datetime",children:"DateTime"}),e.jsx("option",{value:"boolean",children:"Boolean"})]})}),e.jsx("td",{children:m.missing}),e.jsx("td",{children:m.unique})]},m.name))})]})]}):null})()})]}),N==="experiments"&&e.jsxs("div",{className:"experiments-panel",children:[e.jsxs("div",{className:"panel-header",children:[e.jsx("h2",{children:"Experiments"}),e.jsx("button",{className:"primary-button",onClick:()=>z(!0),disabled:n.datasets.length===0,children:"+ New Experiment"})]}),y&&e.jsxs("div",{className:"new-experiment-form",children:[e.jsx("h3",{children:"Configure Experiment"}),e.jsxs("div",{className:"form-grid",children:[e.jsxs("label",{children:["Dataset",e.jsxs("select",{value:f||"",onChange:i=>I(i.target.value),children:[e.jsx("option",{value:"",children:"Select dataset..."}),n.datasets.map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),e.jsxs("label",{children:["Algorithm",e.jsxs("select",{value:h.algorithm,onChange:i=>b({...h,algorithm:i.target.value}),children:[e.jsx("option",{value:"",children:"Select algorithm..."}),(re[n.type]||re.classification).map(i=>e.jsx("option",{value:i.id,children:i.name},i.id))]})]}),f&&e.jsxs("label",{children:["Target Column",e.jsxs("select",{value:h.targetColumn||"",onChange:i=>b({...h,targetColumn:i.target.value}),children:[e.jsx("option",{value:"",children:"Select target..."}),(j=n.datasets.find(i=>i.id===f))==null?void 0:j.columns.map(i=>e.jsx("option",{value:i.name,children:i.name},i.name))]})]})]}),e.jsxs("div",{className:"form-actions",children:[e.jsx("button",{className:"secondary-button",onClick:()=>z(!1),children:"Cancel"}),e.jsx("button",{className:"primary-button",onClick:$,disabled:!h.algorithm||!f,children:"Run Experiment"})]})]}),e.jsx("div",{className:"experiments-list",children:n.experiments.length===0?e.jsxs("div",{className:"empty-state",children:[e.jsx("span",{className:"icon",children:"🧪"}),e.jsx("p",{children:"No experiments yet"}),e.jsx("p",{className:"hint",children:"Create an experiment to train and evaluate models"})]}):n.experiments.map(i=>e.jsxs("div",{className:`experiment-card ${D===i.id?"experiment-card--selected":""}`,onClick:()=>T(i.id),children:[e.jsxs("div",{className:"card-header",children:[e.jsx("h3",{children:i.name}),e.jsx("span",{className:`status-badge ${V(i.status)}`,children:i.status})]}),e.jsxs("div",{className:"card-meta",children:[e.jsxs("span",{children:["Algorithm: ",i.config.algorithm]}),i.duration&&e.jsxs("span",{children:["Duration: ",Math.round(i.duration),"s"]})]}),i.metrics.length>0&&e.jsx("div",{className:"metrics-row",children:i.metrics.slice(0,3).map(m=>e.jsxs("div",{className:"metric-item",children:[e.jsx("span",{className:"metric-name",children:m.name}),e.jsxs("span",{className:"metric-value",children:[(m.value*100).toFixed(1),"%"]})]},m.name))}),i.status==="completed"&&e.jsx("button",{className:"action-button",onClick:m=>{m.stopPropagation(),F(i.id)},children:"Register Model"})]},i.id))})]}),N==="models"&&e.jsxs("div",{className:"models-panel",children:[e.jsx("div",{className:"panel-header",children:e.jsx("h2",{children:"Models"})}),e.jsx("div",{className:"models-list",children:n.models.length===0?e.jsxs("div",{className:"empty-state",children:[e.jsx("span",{className:"icon",children:"🤖"}),e.jsx("p",{children:"No models registered yet"}),e.jsx("p",{className:"hint",children:"Complete experiments and register models"})]}):n.models.map(i=>e.jsxs("div",{className:`model-card ${k===i.id?"model-card--selected":""}`,onClick:()=>M(i.id),children:[e.jsxs("div",{className:"card-header",children:[e.jsx("h3",{children:i.name}),e.jsx("span",{className:`status-badge ${V(i.status)}`,children:i.status})]}),e.jsxs("div",{className:"card-meta",children:[e.jsxs("span",{children:["Algorithm: ",i.algorithm]}),e.jsxs("span",{children:["Version: ",i.version]}),e.jsxs("span",{children:["Size: ",H(i.size)]})]}),i.metrics.length>0&&e.jsx("div",{className:"metrics-row",children:i.metrics.slice(0,3).map(m=>e.jsxs("div",{className:"metric-item",children:[e.jsx("span",{className:"metric-name",children:m.name}),e.jsxs("span",{className:"metric-value",children:[(m.value*100).toFixed(1),"%"]})]},m.name))}),e.jsxs("div",{className:"card-actions",children:[e.jsx("button",{className:"action-button",children:"Download"}),e.jsx("button",{className:"action-button action-button--primary",onClick:m=>{m.stopPropagation(),B(i.id)},disabled:i.status==="production",children:i.status==="production"?"Deployed":"Deploy"})]})]},i.id))})]}),N==="deploy"&&e.jsxs("div",{className:"deploy-panel",children:[e.jsx("div",{className:"panel-header",children:e.jsx("h2",{children:"Deployments"})}),e.jsx("div",{className:"deployments-list",children:n.models.filter(i=>i.deployments.length>0).length===0?e.jsxs("div",{className:"empty-state",children:[e.jsx("span",{className:"icon",children:"🚀"}),e.jsx("p",{children:"No deployments yet"}),e.jsx("p",{className:"hint",children:"Deploy a model to create inference endpoints"})]}):n.models.filter(i=>i.deployments.length>0).flatMap(i=>i.deployments.map(m=>({model:i,deployment:m}))).map(({model:i,deployment:m})=>e.jsxs("div",{className:"deployment-card",children:[e.jsxs("div",{className:"card-header",children:[e.jsx("h3",{children:m.name}),e.jsx("span",{className:`status-badge ${V(m.status)}`,children:m.status})]}),e.jsxs("div",{className:"card-meta",children:[e.jsxs("span",{children:["Model: ",i.name]}),e.jsxs("span",{children:["Endpoint: ",m.endpoint]})]}),e.jsxs("div",{className:"resources-info",children:[e.jsxs("span",{children:["CPU: ",m.resources.cpu," cores"]}),e.jsxs("span",{children:["Memory: ",m.resources.memory," GB"]}),e.jsxs("span",{children:["Replicas: ",m.resources.replicas]})]})]},m.id))})]})]})]})},st={id:crypto.randomUUID(),name:"New Labeling Project",type:"classification",dataType:"image",status:"setup",labelSchema:{classes:[],attributes:[]},items:[],collaborators:[],statistics:{totalItems:0,labeled:0,reviewed:0,approved:0,byClass:[]},createdAt:new Date},ce=["#ef4444","#f97316","#f59e0b","#84cc16","#22c55e","#14b8a6","#06b6d4","#3b82f6","#6366f1","#8b5cf6","#a855f7","#d946ef","#ec4899","#f43f5e"],nt=({project:s,onProjectChange:t,onLabelSave:a,onExport:l,className:c=""})=>{var W;const[n,v]=d.useState(s||st),[N,C]=d.useState("label"),[f,I]=d.useState(0),[D,T]=d.useState(null),[k,M]=d.useState("select"),[y,z]=d.useState(!1),[h,b]=d.useState(null),[g,L]=d.useState(1),[R,$]=d.useState(!1),[F,B]=d.useState("all"),H=d.useRef(null),V=d.useRef(null),j=n.items[f];d.useEffect(()=>{s&&v(s)},[s]);const i=d.useCallback(r=>{const u={...n,...r};u.statistics={totalItems:u.items.length,labeled:u.items.filter(x=>x.status!=="pending").length,reviewed:u.items.filter(x=>x.status==="review"||x.status==="approved").length,approved:u.items.filter(x=>x.status==="approved").length,byClass:u.labelSchema.classes.map(x=>({classId:x.id,count:u.items.flatMap(A=>A.labels).filter(A=>A.classId===x.id).length}))},v(u),t==null||t(u)},[n,t]),m=()=>{const r={id:crypto.randomUUID(),name:`Class ${n.labelSchema.classes.length+1}`,color:ce[n.labelSchema.classes.length%ce.length],shortcut:String(n.labelSchema.classes.length+1)};i({labelSchema:{...n.labelSchema,classes:[...n.labelSchema.classes,r]}})},w=r=>{i({labelSchema:{...n.labelSchema,classes:n.labelSchema.classes.filter(u=>u.id!==r)},items:n.items.map(u=>({...u,labels:u.labels.filter(x=>x.classId!==r)}))})},p=(r,u)=>{i({labelSchema:{...n.labelSchema,classes:n.labelSchema.classes.map(x=>x.id===r?{...x,...u}:x)}})},E=(r,u)=>{if(!j)return;const x={id:crypto.randomUUID(),classId:r,type:n.type==="classification"?"class":n.type==="bounding-box"?"bbox":"class",data:u||{},createdBy:"current-user",createdAt:new Date},A={...j,labels:[...j.labels,x],status:"labeled"};i({items:n.items.map(U=>U.id===j.id?A:U)}),a==null||a(A)},G=r=>{if(!j)return;const u={...j,labels:j.labels.filter(x=>x.id!==r),status:j.labels.length<=1?"pending":"labeled"};i({items:n.items.map(x=>x.id===j.id?u:x)})},K=r=>{var U;if(k!=="bbox"||!D)return;const u=(U=H.current)==null?void 0:U.getBoundingClientRect();if(!u)return;const x=(r.clientX-u.left)/g,A=(r.clientY-u.top)/g;z(!0),b({x,y:A,width:0,height:0})},X=r=>{var U;if(!y||!h)return;const u=(U=H.current)==null?void 0:U.getBoundingClientRect();if(!u)return;const x=(r.clientX-u.left)/g,A=(r.clientY-u.top)/g;b({...h,width:x-h.x,height:A-h.y})},o=()=>{!y||!h||!D||(z(!1),Math.abs(h.width)>10&&Math.abs(h.height)>10&&E(D,{x:h.width<0?h.x+h.width:h.x,y:h.height<0?h.y+h.height:h.y,width:Math.abs(h.width),height:Math.abs(h.height)}),b(null))},S=r=>{const u=F==="all"?n.items:n.items.filter(A=>A.status===F),x=u.findIndex(A=>A.id===(j==null?void 0:j.id));if(r==="prev"&&x>0){const A=u[x-1];I(n.items.findIndex(U=>U.id===A.id))}else if(r==="next"&&x<u.length-1){const A=u[x+1];I(n.items.findIndex(U=>U.id===A.id))}},J=()=>{if(!j)return;const r={...j,status:"approved"};i({items:n.items.map(u=>u.id===j.id?r:u)}),S("next")},O=()=>{if(!j)return;const r={...j,status:"rejected"};i({items:n.items.map(u=>u.id===j.id?r:u)}),S("next")},P=async r=>{l&&await l(r)};d.useEffect(()=>{const r=u=>{const x=u.key,A=n.labelSchema.classes.find(U=>U.shortcut===x);A&&(n.type==="classification"?(E(A.id),S("next")):T(A.id)),u.key==="ArrowLeft"||u.key==="a"?S("prev"):(u.key==="ArrowRight"||u.key==="d")&&S("next"),u.key==="Enter"?J():u.key==="Backspace"&&O()};return window.addEventListener("keydown",r),()=>window.removeEventListener("keydown",r)},[j,n.labelSchema.classes,n.type]);const _=r=>{switch(r){case"approved":return"#22c55e";case"labeled":return"#3b82f6";case"review":return"#f59e0b";case"rejected":return"#ef4444";default:return"#6b7280"}};return e.jsxs("div",{className:`nice-data-labeler ${c}`,children:[e.jsxs("header",{className:"labeler__header",children:[e.jsxs("div",{className:"header__info",children:[e.jsx("input",{type:"text",value:n.name,onChange:r=>i({name:r.target.value}),className:"project-name-input"}),e.jsxs("div",{className:"progress-bar",children:[e.jsx("div",{className:"progress-fill",style:{width:`${n.statistics.labeled/Math.max(n.statistics.totalItems,1)*100}%`}}),e.jsxs("span",{className:"progress-text",children:[n.statistics.labeled," / ",n.statistics.totalItems," labeled"]})]})]}),e.jsx("div",{className:"header__tabs",children:["label","schema","review","export"].map(r=>e.jsx("button",{className:`tab-button ${N===r?"tab-button--active":""}`,onClick:()=>C(r),children:r.charAt(0).toUpperCase()+r.slice(1)},r))}),e.jsx("button",{className:"shortcuts-button",onClick:()=>$(!R),children:"⌨️ Shortcuts"})]}),e.jsxs("div",{className:"labeler__content",children:[N==="label"&&e.jsxs("div",{className:"label-panel",children:[e.jsxs("div",{className:"label-toolbar",children:[e.jsxs("div",{className:"tool-group",children:[e.jsx("button",{className:`tool-button ${k==="select"?"tool-button--active":""}`,onClick:()=>M("select"),children:"↖️ Select"}),(n.type==="bounding-box"||n.type==="multi-label")&&e.jsx("button",{className:`tool-button ${k==="bbox"?"tool-button--active":""}`,onClick:()=>M("bbox"),children:"⬜ Box"}),n.type==="polygon"&&e.jsx("button",{className:`tool-button ${k==="polygon"?"tool-button--active":""}`,onClick:()=>M("polygon"),children:"⬡ Polygon"})]}),e.jsxs("div",{className:"zoom-group",children:[e.jsx("button",{onClick:()=>L(Math.max(.25,g-.25)),children:"-"}),e.jsxs("span",{children:[Math.round(g*100),"%"]}),e.jsx("button",{onClick:()=>L(Math.min(4,g+.25)),children:"+"})]}),e.jsxs("div",{className:"navigation-group",children:[e.jsx("button",{onClick:()=>S("prev"),disabled:f===0,children:"← Prev"}),e.jsxs("span",{children:[f+1," / ",n.items.length]}),e.jsx("button",{onClick:()=>S("next"),disabled:f>=n.items.length-1,children:"Next →"})]})]}),e.jsxs("div",{className:"label-workspace",children:[e.jsx("div",{className:"canvas-container",ref:V,children:j?e.jsxs(e.Fragment,{children:[j.data.type==="image"&&e.jsxs(e.Fragment,{children:[e.jsx("img",{src:j.data.url,alt:"Labeling item",className:"labeling-image",style:{transform:`scale(${g})`}}),e.jsx("canvas",{ref:H,className:"labeling-canvas",onMouseDown:K,onMouseMove:X,onMouseUp:o,onMouseLeave:o,style:{transform:`scale(${g})`,cursor:k==="bbox"?"crosshair":"default"}}),e.jsxs("div",{className:"annotations-overlay",style:{transform:`scale(${g})`},children:[j.labels.filter(r=>r.type==="bbox"&&r.data.x!==void 0).map(r=>{const u=n.labelSchema.classes.find(x=>x.id===r.classId);return e.jsxs("div",{className:"bbox-annotation",style:{left:r.data.x,top:r.data.y,width:r.data.width,height:r.data.height,borderColor:(u==null?void 0:u.color)||"#ff0000"},children:[e.jsx("span",{className:"bbox-label",style:{backgroundColor:(u==null?void 0:u.color)||"#ff0000"},children:u==null?void 0:u.name}),e.jsx("button",{className:"bbox-remove",onClick:()=>G(r.id),children:"×"})]},r.id)}),h&&e.jsx("div",{className:"bbox-drawing",style:{left:h.width<0?h.x+h.width:h.x,top:h.height<0?h.y+h.height:h.y,width:Math.abs(h.width),height:Math.abs(h.height),borderColor:(W=n.labelSchema.classes.find(r=>r.id===D))==null?void 0:W.color}})]})]}),j.data.type==="text"&&e.jsx("div",{className:"text-labeling",children:e.jsx("p",{className:"text-content",children:j.data.text})})]}):e.jsxs("div",{className:"empty-state",children:[e.jsx("span",{className:"icon",children:"📋"}),e.jsx("p",{children:"No items to label"})]})}),e.jsxs("aside",{className:"class-sidebar",children:[e.jsx("h3",{children:"Classes"}),e.jsx("div",{className:"class-list",children:n.labelSchema.classes.map(r=>e.jsxs("button",{className:`class-button ${D===r.id?"class-button--active":""}`,style:{borderLeftColor:r.color},onClick:()=>{n.type==="classification"?(E(r.id),S("next")):T(r.id)},children:[e.jsx("span",{className:"class-color",style:{backgroundColor:r.color}}),e.jsx("span",{className:"class-name",children:r.name}),r.shortcut&&e.jsx("span",{className:"class-shortcut",children:r.shortcut})]},r.id))}),j&&j.labels.length>0&&e.jsxs("div",{className:"current-labels",children:[e.jsx("h4",{children:"Labels"}),j.labels.map(r=>{const u=n.labelSchema.classes.find(x=>x.id===r.classId);return e.jsxs("div",{className:"label-item",children:[e.jsx("span",{className:"label-color",style:{backgroundColor:u==null?void 0:u.color}}),e.jsx("span",{className:"label-name",children:u==null?void 0:u.name}),e.jsx("button",{onClick:()=>G(r.id),children:"×"})]},r.id)})]}),N==="label"&&j&&e.jsxs("div",{className:"label-actions",children:[e.jsx("button",{className:"approve-button",onClick:J,children:"✓ Approve"}),e.jsx("button",{className:"reject-button",onClick:O,children:"✗ Reject"})]})]})]})]}),N==="schema"&&e.jsxs("div",{className:"schema-panel",children:[e.jsxs("div",{className:"panel-header",children:[e.jsx("h2",{children:"Label Schema"}),e.jsx("button",{className:"primary-button",onClick:m,children:"+ Add Class"})]}),e.jsxs("div",{className:"schema-settings",children:[e.jsxs("label",{children:["Labeling Type",e.jsxs("select",{value:n.type,onChange:r=>i({type:r.target.value}),children:[e.jsx("option",{value:"classification",children:"Single Classification"}),e.jsx("option",{value:"multi-label",children:"Multi-Label Classification"}),e.jsx("option",{value:"bounding-box",children:"Bounding Box"}),e.jsx("option",{value:"polygon",children:"Polygon"}),e.jsx("option",{value:"segmentation",children:"Segmentation"}),e.jsx("option",{value:"ner",children:"Named Entity Recognition"})]})]}),e.jsxs("label",{children:["Data Type",e.jsxs("select",{value:n.dataType,onChange:r=>i({dataType:r.target.value}),children:[e.jsx("option",{value:"image",children:"Image"}),e.jsx("option",{value:"text",children:"Text"}),e.jsx("option",{value:"audio",children:"Audio"}),e.jsx("option",{value:"video",children:"Video"})]})]})]}),e.jsx("div",{className:"classes-list",children:n.labelSchema.classes.map((r,u)=>e.jsxs("div",{className:"class-editor",children:[e.jsx("input",{type:"color",value:r.color,onChange:x=>p(r.id,{color:x.target.value}),className:"color-picker"}),e.jsx("input",{type:"text",value:r.name,onChange:x=>p(r.id,{name:x.target.value}),className:"class-name-input",placeholder:"Class name"}),e.jsx("input",{type:"text",value:r.shortcut||"",onChange:x=>p(r.id,{shortcut:x.target.value}),className:"shortcut-input",placeholder:"Key",maxLength:1}),e.jsx("button",{className:"remove-class-button",onClick:()=>w(r.id),children:"🗑️"})]},r.id))}),e.jsxs("div",{className:"guidelines-section",children:[e.jsx("h3",{children:"Labeling Guidelines"}),e.jsx("textarea",{value:n.guidelines||"",onChange:r=>i({guidelines:r.target.value}),placeholder:"Enter labeling guidelines for annotators...",rows:6})]})]}),N==="review"&&e.jsxs("div",{className:"review-panel",children:[e.jsxs("div",{className:"panel-header",children:[e.jsx("h2",{children:"Review Labels"}),e.jsx("div",{className:"filter-group",children:e.jsxs("select",{value:F,onChange:r=>B(r.target.value),children:[e.jsx("option",{value:"all",children:"All Items"}),e.jsx("option",{value:"labeled",children:"Labeled"}),e.jsx("option",{value:"review",children:"Needs Review"}),e.jsx("option",{value:"approved",children:"Approved"}),e.jsx("option",{value:"rejected",children:"Rejected"})]})})]}),e.jsx("div",{className:"items-grid",children:n.items.filter(r=>F==="all"||r.status===F).map((r,u)=>{var x;return e.jsxs("div",{className:`item-card ${f===n.items.indexOf(r)?"item-card--active":""}`,onClick:()=>{I(n.items.indexOf(r)),C("label")},children:[r.data.type==="image"&&e.jsx("img",{src:r.data.url,alt:`Item ${u+1}`,className:"item-thumbnail"}),r.data.type==="text"&&e.jsxs("p",{className:"item-text-preview",children:[(x=r.data.text)==null?void 0:x.slice(0,100),"..."]}),e.jsxs("div",{className:"item-footer",children:[e.jsx("span",{className:"status-dot",style:{backgroundColor:_(r.status)}}),e.jsxs("span",{children:[r.labels.length," labels"]})]})]},r.id)})})]}),N==="export"&&e.jsxs("div",{className:"export-panel",children:[e.jsx("div",{className:"panel-header",children:e.jsx("h2",{children:"Export Labels"})}),e.jsxs("div",{className:"export-stats",children:[e.jsxs("div",{className:"stat-card",children:[e.jsx("span",{className:"stat-value",children:n.statistics.totalItems}),e.jsx("span",{className:"stat-label",children:"Total Items"})]}),e.jsxs("div",{className:"stat-card",children:[e.jsx("span",{className:"stat-value",children:n.statistics.labeled}),e.jsx("span",{className:"stat-label",children:"Labeled"})]}),e.jsxs("div",{className:"stat-card",children:[e.jsx("span",{className:"stat-value",children:n.statistics.approved}),e.jsx("span",{className:"stat-label",children:"Approved"})]}),e.jsxs("div",{className:"stat-card",children:[e.jsx("span",{className:"stat-value",children:n.labelSchema.classes.length}),e.jsx("span",{className:"stat-label",children:"Classes"})]})]}),e.jsxs("div",{className:"export-formats",children:[e.jsx("h3",{children:"Export Format"}),e.jsxs("div",{className:"format-grid",children:[e.jsxs("button",{className:"format-button",onClick:()=>P("coco"),children:[e.jsx("span",{className:"format-icon",children:"📦"}),e.jsx("span",{className:"format-name",children:"COCO JSON"}),e.jsx("span",{className:"format-desc",children:"Common format for object detection"})]}),e.jsxs("button",{className:"format-button",onClick:()=>P("voc"),children:[e.jsx("span",{className:"format-icon",children:"📄"}),e.jsx("span",{className:"format-name",children:"Pascal VOC"}),e.jsx("span",{className:"format-desc",children:"XML format for bounding boxes"})]}),e.jsxs("button",{className:"format-button",onClick:()=>P("yolo"),children:[e.jsx("span",{className:"format-icon",children:"⚡"}),e.jsx("span",{className:"format-name",children:"YOLO"}),e.jsx("span",{className:"format-desc",children:"Text format for YOLO models"})]}),e.jsxs("button",{className:"format-button",onClick:()=>P("csv"),children:[e.jsx("span",{className:"format-icon",children:"📊"}),e.jsx("span",{className:"format-name",children:"CSV"}),e.jsx("span",{className:"format-desc",children:"Tabular format for classification"})]})]})]}),e.jsxs("div",{className:"class-distribution",children:[e.jsx("h3",{children:"Class Distribution"}),e.jsx("div",{className:"distribution-bars",children:n.statistics.byClass.map(r=>{const u=n.labelSchema.classes.find(A=>A.id===r.classId),x=r.count/Math.max(n.statistics.labeled,1)*100;return e.jsxs("div",{className:"distribution-row",children:[e.jsx("span",{className:"class-name",style:{color:u==null?void 0:u.color},children:u==null?void 0:u.name}),e.jsx("div",{className:"bar-container",children:e.jsx("div",{className:"bar-fill",style:{width:`${x}%`,backgroundColor:u==null?void 0:u.color}})}),e.jsx("span",{className:"count",children:r.count})]},r.classId)})})]})]})]}),R&&e.jsx("div",{className:"shortcuts-modal",children:e.jsxs("div",{className:"modal-content",children:[e.jsxs("div",{className:"modal-header",children:[e.jsx("h3",{children:"Keyboard Shortcuts"}),e.jsx("button",{onClick:()=>$(!1),children:"×"})]}),e.jsxs("div",{className:"shortcuts-list",children:[e.jsxs("div",{className:"shortcut-item",children:[e.jsx("span",{className:"keys",children:"← / A"}),e.jsx("span",{className:"description",children:"Previous item"})]}),e.jsxs("div",{className:"shortcut-item",children:[e.jsx("span",{className:"keys",children:"→ / D"}),e.jsx("span",{className:"description",children:"Next item"})]}),e.jsxs("div",{className:"shortcut-item",children:[e.jsx("span",{className:"keys",children:"Enter"}),e.jsx("span",{className:"description",children:"Approve item"})]}),e.jsxs("div",{className:"shortcut-item",children:[e.jsx("span",{className:"keys",children:"Backspace"}),e.jsx("span",{className:"description",children:"Reject item"})]}),n.labelSchema.classes.map(r=>r.shortcut&&e.jsxs("div",{className:"shortcut-item",children:[e.jsx("span",{className:"keys",children:r.shortcut}),e.jsxs("span",{className:"description",children:["Label as ",r.name]})]},r.id))]})]})})]})},it={id:crypto.randomUUID(),name:"Model Endpoint",modelId:"",modelVersion:"1.0.0",status:"stopped",url:"",authentication:{type:"api-key"},metrics:{requestsTotal:0,requestsPerSecond:0,latencyP50:0,latencyP95:0,latencyP99:0,errorRate:0,successRate:100},logs:[]},rt=({endpoint:s,onInference:t,showMetrics:a=!0,showLogs:l=!0,className:c=""})=>{const[n,v]=d.useState(s||it),[N,C]=d.useState("test"),[f,I]=d.useState("text"),[D,T]=d.useState(""),[k,M]=d.useState("{}"),[y,z]=d.useState(null),[h,b]=d.useState({temperature:.7,topK:50,topP:.9,maxTokens:256,threshold:.5}),[g,L]=d.useState(null),[R,$]=d.useState(!1),[F,B]=d.useState(null),[H,V]=d.useState([]),[j,i]=d.useState(null),m=d.useRef(null),w=o=>{var J;const S=(J=o.target.files)==null?void 0:J[0];if(S){const O=new FileReader;O.onload=P=>{var _;z((_=P.target)==null?void 0:_.result)},O.readAsDataURL(S)}},p=async()=>{if(!t){B("No inference handler provided");return}$(!0),B(null),L(null);const o=[];switch(f){case"text":o.push({type:"text",data:D});break;case"image":y&&o.push({type:"image",data:y});break;case"json":try{o.push({type:"json",data:JSON.parse(k)})}catch{B("Invalid JSON input"),$(!1);return}break;case"tabular":try{o.push({type:"tabular",data:JSON.parse(k)})}catch{B("Invalid tabular data"),$(!1);return}break}const S={inputs:o,parameters:h};try{const J=Date.now(),O=await t(S),P=Date.now()-J;L(O),v(_=>({..._,metrics:{..._.metrics,requestsTotal:_.metrics.requestsTotal+1,latencyP50:(_.metrics.latencyP50+P)/2},logs:[{timestamp:new Date,requestId:O.requestId,duration:P,status:"success",inputSize:JSON.stringify(o).length,outputSize:JSON.stringify(O.predictions).length},..._.logs.slice(0,99)]}))}catch(J){const O=J instanceof Error?J.message:"Inference failed";B(O),v(P=>({...P,metrics:{...P.metrics,requestsTotal:P.metrics.requestsTotal+1,errorRate:(P.metrics.errorRate*P.metrics.requestsTotal+1)/(P.metrics.requestsTotal+1)},logs:[{timestamp:new Date,requestId:crypto.randomUUID(),duration:0,status:"error",inputSize:JSON.stringify(o).length,outputSize:0,error:O},...P.logs.slice(0,99)]}))}finally{$(!1)}},E=async o=>{if(t){i(0),V([]);for(let S=0;S<o.length;S++){const J={inputs:[o[S]],parameters:h};try{const O=await t(J);V(P=>[...P,O])}catch(O){console.error("Batch item failed:",O)}i((S+1)/o.length*100)}i(null)}},G=o=>o<1e3?`${o.toFixed(0)}ms`:`${(o/1e3).toFixed(2)}s`,K=o=>o.toLocaleTimeString(),X=(o,S)=>e.jsxs("div",{className:"prediction-item",children:[o.label&&e.jsxs("div",{className:"prediction-label",children:[e.jsx("span",{className:"label-name",children:o.label}),o.confidence!==void 0&&e.jsxs("span",{className:"confidence-badge",style:{backgroundColor:`hsl(${o.confidence*120}, 70%, 40%)`},children:[(o.confidence*100).toFixed(1),"%"]})]}),o.score!==void 0&&e.jsxs("div",{className:"prediction-score",children:[e.jsx("span",{className:"score-label",children:"Score:"}),e.jsx("span",{className:"score-value",children:o.score.toFixed(4)})]}),o.text&&e.jsx("div",{className:"prediction-text",children:e.jsx("pre",{children:o.text})}),o.bbox&&e.jsx("div",{className:"prediction-bbox",children:e.jsxs("span",{children:["Box: (",o.bbox.x,", ",o.bbox.y,") - ",o.bbox.width,"×",o.bbox.height]})}),o.raw!==void 0&&o.raw!==null&&e.jsxs("details",{className:"raw-output",children:[e.jsx("summary",{children:"Raw Output"}),e.jsx("pre",{children:JSON.stringify(o.raw,null,2)})]})]},S);return e.jsxs("div",{className:`nice-model-inference ${c}`,children:[e.jsxs("header",{className:"inference__header",children:[e.jsxs("div",{className:"header__info",children:[e.jsx("h2",{children:n.name}),e.jsx("span",{className:`status-badge status-badge--${n.status}`,children:n.status})]}),e.jsxs("div",{className:"header__tabs",children:[e.jsx("button",{className:`tab-button ${N==="test"?"tab-button--active":""}`,onClick:()=>C("test"),children:"Test"}),e.jsx("button",{className:`tab-button ${N==="batch"?"tab-button--active":""}`,onClick:()=>C("batch"),children:"Batch"}),a&&e.jsx("button",{className:`tab-button ${N==="metrics"?"tab-button--active":""}`,onClick:()=>C("metrics"),children:"Metrics"}),l&&e.jsx("button",{className:`tab-button ${N==="logs"?"tab-button--active":""}`,onClick:()=>C("logs"),children:"Logs"})]})]}),e.jsxs("div",{className:"inference__content",children:[N==="test"&&e.jsxs("div",{className:"test-panel",children:[e.jsxs("div",{className:"input-section",children:[e.jsx("div",{className:"input-type-selector",children:["text","image","json","tabular"].map(o=>e.jsx("button",{className:`type-button ${f===o?"type-button--active":""}`,onClick:()=>I(o),children:o.charAt(0).toUpperCase()+o.slice(1)},o))}),e.jsxs("div",{className:"input-area",children:[f==="text"&&e.jsx("textarea",{value:D,onChange:o=>T(o.target.value),placeholder:"Enter text input...",rows:6,className:"text-input"}),f==="image"&&e.jsx("div",{className:"image-input",children:y?e.jsxs("div",{className:"image-preview",children:[e.jsx("img",{src:y,alt:"Input preview"}),e.jsx("button",{className:"clear-button",onClick:()=>z(null),children:"Clear"})]}):e.jsxs("label",{className:"upload-zone",children:[e.jsx("input",{ref:m,type:"file",accept:"image/*",onChange:w,hidden:!0}),e.jsx("span",{className:"upload-icon",children:"🖼️"}),e.jsx("span",{children:"Click or drag to upload image"})]})}),(f==="json"||f==="tabular")&&e.jsx("textarea",{value:k,onChange:o=>M(o.target.value),placeholder:f==="json"?`{
12
+ "key": "value"
13
+ }`:`[
14
+ {"col1": "value1", "col2": "value2"}
15
+ ]`,rows:10,className:"json-input"})]}),e.jsxs("div",{className:"parameters-section",children:[e.jsx("h4",{children:"Parameters"}),e.jsxs("div",{className:"parameters-grid",children:[e.jsxs("label",{children:["Temperature",e.jsx("input",{type:"number",value:h.temperature,onChange:o=>b({...h,temperature:parseFloat(o.target.value)}),min:"0",max:"2",step:"0.1"})]}),e.jsxs("label",{children:["Top K",e.jsx("input",{type:"number",value:h.topK,onChange:o=>b({...h,topK:parseInt(o.target.value)}),min:"1",max:"100"})]}),e.jsxs("label",{children:["Top P",e.jsx("input",{type:"number",value:h.topP,onChange:o=>b({...h,topP:parseFloat(o.target.value)}),min:"0",max:"1",step:"0.05"})]}),e.jsxs("label",{children:["Threshold",e.jsx("input",{type:"number",value:h.threshold,onChange:o=>b({...h,threshold:parseFloat(o.target.value)}),min:"0",max:"1",step:"0.05"})]})]})]}),e.jsx("button",{className:"run-button",onClick:p,disabled:R||!D&&!y&&k==="{}",children:R?"Running...":"Run Inference"})]}),e.jsxs("div",{className:"output-section",children:[e.jsx("h3",{children:"Output"}),F&&e.jsxs("div",{className:"error-message",children:[e.jsx("span",{className:"error-icon",children:"⚠️"}),F]}),g&&e.jsxs("div",{className:"result-container",children:[e.jsxs("div",{className:"result-meta",children:[e.jsxs("span",{children:["Request ID: ",g.requestId]}),e.jsxs("span",{children:["Latency: ",G(g.latency)]}),e.jsxs("span",{children:["Model: ",g.modelVersion]})]}),e.jsx("div",{className:"predictions-list",children:g.predictions.map((o,S)=>X(o,S))})]}),!F&&!g&&e.jsxs("div",{className:"empty-output",children:[e.jsx("span",{className:"icon",children:"📤"}),e.jsx("p",{children:"Run inference to see results"})]})]})]}),N==="batch"&&e.jsxs("div",{className:"batch-panel",children:[e.jsxs("div",{className:"batch-upload",children:[e.jsx("h3",{children:"Batch Inference"}),e.jsx("p",{className:"hint",children:"Upload a file with multiple inputs for batch processing"}),e.jsxs("label",{className:"upload-zone",children:[e.jsx("input",{type:"file",accept:".json,.csv,.txt",onChange:async o=>{var J;const S=(J=o.target.files)==null?void 0:J[0];if(S){const O=await S.text();try{const P=JSON.parse(O);if(Array.isArray(P)){const _=P.map(W=>({type:"json",data:W}));E(_)}}catch{B("Invalid batch file format")}}},hidden:!0}),e.jsx("span",{className:"upload-icon",children:"📁"}),e.jsx("span",{children:"Upload JSON array file"})]})]}),j!==null&&e.jsxs("div",{className:"batch-progress",children:[e.jsx("div",{className:"progress-bar",children:e.jsx("div",{className:"progress-fill",style:{width:`${j}%`}})}),e.jsxs("span",{children:[Math.round(j),"%"]})]}),H.length>0&&e.jsxs("div",{className:"batch-results",children:[e.jsxs("h3",{children:["Results (",H.length,")"]}),e.jsx("div",{className:"results-list",children:H.map((o,S)=>e.jsxs("div",{className:"batch-result-item",children:[e.jsxs("span",{className:"result-index",children:["#",S+1]}),o.predictions.map((J,O)=>e.jsxs("span",{className:"result-prediction",children:[J.label,": ",(J.confidence||J.score||0*100).toFixed(1),"%"]},O))]},S))})]})]}),N==="metrics"&&a&&e.jsxs("div",{className:"metrics-panel",children:[e.jsxs("div",{className:"metrics-grid",children:[e.jsxs("div",{className:"metric-card",children:[e.jsx("span",{className:"metric-value",children:n.metrics.requestsTotal}),e.jsx("span",{className:"metric-label",children:"Total Requests"})]}),e.jsxs("div",{className:"metric-card",children:[e.jsx("span",{className:"metric-value",children:n.metrics.requestsPerSecond.toFixed(1)}),e.jsx("span",{className:"metric-label",children:"Requests/sec"})]}),e.jsxs("div",{className:"metric-card",children:[e.jsx("span",{className:"metric-value",children:G(n.metrics.latencyP50)}),e.jsx("span",{className:"metric-label",children:"P50 Latency"})]}),e.jsxs("div",{className:"metric-card",children:[e.jsx("span",{className:"metric-value",children:G(n.metrics.latencyP95)}),e.jsx("span",{className:"metric-label",children:"P95 Latency"})]}),e.jsxs("div",{className:"metric-card",children:[e.jsx("span",{className:"metric-value",children:G(n.metrics.latencyP99)}),e.jsx("span",{className:"metric-label",children:"P99 Latency"})]}),e.jsxs("div",{className:"metric-card",children:[e.jsxs("span",{className:"metric-value",children:[n.metrics.successRate.toFixed(1),"%"]}),e.jsx("span",{className:"metric-label",children:"Success Rate"})]}),e.jsxs("div",{className:"metric-card",children:[e.jsxs("span",{className:"metric-value",children:[(n.metrics.errorRate*100).toFixed(2),"%"]}),e.jsx("span",{className:"metric-label",children:"Error Rate"})]})]}),e.jsxs("div",{className:"latency-histogram",children:[e.jsx("h3",{children:"Latency Distribution"}),e.jsx("div",{className:"histogram-bars",children:[10,25,50,75,90,95,99].map(o=>e.jsxs("div",{className:"histogram-bar",children:[e.jsx("div",{className:"bar-fill",style:{height:`${Math.min(100,n.metrics.latencyP50*o/100)}px`}}),e.jsxs("span",{className:"percentile-label",children:["P",o]})]},o))})]})]}),N==="logs"&&l&&e.jsxs("div",{className:"logs-panel",children:[e.jsxs("div",{className:"logs-header",children:[e.jsx("h3",{children:"Request Logs"}),e.jsx("button",{className:"clear-logs-button",onClick:()=>v(o=>({...o,logs:[]})),children:"Clear Logs"})]}),e.jsx("div",{className:"logs-table",children:e.jsxs("table",{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{children:"Time"}),e.jsx("th",{children:"Request ID"}),e.jsx("th",{children:"Duration"}),e.jsx("th",{children:"Status"}),e.jsx("th",{children:"Input Size"}),e.jsx("th",{children:"Output Size"})]})}),e.jsx("tbody",{children:n.logs.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"empty-logs",children:"No logs yet"})}):n.logs.map((o,S)=>e.jsxs("tr",{className:`log-row log-row--${o.status}`,children:[e.jsx("td",{children:K(o.timestamp)}),e.jsx("td",{className:"request-id",children:o.requestId.slice(0,8)}),e.jsx("td",{children:G(o.duration)}),e.jsx("td",{children:e.jsx("span",{className:`status-badge status-badge--${o.status}`,children:o.status})}),e.jsxs("td",{children:[o.inputSize," B"]}),e.jsxs("td",{children:[o.outputSize," B"]})]},S))})]})})]})]})]})};exports.NiceAIHintBubble=Z;exports.NiceAIProvider=we;exports.NiceDataLabeler=nt;exports.NiceMLStudio=at;exports.NiceModelInference=rt;exports.RateLimiter=de;exports.build3DSceneContext=je;exports.buildAudioContext=be;exports.buildChartContext=Ae;exports.buildCodeEditorContext=ge;exports.buildColorPickerContext=ne;exports.buildDataGridContext=Re;exports.buildDatePickerContext=se;exports.buildDiagramLayoutContext=Ce;exports.buildFormFillContext=he;exports.buildGameEngineContext=Ne;exports.buildGraphicsContext=ye;exports.buildHtmlEditorContext=fe;exports.buildIconSearchContext=ve;exports.buildNumberInputContext=te;exports.buildPresentationGenerateContext=pe;exports.buildSelectContext=ae;exports.buildSlideDesignContext=Se;exports.buildTextInputContext=ee;exports.buildValidationContext=xe;exports.colorControlContext=et;exports.dateControlContext=Ze;exports.numberControlContext=Xe;exports.parseJSONResponse=me;exports.parseSSEStream=ue;exports.selectControlContext=Qe;exports.textControlContext=Ye;exports.useAI3DHint=Be;exports.useAIAudioHint=Fe;exports.useAICodeHint=qe;exports.useAIColorHint=Oe;exports.useAIContext=Q;exports.useAIDateHint=De;exports.useAIDiagramLayout=Ve;exports.useAIFormFill=Je;exports.useAIGraphicsHint=He;exports.useAIHtmlHint=ze;exports.useAIIconSearch=Ue;exports.useAINpcHint=_e;exports.useAINumberHint=Me;exports.useAIPresentationGenerate=Ge;exports.useAISelectHint=Le;exports.useAISlideDesign=Ke;exports.useAITextHint=Pe;exports.useAIValidation=Ee;exports.useNiceAIHint=q;exports.withAIHint=We;
package/dist/index.d.ts CHANGED
@@ -10,4 +10,8 @@ export { RateLimiter } from './rateLimiter';
10
10
  export { buildTextInputContext, buildNumberInputContext, buildSelectContext, buildDatePickerContext, buildColorPickerContext, buildDataGridContext, buildChartContext, buildFormFillContext, buildValidationContext, useAITextHint, useAINumberHint, useAISelectHint, useAIDateHint, useAIColorHint, useAIValidation, useAIFormFill, buildCodeEditorContext, buildHtmlEditorContext, buildAudioContext, build3DSceneContext, buildGraphicsContext, buildIconSearchContext, useAICodeHint, useAIHtmlHint, useAIAudioHint, useAI3DHint, useAIGraphicsHint, useAIIconSearch, buildGameEngineContext, useAINpcHint, type GameEngineAIContext, buildDiagramLayoutContext, useAIDiagramLayout, type DiagramAIContext, buildPresentationGenerateContext, buildSlideDesignContext, useAIPresentationGenerate, useAISlideDesign, type PresentationAIContext, type SlideDesignAIContext, } from './integrations';
11
11
  export { withAIHint, textControlContext, numberControlContext, selectControlContext, dateControlContext, colorControlContext, } from './wrappers';
12
12
  export type { WithAIHintProps } from './wrappers';
13
+ export type { MLProject, MLProjectType, ProjectStatus, DataSource, Dataset, DatasetType, DataColumn, ColumnType, ColumnStatistics, DataSplit, DatasetStatistics, Experiment, ExperimentStatus, ExperimentConfig, PreprocessingStep, PreprocessingType, ValidationConfig, MetricValue, Artifact, LogEntry, MLModel, ModelStatus, Deployment, DeploymentStatus, ResourceConfig, ScalingConfig, LabelingProject, LabelingType, LabelingStatus, LabelSchema, LabelClass, LabelAttribute, LabelRelationship, LabelingItem, ItemData, Label, AnnotationType, AnnotationData, ItemStatus, Collaborator, CollaboratorStats, LabelingStatistics, InferenceEndpoint, EndpointStatus, AuthConfig, EndpointMetrics, InferenceLog, InferenceRequest, InferenceInput, InferenceParameters, InferenceResult, Prediction, NiceMLStudioProps, NiceDataLabelerProps, NiceModelInferenceProps, } from './ml-types';
14
+ export { NiceMLStudio } from './NiceMLStudio';
15
+ export { NiceDataLabeler } from './NiceDataLabeler';
16
+ export { NiceModelInference } from './NiceModelInference';
13
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAGH,OAAO,cAAc,CAAC;AAGtB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EAEb,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,KAAK,mBAAmB,EAExB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,gBAAgB,EAErB,gCAAgC,EAChC,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAGH,OAAO,cAAc,CAAC;AAGtB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EAEb,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,aAAa,EACb,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,KAAK,mBAAmB,EAExB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,gBAAgB,EAErB,gCAAgC,EAChC,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,iBAAiB,CAAC;AAGzB,YAAY,EAEV,SAAS,EACT,aAAa,EACb,aAAa,EACb,UAAU,EACV,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EAEjB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,QAAQ,EAER,OAAO,EACP,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,cAAc,EACd,cAAc,EACd,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAElB,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,UAAU,EAEV,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}