@mdigital_ui/ui 0.2.9 → 0.3.1

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 (143) hide show
  1. package/README.md +574 -994
  2. package/dist/accordion/index.js +1 -1
  3. package/dist/avatar/index.js +1 -1
  4. package/dist/badge/index.js +1 -1
  5. package/dist/breadcrumbs/index.js +1 -1
  6. package/dist/button/index.js +1 -1
  7. package/dist/button-group/index.js +1 -1
  8. package/dist/card/index.js +2 -1
  9. package/dist/cascader/index.js +2 -1
  10. package/dist/checkbox/index.js +1 -1
  11. package/dist/checkbox-group/index.js +1 -1
  12. package/dist/{chunk-4LSKRZOT.js → chunk-2PNLIQYM.js} +21 -4
  13. package/dist/chunk-2PNLIQYM.js.map +1 -0
  14. package/dist/{chunk-43RDFTC5.js → chunk-4TQ4BZ3S.js} +6 -4
  15. package/dist/chunk-4TQ4BZ3S.js.map +1 -0
  16. package/dist/{chunk-IMGVPMHJ.js → chunk-5JOJBDET.js} +47 -40
  17. package/dist/chunk-5JOJBDET.js.map +1 -0
  18. package/dist/{chunk-W3ES3UPV.js → chunk-5VORB55Y.js} +19 -3
  19. package/dist/chunk-5VORB55Y.js.map +1 -0
  20. package/dist/{chunk-3UCZ4GMN.js → chunk-6HGUDHHE.js} +4 -2
  21. package/dist/chunk-6HGUDHHE.js.map +1 -0
  22. package/dist/chunk-6YVT3AL2.js +211 -0
  23. package/dist/chunk-6YVT3AL2.js.map +1 -0
  24. package/dist/{chunk-CPDVBHA3.js → chunk-7KA7JSRX.js} +133 -23
  25. package/dist/chunk-7KA7JSRX.js.map +1 -0
  26. package/dist/chunk-CO766H7F.js +348 -0
  27. package/dist/chunk-CO766H7F.js.map +1 -0
  28. package/dist/{chunk-JIREY2VB.js → chunk-DHXVNO75.js} +3 -3
  29. package/dist/{chunk-JIREY2VB.js.map → chunk-DHXVNO75.js.map} +1 -1
  30. package/dist/chunk-DRL4CJMI.js +147 -0
  31. package/dist/chunk-DRL4CJMI.js.map +1 -0
  32. package/dist/{chunk-YAAV7FQG.js → chunk-FJPMIXWU.js} +15 -4
  33. package/dist/chunk-FJPMIXWU.js.map +1 -0
  34. package/dist/{chunk-MXDTUN3V.js → chunk-FZLFCT6Q.js} +141 -106
  35. package/dist/chunk-FZLFCT6Q.js.map +1 -0
  36. package/dist/chunk-GGDDE7LC.js +303 -0
  37. package/dist/chunk-GGDDE7LC.js.map +1 -0
  38. package/dist/{chunk-MRFCITKK.js → chunk-GVEEUHM2.js} +20 -16
  39. package/dist/chunk-GVEEUHM2.js.map +1 -0
  40. package/dist/{chunk-RYKVZFGB.js → chunk-HLY4VDIX.js} +7 -7
  41. package/dist/chunk-HLY4VDIX.js.map +1 -0
  42. package/dist/{chunk-2OUGJBXK.js → chunk-IVOMN6DV.js} +60 -14
  43. package/dist/chunk-IVOMN6DV.js.map +1 -0
  44. package/dist/{chunk-REKWBXAQ.js → chunk-J6IJBRYT.js} +12 -11
  45. package/dist/chunk-J6IJBRYT.js.map +1 -0
  46. package/dist/{chunk-LMR7TKDJ.js → chunk-KPM72QBO.js} +27 -10
  47. package/dist/chunk-KPM72QBO.js.map +1 -0
  48. package/dist/{chunk-QF3NJUUG.js → chunk-L572AMB3.js} +53 -8
  49. package/dist/chunk-L572AMB3.js.map +1 -0
  50. package/dist/{chunk-UUP7YGOS.js → chunk-LX4FDH4J.js} +3 -3
  51. package/dist/chunk-LX4FDH4J.js.map +1 -0
  52. package/dist/chunk-OL2GU2O3.js +293 -0
  53. package/dist/chunk-OL2GU2O3.js.map +1 -0
  54. package/dist/{chunk-N32VWE6V.js → chunk-RLYGJN56.js} +64 -60
  55. package/dist/chunk-RLYGJN56.js.map +1 -0
  56. package/dist/{chunk-X5SCI7KH.js → chunk-RZVEKAFR.js} +18 -6
  57. package/dist/chunk-RZVEKAFR.js.map +1 -0
  58. package/dist/chunk-T4MGK3WE.js +143 -0
  59. package/dist/chunk-T4MGK3WE.js.map +1 -0
  60. package/dist/{chunk-YFK2DHCY.js → chunk-TBMY5EQC.js} +10 -6
  61. package/dist/chunk-TBMY5EQC.js.map +1 -0
  62. package/dist/{chunk-PXOHJJBE.js → chunk-UHVPOGNC.js} +44 -9
  63. package/dist/chunk-UHVPOGNC.js.map +1 -0
  64. package/dist/{chunk-CMGCJXE5.js → chunk-UTKVWE76.js} +15 -4
  65. package/dist/chunk-UTKVWE76.js.map +1 -0
  66. package/dist/chunk-XQJ6HZ4Q.js +310 -0
  67. package/dist/chunk-XQJ6HZ4Q.js.map +1 -0
  68. package/dist/chunk-YJOLLSHH.js +132 -0
  69. package/dist/chunk-YJOLLSHH.js.map +1 -0
  70. package/dist/chunk-YWGWFGCY.js +332 -0
  71. package/dist/chunk-YWGWFGCY.js.map +1 -0
  72. package/dist/{chunk-FIGSNRWY.js → chunk-ZFYEAPEL.js} +40 -13
  73. package/dist/chunk-ZFYEAPEL.js.map +1 -0
  74. package/dist/chunk-ZRSSFP52.js +345 -0
  75. package/dist/chunk-ZRSSFP52.js.map +1 -0
  76. package/dist/clipboard/index.js +2 -1
  77. package/dist/collapse/index.js +2 -1
  78. package/dist/command/index.js +1 -1
  79. package/dist/context-menu/index.js +1 -1
  80. package/dist/date-picker/index.js +1 -1
  81. package/dist/descriptions/index.js +1 -1
  82. package/dist/float-input/index.js +6 -0
  83. package/dist/form/index.js +4 -0
  84. package/dist/form/index.js.map +1 -0
  85. package/dist/index.js +38 -30
  86. package/dist/index.js.map +1 -1
  87. package/dist/link/index.js +4 -0
  88. package/dist/link/index.js.map +1 -0
  89. package/dist/menubar/index.js +6 -0
  90. package/dist/menubar/index.js.map +1 -0
  91. package/dist/navigation-menu/index.js +4 -0
  92. package/dist/navigation-menu/index.js.map +1 -0
  93. package/dist/number-input/index.js +6 -0
  94. package/dist/number-input/index.js.map +1 -0
  95. package/dist/pagination/index.js +1 -1
  96. package/dist/progress/index.js +1 -1
  97. package/dist/scroll-area/index.js +4 -0
  98. package/dist/scroll-area/index.js.map +1 -0
  99. package/dist/select/index.js +1 -1
  100. package/dist/slider/index.js +1 -1
  101. package/dist/table/index.js +4 -4
  102. package/dist/timeline/index.js +4 -0
  103. package/dist/timeline/index.js.map +1 -0
  104. package/dist/toast/index.js +5 -0
  105. package/dist/toast/index.js.map +1 -0
  106. package/dist/transfer/index.js +2 -2
  107. package/dist/upload/index.js +1 -1
  108. package/package.json +72 -14
  109. package/dist/chart/index.js +0 -4
  110. package/dist/chunk-2OUGJBXK.js.map +0 -1
  111. package/dist/chunk-3UCZ4GMN.js.map +0 -1
  112. package/dist/chunk-43RDFTC5.js.map +0 -1
  113. package/dist/chunk-4LSKRZOT.js.map +0 -1
  114. package/dist/chunk-C5YO5VZS.js +0 -448
  115. package/dist/chunk-C5YO5VZS.js.map +0 -1
  116. package/dist/chunk-CMGCJXE5.js.map +0 -1
  117. package/dist/chunk-CPDVBHA3.js.map +0 -1
  118. package/dist/chunk-FIGSNRWY.js.map +0 -1
  119. package/dist/chunk-H47C2ENJ.js +0 -215
  120. package/dist/chunk-H47C2ENJ.js.map +0 -1
  121. package/dist/chunk-IMGVPMHJ.js.map +0 -1
  122. package/dist/chunk-LMR7TKDJ.js.map +0 -1
  123. package/dist/chunk-MRFCITKK.js.map +0 -1
  124. package/dist/chunk-MXDTUN3V.js.map +0 -1
  125. package/dist/chunk-N32VWE6V.js.map +0 -1
  126. package/dist/chunk-PXOHJJBE.js.map +0 -1
  127. package/dist/chunk-QF3NJUUG.js.map +0 -1
  128. package/dist/chunk-REKWBXAQ.js.map +0 -1
  129. package/dist/chunk-RYKVZFGB.js.map +0 -1
  130. package/dist/chunk-UUP7YGOS.js.map +0 -1
  131. package/dist/chunk-W3ES3UPV.js.map +0 -1
  132. package/dist/chunk-X5SCI7KH.js.map +0 -1
  133. package/dist/chunk-YAAV7FQG.js.map +0 -1
  134. package/dist/chunk-YFK2DHCY.js.map +0 -1
  135. package/dist/index.d.ts +0 -5220
  136. package/dist/styles/base.css +0 -5906
  137. package/dist/styles/global.css +0 -6401
  138. package/dist/styles/themes/dark.css +0 -93
  139. package/dist/styles/themes/light.css +0 -89
  140. package/dist/styles/themes/presets/corporate.css +0 -126
  141. package/dist/styles/themes/presets/minimal.css +0 -126
  142. package/dist/styles/themes/presets/vibrant.css +0 -126
  143. /package/dist/{chart → float-input}/index.js.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pagination/index.tsx"],"names":[],"mappings":"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","file":"chunk-RZVEKAFR.js","sourcesContent":["'use client'\n\nimport { cva } from 'class-variance-authority'\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n MoreHorizontal,\n} from 'lucide-react'\nimport React, { useState } from 'react'\n\nimport { cn, iconSizes } from '../utils'\nimport type { PaginationProps } from './types'\n\nconst paginationVariants = cva('inline-flex items-center gap-1', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst paginationItemVariants = cva(\n 'inline-flex items-center justify-center rounded-md font-medium outline-none transition-all cursor-pointer border min-w-fit',\n {\n variants: {\n size: {\n xs: 'h-6 min-w-6 px-1.5 text-xs',\n sm: 'h-8 min-w-8 px-2 text-sm',\n md: 'h-10 min-w-10 px-3 text-base',\n lg: 'h-12 min-w-12 px-4 text-lg',\n },\n disabled: {\n true: 'opacity-50 cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n disabled: false,\n },\n },\n)\n\nconst colorStyles = {\n default: {\n default:\n 'border-border bg-background text-text-primary hover:bg-surface hover:border-text-primary',\n solid: 'border-surface bg-surface text-text-primary hover:bg-surface/80',\n soft: 'border-border bg-surface/50 text-text-primary hover:bg-surface',\n },\n primary: {\n default:\n 'border-border bg-background text-text-primary hover:bg-primary/10 hover:border-primary',\n solid: 'border-primary bg-primary text-background hover:bg-primary/90',\n soft: 'border-primary/30 bg-primary/10 text-primary hover:bg-primary/20',\n },\n secondary: {\n default:\n 'border-border bg-background text-text-primary hover:bg-secondary/10 hover:border-secondary',\n solid:\n 'border-secondary bg-secondary text-background hover:bg-secondary/90',\n soft: 'border-secondary/30 bg-secondary/10 text-secondary hover:bg-secondary/20',\n },\n accent: {\n default:\n 'border-border bg-background text-text-primary hover:bg-accent/10 hover:border-accent',\n solid: 'border-accent bg-accent text-background hover:bg-accent/90',\n soft: 'border-accent/30 bg-accent/10 text-accent hover:bg-accent/20',\n },\n success: {\n default:\n 'border-border bg-background text-text-primary hover:bg-success/10 hover:border-success',\n solid: 'border-success bg-success text-background hover:bg-success/90',\n soft: 'border-success/30 bg-success/10 text-success hover:bg-success/20',\n },\n error: {\n default:\n 'border-border bg-background text-text-primary hover:bg-error/10 hover:border-error',\n solid: 'border-error bg-error text-background hover:bg-error/90',\n soft: 'border-error/30 bg-error/10 text-error hover:bg-error/20',\n },\n warning: {\n default:\n 'border-border bg-background text-text-primary hover:bg-warning/10 hover:border-warning',\n solid: 'border-warning bg-warning text-background hover:bg-warning/90',\n soft: 'border-warning/30 bg-warning/10 text-warning hover:bg-warning/20',\n },\n info: {\n default:\n 'border-border bg-background text-text-primary hover:bg-info/10 hover:border-info',\n solid: 'border-info bg-info text-background hover:bg-info/90',\n soft: 'border-info/30 bg-info/10 text-info hover:bg-info/20',\n },\n}\n\nconst activeColorStyles = {\n default: {\n default: 'border-text-primary bg-surface text-text-primary',\n solid: 'border-border bg-surface text-text-primary',\n soft: 'border-border bg-surface text-text-primary',\n },\n primary: {\n default: 'border-primary bg-primary/10 text-primary',\n solid: 'border-primary bg-primary-hover text-background',\n soft: 'border-primary bg-primary/20 text-primary',\n },\n secondary: {\n default: 'border-secondary bg-secondary/10 text-secondary',\n solid: 'border-secondary bg-secondary text-background',\n soft: 'border-secondary bg-secondary/20 text-secondary',\n },\n accent: {\n default: 'border-accent bg-accent/10 text-accent',\n solid: 'border-accent bg-accent text-background',\n soft: 'border-accent bg-accent/20 text-accent',\n },\n success: {\n default: 'border-success bg-success/10 text-success',\n solid: 'border-success bg-success text-background',\n soft: 'border-success bg-success/20 text-success',\n },\n error: {\n default: 'border-error bg-error/10 text-error',\n solid: 'border-error bg-error text-background',\n soft: 'border-error bg-error/20 text-error',\n },\n warning: {\n default: 'border-warning bg-warning/10 text-warning',\n solid: 'border-warning bg-warning text-background',\n soft: 'border-warning bg-warning/20 text-warning',\n },\n info: {\n default: 'border-info bg-info/10 text-info',\n solid: 'border-info bg-info text-background',\n soft: 'border-info bg-info/20 text-info',\n },\n}\n\nconst Pagination = React.memo<PaginationProps>(\n ({\n total,\n current: controlledCurrent,\n defaultCurrent = 1,\n pageSize: controlledPageSize,\n defaultPageSize = 10,\n onChange,\n onShowSizeChange,\n color = 'default',\n size = 'md',\n variant = 'default',\n showSizeChanger = false,\n pageSizeOptions = [10, 20, 50, 100],\n showQuickJumper = false,\n showFirstLastButtons = false,\n showTotal,\n disabled = false,\n className,\n classNames,\n }) => {\n const [internalCurrent, setInternalCurrent] = useState(defaultCurrent)\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize)\n\n const current =\n controlledCurrent !== undefined ? controlledCurrent : internalCurrent\n const pageSize =\n controlledPageSize !== undefined ? controlledPageSize : internalPageSize\n const totalPages = Math.ceil(total / pageSize)\n\n const handlePageChange = (page: number) => {\n if (disabled || page === current || page < 1 || page > totalPages) return\n\n if (controlledCurrent === undefined) {\n setInternalCurrent(page)\n }\n onChange?.(page, pageSize)\n }\n\n const handlePageSizeChange = (newSize: number) => {\n if (disabled) return\n\n const newTotalPages = Math.ceil(total / newSize)\n const newCurrent = current > newTotalPages ? newTotalPages : current\n\n if (controlledPageSize === undefined) {\n setInternalPageSize(newSize)\n }\n if (controlledCurrent === undefined && newCurrent !== current) {\n setInternalCurrent(newCurrent)\n }\n\n onShowSizeChange?.(newCurrent, newSize)\n onChange?.(newCurrent, newSize)\n }\n\n const getPageNumbers = () => {\n const pages: (number | 'ellipsis')[] = []\n const showPages = 5\n\n if (totalPages <= showPages + 2) {\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push(1)\n\n if (current <= 3) {\n for (let i = 2; i <= 4; i++) {\n pages.push(i)\n }\n pages.push('ellipsis')\n } else if (current >= totalPages - 2) {\n pages.push('ellipsis')\n for (let i = totalPages - 3; i < totalPages; i++) {\n pages.push(i)\n }\n } else {\n pages.push('ellipsis')\n pages.push(current - 1)\n pages.push(current)\n pages.push(current + 1)\n pages.push('ellipsis')\n }\n\n pages.push(totalPages)\n }\n\n return pages\n }\n\n const range: [number, number] = [\n (current - 1) * pageSize + 1,\n Math.min(current * pageSize, total),\n ]\n\n return (\n <div\n className={cn(\n 'pagination_root',\n 'flex items-center gap-4',\n classNames?.root,\n className,\n )}\n >\n {showTotal && (\n <div\n className={cn(\n 'pagination_info',\n 'text-text-secondary text-sm',\n classNames?.info,\n )}\n >\n {showTotal(total, range)}\n </div>\n )}\n\n <div\n className={cn(\n 'pagination_list',\n paginationVariants({ size }),\n classNames?.list,\n )}\n >\n {/* First Page Button */}\n {showFirstLastButtons && (\n <button\n type=\"button\"\n onClick={() => handlePageChange(1)}\n disabled={disabled || current === 1}\n className={cn(\n 'pagination_button',\n paginationItemVariants({\n size,\n disabled: disabled || current === 1,\n }),\n colorStyles[color][variant],\n classNames?.button,\n )}\n aria-label=\"First page\"\n >\n <ChevronsLeft className={iconSizes[size]} />\n </button>\n )}\n\n {/* Previous Button */}\n <button\n type=\"button\"\n onClick={() => handlePageChange(current - 1)}\n disabled={disabled || current === 1}\n className={cn(\n 'pagination_button',\n paginationItemVariants({\n size,\n disabled: disabled || current === 1,\n }),\n colorStyles[color][variant],\n classNames?.button,\n )}\n aria-label=\"Previous page\"\n >\n <ChevronLeft className={iconSizes[size]} />\n </button>\n\n {/* Page Numbers */}\n {getPageNumbers().map((page, index) =>\n page === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n className={cn(\n 'pagination_ellipsis',\n paginationItemVariants({ size, disabled: false }),\n colorStyles[color]['soft'],\n 'border-none pointer-events-none',\n classNames?.ellipsis,\n )}\n aria-hidden=\"true\"\n >\n <MoreHorizontal className={iconSizes[size]} />\n </span>\n ) : (\n <button\n type=\"button\"\n key={page}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n aria-label={`Go to page ${page}`}\n aria-current={current === page ? 'page' : undefined}\n className={cn(\n 'pagination_button',\n paginationItemVariants({ size, disabled }),\n current === page\n ? activeColorStyles[color][variant]\n : colorStyles[color][variant],\n current === page ? classNames?.buttonActive : classNames?.button,\n )}\n >\n {page}\n </button>\n ),\n )}\n\n {/* Next Button */}\n <button\n type=\"button\"\n onClick={() => handlePageChange(current + 1)}\n disabled={disabled || current === totalPages}\n className={cn(\n 'pagination_button',\n paginationItemVariants({\n size,\n disabled: disabled || current === totalPages,\n }),\n colorStyles[color][variant],\n classNames?.button,\n )}\n aria-label=\"Next page\"\n >\n <ChevronRight className={iconSizes[size]} />\n </button>\n\n {/* Last Page Button */}\n {showFirstLastButtons && (\n <button\n type=\"button\"\n onClick={() => handlePageChange(totalPages)}\n disabled={disabled || current === totalPages}\n className={cn(\n 'pagination_button',\n paginationItemVariants({\n size,\n disabled: disabled || current === totalPages,\n }),\n colorStyles[color][variant],\n classNames?.button,\n )}\n aria-label=\"Last page\"\n >\n <ChevronsRight className={iconSizes[size]} />\n </button>\n )}\n </div>\n\n {/* Page Size Changer */}\n {showSizeChanger && (\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n disabled={disabled}\n aria-label=\"Items per page\"\n className={cn(\n paginationItemVariants({ size, disabled }),\n colorStyles[color][variant],\n 'cursor-pointer',\n )}\n >\n {pageSizeOptions.map((option) => (\n <option\n key={option}\n value={option}\n >\n {option} / page\n </option>\n ))}\n </select>\n )}\n\n {/* Quick Jumper */}\n {showQuickJumper && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-text-secondary text-sm\">Go to</span>\n <input\n type=\"number\"\n min={1}\n max={totalPages}\n disabled={disabled}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n const inputEl = e.target as HTMLInputElement\n const value = parseInt(inputEl.value)\n if (!isNaN(value)) {\n const clampedValue = Math.max(1, Math.min(totalPages, value))\n handlePageChange(clampedValue)\n inputEl.value = ''\n }\n }\n }}\n onBlur={(e) => {\n const inputEl = e.target as HTMLInputElement\n const value = parseInt(inputEl.value)\n if (!isNaN(value) && inputEl.value !== '') {\n const clampedValue = Math.max(1, Math.min(totalPages, value))\n if (clampedValue !== value) {\n inputEl.value = String(clampedValue)\n }\n }\n }}\n className={cn(\n paginationItemVariants({ size, disabled }),\n colorStyles[color][variant],\n 'w-16 text-center',\n )}\n />\n </div>\n )}\n </div>\n )\n },\n)\n\nPagination.displayName = 'Pagination'\n\nexport type * from './types'\nexport default Pagination\n"]}
@@ -0,0 +1,143 @@
1
+ import { cn } from './chunk-NGYLRX6F.js';
2
+ import React from 'react';
3
+ import { useFormContext, FormProvider, Controller } from 'react-hook-form';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var FormFieldContext = React.createContext({});
7
+ var FormItemContext = React.createContext({});
8
+ var useFormField = () => {
9
+ const fieldContext = React.useContext(FormFieldContext);
10
+ const itemContext = React.useContext(FormItemContext);
11
+ const { getFieldState, formState } = useFormContext();
12
+ const fieldState = getFieldState(fieldContext.name, formState);
13
+ if (!fieldContext) {
14
+ throw new Error("useFormField must be used within <FormField>");
15
+ }
16
+ const { id } = itemContext;
17
+ return {
18
+ id,
19
+ name: fieldContext.name,
20
+ formItemId: `${id}-form-item`,
21
+ formDescriptionId: `${id}-form-item-description`,
22
+ formMessageId: `${id}-form-item-message`,
23
+ ...fieldState
24
+ };
25
+ };
26
+ var Form = ({
27
+ form,
28
+ onSubmit,
29
+ className,
30
+ classNames,
31
+ children,
32
+ ref,
33
+ ...props
34
+ }) => {
35
+ return /* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsx(
36
+ "form",
37
+ {
38
+ ref,
39
+ className: cn("form_root", classNames?.root, className),
40
+ onSubmit: form.handleSubmit(onSubmit),
41
+ "data-slot": "root",
42
+ ...props,
43
+ children
44
+ }
45
+ ) });
46
+ };
47
+ Form.displayName = "Form";
48
+ var FormField = ({
49
+ name,
50
+ render
51
+ }) => {
52
+ return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name }, children: /* @__PURE__ */ jsx(Controller, { name, render }) });
53
+ };
54
+ FormField.displayName = "FormField";
55
+ var FormItem = React.memo(({ className, classNames, ...props }) => {
56
+ const id = React.useId();
57
+ return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
58
+ "div",
59
+ {
60
+ className: cn("form_field space-y-2", classNames?.field, className),
61
+ "data-slot": "field",
62
+ ...props
63
+ }
64
+ ) });
65
+ });
66
+ FormItem.displayName = "FormItem";
67
+ var FormLabel = React.memo(
68
+ ({ className, classNames, required, children, ...props }) => {
69
+ const { error, formItemId } = useFormField();
70
+ return /* @__PURE__ */ jsxs(
71
+ "label",
72
+ {
73
+ className: cn(
74
+ "form_label text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
75
+ error && "text-error",
76
+ classNames?.label,
77
+ className
78
+ ),
79
+ htmlFor: formItemId,
80
+ "data-slot": "label",
81
+ ...props,
82
+ children: [
83
+ children,
84
+ required && /* @__PURE__ */ jsx("span", { className: "ml-1 text-error", children: "*" })
85
+ ]
86
+ }
87
+ );
88
+ }
89
+ );
90
+ FormLabel.displayName = "FormLabel";
91
+ var FormControl = React.memo(({ children, classNames }) => {
92
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
93
+ const childProps = children.props;
94
+ return React.cloneElement(children, {
95
+ id: formItemId,
96
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
97
+ "aria-invalid": !!error,
98
+ className: cn("form_control", classNames?.control, childProps.className),
99
+ "data-slot": "control"
100
+ });
101
+ });
102
+ FormControl.displayName = "FormControl";
103
+ var FormDescription = React.memo(
104
+ ({ className, classNames, ...props }) => {
105
+ const { formDescriptionId } = useFormField();
106
+ return /* @__PURE__ */ jsx(
107
+ "p",
108
+ {
109
+ id: formDescriptionId,
110
+ className: cn(
111
+ "form_description text-sm text-text-secondary",
112
+ classNames?.description,
113
+ className
114
+ ),
115
+ "data-slot": "description",
116
+ ...props
117
+ }
118
+ );
119
+ }
120
+ );
121
+ FormDescription.displayName = "FormDescription";
122
+ var FormMessage = React.memo(({ className, classNames, children, ...props }) => {
123
+ const { error, formMessageId } = useFormField();
124
+ const body = error ? String(error?.message) : children;
125
+ if (!body) {
126
+ return null;
127
+ }
128
+ return /* @__PURE__ */ jsx(
129
+ "p",
130
+ {
131
+ id: formMessageId,
132
+ className: cn("form_message text-sm font-medium text-error", classNames?.message, className),
133
+ "data-slot": "message",
134
+ ...props,
135
+ children: body
136
+ }
137
+ );
138
+ });
139
+ FormMessage.displayName = "FormMessage";
140
+
141
+ export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
142
+ //# sourceMappingURL=chunk-T4MGK3WE.js.map
143
+ //# sourceMappingURL=chunk-T4MGK3WE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/form/index.tsx"],"names":[],"mappings":"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","file":"chunk-T4MGK3WE.js","sourcesContent":["'use client'\n\nimport React from 'react'\nimport { Controller, FormProvider, useFormContext } from 'react-hook-form'\nimport type { FieldPath, FieldValues } from 'react-hook-form'\n\nimport { cn } from '../utils'\nimport type {\n FormControlProps,\n FormDescriptionProps,\n FormFieldContextValue,\n FormFieldProps,\n FormItemContextValue,\n FormItemProps,\n FormLabelProps,\n FormMessageProps,\n FormProps,\n} from './types'\n\n// Context for FormField to pass name down to FormLabel, FormControl, etc.\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue)\n\n// Context for FormItem to generate unique IDs for label-control association\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue)\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error('useFormField must be used within <FormField>')\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\n// Main Form component that wraps FormProvider\nconst Form = <T extends FieldValues = FieldValues>({\n form,\n onSubmit,\n className,\n classNames,\n children,\n ref,\n ...props\n}: FormProps<T>) => {\n return (\n <FormProvider {...form}>\n <form\n ref={ref}\n className={cn('form_root', classNames?.root, className)}\n onSubmit={form.handleSubmit(onSubmit)}\n data-slot=\"root\"\n {...props}\n >\n {children}\n </form>\n </FormProvider>\n )\n}\n\nForm.displayName = 'Form'\n\n// FormField connects to react-hook-form's Controller\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n name,\n render,\n}: FormFieldProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name }}>\n <Controller name={name} render={render} />\n </FormFieldContext.Provider>\n )\n}\n\nFormField.displayName = 'FormField'\n\n// FormItem provides context for label-control association\nconst FormItem = React.memo<FormItemProps>(({ className, classNames, ...props }) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div\n className={cn('form_field space-y-2', classNames?.field, className)}\n data-slot=\"field\"\n {...props}\n />\n </FormItemContext.Provider>\n )\n})\n\nFormItem.displayName = 'FormItem'\n\n// FormLabel renders label with htmlFor pointing to the control\nconst FormLabel = React.memo<FormLabelProps>(\n ({ className, classNames, required, children, ...props }) => {\n const { error, formItemId } = useFormField()\n\n return (\n <label\n className={cn(\n 'form_label text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n error && 'text-error',\n classNames?.label,\n className,\n )}\n htmlFor={formItemId}\n data-slot=\"label\"\n {...props}\n >\n {children}\n {required && <span className=\"ml-1 text-error\">*</span>}\n </label>\n )\n },\n)\n\nFormLabel.displayName = 'FormLabel'\n\n// FormControl wraps the input component with proper aria attributes\nconst FormControl = React.memo<FormControlProps>(({ children, classNames }) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n const childProps = children.props as Record<string, unknown>\n\n return React.cloneElement(children, {\n id: formItemId,\n 'aria-describedby': !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`,\n 'aria-invalid': !!error,\n className: cn('form_control', classNames?.control, childProps.className as string | undefined),\n 'data-slot': 'control',\n } as Record<string, unknown>)\n})\n\nFormControl.displayName = 'FormControl'\n\n// FormDescription shows helper text below the control\nconst FormDescription = React.memo<FormDescriptionProps>(\n ({ className, classNames, ...props }) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n id={formDescriptionId}\n className={cn(\n 'form_description text-sm text-text-secondary',\n classNames?.description,\n className,\n )}\n data-slot=\"description\"\n {...props}\n />\n )\n },\n)\n\nFormDescription.displayName = 'FormDescription'\n\n// FormMessage shows validation error messages\nconst FormMessage = React.memo<FormMessageProps>(({ className, classNames, children, ...props }) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n id={formMessageId}\n className={cn('form_message text-sm font-medium text-error', classNames?.message, className)}\n data-slot=\"message\"\n {...props}\n >\n {body}\n </p>\n )\n})\n\nFormMessage.displayName = 'FormMessage'\n\nexport type * from './types'\nexport { Form, FormField, FormItem, FormLabel, FormControl, FormDescription, FormMessage, useFormField }\n"]}
@@ -99,8 +99,10 @@ var Button = React.memo(
99
99
  loading = false,
100
100
  loadingText,
101
101
  loadingPosition = "left",
102
- leftIcon,
103
- rightIcon,
102
+ icon,
103
+ iconPlacement = "left",
104
+ leftIcon: leftIconProp,
105
+ rightIcon: rightIconProp,
104
106
  fullWidth = false,
105
107
  iconOnly = false,
106
108
  className,
@@ -113,6 +115,8 @@ var Button = React.memo(
113
115
  const isDisabled = disabled || loading;
114
116
  const spinnerSize = spinnerSizeMap[size];
115
117
  const spinnerColor = getSpinnerColor(variant, color);
118
+ const leftIcon = leftIconProp ?? (iconPlacement === "left" ? icon : void 0);
119
+ const rightIcon = rightIconProp ?? (iconPlacement === "right" ? icon : void 0);
116
120
  const showLeftIcon = !loading && leftIcon;
117
121
  const showRightIcon = !loading && rightIcon;
118
122
  const showSpinnerLeft = loading && loadingPosition === "left";
@@ -154,7 +158,7 @@ var Button = React.memo(
154
158
  showLeftIcon && /* @__PURE__ */ jsx(
155
159
  "span",
156
160
  {
157
- className: cn("button_icon shrink-0", classNames?.icon),
161
+ className: cn("button_icon shrink-0", classNames?.icon, classNames?.leftIcon),
158
162
  "data-slot": "icon",
159
163
  children: leftIcon
160
164
  }
@@ -170,7 +174,7 @@ var Button = React.memo(
170
174
  showRightIcon && /* @__PURE__ */ jsx(
171
175
  "span",
172
176
  {
173
- className: cn("button_icon shrink-0", classNames?.icon),
177
+ className: cn("button_icon shrink-0", classNames?.icon, classNames?.rightIcon),
174
178
  "data-slot": "icon",
175
179
  children: rightIcon
176
180
  }
@@ -192,5 +196,5 @@ Button.displayName = "Button";
192
196
  var button_default = Button;
193
197
 
194
198
  export { button_default };
195
- //# sourceMappingURL=chunk-YFK2DHCY.js.map
196
- //# sourceMappingURL=chunk-YFK2DHCY.js.map
199
+ //# sourceMappingURL=chunk-TBMY5EQC.js.map
200
+ //# sourceMappingURL=chunk-TBMY5EQC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/button/index.tsx"],"names":[],"mappings":"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","file":"chunk-TBMY5EQC.js","sourcesContent":["'use client'\n\nimport { cva } from \"class-variance-authority\";\nimport React from \"react\";\n\nimport { Spinner } from \"../spinner\";\nimport { cn } from \"../utils\";\nimport { buttonColors, createAllColorVariants } from \"../variants\";\nimport type { ButtonProps, ButtonColor } from \"./types\";\n\nconst buttonVariants = cva(\n [\n \"inline-flex cursor-pointer text-center font-medium items-center justify-center\",\n \"transition-colors duration-200\",\n \"disabled:opacity-50 disabled:pointer-events-none\",\n // Focus ring for accessibility\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n ],\n {\n variants: {\n variant: {\n solid: \"border\",\n outline: \"border bg-transparent\",\n soft: \"border-none\",\n dashed: \"border border-dashed bg-transparent\",\n link: \"border-none bg-transparent hover:underline\",\n ghost: \"border-none bg-transparent\",\n },\n color: {\n primary: \"border-primary focus-visible:ring-primary\",\n secondary: \"border-secondary focus-visible:ring-secondary\",\n accent: \"border-accent focus-visible:ring-accent\",\n success: \"border-success focus-visible:ring-success\",\n error: \"border-error focus-visible:ring-error\",\n warning: \"border-warning focus-visible:ring-warning\",\n info: \"border-info focus-visible:ring-info\",\n },\n size: {\n xs: \"h-(--button-height-xs) px-(--button-padding-x-xs) text-xs gap-1.5\",\n sm: \"h-(--button-height-sm) px-(--button-padding-x-sm) text-sm gap-2\",\n md: \"h-(--button-height-md) px-(--button-padding-x-md) text-base gap-2\",\n lg: \"h-(--button-height-lg) px-(--button-padding-x-lg) text-lg gap-2.5\",\n },\n shape: {\n rounded: \"rounded-md\",\n pill: \"rounded-full\",\n square: \"rounded-none\",\n },\n fullWidth: {\n true: \"w-full\",\n false: \"\",\n },\n iconOnly: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Icon-only buttons: square aspect ratio\n { iconOnly: true, size: \"xs\", class: \"w-(--button-height-xs) px-0\" },\n { iconOnly: true, size: \"sm\", class: \"w-(--button-height-sm) px-0\" },\n { iconOnly: true, size: \"md\", class: \"w-(--button-height-md) px-0\" },\n { iconOnly: true, size: \"lg\", class: \"w-(--button-height-lg) px-0\" },\n // Color variants\n ...createAllColorVariants(buttonColors, [\n \"solid\",\n \"outline\",\n \"soft\",\n \"dashed\",\n \"link\",\n \"ghost\",\n ]),\n ],\n defaultVariants: {\n variant: \"solid\",\n color: \"primary\",\n size: \"md\",\n shape: \"rounded\",\n fullWidth: false,\n iconOnly: false,\n },\n },\n);\n\n// Map button size to spinner size\nconst spinnerSizeMap: Record<\n NonNullable<ButtonProps[\"size\"]>,\n \"xs\" | \"sm\" | \"md\" | \"lg\"\n> = {\n xs: \"xs\",\n sm: \"xs\",\n md: \"sm\",\n lg: \"md\",\n};\n\n// Get spinner color based on button variant\nfunction getSpinnerColor(\n variant: ButtonProps[\"variant\"],\n color: ButtonColor,\n): ButtonColor | \"default\" {\n // Solid buttons have white text, so spinner should be white/default\n if (variant === \"solid\") {\n return \"default\";\n }\n // Other variants use the button's color\n return color;\n}\n\nconst Button = React.memo<ButtonProps>(\n ({\n variant = \"solid\",\n color = \"primary\",\n size = \"md\",\n shape = \"rounded\",\n loading = false,\n loadingText,\n loadingPosition = \"left\",\n icon,\n iconPlacement = \"left\",\n leftIcon: leftIconProp,\n rightIcon: rightIconProp,\n fullWidth = false,\n iconOnly = false,\n className,\n classNames,\n children,\n disabled,\n ref,\n ...props\n }) => {\n const isDisabled = disabled || loading;\n const spinnerSize = spinnerSizeMap[size];\n const spinnerColor = getSpinnerColor(variant, color);\n\n // Resolve icons: leftIcon/rightIcon take precedence over icon+iconPlacement\n const leftIcon = leftIconProp ?? (iconPlacement === \"left\" ? icon : undefined);\n const rightIcon = rightIconProp ?? (iconPlacement === \"right\" ? icon : undefined);\n\n // Determine what to render\n const showLeftIcon = !loading && leftIcon;\n const showRightIcon = !loading && rightIcon;\n const showSpinnerLeft = loading && loadingPosition === \"left\";\n const showSpinnerRight = loading && loadingPosition === \"right\";\n\n // Content: loadingText when loading, otherwise children\n const content = loading && loadingText ? loadingText : children;\n\n // For icon-only buttons with loading, just show spinner\n const iconOnlyLoading = iconOnly && loading;\n\n return (\n <button\n ref={ref}\n type={props.type ?? \"button\"}\n className={cn(\n \"button_root\",\n buttonVariants({ color, size, variant, shape, fullWidth, iconOnly }),\n classNames?.root,\n className,\n )}\n disabled={isDisabled}\n aria-busy={loading}\n aria-disabled={isDisabled}\n data-slot=\"root\"\n {...props}\n >\n {iconOnlyLoading ? (\n <span\n className={cn(\"button_spinner\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n ) : (\n <>\n {showSpinnerLeft && (\n <span\n className={cn(\"button_spinner\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n )}\n {showLeftIcon && (\n <span\n className={cn(\"button_icon shrink-0\", classNames?.icon, classNames?.leftIcon)}\n data-slot=\"icon\"\n >\n {leftIcon}\n </span>\n )}\n {content && (\n <span\n className={cn(\"button_content\", classNames?.content)}\n data-slot=\"content\"\n >\n {content}\n </span>\n )}\n {showRightIcon && (\n <span\n className={cn(\"button_icon shrink-0\", classNames?.icon, classNames?.rightIcon)}\n data-slot=\"icon\"\n >\n {rightIcon}\n </span>\n )}\n {showSpinnerRight && (\n <span\n className={cn(\"button_spinner\", classNames?.spinner)}\n data-slot=\"spinner\"\n >\n <Spinner size={spinnerSize} color={spinnerColor} />\n </span>\n )}\n </>\n )}\n </button>\n );\n },\n);\n\nButton.displayName = \"Button\";\n\nexport type * from \"./types\";\nexport default Button;\n"]}
@@ -1,3 +1,4 @@
1
+ import { focusRingColorClasses } from './chunk-LK4EPTNG.js';
1
2
  import { cn, iconSizes } from './chunk-NGYLRX6F.js';
2
3
  import { cva } from 'class-variance-authority';
3
4
  import { Check, Copy } from 'lucide-react';
@@ -5,14 +6,14 @@ import React, { useState, useRef, useEffect } from 'react';
5
6
  import { jsxs, jsx } from 'react/jsx-runtime';
6
7
 
7
8
  var clipboardVariants = cva(
8
- "inline-flex items-center justify-between gap-2 rounded-md font-medium transition-all cursor-pointer border",
9
+ "inline-flex items-center justify-between gap-2 rounded-md font-medium transition-all cursor-pointer border focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
9
10
  {
10
11
  variants: {
11
12
  size: {
12
- xs: "px-2 py-1 text-xs",
13
- sm: "px-3 py-1.5 text-xs",
14
- md: "px-4 py-2 text-sm",
15
- lg: "px-5 py-2.5 text-lg"
13
+ xs: "px-1.5 py-1 text-xs",
14
+ sm: "px-2 py-1.5 text-xs",
15
+ md: "px-2.5 py-2 text-sm",
16
+ lg: "px-3.5 py-2 text-lg"
16
17
  }
17
18
  },
18
19
  defaultVariants: {
@@ -116,17 +117,51 @@ var Clipboard = React.memo(
116
117
  onKeyDown: handleKeyDown,
117
118
  "aria-label": copied ? "Copied to clipboard" : `Copy ${showValue ? value : "to clipboard"}`,
118
119
  "aria-disabled": disabled,
120
+ "aria-live": "polite",
119
121
  className: cn(
120
122
  clipboardVariants({ size }),
121
123
  colorStyles[color][variant],
124
+ focusRingColorClasses[color],
122
125
  disabled && "opacity-50 cursor-not-allowed",
126
+ !showValue && "aspect-square justify-center",
123
127
  "clipboard_root",
124
128
  classNames?.root,
125
129
  className
126
130
  ),
131
+ "data-slot": "root",
127
132
  children: [
128
- showValue && /* @__PURE__ */ jsx("span", { className: cn("font-mono truncate clipboard_input", classNames?.input), children: value }),
129
- copied ? /* @__PURE__ */ jsx(Check, { className: cn(iconSizes[size], "flex-shrink-0 clipboard_button", classNames?.button) }) : /* @__PURE__ */ jsx(Copy, { className: cn(iconSizes[size], "flex-shrink-0 clipboard_button", classNames?.button) })
133
+ showValue && /* @__PURE__ */ jsx(
134
+ "span",
135
+ {
136
+ className: cn(
137
+ "font-mono truncate clipboard_input",
138
+ classNames?.input
139
+ ),
140
+ "data-slot": "input",
141
+ children: value
142
+ }
143
+ ),
144
+ copied ? /* @__PURE__ */ jsx(
145
+ Check,
146
+ {
147
+ className: cn(
148
+ iconSizes[size],
149
+ "shrink-0 clipboard_button",
150
+ classNames?.button
151
+ ),
152
+ "data-slot": "icon"
153
+ }
154
+ ) : /* @__PURE__ */ jsx(
155
+ Copy,
156
+ {
157
+ className: cn(
158
+ iconSizes[size],
159
+ "shrink-0 clipboard_button",
160
+ classNames?.button
161
+ ),
162
+ "data-slot": "icon"
163
+ }
164
+ )
130
165
  ]
131
166
  }
132
167
  );
@@ -136,5 +171,5 @@ Clipboard.displayName = "Clipboard";
136
171
  var clipboard_default = Clipboard;
137
172
 
138
173
  export { clipboard_default };
139
- //# sourceMappingURL=chunk-PXOHJJBE.js.map
140
- //# sourceMappingURL=chunk-PXOHJJBE.js.map
174
+ //# sourceMappingURL=chunk-UHVPOGNC.js.map
175
+ //# sourceMappingURL=chunk-UHVPOGNC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/clipboard/index.tsx"],"names":[],"mappings":"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","file":"chunk-UHVPOGNC.js","sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Check, Copy } from \"lucide-react\";\nimport React, { useState, useRef, useEffect } from \"react\";\n\nimport { cn, iconSizes } from \"../utils\";\nimport { focusRingColorClasses } from \"../variants\";\nimport type { ClipboardProps } from \"./types\";\n\nconst clipboardVariants = cva(\n \"inline-flex items-center justify-between gap-2 rounded-md font-medium transition-all cursor-pointer border focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n {\n variants: {\n size: {\n xs: \"px-1.5 py-1 text-xs\",\n sm: \"px-2 py-1.5 text-xs\",\n md: \"px-2.5 py-2 text-sm\",\n lg: \"px-3.5 py-2 text-lg\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n },\n);\n\nconst colorStyles = {\n default: {\n default: \"bg-background border-border text-text-primary hover:bg-surface\",\n solid: \"bg-surface border-border text-text-primary hover:bg-surface/80\",\n soft: \"bg-surface/50 border-border text-text-primary hover:bg-surface\",\n },\n primary: {\n default: \"bg-background border-primary text-primary hover:bg-primary/10\",\n solid: \"bg-primary border-primary text-background hover:bg-primary/90\",\n soft: \"bg-primary/10 border-primary/30 text-primary hover:bg-primary/20\",\n },\n secondary: {\n default:\n \"bg-background border-secondary text-secondary hover:bg-secondary/10\",\n solid:\n \"bg-secondary border-secondary text-background hover:bg-secondary/90\",\n soft: \"bg-secondary/10 border-secondary/30 text-secondary hover:bg-secondary/20\",\n },\n accent: {\n default: \"bg-background border-accent text-accent hover:bg-accent/10\",\n solid: \"bg-accent border-accent text-background hover:bg-accent/90\",\n soft: \"bg-accent/10 border-accent/30 text-accent hover:bg-accent/20\",\n },\n success: {\n default: \"bg-background border-success text-success hover:bg-success/10\",\n solid: \"bg-success border-success text-background hover:bg-success/90\",\n soft: \"bg-success/10 border-success/30 text-success hover:bg-success/20\",\n },\n error: {\n default: \"bg-background border-error text-error hover:bg-error/10\",\n solid: \"bg-error border-error text-background hover:bg-error/90\",\n soft: \"bg-error/10 border-error/30 text-error hover:bg-error/20\",\n },\n warning: {\n default: \"bg-background border-warning text-warning hover:bg-warning/10\",\n solid: \"bg-warning border-warning text-background hover:bg-warning/90\",\n soft: \"bg-warning/10 border-warning/30 text-warning hover:bg-warning/20\",\n },\n info: {\n default: \"bg-background border-info text-info hover:bg-info/10\",\n solid: \"bg-info border-info text-background hover:bg-info/90\",\n soft: \"bg-info/10 border-info/30 text-info hover:bg-info/20\",\n },\n};\n\nconst Clipboard = React.memo<ClipboardProps>(\n ({\n value,\n color = \"default\",\n size = \"md\",\n variant = \"default\",\n showValue = true,\n successDuration = 2000,\n disabled = false,\n onCopy,\n className,\n classNames,\n ref,\n }) => {\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Cleanup timeout on unmount to prevent memory leak\n useEffect(() => {\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const handleCopy = async () => {\n if (disabled) return;\n\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopy?.();\n\n // Clear any existing timer before setting a new one\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n timerRef.current = setTimeout(() => {\n setCopied(false);\n }, successDuration);\n } catch {\n // Copy failed - user can try again\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy();\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n onClick={handleCopy}\n onKeyDown={handleKeyDown}\n aria-label={\n copied\n ? \"Copied to clipboard\"\n : `Copy ${showValue ? value : \"to clipboard\"}`\n }\n aria-disabled={disabled}\n aria-live=\"polite\"\n className={cn(\n clipboardVariants({ size }),\n colorStyles[color][variant],\n focusRingColorClasses[color],\n disabled && \"opacity-50 cursor-not-allowed\",\n !showValue && \"aspect-square justify-center\",\n \"clipboard_root\",\n classNames?.root,\n className,\n )}\n data-slot=\"root\"\n >\n {showValue && (\n <span\n className={cn(\n \"font-mono truncate clipboard_input\",\n classNames?.input,\n )}\n data-slot=\"input\"\n >\n {value}\n </span>\n )}\n {copied ? (\n <Check\n className={cn(\n iconSizes[size],\n \"shrink-0 clipboard_button\",\n classNames?.button,\n )}\n data-slot=\"icon\"\n />\n ) : (\n <Copy\n className={cn(\n iconSizes[size],\n \"shrink-0 clipboard_button\",\n classNames?.button,\n )}\n data-slot=\"icon\"\n />\n )}\n </div>\n );\n },\n);\n\nClipboard.displayName = \"Clipboard\";\n\nexport type * from \"./types\";\nexport default Clipboard;\n"]}
@@ -134,7 +134,7 @@ var isImageFile = (file) => {
134
134
  return type.startsWith("image/");
135
135
  };
136
136
  var generateUID = () => {
137
- return `upload-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
137
+ return `upload-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
138
138
  };
139
139
  var Upload = React.memo(
140
140
  ({
@@ -172,6 +172,7 @@ var Upload = React.memo(
172
172
  const [internalFileList, setInternalFileList] = React.useState(defaultFileList);
173
173
  const [dragActive, setDragActive] = React.useState(false);
174
174
  const inputRef = React.useRef(null);
175
+ const prevFileListRef = React.useRef([]);
175
176
  const currentFileList = fileList !== void 0 ? fileList : internalFileList;
176
177
  const { status, message: helperMessage } = getValidationStatus({
177
178
  error,
@@ -293,9 +294,19 @@ var Upload = React.memo(
293
294
  },
294
295
  [currentFileList, fileList, onRemove, onChange]
295
296
  );
297
+ React.useEffect(() => {
298
+ const prevFileList = prevFileListRef.current;
299
+ prevFileList.forEach((prevFile) => {
300
+ const stillExists = currentFileList.some((file) => file.uid === prevFile.uid);
301
+ if (!stillExists && prevFile.thumbUrl?.startsWith("blob:")) {
302
+ URL.revokeObjectURL(prevFile.thumbUrl);
303
+ }
304
+ });
305
+ prevFileListRef.current = currentFileList;
306
+ }, [currentFileList]);
296
307
  React.useEffect(() => {
297
308
  return () => {
298
- currentFileList.forEach((file) => {
309
+ prevFileListRef.current.forEach((file) => {
299
310
  if (file.thumbUrl?.startsWith("blob:")) {
300
311
  URL.revokeObjectURL(file.thumbUrl);
301
312
  }
@@ -737,5 +748,5 @@ Upload.displayName = "Upload";
737
748
  var upload_default = Upload;
738
749
 
739
750
  export { upload_default };
740
- //# sourceMappingURL=chunk-CMGCJXE5.js.map
741
- //# sourceMappingURL=chunk-CMGCJXE5.js.map
751
+ //# sourceMappingURL=chunk-UTKVWE76.js.map
752
+ //# sourceMappingURL=chunk-UTKVWE76.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/upload/utils.ts","../src/upload/index.tsx"],"names":["UploadIcon","ImageIcon"],"mappings":"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","file":"chunk-UTKVWE76.js","sourcesContent":["import { cva } from 'class-variance-authority'\n\nimport { UploadFile } from './types'\n\nexport const uploadButtonVariants = cva(\n 'inline-flex cursor-pointer outline-none border items-center justify-center gap-2 font-medium rounded-md disabled:opacity-50 disabled:cursor-not-allowed transition-colors',\n {\n variants: {\n color: {\n primary: 'border-primary text-white bg-primary hover:bg-primary/90',\n secondary:\n 'border-secondary text-white bg-secondary hover:bg-secondary/90',\n success: 'border-success text-white bg-success hover:bg-success/90',\n error: 'border-error text-white bg-error hover:bg-error/90',\n accent: 'border-accent text-white bg-accent hover:bg-accent/90',\n warning: 'border-warning text-white bg-warning hover:bg-warning/90',\n info: 'border-info text-white bg-info hover:bg-info/90',\n },\n size: {\n xs: 'h-(--button-height-xs) px-(--button-padding-x-xs) text-xs',\n sm: 'h-(--button-height-sm) px-(--button-padding-x-sm) text-sm',\n md: 'h-(--button-height-md) px-(--button-padding-x-md) text-base',\n lg: 'h-(--button-height-lg) px-(--button-padding-x-lg) text-lg',\n },\n },\n defaultVariants: {\n color: 'primary',\n size: 'md',\n },\n },\n)\n\nexport const uploadDropzoneVariants = cva(\n 'relative border-2 border-dashed rounded-lg transition-all duration-200 cursor-pointer',\n {\n variants: {\n status: {\n default:\n 'border-border bg-surface/50 hover:border-primary hover:bg-primary/5',\n dragActive: 'border-primary bg-primary/10',\n error: 'border-error bg-error/5',\n disabled: 'border-border bg-surface/30 cursor-not-allowed opacity-50',\n },\n size: {\n xs: 'p-2',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n },\n },\n)\n\nexport const uploadDraggerVariants = cva(\n 'relative border-2 border-dashed rounded-lg transition-all duration-200 cursor-pointer flex flex-col items-center justify-center gap-2',\n {\n variants: {\n status: {\n default:\n 'border-border bg-surface/50 hover:border-primary hover:bg-primary/5',\n dragActive: 'border-primary bg-primary/10 scale-[1.02]',\n error: 'border-error bg-error/5',\n disabled: 'border-border bg-surface/30 cursor-not-allowed opacity-50',\n },\n size: {\n xs: 'min-h-[100px] p-3',\n sm: 'min-h-[120px] p-4',\n md: 'min-h-[160px] p-6',\n lg: 'min-h-[200px] p-8',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n },\n },\n)\n\nexport const uploadAvatarVariants = cva(\n 'relative overflow-hidden rounded-full border-2 border-dashed cursor-pointer transition-all duration-200 flex items-center justify-center',\n {\n variants: {\n status: {\n default: 'border-border bg-surface/50 hover:border-primary',\n dragActive: 'border-primary bg-primary/10',\n error: 'border-error bg-error/5',\n disabled: 'border-border bg-surface/30 cursor-not-allowed opacity-50',\n },\n size: {\n xs: 'w-12 h-12',\n sm: 'w-16 h-16',\n md: 'w-24 h-24',\n lg: 'w-32 h-32',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n },\n },\n)\n\nexport const uploadPictureVariants = cva(\n 'relative overflow-hidden rounded-md border-2 border-dashed cursor-pointer transition-all duration-200 flex items-center justify-center',\n {\n variants: {\n status: {\n default: 'border-border bg-surface/50 hover:border-primary',\n dragActive: 'border-primary bg-primary/10',\n error: 'border-error bg-error/5',\n disabled: 'border-border bg-surface/30 cursor-not-allowed opacity-50',\n },\n size: {\n xs: 'w-16 h-16',\n sm: 'w-24 h-24',\n md: 'w-32 h-32',\n lg: 'w-40 h-40',\n },\n },\n defaultVariants: {\n status: 'default',\n size: 'md',\n },\n },\n)\n\nexport const formatFileSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes'\n const k = 1024\n const sizes = ['Bytes', 'KB', 'MB', 'GB']\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]\n}\n\nexport const getFileExtension = (filename: string): string => {\n return filename.slice(((filename.lastIndexOf('.') - 1) >>> 0) + 2)\n}\n\nexport const isImageFile = (file: File | UploadFile): boolean => {\n const type = file.type || ''\n return type.startsWith('image/')\n}\n\nexport const generateUID = (): string => {\n return `upload-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`\n}\n","'use client'\n\nimport {\n AlertCircle,\n CheckCircle,\n File,\n Image as ImageIcon,\n Loader2,\n Upload as UploadIcon,\n X,\n} from 'lucide-react'\nimport React from 'react'\n\nimport {\n cn,\n getValidationStatus,\n iconSizes,\n statusMessageVariants,\n} from '../utils'\nimport type { UploadFile, UploadProps } from './types'\nimport {\n formatFileSize,\n generateUID,\n isImageFile,\n uploadAvatarVariants,\n uploadButtonVariants,\n uploadDraggerVariants,\n uploadDropzoneVariants,\n uploadPictureVariants,\n} from './utils'\n\nconst Upload = React.memo<UploadProps>(\n ({\n variant = 'button',\n size = 'md',\n color = 'primary',\n label,\n helperText,\n error,\n warning,\n info,\n success,\n accept,\n multiple = false,\n maxSize,\n maxCount,\n fileList,\n defaultFileList = [],\n showUploadList = true,\n listType = 'text',\n disabled = false,\n buttonText = 'Upload File',\n dragText = 'Click or drag file to this area to upload',\n dragHint = 'Support for a single or bulk upload',\n onChange,\n onRemove,\n beforeUpload,\n customRequest,\n onError,\n className,\n classNames,\n ref,\n ...props\n }) => {\n const [internalFileList, setInternalFileList] =\n React.useState<UploadFile[]>(defaultFileList)\n const [dragActive, setDragActive] = React.useState(false)\n const inputRef = React.useRef<HTMLInputElement>(null)\n const prevFileListRef = React.useRef<UploadFile[]>([])\n\n const currentFileList = fileList !== undefined ? fileList : internalFileList\n\n const { status, message: helperMessage } = getValidationStatus({\n error,\n warning,\n info,\n success,\n helperText,\n })\n\n const validateFile = React.useCallback(\n (file: File): string | null => {\n if (maxSize && file.size > maxSize) {\n return `File size exceeds ${formatFileSize(maxSize)}`\n }\n if (maxCount && currentFileList.length >= maxCount) {\n return `Maximum ${maxCount} file${maxCount > 1 ? 's' : ''} allowed`\n }\n return null\n },\n [maxSize, maxCount, currentFileList.length],\n )\n\n const handleFiles = React.useCallback(\n async (files: FileList | null) => {\n if (!files || files.length === 0) return\n\n const newFiles: UploadFile[] = []\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i]\n if (!file) continue\n\n // Validate file\n const validationError = validateFile(file)\n if (validationError) {\n onError?.(validationError, file)\n continue\n }\n\n // Check beforeUpload\n if (beforeUpload) {\n const shouldUpload = await beforeUpload(file)\n if (!shouldUpload) continue\n }\n\n const uploadFile: UploadFile = {\n uid: generateUID(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'uploading',\n percent: 0,\n }\n\n // Add to list\n newFiles.push(uploadFile)\n\n // Handle upload\n if (customRequest) {\n customRequest({\n file,\n onProgress: (percent) => {\n setInternalFileList((prev) =>\n prev.map((f) =>\n f.uid === uploadFile.uid ? { ...f, percent } : f,\n ),\n )\n },\n onSuccess: (response) => {\n setInternalFileList((prev) =>\n prev.map((f) =>\n f.uid === uploadFile.uid\n ? {\n ...f,\n status: 'done' as const,\n percent: 100,\n response,\n }\n : f,\n ),\n )\n },\n onError: (err) => {\n setInternalFileList((prev) =>\n prev.map((f) =>\n f.uid === uploadFile.uid\n ? { ...f, status: 'error' as const, error: err }\n : f,\n ),\n )\n },\n })\n } else {\n // Create preview URL for images\n if (file && isImageFile(file)) {\n uploadFile.thumbUrl = URL.createObjectURL(file)\n }\n uploadFile.status = 'done'\n uploadFile.percent = 100\n }\n }\n\n const updatedList = multiple\n ? [...currentFileList, ...newFiles]\n : newFiles\n\n if (fileList === undefined) {\n setInternalFileList(updatedList)\n }\n onChange?.(updatedList)\n },\n [\n validateFile,\n beforeUpload,\n customRequest,\n onError,\n multiple,\n currentFileList,\n fileList,\n onChange,\n ],\n )\n\n const handleInputChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(e.target.files)\n // Reset input value to allow uploading the same file again\n e.target.value = ''\n },\n [handleFiles],\n )\n\n const handleRemove = React.useCallback(\n (file: UploadFile) => {\n // Revoke object URL to prevent memory leak\n if (file.thumbUrl?.startsWith('blob:')) {\n URL.revokeObjectURL(file.thumbUrl)\n }\n const updatedList = currentFileList.filter((f) => f.uid !== file.uid)\n if (fileList === undefined) {\n setInternalFileList(updatedList)\n }\n onRemove?.(file)\n onChange?.(updatedList)\n },\n [currentFileList, fileList, onRemove, onChange],\n )\n\n /**\n * Track fileList changes and revoke blob URLs for removed files.\n * This handles the case where a controlled fileList prop is updated\n * externally without calling handleRemove.\n */\n React.useEffect(() => {\n const prevFileList = prevFileListRef.current\n\n // Find files that were removed (existed in prev but not in current)\n prevFileList.forEach((prevFile) => {\n const stillExists = currentFileList.some((file) => file.uid === prevFile.uid)\n if (!stillExists && prevFile.thumbUrl?.startsWith('blob:')) {\n URL.revokeObjectURL(prevFile.thumbUrl)\n }\n })\n\n // Update ref for next comparison\n prevFileListRef.current = currentFileList\n }, [currentFileList])\n\n /**\n * Cleanup object URLs on component unmount to prevent memory leaks.\n */\n React.useEffect(() => {\n return () => {\n // Use ref to get the latest fileList at unmount time\n prevFileListRef.current.forEach((file) => {\n if (file.thumbUrl?.startsWith('blob:')) {\n URL.revokeObjectURL(file.thumbUrl)\n }\n })\n }\n }, [])\n\n const handleClick = React.useCallback(() => {\n if (!disabled) {\n inputRef.current?.click()\n }\n }, [disabled])\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n inputRef.current?.click()\n }\n },\n [disabled],\n )\n\n const handleDragEnter = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(true)\n }, [])\n\n const handleDragLeave = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(false)\n }, [])\n\n const handleDragOver = React.useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const handleDrop = React.useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n setDragActive(false)\n\n if (!disabled) {\n handleFiles(e.dataTransfer.files)\n }\n },\n [disabled, handleFiles],\n )\n\n const renderFileList = () => {\n if (!showUploadList || currentFileList.length === 0) return null\n\n if (listType === 'picture-card') {\n return (\n <div\n data-slot=\"upload_fileList\"\n className={cn('upload_fileList', 'flex flex-wrap gap-2 mt-2', classNames?.fileList)}\n >\n {currentFileList.map((file) => (\n <div\n key={file.uid}\n data-slot=\"upload_fileItem\"\n className={cn(\n 'upload_fileItem',\n 'relative w-24 h-24 rounded-md border border-border overflow-hidden group',\n classNames?.fileItem,\n )}\n >\n {file.thumbUrl ? (\n <img\n src={file.thumbUrl}\n alt={file.name}\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"w-full h-full flex items-center justify-center bg-surface\">\n <File className=\"w-8 h-8 text-text-secondary\" />\n </div>\n )}\n <div className=\"absolute inset-0 bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center\">\n <button\n type=\"button\"\n onClick={() => handleRemove(file)}\n className=\"text-white hover:text-error transition-colors\"\n >\n <X className={iconSizes[size]} />\n </button>\n </div>\n {file.status === 'uploading' && (\n <div className=\"absolute inset-0 bg-black/30 flex items-center justify-center\">\n <Loader2 className=\"w-6 h-6 text-white animate-spin\" />\n </div>\n )}\n </div>\n ))}\n </div>\n )\n }\n\n return (\n <div\n data-slot=\"upload_fileList\"\n className={cn('upload_fileList', 'mt-2 space-y-1', classNames?.fileList)}\n >\n {currentFileList.map((file) => (\n <div\n key={file.uid}\n data-slot=\"upload_fileItem\"\n className={cn(\n 'upload_fileItem',\n 'flex items-center justify-between p-2 rounded-md bg-surface hover:bg-surface/80 transition-colors',\n classNames?.fileItem,\n )}\n >\n <div className=\"flex items-center gap-2 flex-1 min-w-0\">\n {listType === 'picture' && file.thumbUrl ? (\n <img\n src={file.thumbUrl}\n alt={file.name}\n className=\"w-8 h-8 rounded object-cover\"\n />\n ) : (\n <File\n className={cn('text-text-secondary shrink-0', iconSizes[size])}\n />\n )}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm text-text-primary truncate\">\n {file.name}\n </p>\n <p className=\"text-xs text-text-secondary\">\n {formatFileSize(file.size)}\n {file.status === 'uploading' &&\n file.percent !== undefined && (\n <span> - {file.percent}%</span>\n )}\n </p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n {file.status === 'uploading' && (\n <Loader2\n className={cn('text-primary animate-spin', iconSizes[size])}\n />\n )}\n {file.status === 'done' && (\n <CheckCircle\n className={cn('text-success', iconSizes[size])}\n />\n )}\n {file.status === 'error' && (\n <AlertCircle className={cn('text-error', iconSizes[size])} />\n )}\n <button\n type=\"button\"\n onClick={() => handleRemove(file)}\n className=\"text-text-secondary hover:text-error transition-colors\"\n >\n <X className={iconSizes[size]} />\n </button>\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n const currentFile = currentFileList[0]\n\n const renderUploadArea = () => {\n const dragStatus = dragActive\n ? 'dragActive'\n : disabled\n ? 'disabled'\n : status === 'error'\n ? 'error'\n : 'default'\n\n switch (variant) {\n case 'button':\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n data-slot=\"upload_dropzone\"\n className={cn(\n 'upload_dropzone',\n uploadButtonVariants({ color, size }),\n classNames?.dropzone,\n className,\n )}\n >\n <UploadIcon\n data-slot=\"upload_icon\"\n className={cn('upload_icon', iconSizes[size], classNames?.icon)}\n />\n <span\n data-slot=\"upload_text\"\n className={cn('upload_text', classNames?.text)}\n >\n {buttonText}\n </span>\n </button>\n )\n\n case 'dropzone':\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={`Upload file${multiple ? 's' : ''}`}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n data-slot=\"upload_dropzone\"\n className={cn(\n 'upload_dropzone',\n uploadDropzoneVariants({ status: dragStatus, size }),\n 'focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 outline-none',\n classNames?.dropzone,\n className,\n )}\n >\n <div className=\"flex items-center gap-3\">\n <UploadIcon\n data-slot=\"upload_icon\"\n className={cn(\n 'upload_icon',\n 'text-text-secondary',\n iconSizes[size],\n classNames?.icon,\n )}\n />\n <div>\n <p\n data-slot=\"upload_text\"\n className={cn(\n 'upload_text',\n 'text-sm text-text-primary font-medium',\n classNames?.text,\n )}\n >\n {dragText}\n </p>\n {dragHint && (\n <p\n data-slot=\"upload_hint\"\n className={cn(\n 'upload_hint',\n 'text-xs text-text-secondary mt-0.5',\n classNames?.hint,\n )}\n >\n {dragHint}\n </p>\n )}\n </div>\n </div>\n </div>\n )\n\n case 'dragger':\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={`Upload file${multiple ? 's' : ''}`}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n data-slot=\"upload_dropzone\"\n className={cn(\n 'upload_dropzone',\n uploadDraggerVariants({ status: dragStatus, size }),\n 'focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 outline-none',\n classNames?.dropzone,\n className,\n )}\n >\n <UploadIcon\n data-slot=\"upload_icon\"\n className={cn('upload_icon', 'w-10 h-10 text-primary', classNames?.icon)}\n />\n <p\n data-slot=\"upload_text\"\n className={cn(\n 'upload_text',\n 'text-base font-medium text-text-primary',\n classNames?.text,\n )}\n >\n {dragText}\n </p>\n {dragHint && (\n <p\n data-slot=\"upload_hint\"\n className={cn(\n 'upload_hint',\n 'text-sm text-text-secondary',\n classNames?.hint,\n )}\n >\n {dragHint}\n </p>\n )}\n </div>\n )\n\n case 'avatar':\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"Upload avatar image\"\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n data-slot=\"upload_dropzone\"\n className={cn(\n 'upload_dropzone',\n uploadAvatarVariants({ status: dragStatus, size }),\n 'focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 outline-none',\n classNames?.dropzone,\n className,\n )}\n >\n {currentFile?.thumbUrl ? (\n <img\n src={currentFile.thumbUrl}\n alt=\"avatar\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <ImageIcon\n data-slot=\"upload_icon\"\n className={cn(\n 'upload_icon',\n 'w-8 h-8 text-text-secondary',\n classNames?.icon,\n )}\n />\n )}\n </div>\n )\n\n case 'picture':\n return (\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label=\"Upload picture\"\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n data-slot=\"upload_dropzone\"\n className={cn(\n 'upload_dropzone',\n uploadPictureVariants({ status: dragStatus, size }),\n 'focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 outline-none',\n classNames?.dropzone,\n className,\n )}\n >\n {currentFile?.thumbUrl ? (\n <img\n src={currentFile.thumbUrl}\n alt=\"preview\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <ImageIcon\n data-slot=\"upload_icon\"\n className={cn(\n 'upload_icon',\n 'w-8 h-8 text-text-secondary',\n classNames?.icon,\n )}\n />\n )}\n </div>\n )\n\n default:\n return null\n }\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"upload_root\"\n className={cn('upload_root', 'w-full', classNames?.root)}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n onChange={handleInputChange}\n disabled={disabled}\n data-slot=\"upload_input\"\n className={cn('upload_input', 'hidden', classNames?.input)}\n {...props}\n />\n\n {label && (\n <label className=\"block mb-1\">\n <span className=\"text-sm font-medium text-text-secondary\">{label}</span>\n </label>\n )}\n\n {renderUploadArea()}\n {renderFileList()}\n\n {helperMessage && (\n <p className={cn(statusMessageVariants({ status }), 'mt-1')}>\n {helperMessage}\n </p>\n )}\n </div>\n )\n },\n)\n\nUpload.displayName = 'Upload'\n\nexport type { UploadClassNames } from './types'\nexport type * from './types'\nexport default Upload\n"]}