@yuktishaalaa/yuktai 5.3.10 → 5.3.11
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.
- package/README.md +7 -7
- package/dist/agent-SZENB4QE.mjs +18 -0
- package/dist/agentic/a11yCopilot.d.ts +32 -0
- package/dist/agentic/contextIndex.d.ts +58 -0
- package/dist/agentic/designReview.d.ts +26 -0
- package/dist/agentic/dom.d.ts +42 -0
- package/dist/agentic/formReview.d.ts +38 -0
- package/dist/agentic/gridQuery.d.ts +64 -0
- package/dist/agentic/index.d.ts +13 -0
- package/dist/agentic/insights.d.ts +62 -0
- package/dist/agentic/pageInsights.d.ts +47 -0
- package/dist/agentic/qaAudit.d.ts +59 -0
- package/dist/agentic/react.d.ts +52 -0
- package/dist/agentic/rust/ragCoreWasm.d.ts +3 -0
- package/dist/agentic/rust/ragEngine.d.ts +32 -0
- package/dist/agentic/taskRunner.d.ts +34 -0
- package/dist/agentic/voiceA11yCommands.d.ts +74 -0
- package/dist/chunk-K2IBRN5C.mjs +1 -0
- package/dist/chunk-M2OKTFX3.mjs +11 -0
- package/dist/chunk-N2HHE7YH.mjs +1 -0
- package/dist/core/a11yEngine.d.ts +5 -0
- package/dist/core/ai/agent.d.ts +21 -0
- package/dist/core/ai/labeller.d.ts +12 -0
- package/dist/core/ai/promptOptions.d.ts +16 -0
- package/dist/core/ai/rag.d.ts +7 -0
- package/dist/core/ai/rewriter.d.ts +13 -0
- package/dist/core/ai/summarizer.d.ts +8 -0
- package/dist/core/ai/transformers-rag.d.ts +9 -0
- package/dist/core/ai/translator.d.ts +14 -0
- package/dist/core/ai/voice.d.ts +33 -0
- package/dist/core/codegen/page-templates.d.ts +32 -0
- package/dist/core/codegen/requirement-parser.d.ts +12 -0
- package/dist/core/codegen/zip-generator.d.ts +2 -0
- package/dist/core/generateUI.d.ts +4 -0
- package/dist/core/renderer.d.ts +72 -0
- package/dist/grid/YuktaiGrid.d.ts +4 -0
- package/dist/grid/YuktaiGridAI.d.ts +46 -0
- package/dist/grid/YuktaiGridAgent.d.ts +81 -0
- package/dist/grid/YuktaiGridWebMCP.d.ts +54 -0
- package/dist/grid/gridTools.d.ts +111 -0
- package/dist/grid/rust/engine.d.ts +55 -0
- package/dist/grid/rust/gridCoreWasm.d.ts +3 -0
- package/dist/grid/rust/useGridCore.d.ts +2 -0
- package/dist/grid/types.d.ts +245 -0
- package/dist/grid/useGrid.d.ts +57 -0
- package/dist/grid/yuktaiGridRows.d.ts +35 -0
- package/dist/icons/CheckIcon.d.ts +2 -0
- package/dist/icons/ChevronLeftIcon.d.ts +2 -0
- package/dist/icons/ChevronRightIcon.d.ts +2 -0
- package/dist/icons/CloseIcon.d.ts +2 -0
- package/dist/icons/IconBase.d.ts +25 -0
- package/dist/icons/SearchIcon.d.ts +2 -0
- package/dist/icons/SortDownIcon.d.ts +2 -0
- package/dist/icons/SortUpIcon.d.ts +2 -0
- package/dist/icons/YuktaiIcon.d.ts +320 -0
- package/dist/icons/index.d.ts +16 -0
- package/dist/icons/paths.d.ts +167 -0
- package/dist/icons/variant.d.ts +42 -0
- package/dist/icons.d.mts +1 -568
- package/dist/icons.d.ts +1 -568
- package/dist/icons.js +1 -1
- package/dist/icons.mjs +1 -1
- package/dist/index.d.mts +2 -1337
- package/dist/index.d.ts +36 -1315
- package/dist/index.js +69 -69
- package/dist/index.mjs +42 -42
- package/dist/next/YuktAIWrapper.d.ts +2 -0
- package/dist/plugins/ai.d.ts +4 -0
- package/dist/plugins/voice.d.ts +4 -0
- package/dist/plugins/wcag.d.ts +98 -0
- package/dist/rag-O3FDQPTX.mjs +1 -0
- package/dist/react/CodeGenPanel.d.ts +7 -0
- package/dist/react/WidgetPanel.d.ts +38 -0
- package/dist/react/YuktAIWrapper.d.ts +35 -0
- package/dist/renderer.global.js +23 -23
- package/dist/runtime/runtime.d.ts +18 -0
- package/package.json +5 -3
- package/vanilla/index.js +49 -29
- package/vanilla/index.min.js +45 -45
- package/dist/agent-G67IA7MY.mjs +0 -18
- package/dist/chunk-7BGINZ5U.mjs +0 -1
- package/dist/chunk-P2PBML6K.mjs +0 -11
- package/dist/rag-Q3LUXSSD.mjs +0 -1
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type GridToolContext, type GridToolFilter, type GridToolSort } from "../grid/gridTools";
|
|
2
|
+
export type TaskAction = "filter" | "highlight" | "sort" | "clear" | "count" | "summarize" | "anomalies" | "open" | "select";
|
|
3
|
+
export interface PlannedStep {
|
|
4
|
+
action: TaskAction;
|
|
5
|
+
/** The part of the instruction this step came from. */
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
export interface StepResult extends PlannedStep {
|
|
9
|
+
success: boolean;
|
|
10
|
+
message: string;
|
|
11
|
+
ids?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface TaskRunResult {
|
|
14
|
+
steps: StepResult[];
|
|
15
|
+
before: {
|
|
16
|
+
rows: number;
|
|
17
|
+
filters: GridToolFilter[];
|
|
18
|
+
};
|
|
19
|
+
after: {
|
|
20
|
+
rows: number;
|
|
21
|
+
filters: GridToolFilter[];
|
|
22
|
+
sort: GridToolSort | null;
|
|
23
|
+
highlighted: string[];
|
|
24
|
+
};
|
|
25
|
+
/** "What changed", in plain English. */
|
|
26
|
+
summary: string;
|
|
27
|
+
}
|
|
28
|
+
/** Splits an instruction into ordered steps. No model needed. */
|
|
29
|
+
export declare function planTasks(instruction: string): PlannedStep[];
|
|
30
|
+
export interface RunTasksOptions {
|
|
31
|
+
/** Called after each step, so the UI can show progress. */
|
|
32
|
+
onStep?: (result: StepResult, index: number, total: number) => void;
|
|
33
|
+
}
|
|
34
|
+
export declare function runTasks<T extends Record<string, unknown>>(instruction: string, context: GridToolContext<T>, options?: RunTasksOptions): Promise<TaskRunResult>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type A11yConfig, type ColorBlindMode } from "../core/renderer";
|
|
2
|
+
export type GridNavAction = "next-row" | "previous-row" | "first-row" | "last-row" | "open-row";
|
|
3
|
+
export type VoiceA11yCommand = {
|
|
4
|
+
type: "setting";
|
|
5
|
+
patch: Partial<A11yConfig>;
|
|
6
|
+
say: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "reset";
|
|
9
|
+
say: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: "grid";
|
|
12
|
+
action: GridNavAction;
|
|
13
|
+
say: string;
|
|
14
|
+
};
|
|
15
|
+
export declare const FONT_STEP = 0.1;
|
|
16
|
+
export declare const FONT_MIN = 0.8;
|
|
17
|
+
export declare const FONT_MAX = 1.3;
|
|
18
|
+
/**
|
|
19
|
+
* Parses a transcript into a command. `current` is needed for relative
|
|
20
|
+
* changes such as "bigger text". Returns null when nothing matched, so you
|
|
21
|
+
* can pass the transcript on to other handlers (e.g. core/ai/voice.ts).
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseVoiceA11yCommand(transcript: string, current?: Partial<A11yConfig>): VoiceA11yCommand | null;
|
|
24
|
+
export declare const DEFAULT_A11Y_SETTINGS: Partial<A11yConfig>;
|
|
25
|
+
export declare function moveGridRowFocus(action: GridNavAction, options?: {
|
|
26
|
+
root?: ParentNode;
|
|
27
|
+
rowSelector?: string;
|
|
28
|
+
}): HTMLElement | null;
|
|
29
|
+
export interface VoiceA11yControllerOptions {
|
|
30
|
+
/** Current settings; the controller keeps its own copy after each change. */
|
|
31
|
+
initial?: Partial<A11yConfig>;
|
|
32
|
+
/**
|
|
33
|
+
* Apply new settings. Default: yuktai's wcagPlugin.execute.
|
|
34
|
+
* Pass your own to sync with WidgetPanel state or a settings store.
|
|
35
|
+
*/
|
|
36
|
+
apply?: (config: A11yConfig) => unknown;
|
|
37
|
+
/** Speech recognition language, e.g. "en-IN" or "te-IN" (default "en-IN"). */
|
|
38
|
+
lang?: string;
|
|
39
|
+
/** Speak a confirmation after each command (default true). */
|
|
40
|
+
speak?: boolean;
|
|
41
|
+
/** Called for every recognised transcript, matched or not. */
|
|
42
|
+
onTranscript?: (text: string, command: VoiceA11yCommand | null) => void;
|
|
43
|
+
gridRoot?: ParentNode;
|
|
44
|
+
}
|
|
45
|
+
export declare function createVoiceA11yController(options?: VoiceA11yControllerOptions): {
|
|
46
|
+
start: () => boolean;
|
|
47
|
+
stop: () => void;
|
|
48
|
+
/** Run a command from text (also handy for typed commands and tests). */
|
|
49
|
+
handle: (transcript: string) => Promise<VoiceA11yCommand | null>;
|
|
50
|
+
isListening: () => boolean;
|
|
51
|
+
getConfig: () => {
|
|
52
|
+
enabled: boolean;
|
|
53
|
+
highContrast?: boolean;
|
|
54
|
+
darkMode?: boolean;
|
|
55
|
+
reduceMotion?: boolean;
|
|
56
|
+
autoFix?: boolean;
|
|
57
|
+
fontSizeMultiplier?: number;
|
|
58
|
+
colorBlindMode?: ColorBlindMode;
|
|
59
|
+
keyboardHints?: boolean;
|
|
60
|
+
speechEnabled?: boolean;
|
|
61
|
+
showPreferencePanel?: boolean;
|
|
62
|
+
showAuditBadge?: boolean;
|
|
63
|
+
showSkipLinks?: boolean;
|
|
64
|
+
largeTargets?: boolean;
|
|
65
|
+
timeoutWarning?: number;
|
|
66
|
+
dyslexiaFont?: boolean;
|
|
67
|
+
localFont?: string;
|
|
68
|
+
plainEnglish?: boolean;
|
|
69
|
+
summarisePage?: boolean;
|
|
70
|
+
translateLanguage?: string;
|
|
71
|
+
voiceControl?: boolean;
|
|
72
|
+
smartLabels?: boolean;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var G="[data-yuktai-panel],[data-yuktai-ui],[data-yuktai-fabs]";function L(){return typeof window<"u"&&typeof document<"u"}function ce(o){return typeof o=="object"&&o!==null&&o.nodeType===9}function re(o){return o||(L()?document:null)}function ae(o,e,c={}){return Array.from(o.querySelectorAll(e)).filter(a=>!a.closest(G)&&(c.includeHidden||U(a)))}function U(o){if(!L()||o.closest("[hidden],[aria-hidden='true']"))return!1;let e=o;for(;e;){let c=window.getComputedStyle(e);if(c.display==="none"||c.visibility==="hidden")return!1;e=e.parentElement}return!0}function I(o){return(o??"").replace(/\s+/g," ").trim()}function pe(o,e=60){let c=I(o);return c.length>e?`${c.slice(0,e-1)}\u2026`:c}function se(o){let e=[],c=o;for(;c&&c.nodeType===1&&e.length<4;){let a=c.tagName.toLowerCase();if(c.id&&/^[A-Za-z][\w-]*$/.test(c.id)){e.unshift(`${a}#${c.id}`);break}let r=c.parentElement;if(!r){e.unshift(a);break}let p=Array.from(r.children).filter(i=>i.tagName===c.tagName);e.unshift(p.length>1?`${a}:nth-of-type(${p.indexOf(c)+1})`:a),c=r}return e.join(" > ")}function _(o,e){return o.split(/\s+/).map(c=>I(e.getElementById(c)?.textContent)).filter(Boolean).join(" ")}function ie(o){let e=o.ownerDocument,c=o.getAttribute("aria-labelledby");if(c){let p=_(c,e);if(p)return p}let a=I(o.getAttribute("aria-label"));if(a)return a;let r=o.tagName.toLowerCase();if(r==="input"||r==="select"||r==="textarea"){let p=o.getAttribute("id");if(p){let l=e.querySelector(`label[for="${W(p)}"]`),M=I(l?.textContent);if(M)return M}let i=o.closest("label");if(i){let l=I(i.textContent);if(l)return l}let s=(o.getAttribute("type")??"").toLowerCase();if(s==="submit"||s==="button"||s==="reset")return I(o.getAttribute("value"))||(s==="submit"?"Submit":"");if(s==="image")return I(o.getAttribute("alt"))}if(r==="img")return I(o.getAttribute("alt"));if(r==="button"||r==="a"||o.getAttribute("role")){let p=I(o.textContent);if(p)return p;let i=Array.from(o.querySelectorAll("img[alt], svg[aria-label]")).map(s=>I(s.getAttribute("alt")??s.getAttribute("aria-label"))).filter(Boolean).join(" ");if(i)return i}return I(o.getAttribute("title"))}function W(o){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(o):o.replace(/["\\]/g,"\\$&")}function y(o){if(!o)return null;let e=o.trim().toLowerCase();if(e==="transparent")return{r:0,g:0,b:0,a:0};let c=e.match(/^rgba?\(([^)]+)\)$/);if(c){let r=c[1].split(/[\s,/]+/).filter(Boolean),[p,i,s]=r.slice(0,3).map(Number),l=r[3],M=l===void 0?1:l.endsWith("%")?Number(l.slice(0,-1))/100:Number(l);return[p,i,s,M].some(m=>!Number.isFinite(m))?null:{r:p,g:i,b:s,a:M}}let a=e.match(/^#([0-9a-f]{3,8})$/);if(a){let r=a[1];return(r.length===3||r.length===4)&&(r=r.split("").map(p=>p+p).join("")),r.length!==6&&r.length!==8?null:{r:parseInt(r.slice(0,2),16),g:parseInt(r.slice(2,4),16),b:parseInt(r.slice(4,6),16),a:r.length===8?parseInt(r.slice(6,8),16)/255:1}}return null}function b(o,e){let c=o.a+e.a*(1-o.a);if(c===0)return{r:0,g:0,b:0,a:0};let a=(r,p)=>(r*o.a+p*e.a*(1-o.a))/c;return{r:a(o.r,e.r),g:a(o.g,e.g),b:a(o.b,e.b),a:c}}function A(o){let e=c=>{let a=c/255;return a<=.04045?a/12.92:Math.pow((a+.055)/1.055,2.4)};return .2126*e(o.r)+.7152*e(o.g)+.0722*e(o.b)}function H(o,e){let c=e.a<1?b(e,{r:255,g:255,b:255,a:1}):e,a=o.a<1?b(o,c):o,r=A(a),p=A(c),[i,s]=r>p?[r,p]:[p,r];return Math.round((i+.05)/(s+.05)*100)/100}function he(o){let e=[],c=o;for(;c;){let r=window.getComputedStyle(c);if(r.backgroundImage&&r.backgroundImage!=="none")return null;let p=y(r.backgroundColor);if(p&&p.a>0&&(e.push(p),p.a>=1))break;c=c.parentElement}let a={r:255,g:255,b:255,a:1};for(let r=e.length-1;r>=0;r--)a=b(e[r],a);return a}function le(o){let e=window.getComputedStyle(o),c=parseFloat(e.fontSize)||16,a=parseInt(e.fontWeight,10)||400;return c>=24||c>=18.66&&a>=700}function Ie(o){return Array.from(o.childNodes).some(e=>e.nodeType===3&&I(e.textContent).length>0)}var de="a[href],button,input:not([type='hidden']),select,textarea,summary,[tabindex]:not([tabindex='-1']),[contenteditable='true']",me="a[href],button,input:not([type='hidden']),select,textarea,summary,[role='button'],[role='link'],[role='checkbox'],[role='tab'],[role='menuitem']";var x={accessibility:'<circle cx="12" cy="4" r="2"/><path d="M4 8l8-1 8 1M12 7v5m-5 9 5-8 5 8M7 12l-2 5m12-5 2 5"/>',contrast:'<circle cx="12" cy="12" r="9"/><path d="M12 3a9 9 0 0 0 0 18z"/>',moon:'<path d="M20 14.5A8.5 8.5 0 0 1 9.5 4 8.5 8.5 0 1 0 20 14.5z"/>',motion:'<path d="M4 12h12m-5-5 5 5-5 5M20 5v14"/>',reading:'<path d="M4 5h16M4 10h12M4 15h16M4 20h10"/>',target:'<circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="4"/>',speaker:'<path d="M4 9v6h4l5 4V5L8 9H4z"/><path d="M16 9a4 4 0 0 1 0 6M18.5 6.5a8 8 0 0 1 0 11"/>',palette:'<path d="M12 3.5c-4.7 0-8.5 3.6-8.5 8.3s3.7 8.7 8.3 8.7c1.1 0 1.8-.8 1.8-1.8 0-.5-.2-1-.5-1.3-.3-.4-.5-.8-.5-1.3 0-1 .8-1.8 1.8-1.8h2.2c2.3 0 3.9-1.7 3.9-3.9 0-4.3-3.8-6.9-8.5-6.9z"/><path d="M7.7 12.4h.01M9.2 8.3h.01M13.8 7.6h.01"/>',skip:'<path d="M5 5l7 7-7 7M13 5l7 7-7 7"/>',close:'<path d="m18 6-12 12M6 6l12 12"/>',plus:'<path d="M12 6.5v11M6.5 12h11"/>',minus:'<path d="M6.5 12h11"/>',reset:'<path d="M3.5 12a8.5 8.5 0 1 0 2.8-6.3L3.5 8.2"/><path d="M3.5 3.5v4.7h4.7"/>',search:'<circle cx="11" cy="11" r="6.5"/><path d="m15.8 15.8 4.7 4.7"/>',sort:'<path d="m8 9 4-4 4 4m-8 6 4 4 4-4"/>',sortUp:'<path d="m7 14.5 5-5 5 5"/>',sortDown:'<path d="m7 9.5 5 5 5-5"/>',chevrons:'<path d="m8 9 4-4 4 4m-8 6 4 4 4-4"/>',grid:'<rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/>',cards:'<rect x="3" y="4" width="18" height="7" rx="1.5"/><rect x="3" y="13" width="18" height="7" rx="1.5"/>',chat:'<path d="M21 11.5a8.5 8.5 0 0 1-8.5 8.5 9 9 0 0 1-4-.9L3 21l1.9-5.5a9 9 0 0 1-.9-4A8.5 8.5 0 0 1 12.5 3H13a8.5 8.5 0 0 1 8 8z"/>',mic:'<rect x="9" y="2" width="6" height="12" rx="3"/><path d="M5 10a7 7 0 0 0 14 0M12 17v5m-4 0h8"/>',stop:'<rect x="6" y="6" width="12" height="12" rx="2"/>',download:'<path d="M12 3v12m-5-5 5 5 5-5M4 21h16"/>',copy:'<rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V5a2 2 0 0 1 2-2h10"/>',filter:'<path d="M4 5h16l-6 7v6l-4 2v-8z"/>',check:'<path d="m5 12 4 4L19 6"/>',left:'<path d="m14.5 17-5-5 5-5"/>',right:'<path d="m9.5 17 5-5-5-5"/>',first:'<path d="m11.5 17-5-5 5-5M18.5 17l-5-5 5-5"/>',last:'<path d="m12.5 17 5-5-5-5M5.5 17l5-5-5-5"/>',spark:'<path d="m12 3 1.9 5.8L20 11l-6.1 2.2L12 19l-1.9-5.8L4 11l6.1-2.2zM19 14l1.2 2.8L23 18l-2.8 1.2L19 22l-1.2-2.8L15 18l2.8-1.2z"/>',alert:'<path d="m12 3 10 18H2L12 3z"/><path d="M12 9v5m0 3h.01"/>',info:'<circle cx="12" cy="12" r="9"/><path d="M12 11v6m0-9h.01"/>',form:'<rect x="5" y="3" width="14" height="18" rx="2"/><path d="M9 8h6M9 12h6M9 16h3"/>',eye:'<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/>',layout:'<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/>',wand:'<path d="m15 4 5 5L9 20H4v-5z"/><path d="m13 6 5 5"/>',undo:'<path d="M9 13.5 4.5 9 9 4.5"/><path d="M4.5 9H14a5.75 5.75 0 0 1 0 11.5h-3"/>',tools:'<path d="M14.7 6.3a4 4 0 0 0-5.4 5.4L3 18l3 3 6.3-6.3a4 4 0 0 0 5.4-5.4l-2.5 2.5-2.4-.6-.6-2.4z"/>',plug:'<path d="M9 2v6M15 2v6M6 8h12v4a6 6 0 0 1-12 0zM12 18v4"/>',home:'<path d="M3 11 12 4l9 7"/><path d="M5 10v10h5v-6h4v6h5V10"/>',menu:'<path d="M4 6h16M4 12h16M4 18h16"/>',book:'<path d="M12 6c-2-1.5-5-2-8-2v14c3 0 6 .5 8 2 2-1.5 5-2 8-2V4c-3 0-6 .5-8 2zM12 6v14"/>',calendar:'<rect x="3" y="5" width="18" height="16" rx="2"/><path d="M3 10h18M8 3v4M16 3v4M7.5 14h2M14.5 14h2M7.5 17.5h2"/>',clock:'<circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/>',person:'<circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/>',users:'<circle cx="9" cy="8" r="3.5"/><path d="M2 20a7 7 0 0 1 14 0"/><path d="M16 4.5a3.5 3.5 0 0 1 0 7M18 13.5a7 7 0 0 1 4 6.5"/>',globe:'<circle cx="12" cy="12" r="9"/><path d="M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18"/>',lamp:'<path d="M12 3c2 2.6 3 4.3 3 6a3 3 0 0 1-6 0c0-1.7 1-3.4 3-6z"/><path d="M3 14h18c0 3.5-4 6-9 6s-9-2.5-9-6z"/><path d="M12 12v2"/>',play:'<circle cx="12" cy="12" r="9"/><path d="M10 8.5v7l6-3.5z"/>',pause:'<circle cx="12" cy="12" r="9"/><path d="M10 9v6M14 9v6"/>',send:'<path d="M21 3 3 10.5l7 3 3 7.5z"/><path d="m10 13.5 4.5-4.5"/>',share:'<circle cx="18" cy="5" r="2.5"/><circle cx="6" cy="12" r="2.5"/><circle cx="18" cy="19" r="2.5"/><path d="m8.2 10.8 7.6-4.6M8.2 13.2l7.6 4.6"/>',gift:'<rect x="3" y="8" width="18" height="4" rx="1"/><path d="M5 12v9h14v-9M12 8v13M12 8C10.5 5 7 4 7 6.5S10 8 12 8zm0 0c1.5-3 5-4 5-1.5S14 8 12 8z"/>',image:'<rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="8.5" cy="9.5" r="1.5"/><path d="m21 15-5-5-10 10"/>',file:'<path d="M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"/><path d="M14 3v5h5M9 13h6M9 17h6"/>',external:'<path d="M14 4h6v6M20 4l-9 9"/><path d="M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/>',arrowUp:'<path d="M12 19V5m-6 6 6-6 6 6"/>',arrowLeft:'<path d="M19 12H5m6-6-6 6 6 6"/>',arrowRight:'<path d="M5 12h14m-6-6 6 6-6 6"/>',headphones:'<path d="M4 15v-3a8 8 0 0 1 16 0v3"/><rect x="3" y="14" width="4" height="7" rx="1.5"/><rect x="17" y="14" width="4" height="7" rx="1.5"/>',music:'<path d="M9 18V5l11-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="17" cy="16" r="3"/>',pin:'<path d="M12 21s7-6.2 7-11.5a7 7 0 0 0-14 0C5 14.8 12 21 12 21z"/><circle cx="12" cy="9.5" r="2.5"/>',map:'<path d="M3 6l6-3 6 3 6-3v15l-6 3-6-3-6 3z"/><path d="M9 3v15M15 6v15"/>',pen:'<path d="M12 3 6 9l1.5 8h9L18 9z"/><path d="M12 3v7.5"/><circle cx="12" cy="12" r="1.5"/><path d="M8.5 20.5h7"/>',wallet:'<rect x="3" y="7" width="18" height="13" rx="2"/><path d="M16 13.5h2M6 7l9-4 2 4"/>',install:'<rect x="6" y="2" width="12" height="20" rx="2"/><path d="M12 6v8m-3-3 3 3 3-3M10 18h4"/>',help:'<circle cx="12" cy="12" r="9"/><path d="M9.5 9.5a2.5 2.5 0 1 1 3.5 2.3c-.6.3-1 .9-1 1.6v.6M12 17h.01"/>',temple:'<path d="M12 2v2M10 4h4l1 3H9zM8 7h8l1.5 4h-11zM6.5 11h11L19 15H5zM4 15h16v6H4z"/><path d="M10 21v-3a2 2 0 0 1 4 0v3"/>',meditate:'<circle cx="12" cy="4.5" r="2.2"/><path d="M12 8c-2.2 0-3.3 1.3-3.7 3.2L7.5 16M12 8c2.2 0 3.3 1.3 3.7 3.2l.8 4.8"/><path d="M4 18c3 2 5.5 2.4 8 1.2 2.5 1.2 5 .8 8-1.2"/><path d="M7.5 16c1.4 1.4 3 2 4.5 2s3.1-.6 4.5-2"/>',trophy:'<path d="M8 4h8v5a4 4 0 0 1-8 0z"/><path d="M8 6H5a3 3 0 0 0 3 4M16 6h3a3 3 0 0 1-3 4M12 13v4M8 21h8M9 17h6"/>',bulb:'<path d="M9 18h6M10 21h4"/><path d="M12 3a6 6 0 0 0-4 10.5c.7.7 1 1.5 1 2.5h6c0-1 .3-1.8 1-2.5A6 6 0 0 0 12 3z"/>',sun:'<circle cx="12" cy="12" r="4"/><path d="M12 2v2.5M12 19.5V22M4.9 4.9l1.8 1.8M17.3 17.3l1.8 1.8M2 12h2.5M19.5 12H22M4.9 19.1l1.8-1.8M17.3 6.7l1.8-1.8"/>',delete:'<path d="M4 7h16M10 11v6M14 11v6M6 7l1 13a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1l1-13M9 7V4h6v3"/>',robot:'<rect x="4" y="8" width="16" height="12" rx="3"/><path d="M12 8V4M9.5 4h5M2 13v3M22 13v3"/><circle cx="9" cy="14" r="1.3"/><circle cx="15" cy="14" r="1.3"/>',heart:'<path d="M12 20s-7.5-4.6-9.2-9.3A4.9 4.9 0 0 1 12 6.6a4.9 4.9 0 0 1 9.2 4.1C19.5 15.4 12 20 12 20z"/>',heartFilled:'<path fill="currentColor" d="M12 20s-7.5-4.6-9.2-9.3A4.9 4.9 0 0 1 12 6.6a4.9 4.9 0 0 1 9.2 4.1C19.5 15.4 12 20 12 20z"/>',hub:'<circle cx="12" cy="12" r="3"/><circle cx="5" cy="5" r="2"/><circle cx="19" cy="5" r="2"/><circle cx="5" cy="19" r="2"/><circle cx="19" cy="19" r="2"/><path d="m6.5 6.5 3.4 3.4M17.5 6.5l-3.4 3.4M6.5 17.5l3.4-3.4M17.5 17.5l-3.4-3.4"/>',code:'<path d="m8 7-5 5 5 5M16 7l5 5-5 5M14 4l-4 16"/>',text:'<path d="M3 7V5h11v2M8.5 5v14M6.5 19h4M14 12v-1.5h7V12M17.5 10.5V19M16 19h3"/>',bold:'<path d="M7 4h6a4 4 0 0 1 0 8H7zM7 12h7a4 4 0 0 1 0 8H7z"/>',italic:'<path d="M10 4h9M5 20h9M15 4 9 20"/>',underline:'<path d="M7 4v7a5 5 0 0 0 10 0V4M5 21h14"/>',alignLeft:'<path d="M4 5h16M4 9.5h9M4 14h16M4 18.5h9"/>',alignCenter:'<path d="M4 5h16M7.5 9.5h9M4 14h16M7.5 18.5h9"/>',alignRight:'<path d="M4 5h16M11 9.5h9M4 14h16M11 18.5h9"/>',alignJustify:'<path d="M4 5h16M4 9.5h16M4 14h16M4 18.5h16"/>',quote:'<path d="M4 18v-6.5A6.5 6.5 0 0 1 10.5 5M4 12h5.5v6H4zM13.5 18v-6.5A6.5 6.5 0 0 1 20 5M13.5 12H19v6h-5.5z"/>',title:'<path d="M5 6V4h14v2M12 4v16M9 20h6"/>',font:'<rect x="3" y="3" width="18" height="18" rx="3"/><path d="m8 17 4-10 4 10M9.4 13.5h5.2"/>',spellcheck:'<path d="m3 14 4-10 4 10M4.6 10.5h4.8M11 17l3 3 7-7"/>',abc:'<path d="m2 16 2.5-8L7 16M3 13.5h3M9.5 8v8h2.5a2 2 0 0 0 0-4H9.5h2a2 2 0 0 0 0-4H9.5M21 9.4a3.1 3.1 0 1 0 0 5.2"/>',pageBreak:'<path d="M6 3v5h12V3M6 21v-5h12v5M3 12h3M9 12h6M18 12h3"/>',link:'<path d="M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1"/><path d="M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1"/>',style:'<rect x="3" y="3" width="7" height="18" rx="2"/><path d="m10 7.5 4.4-2.6a2 2 0 0 1 2.7.7l3.2 5.6a2 2 0 0 1-.7 2.7L10 19"/><circle cx="6.5" cy="17" r="1"/>',lock:'<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3M12 15v2"/>',unlock:'<rect x="5" y="11" width="14" height="10" rx="2"/><path d="M8 11V8a4 4 0 0 1 7.6-1.8M12 15v2"/>',key:'<circle cx="8" cy="15" r="4"/><path d="m11 12 9-9M17 6l3 3M14.5 8.5l2 2"/>',redo:'<path d="M15 13.5 19.5 9 15 4.5"/><path d="M19.5 9H10a5.75 5.75 0 0 0 0 11.5h3"/>',swap:'<path d="M7 4 3 8l4 4M3 8h14M17 12l4 4-4 4M21 16H7"/>',shuffle:'<path d="M16 3h5v5M4 20 21 3M21 16v5h-5M15 15l6 6M4 4l5 5"/>',fullscreen:'<path d="M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5"/>',fullscreenExit:'<path d="M9 4v5H4M20 9h-5V4M15 20v-5h5M4 15h5v5"/>',merge:'<circle cx="6" cy="5" r="2"/><circle cx="6" cy="19" r="2"/><circle cx="18" cy="12" r="2"/><path d="M6 7v10M6 7c0 4 4 5 10 5"/>',join:'<circle cx="9" cy="12" r="6"/><circle cx="15" cy="12" r="6"/>',touch:'<path d="M9 11V5a1.5 1.5 0 0 1 3 0v6M12 10a1.5 1.5 0 0 1 3 0v1M15 11a1.5 1.5 0 0 1 3 0v3c0 4-2.5 7-6 7-2.5 0-4-1-5.5-3.5L4.6 14a1.5 1.5 0 0 1 2.5-1.6L9 15"/>',volumeOff:'<path d="M4 9v6h4l5 4V5L8 9H4z"/><path d="m16.5 9.5 5 5M21.5 9.5l-5 5"/>',musicOff:'<path d="M9 13v5M9 7V5l11-2v9"/><circle cx="6" cy="18" r="3"/><path d="M3 3l18 18"/>',musicVideo:'<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M10.5 15V8.5l5-1V13"/><circle cx="9" cy="15" r="1.5"/><circle cx="14" cy="13" r="1.5"/>',movie:'<rect x="3" y="9" width="18" height="11" rx="2"/><path d="m3.5 9-.6-3 16.6-3.4.6 3L3.5 9zM8.5 4.8l1.8 2.9M13.8 3.7l1.8 2.9"/>',slideshow:'<rect x="3" y="4" width="18" height="13" rx="2"/><path d="M10 8v5l4-2.5zM8 21h8M12 17v4"/>',storage:'<ellipse cx="12" cy="5" rx="8" ry="3"/><path d="M4 5v14c0 1.7 3.6 3 8 3s8-1.3 8-3V5M4 12c0 1.7 3.6 3 8 3s8-1.3 8-3"/>',api:'<path d="M3 17v-6a2.5 2.5 0 0 1 5 0v6M3 14h5M11 17V7h2.5a2.5 2.5 0 0 1 0 5H11M18 7h3M19.5 7v10M18 17h3"/>',dataObject:'<path d="M8 4H7a2 2 0 0 0-2 2v4l-2 2 2 2v4a2 2 0 0 0 2 2h1M16 4h1a2 2 0 0 1 2 2v4l2 2-2 2v4a2 2 0 0 1-2 2h-1"/>',computer:'<rect x="3" y="4" width="18" height="12" rx="2"/><path d="M8 20h8M12 16v4"/>',phone:'<rect x="6" y="2" width="12" height="20" rx="2"/><path d="M10.5 18.5h3"/>',cloud:'<path d="M7 19a5 5 0 0 1-.6-10A6.5 6.5 0 0 1 18.6 9.5 4.8 4.8 0 0 1 17.5 19z"/>',wifi:'<path d="M2 9a15 15 0 0 1 20 0M5 12.5a10 10 0 0 1 14 0M8.5 16a5 5 0 0 1 7 0M12 19.5h.01"/>',wifiOff:'<path d="M2 9a15 15 0 0 1 20 0M5 12.5a10 10 0 0 1 14 0M8.5 16a5 5 0 0 1 7 0M12 19.5h.01M3 3l18 18"/>',searchOff:'<circle cx="11" cy="11" r="6.5"/><path d="m16 16 5 5M8.7 8.7l4.6 4.6M13.3 8.7l-4.6 4.6"/>',eyeOff:'<path d="M10.6 5.1A10 10 0 0 1 12 5c6.5 0 10 7 10 7a17 17 0 0 1-2.2 3.2M6.6 6.6C3.8 8.4 2 12 2 12s3.5 7 10 7a9.7 9.7 0 0 0 5.4-1.6M9.9 9.9a3 3 0 0 0 4.2 4.2M3 3l18 18"/>',bookmark:'<path d="M6 3h12v18l-6-4-6 4z"/>',school:'<path d="m2 9 10-5 10 5-10 5z"/><path d="M6 11v5c0 1.5 2.7 3 6 3s6-1.5 6-3v-5M22 9v6"/>',gavel:'<path d="m13 3.5 7.5 7.5M10 6.5l7.5 7.5M11.5 5l7 7-3 3-7-7zM10 11.5 3.5 18a1.4 1.4 0 0 0 2 2L12 13.5M13 21h8"/>',architecture:'<circle cx="12" cy="5" r="2"/><path d="M12 3V2M11 7 5.5 21M13 7l5.5 14M8 15h8"/>',brain:'<path d="M11 5.5A3 3 0 0 0 5.6 7 3 3 0 0 0 4 12a3 3 0 0 0 1.6 5A3 3 0 0 0 11 18.5zM13 5.5A3 3 0 0 1 18.4 7 3 3 0 0 1 20 12a3 3 0 0 1-1.6 5 3 3 0 0 1-5.4 1.5z"/><path d="M8 10h3M13 14h3"/>',volunteer:'<path d="M12 11s-3.5-2.2-3.5-4.6a1.8 1.8 0 0 1 3.5-.7 1.8 1.8 0 0 1 3.5.7C15.5 8.8 12 11 12 11z"/><path d="M2 15h3l3.5 1.5H13a1.5 1.5 0 0 1 0 3H9.5M5 21l1.5-1.5H14l5.5-4a1.6 1.6 0 0 0-2-2.4L14 15.6"/>',radio:'<circle cx="12" cy="12" r="9"/>',radioChecked:'<circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="4" fill="currentColor"/>',upload:'<path d="M12 15V3m-5 5 5-5 5 5M4 21h16"/>',arrowDown:'<path d="M12 5v14m-6-6 6 6 6-6"/>',factCheck:'<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M7 9h4M7 13h4M7 17h2M13.5 13l2 2 3.5-3.5"/>',imageSearch:'<path d="M13 4H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-4"/><path d="m3 17 5-5 4 4"/><circle cx="17" cy="7" r="3"/><path d="m19.2 9.2 2.3 2.3"/>',documentScanner:'<path d="M3 7V4a1 1 0 0 1 1-1h3M17 3h3a1 1 0 0 1 1 1v3M21 17v3a1 1 0 0 1-1 1h-3M7 21H4a1 1 0 0 1-1-1v-3"/><path d="M7 8h10M7 12h10M7 16h6"/>',dashboard:'<rect x="3" y="3" width="8" height="10" rx="1.5"/><rect x="13" y="3" width="8" height="6" rx="1.5"/><rect x="3" y="15" width="8" height="6" rx="1.5"/><path d="M17 13v8M13 17h8"/>',cleaning:'<path d="m20 3-7.5 7.5"/><path d="M12.5 10.5c-2.5-1.6-6-1-7.4 1.7L3 20.5c3.2 1 7.2.4 10.2-1.6l.7-5.3c-.1-1.3-.6-2.3-1.4-3.1z"/><path d="M7.5 15.5 6 20.5M10.5 15l-1 5"/>',dragHandle:'<path d="M5 9h14M5 15h14"/>',zoomIn:'<circle cx="11" cy="11" r="6.5"/><path d="m16 16 5 5M8 11h6M11 8v6"/>',zoomOut:'<circle cx="11" cy="11" r="6.5"/><path d="m16 16 5 5M8 11h6"/>',insights:'<path d="m3 18 5-5 4 3 6-7"/><path d="M15 9h3v3"/><path d="m19 2.5.7 1.8 1.8.7-1.8.7-.7 1.8-.7-1.8-1.8-.7 1.8-.7z"/>',explore:'<circle cx="12" cy="12" r="9"/><path d="m15.5 8.5-2 5-5 2 2-5z"/>',save:'<path d="M5 3h11l5 5v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"/><path d="M7 3v5h8V3M7 21v-7h10v7"/>',label:'<path d="M4 6h11l5 6-5 6H4z"/>',keyboard:'<rect x="2" y="6" width="20" height="12" rx="2"/><path d="M6 10h.01M10 10h.01M14 10h.01M18 10h.01M6 14h.01M18 14h.01M9 14h6"/>',trendingUp:'<path d="m3 17 6-6 4 4 8-8"/><path d="M15 7h6v6"/>',trendingDown:'<path d="m3 7 6 6 4-4 8 8"/><path d="M15 17h6v-6"/>',cake:'<path d="M4 21h16M5 21v-7a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v7M5 16.5c1.5 1 2.5 1 3.5 0s2.5-1 3.5 0 2.5 1 3.5 0 2.5-1 3.5 0M12 12V8.5M12 6c-.9-.9-.9-2 0-3.3.9 1.3.9 2.4 0 3.3z"/>',barChart:'<path d="M4 20h16M7 20v-6M12 20V5M17 20V10"/>',admin:'<path d="M12 3 4 6v6c0 4.5 3.4 8 8 9 4.6-1 8-4.5 8-9V6z"/><circle cx="12" cy="10" r="2.5"/><path d="M8 16.5c1-1.8 2.4-2.5 4-2.5s3 .7 4 2.5"/>',bugReport:'<rect x="7" y="8" width="10" height="12" rx="5"/><path d="M9 8.5a3 3 0 0 1 6 0M12 12v8M7 13H3M21 13h-4M7 17l-3 1.5M17 17l3 1.5M7.5 10 5 8M16.5 10 19 8"/>',sentimentSad:'<circle cx="12" cy="12" r="9"/><path d="M8 16.5c1-1.4 2.4-2 4-2s3 .6 4 2M9 9.5h.01M15 9.5h.01"/>',integration:'<rect x="5" y="4" width="14" height="17" rx="2"/><path d="M9 4V3h6v1M10 11l-2 2 2 2M14 11l2 2-2 2"/>',namaskar:'<path d="M12 5.5V15M12 5.5c-.6-1.7-2.4-2.2-3.1-.9L7.2 11.5 4.5 14.5l3 5H10l2-3.5M12 5.5c.6-1.7 2.4-2.2 3.1-.9l1.7 6.9 2.7 3-3 5H14l-2-3.5"/>',sunrise:'<path d="M3 19h18M7 19a5 5 0 0 1 10 0M12 3v6M9.5 5.5 12 3l2.5 2.5M4.9 11.9l1.4 1.4M19.1 11.9l-1.4 1.4M2 16h2M20 16h2"/>',sunset:'<path d="M3 19h18M7 19a5 5 0 0 1 10 0M12 3v6M9.5 6.5 12 9l2.5-2.5M4.9 11.9l1.4 1.4M19.1 11.9l-1.4 1.4M2 16h2M20 16h2"/>',login:'<path d="M14 4h4a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-4M10 16l4-4-4-4M14 12H3"/>',logout:'<path d="M10 4H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h4M16 16l4-4-4-4M20 12H9"/>',speed:'<path d="M4.5 18a9 9 0 1 1 15 0"/><path d="m12 14 4-5"/><circle cx="12" cy="14" r="1.2"/>',repeat:'<path d="m17 2 3 3-3 3M4 11V9a4 4 0 0 1 4-4h12M7 22l-3-3 3-3M20 13v2a4 4 0 0 1-4 4H4"/>',loader:'<path d="M12 3v3M12 18v3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M3 12h3M18 12h3M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1"/>',star:'<path d="m12 3 2.8 5.7 6.2.9-4.5 4.4 1.1 6.2L12 17.3l-5.6 2.9 1.1-6.2L3 9.6l6.2-.9z"/>',shieldCheck:'<path d="M12 3 4 6v6c0 4.5 3.4 8 8 9 4.6-1 8-4.5 8-9V6z"/><path d="m8.5 12 2.5 2.5 4.5-4.5"/>'},q=Object.keys(x);var V=3,w="#ffffff",z="#111827";function P(o,e){let c=y(o),a=y(e);return c&&a?H(c,a):null}function B(o){let e=P(w,o),c=P(z,o);return e===null||c===null||e>=c?w:z}var R=new Set;function Y(o,e){R.has(o)||(R.add(o),typeof console<"u"&&console.warn(`[yuktai icons] ${e}`))}function v(o={}){let e=o.variant==="filled"?"filled":"outline",c=o.color||"currentColor";if(e==="outline")return{variant:e,color:c,glyph:c,contrast:null};let a=o.glyphColor||B(c),r=P(a,c);return r!==null&&r<V&&Y(`${a}|${c}`,`glyph ${a} on ${c} is ${r}:1. WCAG 1.4.11 needs at least 3:1 for icons.`),{variant:e,color:c,glyph:a,contrast:r}}var k="translate(3.6 3.6) scale(0.7)",C="@media (forced-colors: active){.yi-bg{fill:CanvasText}.yi-glyph{stroke:Canvas;color:Canvas}}",u=o=>String(o).replace(/[&<>"']/g,e=>({"&":"&","<":"<",">":">",'"':""","'":"'"})[e]);function J(o,e={}){let c=x[o]??x.spark,a=e.size??20,{variant:r,color:p,glyph:i}=v(e),s=e.strokeWidth??(r==="filled"?2.4:1.9),M=`<svg xmlns="http://www.w3.org/2000/svg" ${e.label?`role="img" aria-label="${u(e.label)}"`:'aria-hidden="true"'} focusable="false" width="${u(a)}" height="${u(a)}" viewBox="0 0 24 24" fill="none" stroke-linecap="round" stroke-linejoin="round" data-variant="${r}">`;if(r==="outline")return`${M}<g stroke="${u(p)}" stroke-width="${s}">${c}</g></svg>`;let m=e.shape==="circle"?`<circle class="yi-bg" cx="12" cy="12" r="12" fill="${u(p)}"/>`:`<rect class="yi-bg" width="24" height="24" rx="6" fill="${u(p)}"/>`;return`${M}<style>${C}</style>${m}<g class="yi-glyph" color="${u(i)}" stroke="${u(i)}" stroke-width="${s}" transform="${k}">${c}</g></svg>`}import{Fragment as K,jsx as g,jsxs as j}from"react/jsx-runtime";function h({size:o=20,color:e,strokeWidth:c,label:a,variant:r,glyphColor:p,shape:i,children:s,...l}){let M=!a,m=v({variant:r,color:e,glyphColor:p,shape:i}),f=m.variant==="filled",S=c??(f?2.6:2.5);return g("svg",{xmlns:"http://www.w3.org/2000/svg",width:o,height:o,viewBox:"0 0 24 24",fill:"none",stroke:f?void 0:m.color,strokeWidth:f?void 0:S,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":M?"true":void 0,"aria-label":a,role:a?"img":void 0,focusable:"false","data-variant":m.variant,...l,children:f?j(K,{children:[g("style",{children:C}),i==="circle"?g("circle",{className:"yi-bg",cx:"12",cy:"12",r:"12",fill:m.color}):g("rect",{className:"yi-bg",width:"24",height:"24",rx:"6",fill:m.color}),g("g",{className:"yi-glyph",color:m.glyph,stroke:m.glyph,strokeWidth:S,transform:k,children:s})]}):s})}import{jsx as O,jsxs as Q}from"react/jsx-runtime";function Z(o){return Q(h,{...o,children:[O("circle",{cx:"11",cy:"11",r:"7"}),O("path",{d:"m20 20-4-4"})]})}import{jsx as N,jsxs as oo}from"react/jsx-runtime";function X(o){return oo(h,{...o,children:[N("path",{d:"M12 19V5"}),N("path",{d:"m5 12 7-7 7 7"})]})}import{jsx as T,jsxs as to}from"react/jsx-runtime";function no(o){return to(h,{...o,children:[T("path",{d:"M12 5v14"}),T("path",{d:"m5 12 7 7 7-7"})]})}import{jsx as E}from"react/jsx-runtime";function eo(o){return E(h,{...o,children:E("path",{d:"m15 18-6-6 6-6"})})}import{jsx as $}from"react/jsx-runtime";function co(o){return $(h,{...o,children:$("path",{d:"m9 18 6-6-6-6"})})}import{jsx as D}from"react/jsx-runtime";function ro(o){return D(h,{...o,children:D("path",{d:"M5 12.5 10 17.5 19.5 7"})})}import{jsx as F,jsxs as po}from"react/jsx-runtime";function ao(o){return po(h,{...o,children:[F("path",{d:"M18 6 6 18"}),F("path",{d:"m6 6 12 12"})]})}import{jsx as n}from"react/jsx-runtime";function t({name:o,...e}){let c=x[o]??x.spark;return n(h,{...e,children:n("g",{dangerouslySetInnerHTML:{__html:c}})})}var so=o=>n(t,{...o,name:"accessibility"}),io=o=>n(t,{...o,name:"contrast"}),ho=o=>n(t,{...o,name:"moon"}),lo=o=>n(t,{...o,name:"motion"}),Io=o=>n(t,{...o,name:"reading"}),mo=o=>n(t,{...o,name:"target"}),Mo=o=>n(t,{...o,name:"speaker"}),xo=o=>n(t,{...o,name:"palette"}),uo=o=>n(t,{...o,name:"skip"}),go=o=>n(t,{...o,name:"plus"}),fo=o=>n(t,{...o,name:"minus"}),yo=o=>n(t,{...o,name:"reset"}),Po=o=>n(t,{...o,name:"sort"}),vo=o=>n(t,{...o,name:"chevrons"}),bo=o=>n(t,{...o,name:"grid"}),wo=o=>n(t,{...o,name:"cards"}),ko=o=>n(t,{...o,name:"chat"}),Co=o=>n(t,{...o,name:"mic"}),So=o=>n(t,{...o,name:"stop"}),Ao=o=>n(t,{...o,name:"download"}),Lo=o=>n(t,{...o,name:"copy"}),Ho=o=>n(t,{...o,name:"filter"}),zo=o=>n(t,{...o,name:"first"}),Ro=o=>n(t,{...o,name:"last"}),Vo=o=>n(t,{...o,name:"spark"}),Bo=o=>n(t,{...o,name:"alert"}),Oo=o=>n(t,{...o,name:"info"}),No=o=>n(t,{...o,name:"form"}),To=o=>n(t,{...o,name:"eye"}),Eo=o=>n(t,{...o,name:"layout"}),$o=o=>n(t,{...o,name:"wand"}),Do=o=>n(t,{...o,name:"undo"}),Fo=o=>n(t,{...o,name:"tools"}),Go=o=>n(t,{...o,name:"plug"}),Uo=o=>n(t,{...o,name:"home"}),_o=o=>n(t,{...o,name:"menu"}),Wo=o=>n(t,{...o,name:"book"}),qo=o=>n(t,{...o,name:"calendar"}),Yo=o=>n(t,{...o,name:"clock"}),Jo=o=>n(t,{...o,name:"person"}),Ko=o=>n(t,{...o,name:"users"}),jo=o=>n(t,{...o,name:"globe"}),Zo=o=>n(t,{...o,name:"lamp"}),Qo=o=>n(t,{...o,name:"play"}),Xo=o=>n(t,{...o,name:"pause"}),on=o=>n(t,{...o,name:"send"}),nn=o=>n(t,{...o,name:"share"}),tn=o=>n(t,{...o,name:"gift"}),en=o=>n(t,{...o,name:"image"}),cn=o=>n(t,{...o,name:"file"}),rn=o=>n(t,{...o,name:"external"}),an=o=>n(t,{...o,name:"arrowUp"}),pn=o=>n(t,{...o,name:"arrowLeft"}),sn=o=>n(t,{...o,name:"arrowRight"}),hn=o=>n(t,{...o,name:"headphones"}),ln=o=>n(t,{...o,name:"music"}),In=o=>n(t,{...o,name:"pin"}),dn=o=>n(t,{...o,name:"map"}),mn=o=>n(t,{...o,name:"pen"}),Mn=o=>n(t,{...o,name:"wallet"}),xn=o=>n(t,{...o,name:"install"}),un=o=>n(t,{...o,name:"help"}),gn=o=>n(t,{...o,name:"temple"}),fn=o=>n(t,{...o,name:"meditate"}),yn=o=>n(t,{...o,name:"trophy"}),Pn=o=>n(t,{...o,name:"bulb"}),vn=o=>n(t,{...o,name:"sun"}),bn=o=>n(t,{...o,name:"delete"}),wn=o=>n(t,{...o,name:"robot"}),kn=o=>n(t,{...o,name:"heart"}),Cn=o=>n(t,{...o,name:"heartFilled"}),Sn=o=>n(t,{...o,name:"hub"}),An=o=>n(t,{...o,name:"code"}),Ln=o=>n(t,{...o,name:"text"}),Hn=o=>n(t,{...o,name:"bold"}),zn=o=>n(t,{...o,name:"italic"}),Rn=o=>n(t,{...o,name:"underline"}),Vn=o=>n(t,{...o,name:"alignLeft"}),Bn=o=>n(t,{...o,name:"alignCenter"}),On=o=>n(t,{...o,name:"alignRight"}),Nn=o=>n(t,{...o,name:"alignJustify"}),Tn=o=>n(t,{...o,name:"quote"}),En=o=>n(t,{...o,name:"title"}),$n=o=>n(t,{...o,name:"font"}),Dn=o=>n(t,{...o,name:"spellcheck"}),Fn=o=>n(t,{...o,name:"abc"}),Gn=o=>n(t,{...o,name:"pageBreak"}),Un=o=>n(t,{...o,name:"link"}),_n=o=>n(t,{...o,name:"style"}),Wn=o=>n(t,{...o,name:"lock"}),qn=o=>n(t,{...o,name:"unlock"}),Yn=o=>n(t,{...o,name:"key"}),Jn=o=>n(t,{...o,name:"redo"}),Kn=o=>n(t,{...o,name:"swap"}),jn=o=>n(t,{...o,name:"shuffle"}),Zn=o=>n(t,{...o,name:"fullscreen"}),Qn=o=>n(t,{...o,name:"fullscreenExit"}),Xn=o=>n(t,{...o,name:"merge"}),ot=o=>n(t,{...o,name:"join"}),nt=o=>n(t,{...o,name:"touch"}),tt=o=>n(t,{...o,name:"volumeOff"}),et=o=>n(t,{...o,name:"musicOff"}),ct=o=>n(t,{...o,name:"musicVideo"}),rt=o=>n(t,{...o,name:"movie"}),at=o=>n(t,{...o,name:"slideshow"}),pt=o=>n(t,{...o,name:"storage"}),st=o=>n(t,{...o,name:"api"}),it=o=>n(t,{...o,name:"dataObject"}),ht=o=>n(t,{...o,name:"computer"}),lt=o=>n(t,{...o,name:"phone"}),It=o=>n(t,{...o,name:"cloud"}),dt=o=>n(t,{...o,name:"wifi"}),mt=o=>n(t,{...o,name:"wifiOff"}),Mt=o=>n(t,{...o,name:"searchOff"}),xt=o=>n(t,{...o,name:"eyeOff"}),ut=o=>n(t,{...o,name:"bookmark"}),gt=o=>n(t,{...o,name:"school"}),ft=o=>n(t,{...o,name:"gavel"}),yt=o=>n(t,{...o,name:"architecture"}),Pt=o=>n(t,{...o,name:"brain"}),vt=o=>n(t,{...o,name:"volunteer"}),bt=o=>n(t,{...o,name:"radio"}),wt=o=>n(t,{...o,name:"radioChecked"}),kt=o=>n(t,{...o,name:"upload"}),Ct=o=>n(t,{...o,name:"arrowDown"}),St=o=>n(t,{...o,name:"factCheck"}),At=o=>n(t,{...o,name:"imageSearch"}),Lt=o=>n(t,{...o,name:"documentScanner"}),Ht=o=>n(t,{...o,name:"dashboard"}),zt=o=>n(t,{...o,name:"cleaning"}),Rt=o=>n(t,{...o,name:"dragHandle"}),Vt=o=>n(t,{...o,name:"zoomIn"}),Bt=o=>n(t,{...o,name:"zoomOut"}),Ot=o=>n(t,{...o,name:"insights"}),Nt=o=>n(t,{...o,name:"explore"}),Tt=o=>n(t,{...o,name:"save"}),Et=o=>n(t,{...o,name:"label"}),$t=o=>n(t,{...o,name:"keyboard"}),Dt=o=>n(t,{...o,name:"trendingUp"}),Ft=o=>n(t,{...o,name:"trendingDown"}),Gt=o=>n(t,{...o,name:"cake"}),Ut=o=>n(t,{...o,name:"barChart"}),_t=o=>n(t,{...o,name:"admin"}),Wt=o=>n(t,{...o,name:"bugReport"}),qt=o=>n(t,{...o,name:"sentimentSad"}),Yt=o=>n(t,{...o,name:"integration"}),Jt=o=>n(t,{...o,name:"namaskar"}),Kt=o=>n(t,{...o,name:"sunrise"}),jt=o=>n(t,{...o,name:"sunset"}),Zt=o=>n(t,{...o,name:"login"}),Qt=o=>n(t,{...o,name:"logout"}),Xt=o=>n(t,{...o,name:"speed"}),oe=o=>n(t,{...o,name:"repeat"}),ne=o=>n(t,{...o,name:"loader"}),te=o=>n(t,{...o,name:"star"}),ee=o=>n(t,{...o,name:"shieldCheck"});export{G as a,L as b,ce as c,re as d,ae as e,I as f,pe as g,se as h,ie as i,y as j,A as k,H as l,he as m,le as n,Ie as o,de as p,me as q,x as r,q as s,V as t,P as u,B as v,v as w,J as x,h as y,Z as z,X as A,no as B,eo as C,co as D,ro as E,ao as F,t as G,so as H,io as I,ho as J,lo as K,Io as L,mo as M,Mo as N,xo as O,uo as P,go as Q,fo as R,yo as S,Po as T,vo as U,bo as V,wo as W,ko as X,Co as Y,So as Z,Ao as _,Lo as $,Ho as aa,zo as ba,Ro as ca,Vo as da,Bo as ea,Oo as fa,No as ga,To as ha,Eo as ia,$o as ja,Do as ka,Fo as la,Go as ma,Uo as na,_o as oa,Wo as pa,qo as qa,Yo as ra,Jo as sa,Ko as ta,jo as ua,Zo as va,Qo as wa,Xo as xa,on as ya,nn as za,tn as Aa,en as Ba,cn as Ca,rn as Da,an as Ea,pn as Fa,sn as Ga,hn as Ha,ln as Ia,In as Ja,dn as Ka,mn as La,Mn as Ma,xn as Na,un as Oa,gn as Pa,fn as Qa,yn as Ra,Pn as Sa,vn as Ta,bn as Ua,wn as Va,kn as Wa,Cn as Xa,Sn as Ya,An as Za,Ln as _a,Hn as $a,zn as ab,Rn as bb,Vn as cb,Bn as db,On as eb,Nn as fb,Tn as gb,En as hb,$n as ib,Dn as jb,Fn as kb,Gn as lb,Un as mb,_n as nb,Wn as ob,qn as pb,Yn as qb,Jn as rb,Kn as sb,jn as tb,Zn as ub,Qn as vb,Xn as wb,ot as xb,nt as yb,tt as zb,et as Ab,ct as Bb,rt as Cb,at as Db,pt as Eb,st as Fb,it as Gb,ht as Hb,lt as Ib,It as Jb,dt as Kb,mt as Lb,Mt as Mb,xt as Nb,ut as Ob,gt as Pb,ft as Qb,yt as Rb,Pt as Sb,vt as Tb,bt as Ub,wt as Vb,kt as Wb,Ct as Xb,St as Yb,At as Zb,Lt as _b,Ht as $b,zt as ac,Rt as bc,Vt as cc,Bt as dc,Ot as ec,Nt as fc,Tt as gc,Et as hc,$t as ic,Dt as jc,Ft as kc,Gt as lc,Ut as mc,_t as nc,Wt as oc,qt as pc,Yt as qc,Jt as rc,Kt as sc,jt as tc,Zt as uc,Qt as vc,Xt as wc,oe as xc,ne as yc,te as zc,ee as Ac};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{a as o}from"./chunk-N2HHE7YH.mjs";function c(){return new Promise(t=>{let r=setTimeout(t,1500),e=new MutationObserver(()=>{clearTimeout(r),r=setTimeout(()=>{e.disconnect(),t()},500)});e.observe(document.body,{childList:!0,subtree:!0})})}function u(){let t=[],r=document.querySelectorAll("*");for(let e of r){if(e.closest("[data-yuktai-panel]"))continue;let s=e.innerText?.trim();s&&s.length>30&&t.push(s);let n=e.getAttribute("aria-label");if(n&&n.length>10&&t.push(n),(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&(e.placeholder&&t.push(e.placeholder),e.value&&t.push(e.value)),e instanceof HTMLButtonElement){let a=e.innerText||e.getAttribute("aria-label");a&&t.push(a)}}return t.join(" ").slice(0,3500)}async function g(t){if(!t.trim())return{success:!1,answer:"",error:"Please type a question."};try{let r=window,e=r.LanguageModel||r.ai?.languageModel;if(!e)return{success:!1,answer:"",error:"Gemini Nano not available."};await c();let s=u();if(!s||s.length<100)return{success:!1,answer:"",error:"Page content not readable."};let n;try{n=await e.create({systemPrompt:`Answer ONLY using page content.
|
|
2
|
+
Keep answer short (2\u20133 sentences).
|
|
3
|
+
If not found say: "I could not find that on this page."`,...o})}catch{n=await e.create({...o})}let a=`Page:
|
|
4
|
+
${s}
|
|
5
|
+
|
|
6
|
+
Q: ${t}`,i=await n.prompt(a);return n?.destroy&&n.destroy(),{success:!0,answer:i?.trim()||"No answer found."}}catch(r){return{success:!1,answer:"",error:r instanceof Error?r.message:"Error occurred"}}}async function m(t,r){if(!t.trim()||!r.trim())return{success:!1,answer:"",error:"Nothing to answer from."};try{let e=window,s=e.LanguageModel||e.ai?.languageModel;if(!s)return{success:!1,answer:"",error:"Gemini Nano not available."};let n;try{n=await s.create({systemPrompt:`Answer ONLY using page content.
|
|
7
|
+
Keep answer short (2\u20133 sentences).
|
|
8
|
+
If not found say: "I could not find that on this page."`,...o})}catch{n=await s.create({...o})}let a=await n.prompt(`Page:
|
|
9
|
+
${r.slice(0,3500)}
|
|
10
|
+
|
|
11
|
+
Q: ${t}`);return n?.destroy&&n.destroy(),{success:!0,answer:a?.trim()||"No answer found."}}catch(e){return{success:!1,answer:"",error:e instanceof Error?e.message:"Error occurred"}}}export{g as a,m as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var t={expectedInputs:[{type:"text",languages:["en"]}],expectedOutputs:[{type:"text",languages:["en"]}]},n={expectedInputLanguages:["en"],expectedContextLanguages:["en"],outputLanguage:"en"};export{t as a,n as b};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface AgentStep {
|
|
2
|
+
text: string;
|
|
3
|
+
type: "info" | "action" | "success" | "error" | "field";
|
|
4
|
+
}
|
|
5
|
+
export interface AgentResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
steps: AgentStep[];
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface FormField {
|
|
11
|
+
label: string;
|
|
12
|
+
type: string;
|
|
13
|
+
placeholder: string;
|
|
14
|
+
required: boolean;
|
|
15
|
+
element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
|
|
16
|
+
}
|
|
17
|
+
export declare function getPageText(): string;
|
|
18
|
+
export declare function scanFormFields(): FormField[];
|
|
19
|
+
export declare function highlightField(el: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement, durationMs?: number): void;
|
|
20
|
+
export declare function scrollToSection(keyword: string): boolean;
|
|
21
|
+
export declare function runAgent(task: string, engine: "gemini" | "transformers" | null, onStep: (step: AgentStep) => void): Promise<AgentResult>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface LabelResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
fixed: number;
|
|
4
|
+
elements: {
|
|
5
|
+
tag: string;
|
|
6
|
+
label: string;
|
|
7
|
+
}[];
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function checkLabellerSupport(): Promise<boolean>;
|
|
11
|
+
export declare function applySmartLabels(): Promise<LabelResult>;
|
|
12
|
+
export declare function removeSmartLabels(): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const PROMPT_LANGUAGES: {
|
|
2
|
+
readonly expectedInputs: readonly [{
|
|
3
|
+
readonly type: "text";
|
|
4
|
+
readonly languages: readonly ["en"];
|
|
5
|
+
}];
|
|
6
|
+
readonly expectedOutputs: readonly [{
|
|
7
|
+
readonly type: "text";
|
|
8
|
+
readonly languages: readonly ["en"];
|
|
9
|
+
}];
|
|
10
|
+
};
|
|
11
|
+
/** Summarizer, Writer and Rewriter: the same idea, with their option names. */
|
|
12
|
+
export declare const WRITING_LANGUAGES: {
|
|
13
|
+
readonly expectedInputLanguages: readonly ["en"];
|
|
14
|
+
readonly expectedContextLanguages: readonly ["en"];
|
|
15
|
+
readonly outputLanguage: "en";
|
|
16
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RewriteResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
original: string;
|
|
4
|
+
rewritten: string;
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function checkRewriterSupport(): Promise<boolean>;
|
|
8
|
+
export declare function rewriteText(text: string): Promise<RewriteResult>;
|
|
9
|
+
export declare function rewritePage(): Promise<{
|
|
10
|
+
fixed: number;
|
|
11
|
+
error?: string;
|
|
12
|
+
}>;
|
|
13
|
+
export declare function restorePage(): void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface SummaryResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
summary: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function checkSummarizerSupport(): Promise<boolean>;
|
|
7
|
+
export declare function summarizePage(): Promise<SummaryResult>;
|
|
8
|
+
export declare function removeSummaryBox(): void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface RagResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
answer: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function askPageWithTransformers(question: string): Promise<RagResult>;
|
|
7
|
+
export declare function answerFromContext(question: string, context: string): Promise<RagResult>;
|
|
8
|
+
export declare function isTransformersSupported(): boolean;
|
|
9
|
+
export declare function getModelLoadStatus(): "idle" | "loading" | "ready";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const SUPPORTED_LANGUAGES: {
|
|
2
|
+
code: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}[];
|
|
5
|
+
export interface TranslateResult {
|
|
6
|
+
success: boolean;
|
|
7
|
+
language: string;
|
|
8
|
+
fixed: number;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function checkTranslatorSupport(targetLanguage: string): Promise<boolean>;
|
|
12
|
+
export declare function translatePage(targetLanguage: string): Promise<TranslateResult>;
|
|
13
|
+
export declare function restoreOriginalText(): void;
|
|
14
|
+
export declare function getCurrentLanguage(): string;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
interface SpeechRecognition extends EventTarget {
|
|
2
|
+
continuous: boolean;
|
|
3
|
+
interimResults: boolean;
|
|
4
|
+
lang: string;
|
|
5
|
+
onresult: ((event: SpeechRecognitionEvent) => void) | null;
|
|
6
|
+
onend: (() => void) | null;
|
|
7
|
+
onerror: ((event: SpeechRecognitionErrorEvent) => void) | null;
|
|
8
|
+
start(): void;
|
|
9
|
+
stop(): void;
|
|
10
|
+
}
|
|
11
|
+
type SpeechRecognitionConstructor = new () => SpeechRecognition;
|
|
12
|
+
declare global {
|
|
13
|
+
interface Window {
|
|
14
|
+
SpeechRecognition?: SpeechRecognitionConstructor;
|
|
15
|
+
webkitSpeechRecognition?: SpeechRecognitionConstructor;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export interface VoiceResult {
|
|
19
|
+
success: boolean;
|
|
20
|
+
command: string;
|
|
21
|
+
action: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
type CommandCallback = (result: VoiceResult) => void;
|
|
25
|
+
export declare function checkVoiceSupport(): boolean;
|
|
26
|
+
export declare function startVoiceControl(callback?: CommandCallback): boolean;
|
|
27
|
+
export declare function stopVoiceControl(): void;
|
|
28
|
+
export declare function isVoiceActive(): boolean;
|
|
29
|
+
export declare function getVoiceCommands(): {
|
|
30
|
+
phrase: string;
|
|
31
|
+
label: string;
|
|
32
|
+
}[];
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface TemplateVars {
|
|
2
|
+
SITE_NAME: string;
|
|
3
|
+
THEME_COLOR: string;
|
|
4
|
+
TAGLINE: string;
|
|
5
|
+
YEAR: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function fill(template: string, vars: TemplateVars): string;
|
|
8
|
+
export declare const THEME_COLORS: Record<string, string>;
|
|
9
|
+
export declare const PACKAGE_JSON: (siteName: string) => string;
|
|
10
|
+
export declare const NEXT_CONFIG = "/** @type {import('next').NextConfig} */\nconst nextConfig = {\n reactStrictMode: true,\n images: { unoptimized: true },\n}\n\nmodule.exports = nextConfig\n";
|
|
11
|
+
export declare const TAILWIND_CONFIG: (themeColor: string) => string;
|
|
12
|
+
export declare const GLOBALS_CSS: (themeColor: string) => string;
|
|
13
|
+
export declare const LAYOUT_TSX = "import type { Metadata } from \"next\"\nimport \"./globals.css\"\nimport Navbar from \"@/components/Navbar\"\nimport Footer from \"@/components/Footer\"\n\nexport const metadata: Metadata = {\n title: \"{{SITE_NAME}}\",\n description: \"{{TAGLINE}}\",\n}\n\nexport default function RootLayout({\n children,\n}: {\n children: React.ReactNode\n}) {\n return (\n <html lang=\"en\">\n <body>\n <Navbar />\n <main>{children}</main>\n <Footer />\n </body>\n </html>\n )\n}\n";
|
|
14
|
+
export declare const NAVBAR_TSX = "\"use client\"\nimport Link from \"next/link\"\nimport { useState } from \"react\"\nimport styles from \"./Navbar.module.css\"\n\nexport default function Navbar() {\n const [open, setOpen] = useState(false)\n\n return (\n <nav className={styles.navbar}>\n <div className={styles.container}>\n <Link href=\"/\" className={styles.logo}>\n {{SITE_NAME}}\n </Link>\n <button\n className={styles.toggle}\n onClick={() => setOpen(!open)}\n aria-label=\"Toggle menu\"\n >\n \u2630\n </button>\n <ul className={`${styles.links} ${open ? styles.open : \"\"}`}>\n <li><Link href=\"/\">Home</Link></li>\n <li><Link href=\"/about\">About</Link></li>\n <li><Link href=\"/services\">Services</Link></li>\n <li><Link href=\"/contact\">Contact</Link></li>\n </ul>\n </div>\n </nav>\n )\n}\n";
|
|
15
|
+
export declare const NAVBAR_CSS = ".navbar {\n background: var(--primary);\n color: white;\n padding: 0 1rem;\n position: sticky;\n top: 0;\n z-index: 100;\n box-shadow: 0 2px 8px rgba(0,0,0,0.1);\n}\n\n.container {\n max-width: 1200px;\n margin: 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: 64px;\n}\n\n.logo {\n font-size: 1.25rem;\n font-weight: 700;\n color: white;\n text-decoration: none;\n}\n\n.links {\n display: flex;\n list-style: none;\n gap: 2rem;\n}\n\n.links a {\n color: rgba(255,255,255,0.9);\n text-decoration: none;\n font-size: 0.95rem;\n transition: color 0.2s;\n}\n\n.links a:hover {\n color: white;\n}\n\n.toggle {\n display: none;\n background: none;\n border: none;\n color: white;\n font-size: 1.5rem;\n cursor: pointer;\n}\n\n@media (max-width: 768px) {\n .toggle { display: block; }\n .links {\n display: none;\n position: absolute;\n top: 64px;\n left: 0;\n right: 0;\n background: var(--primary);\n flex-direction: column;\n padding: 1rem;\n gap: 1rem;\n }\n .links.open { display: flex; }\n}\n";
|
|
16
|
+
export declare const FOOTER_TSX = "import styles from \"./Footer.module.css\"\n\nexport default function Footer() {\n return (\n <footer className={styles.footer}>\n <div className={styles.container}>\n <p className={styles.brand}>{{SITE_NAME}}</p>\n <p className={styles.tagline}>{{TAGLINE}}</p>\n <p className={styles.copy}>\u00A9 {{YEAR}} {{SITE_NAME}}. All rights reserved.</p>\n </div>\n </footer>\n )\n}\n";
|
|
17
|
+
export declare const FOOTER_CSS = ".footer {\n background: #0f172a;\n color: #94a3b8;\n padding: 3rem 1rem;\n margin-top: auto;\n}\n\n.container {\n max-width: 1200px;\n margin: 0 auto;\n text-align: center;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.brand {\n font-size: 1.25rem;\n font-weight: 700;\n color: white;\n}\n\n.tagline {\n font-size: 0.9rem;\n color: #64748b;\n}\n\n.copy {\n font-size: 0.8rem;\n color: #475569;\n margin-top: 1rem;\n}\n";
|
|
18
|
+
export declare const HOME_TSX = "import styles from \"./page.module.css\"\nimport Link from \"next/link\"\n\nexport default function HomePage() {\n return (\n <div className={styles.page}>\n\n {/* Hero */}\n <section className={styles.hero}>\n <div className={styles.heroContent}>\n <h1 className={styles.heroTitle}>Welcome to {{SITE_NAME}}</h1>\n <p className={styles.heroSubtitle}>{{TAGLINE}}</p>\n <div className={styles.heroActions}>\n <Link href=\"/contact\" className={styles.btnPrimary}>Get Started</Link>\n <Link href=\"/about\" className={styles.btnSecondary}>Learn More</Link>\n </div>\n </div>\n </section>\n\n {/* Features */}\n <section className={styles.features}>\n <div className={styles.container}>\n <h2 className={styles.sectionTitle}>Why Choose Us</h2>\n <div className={styles.grid}>\n {[\n { icon: \"\u26A1\", title: \"Fast\", desc: \"Lightning fast performance on all devices\" },\n { icon: \"\uD83D\uDD12\", title: \"Secure\", desc: \"Enterprise-grade security built in\" },\n { icon: \"\uD83D\uDCF1\", title: \"Responsive\", desc: \"Works perfectly on mobile and desktop\" },\n ].map(f => (\n <div key={f.title} className={styles.card}>\n <span className={styles.icon}>{f.icon}</span>\n <h3>{f.title}</h3>\n <p>{f.desc}</p>\n </div>\n ))}\n </div>\n </div>\n </section>\n\n {/* CTA */}\n <section className={styles.cta}>\n <div className={styles.container}>\n <h2>Ready to get started?</h2>\n <p>Join thousands of happy customers today.</p>\n <Link href=\"/contact\" className={styles.btnPrimary}>Contact Us</Link>\n </div>\n </section>\n\n </div>\n )\n}\n";
|
|
19
|
+
export declare const HOME_CSS = ".page { min-height: 100vh; }\n\n.hero {\n background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);\n color: white;\n padding: 6rem 1rem;\n text-align: center;\n}\n\n.heroContent { max-width: 700px; margin: 0 auto; }\n\n.heroTitle {\n font-size: clamp(2rem, 5vw, 3.5rem);\n font-weight: 800;\n line-height: 1.1;\n margin-bottom: 1.5rem;\n}\n\n.heroSubtitle {\n font-size: 1.25rem;\n opacity: 0.9;\n margin-bottom: 2.5rem;\n line-height: 1.6;\n}\n\n.heroActions { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; }\n\n.btnPrimary {\n background: white;\n color: var(--primary);\n padding: 0.875rem 2rem;\n border-radius: 8px;\n font-weight: 700;\n font-size: 1rem;\n transition: transform 0.2s;\n display: inline-block;\n}\n\n.btnPrimary:hover { transform: translateY(-2px); }\n\n.btnSecondary {\n background: rgba(255,255,255,0.15);\n color: white;\n padding: 0.875rem 2rem;\n border-radius: 8px;\n font-weight: 600;\n font-size: 1rem;\n border: 1px solid rgba(255,255,255,0.3);\n transition: background 0.2s;\n display: inline-block;\n}\n\n.btnSecondary:hover { background: rgba(255,255,255,0.25); }\n\n.features { padding: 5rem 1rem; background: #f8fafc; }\n\n.container { max-width: 1200px; margin: 0 auto; }\n\n.sectionTitle {\n text-align: center;\n font-size: 2rem;\n font-weight: 700;\n margin-bottom: 3rem;\n color: #0f172a;\n}\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 2rem;\n}\n\n.card {\n background: white;\n padding: 2rem;\n border-radius: 12px;\n box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n text-align: center;\n}\n\n.icon { font-size: 2.5rem; display: block; margin-bottom: 1rem; }\n.card h3 { font-size: 1.1rem; font-weight: 700; margin-bottom: 0.5rem; }\n.card p { color: #64748b; font-size: 0.9rem; line-height: 1.6; }\n\n.cta {\n background: var(--primary);\n color: white;\n padding: 5rem 1rem;\n text-align: center;\n}\n\n.cta h2 { font-size: 2rem; font-weight: 800; margin-bottom: 0.75rem; }\n.cta p { font-size: 1.1rem; opacity: 0.85; margin-bottom: 2rem; }\n";
|
|
20
|
+
export declare const ABOUT_TSX = "import styles from \"./page.module.css\"\n\nexport default function AboutPage() {\n return (\n <div className={styles.page}>\n <section className={styles.hero}>\n <h1>About {{SITE_NAME}}</h1>\n <p>{{TAGLINE}}</p>\n </section>\n <section className={styles.content}>\n <div className={styles.container}>\n <div className={styles.grid}>\n <div>\n <h2>Our Story</h2>\n <p>We started with a simple mission \u2014 to provide the best experience for our customers. Built on trust, quality, and dedication, {{SITE_NAME}} has grown to serve thousands of happy customers.</p>\n <p>Our team of experts is committed to delivering excellence in everything we do. We believe in building long-term relationships with our clients.</p>\n </div>\n <div>\n <h2>Our Values</h2>\n <ul className={styles.list}>\n <li>\u2705 Customer first approach</li>\n <li>\u2705 Quality in everything</li>\n <li>\u2705 Transparent communication</li>\n <li>\u2705 Continuous improvement</li>\n <li>\u2705 Community focus</li>\n </ul>\n </div>\n </div>\n <div className={styles.stats}>\n {[\n { number: \"1000+\", label: \"Happy Customers\" },\n { number: \"5+\", label: \"Years Experience\" },\n { number: \"50+\", label: \"Team Members\" },\n { number: \"99%\", label: \"Satisfaction Rate\" },\n ].map(s => (\n <div key={s.label} className={styles.stat}>\n <span className={styles.number}>{s.number}</span>\n <span className={styles.label}>{s.label}</span>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n )\n}\n";
|
|
21
|
+
export declare const ABOUT_CSS = ".page { min-height: 100vh; }\n\n.hero {\n background: var(--primary);\n color: white;\n padding: 5rem 1rem;\n text-align: center;\n}\n\n.hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }\n.hero p { font-size: 1.1rem; opacity: 0.85; }\n\n.content { padding: 4rem 1rem; }\n\n.container { max-width: 1100px; margin: 0 auto; }\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 3rem;\n margin-bottom: 4rem;\n}\n\n.grid h2 { font-size: 1.5rem; font-weight: 700; margin-bottom: 1rem; color: var(--primary); }\n.grid p { color: #475569; line-height: 1.7; margin-bottom: 1rem; }\n\n.list { list-style: none; display: flex; flex-direction: column; gap: 0.75rem; }\n.list li { color: #475569; font-size: 0.95rem; }\n\n.stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 1.5rem;\n background: #f8fafc;\n padding: 2.5rem;\n border-radius: 16px;\n}\n\n.stat { text-align: center; }\n\n.number {\n display: block;\n font-size: 2rem;\n font-weight: 800;\n color: var(--primary);\n}\n\n.label { font-size: 0.85rem; color: #64748b; }\n";
|
|
22
|
+
export declare const CONTACT_TSX = "\"use client\"\nimport { useState } from \"react\"\nimport styles from \"./page.module.css\"\n\nexport default function ContactPage() {\n const [sent, setSent] = useState(false)\n const [form, setForm] = useState({ name: \"\", email: \"\", message: \"\" })\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n setSent(true)\n }\n\n return (\n <div className={styles.page}>\n <section className={styles.hero}>\n <h1>Contact Us</h1>\n <p>We would love to hear from you. Get in touch with our team.</p>\n </section>\n <section className={styles.content}>\n <div className={styles.container}>\n <div className={styles.grid}>\n <div className={styles.info}>\n <h2>Get in Touch</h2>\n <div className={styles.detail}>\n <span>\uD83D\uDCCD</span>\n <div>\n <strong>Address</strong>\n <p>123 Business Street, City, State 400001</p>\n </div>\n </div>\n <div className={styles.detail}>\n <span>\uD83D\uDCDE</span>\n <div>\n <strong>Phone</strong>\n <p>+91 98765 43210</p>\n </div>\n </div>\n <div className={styles.detail}>\n <span>\u2709\uFE0F</span>\n <div>\n <strong>Email</strong>\n <p>hello@{{SITE_NAME_LOWER}}.com</p>\n </div>\n </div>\n </div>\n <div className={styles.formWrap}>\n {sent ? (\n <div className={styles.success}>\n \u2705 Message sent! We will get back to you soon.\n </div>\n ) : (\n <form onSubmit={handleSubmit} className={styles.form}>\n <div className={styles.field}>\n <label htmlFor=\"name\">Full Name</label>\n <input\n id=\"name\" type=\"text\" required\n value={form.name}\n onChange={e => setForm({ ...form, name: e.target.value })}\n placeholder=\"Your name\"\n />\n </div>\n <div className={styles.field}>\n <label htmlFor=\"email\">Email Address</label>\n <input\n id=\"email\" type=\"email\" required\n value={form.email}\n onChange={e => setForm({ ...form, email: e.target.value })}\n placeholder=\"your@email.com\"\n />\n </div>\n <div className={styles.field}>\n <label htmlFor=\"message\">Message</label>\n <textarea\n id=\"message\" required rows={5}\n value={form.message}\n onChange={e => setForm({ ...form, message: e.target.value })}\n placeholder=\"How can we help you?\"\n />\n </div>\n <button type=\"submit\" className={styles.btn}>Send Message</button>\n </form>\n )}\n </div>\n </div>\n </div>\n </section>\n </div>\n )\n}\n";
|
|
23
|
+
export declare const CONTACT_CSS = ".page { min-height: 100vh; }\n\n.hero {\n background: var(--primary);\n color: white;\n padding: 5rem 1rem;\n text-align: center;\n}\n\n.hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }\n.hero p { font-size: 1.1rem; opacity: 0.85; }\n\n.content { padding: 4rem 1rem; }\n.container { max-width: 1100px; margin: 0 auto; }\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 3rem;\n}\n\n.info h2 { font-size: 1.5rem; font-weight: 700; margin-bottom: 2rem; color: var(--primary); }\n\n.detail {\n display: flex;\n gap: 1rem;\n margin-bottom: 1.5rem;\n align-items: flex-start;\n}\n\n.detail span { font-size: 1.5rem; }\n.detail strong { display: block; font-weight: 600; margin-bottom: 0.25rem; }\n.detail p { color: #64748b; font-size: 0.9rem; }\n\n.form { display: flex; flex-direction: column; gap: 1.25rem; }\n\n.field { display: flex; flex-direction: column; gap: 0.4rem; }\n\n.field label { font-size: 0.875rem; font-weight: 600; color: #374151; }\n\n.field input,\n.field textarea {\n padding: 0.75rem 1rem;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n font-size: 0.95rem;\n color: #0f172a;\n font-family: inherit;\n transition: border-color 0.2s;\n outline: none;\n}\n\n.field input:focus,\n.field textarea:focus { border-color: var(--primary); }\n\n.btn {\n background: var(--primary);\n color: white;\n padding: 0.875rem 2rem;\n border: none;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: opacity 0.2s;\n}\n\n.btn:hover { opacity: 0.9; }\n\n.success {\n padding: 2rem;\n background: #f0fdf4;\n border: 1px solid #86efac;\n border-radius: 12px;\n color: #166534;\n font-size: 1.1rem;\n text-align: center;\n}\n";
|
|
24
|
+
export declare const SERVICES_TSX = "import styles from \"./page.module.css\"\n\nconst SERVICES = [\n { icon: \"\uD83D\uDE80\", title: \"Service One\", desc: \"Comprehensive solution designed to meet your business needs efficiently and effectively.\" },\n { icon: \"\uD83D\uDCA1\", title: \"Service Two\", desc: \"Innovative approaches that help your business grow and stay ahead of the competition.\" },\n { icon: \"\uD83D\uDD27\", title: \"Service Three\", desc: \"Expert support and maintenance to ensure smooth operations at all times.\" },\n { icon: \"\uD83D\uDCCA\", title: \"Service Four\", desc: \"Data-driven insights and analytics to help you make better business decisions.\" },\n { icon: \"\uD83E\uDD1D\", title: \"Service Five\", desc: \"Partnership programs designed to create mutual value and long-term success.\" },\n { icon: \"\uD83C\uDF10\", title: \"Service Six\", desc: \"Global reach with local expertise to serve customers worldwide.\" },\n]\n\nexport default function ServicesPage() {\n return (\n <div className={styles.page}>\n <section className={styles.hero}>\n <h1>Our Services</h1>\n <p>Everything you need to succeed \u2014 all in one place</p>\n </section>\n <section className={styles.content}>\n <div className={styles.container}>\n <div className={styles.grid}>\n {SERVICES.map(s => (\n <div key={s.title} className={styles.card}>\n <span className={styles.icon}>{s.icon}</span>\n <h3>{s.title}</h3>\n <p>{s.desc}</p>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n )\n}\n";
|
|
25
|
+
export declare const SERVICES_CSS = ".page { min-height: 100vh; }\n\n.hero {\n background: var(--primary);\n color: white;\n padding: 5rem 1rem;\n text-align: center;\n}\n\n.hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }\n.hero p { font-size: 1.1rem; opacity: 0.85; }\n\n.content { padding: 4rem 1rem; background: #f8fafc; }\n.container { max-width: 1100px; margin: 0 auto; }\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1.5rem;\n}\n\n.card {\n background: white;\n padding: 2rem;\n border-radius: 12px;\n box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n transition: transform 0.2s, box-shadow 0.2s;\n}\n\n.card:hover {\n transform: translateY(-4px);\n box-shadow: 0 8px 24px rgba(0,0,0,0.1);\n}\n\n.icon { font-size: 2rem; display: block; margin-bottom: 1rem; }\n\n.card h3 {\n font-size: 1.1rem;\n font-weight: 700;\n margin-bottom: 0.5rem;\n color: #0f172a;\n}\n\n.card p { color: #64748b; font-size: 0.9rem; line-height: 1.6; }\n";
|
|
26
|
+
export declare const PRICING_TSX = "import styles from \"./page.module.css\"\nimport Link from \"next/link\"\n\nconst PLANS = [\n {\n name: \"Starter\",\n price: \"\u20B9999\",\n period: \"/month\",\n features: [\"5 Users\", \"10GB Storage\", \"Email Support\", \"Basic Analytics\"],\n cta: \"Get Started\",\n highlighted: false,\n },\n {\n name: \"Professional\",\n price: \"\u20B92,999\",\n period: \"/month\",\n features: [\"25 Users\", \"50GB Storage\", \"Priority Support\", \"Advanced Analytics\", \"API Access\"],\n cta: \"Start Free Trial\",\n highlighted: true,\n },\n {\n name: \"Enterprise\",\n price: \"Custom\",\n period: \"\",\n features: [\"Unlimited Users\", \"Unlimited Storage\", \"24/7 Support\", \"Custom Analytics\", \"Dedicated Manager\"],\n cta: \"Contact Sales\",\n highlighted: false,\n },\n]\n\nexport default function PricingPage() {\n return (\n <div className={styles.page}>\n <section className={styles.hero}>\n <h1>Simple Pricing</h1>\n <p>No hidden fees. Cancel anytime.</p>\n </section>\n <section className={styles.content}>\n <div className={styles.container}>\n <div className={styles.grid}>\n {PLANS.map(plan => (\n <div\n key={plan.name}\n className={`${styles.card} ${plan.highlighted ? styles.highlighted : \"\"}`}\n >\n {plan.highlighted && <span className={styles.badge}>Most Popular</span>}\n <h3>{plan.name}</h3>\n <div className={styles.price}>\n <span className={styles.amount}>{plan.price}</span>\n <span className={styles.period}>{plan.period}</span>\n </div>\n <ul className={styles.features}>\n {plan.features.map(f => <li key={f}>\u2705 {f}</li>)}\n </ul>\n <Link href=\"/contact\" className={styles.btn}>{plan.cta}</Link>\n </div>\n ))}\n </div>\n </div>\n </section>\n </div>\n )\n}\n";
|
|
27
|
+
export declare const PRICING_CSS = ".page { min-height: 100vh; }\n\n.hero {\n background: var(--primary);\n color: white;\n padding: 5rem 1rem;\n text-align: center;\n}\n\n.hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }\n.hero p { font-size: 1.1rem; opacity: 0.85; }\n\n.content { padding: 4rem 1rem; background: #f8fafc; }\n.container { max-width: 1100px; margin: 0 auto; }\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1.5rem;\n align-items: start;\n}\n\n.card {\n background: white;\n padding: 2rem;\n border-radius: 16px;\n box-shadow: 0 1px 4px rgba(0,0,0,0.06);\n position: relative;\n border: 2px solid transparent;\n}\n\n.highlighted {\n border-color: var(--primary);\n transform: scale(1.03);\n box-shadow: 0 8px 32px rgba(0,0,0,0.12);\n}\n\n.badge {\n position: absolute;\n top: -12px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--primary);\n color: white;\n padding: 2px 16px;\n border-radius: 99px;\n font-size: 0.75rem;\n font-weight: 700;\n white-space: nowrap;\n}\n\n.card h3 { font-size: 1.1rem; font-weight: 700; margin-bottom: 1rem; color: #0f172a; }\n\n.price { display: flex; align-items: baseline; gap: 0.25rem; margin-bottom: 1.5rem; }\n\n.amount { font-size: 2rem; font-weight: 800; color: var(--primary); }\n.period { font-size: 0.875rem; color: #64748b; }\n\n.features { list-style: none; display: flex; flex-direction: column; gap: 0.6rem; margin-bottom: 2rem; }\n.features li { font-size: 0.9rem; color: #475569; }\n\n.btn {\n display: block;\n text-align: center;\n background: var(--primary);\n color: white;\n padding: 0.75rem;\n border-radius: 8px;\n font-weight: 600;\n font-size: 0.95rem;\n transition: opacity 0.2s;\n}\n\n.btn:hover { opacity: 0.9; }\n";
|
|
28
|
+
export declare const AUTH_TSX = "\"use client\"\nimport { useState } from \"react\"\nimport styles from \"./page.module.css\"\n\nexport default function AuthPage() {\n const [mode, setMode] = useState<\"login\" | \"register\">(\"login\")\n const [form, setForm] = useState({ name: \"\", email: \"\", password: \"\" })\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n alert(mode === \"login\" ? \"Login successful!\" : \"Account created!\")\n }\n\n return (\n <div className={styles.page}>\n <div className={styles.card}>\n <h1 className={styles.title}>{{SITE_NAME}}</h1>\n <div className={styles.tabs}>\n <button\n className={`${styles.tab} ${mode === \"login\" ? styles.active : \"\"}`}\n onClick={() => setMode(\"login\")}\n >\n Login\n </button>\n <button\n className={`${styles.tab} ${mode === \"register\" ? styles.active : \"\"}`}\n onClick={() => setMode(\"register\")}\n >\n Register\n </button>\n </div>\n <form onSubmit={handleSubmit} className={styles.form}>\n {mode === \"register\" && (\n <div className={styles.field}>\n <label>Full Name</label>\n <input\n type=\"text\" required placeholder=\"Your name\"\n value={form.name}\n onChange={e => setForm({ ...form, name: e.target.value })}\n />\n </div>\n )}\n <div className={styles.field}>\n <label>Email</label>\n <input\n type=\"email\" required placeholder=\"your@email.com\"\n value={form.email}\n onChange={e => setForm({ ...form, email: e.target.value })}\n />\n </div>\n <div className={styles.field}>\n <label>Password</label>\n <input\n type=\"password\" required placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\"\n value={form.password}\n onChange={e => setForm({ ...form, password: e.target.value })}\n />\n </div>\n <button type=\"submit\" className={styles.btn}>\n {mode === \"login\" ? \"Sign In\" : \"Create Account\"}\n </button>\n </form>\n </div>\n </div>\n )\n}\n";
|
|
29
|
+
export declare const AUTH_CSS = ".page {\n min-height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f8fafc;\n padding: 2rem;\n}\n\n.card {\n background: white;\n padding: 2.5rem;\n border-radius: 16px;\n box-shadow: 0 4px 24px rgba(0,0,0,0.08);\n width: 100%;\n max-width: 420px;\n}\n\n.title {\n text-align: center;\n font-size: 1.5rem;\n font-weight: 800;\n color: var(--primary);\n margin-bottom: 1.5rem;\n}\n\n.tabs {\n display: flex;\n border-bottom: 2px solid #e2e8f0;\n margin-bottom: 1.5rem;\n}\n\n.tab {\n flex: 1;\n padding: 0.75rem;\n background: none;\n border: none;\n font-size: 0.95rem;\n font-weight: 500;\n color: #64748b;\n cursor: pointer;\n border-bottom: 2px solid transparent;\n margin-bottom: -2px;\n transition: all 0.2s;\n}\n\n.tab.active {\n color: var(--primary);\n border-bottom-color: var(--primary);\n font-weight: 700;\n}\n\n.form { display: flex; flex-direction: column; gap: 1rem; }\n\n.field { display: flex; flex-direction: column; gap: 0.4rem; }\n.field label { font-size: 0.85rem; font-weight: 600; color: #374151; }\n\n.field input {\n padding: 0.75rem 1rem;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n font-size: 0.95rem;\n outline: none;\n transition: border-color 0.2s;\n}\n\n.field input:focus { border-color: var(--primary); }\n\n.btn {\n background: var(--primary);\n color: white;\n padding: 0.875rem;\n border: none;\n border-radius: 8px;\n font-size: 1rem;\n font-weight: 700;\n cursor: pointer;\n margin-top: 0.5rem;\n transition: opacity 0.2s;\n}\n\n.btn:hover { opacity: 0.9; }\n";
|
|
30
|
+
export declare const NOT_FOUND_TSX = "import Link from \"next/link\"\n\nexport default function NotFound() {\n return (\n <div style={{ minHeight: \"100vh\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", textAlign: \"center\", padding: \"2rem\" }}>\n <div>\n <h1 style={{ fontSize: \"6rem\", fontWeight: 800, color: \"var(--primary)\", lineHeight: 1 }}>404</h1>\n <h2 style={{ fontSize: \"1.5rem\", fontWeight: 700, margin: \"1rem 0 0.5rem\" }}>Page Not Found</h2>\n <p style={{ color: \"#64748b\", marginBottom: \"2rem\" }}>The page you are looking for does not exist.</p>\n <Link href=\"/\" style={{ background: \"var(--primary)\", color: \"white\", padding: \"0.75rem 2rem\", borderRadius: \"8px\", fontWeight: 600 }}>\n Go Home\n </Link>\n </div>\n </div>\n )\n}\n";
|
|
31
|
+
export declare const TSCONFIG = "{\n \"compilerOptions\": {\n \"target\": \"es5\",\n \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck\": true,\n \"strict\": true,\n \"noEmit\": true,\n \"esModuleInterop\": true,\n \"module\": \"esnext\",\n \"moduleResolution\": \"bundler\",\n \"resolveJsonModule\": true,\n \"isolatedModules\": true,\n \"jsx\": \"preserve\",\n \"incremental\": true,\n \"plugins\": [{ \"name\": \"next\" }],\n \"paths\": { \"@/*\": [\"./src/*\"] }\n },\n \"include\": [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n \"exclude\": [\"node_modules\"]\n}\n";
|
|
32
|
+
export declare const README: (siteName: string) => string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type WebsiteType = "landing" | "ecommerce" | "hotel" | "restaurant" | "portfolio" | "blog" | "saas" | "government" | "healthcare" | "education" | "realestate" | "generic";
|
|
2
|
+
export type PageType = "home" | "about" | "contact" | "services" | "pricing" | "blog" | "auth" | "dashboard" | "gallery" | "products" | "cart" | "checkout" | "rooms" | "booking" | "menu" | "reservations" | "portfolio" | "team" | "faq" | "terms" | "privacy";
|
|
3
|
+
export type ThemeColour = "blue" | "green" | "purple" | "red" | "orange" | "teal" | "indigo" | "gray";
|
|
4
|
+
export interface ParsedRequirement {
|
|
5
|
+
siteName: string;
|
|
6
|
+
websiteType: WebsiteType;
|
|
7
|
+
pages: PageType[];
|
|
8
|
+
features: string[];
|
|
9
|
+
theme: ThemeColour;
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function parseRequirement(text: string): ParsedRequirement;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export type ColorBlindMode = "none" | "deuteranopia" | "protanopia" | "tritanopia" | "achromatopsia";
|
|
2
|
+
export type Severity = "critical" | "serious" | "moderate" | "minor";
|
|
3
|
+
export type AlertType = "success" | "error" | "info" | "warning";
|
|
4
|
+
export interface A11yConfig {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
highContrast?: boolean;
|
|
7
|
+
darkMode?: boolean;
|
|
8
|
+
reduceMotion?: boolean;
|
|
9
|
+
autoFix?: boolean;
|
|
10
|
+
fontSizeMultiplier?: number;
|
|
11
|
+
colorBlindMode?: ColorBlindMode;
|
|
12
|
+
keyboardHints?: boolean;
|
|
13
|
+
speechEnabled?: boolean;
|
|
14
|
+
showPreferencePanel?: boolean;
|
|
15
|
+
showAuditBadge?: boolean;
|
|
16
|
+
showSkipLinks?: boolean;
|
|
17
|
+
largeTargets?: boolean;
|
|
18
|
+
timeoutWarning?: number;
|
|
19
|
+
dyslexiaFont?: boolean;
|
|
20
|
+
localFont?: string;
|
|
21
|
+
plainEnglish?: boolean;
|
|
22
|
+
summarisePage?: boolean;
|
|
23
|
+
translateLanguage?: string;
|
|
24
|
+
voiceControl?: boolean;
|
|
25
|
+
smartLabels?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface A11yFix {
|
|
28
|
+
tag: string;
|
|
29
|
+
fix: string;
|
|
30
|
+
severity: Severity;
|
|
31
|
+
element: string;
|
|
32
|
+
}
|
|
33
|
+
export interface A11yReport {
|
|
34
|
+
fixed: number;
|
|
35
|
+
scanned: number;
|
|
36
|
+
renderTime: number;
|
|
37
|
+
score: number;
|
|
38
|
+
details: A11yFix[];
|
|
39
|
+
}
|
|
40
|
+
declare function speak(text: string, priority?: "polite" | "assertive"): void;
|
|
41
|
+
declare function showVisualAlert(message: string, type?: AlertType): void;
|
|
42
|
+
declare function announce(message: string, type?: AlertType, useSpeech?: boolean): void;
|
|
43
|
+
declare function trapFocus(modal: HTMLElement): void;
|
|
44
|
+
declare function handlePlainEnglish(enabled: boolean): Promise<void>;
|
|
45
|
+
declare function handleSummarisePage(enabled: boolean): Promise<void>;
|
|
46
|
+
declare function handleTranslate(language: string): Promise<void>;
|
|
47
|
+
declare function handleVoiceControl(enabled: boolean): Promise<void>;
|
|
48
|
+
declare function handleSmartLabels(enabled: boolean): Promise<void>;
|
|
49
|
+
export declare const wcagPlugin: {
|
|
50
|
+
name: string;
|
|
51
|
+
version: string;
|
|
52
|
+
observer: MutationObserver | null;
|
|
53
|
+
execute(config: A11yConfig): Promise<string>;
|
|
54
|
+
applyFixes(config: A11yConfig): A11yReport;
|
|
55
|
+
scan(): A11yReport;
|
|
56
|
+
startObserver(config: A11yConfig): void;
|
|
57
|
+
stopObserver(): void;
|
|
58
|
+
announce: typeof announce;
|
|
59
|
+
speak: typeof speak;
|
|
60
|
+
showVisualAlert: typeof showVisualAlert;
|
|
61
|
+
trapFocus: typeof trapFocus;
|
|
62
|
+
handlePlainEnglish: typeof handlePlainEnglish;
|
|
63
|
+
handleSummarisePage: typeof handleSummarisePage;
|
|
64
|
+
handleTranslate: typeof handleTranslate;
|
|
65
|
+
handleVoiceControl: typeof handleVoiceControl;
|
|
66
|
+
handleSmartLabels: typeof handleSmartLabels;
|
|
67
|
+
SUPPORTED_LANGUAGES: {
|
|
68
|
+
code: string;
|
|
69
|
+
label: string;
|
|
70
|
+
}[];
|
|
71
|
+
};
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { YuktaiGridProps } from "./types";
|
|
3
|
+
export declare function YuktaiGrid<T extends Record<string, unknown>>({ data, columns, rowKey, view, mobileBreakpoint, theme, locale, ai, search, selectable, selectedKeys, onSelectionChange, pagination, loading, highlightIds, highlightColor, autoScrollToHighlight, onRowClick, onSortChange, empty, className, inputLanguage, toolName, toolDescriptions, webmcp, onWebMCPStatusChange, onAgentResult, customRules, engine, showSearchTime, onSearchTime, }: YuktaiGridProps<T>): React.JSX.Element;
|
|
4
|
+
export default YuktaiGrid;
|