@axtec/components 0.1.7 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +1 -0
  2. package/dist/components/AgentChat/AgentChat.d.ts +32 -0
  3. package/dist/components/AgentChat/index.d.ts +1 -0
  4. package/dist/components/AgentPanel/AgentPanel.d.ts +44 -0
  5. package/dist/components/AgentPanel/index.d.ts +1 -0
  6. package/dist/components/OptionDivider/OptionDivider.d.ts +2 -1
  7. package/dist/components/index.d.ts +2 -0
  8. package/dist/index.css +1 -1
  9. package/dist/index.js +161 -157
  10. package/dist/index.js.map +1 -1
  11. package/dist/index10.js +77 -99
  12. package/dist/index10.js.map +1 -1
  13. package/dist/index11.js +91 -36
  14. package/dist/index11.js.map +1 -1
  15. package/dist/index12.js +97 -75
  16. package/dist/index12.js.map +1 -1
  17. package/dist/index13.js +38 -24
  18. package/dist/index13.js.map +1 -1
  19. package/dist/index14.js +76 -16
  20. package/dist/index14.js.map +1 -1
  21. package/dist/index15.js +24 -38
  22. package/dist/index15.js.map +1 -1
  23. package/dist/index16.js +18 -72
  24. package/dist/index16.js.map +1 -1
  25. package/dist/index17.js +36 -47
  26. package/dist/index17.js.map +1 -1
  27. package/dist/index18.js +73 -13
  28. package/dist/index18.js.map +1 -1
  29. package/dist/index19.js +47 -151
  30. package/dist/index19.js.map +1 -1
  31. package/dist/index20.js +12 -17
  32. package/dist/index20.js.map +1 -1
  33. package/dist/index21.js +148 -40
  34. package/dist/index21.js.map +1 -1
  35. package/dist/index22.js +18 -50
  36. package/dist/index22.js.map +1 -1
  37. package/dist/index23.js +41 -74
  38. package/dist/index23.js.map +1 -1
  39. package/dist/index24.js +46 -216
  40. package/dist/index24.js.map +1 -1
  41. package/dist/index25.js +73 -46
  42. package/dist/index25.js.map +1 -1
  43. package/dist/index26.js +212 -70
  44. package/dist/index26.js.map +1 -1
  45. package/dist/index27.js +51 -23
  46. package/dist/index27.js.map +1 -1
  47. package/dist/index28.js +74 -74
  48. package/dist/index28.js.map +1 -1
  49. package/dist/index29.js +19 -28
  50. package/dist/index29.js.map +1 -1
  51. package/dist/index3.js +2 -2
  52. package/dist/index30.js +62 -76
  53. package/dist/index30.js.map +1 -1
  54. package/dist/index31.js +28 -55
  55. package/dist/index31.js.map +1 -1
  56. package/dist/index32.js +87 -40
  57. package/dist/index32.js.map +1 -1
  58. package/dist/index33.js +57 -45
  59. package/dist/index33.js.map +1 -1
  60. package/dist/index34.js +40 -47
  61. package/dist/index34.js.map +1 -1
  62. package/dist/index35.js +47 -27
  63. package/dist/index35.js.map +1 -1
  64. package/dist/index36.js +52 -54
  65. package/dist/index36.js.map +1 -1
  66. package/dist/index37.js +28 -49
  67. package/dist/index37.js.map +1 -1
  68. package/dist/index38.js +54 -13
  69. package/dist/index38.js.map +1 -1
  70. package/dist/index39.js +46 -79
  71. package/dist/index39.js.map +1 -1
  72. package/dist/index40.js +13 -49
  73. package/dist/index40.js.map +1 -1
  74. package/dist/index41.js +80 -17
  75. package/dist/index41.js.map +1 -1
  76. package/dist/index42.js +48 -33
  77. package/dist/index42.js.map +1 -1
  78. package/dist/index43.js +17 -11
  79. package/dist/index43.js.map +1 -1
  80. package/dist/index44.js +34 -15
  81. package/dist/index44.js.map +1 -1
  82. package/dist/index45.js +16 -89
  83. package/dist/index45.js.map +1 -1
  84. package/dist/index46.js +15 -69
  85. package/dist/index46.js.map +1 -1
  86. package/dist/index47.js +85 -116
  87. package/dist/index47.js.map +1 -1
  88. package/dist/index48.js +69 -40
  89. package/dist/index48.js.map +1 -1
  90. package/dist/index49.js +120 -42
  91. package/dist/index49.js.map +1 -1
  92. package/dist/index5.js +1 -1
  93. package/dist/index50.js +39 -55
  94. package/dist/index50.js.map +1 -1
  95. package/dist/index51.js +39 -11
  96. package/dist/index51.js.map +1 -1
  97. package/dist/index52.js +53 -62
  98. package/dist/index52.js.map +1 -1
  99. package/dist/index53.js +16 -54
  100. package/dist/index53.js.map +1 -1
  101. package/dist/index54.js +64 -36
  102. package/dist/index54.js.map +1 -1
  103. package/dist/index55.js +54 -66
  104. package/dist/index55.js.map +1 -1
  105. package/dist/index56.js +37 -22
  106. package/dist/index56.js.map +1 -1
  107. package/dist/index57.js +63 -101
  108. package/dist/index57.js.map +1 -1
  109. package/dist/index58.js +16 -67
  110. package/dist/index58.js.map +1 -1
  111. package/dist/index59.js +99 -213
  112. package/dist/index59.js.map +1 -1
  113. package/dist/index6.js +1 -1
  114. package/dist/index60.js +67 -62
  115. package/dist/index60.js.map +1 -1
  116. package/dist/index61.js +206 -224
  117. package/dist/index61.js.map +1 -1
  118. package/dist/index62.js +62 -96
  119. package/dist/index62.js.map +1 -1
  120. package/dist/index63.js +233 -33
  121. package/dist/index63.js.map +1 -1
  122. package/dist/index64.js +98 -14
  123. package/dist/index64.js.map +1 -1
  124. package/dist/index65.js +35 -59
  125. package/dist/index65.js.map +1 -1
  126. package/dist/index66.js +16 -59
  127. package/dist/index66.js.map +1 -1
  128. package/dist/index67.js +57 -72
  129. package/dist/index67.js.map +1 -1
  130. package/dist/index68.js +58 -106
  131. package/dist/index68.js.map +1 -1
  132. package/dist/index69.js +70 -43
  133. package/dist/index69.js.map +1 -1
  134. package/dist/index7.js +157 -69
  135. package/dist/index7.js.map +1 -1
  136. package/dist/index70.js +101 -40
  137. package/dist/index70.js.map +1 -1
  138. package/dist/index71.js +44 -72
  139. package/dist/index71.js.map +1 -1
  140. package/dist/index72.js +47 -53
  141. package/dist/index72.js.map +1 -1
  142. package/dist/index73.js +70 -62
  143. package/dist/index73.js.map +1 -1
  144. package/dist/index74.js +46 -28
  145. package/dist/index74.js.map +1 -1
  146. package/dist/index75.js +67 -13
  147. package/dist/index75.js.map +1 -1
  148. package/dist/index76.js +35 -2263
  149. package/dist/index76.js.map +1 -1
  150. package/dist/index77.js +17 -0
  151. package/dist/index77.js.map +1 -0
  152. package/dist/index78.js +2267 -0
  153. package/dist/index78.js.map +1 -0
  154. package/dist/index8.js +377 -70
  155. package/dist/index8.js.map +1 -1
  156. package/dist/index9.js +60 -77
  157. package/dist/index9.js.map +1 -1
  158. package/package.json +1 -1
package/dist/index28.js CHANGED
@@ -1,81 +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",
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,
25
16
  {
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"
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
+ )
74
54
  }
75
55
  )
76
56
  ] });
77
- };
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
+ }
78
77
  export {
79
- w as FileUploader
78
+ N as Dropdown,
79
+ k as DropdownButton
80
80
  };
81
81
  //# sourceMappingURL=index28.js.map
@@ -1 +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;"}
1
+ {"version":3,"file":"index28.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;"}
package/dist/index29.js CHANGED
@@ -1,36 +1,27 @@
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 = ({
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!",
12
6
  icon: t,
13
- size: e = "md",
14
- variant: r = "default",
15
- className: o,
16
- ...n
17
- }) => /* @__PURE__ */ s(
18
- "button",
7
+ fullBlock: m = !1,
8
+ className: l
9
+ }) => /* @__PURE__ */ a(
10
+ "div",
19
11
  {
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
12
+ className: x(
13
+ "flex flex-col items-center justify-center py-12 px-6",
14
+ m && "min-h-[400px]",
15
+ l
28
16
  ),
29
- ...n,
30
- children: t
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
+ ]
31
22
  }
32
23
  );
33
24
  export {
34
- d as IconButton
25
+ n as EmptyData
35
26
  };
36
27
  //# sourceMappingURL=index29.js.map
@@ -1 +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;"}
1
+ {"version":3,"file":"index29.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;"}
package/dist/index3.js CHANGED
@@ -1,5 +1,5 @@
1
- import { clsx as o } from "./index75.js";
2
- import { twMerge as t } from "./index76.js";
1
+ import { clsx as o } from "./index77.js";
2
+ import { twMerge as t } from "./index78.js";
3
3
  function n(...r) {
4
4
  return t(o(r));
5
5
  }
package/dist/index30.js CHANGED
@@ -1,95 +1,81 @@
1
- import { jsxs as r, Fragment as b, jsx as e } from "react/jsx-runtime";
2
- import { useState as c } from "react";
1
+ import { jsxs as l, jsx as e } from "react/jsx-runtime";
2
+ import { useRef as h } from "react";
3
3
  import { cn as i } from "./index3.js";
4
- import { Dialog as w, DialogPanel as j } from "@headlessui/react";
5
- import { XMarkIcon as C } from "@heroicons/react/24/outline";
6
- const k = {
7
- auto: "",
8
- square: "aspect-square",
9
- video: "aspect-video",
10
- "4/3": "aspect-[4/3]",
11
- "3/2": "aspect-[3/2]"
12
- }, O = ({
13
- src: m,
14
- alt: o = "",
15
- fallbackSrc: f = "/png/No_Img.png",
16
- enablePreview: t = !0,
17
- aspectRatio: u = "auto",
18
- objectFit: s = "cover",
19
- className: d,
20
- imageClassName: p,
21
- children: h
4
+ import { CloudArrowUpIcon as x, PlusIcon as v } from "@heroicons/react/24/outline";
5
+ import { Button as y } from "./index19.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
22
14
  }) => {
23
- const [a, v] = c(!1), [g, l] = c(!1), n = a ? f : m, x = () => {
24
- v(!0);
25
- }, N = () => {
26
- t && !a && l(!0);
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();
27
21
  };
28
- return /* @__PURE__ */ r(b, { children: [
29
- /* @__PURE__ */ r(
22
+ return p === "dropzone" ? /* @__PURE__ */ l("div", { className: i("relative", m), children: [
23
+ /* @__PURE__ */ l(
30
24
  "div",
31
25
  {
26
+ onClick: f,
32
27
  className: i(
33
- "relative overflow-hidden",
34
- k[u],
35
- t && !a && "cursor-pointer",
36
- d
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"
37
34
  ),
38
- onClick: N,
39
35
  children: [
40
- /* @__PURE__ */ e(
41
- "img",
42
- {
43
- src: n,
44
- alt: o,
45
- onError: x,
46
- className: i(
47
- "w-full h-full",
48
- s === "cover" && "object-cover",
49
- s === "contain" && "object-contain",
50
- s === "fill" && "object-fill",
51
- s === "none" && "object-none",
52
- p
53
- )
54
- }
55
- ),
56
- h
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" })
57
39
  ]
58
40
  }
59
41
  ),
60
- /* @__PURE__ */ r(
61
- w,
42
+ /* @__PURE__ */ e(
43
+ "input",
62
44
  {
63
- open: g,
64
- onClose: () => l(!1),
65
- className: "relative z-50",
66
- children: [
67
- /* @__PURE__ */ e("div", { className: "fixed inset-0 bg-black", "aria-hidden": "true" }),
68
- /* @__PURE__ */ e("div", { className: "fixed inset-0 flex items-center justify-center", children: /* @__PURE__ */ r(j, { className: "relative w-full h-full flex items-center justify-center", children: [
69
- /* @__PURE__ */ e(
70
- "button",
71
- {
72
- onClick: () => l(!1),
73
- className: "absolute top-8 left-8 p-2 rounded-full bg-white hover:bg-slate-100 transition-colors",
74
- "aria-label": "Close preview",
75
- children: /* @__PURE__ */ e(C, { className: "w-6 h-6 text-slate-700" })
76
- }
77
- ),
78
- /* @__PURE__ */ e(
79
- "img",
80
- {
81
- src: n,
82
- alt: o,
83
- className: "max-w-full max-h-full object-contain"
84
- }
85
- )
86
- ] }) })
87
- ]
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"
88
74
  }
89
75
  )
90
76
  ] });
91
77
  };
92
78
  export {
93
- O as Image
79
+ w as FileUploader
94
80
  };
95
81
  //# sourceMappingURL=index30.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index30.js","sources":["../src/components/Image/Image.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { cn } from '@/lib/utils'\nimport { Dialog, DialogPanel } from '@headlessui/react'\nimport { XMarkIcon } from '@heroicons/react/24/outline'\n\nexport interface ImageProps {\n src: string\n alt?: string\n fallbackSrc?: string\n enablePreview?: boolean\n aspectRatio?: 'auto' | 'square' | 'video' | '4/3' | '3/2'\n objectFit?: 'cover' | 'contain' | 'fill' | 'none'\n className?: string\n imageClassName?: string\n children?: ReactNode\n}\n\nconst aspectRatioClasses = {\n auto: '',\n square: 'aspect-square',\n video: 'aspect-video',\n '4/3': 'aspect-[4/3]',\n '3/2': 'aspect-[3/2]',\n}\n\nexport const Image = ({\n src,\n alt = '',\n fallbackSrc = '/png/No_Img.png',\n enablePreview = true,\n aspectRatio = 'auto',\n objectFit = 'cover',\n className,\n imageClassName,\n children,\n}: ImageProps) => {\n const [hasError, setHasError] = useState(false)\n const [isPreviewOpen, setIsPreviewOpen] = useState(false)\n\n const imageSrc = hasError ? fallbackSrc : src\n\n const handleError = () => {\n setHasError(true)\n }\n\n const handleClick = () => {\n if (enablePreview && !hasError) {\n setIsPreviewOpen(true)\n }\n }\n\n return (\n <>\n <div\n className={cn(\n 'relative overflow-hidden',\n aspectRatioClasses[aspectRatio],\n enablePreview && !hasError && 'cursor-pointer',\n className\n )}\n onClick={handleClick}\n >\n <img\n src={imageSrc}\n alt={alt}\n onError={handleError}\n className={cn(\n 'w-full h-full',\n objectFit === 'cover' && 'object-cover',\n objectFit === 'contain' && 'object-contain',\n objectFit === 'fill' && 'object-fill',\n objectFit === 'none' && 'object-none',\n imageClassName\n )}\n />\n {children}\n </div>\n\n {/* Preview Modal */}\n <Dialog\n open={isPreviewOpen}\n onClose={() => setIsPreviewOpen(false)}\n className=\"relative z-50\"\n >\n <div className=\"fixed inset-0 bg-black\" aria-hidden=\"true\" />\n\n <div className=\"fixed inset-0 flex items-center justify-center\">\n <DialogPanel className=\"relative w-full h-full flex items-center justify-center\">\n <button\n onClick={() => setIsPreviewOpen(false)}\n className=\"absolute top-8 left-8 p-2 rounded-full bg-white hover:bg-slate-100 transition-colors\"\n aria-label=\"Close preview\"\n >\n <XMarkIcon className=\"w-6 h-6 text-slate-700\" />\n </button>\n\n <img\n src={imageSrc}\n alt={alt}\n className=\"max-w-full max-h-full object-contain\"\n />\n </DialogPanel>\n </div>\n </Dialog>\n </>\n )\n}\n"],"names":["aspectRatioClasses","Image","src","alt","fallbackSrc","enablePreview","aspectRatio","objectFit","className","imageClassName","children","hasError","setHasError","useState","isPreviewOpen","setIsPreviewOpen","imageSrc","handleError","handleClick","jsxs","Fragment","cn","jsx","Dialog","DialogPanel","XMarkIcon"],"mappings":";;;;;AAiBA,MAAMA,IAAqB;AAAA,EACzB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACT,GAEaC,IAAQ,CAAC;AAAA,EACpB,KAAAC;AAAA,EACA,KAAAC,IAAM;AAAA,EACN,aAAAC,IAAc;AAAA,EACd,eAAAC,IAAgB;AAAA,EAChB,aAAAC,IAAc;AAAA,EACd,WAAAC,IAAY;AAAA,EACZ,WAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AACF,MAAkB;AAChB,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAeC,CAAgB,IAAIF,EAAS,EAAK,GAElDG,IAAWL,IAAWP,IAAcF,GAEpCe,IAAc,MAAM;AACxB,IAAAL,EAAY,EAAI;AAAA,EAClB,GAEMM,IAAc,MAAM;AACxB,IAAIb,KAAiB,CAACM,KACpBI,EAAiB,EAAI;AAAA,EAEzB;AAEA,SACE,gBAAAI,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWE;AAAA,UACT;AAAA,UACArB,EAAmBM,CAAW;AAAA,UAC9BD,KAAiB,CAACM,KAAY;AAAA,UAC9BH;AAAA,QAAA;AAAA,QAEF,SAASU;AAAA,QAET,UAAA;AAAA,UAAA,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKN;AAAA,cACL,KAAAb;AAAA,cACA,SAASc;AAAA,cACT,WAAWI;AAAA,gBACT;AAAA,gBACAd,MAAc,WAAW;AAAA,gBACzBA,MAAc,aAAa;AAAA,gBAC3BA,MAAc,UAAU;AAAA,gBACxBA,MAAc,UAAU;AAAA,gBACxBE;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,UAEDC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIH,gBAAAS;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,MAAMT;AAAA,QACN,SAAS,MAAMC,EAAiB,EAAK;AAAA,QACrC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,0BAAyB,eAAY,QAAO;AAAA,4BAE1D,OAAA,EAAI,WAAU,kDACb,UAAA,gBAAAH,EAACK,GAAA,EAAY,WAAU,2DACrB,UAAA;AAAA,YAAA,gBAAAF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,SAAS,MAAMP,EAAiB,EAAK;AAAA,gBACrC,WAAU;AAAA,gBACV,cAAW;AAAA,gBAEX,UAAA,gBAAAO,EAACG,GAAA,EAAU,WAAU,yBAAA,CAAyB;AAAA,cAAA;AAAA,YAAA;AAAA,YAGhD,gBAAAH;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKN;AAAA,gBACL,KAAAb;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ,EAAA,CACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
1
+ {"version":3,"file":"index30.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;"}
package/dist/index31.js CHANGED
@@ -1,63 +1,36 @@
1
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
2
- import { cn as i } from "./index3.js";
3
- import { PlusIcon as m } from "@heroicons/react/24/outline";
4
- const d = {
5
- 2: "grid-cols-2",
6
- 3: "grid-cols-3",
7
- 4: "grid-cols-4",
8
- 5: "grid-cols-5",
9
- 6: "grid-cols-6"
10
- }, p = ({ item: a, onClick: n }) => {
11
- const { name: r, image: l, url: t, isTemplate: e } = a, o = /* @__PURE__ */ s(
12
- "div",
13
- {
14
- className: i(
15
- "aspect-video rounded overflow-hidden mb-1.5 cursor-pointer",
16
- "bg-cover bg-center bg-no-repeat",
17
- "flex items-center justify-center",
18
- e ? "bg-primary-50" : "bg-slate-200"
19
- ),
20
- style: l && !e ? { backgroundImage: `url(${l})` } : void 0,
21
- onClick: n,
22
- children: e && /* @__PURE__ */ c("div", { className: "flex flex-col items-center gap-2", children: [
23
- /* @__PURE__ */ s(m, { className: "w-8 h-8 text-primary-500" }),
24
- /* @__PURE__ */ s("span", { className: "text-sm font-semibold text-slate-900", children: r })
25
- ] })
26
- }
27
- );
28
- return t && !e ? /* @__PURE__ */ s("li", { className: "flex flex-col", children: /* @__PURE__ */ c("a", { href: t, className: "no-underline", children: [
29
- o,
30
- /* @__PURE__ */ s("span", { className: "text-sm font-semibold text-slate-900 truncate", children: r })
31
- ] }) }) : /* @__PURE__ */ c("li", { className: "flex flex-col", children: [
32
- o,
33
- !e && /* @__PURE__ */ s("span", { className: "text-sm font-semibold text-slate-900 truncate", children: r })
34
- ] });
35
- }, u = ({
36
- items: a,
37
- columns: n = 4,
38
- gap: r = 36,
39
- onItemClick: l,
40
- className: t
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
41
17
  }) => /* @__PURE__ */ s(
42
- "ul",
18
+ "button",
43
19
  {
44
- className: i(
45
- "list-none m-0 p-0 grid",
46
- d[n],
47
- t
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
48
28
  ),
49
- style: { gap: `14px ${r}px` },
50
- children: a.map((e) => /* @__PURE__ */ s(
51
- p,
52
- {
53
- item: e,
54
- onClick: () => l == null ? void 0 : l(e)
55
- },
56
- e.id || e.name
57
- ))
29
+ ...n,
30
+ children: t
58
31
  }
59
32
  );
60
33
  export {
61
- u as ImageGrid
34
+ d as IconButton
62
35
  };
63
36
  //# sourceMappingURL=index31.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index31.js","sources":["../src/components/ImageGrid/ImageGrid.tsx"],"sourcesContent":["import { cn } from '@/lib/utils'\nimport { PlusIcon } from '@heroicons/react/24/outline'\n\nexport interface ImageGridItem {\n id?: string\n name: string\n image?: string\n url?: string\n isTemplate?: boolean\n}\n\nexport interface ImageGridProps {\n items: ImageGridItem[]\n columns?: 2 | 3 | 4 | 5 | 6\n gap?: number\n onItemClick?: (item: ImageGridItem) => void\n className?: string\n}\n\nconst columnStyles = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n}\n\nexport interface ImageGridItemProps {\n item: ImageGridItem\n onClick?: () => void\n}\n\nconst ImageGridItemComponent = ({ item, onClick }: ImageGridItemProps) => {\n const { name, image, url, isTemplate } = item\n\n const imageContent = (\n <div\n className={cn(\n 'aspect-video rounded overflow-hidden mb-1.5 cursor-pointer',\n 'bg-cover bg-center bg-no-repeat',\n 'flex items-center justify-center',\n isTemplate ? 'bg-primary-50' : 'bg-slate-200'\n )}\n style={image && !isTemplate ? { backgroundImage: `url(${image})` } : undefined}\n onClick={onClick}\n >\n {isTemplate && (\n <div className=\"flex flex-col items-center gap-2\">\n <PlusIcon className=\"w-8 h-8 text-primary-500\" />\n <span className=\"text-sm font-semibold text-slate-900\">{name}</span>\n </div>\n )}\n </div>\n )\n\n if (url && !isTemplate) {\n return (\n <li className=\"flex flex-col\">\n <a href={url} className=\"no-underline\">\n {imageContent}\n <span className=\"text-sm font-semibold text-slate-900 truncate\">\n {name}\n </span>\n </a>\n </li>\n )\n }\n\n return (\n <li className=\"flex flex-col\">\n {imageContent}\n {!isTemplate && (\n <span className=\"text-sm font-semibold text-slate-900 truncate\">\n {name}\n </span>\n )}\n </li>\n )\n}\n\nexport const ImageGrid = ({\n items,\n columns = 4,\n gap = 36,\n onItemClick,\n className,\n}: ImageGridProps) => {\n return (\n <ul\n className={cn(\n 'list-none m-0 p-0 grid',\n columnStyles[columns],\n className\n )}\n style={{ gap: `14px ${gap}px` }}\n >\n {items.map((item) => (\n <ImageGridItemComponent\n key={item.id || item.name}\n item={item}\n onClick={() => onItemClick?.(item)}\n />\n ))}\n </ul>\n )\n}\n"],"names":["columnStyles","ImageGridItemComponent","item","onClick","name","image","url","isTemplate","imageContent","jsx","cn","jsxs","PlusIcon","ImageGrid","items","columns","gap","onItemClick","className"],"mappings":";;;AAmBA,MAAMA,IAAe;AAAA,EACnB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,GAOMC,IAAyB,CAAC,EAAE,MAAAC,GAAM,SAAAC,QAAkC;AACxE,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,KAAAC,GAAK,YAAAC,MAAeL,GAEnCM,IACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACAH,IAAa,kBAAkB;AAAA,MAAA;AAAA,MAEjC,OAAOF,KAAS,CAACE,IAAa,EAAE,iBAAiB,OAAOF,CAAK,IAAA,IAAQ;AAAA,MACrE,SAAAF;AAAA,MAEC,UAAAI,KACC,gBAAAI,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,QAAA,gBAAAF,EAACG,GAAA,EAAS,WAAU,2BAAA,CAA2B;AAAA,QAC/C,gBAAAH,EAAC,QAAA,EAAK,WAAU,wCAAwC,UAAAL,EAAA,CAAK;AAAA,MAAA,EAAA,CAC/D;AAAA,IAAA;AAAA,EAAA;AAKN,SAAIE,KAAO,CAACC,IAER,gBAAAE,EAAC,QAAG,WAAU,iBACZ,4BAAC,KAAA,EAAE,MAAMH,GAAK,WAAU,gBACrB,UAAA;AAAA,IAAAE;AAAA,IACD,gBAAAC,EAAC,QAAA,EAAK,WAAU,iDACb,UAAAL,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF,IAKF,gBAAAO,EAAC,MAAA,EAAG,WAAU,iBACX,UAAA;AAAA,IAAAH;AAAA,IACA,CAACD,KACA,gBAAAE,EAAC,QAAA,EAAK,WAAU,iDACb,UAAAL,EAAA,CACH;AAAA,EAAA,GAEJ;AAEJ,GAEaS,IAAY,CAAC;AAAA,EACxB,OAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,KAAAC,IAAM;AAAA,EACN,aAAAC;AAAA,EACA,WAAAC;AACF,MAEI,gBAAAT;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAV,EAAae,CAAO;AAAA,MACpBG;AAAA,IAAA;AAAA,IAEF,OAAO,EAAE,KAAK,QAAQF,CAAG,KAAA;AAAA,IAExB,UAAAF,EAAM,IAAI,CAACZ,MACV,gBAAAO;AAAA,MAACR;AAAA,MAAA;AAAA,QAEC,MAAAC;AAAA,QACA,SAAS,MAAMe,KAAA,gBAAAA,EAAcf;AAAA,MAAI;AAAA,MAF5BA,EAAK,MAAMA,EAAK;AAAA,IAAA,CAIxB;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"index31.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;"}