@axtec/components 0.1.8 → 0.1.10

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.
Files changed (157) hide show
  1. package/README.md +1 -0
  2. package/dist/components/AgentChat/AgentChat.d.ts +32 -0
  3. package/dist/components/AgentChat/index.d.ts +1 -0
  4. package/dist/components/AgentPanel/AgentPanel.d.ts +44 -0
  5. package/dist/components/AgentPanel/index.d.ts +1 -0
  6. package/dist/components/index.d.ts +2 -0
  7. package/dist/index.css +1 -1
  8. package/dist/index.js +161 -157
  9. package/dist/index.js.map +1 -1
  10. package/dist/index10.js +77 -99
  11. package/dist/index10.js.map +1 -1
  12. package/dist/index11.js +91 -36
  13. package/dist/index11.js.map +1 -1
  14. package/dist/index12.js +97 -75
  15. package/dist/index12.js.map +1 -1
  16. package/dist/index13.js +38 -24
  17. package/dist/index13.js.map +1 -1
  18. package/dist/index14.js +76 -16
  19. package/dist/index14.js.map +1 -1
  20. package/dist/index15.js +24 -38
  21. package/dist/index15.js.map +1 -1
  22. package/dist/index16.js +18 -72
  23. package/dist/index16.js.map +1 -1
  24. package/dist/index17.js +36 -47
  25. package/dist/index17.js.map +1 -1
  26. package/dist/index18.js +73 -13
  27. package/dist/index18.js.map +1 -1
  28. package/dist/index19.js +47 -151
  29. package/dist/index19.js.map +1 -1
  30. package/dist/index20.js +12 -17
  31. package/dist/index20.js.map +1 -1
  32. package/dist/index21.js +148 -40
  33. package/dist/index21.js.map +1 -1
  34. package/dist/index22.js +18 -50
  35. package/dist/index22.js.map +1 -1
  36. package/dist/index23.js +41 -74
  37. package/dist/index23.js.map +1 -1
  38. package/dist/index24.js +46 -216
  39. package/dist/index24.js.map +1 -1
  40. package/dist/index25.js +73 -46
  41. package/dist/index25.js.map +1 -1
  42. package/dist/index26.js +212 -70
  43. package/dist/index26.js.map +1 -1
  44. package/dist/index27.js +51 -23
  45. package/dist/index27.js.map +1 -1
  46. package/dist/index28.js +74 -74
  47. package/dist/index28.js.map +1 -1
  48. package/dist/index29.js +19 -28
  49. package/dist/index29.js.map +1 -1
  50. package/dist/index3.js +2 -2
  51. package/dist/index30.js +62 -76
  52. package/dist/index30.js.map +1 -1
  53. package/dist/index31.js +28 -55
  54. package/dist/index31.js.map +1 -1
  55. package/dist/index32.js +87 -40
  56. package/dist/index32.js.map +1 -1
  57. package/dist/index33.js +57 -45
  58. package/dist/index33.js.map +1 -1
  59. package/dist/index34.js +40 -47
  60. package/dist/index34.js.map +1 -1
  61. package/dist/index35.js +47 -27
  62. package/dist/index35.js.map +1 -1
  63. package/dist/index36.js +52 -54
  64. package/dist/index36.js.map +1 -1
  65. package/dist/index37.js +28 -49
  66. package/dist/index37.js.map +1 -1
  67. package/dist/index38.js +54 -13
  68. package/dist/index38.js.map +1 -1
  69. package/dist/index39.js +46 -79
  70. package/dist/index39.js.map +1 -1
  71. package/dist/index40.js +13 -49
  72. package/dist/index40.js.map +1 -1
  73. package/dist/index41.js +80 -17
  74. package/dist/index41.js.map +1 -1
  75. package/dist/index42.js +48 -33
  76. package/dist/index42.js.map +1 -1
  77. package/dist/index43.js +18 -17
  78. package/dist/index43.js.map +1 -1
  79. package/dist/index44.js +34 -15
  80. package/dist/index44.js.map +1 -1
  81. package/dist/index45.js +16 -89
  82. package/dist/index45.js.map +1 -1
  83. package/dist/index46.js +15 -69
  84. package/dist/index46.js.map +1 -1
  85. package/dist/index47.js +85 -116
  86. package/dist/index47.js.map +1 -1
  87. package/dist/index48.js +69 -40
  88. package/dist/index48.js.map +1 -1
  89. package/dist/index49.js +120 -42
  90. package/dist/index49.js.map +1 -1
  91. package/dist/index5.js +1 -1
  92. package/dist/index50.js +39 -55
  93. package/dist/index50.js.map +1 -1
  94. package/dist/index51.js +39 -11
  95. package/dist/index51.js.map +1 -1
  96. package/dist/index52.js +53 -62
  97. package/dist/index52.js.map +1 -1
  98. package/dist/index53.js +16 -54
  99. package/dist/index53.js.map +1 -1
  100. package/dist/index54.js +64 -36
  101. package/dist/index54.js.map +1 -1
  102. package/dist/index55.js +54 -66
  103. package/dist/index55.js.map +1 -1
  104. package/dist/index56.js +37 -22
  105. package/dist/index56.js.map +1 -1
  106. package/dist/index57.js +63 -101
  107. package/dist/index57.js.map +1 -1
  108. package/dist/index58.js +16 -67
  109. package/dist/index58.js.map +1 -1
  110. package/dist/index59.js +99 -213
  111. package/dist/index59.js.map +1 -1
  112. package/dist/index6.js +1 -1
  113. package/dist/index60.js +67 -62
  114. package/dist/index60.js.map +1 -1
  115. package/dist/index61.js +206 -224
  116. package/dist/index61.js.map +1 -1
  117. package/dist/index62.js +62 -96
  118. package/dist/index62.js.map +1 -1
  119. package/dist/index63.js +233 -33
  120. package/dist/index63.js.map +1 -1
  121. package/dist/index64.js +98 -14
  122. package/dist/index64.js.map +1 -1
  123. package/dist/index65.js +35 -59
  124. package/dist/index65.js.map +1 -1
  125. package/dist/index66.js +16 -59
  126. package/dist/index66.js.map +1 -1
  127. package/dist/index67.js +57 -72
  128. package/dist/index67.js.map +1 -1
  129. package/dist/index68.js +58 -106
  130. package/dist/index68.js.map +1 -1
  131. package/dist/index69.js +70 -43
  132. package/dist/index69.js.map +1 -1
  133. package/dist/index7.js +157 -69
  134. package/dist/index7.js.map +1 -1
  135. package/dist/index70.js +101 -40
  136. package/dist/index70.js.map +1 -1
  137. package/dist/index71.js +44 -72
  138. package/dist/index71.js.map +1 -1
  139. package/dist/index72.js +47 -53
  140. package/dist/index72.js.map +1 -1
  141. package/dist/index73.js +70 -62
  142. package/dist/index73.js.map +1 -1
  143. package/dist/index74.js +46 -28
  144. package/dist/index74.js.map +1 -1
  145. package/dist/index75.js +67 -13
  146. package/dist/index75.js.map +1 -1
  147. package/dist/index76.js +35 -2263
  148. package/dist/index76.js.map +1 -1
  149. package/dist/index77.js +17 -0
  150. package/dist/index77.js.map +1 -0
  151. package/dist/index78.js +2267 -0
  152. package/dist/index78.js.map +1 -0
  153. package/dist/index8.js +377 -70
  154. package/dist/index8.js.map +1 -1
  155. package/dist/index9.js +60 -77
  156. package/dist/index9.js.map +1 -1
  157. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index68.js","sources":["../src/components/TaskList/TaskList.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport { Panel, PanelHeader, PanelTitle, PanelAction, PanelEmptyState } from '../Panel/Panel'\nimport { Badge } from '../Badge/Badge'\n\nexport interface Task {\n id: string\n title: string\n description?: string\n dueDate?: string\n priority?: 'high' | 'medium' | 'low'\n status?: 'pending' | 'overdue' | 'completed'\n meta?: string\n}\n\nexport interface TaskListProps {\n tasks: Task[]\n title?: string\n onTaskClick?: (task: Task) => void\n onViewAll?: () => void\n onAddTask?: () => void\n maxTasks?: number\n emptyMessage?: string\n className?: string\n}\n\nconst formatDueDate = (dateString?: string) => {\n if (!dateString) return null\n const date = new Date(dateString)\n const now = new Date()\n const diffDays = Math.ceil((date.getTime() - now.getTime()) / (1000 * 60 * 60 * 24))\n\n if (diffDays < 0) {\n return { text: `Overdue by ${Math.abs(diffDays)} days`, isOverdue: true }\n } else if (diffDays === 0) {\n return { text: 'Due today', isOverdue: true }\n } else if (diffDays === 1) {\n return { text: 'Due tomorrow', isOverdue: false }\n } else if (diffDays <= 7) {\n return { text: `Due in ${diffDays} days`, isOverdue: false }\n } else {\n return { text: `Due ${date.toLocaleDateString()}`, isOverdue: false }\n }\n}\n\nexport const TaskList = ({\n tasks,\n title = 'Tasks',\n onTaskClick,\n onViewAll,\n onAddTask,\n maxTasks = 5,\n emptyMessage = \"No tasks to display.\",\n className,\n}: TaskListProps) => {\n // Sort tasks: overdue first, then by priority, then by due date\n const sortedTasks = [...tasks]\n .filter((t) => t.status !== 'completed')\n .sort((a, b) => {\n if (a.status === 'overdue' && b.status !== 'overdue') return -1\n if (a.status !== 'overdue' && b.status === 'overdue') return 1\n if (a.priority === 'high' && b.priority !== 'high') return -1\n if (a.priority !== 'high' && b.priority === 'high') return 1\n if (a.dueDate && b.dueDate) {\n return new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime()\n }\n return 0\n })\n .slice(0, maxTasks)\n\n const overdueCount = tasks.filter((t) => t.status === 'overdue').length\n\n return (\n <Panel className={className}>\n <PanelHeader>\n <PanelTitle\n badge={\n overdueCount > 0 ? (\n <Badge variant=\"danger\" size=\"sm\">\n {overdueCount} overdue\n </Badge>\n ) : undefined\n }\n >\n {title}\n </PanelTitle>\n {onAddTask && (\n <PanelAction onClick={onAddTask}>\n + Add Task\n </PanelAction>\n )}\n </PanelHeader>\n\n {sortedTasks.length === 0 ? (\n <PanelEmptyState message={emptyMessage} />\n ) : (\n <div className=\"flex flex-col gap-3\">\n {sortedTasks.map((task) => {\n const dueInfo = formatDueDate(task.dueDate)\n return (\n <div\n key={task.id}\n className={cn(\n 'flex items-start p-4',\n 'bg-white border border-slate-200 rounded-xl',\n 'transition-colors hover:bg-slate-50',\n onTaskClick && 'cursor-pointer'\n )}\n onClick={() => onTaskClick?.(task)}\n >\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"text-sm font-semibold text-slate-900 m-0 mb-1\">\n {task.title}\n </h4>\n {task.description && (\n <p className=\"text-sm text-slate-500 m-0 mb-2 truncate\">\n {task.description}\n </p>\n )}\n <div className=\"flex items-center gap-2 flex-wrap\">\n {dueInfo && (\n <span\n className={cn(\n 'text-xs',\n dueInfo.isOverdue ? 'text-red-500 font-semibold' : 'text-slate-500'\n )}\n >\n {dueInfo.text}\n </span>\n )}\n {task.meta && (\n <>\n {dueInfo && <span className=\"text-slate-300\">•</span>}\n <span className=\"text-xs text-slate-500\">\n {task.meta}\n </span>\n </>\n )}\n {task.priority === 'high' && (\n <Badge variant=\"warning\" size=\"sm\">\n High Priority\n </Badge>\n )}\n </div>\n </div>\n {onTaskClick && (\n <button\n className={cn(\n 'px-3 py-1.5 ml-3 flex-shrink-0',\n 'bg-white border border-slate-200 rounded-lg',\n 'text-xs font-medium text-slate-700',\n 'transition-colors hover:bg-slate-100 hover:border-slate-300'\n )}\n onClick={(e) => {\n e.stopPropagation()\n onTaskClick(task)\n }}\n >\n View\n </button>\n )}\n </div>\n )\n })}\n\n {tasks.length > maxTasks && onViewAll && (\n <button\n onClick={onViewAll}\n className={cn(\n 'w-full p-3 mt-2',\n 'bg-transparent border border-dashed border-slate-200 rounded-xl',\n 'text-sm text-slate-500',\n 'transition-colors hover:border-slate-400 hover:text-slate-700'\n )}\n >\n View all {tasks.length} tasks\n </button>\n )}\n </div>\n )}\n </Panel>\n )\n}\n"],"names":["formatDueDate","dateString","date","now","diffDays","TaskList","tasks","title","onTaskClick","onViewAll","onAddTask","maxTasks","emptyMessage","className","sortedTasks","t","a","b","overdueCount","jsxs","Panel","PanelHeader","jsx","PanelTitle","Badge","PanelAction","PanelEmptyState","task","dueInfo","cn","Fragment","e"],"mappings":"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"}
1
+ {"version":3,"file":"index68.js","sources":["../src/components/Table/Table.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport type { ReactNode } from 'react'\n\nexport interface TableColumn<T> {\n key: string\n header: string\n render?: (item: T, index: number) => ReactNode\n className?: string\n headerClassName?: string\n}\n\nexport interface TableProps<T> {\n columns: TableColumn<T>[]\n data: T[]\n keyExtractor: (item: T, index: number) => string | number\n striped?: boolean\n hoverable?: boolean\n compact?: boolean\n className?: string\n emptyMessage?: string\n}\n\nexport function Table<T>({\n columns,\n data,\n keyExtractor,\n striped = false,\n hoverable = true,\n compact = false,\n className,\n emptyMessage = 'No data available',\n}: TableProps<T>) {\n return (\n <div className={cn('overflow-x-auto', className)}>\n <table className=\"w-full text-left\">\n <thead>\n <tr className=\"border-b border-slate-200 bg-slate-50\">\n {columns.map((column) => (\n <th\n key={column.key}\n className={cn(\n 'font-semibold text-slate-700 text-sm',\n compact ? 'px-4 py-2' : 'px-6 py-3',\n column.headerClassName\n )}\n >\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length}\n className={cn(\n 'text-center text-slate-500',\n compact ? 'px-4 py-8' : 'px-6 py-12'\n )}\n >\n {emptyMessage}\n </td>\n </tr>\n ) : (\n data.map((item, index) => (\n <tr\n key={keyExtractor(item, index)}\n className={cn(\n 'border-b border-slate-100 transition-colors duration-150',\n striped && index % 2 === 1 && 'bg-slate-50',\n hoverable && 'hover:bg-slate-50'\n )}\n >\n {columns.map((column) => (\n <td\n key={column.key}\n className={cn(\n 'text-slate-900',\n compact ? 'px-4 py-2' : 'px-6 py-4',\n column.className\n )}\n >\n {column.render\n ? column.render(item, index)\n : (item as Record<string, unknown>)[column.key] as ReactNode}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n )\n}\n"],"names":["Table","columns","data","keyExtractor","striped","hoverable","compact","className","emptyMessage","jsx","cn","jsxs","column","item","index"],"mappings":";;AAsBO,SAASA,EAAS;AAAA,EACvB,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,cAAAC,IAAe;AACjB,GAAkB;AAChB,SACE,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAG,mBAAmBH,CAAS,GAC7C,UAAA,gBAAAI,EAAC,SAAA,EAAM,WAAU,oBACf,UAAA;AAAA,IAAA,gBAAAF,EAAC,SAAA,EACC,4BAAC,MAAA,EAAG,WAAU,yCACX,UAAAR,EAAQ,IAAI,CAACW,MACZ,gBAAAH;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWC;AAAA,UACT;AAAA,UACAJ,IAAU,cAAc;AAAA,UACxBM,EAAO;AAAA,QAAA;AAAA,QAGR,UAAAA,EAAO;AAAA,MAAA;AAAA,MAPHA,EAAO;AAAA,IAAA,CASf,GACH,EAAA,CACF;AAAA,sBACC,SAAA,EACE,UAAAV,EAAK,WAAW,sBACd,MAAA,EACC,UAAA,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASR,EAAQ;AAAA,QACjB,WAAWS;AAAA,UACT;AAAA,UACAJ,IAAU,cAAc;AAAA,QAAA;AAAA,QAGzB,UAAAE;AAAA,MAAA;AAAA,IAAA,GAEL,IAEAN,EAAK,IAAI,CAACW,GAAMC,MACd,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWC;AAAA,UACT;AAAA,UACAN,KAAWU,IAAQ,MAAM,KAAK;AAAA,UAC9BT,KAAa;AAAA,QAAA;AAAA,QAGd,UAAAJ,EAAQ,IAAI,CAACW,MACZ,gBAAAH;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAWC;AAAA,cACT;AAAA,cACAJ,IAAU,cAAc;AAAA,cACxBM,EAAO;AAAA,YAAA;AAAA,YAGR,UAAAA,EAAO,SACJA,EAAO,OAAOC,GAAMC,CAAK,IACxBD,EAAiCD,EAAO,GAAG;AAAA,UAAA;AAAA,UAT3CA,EAAO;AAAA,QAAA,CAWf;AAAA,MAAA;AAAA,MApBIT,EAAaU,GAAMC,CAAK;AAAA,IAAA,CAsBhC,EAAA,CAEL;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
package/dist/index69.js CHANGED
@@ -1,51 +1,78 @@
1
- import { jsx as a } from "react/jsx-runtime";
2
- import { cn as r } from "./index3.js";
3
- const d = {
4
- body: "text-base",
5
- "body-sm": "text-sm",
6
- caption: "text-xs",
7
- lead: "text-lg",
8
- h1: "text-5xl font-light tracking-tight",
9
- h2: "text-2xl font-semibold",
10
- h3: "text-lg font-semibold"
11
- }, i = {
12
- h1: "h1",
13
- h2: "h2",
14
- h3: "h3"
15
- }, x = {
16
- default: "text-slate-900",
17
- muted: "text-slate-500",
18
- primary: "text-primary-600",
19
- danger: "text-red-600"
20
- }, f = {
21
- normal: "font-normal",
22
- medium: "font-medium",
23
- semibold: "font-semibold",
24
- bold: "font-bold"
25
- };
26
- function b({
27
- children: e,
28
- variant: t = "body",
29
- color: o = "default",
30
- weight: l = "normal",
31
- as: n,
32
- className: m
1
+ import { jsxs as c, jsx as s } from "react/jsx-runtime";
2
+ import { useState as u } from "react";
3
+ import { TabGroup as f, TabList as m, Tab as x, TabPanels as g, TabPanel as h } from "@headlessui/react";
4
+ import { cn as a } from "./index3.js";
5
+ function j({
6
+ items: t,
7
+ defaultIndex: i = 0,
8
+ onChange: l,
9
+ variant: r = "underline",
10
+ fullWidth: d = !1,
11
+ className: n
33
12
  }) {
34
- const s = n || i[t] || "p";
35
- return /* @__PURE__ */ a(
36
- s,
13
+ const [b, p] = u(i);
14
+ return /* @__PURE__ */ c(
15
+ f,
37
16
  {
38
- className: r(
39
- d[t],
40
- x[o],
41
- f[l],
42
- m
43
- ),
44
- children: e
17
+ selectedIndex: b,
18
+ onChange: (e) => {
19
+ p(e), l == null || l(e);
20
+ },
21
+ className: n,
22
+ children: [
23
+ /* @__PURE__ */ s(
24
+ m,
25
+ {
26
+ className: a(
27
+ "flex",
28
+ r === "underline" && "border-b border-slate-200 gap-0",
29
+ r === "pills" && "gap-2",
30
+ r === "boxed" && "bg-slate-100 p-1 rounded-lg gap-1"
31
+ ),
32
+ children: t.map((e) => /* @__PURE__ */ s(
33
+ x,
34
+ {
35
+ disabled: e.disabled,
36
+ className: ({ selected: o }) => a(
37
+ "font-medium text-sm transition-colors duration-200",
38
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2",
39
+ d && "flex-1",
40
+ e.disabled && "opacity-50 cursor-not-allowed",
41
+ // Underline variant
42
+ r === "underline" && [
43
+ "px-4 py-3 -mb-px border-b-2",
44
+ o ? "border-primary-500 text-primary-600" : "border-transparent text-slate-500 hover:text-slate-700 hover:border-slate-300"
45
+ ],
46
+ // Pills variant
47
+ r === "pills" && [
48
+ "px-4 py-2 rounded-lg",
49
+ o ? "bg-primary-500 text-white" : "text-slate-600 hover:bg-slate-100"
50
+ ],
51
+ // Boxed variant
52
+ r === "boxed" && [
53
+ "px-4 py-2 rounded-md",
54
+ o ? "bg-white text-slate-900 shadow-sm" : "text-slate-600 hover:text-slate-900"
55
+ ]
56
+ ),
57
+ children: e.label
58
+ },
59
+ e.key
60
+ ))
61
+ }
62
+ ),
63
+ /* @__PURE__ */ s(g, { className: "mt-4", children: t.map((e) => /* @__PURE__ */ s(
64
+ h,
65
+ {
66
+ className: "focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 rounded-lg",
67
+ children: e.content
68
+ },
69
+ e.key
70
+ )) })
71
+ ]
45
72
  }
46
73
  );
47
74
  }
48
75
  export {
49
- b as Text
76
+ j as Tabs
50
77
  };
51
78
  //# sourceMappingURL=index69.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index69.js","sources":["../src/components/Typography/Text.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport type { ReactNode, ElementType } from 'react'\n\nexport interface TextProps {\n children: ReactNode\n variant?: 'body' | 'body-sm' | 'caption' | 'lead' | 'h1' | 'h2' | 'h3'\n color?: 'default' | 'muted' | 'primary' | 'danger'\n weight?: 'normal' | 'medium' | 'semibold' | 'bold'\n as?: ElementType\n className?: string\n}\n\nconst variantStyles = {\n body: 'text-base',\n 'body-sm': 'text-sm',\n caption: 'text-xs',\n lead: 'text-lg',\n h1: 'text-5xl font-light tracking-tight',\n h2: 'text-2xl font-semibold',\n h3: 'text-lg font-semibold',\n}\n\nconst variantDefaults: Partial<Record<TextProps['variant'] & string, ElementType>> = {\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n}\n\nconst colorStyles = {\n default: 'text-slate-900',\n muted: 'text-slate-500',\n primary: 'text-primary-600',\n danger: 'text-red-600',\n}\n\nconst weightStyles = {\n normal: 'font-normal',\n medium: 'font-medium',\n semibold: 'font-semibold',\n bold: 'font-bold',\n}\n\nexport function Text({\n children,\n variant = 'body',\n color = 'default',\n weight = 'normal',\n as,\n className,\n}: TextProps) {\n const Component = as || variantDefaults[variant!] || 'p'\n return (\n <Component\n className={cn(\n variantStyles[variant],\n colorStyles[color],\n weightStyles[weight],\n className\n )}\n >\n {children}\n </Component>\n )\n}\n"],"names":["variantStyles","variantDefaults","colorStyles","weightStyles","Text","children","variant","color","weight","as","className","Component","jsx","cn"],"mappings":";;AAYA,MAAMA,IAAgB;AAAA,EACpB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAA+E;AAAA,EACnF,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAc;AAAA,EAClB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AACV,GAEMC,IAAe;AAAA,EACnB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AACR;AAEO,SAASC,EAAK;AAAA,EACnB,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,IAAAC;AAAA,EACA,WAAAC;AACF,GAAc;AACZ,QAAMC,IAAYF,KAAMR,EAAgBK,CAAQ,KAAK;AACrD,SACE,gBAAAM;AAAA,IAACD;AAAA,IAAA;AAAA,MACC,WAAWE;AAAA,QACTb,EAAcM,CAAO;AAAA,QACrBJ,EAAYK,CAAK;AAAA,QACjBJ,EAAaK,CAAM;AAAA,QACnBE;AAAA,MAAA;AAAA,MAGD,UAAAL;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"index69.js","sources":["../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { Tab, TabGroup, TabList, TabPanel, TabPanels } from '@headlessui/react'\nimport { cn } from '@/lib/utils'\nimport type { ReactNode } from 'react'\n\nexport interface TabItem {\n key: string\n label: string\n content: ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps {\n items: TabItem[]\n defaultIndex?: number\n onChange?: (index: number) => void\n variant?: 'underline' | 'pills' | 'boxed'\n fullWidth?: boolean\n className?: string\n}\n\nexport function Tabs({\n items,\n defaultIndex = 0,\n onChange,\n variant = 'underline',\n fullWidth = false,\n className,\n}: TabsProps) {\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex)\n\n const handleChange = (index: number) => {\n setSelectedIndex(index)\n onChange?.(index)\n }\n\n return (\n <TabGroup\n selectedIndex={selectedIndex}\n onChange={handleChange}\n className={className}\n >\n <TabList\n className={cn(\n 'flex',\n variant === 'underline' && 'border-b border-slate-200 gap-0',\n variant === 'pills' && 'gap-2',\n variant === 'boxed' && 'bg-slate-100 p-1 rounded-lg gap-1'\n )}\n >\n {items.map((item) => (\n <Tab\n key={item.key}\n disabled={item.disabled}\n className={({ selected }) =>\n cn(\n 'font-medium text-sm transition-colors duration-200',\n 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2',\n fullWidth && 'flex-1',\n item.disabled && 'opacity-50 cursor-not-allowed',\n\n // Underline variant\n variant === 'underline' && [\n 'px-4 py-3 -mb-px border-b-2',\n selected\n ? 'border-primary-500 text-primary-600'\n : 'border-transparent text-slate-500 hover:text-slate-700 hover:border-slate-300',\n ],\n\n // Pills variant\n variant === 'pills' && [\n 'px-4 py-2 rounded-lg',\n selected\n ? 'bg-primary-500 text-white'\n : 'text-slate-600 hover:bg-slate-100',\n ],\n\n // Boxed variant\n variant === 'boxed' && [\n 'px-4 py-2 rounded-md',\n selected\n ? 'bg-white text-slate-900 shadow-sm'\n : 'text-slate-600 hover:text-slate-900',\n ]\n )\n }\n >\n {item.label}\n </Tab>\n ))}\n </TabList>\n <TabPanels className=\"mt-4\">\n {items.map((item) => (\n <TabPanel\n key={item.key}\n className=\"focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 rounded-lg\"\n >\n {item.content}\n </TabPanel>\n ))}\n </TabPanels>\n </TabGroup>\n )\n}\n"],"names":["Tabs","items","defaultIndex","onChange","variant","fullWidth","className","selectedIndex","setSelectedIndex","useState","jsxs","TabGroup","index","jsx","TabList","cn","item","Tab","selected","TabPanels","TabPanel"],"mappings":";;;;AAqBO,SAASA,EAAK;AAAA,EACnB,OAAAC;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,WAAAC,IAAY;AAAA,EACZ,WAAAC;AACF,GAAc;AACZ,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAASP,CAAY;AAO/D,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,eAAAJ;AAAA,MACA,UARiB,CAACK,MAAkB;AACtC,QAAAJ,EAAiBI,CAAK,GACtBT,KAAA,QAAAA,EAAWS;AAAA,MACb;AAAA,MAMI,WAAAN;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAO;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACAX,MAAY,eAAe;AAAA,cAC3BA,MAAY,WAAW;AAAA,cACvBA,MAAY,WAAW;AAAA,YAAA;AAAA,YAGxB,UAAAH,EAAM,IAAI,CAACe,MACV,gBAAAH;AAAA,cAACI;AAAA,cAAA;AAAA,gBAEC,UAAUD,EAAK;AAAA,gBACf,WAAW,CAAC,EAAE,UAAAE,EAAA,MACZH;AAAA,kBACE;AAAA,kBACA;AAAA,kBACAV,KAAa;AAAA,kBACbW,EAAK,YAAY;AAAA;AAAA,kBAGjBZ,MAAY,eAAe;AAAA,oBACzB;AAAA,oBACAc,IACI,wCACA;AAAA,kBAAA;AAAA;AAAA,kBAINd,MAAY,WAAW;AAAA,oBACrB;AAAA,oBACAc,IACI,8BACA;AAAA,kBAAA;AAAA;AAAA,kBAINd,MAAY,WAAW;AAAA,oBACrB;AAAA,oBACAc,IACI,sCACA;AAAA,kBAAA;AAAA,gBACN;AAAA,gBAIH,UAAAF,EAAK;AAAA,cAAA;AAAA,cAnCDA,EAAK;AAAA,YAAA,CAqCb;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEFG,GAAA,EAAU,WAAU,QAClB,UAAAlB,EAAM,IAAI,CAACe,MACV,gBAAAH;AAAA,UAACO;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAET,UAAAJ,EAAK;AAAA,UAAA;AAAA,UAHDA,EAAK;AAAA,QAAA,CAKb,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
package/dist/index7.js CHANGED
@@ -1,80 +1,168 @@
1
- import { jsxs as r, jsx as t } from "react/jsx-runtime";
2
- import { cn as e } from "./index3.js";
3
- import { InformationCircleIcon as m, ExclamationTriangleIcon as d, ExclamationCircleIcon as x, CheckCircleIcon as b, XMarkIcon as f } from "@heroicons/react/20/solid";
4
- const g = {
5
- success: {
6
- container: "bg-green-50 border-green-200",
7
- icon: "text-green-500",
8
- title: "text-green-800",
9
- content: "text-green-700"
10
- },
11
- error: {
12
- container: "bg-red-50 border-red-200",
13
- icon: "text-red-500",
14
- title: "text-red-800",
15
- content: "text-red-700"
16
- },
17
- warning: {
18
- container: "bg-yellow-50 border-yellow-200",
19
- icon: "text-yellow-500",
20
- title: "text-yellow-800",
21
- content: "text-yellow-700"
22
- },
23
- info: {
24
- container: "bg-blue-50 border-blue-200",
25
- icon: "text-blue-500",
26
- title: "text-blue-800",
27
- content: "text-blue-700"
28
- }
29
- }, u = {
30
- success: b,
31
- error: x,
32
- warning: d,
33
- info: m
34
- };
35
- function y({
36
- variant: c = "info",
37
- title: o,
38
- children: l,
39
- onClose: i,
40
- className: s
1
+ import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
+ import { useState as b, useRef as y, useEffect as w } from "react";
3
+ import { Transition as E } from "@headlessui/react";
4
+ import { SparklesIcon as g, XMarkIcon as v, PaperAirplaneIcon as K, ChatBubbleLeftRightIcon as V } from "@heroicons/react/24/outline";
5
+ import { cn as s } from "./index3.js";
6
+ function O({
7
+ title: N = "AI Assistant",
8
+ subtitle: j = "Ask me anything",
9
+ messages: n = [],
10
+ onSendMessage: o,
11
+ isTyping: m = !1,
12
+ placeholder: I = "Type a message...",
13
+ buttonIcon: k,
14
+ open: D,
15
+ onOpenChange: c,
16
+ position: d = "bottom-right",
17
+ className: A
41
18
  }) {
42
- const n = g[c], a = u[c];
43
- return /* @__PURE__ */ r(
44
- "div",
45
- {
46
- className: e(
47
- "flex gap-3 p-4 rounded-lg border",
48
- n.container,
49
- s
50
- ),
51
- role: "alert",
52
- children: [
53
- /* @__PURE__ */ t(a, { className: e("h-5 w-5 flex-shrink-0 mt-0.5", n.icon) }),
54
- /* @__PURE__ */ r("div", { className: "flex-1 min-w-0", children: [
55
- o && /* @__PURE__ */ t("h3", { className: e("text-sm font-semibold", n.title), children: o }),
56
- l && /* @__PURE__ */ t("div", { className: e("text-sm", n.content, o && "mt-1"), children: l })
57
- ] }),
58
- i && /* @__PURE__ */ r(
59
- "button",
19
+ const [R, T] = b(!1), [l, h] = b(""), u = y(null), f = y(null), a = D ?? R, x = (t) => {
20
+ T(t), c == null || c(t);
21
+ };
22
+ w(() => {
23
+ var t;
24
+ (t = u.current) == null || t.scrollIntoView({ behavior: "smooth" });
25
+ }, [n, m]), w(() => {
26
+ a && setTimeout(() => {
27
+ var t;
28
+ return (t = f.current) == null ? void 0 : t.focus();
29
+ }, 300);
30
+ }, [a]);
31
+ const p = () => {
32
+ const t = l.trim();
33
+ t && (o == null || o(t), h(""));
34
+ }, $ = (t) => {
35
+ t.key === "Enter" && !t.shiftKey && (t.preventDefault(), p());
36
+ }, C = d === "bottom-right" ? "right-5 bottom-5" : "left-5 bottom-5", i = d === "bottom-right" ? "origin-bottom-right" : "origin-bottom-left";
37
+ return /* @__PURE__ */ r("div", { className: s("fixed z-50", C, A), children: [
38
+ /* @__PURE__ */ e(
39
+ E,
40
+ {
41
+ show: a,
42
+ enter: "transition ease-out duration-200",
43
+ enterFrom: `opacity-0 scale-95 ${i}`,
44
+ enterTo: `opacity-100 scale-100 ${i}`,
45
+ leave: "transition ease-in duration-150",
46
+ leaveFrom: `opacity-100 scale-100 ${i}`,
47
+ leaveTo: `opacity-0 scale-95 ${i}`,
48
+ children: /* @__PURE__ */ r(
49
+ "div",
60
50
  {
61
- type: "button",
62
- onClick: i,
63
- className: e(
64
- "flex-shrink-0 p-1 rounded-lg transition-colors duration-200",
65
- "hover:bg-black/5 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-slate-500"
51
+ className: s(
52
+ "absolute bottom-16 w-[360px] rounded-2xl shadow-2xl",
53
+ "border border-slate-200 bg-white",
54
+ "flex flex-col overflow-hidden",
55
+ d === "bottom-right" ? "right-0" : "left-0"
66
56
  ),
57
+ style: { height: "480px" },
67
58
  children: [
68
- /* @__PURE__ */ t(f, { className: e("h-5 w-5", n.icon) }),
69
- /* @__PURE__ */ t("span", { className: "sr-only", children: "Dismiss" })
59
+ /* @__PURE__ */ r("div", { className: "bg-primary-600 px-5 py-4 flex items-center justify-between flex-shrink-0", children: [
60
+ /* @__PURE__ */ r("div", { className: "flex items-center gap-3", children: [
61
+ /* @__PURE__ */ e("div", { className: "w-8 h-8 rounded-lg bg-white/20 flex items-center justify-center", children: /* @__PURE__ */ e(g, { className: "w-4.5 h-4.5 text-white" }) }),
62
+ /* @__PURE__ */ r("div", { children: [
63
+ /* @__PURE__ */ e("h3", { className: "text-sm font-semibold text-white leading-tight", children: N }),
64
+ /* @__PURE__ */ e("p", { className: "text-xs text-white/70", children: j })
65
+ ] })
66
+ ] }),
67
+ /* @__PURE__ */ e(
68
+ "button",
69
+ {
70
+ type: "button",
71
+ onClick: () => x(!1),
72
+ className: "p-1 rounded-lg text-white/70 hover:text-white hover:bg-white/10 transition-colors",
73
+ children: /* @__PURE__ */ e(v, { className: "w-5 h-5" })
74
+ }
75
+ )
76
+ ] }),
77
+ /* @__PURE__ */ r("div", { className: "flex-1 overflow-y-auto px-4 py-4 space-y-3", children: [
78
+ n.length === 0 && /* @__PURE__ */ r("div", { className: "flex flex-col items-center justify-center h-full text-center px-6", children: [
79
+ /* @__PURE__ */ e("div", { className: "w-12 h-12 rounded-2xl bg-primary-50 flex items-center justify-center mb-3", children: /* @__PURE__ */ e(g, { className: "w-6 h-6 text-primary-500" }) }),
80
+ /* @__PURE__ */ e("p", { className: "text-sm font-medium text-slate-700", children: "How can I help?" }),
81
+ /* @__PURE__ */ e("p", { className: "text-xs text-slate-400 mt-1", children: "Send a message to get started" })
82
+ ] }),
83
+ n.map((t) => /* @__PURE__ */ e(
84
+ "div",
85
+ {
86
+ className: s(
87
+ "flex",
88
+ t.role === "user" ? "justify-end" : "justify-start"
89
+ ),
90
+ children: /* @__PURE__ */ e(
91
+ "div",
92
+ {
93
+ className: s(
94
+ "max-w-[80%] rounded-2xl px-3.5 py-2.5 text-sm leading-relaxed",
95
+ t.role === "user" ? "bg-primary-500 text-white rounded-br-md" : "bg-slate-100 text-slate-800 rounded-bl-md"
96
+ ),
97
+ children: t.content
98
+ }
99
+ )
100
+ },
101
+ t.id
102
+ )),
103
+ m && /* @__PURE__ */ e("div", { className: "flex justify-start", children: /* @__PURE__ */ e("div", { className: "bg-slate-100 rounded-2xl rounded-bl-md px-4 py-3", children: /* @__PURE__ */ r("div", { className: "flex gap-1", children: [
104
+ /* @__PURE__ */ e("span", { className: "w-1.5 h-1.5 bg-slate-400 rounded-full animate-bounce", style: { animationDelay: "0ms" } }),
105
+ /* @__PURE__ */ e("span", { className: "w-1.5 h-1.5 bg-slate-400 rounded-full animate-bounce", style: { animationDelay: "150ms" } }),
106
+ /* @__PURE__ */ e("span", { className: "w-1.5 h-1.5 bg-slate-400 rounded-full animate-bounce", style: { animationDelay: "300ms" } })
107
+ ] }) }) }),
108
+ /* @__PURE__ */ e("div", { ref: u })
109
+ ] }),
110
+ /* @__PURE__ */ e("div", { className: "border-t border-slate-100 px-3 py-3 flex-shrink-0", children: /* @__PURE__ */ r("div", { className: "flex items-end gap-2", children: [
111
+ /* @__PURE__ */ e(
112
+ "textarea",
113
+ {
114
+ ref: f,
115
+ value: l,
116
+ onChange: (t) => h(t.target.value),
117
+ onKeyDown: $,
118
+ placeholder: I,
119
+ rows: 1,
120
+ className: s(
121
+ "flex-1 resize-none rounded-xl border border-slate-200 px-3.5 py-2.5",
122
+ "text-sm text-slate-800 placeholder:text-slate-400",
123
+ "focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent",
124
+ "max-h-24"
125
+ )
126
+ }
127
+ ),
128
+ /* @__PURE__ */ e(
129
+ "button",
130
+ {
131
+ type: "button",
132
+ onClick: p,
133
+ disabled: !l.trim(),
134
+ className: s(
135
+ "p-2.5 rounded-xl transition-all duration-150",
136
+ "focus:outline-none focus:ring-2 focus:ring-primary-500",
137
+ l.trim() ? "bg-primary-500 text-white hover:bg-primary-600 shadow-sm" : "bg-slate-100 text-slate-300 cursor-not-allowed"
138
+ ),
139
+ children: /* @__PURE__ */ e(K, { className: "w-4 h-4" })
140
+ }
141
+ )
142
+ ] }) })
70
143
  ]
71
144
  }
72
145
  )
73
- ]
74
- }
75
- );
146
+ }
147
+ ),
148
+ /* @__PURE__ */ e(
149
+ "button",
150
+ {
151
+ type: "button",
152
+ onClick: () => x(!a),
153
+ className: s(
154
+ "w-14 h-14 rounded-full shadow-lg",
155
+ "bg-primary-500 hover:bg-primary-600 active:bg-primary-700",
156
+ "text-white flex items-center justify-center",
157
+ "transition-all duration-200 hover:scale-105 hover:shadow-xl",
158
+ "focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2"
159
+ ),
160
+ children: a ? /* @__PURE__ */ e(v, { className: "w-6 h-6" }) : k || /* @__PURE__ */ e(V, { className: "w-6 h-6" })
161
+ }
162
+ )
163
+ ] });
76
164
  }
77
165
  export {
78
- y as Alert
166
+ O as AgentChat
79
167
  };
80
168
  //# sourceMappingURL=index7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index7.js","sources":["../src/components/Alert/Alert.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport {\n CheckCircleIcon,\n ExclamationCircleIcon,\n ExclamationTriangleIcon,\n InformationCircleIcon,\n XMarkIcon,\n} from '@heroicons/react/20/solid'\nimport type { ReactNode } from 'react'\n\nexport interface AlertProps {\n variant?: 'success' | 'error' | 'warning' | 'info'\n title?: string\n children?: ReactNode\n onClose?: () => void\n className?: string\n}\n\nconst variantStyles = {\n success: {\n container: 'bg-green-50 border-green-200',\n icon: 'text-green-500',\n title: 'text-green-800',\n content: 'text-green-700',\n },\n error: {\n container: 'bg-red-50 border-red-200',\n icon: 'text-red-500',\n title: 'text-red-800',\n content: 'text-red-700',\n },\n warning: {\n container: 'bg-yellow-50 border-yellow-200',\n icon: 'text-yellow-500',\n title: 'text-yellow-800',\n content: 'text-yellow-700',\n },\n info: {\n container: 'bg-blue-50 border-blue-200',\n icon: 'text-blue-500',\n title: 'text-blue-800',\n content: 'text-blue-700',\n },\n}\n\nconst icons = {\n success: CheckCircleIcon,\n error: ExclamationCircleIcon,\n warning: ExclamationTriangleIcon,\n info: InformationCircleIcon,\n}\n\nexport function Alert({\n variant = 'info',\n title,\n children,\n onClose,\n className,\n}: AlertProps) {\n const styles = variantStyles[variant]\n const Icon = icons[variant]\n\n return (\n <div\n className={cn(\n 'flex gap-3 p-4 rounded-lg border',\n styles.container,\n className\n )}\n role=\"alert\"\n >\n <Icon className={cn('h-5 w-5 flex-shrink-0 mt-0.5', styles.icon)} />\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h3 className={cn('text-sm font-semibold', styles.title)}>{title}</h3>\n )}\n {children && (\n <div className={cn('text-sm', styles.content, title && 'mt-1')}>\n {children}\n </div>\n )}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className={cn(\n 'flex-shrink-0 p-1 rounded-lg transition-colors duration-200',\n 'hover:bg-black/5 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-slate-500'\n )}\n >\n <XMarkIcon className={cn('h-5 w-5', styles.icon)} />\n <span className=\"sr-only\">Dismiss</span>\n </button>\n )}\n </div>\n )\n}\n"],"names":["variantStyles","icons","CheckCircleIcon","ExclamationCircleIcon","ExclamationTriangleIcon","InformationCircleIcon","Alert","variant","title","children","onClose","className","styles","Icon","jsxs","cn","jsx","XMarkIcon"],"mappings":";;;AAkBA,MAAMA,IAAgB;AAAA,EACpB,SAAS;AAAA,IACP,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAAA,EAEX,OAAO;AAAA,IACL,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAAA,EAEX,SAAS;AAAA,IACP,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACJ,WAAW;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAEb,GAEMC,IAAQ;AAAA,EACZ,SAASC;AAAA,EACT,OAAOC;AAAA,EACP,SAASC;AAAA,EACT,MAAMC;AACR;AAEO,SAASC,EAAM;AAAA,EACpB,SAAAC,IAAU;AAAA,EACV,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAAe;AACb,QAAMC,IAASZ,EAAcO,CAAO,GAC9BM,IAAOZ,EAAMM,CAAO;AAE1B,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAH,EAAO;AAAA,QACPD;AAAA,MAAA;AAAA,MAEF,MAAK;AAAA,MAEL,UAAA;AAAA,QAAA,gBAAAK,EAACH,KAAK,WAAWE,EAAG,gCAAgCH,EAAO,IAAI,GAAG;AAAA,QAClE,gBAAAE,EAAC,OAAA,EAAI,WAAU,kBACZ,UAAA;AAAA,UAAAN,KACC,gBAAAQ,EAAC,QAAG,WAAWD,EAAG,yBAAyBH,EAAO,KAAK,GAAI,UAAAJ,EAAA,CAAM;AAAA,UAElEC,KACC,gBAAAO,EAAC,OAAA,EAAI,WAAWD,EAAG,WAAWH,EAAO,SAASJ,KAAS,MAAM,GAC1D,UAAAC,EAAA,CACH;AAAA,QAAA,GAEJ;AAAA,QACCC,KACC,gBAAAI;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAASJ;AAAA,YACT,WAAWK;AAAA,cACT;AAAA,cACA;AAAA,YAAA;AAAA,YAGF,UAAA;AAAA,cAAA,gBAAAC,EAACC,KAAU,WAAWF,EAAG,WAAWH,EAAO,IAAI,GAAG;AAAA,cAClD,gBAAAI,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,UAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACnC;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"index7.js","sources":["../src/components/AgentChat/AgentChat.tsx"],"sourcesContent":["import { useState, useRef, useEffect, type ReactNode, type KeyboardEvent } from 'react'\nimport { Transition } from '@headlessui/react'\nimport {\n ChatBubbleLeftRightIcon,\n XMarkIcon,\n PaperAirplaneIcon,\n SparklesIcon,\n} from '@heroicons/react/24/outline'\nimport { cn } from '@/lib/utils'\n\nexport interface AgentChatMessage {\n id: string\n role: 'user' | 'agent'\n content: string\n timestamp?: Date\n}\n\nexport interface AgentChatProps {\n /** Title shown in the chat header */\n title?: string\n /** Subtitle / agent description */\n subtitle?: string\n /** Chat messages */\n messages?: AgentChatMessage[]\n /** Called when user sends a message */\n onSendMessage?: (message: string) => void\n /** Whether the agent is currently typing */\n isTyping?: boolean\n /** Placeholder text for the input */\n placeholder?: string\n /** Custom icon for the floating button */\n buttonIcon?: ReactNode\n /** Whether the chat window is open (controlled mode) */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Position of the chat bubble */\n position?: 'bottom-right' | 'bottom-left'\n /** Additional class for the container */\n className?: string\n}\n\nexport function AgentChat({\n title = 'AI Assistant',\n subtitle = 'Ask me anything',\n messages = [],\n onSendMessage,\n isTyping = false,\n placeholder = 'Type a message...',\n buttonIcon,\n open: controlledOpen,\n onOpenChange,\n position = 'bottom-right',\n className,\n}: AgentChatProps) {\n const [internalOpen, setInternalOpen] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const messagesEndRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLTextAreaElement>(null)\n\n const isOpen = controlledOpen ?? internalOpen\n const setIsOpen = (value: boolean) => {\n setInternalOpen(value)\n onOpenChange?.(value)\n }\n\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [messages, isTyping])\n\n useEffect(() => {\n if (isOpen) {\n setTimeout(() => inputRef.current?.focus(), 300)\n }\n }, [isOpen])\n\n const handleSend = () => {\n const trimmed = inputValue.trim()\n if (!trimmed) return\n onSendMessage?.(trimmed)\n setInputValue('')\n }\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n const positionClasses = position === 'bottom-right'\n ? 'right-5 bottom-5'\n : 'left-5 bottom-5'\n\n const windowOrigin = position === 'bottom-right'\n ? 'origin-bottom-right'\n : 'origin-bottom-left'\n\n return (\n <div className={cn('fixed z-50', positionClasses, className)}>\n {/* Chat Window */}\n <Transition\n show={isOpen}\n enter=\"transition ease-out duration-200\"\n enterFrom={`opacity-0 scale-95 ${windowOrigin}`}\n enterTo={`opacity-100 scale-100 ${windowOrigin}`}\n leave=\"transition ease-in duration-150\"\n leaveFrom={`opacity-100 scale-100 ${windowOrigin}`}\n leaveTo={`opacity-0 scale-95 ${windowOrigin}`}\n >\n <div\n className={cn(\n 'absolute bottom-16 w-[360px] rounded-2xl shadow-2xl',\n 'border border-slate-200 bg-white',\n 'flex flex-col overflow-hidden',\n position === 'bottom-right' ? 'right-0' : 'left-0'\n )}\n style={{ height: '480px' }}\n >\n {/* Header */}\n <div className=\"bg-primary-600 px-5 py-4 flex items-center justify-between flex-shrink-0\">\n <div className=\"flex items-center gap-3\">\n <div className=\"w-8 h-8 rounded-lg bg-white/20 flex items-center justify-center\">\n <SparklesIcon className=\"w-4.5 h-4.5 text-white\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold text-white leading-tight\">{title}</h3>\n <p className=\"text-xs text-white/70\">{subtitle}</p>\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"p-1 rounded-lg text-white/70 hover:text-white hover:bg-white/10 transition-colors\"\n >\n <XMarkIcon className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Messages */}\n <div className=\"flex-1 overflow-y-auto px-4 py-4 space-y-3\">\n {messages.length === 0 && (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-6\">\n <div className=\"w-12 h-12 rounded-2xl bg-primary-50 flex items-center justify-center mb-3\">\n <SparklesIcon className=\"w-6 h-6 text-primary-500\" />\n </div>\n <p className=\"text-sm font-medium text-slate-700\">How can I help?</p>\n <p className=\"text-xs text-slate-400 mt-1\">Send a message to get started</p>\n </div>\n )}\n {messages.map((msg) => (\n <div\n key={msg.id}\n className={cn(\n 'flex',\n msg.role === 'user' ? 'justify-end' : 'justify-start'\n )}\n >\n <div\n className={cn(\n 'max-w-[80%] rounded-2xl px-3.5 py-2.5 text-sm leading-relaxed',\n msg.role === 'user'\n ? 'bg-primary-500 text-white rounded-br-md'\n : 'bg-slate-100 text-slate-800 rounded-bl-md'\n )}\n >\n {msg.content}\n </div>\n </div>\n ))}\n {isTyping && (\n <div className=\"flex justify-start\">\n <div className=\"bg-slate-100 rounded-2xl rounded-bl-md px-4 py-3\">\n <div className=\"flex gap-1\">\n <span className=\"w-1.5 h-1.5 bg-slate-400 rounded-full animate-bounce\" style={{ animationDelay: '0ms' }} />\n <span className=\"w-1.5 h-1.5 bg-slate-400 rounded-full animate-bounce\" style={{ animationDelay: '150ms' }} />\n <span className=\"w-1.5 h-1.5 bg-slate-400 rounded-full animate-bounce\" style={{ animationDelay: '300ms' }} />\n </div>\n </div>\n </div>\n )}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input */}\n <div className=\"border-t border-slate-100 px-3 py-3 flex-shrink-0\">\n <div className=\"flex items-end gap-2\">\n <textarea\n ref={inputRef}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'flex-1 resize-none rounded-xl border border-slate-200 px-3.5 py-2.5',\n 'text-sm text-slate-800 placeholder:text-slate-400',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent',\n 'max-h-24'\n )}\n />\n <button\n type=\"button\"\n onClick={handleSend}\n disabled={!inputValue.trim()}\n className={cn(\n 'p-2.5 rounded-xl transition-all duration-150',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500',\n inputValue.trim()\n ? 'bg-primary-500 text-white hover:bg-primary-600 shadow-sm'\n : 'bg-slate-100 text-slate-300 cursor-not-allowed'\n )}\n >\n <PaperAirplaneIcon className=\"w-4 h-4\" />\n </button>\n </div>\n </div>\n </div>\n </Transition>\n\n {/* Floating Button */}\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'w-14 h-14 rounded-full shadow-lg',\n 'bg-primary-500 hover:bg-primary-600 active:bg-primary-700',\n 'text-white flex items-center justify-center',\n 'transition-all duration-200 hover:scale-105 hover:shadow-xl',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2'\n )}\n >\n {isOpen ? (\n <XMarkIcon className=\"w-6 h-6\" />\n ) : (\n buttonIcon || <ChatBubbleLeftRightIcon className=\"w-6 h-6\" />\n )}\n </button>\n </div>\n )\n}\n"],"names":["AgentChat","title","subtitle","messages","onSendMessage","isTyping","placeholder","buttonIcon","controlledOpen","onOpenChange","position","className","internalOpen","setInternalOpen","useState","inputValue","setInputValue","messagesEndRef","useRef","inputRef","isOpen","setIsOpen","value","useEffect","_a","handleSend","trimmed","handleKeyDown","e","positionClasses","windowOrigin","cn","jsx","Transition","jsxs","SparklesIcon","XMarkIcon","msg","PaperAirplaneIcon","ChatBubbleLeftRightIcon"],"mappings":"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"}