@axtec/components 0.1.0

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 (258) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +12 -0
  2. package/dist/components/ActionBar/ActionBar.d.ts +10 -0
  3. package/dist/components/ActionBar/index.d.ts +1 -0
  4. package/dist/components/ActionLayout/ActionLayout.d.ts +15 -0
  5. package/dist/components/ActionLayout/index.d.ts +1 -0
  6. package/dist/components/Alert/Alert.d.ts +9 -0
  7. package/dist/components/AlertBox/AlertBox.d.ts +15 -0
  8. package/dist/components/AlertBox/index.d.ts +1 -0
  9. package/dist/components/AlertModal/AlertModal.d.ts +14 -0
  10. package/dist/components/AlertModal/index.d.ts +1 -0
  11. package/dist/components/AutoComplete/AutoComplete.d.ts +17 -0
  12. package/dist/components/AutoComplete/index.d.ts +1 -0
  13. package/dist/components/Avatar/Avatar.d.ts +8 -0
  14. package/dist/components/AvatarCard/AvatarCard.d.ts +27 -0
  15. package/dist/components/AvatarCard/index.d.ts +1 -0
  16. package/dist/components/AverageRating/AverageRating.d.ts +8 -0
  17. package/dist/components/AverageRating/index.d.ts +1 -0
  18. package/dist/components/Badge/Badge.d.ts +9 -0
  19. package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +15 -0
  20. package/dist/components/Button/Button.d.ts +9 -0
  21. package/dist/components/ButtonGroup/ButtonGroup.d.ts +11 -0
  22. package/dist/components/ButtonGroup/index.d.ts +1 -0
  23. package/dist/components/Card/Card.d.ts +56 -0
  24. package/dist/components/Checkbox/Checkbox.d.ts +6 -0
  25. package/dist/components/ConfirmModal/ConfirmModal.d.ts +18 -0
  26. package/dist/components/ConfirmModal/index.d.ts +1 -0
  27. package/dist/components/DatePicker/DatePicker.d.ts +13 -0
  28. package/dist/components/DatePicker/index.d.ts +1 -0
  29. package/dist/components/Drawer/Drawer.d.ts +10 -0
  30. package/dist/components/Drawer/index.d.ts +1 -0
  31. package/dist/components/Dropdown/Dropdown.d.ts +21 -0
  32. package/dist/components/EmptyData/EmptyData.d.ts +9 -0
  33. package/dist/components/EmptyData/index.d.ts +1 -0
  34. package/dist/components/FileUploader/FileUploader.d.ts +10 -0
  35. package/dist/components/FileUploader/index.d.ts +1 -0
  36. package/dist/components/IconButton/IconButton.d.ts +7 -0
  37. package/dist/components/IconButton/index.d.ts +1 -0
  38. package/dist/components/Image/Image.d.ts +13 -0
  39. package/dist/components/Image/index.d.ts +1 -0
  40. package/dist/components/ImageGrid/ImageGrid.d.ts +19 -0
  41. package/dist/components/ImageGrid/index.d.ts +1 -0
  42. package/dist/components/ImageUploading/ImageUploading.d.ts +7 -0
  43. package/dist/components/ImageUploading/index.d.ts +1 -0
  44. package/dist/components/Input/Input.d.ts +7 -0
  45. package/dist/components/LinkButton/LinkButton.d.ts +15 -0
  46. package/dist/components/LinkButton/index.d.ts +1 -0
  47. package/dist/components/Loader/Loader.d.ts +6 -0
  48. package/dist/components/LoadingModal/LoadingModal.d.ts +6 -0
  49. package/dist/components/LoadingModal/index.d.ts +1 -0
  50. package/dist/components/Logo/AxtecLogo.d.ts +5 -0
  51. package/dist/components/Logo/MyHomeVaultLogo.d.ts +5 -0
  52. package/dist/components/Logo/index.d.ts +2 -0
  53. package/dist/components/LogoLoader/LogoLoader.d.ts +5 -0
  54. package/dist/components/LogoLoader/index.d.ts +1 -0
  55. package/dist/components/MenuText/MenuText.d.ts +7 -0
  56. package/dist/components/MenuText/index.d.ts +1 -0
  57. package/dist/components/Modal/Modal.d.ts +10 -0
  58. package/dist/components/MultiItemSelect/MultiItemSelect.d.ts +13 -0
  59. package/dist/components/MultiItemSelect/index.d.ts +1 -0
  60. package/dist/components/Notification/Notification.d.ts +11 -0
  61. package/dist/components/Notification/index.d.ts +1 -0
  62. package/dist/components/Pagination/Pagination.d.ts +8 -0
  63. package/dist/components/Panel/Panel.d.ts +40 -0
  64. package/dist/components/Panel/index.d.ts +1 -0
  65. package/dist/components/PhotoLibrary/PhotoLibrary.d.ts +14 -0
  66. package/dist/components/PhotoLibrary/index.d.ts +1 -0
  67. package/dist/components/Pill/Pill.d.ts +11 -0
  68. package/dist/components/Pill/index.d.ts +1 -0
  69. package/dist/components/Progress/Progress.d.ts +10 -0
  70. package/dist/components/QuickActions/QuickActions.d.ts +8 -0
  71. package/dist/components/QuickActions/index.d.ts +1 -0
  72. package/dist/components/RadioGroup/RadioGroup.d.ts +15 -0
  73. package/dist/components/Rating/Rating.d.ts +11 -0
  74. package/dist/components/Rating/index.d.ts +1 -0
  75. package/dist/components/Row/Row.d.ts +10 -0
  76. package/dist/components/Row/index.d.ts +1 -0
  77. package/dist/components/ScrollableModal/ScrollableModal.d.ts +17 -0
  78. package/dist/components/ScrollableModal/index.d.ts +1 -0
  79. package/dist/components/Select/Select.d.ts +16 -0
  80. package/dist/components/Skeleton/Skeleton.d.ts +18 -0
  81. package/dist/components/StatisticsChart/StatisticsChart.d.ts +43 -0
  82. package/dist/components/StatisticsChart/index.d.ts +1 -0
  83. package/dist/components/StatisticsLegend/StatisticsLegend.d.ts +22 -0
  84. package/dist/components/StatisticsLegend/index.d.ts +1 -0
  85. package/dist/components/StatusIndicator/StatusIndicator.d.ts +21 -0
  86. package/dist/components/StatusIndicator/index.d.ts +1 -0
  87. package/dist/components/StepList/StepList.d.ts +8 -0
  88. package/dist/components/StepList/index.d.ts +1 -0
  89. package/dist/components/TabView/TabView.d.ts +17 -0
  90. package/dist/components/TabView/index.d.ts +1 -0
  91. package/dist/components/Table/Table.d.ts +19 -0
  92. package/dist/components/Tabs/Tabs.d.ts +16 -0
  93. package/dist/components/TaskList/TaskList.d.ts +20 -0
  94. package/dist/components/TaskList/index.d.ts +1 -0
  95. package/dist/components/Textarea/Textarea.d.ts +7 -0
  96. package/dist/components/Toggle/Toggle.d.ts +10 -0
  97. package/dist/components/ToggleButton/ToggleButton.d.ts +8 -0
  98. package/dist/components/ToggleButton/index.d.ts +1 -0
  99. package/dist/components/Tooltip/Tooltip.d.ts +9 -0
  100. package/dist/components/TrendIndicator/TrendIndicator.d.ts +8 -0
  101. package/dist/components/TrendIndicator/index.d.ts +1 -0
  102. package/dist/components/Typography/CardHeading.d.ts +6 -0
  103. package/dist/components/Typography/PageHeading.d.ts +6 -0
  104. package/dist/components/Typography/SectionHeading.d.ts +10 -0
  105. package/dist/components/Typography/SubsectionHeading.d.ts +6 -0
  106. package/dist/components/Typography/Text.d.ts +10 -0
  107. package/dist/components/Typography/index.d.ts +5 -0
  108. package/dist/components/index.d.ts +62 -0
  109. package/dist/index.css +1 -0
  110. package/dist/index.d.ts +3 -0
  111. package/dist/index.js +153 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/index10.js +104 -0
  114. package/dist/index10.js.map +1 -0
  115. package/dist/index11.js +42 -0
  116. package/dist/index11.js.map +1 -0
  117. package/dist/index12.js +82 -0
  118. package/dist/index12.js.map +1 -0
  119. package/dist/index13.js +28 -0
  120. package/dist/index13.js.map +1 -0
  121. package/dist/index14.js +22 -0
  122. package/dist/index14.js.map +1 -0
  123. package/dist/index15.js +42 -0
  124. package/dist/index15.js.map +1 -0
  125. package/dist/index16.js +76 -0
  126. package/dist/index16.js.map +1 -0
  127. package/dist/index17.js +53 -0
  128. package/dist/index17.js.map +1 -0
  129. package/dist/index18.js +16 -0
  130. package/dist/index18.js.map +1 -0
  131. package/dist/index19.js +157 -0
  132. package/dist/index19.js.map +1 -0
  133. package/dist/index20.js +21 -0
  134. package/dist/index20.js.map +1 -0
  135. package/dist/index21.js +49 -0
  136. package/dist/index21.js.map +1 -0
  137. package/dist/index22.js +53 -0
  138. package/dist/index22.js.map +1 -0
  139. package/dist/index23.js +82 -0
  140. package/dist/index23.js.map +1 -0
  141. package/dist/index24.js +223 -0
  142. package/dist/index24.js.map +1 -0
  143. package/dist/index25.js +55 -0
  144. package/dist/index25.js.map +1 -0
  145. package/dist/index26.js +81 -0
  146. package/dist/index26.js.map +1 -0
  147. package/dist/index27.js +27 -0
  148. package/dist/index27.js.map +1 -0
  149. package/dist/index28.js +81 -0
  150. package/dist/index28.js.map +1 -0
  151. package/dist/index29.js +36 -0
  152. package/dist/index29.js.map +1 -0
  153. package/dist/index3.js +9 -0
  154. package/dist/index3.js.map +1 -0
  155. package/dist/index30.js +95 -0
  156. package/dist/index30.js.map +1 -0
  157. package/dist/index31.js +63 -0
  158. package/dist/index31.js.map +1 -0
  159. package/dist/index32.js +48 -0
  160. package/dist/index32.js.map +1 -0
  161. package/dist/index33.js +51 -0
  162. package/dist/index33.js.map +1 -0
  163. package/dist/index34.js +55 -0
  164. package/dist/index34.js.map +1 -0
  165. package/dist/index35.js +31 -0
  166. package/dist/index35.js.map +1 -0
  167. package/dist/index36.js +57 -0
  168. package/dist/index36.js.map +1 -0
  169. package/dist/index37.js +52 -0
  170. package/dist/index37.js.map +1 -0
  171. package/dist/index38.js +16 -0
  172. package/dist/index38.js.map +1 -0
  173. package/dist/index39.js +85 -0
  174. package/dist/index39.js.map +1 -0
  175. package/dist/index4.js +36 -0
  176. package/dist/index4.js.map +1 -0
  177. package/dist/index40.js +52 -0
  178. package/dist/index40.js.map +1 -0
  179. package/dist/index41.js +22 -0
  180. package/dist/index41.js.map +1 -0
  181. package/dist/index42.js +37 -0
  182. package/dist/index42.js.map +1 -0
  183. package/dist/index43.js +18 -0
  184. package/dist/index43.js.map +1 -0
  185. package/dist/index44.js +94 -0
  186. package/dist/index44.js.map +1 -0
  187. package/dist/index45.js +72 -0
  188. package/dist/index45.js.map +1 -0
  189. package/dist/index46.js +125 -0
  190. package/dist/index46.js.map +1 -0
  191. package/dist/index47.js +43 -0
  192. package/dist/index47.js.map +1 -0
  193. package/dist/index48.js +59 -0
  194. package/dist/index48.js.map +1 -0
  195. package/dist/index49.js +19 -0
  196. package/dist/index49.js.map +1 -0
  197. package/dist/index5.js +24 -0
  198. package/dist/index5.js.map +1 -0
  199. package/dist/index50.js +68 -0
  200. package/dist/index50.js.map +1 -0
  201. package/dist/index51.js +57 -0
  202. package/dist/index51.js.map +1 -0
  203. package/dist/index52.js +40 -0
  204. package/dist/index52.js.map +1 -0
  205. package/dist/index53.js +69 -0
  206. package/dist/index53.js.map +1 -0
  207. package/dist/index54.js +25 -0
  208. package/dist/index54.js.map +1 -0
  209. package/dist/index55.js +107 -0
  210. package/dist/index55.js.map +1 -0
  211. package/dist/index56.js +71 -0
  212. package/dist/index56.js.map +1 -0
  213. package/dist/index57.js +239 -0
  214. package/dist/index57.js.map +1 -0
  215. package/dist/index58.js +105 -0
  216. package/dist/index58.js.map +1 -0
  217. package/dist/index59.js +39 -0
  218. package/dist/index59.js.map +1 -0
  219. package/dist/index6.js +47 -0
  220. package/dist/index6.js.map +1 -0
  221. package/dist/index60.js +21 -0
  222. package/dist/index60.js.map +1 -0
  223. package/dist/index61.js +63 -0
  224. package/dist/index61.js.map +1 -0
  225. package/dist/index62.js +64 -0
  226. package/dist/index62.js.map +1 -0
  227. package/dist/index63.js +78 -0
  228. package/dist/index63.js.map +1 -0
  229. package/dist/index64.js +112 -0
  230. package/dist/index64.js.map +1 -0
  231. package/dist/index65.js +43 -0
  232. package/dist/index65.js.map +1 -0
  233. package/dist/index66.js +51 -0
  234. package/dist/index66.js.map +1 -0
  235. package/dist/index67.js +79 -0
  236. package/dist/index67.js.map +1 -0
  237. package/dist/index68.js +57 -0
  238. package/dist/index68.js.map +1 -0
  239. package/dist/index69.js +71 -0
  240. package/dist/index69.js.map +1 -0
  241. package/dist/index7.js +80 -0
  242. package/dist/index7.js.map +1 -0
  243. package/dist/index70.js +39 -0
  244. package/dist/index70.js.map +1 -0
  245. package/dist/index71.js +17 -0
  246. package/dist/index71.js.map +1 -0
  247. package/dist/index72.js +2267 -0
  248. package/dist/index72.js.map +1 -0
  249. package/dist/index8.js +82 -0
  250. package/dist/index8.js.map +1 -0
  251. package/dist/index9.js +97 -0
  252. package/dist/index9.js.map +1 -0
  253. package/dist/lib/utils.d.ts +2 -0
  254. package/dist/logos/axtec-logo.png +0 -0
  255. package/dist/logos/mhv-icon.svg +5 -0
  256. package/dist/logos/mhv-logo.png +0 -0
  257. package/dist/logos/mhv-logo.svg +23 -0
  258. package/package.json +63 -0
@@ -0,0 +1,64 @@
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import { cn as t } from "./index3.js";
3
+ function N({
4
+ columns: l,
5
+ data: h,
6
+ keyExtractor: p,
7
+ striped: i = !1,
8
+ hoverable: b = !0,
9
+ compact: s = !1,
10
+ className: n,
11
+ emptyMessage: x = "No data available"
12
+ }) {
13
+ return /* @__PURE__ */ e("div", { className: t("overflow-x-auto", n), children: /* @__PURE__ */ o("table", { className: "w-full text-left", children: [
14
+ /* @__PURE__ */ e("thead", { children: /* @__PURE__ */ e("tr", { className: "border-b border-slate-200 bg-slate-50", children: l.map((a) => /* @__PURE__ */ e(
15
+ "th",
16
+ {
17
+ className: t(
18
+ "font-semibold text-slate-700 text-sm",
19
+ s ? "px-4 py-2" : "px-6 py-3",
20
+ a.headerClassName
21
+ ),
22
+ children: a.header
23
+ },
24
+ a.key
25
+ )) }) }),
26
+ /* @__PURE__ */ e("tbody", { children: h.length === 0 ? /* @__PURE__ */ e("tr", { children: /* @__PURE__ */ e(
27
+ "td",
28
+ {
29
+ colSpan: l.length,
30
+ className: t(
31
+ "text-center text-slate-500",
32
+ s ? "px-4 py-8" : "px-6 py-12"
33
+ ),
34
+ children: x
35
+ }
36
+ ) }) : h.map((a, d) => /* @__PURE__ */ e(
37
+ "tr",
38
+ {
39
+ className: t(
40
+ "border-b border-slate-100 transition-colors duration-150",
41
+ i && d % 2 === 1 && "bg-slate-50",
42
+ b && "hover:bg-slate-50"
43
+ ),
44
+ children: l.map((r) => /* @__PURE__ */ e(
45
+ "td",
46
+ {
47
+ className: t(
48
+ "text-slate-900",
49
+ s ? "px-4 py-2" : "px-6 py-4",
50
+ r.className
51
+ ),
52
+ children: r.render ? r.render(a, d) : a[r.key]
53
+ },
54
+ r.key
55
+ ))
56
+ },
57
+ p(a, d)
58
+ )) })
59
+ ] }) });
60
+ }
61
+ export {
62
+ N as Table
63
+ };
64
+ //# sourceMappingURL=index62.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index62.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;"}
@@ -0,0 +1,78 @@
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
12
+ }) {
13
+ const [b, p] = u(i);
14
+ return /* @__PURE__ */ c(
15
+ f,
16
+ {
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
+ ]
72
+ }
73
+ );
74
+ }
75
+ export {
76
+ j as Tabs
77
+ };
78
+ //# sourceMappingURL=index63.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index63.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;"}
@@ -0,0 +1,112 @@
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: [
22
+ /* @__PURE__ */ r(
23
+ D,
24
+ {
25
+ badge: m > 0 ? /* @__PURE__ */ s(h, { variant: "danger", size: "sm", children: [
26
+ m,
27
+ " overdue"
28
+ ] }) : void 0,
29
+ children: a
30
+ }
31
+ ),
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
+ /* @__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",
91
+ {
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"
98
+ ),
99
+ children: [
100
+ "View all ",
101
+ l.length,
102
+ " tasks"
103
+ ]
104
+ }
105
+ )
106
+ ] })
107
+ ] });
108
+ };
109
+ export {
110
+ z as TaskList
111
+ };
112
+ //# sourceMappingURL=index64.js.map
@@ -0,0 +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 <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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"}
@@ -0,0 +1,43 @@
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
26
+ }) {
27
+ return /* @__PURE__ */ r(
28
+ a,
29
+ {
30
+ className: s(
31
+ n[e],
32
+ d[o],
33
+ i[m],
34
+ l
35
+ ),
36
+ children: t
37
+ }
38
+ );
39
+ }
40
+ export {
41
+ b as Text
42
+ };
43
+ //# sourceMappingURL=index65.js.map
@@ -0,0 +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;"}
@@ -0,0 +1,51 @@
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
+ ),
16
+ /* @__PURE__ */ r(
17
+ "textarea",
18
+ {
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
32
+ }
33
+ ),
34
+ (t || s) && /* @__PURE__ */ r(
35
+ "p",
36
+ {
37
+ className: a(
38
+ "mt-1.5 text-sm",
39
+ t ? "text-red-600" : "text-slate-500"
40
+ ),
41
+ children: t || s
42
+ }
43
+ )
44
+ ] });
45
+ }
46
+ );
47
+ f.displayName = "Textarea";
48
+ export {
49
+ f as Textarea
50
+ };
51
+ //# sourceMappingURL=index66.js.map
@@ -0,0 +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;"}
@@ -0,0 +1,79 @@
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
+ }
20
+ };
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
29
+ }) {
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
+ }
71
+ ),
72
+ n && /* @__PURE__ */ t(r.Description, { className: "text-sm text-slate-500", children: n })
73
+ ] })
74
+ ] }) });
75
+ }
76
+ export {
77
+ p as Toggle
78
+ };
79
+ //# sourceMappingURL=index67.js.map
@@ -0,0 +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;"}
@@ -0,0 +1,57 @@
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
+ import { cn as o } from "./index3.js";
3
+ const f = ({
4
+ label: r,
5
+ checked: t,
6
+ onChange: s,
7
+ disabled: n = !1,
8
+ className: i
9
+ }) => {
10
+ const a = () => {
11
+ n || s(!t);
12
+ };
13
+ return /* @__PURE__ */ l(
14
+ "div",
15
+ {
16
+ className: o(
17
+ "flex items-center justify-between gap-4",
18
+ n && "opacity-50",
19
+ i
20
+ ),
21
+ children: [
22
+ /* @__PURE__ */ e("span", { className: "text-sm text-slate-700", children: r }),
23
+ /* @__PURE__ */ e(
24
+ "button",
25
+ {
26
+ type: "button",
27
+ role: "switch",
28
+ "aria-checked": t,
29
+ disabled: n,
30
+ onClick: a,
31
+ className: o(
32
+ "relative inline-flex h-6 w-11 items-center rounded-full",
33
+ "transition-colors duration-200 ease-in-out",
34
+ "focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
35
+ t ? "bg-primary-500" : "bg-slate-200",
36
+ n ? "cursor-not-allowed" : "cursor-pointer"
37
+ ),
38
+ children: /* @__PURE__ */ e(
39
+ "span",
40
+ {
41
+ className: o(
42
+ "inline-block h-4 w-4 rounded-full bg-white shadow-sm",
43
+ "transform transition-transform duration-200 ease-in-out",
44
+ t ? "translate-x-6" : "translate-x-1"
45
+ )
46
+ }
47
+ )
48
+ }
49
+ )
50
+ ]
51
+ }
52
+ );
53
+ };
54
+ export {
55
+ f as ToggleButton
56
+ };
57
+ //# sourceMappingURL=index68.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index68.js","sources":["../src/components/ToggleButton/ToggleButton.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\n\nexport interface ToggleButtonProps {\n label: string\n checked: boolean\n onChange: (checked: boolean) => void\n disabled?: boolean\n className?: string\n}\n\nexport const ToggleButton = ({\n label,\n checked,\n onChange,\n disabled = false,\n className,\n}: ToggleButtonProps) => {\n const handleClick = () => {\n if (!disabled) {\n onChange(!checked)\n }\n }\n\n return (\n <div\n className={cn(\n 'flex items-center justify-between gap-4',\n disabled && 'opacity-50',\n className\n )}\n >\n <span className=\"text-sm text-slate-700\">\n {label}\n </span>\n\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={handleClick}\n className={cn(\n 'relative inline-flex h-6 w-11 items-center rounded-full',\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 ? 'cursor-not-allowed' : 'cursor-pointer'\n )}\n >\n <span\n className={cn(\n 'inline-block h-4 w-4 rounded-full bg-white shadow-sm',\n 'transform transition-transform duration-200 ease-in-out',\n checked ? 'translate-x-6' : 'translate-x-1'\n )}\n />\n </button>\n </div>\n )\n}\n"],"names":["ToggleButton","label","checked","onChange","disabled","className","handleClick","jsxs","cn","jsx"],"mappings":";;AAUO,MAAMA,IAAe,CAAC;AAAA,EAC3B,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,WAAAC;AACF,MAAyB;AACvB,QAAMC,IAAc,MAAM;AACxB,IAAKF,KACHD,EAAS,CAACD,CAAO;AAAA,EAErB;AAEA,SACE,gBAAAK;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAJ,KAAY;AAAA,QACZC;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA,gBAAAI,EAAC,QAAA,EAAK,WAAU,0BACb,UAAAR,GACH;AAAA,QAEA,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,gBAAcP;AAAA,YACd,UAAAE;AAAA,YACA,SAASE;AAAA,YACT,WAAWE;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACAN,IAAU,mBAAmB;AAAA,cAC7BE,IAAW,uBAAuB;AAAA,YAAA;AAAA,YAGpC,UAAA,gBAAAK;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWD;AAAA,kBACT;AAAA,kBACA;AAAA,kBACAN,IAAU,kBAAkB;AAAA,gBAAA;AAAA,cAC9B;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,71 @@
1
+ import { jsxs as s, jsx as c } from "react/jsx-runtime";
2
+ import { useState as n } from "react";
3
+ import { cn as i } from "./index3.js";
4
+ const x = {
5
+ top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
6
+ bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
7
+ left: "right-full top-1/2 -translate-y-1/2 mr-2",
8
+ right: "left-full top-1/2 -translate-y-1/2 ml-2"
9
+ }, h = {
10
+ top: "top-full left-1/2 -translate-x-1/2 border-t-slate-800 border-x-transparent border-b-transparent",
11
+ bottom: "bottom-full left-1/2 -translate-x-1/2 border-b-slate-800 border-x-transparent border-t-transparent",
12
+ left: "left-full top-1/2 -translate-y-1/2 border-l-slate-800 border-y-transparent border-r-transparent",
13
+ right: "right-full top-1/2 -translate-y-1/2 border-r-slate-800 border-y-transparent border-l-transparent"
14
+ };
15
+ function T({
16
+ content: p,
17
+ children: u,
18
+ position: t = "top",
19
+ delay: b = 200,
20
+ className: d
21
+ }) {
22
+ const [f, e] = n(!1), [r, o] = n(null), l = () => {
23
+ const m = setTimeout(() => e(!0), b);
24
+ o(m);
25
+ }, a = () => {
26
+ r && (clearTimeout(r), o(null)), e(!1);
27
+ };
28
+ return /* @__PURE__ */ s(
29
+ "div",
30
+ {
31
+ className: "relative inline-flex",
32
+ onMouseEnter: l,
33
+ onMouseLeave: a,
34
+ onFocus: l,
35
+ onBlur: a,
36
+ children: [
37
+ u,
38
+ f && /* @__PURE__ */ s(
39
+ "div",
40
+ {
41
+ className: i(
42
+ "absolute z-50 px-3 py-1.5",
43
+ "bg-slate-800 text-white text-sm rounded-lg",
44
+ "whitespace-nowrap",
45
+ "animate-in fade-in-0 zoom-in-95 duration-150",
46
+ x[t],
47
+ d
48
+ ),
49
+ role: "tooltip",
50
+ children: [
51
+ p,
52
+ /* @__PURE__ */ c(
53
+ "span",
54
+ {
55
+ className: i(
56
+ "absolute w-0 h-0 border-4",
57
+ h[t]
58
+ )
59
+ }
60
+ )
61
+ ]
62
+ }
63
+ )
64
+ ]
65
+ }
66
+ );
67
+ }
68
+ export {
69
+ T as Tooltip
70
+ };
71
+ //# sourceMappingURL=index69.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index69.js","sources":["../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface TooltipProps {\n content: ReactNode\n children: ReactNode\n position?: 'top' | 'bottom' | 'left' | 'right'\n delay?: number\n className?: string\n}\n\nconst positionStyles = {\n top: 'bottom-full left-1/2 -translate-x-1/2 mb-2',\n bottom: 'top-full left-1/2 -translate-x-1/2 mt-2',\n left: 'right-full top-1/2 -translate-y-1/2 mr-2',\n right: 'left-full top-1/2 -translate-y-1/2 ml-2',\n}\n\nconst arrowStyles = {\n top: 'top-full left-1/2 -translate-x-1/2 border-t-slate-800 border-x-transparent border-b-transparent',\n bottom: 'bottom-full left-1/2 -translate-x-1/2 border-b-slate-800 border-x-transparent border-t-transparent',\n left: 'left-full top-1/2 -translate-y-1/2 border-l-slate-800 border-y-transparent border-r-transparent',\n right: 'right-full top-1/2 -translate-y-1/2 border-r-slate-800 border-y-transparent border-l-transparent',\n}\n\nexport function Tooltip({\n content,\n children,\n position = 'top',\n delay = 200,\n className,\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false)\n const [timeoutId, setTimeoutId] = useState<ReturnType<typeof setTimeout> | null>(null)\n\n const showTooltip = () => {\n const id = setTimeout(() => setIsVisible(true), delay)\n setTimeoutId(id)\n }\n\n const hideTooltip = () => {\n if (timeoutId) {\n clearTimeout(timeoutId)\n setTimeoutId(null)\n }\n setIsVisible(false)\n }\n\n return (\n <div\n className=\"relative inline-flex\"\n onMouseEnter={showTooltip}\n onMouseLeave={hideTooltip}\n onFocus={showTooltip}\n onBlur={hideTooltip}\n >\n {children}\n {isVisible && (\n <div\n className={cn(\n 'absolute z-50 px-3 py-1.5',\n 'bg-slate-800 text-white text-sm rounded-lg',\n 'whitespace-nowrap',\n 'animate-in fade-in-0 zoom-in-95 duration-150',\n positionStyles[position],\n className\n )}\n role=\"tooltip\"\n >\n {content}\n <span\n className={cn(\n 'absolute w-0 h-0 border-4',\n arrowStyles[position]\n )}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["positionStyles","arrowStyles","Tooltip","content","children","position","delay","className","isVisible","setIsVisible","useState","timeoutId","setTimeoutId","showTooltip","id","hideTooltip","jsxs","cn","jsx"],"mappings":";;;AAWA,MAAMA,IAAiB;AAAA,EACrB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT,GAEMC,IAAc;AAAA,EAClB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AACT;AAEO,SAASC,EAAQ;AAAA,EACtB,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,WAAAC;AACF,GAAiB;AACf,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1C,CAACC,GAAWC,CAAY,IAAIF,EAA+C,IAAI,GAE/EG,IAAc,MAAM;AACxB,UAAMC,IAAK,WAAW,MAAML,EAAa,EAAI,GAAGH,CAAK;AACrD,IAAAM,EAAaE,CAAE;AAAA,EACjB,GAEMC,IAAc,MAAM;AACxB,IAAIJ,MACF,aAAaA,CAAS,GACtBC,EAAa,IAAI,IAEnBH,EAAa,EAAK;AAAA,EACpB;AAEA,SACE,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,cAAcH;AAAA,MACd,cAAcE;AAAA,MACd,SAASF;AAAA,MACT,QAAQE;AAAA,MAEP,UAAA;AAAA,QAAAX;AAAA,QACAI,KACC,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACAjB,EAAeK,CAAQ;AAAA,cACvBE;AAAA,YAAA;AAAA,YAEF,MAAK;AAAA,YAEJ,UAAA;AAAA,cAAAJ;AAAA,cACD,gBAAAe;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWD;AAAA,oBACT;AAAA,oBACAhB,EAAYI,CAAQ;AAAA,kBAAA;AAAA,gBACtB;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}