@nice2dev/ui-ai 1.0.29 → 1.1.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.
@@ -1,6 +1,5 @@
1
1
  import { AIHintContext } from './types';
2
2
  import { UseNiceAIHintOptions } from './useNiceAIHint';
3
-
4
3
  /** Build AIHintContext for a text input/textarea. */
5
4
  export declare function buildTextInputContext(label: string, value?: string, opts?: {
6
5
  placeholder?: string;
@@ -284,4 +283,3 @@ export declare function buildSlideDesignContext(slide: SlideDesignAIContext['sli
284
283
  /** AI hook for slide design suggestions.
285
284
  * Returns alignment, contrast, spacing, and typography improvements. */
286
285
  export declare function useAISlideDesign(slide: SlideDesignAIContext['slide'], opts?: Omit<SlideDesignAIContext, 'slide'> & UseNiceAIHintOptions): import('./types').AIHintResult;
287
- //# sourceMappingURL=integrations.d.ts.map
@@ -1,5 +1,4 @@
1
1
  import { NiceAIConfig } from './types';
2
-
3
2
  /** Supported LLM provider types */
4
3
  export type LLMProviderType = 'openai' | 'anthropic' | 'azure-openai' | 'ollama' | 'groq' | 'mistral' | 'cohere' | 'custom';
5
4
  /** Chat message format */
@@ -177,4 +176,3 @@ export declare function createLLMProvider(config: LLMProviderConfig): ILLMProvid
177
176
  /** Create provider from NiceAIConfig */
178
177
  export declare function createProviderFromConfig(config: NiceAIConfig): ILLMProvider;
179
178
  export {};
180
- //# sourceMappingURL=llm-providers.d.ts.map
@@ -1,5 +1,4 @@
1
1
  import { NiceComponentTutorial } from '@nice2dev/ui-core';
2
-
3
2
  export interface MLProject {
4
3
  id: string;
5
4
  name: string;
@@ -359,4 +358,3 @@ export interface NiceModelInferenceProps {
359
358
  showLogs?: boolean;
360
359
  className?: string;
361
360
  }
362
- //# sourceMappingURL=ml-types.d.ts.map
@@ -61,4 +61,3 @@ export declare function getTemplate(id: string): PromptTemplate | undefined;
61
61
  export declare function getTemplatesByCategory(category: PromptCategory): PromptTemplate[];
62
62
  /** List all template IDs */
63
63
  export declare function listTemplates(): string[];
64
- //# sourceMappingURL=prompt-templates.d.ts.map
@@ -1,5 +1,4 @@
1
1
  import { RateLimitConfig, RateLimitStatus } from './types';
2
-
3
2
  export declare class RateLimiter {
4
3
  private timestamps;
5
4
  private tokenCount;
@@ -20,4 +19,3 @@ export declare class RateLimiter {
20
19
  private pruneOldTimestamps;
21
20
  private checkWarning;
22
21
  }
23
- //# sourceMappingURL=rateLimiter.d.ts.map
@@ -1,5 +1,4 @@
1
1
  import { StreamChunk } from './types';
2
-
3
2
  /**
4
3
  * Parse an SSE (Server-Sent Events) stream from a fetch Response.
5
4
  * Yields text tokens as they arrive.
@@ -22,4 +21,3 @@ export declare function parseJSONResponse(response: Response): Promise<{
22
21
  text: string;
23
22
  usage?: StreamChunk['usage'];
24
23
  }>;
25
- //# sourceMappingURL=streaming.d.ts.map
package/dist/types.d.ts CHANGED
@@ -130,4 +130,3 @@ export interface StreamChunk {
130
130
  total_tokens?: number;
131
131
  };
132
132
  }
133
- //# sourceMappingURL=types.d.ts.map
package/dist/ui-ai.css ADDED
@@ -0,0 +1 @@
1
+ :root{--ntd-ai-bg: var(--nice-bg, #1e1e2e);--ntd-ai-fg: #cdd6f4;--ntd-ai-border: #45475a;--ntd-ai-trigger-color: var(--nice-accent, #a78bfa);--ntd-ai-error: #f38ba8}.ntd-ai-trigger:hover{opacity:1!important;transform:scale(1.15)}.ntd-ai-trigger:focus-visible{outline:2px solid var(--ntd-ai-trigger-color);outline-offset:2px}.ntd-ai-popover{animation:ntd-ai-fade-in .15s ease-out}.ntd-ai-action:hover{background-color:var(--ntd-ai-border)!important}@keyframes ntd-ai-spin{to{transform:rotate(360deg)}}@keyframes ntd-ai-blink{0%,to{opacity:1}50%{opacity:0}}@keyframes ntd-ai-fade-in{0%{opacity:0;transform:translate(-50%) translateY(4px)}to{opacity:1;transform:translate(-50%) translateY(0)}}@media(prefers-color-scheme:light){:root{--ntd-ai-bg: var(--nice-bg, #FFFFFF);--ntd-ai-fg: var(--nice-bg, #1e1e2e);--ntd-ai-border: #dce0e8;--ntd-ai-trigger-color: var(--nice-accent, #7c3aed);--ntd-ai-error: var(--nice-danger-dark, #dc2626)}}:root{--ml-primary: var(--nice-info, #6366f1);--ml-primary-dark: var(--nice-accent, #4f46e5);--ml-primary-light: var(--nice-accent, #818cf8);--ml-success: var(--nice-success, #22c55e);--ml-warning: var(--nice-warning, #f59e0b);--ml-error: var(--nice-danger, #ef4444);--ml-info: var(--nice-primary, #3b82f6);--ml-bg: var(--nice-text, #0f172a);--ml-surface: var(--nice-text, #1e293b);--ml-surface-alt: var(--nice-text, #334155);--ml-border: var(--nice-text-secondary, #475569);--ml-text: var(--nice-bg-secondary, #f1f5f9);--ml-text-muted: var(--nice-text-muted, #94a3b8);--ml-radius: 8px;--ml-radius-sm: 4px;--ml-shadow: 0 4px 6px -1px var(--nice-overlay-30, rgba(0, 0, 0, .3));--ml-transition: .15s ease}.nice-ml-studio{display:flex;flex-direction:column;height:100%;min-height:600px;background:var(--ml-bg);color:var(--ml-text);font-family:system-ui,-apple-system,sans-serif}.ml-studio__header{display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-4, 16px) var(--nice-space-6, 24px);background:var(--ml-surface);border-bottom:1px solid var(--ml-border)}.ml-studio__header h2{margin:0;font-size:1.25rem;font-weight:600}.header__tabs{display:flex;gap:var(--nice-space-1, 4px)}.tab-button{padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px);border:none;background:transparent;color:var(--ml-text-muted);font-size:.875rem;font-weight:500;cursor:pointer;border-radius:var(--ml-radius-sm);transition:all var(--ml-transition)}.tab-button:hover{background:var(--ml-surface-alt);color:var(--ml-text)}.tab-button--active{background:var(--ml-primary);color:#fff}.ml-studio__content{flex:1;padding:var(--nice-space-6, 24px);overflow:auto}.data-panel,.experiments-panel,.models-panel,.deploy-panel{display:flex;flex-direction:column;gap:var(--nice-space-6, 24px)}.upload-section,.column-config,.create-experiment,.experiment-list,.model-list,.deployments-list{background:var(--ml-surface);border-radius:var(--ml-radius);padding:var(--nice-space-5, 20px)}.upload-section h3,.column-config h3,.create-experiment h3,.experiment-list h3,.model-list h3,.deployments-list h3{margin:0 0 var(--nice-space-4, 16px);font-size:1rem;font-weight:600}.upload-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-10, 40px);border:2px dashed var(--ml-border);border-radius:var(--ml-radius);cursor:pointer;transition:all var(--ml-transition)}.upload-zone:hover{border-color:var(--ml-primary);background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1))}.upload-icon{font-size:2rem}.columns-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--nice-space-3, 12px)}.column-item{display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--ml-radius-sm)}.column-name{font-weight:500}.column-type-select{padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface);color:var(--ml-text);font-size:.75rem}.experiment-form{display:flex;flex-direction:column;gap:var(--nice-space-4, 16px)}.form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--nice-space-4, 16px)}.form-row label{display:flex;flex-direction:column;gap:var(--nice-space-1-5, 6px);font-size:.875rem;color:var(--ml-text-muted)}.form-row input,.form-row select{padding:var(--nice-space-2-5, 10px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface-alt);color:var(--ml-text);font-size:.875rem}.form-row input:focus,.form-row select:focus{outline:none;border-color:var(--ml-primary)}.run-button{padding:var(--nice-space-3, 12px) var(--nice-space-6, 24px);border:none;border-radius:var(--ml-radius);background:var(--ml-primary);color:#fff;font-size:.875rem;font-weight:600;cursor:pointer;transition:all var(--ml-transition);align-self:flex-start}.run-button:hover:not(:disabled){background:var(--ml-primary-dark)}.run-button:disabled{opacity:.5;cursor:not-allowed}.experiments-grid,.models-grid,.deployments-grid{display:flex;flex-direction:column;gap:var(--nice-space-3, 12px)}.experiment-item,.model-item,.deployment-item{display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-4, 16px);background:var(--ml-surface-alt);border-radius:var(--ml-radius);border:1px solid transparent;cursor:pointer;transition:all var(--ml-transition)}.experiment-item:hover,.model-item:hover,.deployment-item:hover{border-color:var(--ml-primary)}.experiment-item--selected,.model-item--selected{border-color:var(--ml-primary);background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1))}.experiment-item.running{border-color:var(--ml-warning)}.experiment-item.completed{border-color:var(--ml-success)}.experiment-item.failed{border-color:var(--ml-error)}.item-info{display:flex;flex-direction:column;gap:var(--nice-space-1, 4px)}.item-name{font-weight:500}.item-meta{font-size:.75rem;color:var(--ml-text-muted)}.status-badge{padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);border-radius:var(--ml-radius-sm);font-size:.75rem;font-weight:500;text-transform:capitalize}.status-badge--running,.status-badge--deploying{background:var(--nice-warning-tint-20, rgba(245, 158, 11, .2));color:var(--ml-warning)}.status-badge--completed,.status-badge--running-live,.status-badge--success{background:var(--nice-success-tint-20, rgba(34, 197, 94, .2));color:var(--ml-success)}.status-badge--failed,.status-badge--error,.status-badge--stopped{background:var(--nice-danger-tint-20, rgba(239, 68, 68, .2));color:var(--ml-error)}.status-badge--pending{background:var(--nice-primary-tint-20, rgba(59, 130, 246, .2));color:var(--ml-info)}.item-metrics{display:flex;gap:var(--nice-space-4, 16px);font-size:.875rem}.model-register,.deployment-create{padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px);border:1px solid var(--ml-primary);background:transparent;color:var(--ml-primary);border-radius:var(--ml-radius-sm);font-size:.75rem;cursor:pointer;transition:all var(--ml-transition)}.model-register:hover,.deployment-create:hover{background:var(--ml-primary);color:#fff}.item-actions{display:flex;gap:var(--nice-space-2, 8px)}.action-button{padding:var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);border:none;border-radius:var(--ml-radius-sm);font-size:.75rem;cursor:pointer;transition:all var(--ml-transition)}.action-button--stop{background:var(--ml-error);color:#fff}.action-button--start{background:var(--ml-success);color:#fff}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--nice-space-10, 40px);text-align:center;color:var(--ml-text-muted)}.empty-icon{font-size:2rem;margin-bottom:var(--nice-space-3, 12px)}.nice-data-labeler{display:flex;flex-direction:column;height:100%;min-height:600px;background:var(--ml-bg);color:var(--ml-text);font-family:system-ui,-apple-system,sans-serif}.labeler__header{display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-3, 12px) var(--nice-space-6, 24px);background:var(--ml-surface);border-bottom:1px solid var(--ml-border)}.header__info{display:flex;align-items:center;gap:var(--nice-space-4, 16px)}.header__info h2{margin:0;font-size:1.25rem;font-weight:600}.progress-badge{padding:var(--nice-space-1, 4px) var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--nice-radius-full, 99px);font-size:.75rem;color:var(--ml-text-muted)}.label-panel{display:grid;grid-template-columns:1fr 320px;gap:0;height:100%}.labeling-workspace{display:flex;flex-direction:column;height:100%;overflow:hidden}.labeling-canvas{flex:1;position:relative;background:var(--ml-surface);border-right:1px solid var(--ml-border);overflow:hidden}.canvas-image-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:var(--nice-space-5, 20px)}.canvas-image{max-width:100%;max-height:100%;object-fit:contain}.canvas-text-container{width:100%;height:100%;padding:var(--nice-space-5, 20px);overflow:auto}.canvas-text{background:var(--ml-surface-alt);padding:var(--nice-space-4, 16px);border-radius:var(--ml-radius);line-height:1.8;white-space:pre-wrap}.bbox-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.bbox-rect{position:absolute;border:2px solid var(--ml-primary);background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1));pointer-events:auto;cursor:move}.bbox-label{position:absolute;top:-20px;left:0;padding:var(--nice-space-0-5, 2px) var(--nice-space-1-5, 6px);background:var(--ml-primary);color:#fff;font-size:.625rem;border-radius:var(--nice-radius-sm, 2px)}.bbox-delete{position:absolute;top:2px;right:2px;width:16px;height:16px;border:none;background:var(--ml-error);color:#fff;font-size:.625rem;border-radius:var(--nice-radius-full, 50%);cursor:pointer;display:flex;align-items:center;justify-content:center}.text-span{padding:var(--nice-space-0-5, 2px) 0;cursor:pointer;transition:background var(--ml-transition)}.text-span:hover{background:var(--nice-accent-tint-20, rgba(99, 102, 241, .2))}.text-span.labeled{background:var(--nice-accent-tint-30, rgba(99, 102, 241, .3));border-radius:var(--nice-radius-sm, 2px)}.canvas-empty{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--nice-space-4, 16px);color:var(--ml-text-muted)}.canvas-empty .icon{font-size:3rem}.toolbar{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-right:1px solid var(--ml-border)}.tool-button{padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);background:transparent;color:var(--ml-text);border-radius:var(--ml-radius-sm);cursor:pointer;display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);font-size:.75rem;transition:all var(--ml-transition)}.tool-button:hover{background:var(--ml-surface);border-color:var(--ml-primary)}.tool-button--active{background:var(--ml-primary);border-color:var(--ml-primary);color:#fff}.tool-separator{width:1px;height:24px;background:var(--ml-border);margin:0 var(--nice-space-2, 8px)}.labeling-sidebar{display:flex;flex-direction:column;background:var(--ml-surface);height:100%}.classes-panel,.labels-panel{flex:1;display:flex;flex-direction:column;padding:var(--nice-space-4, 16px);overflow:hidden}.classes-panel h4,.labels-panel h4{margin:0 0 var(--nice-space-3, 12px);font-size:.875rem;font-weight:600;color:var(--ml-text-muted)}.class-list,.label-list{display:flex;flex-direction:column;gap:var(--nice-space-2, 8px);overflow-y:auto}.class-button{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-2-5, 10px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);background:var(--ml-surface-alt);color:var(--ml-text);border-radius:var(--ml-radius-sm);cursor:pointer;transition:all var(--ml-transition);text-align:left;font-size:.875rem}.class-button:hover{border-color:var(--ml-primary)}.class-button--selected{border-color:var(--ml-primary);background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1))}.class-color{width:12px;height:12px;border-radius:var(--nice-radius-full, 50%);flex-shrink:0}.add-class-input{display:flex;gap:var(--nice-space-2, 8px);margin-top:var(--nice-space-3, 12px)}.add-class-input input{flex:1;padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface-alt);color:var(--ml-text);font-size:.875rem}.add-button{padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);border:none;background:var(--ml-primary);color:#fff;border-radius:var(--ml-radius-sm);cursor:pointer}.label-item{display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--ml-radius-sm);font-size:.75rem}.label-info{display:flex;align-items:center;gap:var(--nice-space-2, 8px)}.label-color{width:8px;height:8px;border-radius:var(--nice-radius-full, 50%)}.label-delete{padding:var(--nice-space-1, 4px);border:none;background:transparent;color:var(--ml-text-muted);cursor:pointer;font-size:.875rem}.label-delete:hover{color:var(--ml-error)}.navigation-buttons{display:flex;gap:var(--nice-space-2, 8px);padding:var(--nice-space-4, 16px);border-top:1px solid var(--ml-border)}.nav-button{flex:1;padding:var(--nice-space-2-5, 10px);border:1px solid var(--ml-border);background:var(--ml-surface-alt);color:var(--ml-text);border-radius:var(--ml-radius-sm);cursor:pointer;font-size:.875rem;transition:all var(--ml-transition)}.nav-button:hover:not(:disabled){background:var(--ml-surface);border-color:var(--ml-primary)}.nav-button:disabled{opacity:.5;cursor:not-allowed}.nav-button--primary{background:var(--ml-success);border-color:var(--ml-success);color:#fff}.schema-panel{display:grid;grid-template-columns:1fr 1fr;gap:var(--nice-space-6, 24px);padding:var(--nice-space-6, 24px)}.classes-editor,.schema-settings{background:var(--ml-surface);border-radius:var(--ml-radius);padding:var(--nice-space-5, 20px)}.classes-editor h3,.schema-settings h3{margin:0 0 var(--nice-space-4, 16px);font-size:1rem;font-weight:600}.class-editor-list{display:flex;flex-direction:column;gap:var(--nice-space-2, 8px);margin-bottom:var(--nice-space-4, 16px)}.class-editor-item{display:flex;align-items:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--ml-radius-sm)}.class-editor-item input[type=color]{width:32px;height:32px;border:none;border-radius:var(--ml-radius-sm);cursor:pointer}.class-editor-item input[type=text]{flex:1;padding:var(--nice-space-2, 8px);border:1px solid var(--ml-border);background:var(--ml-surface);color:var(--ml-text);border-radius:var(--ml-radius-sm)}.class-editor-item button{padding:var(--nice-space-2, 8px);border:none;background:transparent;color:var(--ml-text-muted);cursor:pointer}.class-editor-item button:hover{color:var(--ml-error)}.add-class-form{display:flex;gap:var(--nice-space-2, 8px)}.add-class-form input{flex:1}.settings-group{margin-bottom:var(--nice-space-5, 20px)}.settings-group label{display:flex;flex-direction:column;gap:var(--nice-space-1-5, 6px);font-size:.875rem;color:var(--ml-text-muted);margin-bottom:var(--nice-space-2, 8px)}.settings-group select,.settings-group input{padding:var(--nice-space-2-5, 10px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface-alt);color:var(--ml-text)}.checkbox-label{flex-direction:row!important;align-items:center;gap:var(--nice-space-2, 8px)!important}.review-panel{display:flex;flex-direction:column;height:100%;padding:var(--nice-space-6, 24px)}.review-filters{display:flex;gap:var(--nice-space-3, 12px);margin-bottom:var(--nice-space-4, 16px);padding-bottom:var(--nice-space-4, 16px);border-bottom:1px solid var(--ml-border)}.filter-group label{display:flex;flex-direction:column;gap:var(--nice-space-1, 4px);font-size:.75rem;color:var(--ml-text-muted)}.filter-group select,.filter-group input{padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface);color:var(--ml-text);font-size:.875rem}.review-grid{flex:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--nice-space-4, 16px);overflow-y:auto}.review-item{background:var(--ml-surface);border-radius:var(--ml-radius);overflow:hidden;border:2px solid transparent;cursor:pointer;transition:all var(--ml-transition)}.review-item:hover,.review-item.selected{border-color:var(--ml-primary)}.review-thumbnail{width:100%;height:120px;display:flex;align-items:center;justify-content:center;background:var(--ml-surface-alt);overflow:hidden}.review-thumbnail img{width:100%;height:100%;object-fit:cover}.review-thumbnail.text{font-size:.75rem;color:var(--ml-text-muted);padding:var(--nice-space-3, 12px)}.review-info{padding:var(--nice-space-3, 12px)}.review-labels{display:flex;flex-wrap:wrap;gap:var(--nice-space-1, 4px);margin-bottom:var(--nice-space-2, 8px)}.review-label-tag{padding:var(--nice-space-0-5, 2px) var(--nice-space-1-5, 6px);border-radius:var(--nice-radius-sm, 2px);font-size:.625rem;color:#fff}.review-meta{display:flex;justify-content:space-between;font-size:.625rem;color:var(--ml-text-muted)}.review-actions{display:flex;gap:var(--nice-space-2, 8px);padding:var(--nice-space-4, 16px);background:var(--ml-surface);border-top:1px solid var(--ml-border)}.review-action-button{flex:1;padding:var(--nice-space-2-5, 10px);border:none;border-radius:var(--ml-radius-sm);font-size:.875rem;cursor:pointer;transition:all var(--ml-transition)}.review-action-button--approve{background:var(--ml-success);color:#fff}.review-action-button--reject{background:var(--ml-error);color:#fff}.export-panel{display:flex;flex-direction:column;gap:var(--nice-space-6, 24px);padding:var(--nice-space-6, 24px);max-width:600px}.format-selection,.export-options,.export-actions{background:var(--ml-surface);border-radius:var(--ml-radius);padding:var(--nice-space-5, 20px)}.format-selection h3,.export-options h3{margin:0 0 var(--nice-space-4, 16px);font-size:1rem;font-weight:600}.format-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--nice-space-3, 12px)}.format-option{display:flex;flex-direction:column;padding:var(--nice-space-4, 16px);border:2px solid var(--ml-border);border-radius:var(--ml-radius);cursor:pointer;transition:all var(--ml-transition)}.format-option:hover{border-color:var(--ml-primary)}.format-option.selected{border-color:var(--ml-primary);background:var(--nice-accent-tint-10, rgba(99, 102, 241, .1))}.format-name{font-weight:500;margin-bottom:var(--nice-space-1, 4px)}.format-description{font-size:.75rem;color:var(--ml-text-muted)}.option-row{margin-bottom:var(--nice-space-4, 16px)}.option-row label{display:flex;flex-direction:column;gap:var(--nice-space-1-5, 6px);font-size:.875rem}.option-row select,.option-row input[type=number]{padding:var(--nice-space-2-5, 10px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface-alt);color:var(--ml-text)}.checkbox-option{flex-direction:row!important;align-items:center;gap:var(--nice-space-2, 8px)!important}.export-button{padding:var(--nice-space-3-5, 14px) var(--nice-space-6, 24px);border:none;border-radius:var(--ml-radius);background:var(--ml-primary);color:#fff;font-size:1rem;font-weight:600;cursor:pointer;transition:all var(--ml-transition)}.export-button:hover{background:var(--ml-primary-dark)}.nice-model-inference{display:flex;flex-direction:column;height:100%;min-height:600px;background:var(--ml-bg);color:var(--ml-text);font-family:system-ui,-apple-system,sans-serif}.inference__header{display:flex;justify-content:space-between;align-items:center;padding:var(--nice-space-4, 16px) var(--nice-space-6, 24px);background:var(--ml-surface);border-bottom:1px solid var(--ml-border)}.inference__content{flex:1;padding:var(--nice-space-6, 24px);overflow:auto}.test-panel{display:grid;grid-template-columns:1fr 1fr;gap:var(--nice-space-6, 24px);height:100%}.input-section,.output-section{display:flex;flex-direction:column;gap:var(--nice-space-4, 16px)}.input-type-selector{display:flex;gap:var(--nice-space-2, 8px)}.type-button{padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px);border:1px solid var(--ml-border);background:transparent;color:var(--ml-text);border-radius:var(--ml-radius-sm);cursor:pointer;transition:all var(--ml-transition)}.type-button:hover{border-color:var(--ml-primary)}.type-button--active{background:var(--ml-primary);border-color:var(--ml-primary);color:#fff}.input-area{flex:1}.text-input,.json-input{width:100%;min-height:200px;padding:var(--nice-space-3, 12px);border:1px solid var(--ml-border);border-radius:var(--ml-radius);background:var(--ml-surface);color:var(--ml-text);font-family:Fira Code,monospace;font-size:.875rem;resize:vertical}.text-input:focus,.json-input:focus{outline:none;border-color:var(--ml-primary)}.image-input{min-height:200px;display:flex;align-items:center;justify-content:center}.image-preview{position:relative;max-width:100%;max-height:300px}.image-preview img{max-width:100%;max-height:300px;object-fit:contain;border-radius:var(--ml-radius)}.clear-button{position:absolute;top:8px;right:8px;padding:var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);border:none;background:var(--ml-error);color:#fff;border-radius:var(--ml-radius-sm);cursor:pointer}.parameters-section h4{margin:0 0 var(--nice-space-3, 12px);font-size:.875rem;font-weight:500}.parameters-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--nice-space-3, 12px)}.parameters-grid label{display:flex;flex-direction:column;gap:var(--nice-space-1, 4px);font-size:.75rem;color:var(--ml-text-muted)}.parameters-grid input{padding:var(--nice-space-2, 8px);border:1px solid var(--ml-border);border-radius:var(--ml-radius-sm);background:var(--ml-surface);color:var(--ml-text);font-size:.875rem}.output-section h3{margin:0;font-size:1rem;font-weight:600}.error-message{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-3, 12px);background:var(--nice-danger-tint-10, rgba(239, 68, 68, .1));border:1px solid var(--ml-error);border-radius:var(--ml-radius);color:var(--ml-error)}.result-container{display:flex;flex-direction:column;gap:var(--nice-space-4, 16px)}.result-meta{display:flex;gap:var(--nice-space-4, 16px);font-size:.75rem;color:var(--ml-text-muted);padding:var(--nice-space-3, 12px);background:var(--ml-surface);border-radius:var(--ml-radius-sm)}.predictions-list{display:flex;flex-direction:column;gap:var(--nice-space-3, 12px)}.prediction-item{padding:var(--nice-space-4, 16px);background:var(--ml-surface);border-radius:var(--ml-radius)}.prediction-label{display:flex;align-items:center;gap:var(--nice-space-3, 12px);margin-bottom:var(--nice-space-2, 8px)}.label-name{font-weight:500;font-size:1rem}.confidence-badge{padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);border-radius:var(--ml-radius-sm);font-size:.75rem;color:#fff}.prediction-score,.prediction-bbox{font-size:.875rem;color:var(--ml-text-muted);margin-bottom:var(--nice-space-1, 4px)}.prediction-text pre{margin:var(--nice-space-2, 8px) 0 0;padding:var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--ml-radius-sm);overflow-x:auto;font-size:.875rem}.raw-output{margin-top:var(--nice-space-2, 8px)}.raw-output summary{cursor:pointer;font-size:.75rem;color:var(--ml-text-muted)}.raw-output pre{margin-top:var(--nice-space-2, 8px);padding:var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--ml-radius-sm);overflow-x:auto;font-size:.75rem}.empty-output{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--nice-space-15, 60px);background:var(--ml-surface);border-radius:var(--ml-radius);color:var(--ml-text-muted);text-align:center}.empty-output .icon{font-size:2rem;margin-bottom:var(--nice-space-2, 8px)}.batch-panel{display:flex;flex-direction:column;gap:var(--nice-space-6, 24px)}.batch-upload{background:var(--ml-surface);border-radius:var(--ml-radius);padding:var(--nice-space-5, 20px)}.batch-upload h3{margin:0 0 var(--nice-space-2, 8px);font-size:1rem;font-weight:600}.batch-upload .hint{margin:0 0 var(--nice-space-4, 16px);font-size:.875rem;color:var(--ml-text-muted)}.batch-progress{display:flex;align-items:center;gap:var(--nice-space-4, 16px);padding:var(--nice-space-4, 16px);background:var(--ml-surface);border-radius:var(--ml-radius)}.progress-bar{flex:1;height:8px;background:var(--ml-surface-alt);border-radius:var(--nice-radius-sm, 4px);overflow:hidden}.progress-fill{height:100%;background:var(--ml-primary);transition:width var(--ml-transition)}.batch-results{background:var(--ml-surface);border-radius:var(--ml-radius);padding:var(--nice-space-5, 20px)}.batch-results h3{margin:0 0 var(--nice-space-4, 16px);font-size:1rem;font-weight:600}.results-list{display:flex;flex-direction:column;gap:var(--nice-space-2, 8px);max-height:400px;overflow-y:auto}.batch-result-item{display:flex;align-items:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-3, 12px);background:var(--ml-surface-alt);border-radius:var(--ml-radius-sm)}.result-index{font-weight:600;color:var(--ml-text-muted);min-width:40px}.result-prediction{font-size:.875rem}.metrics-panel{display:flex;flex-direction:column;gap:var(--nice-space-6, 24px)}.metrics-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:var(--nice-space-4, 16px)}.metric-card{display:flex;flex-direction:column;align-items:center;padding:var(--nice-space-6, 24px);background:var(--ml-surface);border-radius:var(--ml-radius);text-align:center}.metric-value{font-size:1.75rem;font-weight:700;color:var(--ml-primary-light);margin-bottom:var(--nice-space-1, 4px)}.metric-label{font-size:.875rem;color:var(--ml-text-muted)}.latency-histogram{background:var(--ml-surface);border-radius:var(--ml-radius);padding:var(--nice-space-5, 20px)}.latency-histogram h3{margin:0 0 var(--nice-space-4, 16px);font-size:1rem;font-weight:600}.histogram-bars{display:flex;align-items:flex-end;gap:var(--nice-space-4, 16px);height:120px}.histogram-bar{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end}.bar-fill{width:100%;background:var(--ml-primary);border-radius:var(--ml-radius-sm) var(--ml-radius-sm) 0 0;min-height:10px}.percentile-label{margin-top:var(--nice-space-2, 8px);font-size:.75rem;color:var(--ml-text-muted)}.logs-panel{display:flex;flex-direction:column;height:100%}.logs-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--nice-space-4, 16px)}.logs-header h3{margin:0;font-size:1rem;font-weight:600}.clear-logs-button{padding:var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);border:1px solid var(--ml-border);background:transparent;color:var(--ml-text);border-radius:var(--ml-radius-sm);font-size:.75rem;cursor:pointer}.clear-logs-button:hover{background:var(--ml-surface-alt)}.logs-table{flex:1;overflow:auto;background:var(--ml-surface);border-radius:var(--ml-radius)}.logs-table table{width:100%;border-collapse:collapse}.logs-table th,.logs-table td{padding:var(--nice-space-3, 12px);text-align:left;border-bottom:1px solid var(--ml-border)}.logs-table th{font-weight:600;font-size:.75rem;color:var(--ml-text-muted);text-transform:uppercase;background:var(--ml-surface-alt);position:sticky;top:0}.logs-table td{font-size:.875rem}.empty-logs{text-align:center;color:var(--ml-text-muted);padding:var(--nice-space-10, 40px)!important}.log-row--error{background:var(--nice-danger-tint-10, rgba(239, 68, 68, .05))}.request-id{font-family:Fira Code,monospace;font-size:.75rem}@media(max-width:1200px){.test-panel,.schema-panel,.label-panel{grid-template-columns:1fr}.labeling-sidebar{display:none}}@media(max-width:768px){.parameters-grid,.metrics-grid{grid-template-columns:repeat(2,1fr)}.format-grid{grid-template-columns:1fr}}
@@ -1,5 +1,4 @@
1
1
  import { AIHintContext, AIHintResult } from './types';
2
-
3
2
  export interface UseNiceAIHintOptions {
4
3
  /** Debounce delay in ms. @default 500 */
5
4
  debounceMs?: number;
@@ -7,4 +6,3 @@ export interface UseNiceAIHintOptions {
7
6
  disabled?: boolean;
8
7
  }
9
8
  export declare function useNiceAIHint(context?: AIHintContext, options?: UseNiceAIHintOptions): AIHintResult;
10
- //# sourceMappingURL=useNiceAIHint.d.ts.map
@@ -1,6 +1,5 @@
1
1
  import { ComponentType, ReactNode } from 'react';
2
2
  import { AIHintContext, AIHintPosition } from './types';
3
-
4
3
  export interface WithAIHintProps {
5
4
  /** Enable AI hint bubble. @default true */
6
5
  aiEnabled?: boolean;
@@ -63,4 +62,3 @@ export declare function colorControlContext(props: {
63
62
  label?: string;
64
63
  value?: string;
65
64
  }): AIHintContext;
66
- //# sourceMappingURL=wrappers.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice2dev/ui-ai",
3
- "version": "1.0.29",
3
+ "version": "1.1.6",
4
4
  "description": "Nice2Dev AI Hints — LLM-powered contextual suggestions for UI controls (OpenAI, Azure OpenAI, Ollama, custom endpoints)",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -12,7 +12,7 @@
12
12
  "import": "./dist/index.mjs",
13
13
  "require": "./dist/index.cjs"
14
14
  },
15
- "./style.css": "./dist/style.css"
15
+ "./style.css": "./dist/ui-ai.css"
16
16
  },
17
17
  "files": [
18
18
  "dist",
@@ -39,18 +39,20 @@
39
39
  "react-dom": ">=17.0.0"
40
40
  },
41
41
  "devDependencies": {
42
- "@nice2dev/ui-core": "^1.0.29",
43
- "@testing-library/jest-dom": "^6.9.1",
44
- "@testing-library/react": "^14.0.0",
45
- "@types/react": "^18.2.0",
46
- "@types/react-dom": "^18.2.0",
47
- "@vitejs/plugin-react": "^4.2.0",
48
- "react": "^18.2.0",
49
- "react-dom": "^18.2.0",
50
- "typescript": "^5.3.0",
51
- "vite": "^5.0.0",
52
- "vite-plugin-dts": "^3.7.0",
53
- "vitest": "^4.1.0"
42
+ "@nice2dev/ui": "^1.1.6",
43
+ "@nice2dev/ui-core": "^1.1.6",
44
+ "@testing-library/jest-dom": "^7.0.1",
45
+ "@testing-library/react": "^16.3.3",
46
+ "@types/react": "^19.2.18",
47
+ "@types/react-dom": "^19.2.7",
48
+ "@vitejs/plugin-react": "^4.7.0",
49
+ "jsdom": "^29.0.0",
50
+ "react": "^19.2.8",
51
+ "react-dom": "^19.2.8",
52
+ "typescript": "^5.9.3",
53
+ "vite": "^6.4.1",
54
+ "vite-plugin-dts": "^4.5.4",
55
+ "vitest": "^4.1.11"
54
56
  },
55
57
  "keywords": [
56
58
  "react",