@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 @@
1
+ {"version":3,"file":"index23.js","sources":["../src/components/ConfirmModal/ConfirmModal.tsx"],"sourcesContent":["import { Fragment, type ReactNode } from 'react'\nimport {\n Dialog,\n DialogPanel,\n DialogTitle,\n Transition,\n TransitionChild,\n} from '@headlessui/react'\nimport { ExclamationTriangleIcon } from '@heroicons/react/24/outline'\nimport { cn } from '@/lib/utils'\nimport { Button } from '../Button/Button'\n\nexport interface ConfirmModalProps {\n open: boolean\n onClose: () => void\n onConfirm: () => void\n title: string\n message?: string | ReactNode\n confirmText?: string\n cancelText?: string\n /** Show warning icon */\n showIcon?: boolean\n /** Destructive action styling (red confirm button) */\n destructive?: boolean\n /** Loading state for confirm button */\n isLoading?: boolean\n className?: string\n}\n\nexport function ConfirmModal({\n open,\n onClose,\n onConfirm,\n title,\n message,\n confirmText = 'Confirm',\n cancelText = 'Cancel',\n showIcon = false,\n destructive = false,\n isLoading = false,\n className,\n}: ConfirmModalProps) {\n return (\n <Transition show={open} as={Fragment}>\n <Dialog onClose={onClose} className=\"relative z-50\">\n {/* Backdrop */}\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-black/50\" aria-hidden=\"true\" />\n </TransitionChild>\n\n {/* Modal */}\n <div className=\"fixed inset-0 flex items-center justify-center p-4\">\n <TransitionChild\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0 scale-95\"\n enterTo=\"opacity-100 scale-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100 scale-100\"\n leaveTo=\"opacity-0 scale-95\"\n >\n <DialogPanel\n className={cn(\n 'w-full max-w-md bg-white rounded-2xl shadow-xl p-6',\n 'transform transition-all',\n className\n )}\n >\n <div className={cn(showIcon && 'flex gap-4')}>\n {/* Icon */}\n {showIcon && (\n <div className=\"flex-shrink-0\">\n <div className=\"rounded-full bg-amber-100 p-2\">\n <ExclamationTriangleIcon className=\"h-6 w-6 text-amber-600\" />\n </div>\n </div>\n )}\n\n <div className=\"flex-1\">\n {/* Title */}\n <DialogTitle className=\"text-lg font-semibold text-slate-900 mb-2\">\n {title}\n </DialogTitle>\n\n {/* Message */}\n {message && (\n <div className=\"text-sm text-slate-600 mb-6\">{message}</div>\n )}\n </div>\n </div>\n\n {/* Buttons */}\n <div className=\"flex justify-end gap-3 mt-6\">\n <Button variant=\"outline\" onClick={onClose} disabled={isLoading}>\n {cancelText}\n </Button>\n <Button\n variant={destructive ? 'danger' : 'primary'}\n onClick={onConfirm}\n isLoading={isLoading}\n >\n {confirmText}\n </Button>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </Dialog>\n </Transition>\n )\n}\n"],"names":["ConfirmModal","open","onClose","onConfirm","title","message","confirmText","cancelText","showIcon","destructive","isLoading","className","jsx","Transition","Fragment","jsxs","Dialog","TransitionChild","DialogPanel","cn","ExclamationTriangleIcon","DialogTitle","Button"],"mappings":";;;;;;AA6BO,SAASA,EAAa;AAAA,EAC3B,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,UAAAC,IAAW;AAAA,EACX,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,WAAAC;AACF,GAAsB;AACpB,SACE,gBAAAC,EAACC,GAAA,EAAW,MAAMZ,GAAM,IAAIa,GAC1B,UAAA,gBAAAC,EAACC,GAAA,EAAO,SAAAd,GAAkB,WAAU,iBAElC,UAAA;AAAA,IAAA,gBAAAU;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,IAAIH;AAAA,QACJ,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAQ;AAAA,QAER,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,6BAA4B,eAAY,OAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,IAIhE,gBAAAA,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA,gBAAAA;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,IAAIH;AAAA,QACJ,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAQ;AAAA,QAER,UAAA,gBAAAC;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACA;AAAA,cACAR;AAAA,YAAA;AAAA,YAGF,UAAA;AAAA,cAAA,gBAAAI,EAAC,OAAA,EAAI,WAAWI,EAAGX,KAAY,YAAY,GAExC,UAAA;AAAA,gBAAAA,KACC,gBAAAI,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iCACb,UAAA,gBAAAA,EAACQ,GAAA,EAAwB,WAAU,yBAAA,CAAyB,GAC9D,GACF;AAAA,gBAGF,gBAAAL,EAAC,OAAA,EAAI,WAAU,UAEb,UAAA;AAAA,kBAAA,gBAAAH,EAACS,GAAA,EAAY,WAAU,6CACpB,UAAAjB,GACH;AAAA,kBAGCC,KACC,gBAAAO,EAAC,OAAA,EAAI,WAAU,+BAA+B,UAAAP,EAAA,CAAQ;AAAA,gBAAA,EAAA,CAE1D;AAAA,cAAA,GACF;AAAA,cAGA,gBAAAU,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,gBAAA,gBAAAH,EAACU,KAAO,SAAQ,WAAU,SAASpB,GAAS,UAAUQ,GACnD,UAAAH,EAAA,CACH;AAAA,gBACA,gBAAAK;AAAA,kBAACU;AAAA,kBAAA;AAAA,oBACC,SAASb,IAAc,WAAW;AAAA,oBAClC,SAASN;AAAA,oBACT,WAAAO;AAAA,oBAEC,UAAAJ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACH,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,EACF,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;"}
@@ -0,0 +1,223 @@
1
+ import { jsxs as f, jsx as n, Fragment as q } from "react/jsx-runtime";
2
+ import { useState as D, useRef as B, useEffect as G } from "react";
3
+ import { cn as w } from "./index3.js";
4
+ import { CalendarIcon as Q, ChevronLeftIcon as U, ChevronRightIcon as V } from "@heroicons/react/24/outline";
5
+ const F = [
6
+ "January",
7
+ "February",
8
+ "March",
9
+ "April",
10
+ "May",
11
+ "June",
12
+ "July",
13
+ "August",
14
+ "September",
15
+ "October",
16
+ "November",
17
+ "December"
18
+ ], X = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], Z = (s, l) => new Date(s, l + 1, 0).getDate(), _ = (s, l) => new Date(s, l, 1).getDay(), ee = (s, l) => {
19
+ const i = String(s.getDate()).padStart(2, "0"), r = String(s.getMonth() + 1).padStart(2, "0"), g = s.getFullYear();
20
+ switch (l) {
21
+ case "MM/DD/YYYY":
22
+ return `${r}/${i}/${g}`;
23
+ case "YYYY-MM-DD":
24
+ return `${g}-${r}-${i}`;
25
+ default:
26
+ return `${i}/${r}/${g}`;
27
+ }
28
+ }, te = (s) => {
29
+ if (!s) return null;
30
+ const l = [
31
+ /^(\d{2})\/(\d{2})\/(\d{4})$/,
32
+ // DD/MM/YYYY
33
+ /^(\d{4})-(\d{2})-(\d{2})$/
34
+ // YYYY-MM-DD
35
+ ];
36
+ for (const i of l) {
37
+ const r = s.match(i);
38
+ if (r)
39
+ return i.source.includes("^(\\d{4})") ? new Date(parseInt(r[1]), parseInt(r[2]) - 1, parseInt(r[3])) : new Date(parseInt(r[3]), parseInt(r[2]) - 1, parseInt(r[1]));
40
+ }
41
+ return null;
42
+ }, ae = ({
43
+ value: s,
44
+ onChange: l,
45
+ label: i,
46
+ placeholder: r = "DD/MM/YYYY",
47
+ disabled: g = !1,
48
+ error: Y,
49
+ disableFutureDates: I = !1,
50
+ disablePastDates: $ = !1,
51
+ format: k = "DD/MM/YYYY",
52
+ className: j
53
+ }) => {
54
+ const u = /* @__PURE__ */ new Date(), h = s ? te(s) : null, [S, M] = D(!1), [m, p] = D("days"), [o, y] = D((h == null ? void 0 : h.getFullYear()) ?? u.getFullYear()), [a, b] = D((h == null ? void 0 : h.getMonth()) ?? u.getMonth()), [x, O] = D(h), v = B(null);
55
+ G(() => {
56
+ const t = (e) => {
57
+ v.current && !v.current.contains(e.target) && (M(!1), p("days"));
58
+ };
59
+ return document.addEventListener("mousedown", t), () => document.removeEventListener("mousedown", t);
60
+ }, []);
61
+ const E = (t) => {
62
+ const e = new Date(o, a, t);
63
+ O(e), l(ee(e, k)), M(!1);
64
+ }, T = (t) => {
65
+ b(t), p("days");
66
+ }, A = (t) => {
67
+ y(t), p("months");
68
+ }, J = () => {
69
+ m === "days" ? a === 0 ? (b(11), y(o - 1)) : b(a - 1) : m === "years" && y(o - 12);
70
+ }, L = () => {
71
+ m === "days" ? a === 11 ? (b(0), y(o + 1)) : b(a + 1) : m === "years" && y(o + 12);
72
+ }, R = (t) => {
73
+ const e = new Date(u.getFullYear(), u.getMonth(), u.getDate());
74
+ return !!(I && t > e || $ && t < e);
75
+ }, P = Z(o, a), W = _(o, a), z = () => {
76
+ const t = [];
77
+ for (let e = 0; e < W; e++)
78
+ t.push(/* @__PURE__ */ n("div", { className: "w-8 h-8" }, `empty-${e}`));
79
+ for (let e = 1; e <= P; e++) {
80
+ const c = new Date(o, a, e), d = x && c.getDate() === x.getDate() && c.getMonth() === x.getMonth() && c.getFullYear() === x.getFullYear(), C = c.getDate() === u.getDate() && c.getMonth() === u.getMonth() && c.getFullYear() === u.getFullYear(), N = R(c);
81
+ t.push(
82
+ /* @__PURE__ */ n(
83
+ "button",
84
+ {
85
+ type: "button",
86
+ disabled: N,
87
+ onClick: () => E(e),
88
+ className: w(
89
+ "w-8 h-8 rounded-full text-sm flex items-center justify-center",
90
+ "transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500",
91
+ d && "bg-primary-500 text-white",
92
+ !d && C && "border border-primary-500 text-primary-500",
93
+ !d && !C && !N && "hover:bg-slate-100",
94
+ N && "text-slate-300 cursor-not-allowed"
95
+ ),
96
+ children: e
97
+ },
98
+ e
99
+ )
100
+ );
101
+ }
102
+ return t;
103
+ }, H = () => F.map((t, e) => /* @__PURE__ */ n(
104
+ "button",
105
+ {
106
+ type: "button",
107
+ onClick: () => T(e),
108
+ className: w(
109
+ "px-3 py-2 rounded text-sm",
110
+ "transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500",
111
+ a === e && "bg-primary-500 text-white",
112
+ a !== e && "hover:bg-slate-100"
113
+ ),
114
+ children: t.slice(0, 3)
115
+ },
116
+ t
117
+ )), K = () => {
118
+ const t = o - 6, e = [];
119
+ for (let c = 0; c < 12; c++) {
120
+ const d = t + c;
121
+ e.push(
122
+ /* @__PURE__ */ n(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ onClick: () => A(d),
127
+ className: w(
128
+ "px-3 py-2 rounded text-sm",
129
+ "transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500",
130
+ o === d && "bg-primary-500 text-white",
131
+ o !== d && "hover:bg-slate-100"
132
+ ),
133
+ children: d
134
+ },
135
+ d
136
+ )
137
+ );
138
+ }
139
+ return e;
140
+ };
141
+ return /* @__PURE__ */ f("div", { ref: v, className: w("relative", j), children: [
142
+ i && /* @__PURE__ */ n("label", { className: "block text-sm font-semibold text-slate-700 mb-1.5", children: i }),
143
+ /* @__PURE__ */ f(
144
+ "button",
145
+ {
146
+ type: "button",
147
+ disabled: g,
148
+ onClick: () => M(!S),
149
+ className: w(
150
+ "w-full flex items-center justify-between px-4 py-2.5",
151
+ "bg-white border rounded-lg text-left",
152
+ "transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500",
153
+ Y ? "border-red-500" : "border-slate-300",
154
+ g && "bg-slate-100 cursor-not-allowed opacity-60"
155
+ ),
156
+ children: [
157
+ /* @__PURE__ */ n("span", { className: s ? "text-slate-900" : "text-slate-400", children: s || r }),
158
+ /* @__PURE__ */ n(Q, { className: "w-5 h-5 text-slate-400" })
159
+ ]
160
+ }
161
+ ),
162
+ Y && /* @__PURE__ */ n("p", { className: "text-sm text-red-500 mt-1", children: Y }),
163
+ S && /* @__PURE__ */ f("div", { className: "absolute z-50 mt-2 p-4 bg-white border border-slate-200 rounded-lg shadow-lg", children: [
164
+ /* @__PURE__ */ f("div", { className: "flex items-center justify-between mb-4", children: [
165
+ /* @__PURE__ */ n(
166
+ "button",
167
+ {
168
+ type: "button",
169
+ onClick: J,
170
+ className: "p-1 rounded hover:bg-slate-100",
171
+ children: /* @__PURE__ */ n(U, { className: "w-5 h-5" })
172
+ }
173
+ ),
174
+ /* @__PURE__ */ f("div", { className: "flex gap-1", children: [
175
+ m !== "months" && /* @__PURE__ */ n(
176
+ "button",
177
+ {
178
+ type: "button",
179
+ onClick: () => p("months"),
180
+ className: "px-2 py-1 text-sm font-medium hover:bg-slate-100 rounded",
181
+ children: F[a]
182
+ }
183
+ ),
184
+ /* @__PURE__ */ n(
185
+ "button",
186
+ {
187
+ type: "button",
188
+ onClick: () => p("years"),
189
+ className: "px-2 py-1 text-sm font-medium hover:bg-slate-100 rounded",
190
+ children: o
191
+ }
192
+ )
193
+ ] }),
194
+ /* @__PURE__ */ n(
195
+ "button",
196
+ {
197
+ type: "button",
198
+ onClick: L,
199
+ className: "p-1 rounded hover:bg-slate-100",
200
+ children: /* @__PURE__ */ n(V, { className: "w-5 h-5" })
201
+ }
202
+ )
203
+ ] }),
204
+ m === "days" && /* @__PURE__ */ f(q, { children: [
205
+ /* @__PURE__ */ n("div", { className: "grid grid-cols-7 gap-1 mb-2", children: X.map((t) => /* @__PURE__ */ n(
206
+ "div",
207
+ {
208
+ className: "w-8 h-8 flex items-center justify-center text-xs font-medium text-slate-500",
209
+ children: t
210
+ },
211
+ t
212
+ )) }),
213
+ /* @__PURE__ */ n("div", { className: "grid grid-cols-7 gap-1", children: z() })
214
+ ] }),
215
+ m === "months" && /* @__PURE__ */ n("div", { className: "grid grid-cols-3 gap-2", children: H() }),
216
+ m === "years" && /* @__PURE__ */ n("div", { className: "grid grid-cols-3 gap-2", children: K() })
217
+ ] })
218
+ ] });
219
+ };
220
+ export {
221
+ ae as DatePicker
222
+ };
223
+ //# sourceMappingURL=index24.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index24.js","sources":["../src/components/DatePicker/DatePicker.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react'\nimport { cn } from '@/lib/utils'\nimport { CalendarIcon, ChevronLeftIcon, ChevronRightIcon } from '@heroicons/react/24/outline'\n\nexport interface DatePickerProps {\n value?: string\n onChange: (date: string) => void\n label?: string\n placeholder?: string\n disabled?: boolean\n error?: string\n disableFutureDates?: boolean\n disablePastDates?: boolean\n format?: 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY-MM-DD'\n className?: string\n}\n\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n]\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n\nconst getDaysInMonth = (year: number, month: number) => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number) => {\n return new Date(year, month, 1).getDay()\n}\n\nconst formatDate = (date: Date, format: string) => {\n const day = String(date.getDate()).padStart(2, '0')\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const year = date.getFullYear()\n\n switch (format) {\n case 'MM/DD/YYYY':\n return `${month}/${day}/${year}`\n case 'YYYY-MM-DD':\n return `${year}-${month}-${day}`\n default:\n return `${day}/${month}/${year}`\n }\n}\n\nconst parseDate = (dateString: string): Date | null => {\n if (!dateString) return null\n\n // Try different formats\n const formats = [\n /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/, // DD/MM/YYYY\n /^(\\d{4})-(\\d{2})-(\\d{2})$/, // YYYY-MM-DD\n ]\n\n for (const regex of formats) {\n const match = dateString.match(regex)\n if (match) {\n if (regex.source.includes('^(\\\\d{4})')) {\n // YYYY-MM-DD\n return new Date(parseInt(match[1]), parseInt(match[2]) - 1, parseInt(match[3]))\n } else {\n // DD/MM/YYYY\n return new Date(parseInt(match[3]), parseInt(match[2]) - 1, parseInt(match[1]))\n }\n }\n }\n return null\n}\n\nexport const DatePicker = ({\n value,\n onChange,\n label,\n placeholder = 'DD/MM/YYYY',\n disabled = false,\n error,\n disableFutureDates = false,\n disablePastDates = false,\n format = 'DD/MM/YYYY',\n className,\n}: DatePickerProps) => {\n const today = new Date()\n const parsedValue = value ? parseDate(value) : null\n\n const [isOpen, setIsOpen] = useState(false)\n const [viewMode, setViewMode] = useState<'days' | 'months' | 'years'>('days')\n const [viewYear, setViewYear] = useState(parsedValue?.getFullYear() ?? today.getFullYear())\n const [viewMonth, setViewMonth] = useState(parsedValue?.getMonth() ?? today.getMonth())\n const [selectedDate, setSelectedDate] = useState<Date | null>(parsedValue)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false)\n setViewMode('days')\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }, [])\n\n const handleDateSelect = (day: number) => {\n const newDate = new Date(viewYear, viewMonth, day)\n setSelectedDate(newDate)\n onChange(formatDate(newDate, format))\n setIsOpen(false)\n }\n\n const handleMonthSelect = (monthIndex: number) => {\n setViewMonth(monthIndex)\n setViewMode('days')\n }\n\n const handleYearSelect = (year: number) => {\n setViewYear(year)\n setViewMode('months')\n }\n\n const navigatePrevious = () => {\n if (viewMode === 'days') {\n if (viewMonth === 0) {\n setViewMonth(11)\n setViewYear(viewYear - 1)\n } else {\n setViewMonth(viewMonth - 1)\n }\n } else if (viewMode === 'years') {\n setViewYear(viewYear - 12)\n }\n }\n\n const navigateNext = () => {\n if (viewMode === 'days') {\n if (viewMonth === 11) {\n setViewMonth(0)\n setViewYear(viewYear + 1)\n } else {\n setViewMonth(viewMonth + 1)\n }\n } else if (viewMode === 'years') {\n setViewYear(viewYear + 12)\n }\n }\n\n const isDateDisabled = (date: Date) => {\n const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate())\n if (disableFutureDates && date > todayStart) return true\n if (disablePastDates && date < todayStart) return true\n return false\n }\n\n const daysInMonth = getDaysInMonth(viewYear, viewMonth)\n const firstDay = getFirstDayOfMonth(viewYear, viewMonth)\n\n const renderDays = () => {\n const days = []\n\n // Empty cells before first day\n for (let i = 0; i < firstDay; i++) {\n days.push(<div key={`empty-${i}`} className=\"w-8 h-8\" />)\n }\n\n // Days of month\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(viewYear, viewMonth, day)\n const isSelected = selectedDate &&\n date.getDate() === selectedDate.getDate() &&\n date.getMonth() === selectedDate.getMonth() &&\n date.getFullYear() === selectedDate.getFullYear()\n const isToday =\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n const isDisabled = isDateDisabled(date)\n\n days.push(\n <button\n key={day}\n type=\"button\"\n disabled={isDisabled}\n onClick={() => handleDateSelect(day)}\n className={cn(\n 'w-8 h-8 rounded-full text-sm flex items-center justify-center',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500',\n isSelected && 'bg-primary-500 text-white',\n !isSelected && isToday && 'border border-primary-500 text-primary-500',\n !isSelected && !isToday && !isDisabled && 'hover:bg-slate-100',\n isDisabled && 'text-slate-300 cursor-not-allowed'\n )}\n >\n {day}\n </button>\n )\n }\n\n return days\n }\n\n const renderMonths = () => {\n return MONTHS.map((month, index) => (\n <button\n key={month}\n type=\"button\"\n onClick={() => handleMonthSelect(index)}\n className={cn(\n 'px-3 py-2 rounded text-sm',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500',\n viewMonth === index && 'bg-primary-500 text-white',\n viewMonth !== index && 'hover:bg-slate-100'\n )}\n >\n {month.slice(0, 3)}\n </button>\n ))\n }\n\n const renderYears = () => {\n const startYear = viewYear - 6\n const years = []\n for (let i = 0; i < 12; i++) {\n const year = startYear + i\n years.push(\n <button\n key={year}\n type=\"button\"\n onClick={() => handleYearSelect(year)}\n className={cn(\n 'px-3 py-2 rounded text-sm',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500',\n viewYear === year && 'bg-primary-500 text-white',\n viewYear !== year && 'hover:bg-slate-100'\n )}\n >\n {year}\n </button>\n )\n }\n return years\n }\n\n return (\n <div ref={containerRef} className={cn('relative', className)}>\n {label && (\n <label className=\"block text-sm font-semibold text-slate-700 mb-1.5\">\n {label}\n </label>\n )}\n\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'w-full flex items-center justify-between px-4 py-2.5',\n 'bg-white border rounded-lg text-left',\n 'transition-colors focus:outline-none focus:ring-2 focus:ring-primary-500',\n error ? 'border-red-500' : 'border-slate-300',\n disabled && 'bg-slate-100 cursor-not-allowed opacity-60'\n )}\n >\n <span className={value ? 'text-slate-900' : 'text-slate-400'}>\n {value || placeholder}\n </span>\n <CalendarIcon className=\"w-5 h-5 text-slate-400\" />\n </button>\n\n {error && (\n <p className=\"text-sm text-red-500 mt-1\">{error}</p>\n )}\n\n {isOpen && (\n <div className=\"absolute z-50 mt-2 p-4 bg-white border border-slate-200 rounded-lg shadow-lg\">\n {/* Header */}\n <div className=\"flex items-center justify-between mb-4\">\n <button\n type=\"button\"\n onClick={navigatePrevious}\n className=\"p-1 rounded hover:bg-slate-100\"\n >\n <ChevronLeftIcon className=\"w-5 h-5\" />\n </button>\n\n <div className=\"flex gap-1\">\n {viewMode !== 'months' && (\n <button\n type=\"button\"\n onClick={() => setViewMode('months')}\n className=\"px-2 py-1 text-sm font-medium hover:bg-slate-100 rounded\"\n >\n {MONTHS[viewMonth]}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => setViewMode('years')}\n className=\"px-2 py-1 text-sm font-medium hover:bg-slate-100 rounded\"\n >\n {viewYear}\n </button>\n </div>\n\n <button\n type=\"button\"\n onClick={navigateNext}\n className=\"p-1 rounded hover:bg-slate-100\"\n >\n <ChevronRightIcon className=\"w-5 h-5\" />\n </button>\n </div>\n\n {/* Calendar content */}\n {viewMode === 'days' && (\n <>\n <div className=\"grid grid-cols-7 gap-1 mb-2\">\n {WEEKDAYS.map((day) => (\n <div\n key={day}\n className=\"w-8 h-8 flex items-center justify-center text-xs font-medium text-slate-500\"\n >\n {day}\n </div>\n ))}\n </div>\n <div className=\"grid grid-cols-7 gap-1\">\n {renderDays()}\n </div>\n </>\n )}\n\n {viewMode === 'months' && (\n <div className=\"grid grid-cols-3 gap-2\">\n {renderMonths()}\n </div>\n )}\n\n {viewMode === 'years' && (\n <div className=\"grid grid-cols-3 gap-2\">\n {renderYears()}\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n"],"names":["MONTHS","WEEKDAYS","getDaysInMonth","year","month","getFirstDayOfMonth","formatDate","date","format","day","parseDate","dateString","formats","regex","match","DatePicker","value","onChange","label","placeholder","disabled","error","disableFutureDates","disablePastDates","className","today","parsedValue","isOpen","setIsOpen","useState","viewMode","setViewMode","viewYear","setViewYear","viewMonth","setViewMonth","selectedDate","setSelectedDate","containerRef","useRef","useEffect","handleClickOutside","event","handleDateSelect","newDate","handleMonthSelect","monthIndex","handleYearSelect","navigatePrevious","navigateNext","isDateDisabled","todayStart","daysInMonth","firstDay","renderDays","days","i","isSelected","isToday","isDisabled","jsx","cn","renderMonths","index","renderYears","startYear","years","jsxs","CalendarIcon","ChevronLeftIcon","ChevronRightIcon","Fragment"],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { jsxs as s, Fragment as h, jsx as t } from "react/jsx-runtime";
2
+ import { cn as i } from "./index3.js";
3
+ import { XMarkIcon as f } from "@heroicons/react/24/outline";
4
+ const u = ({
5
+ isOpen: a,
6
+ onClose: l,
7
+ children: n,
8
+ width: e = 680,
9
+ position: r = "right",
10
+ className: o
11
+ }) => {
12
+ const c = typeof e == "number" ? `${e}px` : e;
13
+ return /* @__PURE__ */ s(h, { children: [
14
+ a && /* @__PURE__ */ t(
15
+ "div",
16
+ {
17
+ className: "fixed inset-0 z-40 bg-black/55 transition-opacity",
18
+ onClick: l
19
+ }
20
+ ),
21
+ /* @__PURE__ */ s(
22
+ "div",
23
+ {
24
+ className: i(
25
+ "fixed top-0 z-50 h-screen bg-white shadow-2xl",
26
+ "transition-transform duration-300 ease-in-out",
27
+ r === "right" ? "right-0" : "left-0",
28
+ a ? "translate-x-0" : r === "right" ? "translate-x-full" : "-translate-x-full",
29
+ o
30
+ ),
31
+ style: { width: c },
32
+ children: [
33
+ /* @__PURE__ */ t(
34
+ "button",
35
+ {
36
+ onClick: l,
37
+ className: i(
38
+ "absolute top-8 z-50 border-0 bg-transparent cursor-pointer",
39
+ "flex items-center justify-center",
40
+ r === "right" ? "right-9" : "left-9"
41
+ ),
42
+ "aria-label": "Close drawer",
43
+ children: /* @__PURE__ */ t(f, { className: "w-6 h-6 text-slate-500 hover:text-slate-700" })
44
+ }
45
+ ),
46
+ /* @__PURE__ */ t("div", { className: "h-screen overflow-y-auto overflow-x-hidden", children: n })
47
+ ]
48
+ }
49
+ )
50
+ ] });
51
+ };
52
+ export {
53
+ u as Drawer
54
+ };
55
+ //# sourceMappingURL=index25.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index25.js","sources":["../src/components/Drawer/Drawer.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\nimport { XMarkIcon } from '@heroicons/react/24/outline'\n\nexport interface DrawerProps {\n isOpen: boolean\n onClose: () => void\n children: ReactNode\n width?: number | string\n position?: 'left' | 'right'\n className?: string\n}\n\nexport const Drawer = ({\n isOpen,\n onClose,\n children,\n width = 680,\n position = 'right',\n className,\n}: DrawerProps) => {\n const widthStyle = typeof width === 'number' ? `${width}px` : width\n\n return (\n <>\n {/* Backdrop */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black/55 transition-opacity\"\n onClick={onClose}\n />\n )}\n\n {/* Drawer panel */}\n <div\n className={cn(\n 'fixed top-0 z-50 h-screen bg-white shadow-2xl',\n 'transition-transform duration-300 ease-in-out',\n position === 'right' ? 'right-0' : 'left-0',\n isOpen\n ? 'translate-x-0'\n : position === 'right'\n ? 'translate-x-full'\n : '-translate-x-full',\n className\n )}\n style={{ width: widthStyle }}\n >\n <button\n onClick={onClose}\n className={cn(\n 'absolute top-8 z-50 border-0 bg-transparent cursor-pointer',\n 'flex items-center justify-center',\n position === 'right' ? 'right-9' : 'left-9'\n )}\n aria-label=\"Close drawer\"\n >\n <XMarkIcon className=\"w-6 h-6 text-slate-500 hover:text-slate-700\" />\n </button>\n\n <div className=\"h-screen overflow-y-auto overflow-x-hidden\">\n {children}\n </div>\n </div>\n </>\n )\n}\n"],"names":["Drawer","isOpen","onClose","children","width","position","className","widthStyle","jsxs","Fragment","jsx","cn","XMarkIcon"],"mappings":";;;AAaO,MAAMA,IAAS,CAAC;AAAA,EACrB,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAW;AAAA,EACX,WAAAC;AACF,MAAmB;AACjB,QAAMC,IAAa,OAAOH,KAAU,WAAW,GAAGA,CAAK,OAAOA;AAE9D,SACE,gBAAAI,EAAAC,GAAA,EAEG,UAAA;AAAA,IAAAR,KACC,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAASR;AAAA,MAAA;AAAA,IAAA;AAAA,IAKb,gBAAAM;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWG;AAAA,UACT;AAAA,UACA;AAAA,UACAN,MAAa,UAAU,YAAY;AAAA,UACnCJ,IACI,kBACAI,MAAa,UACX,qBACA;AAAA,UACNC;AAAA,QAAA;AAAA,QAEF,OAAO,EAAE,OAAOC,EAAA;AAAA,QAEhB,UAAA;AAAA,UAAA,gBAAAG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASR;AAAA,cACT,WAAWS;AAAA,gBACT;AAAA,gBACA;AAAA,gBACAN,MAAa,UAAU,YAAY;AAAA,cAAA;AAAA,cAErC,cAAW;AAAA,cAEX,UAAA,gBAAAK,EAACE,GAAA,EAAU,WAAU,8CAAA,CAA8C;AAAA,YAAA;AAAA,UAAA;AAAA,UAGrE,gBAAAF,EAAC,OAAA,EAAI,WAAU,8CACZ,UAAAP,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
@@ -0,0 +1,81 @@
1
+ import { jsxs as a, jsx as t } from "react/jsx-runtime";
2
+ import { Fragment as l } from "react";
3
+ import { Menu as d, MenuButton as m, Transition as f, MenuItems as p, MenuItem as h } from "@headlessui/react";
4
+ import { ChevronDownIcon as g } from "@heroicons/react/20/solid";
5
+ import { cn as o } from "./index3.js";
6
+ function N({
7
+ trigger: r,
8
+ items: n,
9
+ align: i = "left",
10
+ className: c
11
+ }) {
12
+ return /* @__PURE__ */ a(d, { as: "div", className: o("relative inline-block text-left", c), children: [
13
+ /* @__PURE__ */ t(m, { as: l, children: r }),
14
+ /* @__PURE__ */ t(
15
+ f,
16
+ {
17
+ as: l,
18
+ enter: "transition ease-out duration-100",
19
+ enterFrom: "transform opacity-0 scale-95",
20
+ enterTo: "transform opacity-100 scale-100",
21
+ leave: "transition ease-in duration-75",
22
+ leaveFrom: "transform opacity-100 scale-100",
23
+ leaveTo: "transform opacity-0 scale-95",
24
+ children: /* @__PURE__ */ t(
25
+ p,
26
+ {
27
+ className: o(
28
+ "absolute z-10 mt-2 w-56 origin-top-right",
29
+ "bg-white rounded-lg border border-slate-200 shadow-lg",
30
+ "py-1 focus:outline-none",
31
+ i === "right" ? "right-0" : "left-0"
32
+ ),
33
+ children: n.map((e) => /* @__PURE__ */ t(h, { disabled: e.disabled, children: ({ active: u, disabled: s }) => /* @__PURE__ */ a(
34
+ "button",
35
+ {
36
+ type: "button",
37
+ onClick: e.onClick,
38
+ disabled: s,
39
+ className: o(
40
+ "w-full flex items-center gap-2 px-4 py-2 text-sm text-left",
41
+ "transition-colors duration-150",
42
+ u && "bg-slate-50",
43
+ s && "opacity-50 cursor-not-allowed",
44
+ e.danger ? "text-red-600 hover:bg-red-50" : "text-slate-700"
45
+ ),
46
+ children: [
47
+ e.icon && /* @__PURE__ */ t("span", { className: "flex-shrink-0 w-5 h-5", children: e.icon }),
48
+ e.label
49
+ ]
50
+ }
51
+ ) }, e.key))
52
+ }
53
+ )
54
+ }
55
+ )
56
+ ] });
57
+ }
58
+ function k({ children: r, className: n }) {
59
+ return /* @__PURE__ */ a(
60
+ "button",
61
+ {
62
+ type: "button",
63
+ className: o(
64
+ "inline-flex items-center gap-2 px-4 py-2",
65
+ "bg-white border border-slate-300 rounded-lg",
66
+ "text-sm font-medium text-slate-700",
67
+ "hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
68
+ n
69
+ ),
70
+ children: [
71
+ r,
72
+ /* @__PURE__ */ t(g, { className: "h-5 w-5 text-slate-400" })
73
+ ]
74
+ }
75
+ );
76
+ }
77
+ export {
78
+ N as Dropdown,
79
+ k as DropdownButton
80
+ };
81
+ //# sourceMappingURL=index26.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index26.js","sources":["../src/components/Dropdown/Dropdown.tsx"],"sourcesContent":["import { Fragment, type ReactNode } from 'react'\nimport { Menu, MenuButton, MenuItems, MenuItem, Transition } from '@headlessui/react'\nimport { ChevronDownIcon } from '@heroicons/react/20/solid'\nimport { cn } from '@/lib/utils'\n\nexport interface DropdownItem {\n key: string\n label: ReactNode\n onClick?: () => void\n icon?: ReactNode\n disabled?: boolean\n danger?: boolean\n}\n\nexport interface DropdownProps {\n trigger: ReactNode\n items: DropdownItem[]\n align?: 'left' | 'right'\n className?: string\n}\n\nexport function Dropdown({\n trigger,\n items,\n align = 'left',\n className,\n}: DropdownProps) {\n return (\n <Menu as=\"div\" className={cn('relative inline-block text-left', className)}>\n <MenuButton as={Fragment}>{trigger}</MenuButton>\n <Transition\n as={Fragment}\n enter=\"transition ease-out duration-100\"\n enterFrom=\"transform opacity-0 scale-95\"\n enterTo=\"transform opacity-100 scale-100\"\n leave=\"transition ease-in duration-75\"\n leaveFrom=\"transform opacity-100 scale-100\"\n leaveTo=\"transform opacity-0 scale-95\"\n >\n <MenuItems\n className={cn(\n 'absolute z-10 mt-2 w-56 origin-top-right',\n 'bg-white rounded-lg border border-slate-200 shadow-lg',\n 'py-1 focus:outline-none',\n align === 'right' ? 'right-0' : 'left-0'\n )}\n >\n {items.map((item) => (\n <MenuItem key={item.key} disabled={item.disabled}>\n {({ active, disabled }) => (\n <button\n type=\"button\"\n onClick={item.onClick}\n disabled={disabled}\n className={cn(\n 'w-full flex items-center gap-2 px-4 py-2 text-sm text-left',\n 'transition-colors duration-150',\n active && 'bg-slate-50',\n disabled && 'opacity-50 cursor-not-allowed',\n item.danger\n ? 'text-red-600 hover:bg-red-50'\n : 'text-slate-700'\n )}\n >\n {item.icon && (\n <span className=\"flex-shrink-0 w-5 h-5\">{item.icon}</span>\n )}\n {item.label}\n </button>\n )}\n </MenuItem>\n ))}\n </MenuItems>\n </Transition>\n </Menu>\n )\n}\n\n// Convenience component for the default dropdown button trigger\nexport interface DropdownButtonProps {\n children: ReactNode\n className?: string\n}\n\nexport function DropdownButton({ children, className }: DropdownButtonProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-2 px-4 py-2',\n 'bg-white border border-slate-300 rounded-lg',\n 'text-sm font-medium text-slate-700',\n 'hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',\n className\n )}\n >\n {children}\n <ChevronDownIcon className=\"h-5 w-5 text-slate-400\" />\n </button>\n )\n}\n"],"names":["Dropdown","trigger","items","align","className","jsxs","Menu","cn","jsx","MenuButton","Fragment","Transition","MenuItems","item","MenuItem","active","disabled","DropdownButton","children","ChevronDownIcon"],"mappings":";;;;;AAqBO,SAASA,EAAS;AAAA,EACvB,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC;AACF,GAAkB;AAChB,SACE,gBAAAC,EAACC,KAAK,IAAG,OAAM,WAAWC,EAAG,mCAAmCH,CAAS,GACvE,UAAA;AAAA,IAAA,gBAAAI,EAACC,GAAA,EAAW,IAAIC,GAAW,UAAAT,GAAQ;AAAA,IACnC,gBAAAO;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,IAAID;AAAA,QACJ,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAQ;AAAA,QAER,UAAA,gBAAAF;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,WAAWL;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACAJ,MAAU,UAAU,YAAY;AAAA,YAAA;AAAA,YAGjC,UAAAD,EAAM,IAAI,CAACW,MACV,gBAAAL,EAACM,GAAA,EAAwB,UAAUD,EAAK,UACrC,UAAA,CAAC,EAAE,QAAAE,GAAQ,UAAAC,QACV,gBAAAX;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAASQ,EAAK;AAAA,gBACd,UAAAG;AAAA,gBACA,WAAWT;AAAA,kBACT;AAAA,kBACA;AAAA,kBACAQ,KAAU;AAAA,kBACVC,KAAY;AAAA,kBACZH,EAAK,SACD,iCACA;AAAA,gBAAA;AAAA,gBAGL,UAAA;AAAA,kBAAAA,EAAK,QACJ,gBAAAL,EAAC,QAAA,EAAK,WAAU,yBAAyB,YAAK,MAAK;AAAA,kBAEpDK,EAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,EACR,GApBWA,EAAK,GAsBpB,CACD;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAQO,SAASI,EAAe,EAAE,UAAAC,GAAU,WAAAd,KAAkC;AAC3E,SACE,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWE;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAH;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAAc;AAAA,QACD,gBAAAV,EAACW,GAAA,EAAgB,WAAU,yBAAA,CAAyB;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG1D;"}
@@ -0,0 +1,27 @@
1
+ import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
+ import { cn as x } from "./index3.js";
3
+ const n = ({
4
+ message: s,
5
+ title: r = "There's Nothing Here!",
6
+ icon: t,
7
+ fullBlock: m = !1,
8
+ className: l
9
+ }) => /* @__PURE__ */ a(
10
+ "div",
11
+ {
12
+ className: x(
13
+ "flex flex-col items-center justify-center py-12 px-6",
14
+ m && "min-h-[400px]",
15
+ l
16
+ ),
17
+ children: [
18
+ t && /* @__PURE__ */ e("div", { className: "w-16 h-16 text-primary-200 mb-4", children: t }),
19
+ /* @__PURE__ */ e("h3", { className: "text-lg font-semibold text-slate-400 mb-2", children: r }),
20
+ /* @__PURE__ */ e("p", { className: "text-sm text-slate-400 text-center max-w-[75%]", children: s })
21
+ ]
22
+ }
23
+ );
24
+ export {
25
+ n as EmptyData
26
+ };
27
+ //# sourceMappingURL=index27.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index27.js","sources":["../src/components/EmptyData/EmptyData.tsx"],"sourcesContent":["import { type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface EmptyDataProps {\n message: string\n title?: string\n icon?: ReactNode\n fullBlock?: boolean\n className?: string\n}\n\nexport const EmptyData = ({\n message,\n title = \"There's Nothing Here!\",\n icon,\n fullBlock = false,\n className,\n}: EmptyDataProps) => {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center py-12 px-6',\n fullBlock && 'min-h-[400px]',\n className\n )}\n >\n {icon && (\n <div className=\"w-16 h-16 text-primary-200 mb-4\">\n {icon}\n </div>\n )}\n\n <h3 className=\"text-lg font-semibold text-slate-400 mb-2\">\n {title}\n </h3>\n\n <p className=\"text-sm text-slate-400 text-center max-w-[75%]\">\n {message}\n </p>\n </div>\n )\n}\n"],"names":["EmptyData","message","title","icon","fullBlock","className","jsxs","cn","jsx"],"mappings":";;AAWO,MAAMA,IAAY,CAAC;AAAA,EACxB,SAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,MAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,WAAAC;AACF,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAH,KAAa;AAAA,MACbC;AAAA,IAAA;AAAA,IAGD,UAAA;AAAA,MAAAF,KACC,gBAAAK,EAAC,OAAA,EAAI,WAAU,mCACZ,UAAAL,GACH;AAAA,MAGF,gBAAAK,EAAC,MAAA,EAAG,WAAU,6CACX,UAAAN,GACH;AAAA,MAEA,gBAAAM,EAAC,KAAA,EAAE,WAAU,kDACV,UAAAP,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAAA;"}
@@ -0,0 +1,81 @@
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
+ import { useRef as h } from "react";
3
+ import { cn as i } from "./index3.js";
4
+ import { CloudArrowUpIcon as x, PlusIcon as v } from "@heroicons/react/24/outline";
5
+ import { Button as y } from "./index17.js";
6
+ const w = ({
7
+ onFilesSelected: u,
8
+ accept: s,
9
+ multiple: c = !0,
10
+ label: a = "Add document",
11
+ variant: p = "button",
12
+ disabled: t = !1,
13
+ className: m
14
+ }) => {
15
+ const r = h(null), d = (o) => {
16
+ const n = o.target.files;
17
+ n && n.length > 0 && u(Array.from(n)), r.current && (r.current.value = "");
18
+ }, f = () => {
19
+ var o;
20
+ (o = r.current) == null || o.click();
21
+ };
22
+ return p === "dropzone" ? /* @__PURE__ */ l("div", { className: i("relative", m), children: [
23
+ /* @__PURE__ */ l(
24
+ "div",
25
+ {
26
+ onClick: f,
27
+ className: i(
28
+ "flex flex-col items-center justify-center",
29
+ "border-2 border-dashed border-slate-300 rounded-lg",
30
+ "py-12 px-6 cursor-pointer",
31
+ "hover:border-primary-500 hover:bg-primary-50/50",
32
+ "transition-colors",
33
+ t && "opacity-50 cursor-not-allowed"
34
+ ),
35
+ children: [
36
+ /* @__PURE__ */ e(x, { className: "w-16 h-16 text-slate-400 mb-4" }),
37
+ /* @__PURE__ */ e("span", { className: "text-slate-600 font-medium", children: a }),
38
+ /* @__PURE__ */ e("span", { className: "text-sm text-slate-400 mt-1", children: "Click to browse files" })
39
+ ]
40
+ }
41
+ ),
42
+ /* @__PURE__ */ e(
43
+ "input",
44
+ {
45
+ ref: r,
46
+ type: "file",
47
+ accept: s,
48
+ multiple: c,
49
+ onChange: d,
50
+ disabled: t,
51
+ className: "hidden"
52
+ }
53
+ )
54
+ ] }) : /* @__PURE__ */ l("div", { className: i("relative inline-block", m), children: [
55
+ /* @__PURE__ */ e(
56
+ y,
57
+ {
58
+ onClick: f,
59
+ disabled: t,
60
+ leftIcon: /* @__PURE__ */ e(v, { className: "w-5 h-5" }),
61
+ children: a
62
+ }
63
+ ),
64
+ /* @__PURE__ */ e(
65
+ "input",
66
+ {
67
+ ref: r,
68
+ type: "file",
69
+ accept: s,
70
+ multiple: c,
71
+ onChange: d,
72
+ disabled: t,
73
+ className: "hidden"
74
+ }
75
+ )
76
+ ] });
77
+ };
78
+ export {
79
+ w as FileUploader
80
+ };
81
+ //# sourceMappingURL=index28.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index28.js","sources":["../src/components/FileUploader/FileUploader.tsx"],"sourcesContent":["import { useRef, type ChangeEvent } from 'react'\nimport { cn } from '@/lib/utils'\nimport { CloudArrowUpIcon, PlusIcon } from '@heroicons/react/24/outline'\nimport { Button } from '../Button/Button'\n\nexport interface FileUploaderProps {\n onFilesSelected: (files: File[]) => void\n accept?: string\n multiple?: boolean\n label?: string\n variant?: 'button' | 'dropzone'\n disabled?: boolean\n className?: string\n}\n\nexport const FileUploader = ({\n onFilesSelected,\n accept,\n multiple = true,\n label = 'Add document',\n variant = 'button',\n disabled = false,\n className,\n}: FileUploaderProps) => {\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (files && files.length > 0) {\n onFilesSelected(Array.from(files))\n }\n // Reset input so the same file can be selected again\n if (inputRef.current) {\n inputRef.current.value = ''\n }\n }\n\n const handleClick = () => {\n inputRef.current?.click()\n }\n\n if (variant === 'dropzone') {\n return (\n <div className={cn('relative', className)}>\n <div\n onClick={handleClick}\n className={cn(\n 'flex flex-col items-center justify-center',\n 'border-2 border-dashed border-slate-300 rounded-lg',\n 'py-12 px-6 cursor-pointer',\n 'hover:border-primary-500 hover:bg-primary-50/50',\n 'transition-colors',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <CloudArrowUpIcon className=\"w-16 h-16 text-slate-400 mb-4\" />\n <span className=\"text-slate-600 font-medium\">{label}</span>\n <span className=\"text-sm text-slate-400 mt-1\">\n Click to browse files\n </span>\n </div>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n />\n </div>\n )\n }\n\n return (\n <div className={cn('relative inline-block', className)}>\n <Button\n onClick={handleClick}\n disabled={disabled}\n leftIcon={<PlusIcon className=\"w-5 h-5\" />}\n >\n {label}\n </Button>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleChange}\n disabled={disabled}\n className=\"hidden\"\n />\n </div>\n )\n}\n"],"names":["FileUploader","onFilesSelected","accept","multiple","label","variant","disabled","className","inputRef","useRef","handleChange","e","files","handleClick","_a","cn","jsxs","jsx","CloudArrowUpIcon","Button","PlusIcon"],"mappings":";;;;;AAeO,MAAMA,IAAe,CAAC;AAAA,EAC3B,iBAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,SAAAC,IAAU;AAAA,EACV,UAAAC,IAAW;AAAA,EACX,WAAAC;AACF,MAAyB;AACvB,QAAMC,IAAWC,EAAyB,IAAI,GAExCC,IAAe,CAACC,MAAqC;AACzD,UAAMC,IAAQD,EAAE,OAAO;AACvB,IAAIC,KAASA,EAAM,SAAS,KAC1BX,EAAgB,MAAM,KAAKW,CAAK,CAAC,GAG/BJ,EAAS,YACXA,EAAS,QAAQ,QAAQ;AAAA,EAE7B,GAEMK,IAAc,MAAM;;AACxB,KAAAC,IAAAN,EAAS,YAAT,QAAAM,EAAkB;AAAA,EACpB;AAEA,SAAIT,MAAY,+BAEX,OAAA,EAAI,WAAWU,EAAG,YAAYR,CAAS,GACtC,UAAA;AAAA,IAAA,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASH;AAAA,QACT,WAAWE;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACAT,KAAY;AAAA,QAAA;AAAA,QAGd,UAAA;AAAA,UAAA,gBAAAW,EAACC,GAAA,EAAiB,WAAU,gCAAA,CAAgC;AAAA,UAC5D,gBAAAD,EAAC,QAAA,EAAK,WAAU,8BAA8B,UAAAb,GAAM;AAAA,UACpD,gBAAAa,EAAC,QAAA,EAAK,WAAU,+BAA8B,UAAA,wBAAA,CAE9C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKT;AAAA,QACL,MAAK;AAAA,QACL,QAAAN;AAAA,QACA,UAAAC;AAAA,QACA,UAAUO;AAAA,QACV,UAAAJ;AAAA,QACA,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF,sBAKD,OAAA,EAAI,WAAWS,EAAG,yBAAyBR,CAAS,GACnD,UAAA;AAAA,IAAA,gBAAAU;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAASN;AAAA,QACT,UAAAP;AAAA,QACA,UAAU,gBAAAW,EAACG,GAAA,EAAS,WAAU,UAAA,CAAU;AAAA,QAEvC,UAAAhB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAa;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKT;AAAA,QACL,MAAK;AAAA,QACL,QAAAN;AAAA,QACA,UAAAC;AAAA,QACA,UAAUO;AAAA,QACV,UAAAJ;AAAA,QACA,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;"}
@@ -0,0 +1,36 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import { cn as a } from "./index3.js";
3
+ const i = {
4
+ sm: "w-8 h-8",
5
+ md: "w-10 h-10",
6
+ lg: "w-12 h-12"
7
+ }, l = {
8
+ default: "bg-transparent text-slate-700 hover:bg-slate-100 hover:text-slate-900",
9
+ primary: "bg-primary-500 text-white hover:bg-primary-600",
10
+ ghost: "bg-transparent text-slate-500 hover:text-slate-700"
11
+ }, d = ({
12
+ icon: t,
13
+ size: e = "md",
14
+ variant: r = "default",
15
+ className: o,
16
+ ...n
17
+ }) => /* @__PURE__ */ s(
18
+ "button",
19
+ {
20
+ className: a(
21
+ "inline-flex items-center justify-center rounded-full",
22
+ "border-none cursor-pointer transition-colors duration-200",
23
+ "focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",
24
+ "disabled:opacity-50 disabled:cursor-not-allowed",
25
+ i[e],
26
+ l[r],
27
+ o
28
+ ),
29
+ ...n,
30
+ children: t
31
+ }
32
+ );
33
+ export {
34
+ d as IconButton
35
+ };
36
+ //# sourceMappingURL=index29.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index29.js","sources":["../src/components/IconButton/IconButton.tsx"],"sourcesContent":["import { type ReactElement, type ButtonHTMLAttributes } from 'react'\nimport { cn } from '@/lib/utils'\n\nexport interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactElement\n size?: 'sm' | 'md' | 'lg'\n variant?: 'default' | 'primary' | 'ghost'\n}\n\nconst sizeStyles = {\n sm: 'w-8 h-8',\n md: 'w-10 h-10',\n lg: 'w-12 h-12',\n}\n\nconst variantStyles = {\n default: 'bg-transparent text-slate-700 hover:bg-slate-100 hover:text-slate-900',\n primary: 'bg-primary-500 text-white hover:bg-primary-600',\n ghost: 'bg-transparent text-slate-500 hover:text-slate-700',\n}\n\nexport const IconButton = ({\n icon,\n size = 'md',\n variant = 'default',\n className,\n ...props\n}: IconButtonProps) => {\n return (\n <button\n className={cn(\n 'inline-flex items-center justify-center rounded-full',\n 'border-none cursor-pointer transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2',\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n sizeStyles[size],\n variantStyles[variant],\n className\n )}\n {...props}\n >\n {icon}\n </button>\n )\n}\n"],"names":["sizeStyles","variantStyles","IconButton","icon","size","variant","className","props","jsx","cn"],"mappings":";;AASA,MAAMA,IAAa;AAAA,EACjB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,IAAgB;AAAA,EACpB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACT,GAEaC,IAAa,CAAC;AAAA,EACzB,MAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACAT,EAAWI,CAAI;AAAA,MACfH,EAAcI,CAAO;AAAA,MACrBC;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,IAEH,UAAAJ;AAAA,EAAA;AAAA;"}
package/dist/index3.js ADDED
@@ -0,0 +1,9 @@
1
+ import { clsx as o } from "./index71.js";
2
+ import { twMerge as t } from "./index72.js";
3
+ function n(...r) {
4
+ return t(o(r));
5
+ }
6
+ export {
7
+ n as cn
8
+ };
9
+ //# sourceMappingURL=index3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index3.js","sources":["../src/lib/utils.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"names":["cn","inputs","twMerge","clsx"],"mappings":";;AAGO,SAASA,KAAMC,GAAsB;AAC1C,SAAOC,EAAQC,EAAKF,CAAM,CAAC;AAC7B;"}