@axtec/components 0.1.2 → 0.1.4

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 (66) hide show
  1. package/README.md +156 -0
  2. package/dist/components/PrimaryCard/PrimaryCard.d.ts +24 -0
  3. package/dist/components/PrimaryCard/index.d.ts +1 -0
  4. package/dist/components/Sidebar/Sidebar.d.ts +101 -0
  5. package/dist/components/Sidebar/index.d.ts +1 -0
  6. package/dist/components/Typography/Text.d.ts +2 -2
  7. package/dist/components/index.d.ts +2 -0
  8. package/dist/index.css +1 -1
  9. package/dist/index.js +123 -111
  10. package/dist/index.js.map +1 -1
  11. package/dist/index3.js +2 -2
  12. package/dist/index48.js +44 -56
  13. package/dist/index48.js.map +1 -1
  14. package/dist/index49.js +56 -16
  15. package/dist/index49.js.map +1 -1
  16. package/dist/index50.js +16 -65
  17. package/dist/index50.js.map +1 -1
  18. package/dist/index51.js +62 -51
  19. package/dist/index51.js.map +1 -1
  20. package/dist/index52.js +54 -37
  21. package/dist/index52.js.map +1 -1
  22. package/dist/index53.js +37 -66
  23. package/dist/index53.js.map +1 -1
  24. package/dist/index54.js +63 -19
  25. package/dist/index54.js.map +1 -1
  26. package/dist/index55.js +19 -101
  27. package/dist/index55.js.map +1 -1
  28. package/dist/index56.js +100 -64
  29. package/dist/index56.js.map +1 -1
  30. package/dist/index57.js +206 -224
  31. package/dist/index57.js.map +1 -1
  32. package/dist/index58.js +62 -96
  33. package/dist/index58.js.map +1 -1
  34. package/dist/index59.js +233 -33
  35. package/dist/index59.js.map +1 -1
  36. package/dist/index60.js +98 -14
  37. package/dist/index60.js.map +1 -1
  38. package/dist/index61.js +35 -59
  39. package/dist/index61.js.map +1 -1
  40. package/dist/index62.js +16 -59
  41. package/dist/index62.js.map +1 -1
  42. package/dist/index63.js +57 -72
  43. package/dist/index63.js.map +1 -1
  44. package/dist/index64.js +58 -106
  45. package/dist/index64.js.map +1 -1
  46. package/dist/index65.js +70 -35
  47. package/dist/index65.js.map +1 -1
  48. package/dist/index66.js +101 -40
  49. package/dist/index66.js.map +1 -1
  50. package/dist/index67.js +44 -72
  51. package/dist/index67.js.map +1 -1
  52. package/dist/index68.js +47 -53
  53. package/dist/index68.js.map +1 -1
  54. package/dist/index69.js +70 -62
  55. package/dist/index69.js.map +1 -1
  56. package/dist/index70.js +46 -28
  57. package/dist/index70.js.map +1 -1
  58. package/dist/index71.js +67 -13
  59. package/dist/index71.js.map +1 -1
  60. package/dist/index72.js +35 -2263
  61. package/dist/index72.js.map +1 -1
  62. package/dist/index73.js +17 -0
  63. package/dist/index73.js.map +1 -0
  64. package/dist/index74.js +2267 -0
  65. package/dist/index74.js.map +1 -0
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index64.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":"index64.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/index65.js CHANGED
@@ -1,43 +1,78 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import { cn as s } from "./index3.js";
3
- const n = {
4
- body: "text-base",
5
- "body-sm": "text-sm",
6
- caption: "text-xs",
7
- lead: "text-lg"
8
- }, d = {
9
- default: "text-slate-900",
10
- muted: "text-slate-500",
11
- primary: "text-primary-600",
12
- danger: "text-red-600"
13
- }, i = {
14
- normal: "font-normal",
15
- medium: "font-medium",
16
- semibold: "font-semibold",
17
- bold: "font-bold"
18
- };
19
- function b({
20
- children: t,
21
- variant: e = "body",
22
- color: o = "default",
23
- weight: m = "normal",
24
- as: a = "p",
25
- className: l
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
26
12
  }) {
27
- return /* @__PURE__ */ r(
28
- a,
13
+ const [b, p] = u(i);
14
+ return /* @__PURE__ */ c(
15
+ f,
29
16
  {
30
- className: s(
31
- n[e],
32
- d[o],
33
- i[m],
34
- l
35
- ),
36
- children: t
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
+ ]
37
72
  }
38
73
  );
39
74
  }
40
75
  export {
41
- b as Text
76
+ j as Tabs
42
77
  };
43
78
  //# sourceMappingURL=index65.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index65.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'\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}\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: Component = 'p',\n className,\n}: TextProps) {\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","colorStyles","weightStyles","Text","children","variant","color","weight","Component","className","jsx","cn"],"mappings":";;AAYA,MAAMA,IAAgB;AAAA,EACpB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,MAAM;AACR,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,IAAIC,IAAY;AAAA,EAChB,WAAAC;AACF,GAAc;AACZ,SACE,gBAAAC;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,WAAWG;AAAA,QACTX,EAAcK,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":"index65.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/index66.js CHANGED
@@ -1,51 +1,112 @@
1
- import { jsxs as n, jsx as r } from "react/jsx-runtime";
2
- import { forwardRef as l } from "react";
3
- import { cn as a } from "./index3.js";
4
- const f = l(
5
- ({ className: d, label: e, error: t, helperText: s, id: i, ...c }, m) => {
6
- const o = i || (e == null ? void 0 : e.toLowerCase().replace(/\s+/g, "-"));
7
- return /* @__PURE__ */ n("div", { className: "w-full", children: [
8
- e && /* @__PURE__ */ r(
9
- "label",
10
- {
11
- htmlFor: o,
12
- className: "block text-sm font-medium text-slate-700 mb-1.5",
13
- children: e
14
- }
15
- ),
1
+ import { jsxs as s, jsx as r, Fragment as g } from "react/jsx-runtime";
2
+ import { cn as o } from "./index3.js";
3
+ import { Panel as v, PanelHeader as b, PanelTitle as D, PanelAction as y, PanelEmptyState as w } from "./index45.js";
4
+ import { Badge as h } from "./index15.js";
5
+ const N = (l) => {
6
+ if (!l) return null;
7
+ const a = new Date(l), n = /* @__PURE__ */ new Date(), i = Math.ceil((a.getTime() - n.getTime()) / (1e3 * 60 * 60 * 24));
8
+ return i < 0 ? { text: `Overdue by ${Math.abs(i)} days`, isOverdue: !0 } : i === 0 ? { text: "Due today", isOverdue: !0 } : i === 1 ? { text: "Due tomorrow", isOverdue: !1 } : i <= 7 ? { text: `Due in ${i} days`, isOverdue: !1 } : { text: `Due ${a.toLocaleDateString()}`, isOverdue: !1 };
9
+ }, z = ({
10
+ tasks: l,
11
+ title: a = "Tasks",
12
+ onTaskClick: n,
13
+ onViewAll: i,
14
+ onAddTask: d,
15
+ maxTasks: u = 5,
16
+ emptyMessage: x = "No tasks to display.",
17
+ className: f
18
+ }) => {
19
+ const c = [...l].filter((e) => e.status !== "completed").sort((e, t) => e.status === "overdue" && t.status !== "overdue" ? -1 : e.status !== "overdue" && t.status === "overdue" ? 1 : e.priority === "high" && t.priority !== "high" ? -1 : e.priority !== "high" && t.priority === "high" ? 1 : e.dueDate && t.dueDate ? new Date(e.dueDate).getTime() - new Date(t.dueDate).getTime() : 0).slice(0, u), m = l.filter((e) => e.status === "overdue").length;
20
+ return /* @__PURE__ */ s(v, { className: f, children: [
21
+ /* @__PURE__ */ s(b, { children: [
16
22
  /* @__PURE__ */ r(
17
- "textarea",
23
+ D,
18
24
  {
19
- ref: m,
20
- id: o,
21
- className: a(
22
- "w-full px-4 py-2.5 text-base min-h-[100px] resize-y",
23
- "bg-white border rounded-lg",
24
- "transition-colors duration-200",
25
- "placeholder:text-slate-400",
26
- "focus:outline-none focus:ring-2 focus:ring-offset-0",
27
- t ? "border-red-500 focus:border-red-500 focus:ring-red-500" : "border-slate-300 focus:border-primary-500 focus:ring-primary-500",
28
- "disabled:bg-slate-50 disabled:text-slate-500 disabled:cursor-not-allowed",
29
- d
30
- ),
31
- ...c
25
+ badge: m > 0 ? /* @__PURE__ */ s(h, { variant: "danger", size: "sm", children: [
26
+ m,
27
+ " overdue"
28
+ ] }) : void 0,
29
+ children: a
32
30
  }
33
31
  ),
34
- (t || s) && /* @__PURE__ */ r(
35
- "p",
32
+ d && /* @__PURE__ */ r(y, { onClick: d, children: "+ Add Task" })
33
+ ] }),
34
+ c.length === 0 ? /* @__PURE__ */ r(w, { message: x }) : /* @__PURE__ */ s("div", { className: "flex flex-col gap-3", children: [
35
+ c.map((e) => {
36
+ const t = N(e.dueDate);
37
+ return /* @__PURE__ */ s(
38
+ "div",
39
+ {
40
+ className: o(
41
+ "flex items-start p-4",
42
+ "bg-white border border-slate-200 rounded-xl",
43
+ "transition-colors hover:bg-slate-50",
44
+ n && "cursor-pointer"
45
+ ),
46
+ onClick: () => n == null ? void 0 : n(e),
47
+ children: [
48
+ /* @__PURE__ */ s("div", { className: "flex-1 min-w-0", children: [
49
+ /* @__PURE__ */ r("h4", { className: "text-sm font-semibold text-slate-900 m-0 mb-1", children: e.title }),
50
+ e.description && /* @__PURE__ */ r("p", { className: "text-sm text-slate-500 m-0 mb-2 truncate", children: e.description }),
51
+ /* @__PURE__ */ s("div", { className: "flex items-center gap-2 flex-wrap", children: [
52
+ t && /* @__PURE__ */ r(
53
+ "span",
54
+ {
55
+ className: o(
56
+ "text-xs",
57
+ t.isOverdue ? "text-red-500 font-semibold" : "text-slate-500"
58
+ ),
59
+ children: t.text
60
+ }
61
+ ),
62
+ e.meta && /* @__PURE__ */ s(g, { children: [
63
+ t && /* @__PURE__ */ r("span", { className: "text-slate-300", children: "•" }),
64
+ /* @__PURE__ */ r("span", { className: "text-xs text-slate-500", children: e.meta })
65
+ ] }),
66
+ e.priority === "high" && /* @__PURE__ */ r(h, { variant: "warning", size: "sm", children: "High Priority" })
67
+ ] })
68
+ ] }),
69
+ n && /* @__PURE__ */ r(
70
+ "button",
71
+ {
72
+ className: o(
73
+ "px-3 py-1.5 ml-3 flex-shrink-0",
74
+ "bg-white border border-slate-200 rounded-lg",
75
+ "text-xs font-medium text-slate-700",
76
+ "transition-colors hover:bg-slate-100 hover:border-slate-300"
77
+ ),
78
+ onClick: (p) => {
79
+ p.stopPropagation(), n(e);
80
+ },
81
+ children: "View"
82
+ }
83
+ )
84
+ ]
85
+ },
86
+ e.id
87
+ );
88
+ }),
89
+ l.length > u && i && /* @__PURE__ */ s(
90
+ "button",
36
91
  {
37
- className: a(
38
- "mt-1.5 text-sm",
39
- t ? "text-red-600" : "text-slate-500"
92
+ onClick: i,
93
+ className: o(
94
+ "w-full p-3 mt-2",
95
+ "bg-transparent border border-dashed border-slate-200 rounded-xl",
96
+ "text-sm text-slate-500",
97
+ "transition-colors hover:border-slate-400 hover:text-slate-700"
40
98
  ),
41
- children: t || s
99
+ children: [
100
+ "View all ",
101
+ l.length,
102
+ " tasks"
103
+ ]
42
104
  }
43
105
  )
44
- ] });
45
- }
46
- );
47
- f.displayName = "Textarea";
106
+ ] })
107
+ ] });
108
+ };
48
109
  export {
49
- f as Textarea
110
+ z as TaskList
50
111
  };
51
112
  //# sourceMappingURL=index66.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index66.js","sources":["../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import { forwardRef, type TextareaHTMLAttributes } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string\n error?: string\n helperText?: string\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, label, error, helperText, id, ...props }, ref) => {\n const textareaId = id || label?.toLowerCase().replace(/\\s+/g, '-')\n\n return (\n <div className=\"w-full\">\n {label && (\n <label\n htmlFor={textareaId}\n className=\"block text-sm font-medium text-slate-700 mb-1.5\"\n >\n {label}\n </label>\n )}\n <textarea\n ref={ref}\n id={textareaId}\n className={cn(\n 'w-full px-4 py-2.5 text-base min-h-[100px] resize-y',\n 'bg-white border rounded-lg',\n 'transition-colors duration-200',\n 'placeholder:text-slate-400',\n 'focus:outline-none focus:ring-2 focus:ring-offset-0',\n error\n ? 'border-red-500 focus:border-red-500 focus:ring-red-500'\n : 'border-slate-300 focus:border-primary-500 focus:ring-primary-500',\n 'disabled:bg-slate-50 disabled:text-slate-500 disabled:cursor-not-allowed',\n className\n )}\n {...props}\n />\n {(error || helperText) && (\n <p\n className={cn(\n 'mt-1.5 text-sm',\n error ? 'text-red-600' : 'text-slate-500'\n )}\n >\n {error || helperText}\n </p>\n )}\n </div>\n )\n }\n)\n\nTextarea.displayName = 'Textarea'\n"],"names":["Textarea","forwardRef","className","label","error","helperText","id","props","ref","textareaId","jsxs","jsx","cn"],"mappings":";;;AASO,MAAMA,IAAWC;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,OAAAC,GAAO,OAAAC,GAAO,YAAAC,GAAY,IAAAC,GAAI,GAAGC,EAAA,GAASC,MAAQ;AAC9D,UAAMC,IAAaH,MAAMH,KAAA,gBAAAA,EAAO,cAAc,QAAQ,QAAQ;AAE9D,WACE,gBAAAO,EAAC,OAAA,EAAI,WAAU,UACZ,UAAA;AAAA,MAAAP,KACC,gBAAAQ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASF;AAAA,UACT,WAAU;AAAA,UAET,UAAAN;AAAA,QAAA;AAAA,MAAA;AAAA,MAGL,gBAAAQ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAH;AAAA,UACA,IAAIC;AAAA,UACJ,WAAWG;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACAR,IACI,2DACA;AAAA,YACJ;AAAA,YACAF;AAAA,UAAA;AAAA,UAED,GAAGK;AAAA,QAAA;AAAA,MAAA;AAAA,OAEJH,KAASC,MACT,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACAR,IAAQ,iBAAiB;AAAA,UAAA;AAAA,UAG1B,UAAAA,KAASC;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ,GAEJ;AAAA,EAEJ;AACF;AAEAL,EAAS,cAAc;"}
1
+ {"version":3,"file":"index66.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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"}
package/dist/index67.js CHANGED
@@ -1,79 +1,51 @@
1
- import { jsx as t, jsxs as i } from "react/jsx-runtime";
2
- import { Switch as r } from "@headlessui/react";
3
- import { cn as e } from "./index3.js";
4
- const f = {
5
- sm: {
6
- track: "h-5 w-9",
7
- thumb: "h-4 w-4",
8
- translate: "translate-x-4"
9
- },
10
- md: {
11
- track: "h-6 w-11",
12
- thumb: "h-5 w-5",
13
- translate: "translate-x-5"
14
- },
15
- lg: {
16
- track: "h-7 w-14",
17
- thumb: "h-6 w-6",
18
- translate: "translate-x-7"
19
- }
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"
20
25
  };
21
- function p({
22
- checked: s,
23
- onChange: m,
24
- label: a,
25
- description: n,
26
- disabled: o = !1,
27
- size: c = "md",
28
- className: u
26
+ function b({
27
+ children: e,
28
+ variant: t = "body",
29
+ color: o = "default",
30
+ weight: l = "normal",
31
+ as: n,
32
+ className: m
29
33
  }) {
30
- const l = f[c];
31
- return /* @__PURE__ */ t(r.Group, { children: /* @__PURE__ */ i("div", { className: e("flex items-start gap-3", u), children: [
32
- /* @__PURE__ */ t(
33
- r,
34
- {
35
- checked: s,
36
- onChange: m,
37
- disabled: o,
38
- className: e(
39
- "relative inline-flex flex-shrink-0 rounded-full",
40
- "border-2 border-transparent cursor-pointer",
41
- "transition-colors duration-200 ease-in-out",
42
- "focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
43
- s ? "bg-primary-500" : "bg-slate-200",
44
- o && "opacity-50 cursor-not-allowed",
45
- l.track
46
- ),
47
- children: /* @__PURE__ */ t(
48
- "span",
49
- {
50
- className: e(
51
- "pointer-events-none inline-block rounded-full",
52
- "bg-white shadow-sm ring-0",
53
- "transform transition duration-200 ease-in-out",
54
- s ? l.translate : "translate-x-0",
55
- l.thumb
56
- )
57
- }
58
- )
59
- }
60
- ),
61
- (a || n) && /* @__PURE__ */ i("div", { className: "flex flex-col", children: [
62
- a && /* @__PURE__ */ t(
63
- r.Label,
64
- {
65
- className: e(
66
- "text-sm font-medium text-slate-900",
67
- o && "opacity-50"
68
- ),
69
- children: a
70
- }
34
+ const s = n || i[t] || "p";
35
+ return /* @__PURE__ */ a(
36
+ s,
37
+ {
38
+ className: r(
39
+ d[t],
40
+ x[o],
41
+ f[l],
42
+ m
71
43
  ),
72
- n && /* @__PURE__ */ t(r.Description, { className: "text-sm text-slate-500", children: n })
73
- ] })
74
- ] }) });
44
+ children: e
45
+ }
46
+ );
75
47
  }
76
48
  export {
77
- p as Toggle
49
+ b as Text
78
50
  };
79
51
  //# sourceMappingURL=index67.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index67.js","sources":["../src/components/Toggle/Toggle.tsx"],"sourcesContent":["import { Switch } from '@headlessui/react'\nimport { cn } from '@/lib/utils'\n\nexport interface ToggleProps {\n checked: boolean\n onChange: (checked: boolean) => void\n label?: string\n description?: string\n disabled?: boolean\n size?: 'sm' | 'md' | 'lg'\n className?: string\n}\n\nconst sizeStyles = {\n sm: {\n track: 'h-5 w-9',\n thumb: 'h-4 w-4',\n translate: 'translate-x-4',\n },\n md: {\n track: 'h-6 w-11',\n thumb: 'h-5 w-5',\n translate: 'translate-x-5',\n },\n lg: {\n track: 'h-7 w-14',\n thumb: 'h-6 w-6',\n translate: 'translate-x-7',\n },\n}\n\nexport function Toggle({\n checked,\n onChange,\n label,\n description,\n disabled = false,\n size = 'md',\n className,\n}: ToggleProps) {\n const styles = sizeStyles[size]\n\n return (\n <Switch.Group>\n <div className={cn('flex items-start gap-3', className)}>\n <Switch\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n className={cn(\n 'relative inline-flex flex-shrink-0 rounded-full',\n 'border-2 border-transparent cursor-pointer',\n 'transition-colors duration-200 ease-in-out',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',\n checked ? 'bg-primary-500' : 'bg-slate-200',\n disabled && 'opacity-50 cursor-not-allowed',\n styles.track\n )}\n >\n <span\n className={cn(\n 'pointer-events-none inline-block rounded-full',\n 'bg-white shadow-sm ring-0',\n 'transform transition duration-200 ease-in-out',\n checked ? styles.translate : 'translate-x-0',\n styles.thumb\n )}\n />\n </Switch>\n {(label || description) && (\n <div className=\"flex flex-col\">\n {label && (\n <Switch.Label\n className={cn(\n 'text-sm font-medium text-slate-900',\n disabled && 'opacity-50'\n )}\n >\n {label}\n </Switch.Label>\n )}\n {description && (\n <Switch.Description className=\"text-sm text-slate-500\">\n {description}\n </Switch.Description>\n )}\n </div>\n )}\n </div>\n </Switch.Group>\n )\n}\n"],"names":["sizeStyles","Toggle","checked","onChange","label","description","disabled","size","className","styles","jsx","Switch","jsxs","cn"],"mappings":";;;AAaA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAAA,EAEb,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAAA,EAEb,IAAI;AAAA,IACF,OAAO;AAAA,IACP,OAAO;AAAA,IACP,WAAW;AAAA,EAAA;AAEf;AAEO,SAASC,EAAO;AAAA,EACrB,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,MAAAC,IAAO;AAAA,EACP,WAAAC;AACF,GAAgB;AACd,QAAMC,IAAST,EAAWO,CAAI;AAE9B,SACE,gBAAAG,EAACC,EAAO,OAAP,EACC,UAAA,gBAAAC,EAAC,SAAI,WAAWC,EAAG,0BAA0BL,CAAS,GACpD,UAAA;AAAA,IAAA,gBAAAE;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,SAAAT;AAAA,QACA,UAAAC;AAAA,QACA,UAAAG;AAAA,QACA,WAAWO;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAX,IAAU,mBAAmB;AAAA,UAC7BI,KAAY;AAAA,UACZG,EAAO;AAAA,QAAA;AAAA,QAGT,UAAA,gBAAAC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWG;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACAX,IAAUO,EAAO,YAAY;AAAA,cAC7BA,EAAO;AAAA,YAAA;AAAA,UACT;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,KAEAL,KAASC,MACT,gBAAAO,EAAC,OAAA,EAAI,WAAU,iBACZ,UAAA;AAAA,MAAAR,KACC,gBAAAM;AAAA,QAACC,EAAO;AAAA,QAAP;AAAA,UACC,WAAWE;AAAA,YACT;AAAA,YACAP,KAAY;AAAA,UAAA;AAAA,UAGb,UAAAF;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJC,KACC,gBAAAK,EAACC,EAAO,aAAP,EAAmB,WAAU,0BAC3B,UAAAN,EAAA,CACH;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;"}
1
+ {"version":3,"file":"index67.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;"}