@mage-ui/components 1.0.137 → 1.0.139

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 (49) hide show
  1. package/dist/components/controls/date-picker/DatePicker.d.mts +24 -9
  2. package/dist/components/controls/date-picker/DatePicker.d.mts.map +1 -1
  3. package/dist/components/controls/date-picker/DatePicker.mjs +1 -1
  4. package/dist/components/controls/date-picker/DatePicker.mjs.map +1 -1
  5. package/dist/components/controls/date-time-picker/DateTimePicker.d.mts +120 -0
  6. package/dist/components/controls/date-time-picker/DateTimePicker.d.mts.map +1 -0
  7. package/dist/components/controls/date-time-picker/DateTimePicker.mjs +2 -0
  8. package/dist/components/controls/date-time-picker/DateTimePicker.mjs.map +1 -0
  9. package/dist/components/controls/dropzone/DropzoneBase.d.mts +1 -0
  10. package/dist/components/controls/dropzone/DropzoneBase.d.mts.map +1 -1
  11. package/dist/components/controls/dropzone/DropzoneBase.mjs.map +1 -1
  12. package/dist/components/controls/dropzone/DropzoneS3.mjs +1 -1
  13. package/dist/components/controls/dropzone/DropzoneS3.mjs.map +1 -1
  14. package/dist/components/controls/dropzone/avatar/AvatarDropzoneS3.mjs +1 -1
  15. package/dist/components/controls/dropzone/avatar/AvatarDropzoneS3.mjs.map +1 -1
  16. package/dist/components/controls/dropzone/upload-service.d.mts +1 -0
  17. package/dist/components/controls/dropzone/upload-service.d.mts.map +1 -1
  18. package/dist/components/controls/dropzone/upload-service.mjs.map +1 -1
  19. package/dist/components/controls/dropzone/use-dropzone-state.mjs +1 -1
  20. package/dist/components/controls/dropzone/use-dropzone-state.mjs.map +1 -1
  21. package/dist/components/controls/dropzone/use-s3-upload.mjs +1 -1
  22. package/dist/components/controls/dropzone/use-s3-upload.mjs.map +1 -1
  23. package/dist/components/controls/index.d.mts +2 -1
  24. package/dist/components/data-display/calendar/Calendar.d.mts +1 -0
  25. package/dist/components/data-display/calendar/Calendar.d.mts.map +1 -1
  26. package/dist/components/data-display/calendar/Calendar.mjs +1 -1
  27. package/dist/components/data-display/calendar/Calendar.mjs.map +1 -1
  28. package/dist/components/forms/Form.d.mts +28 -0
  29. package/dist/components/forms/Form.d.mts.map +1 -1
  30. package/dist/components/forms/Form.mjs +1 -1
  31. package/dist/components/forms/Form.mjs.map +1 -1
  32. package/dist/components/forms/controls/FormDatePicker.d.mts +14 -0
  33. package/dist/components/forms/controls/FormDatePicker.d.mts.map +1 -0
  34. package/dist/components/forms/controls/FormDatePicker.mjs +2 -0
  35. package/dist/components/forms/controls/FormDatePicker.mjs.map +1 -0
  36. package/dist/components/forms/controls/FormDateTimePicker.d.mts +14 -0
  37. package/dist/components/forms/controls/FormDateTimePicker.d.mts.map +1 -0
  38. package/dist/components/forms/controls/FormDateTimePicker.mjs +2 -0
  39. package/dist/components/forms/controls/FormDateTimePicker.mjs.map +1 -0
  40. package/dist/components/forms/controls/index.mjs +1 -1
  41. package/dist/components/forms/controls/index.mjs.map +1 -1
  42. package/dist/components/forms/controls/register-components.mjs +1 -1
  43. package/dist/components/forms/controls/register-components.mjs.map +1 -1
  44. package/dist/components/forms/rules/extract-form-rules.mjs +1 -1
  45. package/dist/components/forms/rules/extract-form-rules.mjs.map +1 -1
  46. package/dist/components/index.d.mts +2 -1
  47. package/dist/index.d.mts +3 -2
  48. package/dist/index.mjs +1 -1
  49. package/package.json +3 -3
@@ -1,19 +1,24 @@
1
+ import { IconProps } from "../../data-display/icons/icon/Icon.mjs";
1
2
  import { ComponentProps, ReactNode } from "react";
2
- import { DateValue } from "@mantine/dates";
3
3
 
4
4
  //#region src/components/controls/date-picker/DatePicker.d.ts
5
- type DatePickerProps = Omit<ComponentProps<'input'>, 'size' | 'value' | 'onChange'> & {
5
+ type DatePickerValue = Date | string | null;
6
+ type DatePickerDate = Date | string;
7
+ type DatePickerProps = Omit<ComponentProps<'button'>, 'children' | 'defaultValue' | 'size' | 'type' | 'value' | 'onChange'> & {
6
8
  label?: ReactNode;
9
+ placeholder?: string;
7
10
  description?: ReactNode;
8
11
  error?: ReactNode;
12
+ required?: boolean;
9
13
  classNames?: DatePickerClassNames;
10
- value?: DateValue;
11
- onChange?: (date: Date | string | null) => void;
14
+ value?: DatePickerValue;
15
+ defaultValue?: DatePickerValue;
16
+ onChange?: (date: DatePickerValue) => void;
12
17
  locale?: string;
13
18
  valueFormat?: string;
14
19
  firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
15
- minDate?: Date;
16
- maxDate?: Date;
20
+ minDate?: DatePickerDate;
21
+ maxDate?: DatePickerDate;
17
22
  clearable?: boolean;
18
23
  };
19
24
  declare const DatePicker: ({
@@ -25,15 +30,20 @@ declare const DatePicker: ({
25
30
  error,
26
31
  required,
27
32
  value,
33
+ defaultValue,
28
34
  onChange,
29
35
  locale,
30
36
  valueFormat,
31
37
  firstDayOfWeek,
32
38
  minDate,
33
39
  maxDate,
34
- clearable
40
+ clearable,
41
+ ...props
35
42
  }: DatePickerProps) => ReactNode;
36
- type DatePickerClassNames = InputClassNamesType & CalendarClassNamesType & CalendarHeaderClassNamesType & CalendarDayClassNamesType & CalendarWeekClassNamesType & CalendarMonthClassNamesType & CalendarMonthsListClassNamesType & CalendarYearsListClassNamesType & PopoverClassNamesType;
43
+ type DatePickerClassNames = InputClassNamesType & CalendarClassNamesType & CalendarHeaderClassNamesType & CalendarDayClassNamesType & CalendarWeekClassNamesType & CalendarMonthClassNamesType & CalendarMonthsListClassNamesType & CalendarYearsListClassNamesType & PopoverClassNamesType & {
44
+ icon?: IconClassNamesType;
45
+ buttonIcon?: ButtonIconClassNamesType;
46
+ };
37
47
  type InputClassNamesType = {
38
48
  datePicker?: string;
39
49
  root?: string;
@@ -47,6 +57,11 @@ type InputClassNamesType = {
47
57
  required?: string;
48
58
  datePickerRoot?: string;
49
59
  };
60
+ type IconClassNamesType = IconProps['classNames'];
61
+ type ButtonIconClassNamesType = {
62
+ buttonIcon?: string;
63
+ buttonIconRoot?: string;
64
+ };
50
65
  type CalendarHeaderClassNamesType = {
51
66
  calendarHeaderControl?: string;
52
67
  calendarHeader?: string;
@@ -91,5 +106,5 @@ type PopoverClassNamesType = {
91
106
  overlay?: string;
92
107
  };
93
108
  //#endregion
94
- export { DatePicker, DatePickerProps };
109
+ export { DatePicker, DatePickerClassNames, DatePickerDate, DatePickerProps, DatePickerValue };
95
110
  //# sourceMappingURL=DatePicker.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.d.mts","names":[],"sources":["../../../../src/components/controls/date-picker/DatePicker.tsx"],"mappings":";;;;KAoDY,eAAA,GAAkB,IAAA,CAC5B,cAAA;EAGA,KAAA,GAAQ,SAAA;EACR,WAAA,GAAc,SAAA;EACd,KAAA,GAAQ,SAAA;EACR,UAAA,GAAa,oBAAA;EACb,KAAA,GAAQ,SAAA;EACR,QAAA,IAAY,IAAA,EAAM,IAAA;EAClB,MAAA;EACA,WAAA;EACA,cAAA;EACA,OAAA,GAAU,IAAA;EACV,OAAA,GAAU,IAAA;EACV,SAAA;AAAA;AAAA,cAGW,UAAA;EAAc,UAAA;EAAA,IAAA;EAAA,KAAA;EAAA,WAAA;EAAA,WAAA;EAAA,KAAA;EAAA,QAAA;EAAA,KAAA;EAAA,QAAA;EAAA,MAAA;EAAA,WAAA;EAAA,cAAA;EAAA,OAAA;EAAA,OAAA;EAAA;AAAA,GAgBxB,eAAA,KAAkB,SAAA;AAAA,KAmChB,oBAAA,GAAuB,mBAAA,GAC1B,sBAAA,GACA,4BAAA,GACA,yBAAA,GACA,0BAAA,GACA,2BAAA,GACA,gCAAA,GACA,+BAAA,GACA,qBAAA;AAAA,KAEG,mBAAA;EACH,UAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;AAAA;AAAA,KA8CG,4BAAA;EACH,qBAAA;EACA,cAAA;EACA,mBAAA;EACA,yBAAA;AAAA;AAAA,KAkBG,sBAAA;EACH,WAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAWG,yBAAA;EACH,GAAA;AAAA;AAAA,KASG,0BAAA;EACH,WAAA;EACA,OAAA;EACA,UAAA;AAAA;AAAA,KAWG,2BAAA;EACH,KAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAaG,gCAAA;EACH,UAAA;EACA,aAAA;EACA,cAAA;EACA,iBAAA;AAAA;AAAA,KAeG,+BAAA;EACH,SAAA;EACA,YAAA;EACA,aAAA;EACA,gBAAA;AAAA;AAAA,KAeG,qBAAA;EACH,QAAA;EACA,KAAA;EACA,OAAA;AAAA"}
1
+ {"version":3,"file":"DatePicker.d.mts","names":[],"sources":["../../../../src/components/controls/date-picker/DatePicker.tsx"],"mappings":";;;;KAoDY,eAAA,GAAkB,IAAA;AAAA,KAClB,cAAA,GAAiB,IAAA;AAAA,KAEjB,eAAA,GAAkB,IAAA,CAC5B,cAAA;EAGA,KAAA,GAAQ,SAAA;EACR,WAAA;EACA,WAAA,GAAc,SAAA;EACd,KAAA,GAAQ,SAAA;EACR,QAAA;EACA,UAAA,GAAa,oBAAA;EACb,KAAA,GAAQ,eAAA;EACR,YAAA,GAAe,eAAA;EACf,QAAA,IAAY,IAAA,EAAM,eAAA;EAClB,MAAA;EACA,WAAA;EACA,cAAA;EACA,OAAA,GAAU,cAAA;EACV,OAAA,GAAU,cAAA;EACV,SAAA;AAAA;AAAA,cAGW,UAAA;EAAc,UAAA;EAAA,IAAA;EAAA,KAAA;EAAA,WAAA;EAAA,WAAA;EAAA,KAAA;EAAA,QAAA;EAAA,KAAA;EAAA,YAAA;EAAA,QAAA;EAAA,MAAA;EAAA,WAAA;EAAA,cAAA;EAAA,OAAA;EAAA,OAAA;EAAA,SAAA;EAAA,GAAA;AAAA,GAkBxB,eAAA,KAAkB,SAAA;AAAA,KAqCT,oBAAA,GAAuB,mBAAA,GACjC,sBAAA,GACA,4BAAA,GACA,yBAAA,GACA,0BAAA,GACA,2BAAA,GACA,gCAAA,GACA,+BAAA,GACA,qBAAA;EACE,IAAA,GAAO,kBAAA;EACP,UAAA,GAAa,wBAAA;AAAA;AAAA,KAGZ,mBAAA;EACH,UAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;AAAA;AAAA,KAqBG,kBAAA,GAAqB,SAAA;AAAA,KAarB,wBAAA;EACH,UAAA;EACA,cAAA;AAAA;AAAA,KAUG,4BAAA;EACH,qBAAA;EACA,cAAA;EACA,mBAAA;EACA,yBAAA;AAAA;AAAA,KAkBG,sBAAA;EACH,WAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAWG,yBAAA;EACH,GAAA;AAAA;AAAA,KASG,0BAAA;EACH,WAAA;EACA,OAAA;EACA,UAAA;AAAA;AAAA,KAWG,2BAAA;EACH,KAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAaG,gCAAA;EACH,UAAA;EACA,aAAA;EACA,cAAA;EACA,iBAAA;AAAA;AAAA,KAeG,+BAAA;EACH,SAAA;EACA,YAAA;EACA,aAAA;EACA,gBAAA;AAAA;AAAA,KAeG,qBAAA;EACH,QAAA;EACA,KAAA;EACA,OAAA;AAAA"}
@@ -1,2 +1,2 @@
1
- import{Icon as e}from"../../data-display/icons/icon/Icon.mjs";import{cx as t}from"@mage-ui/styled-system/css";import{datePicker as n,datePickerArrow as r,datePickerButtonIcon as i,datePickerButtonIconRoot as a,datePickerCalendarHeader as o,datePickerCalendarHeaderControl as s,datePickerCalendarHeaderControlIcon as c,datePickerCalendarHeaderLevel as l,datePickerDatePickerRoot as u,datePickerDay as d,datePickerDescription as f,datePickerDropdown as p,datePickerError as m,datePickerIconIcon as h,datePickerIconIconRaw as g,datePickerIconIconRawRoot as _,datePickerIconRoot as v,datePickerInput as y,datePickerLabel as b,datePickerLevelsGroup as x,datePickerMonth as S,datePickerMonthCell as C,datePickerMonthRow as w,datePickerMonthTbody as T,datePickerMonthThead as E,datePickerMonthsList as D,datePickerMonthsListCell as O,datePickerMonthsListControl as k,datePickerMonthsListRow as A,datePickerOverlay as j,datePickerPlaceholder as M,datePickerPresetButton as N,datePickerPresetsList as P,datePickerRequired as F,datePickerRoot as I,datePickerSection as L,datePickerWeekNumber as ee,datePickerWeekday as R,datePickerWeekdaysRow as z,datePickerWrapper as B,datePickerYearsList as V,datePickerYearsListCell as H,datePickerYearsListControl as U,datePickerYearsListRow as W}from"@mage-ui/styled-system/recipes";import{jsx as G}from"react/jsx-runtime";import{DatePickerInput as K}from"@mantine/dates";const q=({classNames:t,name:n,label:r,placeholder:i,description:a,error:o,required:s,value:c,onChange:l,locale:u,valueFormat:d,firstDayOfWeek:f,minDate:p,maxDate:m,clearable:h})=>G(K,{name:n,label:r,placeholder:i,description:a,error:o,withAsterisk:s,value:c,onChange:l,locale:u,valueFormat:d,firstDayOfWeek:f,minDate:p,maxDate:m,clearable:h,classNames:oe(t),popoverProps:{classNames:ae(t)},leftSection:G(e,{path:`/icons/sprite-mage.svg`,name:`mage-date-picker-calendar`,classNames:Y(t)}),clearButtonProps:{className:X()}}),J=e=>({root:t(e?.datePicker??n(),e?.root??I()),wrapper:e?.wrapper??B(),input:t(e?.input??y(),`peer`),label:e?.label??b(),error:e?.error??m(),description:e?.description??f(),placeholder:e?.placeholder??M(),section:t(e?.section??L(),`group`),required:e?.required??F(),datePickerRoot:e?.datePickerRoot??u()}),Y=e=>({icon:e?.icon??h(),root:e?.root??v(),iconRaw:{iconRaw:e?.iconRaw?.iconRaw??g(),root:e?.iconRaw?.root??_()}}),X=e=>t(e?.buttonIcon??i(),e?.buttonIconRoot??a()),Z=e=>({calendarHeader:e?.calendarHeader??o(),calendarHeaderControl:e?.calendarHeaderControl??s(),calendarHeaderLevel:e?.calendarHeaderLevel??l(),calendarHeaderControlIcon:e?.calendarHeaderControlIcon??c()}),Q=e=>({levelsGroup:e?.levelsGroup??x(),presetsList:e?.presetsList??P(),presetButton:e?.presetButton??N()}),$=e=>({day:e?.day??d()}),te=e=>({weekdaysRow:e?.weekDaysRow??z(),weekday:e?.weekDay??R(),weekNumber:e?.weekNumber??ee()}),ne=e=>({month:e?.month??S(),monthRow:e?.monthRow??w(),monthThead:e?.monthThead??E(),monthTbody:e?.monthTbody??T(),monthCell:e?.monthCell??C()}),re=e=>({monthsList:e?.monthsList??D(),monthsListRow:e?.monthsListRow??A(),monthsListCell:e?.monthsListCell??O(),monthsListControl:e?.monthsListControl??k()}),ie=e=>({yearsList:e?.yearsList??V(),yearsListRow:e?.yearsListRow??W(),yearsListCell:e?.yearsListCell??H(),yearsListControl:e?.yearsListControl??U()}),ae=e=>({dropdown:e?.dropdown??p(),arrow:e?.arrow??r(),overlay:e?.overlay??j()}),oe=e=>({...J(e),...Q(e),...Z(e),...$(e),...te(e),...ne(e),...re(e),...ie(e)});export{q as DatePicker};
1
+ import{Icon as e}from"../../data-display/icons/icon/Icon.mjs";import{cx as t}from"@mage-ui/styled-system/css";import{datePicker as n,datePickerArrow as r,datePickerButtonIcon as i,datePickerButtonIconRoot as a,datePickerCalendarHeader as o,datePickerCalendarHeaderControl as s,datePickerCalendarHeaderControlIcon as c,datePickerCalendarHeaderLevel as l,datePickerDatePickerRoot as u,datePickerDay as d,datePickerDescription as f,datePickerDropdown as p,datePickerError as m,datePickerIconIcon as h,datePickerIconIconRaw as g,datePickerIconIconRawRoot as _,datePickerIconRoot as v,datePickerInput as y,datePickerLabel as b,datePickerLevelsGroup as x,datePickerMonth as S,datePickerMonthCell as C,datePickerMonthRow as w,datePickerMonthTbody as T,datePickerMonthThead as E,datePickerMonthsList as D,datePickerMonthsListCell as O,datePickerMonthsListControl as k,datePickerMonthsListRow as A,datePickerOverlay as j,datePickerPlaceholder as M,datePickerPresetButton as N,datePickerPresetsList as P,datePickerRequired as F,datePickerRoot as I,datePickerSection as L,datePickerWeekNumber as R,datePickerWeekday as z,datePickerWeekdaysRow as ee,datePickerWrapper as B,datePickerYearsList as V,datePickerYearsListCell as H,datePickerYearsListControl as U,datePickerYearsListRow as W}from"@mage-ui/styled-system/recipes";import{jsx as G}from"react/jsx-runtime";import{DatePickerInput as K}from"@mantine/dates";const q=({classNames:t,name:n,label:r,placeholder:i,description:a,error:o,required:s,value:c,defaultValue:l,onChange:u,locale:d,valueFormat:f,firstDayOfWeek:p,minDate:m,maxDate:h,clearable:g,..._})=>G(K,{..._,name:n,label:r,placeholder:i,description:a,error:o,withAsterisk:s,value:c,defaultValue:l,onChange:u,locale:d,valueFormat:f,firstDayOfWeek:p,minDate:m,maxDate:h,clearable:g,classNames:oe(t),popoverProps:{classNames:ae(t)},leftSection:G(e,{path:`/icons/sprite-mage.svg`,name:`mage-date-picker-calendar`,classNames:Y(t?.icon)}),clearButtonProps:{className:X(t?.buttonIcon)}}),J=e=>({root:t(e?.datePicker??n(),e?.root??I()),wrapper:e?.wrapper??B(),input:t(e?.input??y(),`peer`),label:e?.label??b(),error:e?.error??m(),description:e?.description??f(),placeholder:e?.placeholder??M(),section:t(e?.section??L(),`group`),required:e?.required??F(),datePickerRoot:e?.datePickerRoot??u()}),Y=e=>({icon:e?.icon??h(),root:e?.root??v(),iconRaw:{iconRaw:e?.iconRaw?.iconRaw??g(),root:e?.iconRaw?.root??_()}}),X=e=>t(e?.buttonIcon??i(),e?.buttonIconRoot??a()),Z=e=>({calendarHeader:e?.calendarHeader??o(),calendarHeaderControl:e?.calendarHeaderControl??s(),calendarHeaderLevel:e?.calendarHeaderLevel??l(),calendarHeaderControlIcon:e?.calendarHeaderControlIcon??c()}),Q=e=>({levelsGroup:e?.levelsGroup??x(),presetsList:e?.presetsList??P(),presetButton:e?.presetButton??N()}),$=e=>({day:e?.day??d()}),te=e=>({weekdaysRow:e?.weekDaysRow??ee(),weekday:e?.weekDay??z(),weekNumber:e?.weekNumber??R()}),ne=e=>({month:e?.month??S(),monthRow:e?.monthRow??w(),monthThead:e?.monthThead??E(),monthTbody:e?.monthTbody??T(),monthCell:e?.monthCell??C()}),re=e=>({monthsList:e?.monthsList??D(),monthsListRow:e?.monthsListRow??A(),monthsListCell:e?.monthsListCell??O(),monthsListControl:e?.monthsListControl??k()}),ie=e=>({yearsList:e?.yearsList??V(),yearsListRow:e?.yearsListRow??W(),yearsListCell:e?.yearsListCell??H(),yearsListControl:e?.yearsListControl??U()}),ae=e=>({dropdown:e?.dropdown??p(),arrow:e?.arrow??r(),overlay:e?.overlay??j()}),oe=e=>({...J(e),...Q(e),...Z(e),...$(e),...te(e),...ne(e),...re(e),...ie(e)});export{q as DatePicker};
2
2
  //# sourceMappingURL=DatePicker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.mjs","names":[],"sources":["../../../../src/components/controls/date-picker/DatePicker.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\n\nimport { cx } from '@mage-ui/styled-system/css';\nimport {\n datePicker,\n datePickerArrow,\n datePickerButtonIcon,\n datePickerButtonIconRoot,\n datePickerCalendarHeader,\n datePickerCalendarHeaderControl,\n datePickerCalendarHeaderControlIcon,\n datePickerCalendarHeaderLevel,\n datePickerDatePickerRoot,\n datePickerDay,\n datePickerDescription,\n datePickerDropdown,\n datePickerError,\n datePickerIconIcon,\n datePickerIconIconRaw,\n datePickerIconIconRawRoot,\n datePickerIconRoot,\n datePickerInput,\n datePickerLabel,\n datePickerLevelsGroup,\n datePickerMonth,\n datePickerMonthCell,\n datePickerMonthRow,\n datePickerMonthsList,\n datePickerMonthsListCell,\n datePickerMonthsListControl,\n datePickerMonthsListRow,\n datePickerMonthTbody,\n datePickerMonthThead,\n datePickerOverlay,\n datePickerPlaceholder,\n datePickerPresetButton,\n datePickerPresetsList,\n datePickerRequired,\n datePickerRoot,\n datePickerSection,\n datePickerWeekday,\n datePickerWeekdaysRow,\n datePickerWeekNumber,\n datePickerWrapper,\n datePickerYearsList,\n datePickerYearsListCell,\n datePickerYearsListControl,\n datePickerYearsListRow,\n} from '@mage-ui/styled-system/recipes';\nimport { DatePickerInput, type DateValue } from '@mantine/dates';\nimport { Icon, type IconProps } from '@/components/data-display';\n\nexport type DatePickerProps = Omit<\n ComponentProps<'input'>,\n 'size' | 'value' | 'onChange'\n> & {\n label?: ReactNode;\n description?: ReactNode;\n error?: ReactNode;\n classNames?: DatePickerClassNames;\n value?: DateValue;\n onChange?: (date: Date | string | null) => void;\n locale?: string;\n valueFormat?: string;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n minDate?: Date;\n maxDate?: Date;\n clearable?: boolean;\n};\n\nexport const DatePicker = ({\n classNames,\n name,\n label,\n placeholder,\n description,\n error,\n required,\n value,\n onChange,\n locale,\n valueFormat,\n firstDayOfWeek,\n minDate,\n maxDate,\n clearable,\n}: DatePickerProps): ReactNode => {\n return (\n <DatePickerInput\n name={name}\n label={label}\n placeholder={placeholder}\n description={description}\n error={error}\n withAsterisk={required}\n value={value}\n onChange={onChange}\n locale={locale}\n valueFormat={valueFormat}\n firstDayOfWeek={firstDayOfWeek}\n minDate={minDate}\n maxDate={maxDate}\n clearable={clearable}\n classNames={datePickerClassNames(classNames)}\n popoverProps={{\n classNames: popoverClassNames(classNames),\n }}\n leftSection={\n <Icon\n path='/icons/sprite-mage.svg'\n name='mage-date-picker-calendar'\n classNames={iconClassNames(classNames)}\n />\n }\n clearButtonProps={{\n className: buttonIconClassNames(),\n }}\n />\n );\n};\n\ntype DatePickerClassNames = InputClassNamesType &\n CalendarClassNamesType &\n CalendarHeaderClassNamesType &\n CalendarDayClassNamesType &\n CalendarWeekClassNamesType &\n CalendarMonthClassNamesType &\n CalendarMonthsListClassNamesType &\n CalendarYearsListClassNamesType &\n PopoverClassNamesType;\n\ntype InputClassNamesType = {\n datePicker?: string;\n root?: string;\n wrapper?: string;\n input?: string;\n label?: string;\n error?: string;\n description?: string;\n placeholder?: string;\n section?: string;\n required?: string;\n datePickerRoot?: string;\n};\n\nconst inputClassNames = (classNames?: InputClassNamesType) => {\n return {\n root: cx(\n classNames?.datePicker ?? datePicker(),\n classNames?.root ?? datePickerRoot(),\n ),\n wrapper: classNames?.wrapper ?? datePickerWrapper(),\n input: cx(classNames?.input ?? datePickerInput(), 'peer'),\n label: classNames?.label ?? datePickerLabel(),\n error: classNames?.error ?? datePickerError(),\n description: classNames?.description ?? datePickerDescription(),\n placeholder: classNames?.placeholder ?? datePickerPlaceholder(),\n section: cx(classNames?.section ?? datePickerSection(), 'group'),\n required: classNames?.required ?? datePickerRequired(),\n datePickerRoot: classNames?.datePickerRoot ?? datePickerDatePickerRoot(),\n };\n};\n\ntype IconClassNamesType = IconProps['classNames'];\n\nconst iconClassNames = (classNames?: IconClassNamesType) => {\n return {\n icon: classNames?.icon ?? datePickerIconIcon(),\n root: classNames?.root ?? datePickerIconRoot(),\n iconRaw: {\n iconRaw: classNames?.iconRaw?.iconRaw ?? datePickerIconIconRaw(),\n root: classNames?.iconRaw?.root ?? datePickerIconIconRawRoot(),\n },\n };\n};\n\ntype ButtonIconClassNamesType = {\n buttonIcon?: string;\n buttonIconRoot?: string;\n};\n\nconst buttonIconClassNames = (classNames?: ButtonIconClassNamesType) => {\n return cx(\n classNames?.buttonIcon ?? datePickerButtonIcon(),\n classNames?.buttonIconRoot ?? datePickerButtonIconRoot(),\n );\n};\n\ntype CalendarHeaderClassNamesType = {\n calendarHeaderControl?: string;\n calendarHeader?: string;\n calendarHeaderLevel?: string;\n calendarHeaderControlIcon?: string;\n};\n\nconst calendarHeaderClassNames = (\n classNames?: CalendarHeaderClassNamesType,\n) => {\n return {\n calendarHeader: classNames?.calendarHeader ?? datePickerCalendarHeader(),\n calendarHeaderControl:\n classNames?.calendarHeaderControl ?? datePickerCalendarHeaderControl(),\n calendarHeaderLevel:\n classNames?.calendarHeaderLevel ?? datePickerCalendarHeaderLevel(),\n calendarHeaderControlIcon:\n classNames?.calendarHeaderControlIcon ??\n datePickerCalendarHeaderControlIcon(),\n };\n};\n\ntype CalendarClassNamesType = {\n levelsGroup?: string;\n presetsList?: string;\n presetButton?: string;\n};\n\nconst calendarClassNames = (classNames?: CalendarClassNamesType) => {\n return {\n levelsGroup: classNames?.levelsGroup ?? datePickerLevelsGroup(),\n presetsList: classNames?.presetsList ?? datePickerPresetsList(),\n presetButton: classNames?.presetButton ?? datePickerPresetButton(),\n };\n};\n\ntype CalendarDayClassNamesType = {\n day?: string;\n};\n\nconst calendarDayClassNames = (classNames?: CalendarDayClassNamesType) => {\n return {\n day: classNames?.day ?? datePickerDay(),\n };\n};\n\ntype CalendarWeekClassNamesType = {\n weekDaysRow?: string;\n weekDay?: string;\n weekNumber?: string;\n};\n\nconst calendarWeekClassNames = (classNames?: CalendarWeekClassNamesType) => {\n return {\n weekdaysRow: classNames?.weekDaysRow ?? datePickerWeekdaysRow(),\n weekday: classNames?.weekDay ?? datePickerWeekday(),\n weekNumber: classNames?.weekNumber ?? datePickerWeekNumber(),\n };\n};\n\ntype CalendarMonthClassNamesType = {\n month?: string;\n monthRow?: string;\n monthCell?: string;\n monthThead?: string;\n monthTbody?: string;\n};\n\nconst calendarMonthClassNames = (classNames?: CalendarMonthClassNamesType) => {\n return {\n month: classNames?.month ?? datePickerMonth(),\n monthRow: classNames?.monthRow ?? datePickerMonthRow(),\n monthThead: classNames?.monthThead ?? datePickerMonthThead(),\n monthTbody: classNames?.monthTbody ?? datePickerMonthTbody(),\n monthCell: classNames?.monthCell ?? datePickerMonthCell(),\n };\n};\n\ntype CalendarMonthsListClassNamesType = {\n monthsList?: string;\n monthsListRow?: string;\n monthsListCell?: string;\n monthsListControl?: string;\n};\n\nconst calendarMonthsListClassNames = (\n classNames?: CalendarMonthsListClassNamesType,\n) => {\n return {\n monthsList: classNames?.monthsList ?? datePickerMonthsList(),\n monthsListRow: classNames?.monthsListRow ?? datePickerMonthsListRow(),\n monthsListCell: classNames?.monthsListCell ?? datePickerMonthsListCell(),\n monthsListControl:\n classNames?.monthsListControl ?? datePickerMonthsListControl(),\n };\n};\n\ntype CalendarYearsListClassNamesType = {\n yearsList?: string;\n yearsListRow?: string;\n yearsListCell?: string;\n yearsListControl?: string;\n};\n\nconst calendarYearsListClassNames = (\n classNames?: CalendarYearsListClassNamesType,\n) => {\n return {\n yearsList: classNames?.yearsList ?? datePickerYearsList(),\n yearsListRow: classNames?.yearsListRow ?? datePickerYearsListRow(),\n yearsListCell: classNames?.yearsListCell ?? datePickerYearsListCell(),\n yearsListControl:\n classNames?.yearsListControl ?? datePickerYearsListControl(),\n };\n};\n\ntype PopoverClassNamesType = {\n dropdown?: string;\n arrow?: string;\n overlay?: string;\n};\n\nconst popoverClassNames = (classNames?: PopoverClassNamesType) => {\n return {\n dropdown: classNames?.dropdown ?? datePickerDropdown(),\n arrow: classNames?.arrow ?? datePickerArrow(),\n overlay: classNames?.overlay ?? datePickerOverlay(),\n };\n};\n\nconst datePickerClassNames = (classNames?: DatePickerClassNames) => {\n return {\n ...inputClassNames(classNames),\n ...calendarClassNames(classNames),\n ...calendarHeaderClassNames(classNames),\n ...calendarDayClassNames(classNames),\n ...calendarWeekClassNames(classNames),\n ...calendarMonthClassNames(classNames),\n ...calendarMonthsListClassNames(classNames),\n ...calendarYearsListClassNames(classNames),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.mjs","names":[],"sources":["../../../../src/components/controls/date-picker/DatePicker.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\n\nimport { cx } from '@mage-ui/styled-system/css';\nimport {\n datePicker,\n datePickerArrow,\n datePickerButtonIcon,\n datePickerButtonIconRoot,\n datePickerCalendarHeader,\n datePickerCalendarHeaderControl,\n datePickerCalendarHeaderControlIcon,\n datePickerCalendarHeaderLevel,\n datePickerDatePickerRoot,\n datePickerDay,\n datePickerDescription,\n datePickerDropdown,\n datePickerError,\n datePickerIconIcon,\n datePickerIconIconRaw,\n datePickerIconIconRawRoot,\n datePickerIconRoot,\n datePickerInput,\n datePickerLabel,\n datePickerLevelsGroup,\n datePickerMonth,\n datePickerMonthCell,\n datePickerMonthRow,\n datePickerMonthsList,\n datePickerMonthsListCell,\n datePickerMonthsListControl,\n datePickerMonthsListRow,\n datePickerMonthTbody,\n datePickerMonthThead,\n datePickerOverlay,\n datePickerPlaceholder,\n datePickerPresetButton,\n datePickerPresetsList,\n datePickerRequired,\n datePickerRoot,\n datePickerSection,\n datePickerWeekday,\n datePickerWeekdaysRow,\n datePickerWeekNumber,\n datePickerWrapper,\n datePickerYearsList,\n datePickerYearsListCell,\n datePickerYearsListControl,\n datePickerYearsListRow,\n} from '@mage-ui/styled-system/recipes';\nimport { DatePickerInput } from '@mantine/dates';\nimport { Icon, type IconProps } from '@/components/data-display';\n\nexport type DatePickerValue = Date | string | null;\nexport type DatePickerDate = Date | string;\n\nexport type DatePickerProps = Omit<\n ComponentProps<'button'>,\n 'children' | 'defaultValue' | 'size' | 'type' | 'value' | 'onChange'\n> & {\n label?: ReactNode;\n placeholder?: string;\n description?: ReactNode;\n error?: ReactNode;\n required?: boolean;\n classNames?: DatePickerClassNames;\n value?: DatePickerValue;\n defaultValue?: DatePickerValue;\n onChange?: (date: DatePickerValue) => void;\n locale?: string;\n valueFormat?: string;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n minDate?: DatePickerDate;\n maxDate?: DatePickerDate;\n clearable?: boolean;\n};\n\nexport const DatePicker = ({\n classNames,\n name,\n label,\n placeholder,\n description,\n error,\n required,\n value,\n defaultValue,\n onChange,\n locale,\n valueFormat,\n firstDayOfWeek,\n minDate,\n maxDate,\n clearable,\n ...props\n}: DatePickerProps): ReactNode => {\n return (\n <DatePickerInput\n {...props}\n name={name}\n label={label}\n placeholder={placeholder}\n description={description}\n error={error}\n withAsterisk={required}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n locale={locale}\n valueFormat={valueFormat}\n firstDayOfWeek={firstDayOfWeek}\n minDate={minDate}\n maxDate={maxDate}\n clearable={clearable}\n classNames={datePickerClassNames(classNames)}\n popoverProps={{\n classNames: popoverClassNames(classNames),\n }}\n leftSection={\n <Icon\n path='/icons/sprite-mage.svg'\n name='mage-date-picker-calendar'\n classNames={iconClassNames(classNames?.icon)}\n />\n }\n clearButtonProps={{\n className: buttonIconClassNames(classNames?.buttonIcon),\n }}\n />\n );\n};\n\nexport type DatePickerClassNames = InputClassNamesType &\n CalendarClassNamesType &\n CalendarHeaderClassNamesType &\n CalendarDayClassNamesType &\n CalendarWeekClassNamesType &\n CalendarMonthClassNamesType &\n CalendarMonthsListClassNamesType &\n CalendarYearsListClassNamesType &\n PopoverClassNamesType & {\n icon?: IconClassNamesType;\n buttonIcon?: ButtonIconClassNamesType;\n };\n\ntype InputClassNamesType = {\n datePicker?: string;\n root?: string;\n wrapper?: string;\n input?: string;\n label?: string;\n error?: string;\n description?: string;\n placeholder?: string;\n section?: string;\n required?: string;\n datePickerRoot?: string;\n};\n\nconst inputClassNames = (classNames?: InputClassNamesType) => {\n return {\n root: cx(\n classNames?.datePicker ?? datePicker(),\n classNames?.root ?? datePickerRoot(),\n ),\n wrapper: classNames?.wrapper ?? datePickerWrapper(),\n input: cx(classNames?.input ?? datePickerInput(), 'peer'),\n label: classNames?.label ?? datePickerLabel(),\n error: classNames?.error ?? datePickerError(),\n description: classNames?.description ?? datePickerDescription(),\n placeholder: classNames?.placeholder ?? datePickerPlaceholder(),\n section: cx(classNames?.section ?? datePickerSection(), 'group'),\n required: classNames?.required ?? datePickerRequired(),\n datePickerRoot: classNames?.datePickerRoot ?? datePickerDatePickerRoot(),\n };\n};\n\ntype IconClassNamesType = IconProps['classNames'];\n\nconst iconClassNames = (classNames?: IconClassNamesType) => {\n return {\n icon: classNames?.icon ?? datePickerIconIcon(),\n root: classNames?.root ?? datePickerIconRoot(),\n iconRaw: {\n iconRaw: classNames?.iconRaw?.iconRaw ?? datePickerIconIconRaw(),\n root: classNames?.iconRaw?.root ?? datePickerIconIconRawRoot(),\n },\n };\n};\n\ntype ButtonIconClassNamesType = {\n buttonIcon?: string;\n buttonIconRoot?: string;\n};\n\nconst buttonIconClassNames = (classNames?: ButtonIconClassNamesType) => {\n return cx(\n classNames?.buttonIcon ?? datePickerButtonIcon(),\n classNames?.buttonIconRoot ?? datePickerButtonIconRoot(),\n );\n};\n\ntype CalendarHeaderClassNamesType = {\n calendarHeaderControl?: string;\n calendarHeader?: string;\n calendarHeaderLevel?: string;\n calendarHeaderControlIcon?: string;\n};\n\nconst calendarHeaderClassNames = (\n classNames?: CalendarHeaderClassNamesType,\n) => {\n return {\n calendarHeader: classNames?.calendarHeader ?? datePickerCalendarHeader(),\n calendarHeaderControl:\n classNames?.calendarHeaderControl ?? datePickerCalendarHeaderControl(),\n calendarHeaderLevel:\n classNames?.calendarHeaderLevel ?? datePickerCalendarHeaderLevel(),\n calendarHeaderControlIcon:\n classNames?.calendarHeaderControlIcon ??\n datePickerCalendarHeaderControlIcon(),\n };\n};\n\ntype CalendarClassNamesType = {\n levelsGroup?: string;\n presetsList?: string;\n presetButton?: string;\n};\n\nconst calendarClassNames = (classNames?: CalendarClassNamesType) => {\n return {\n levelsGroup: classNames?.levelsGroup ?? datePickerLevelsGroup(),\n presetsList: classNames?.presetsList ?? datePickerPresetsList(),\n presetButton: classNames?.presetButton ?? datePickerPresetButton(),\n };\n};\n\ntype CalendarDayClassNamesType = {\n day?: string;\n};\n\nconst calendarDayClassNames = (classNames?: CalendarDayClassNamesType) => {\n return {\n day: classNames?.day ?? datePickerDay(),\n };\n};\n\ntype CalendarWeekClassNamesType = {\n weekDaysRow?: string;\n weekDay?: string;\n weekNumber?: string;\n};\n\nconst calendarWeekClassNames = (classNames?: CalendarWeekClassNamesType) => {\n return {\n weekdaysRow: classNames?.weekDaysRow ?? datePickerWeekdaysRow(),\n weekday: classNames?.weekDay ?? datePickerWeekday(),\n weekNumber: classNames?.weekNumber ?? datePickerWeekNumber(),\n };\n};\n\ntype CalendarMonthClassNamesType = {\n month?: string;\n monthRow?: string;\n monthCell?: string;\n monthThead?: string;\n monthTbody?: string;\n};\n\nconst calendarMonthClassNames = (classNames?: CalendarMonthClassNamesType) => {\n return {\n month: classNames?.month ?? datePickerMonth(),\n monthRow: classNames?.monthRow ?? datePickerMonthRow(),\n monthThead: classNames?.monthThead ?? datePickerMonthThead(),\n monthTbody: classNames?.monthTbody ?? datePickerMonthTbody(),\n monthCell: classNames?.monthCell ?? datePickerMonthCell(),\n };\n};\n\ntype CalendarMonthsListClassNamesType = {\n monthsList?: string;\n monthsListRow?: string;\n monthsListCell?: string;\n monthsListControl?: string;\n};\n\nconst calendarMonthsListClassNames = (\n classNames?: CalendarMonthsListClassNamesType,\n) => {\n return {\n monthsList: classNames?.monthsList ?? datePickerMonthsList(),\n monthsListRow: classNames?.monthsListRow ?? datePickerMonthsListRow(),\n monthsListCell: classNames?.monthsListCell ?? datePickerMonthsListCell(),\n monthsListControl:\n classNames?.monthsListControl ?? datePickerMonthsListControl(),\n };\n};\n\ntype CalendarYearsListClassNamesType = {\n yearsList?: string;\n yearsListRow?: string;\n yearsListCell?: string;\n yearsListControl?: string;\n};\n\nconst calendarYearsListClassNames = (\n classNames?: CalendarYearsListClassNamesType,\n) => {\n return {\n yearsList: classNames?.yearsList ?? datePickerYearsList(),\n yearsListRow: classNames?.yearsListRow ?? datePickerYearsListRow(),\n yearsListCell: classNames?.yearsListCell ?? datePickerYearsListCell(),\n yearsListControl:\n classNames?.yearsListControl ?? datePickerYearsListControl(),\n };\n};\n\ntype PopoverClassNamesType = {\n dropdown?: string;\n arrow?: string;\n overlay?: string;\n};\n\nconst popoverClassNames = (classNames?: PopoverClassNamesType) => {\n return {\n dropdown: classNames?.dropdown ?? datePickerDropdown(),\n arrow: classNames?.arrow ?? datePickerArrow(),\n overlay: classNames?.overlay ?? datePickerOverlay(),\n };\n};\n\nconst datePickerClassNames = (classNames?: DatePickerClassNames) => {\n return {\n ...inputClassNames(classNames),\n ...calendarClassNames(classNames),\n ...calendarHeaderClassNames(classNames),\n ...calendarDayClassNames(classNames),\n ...calendarWeekClassNames(classNames),\n ...calendarMonthClassNames(classNames),\n ...calendarMonthsListClassNames(classNames),\n ...calendarYearsListClassNames(classNames),\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { IconProps } from "../../data-display/icons/icon/Icon.mjs";
2
+ import { ComponentProps, ReactNode } from "react";
3
+
4
+ //#region src/components/controls/date-time-picker/DateTimePicker.d.ts
5
+ type DateTimePickerValue = Date | string | null;
6
+ type DateTimePickerDate = Date | string;
7
+ type DateTimePickerProps = Omit<ComponentProps<'button'>, 'children' | 'defaultValue' | 'size' | 'type' | 'value' | 'onChange'> & {
8
+ label?: ReactNode;
9
+ placeholder?: string;
10
+ description?: ReactNode;
11
+ error?: ReactNode;
12
+ required?: boolean;
13
+ classNames?: DateTimePickerClassNames;
14
+ value?: DateTimePickerValue;
15
+ defaultValue?: DateTimePickerValue;
16
+ onChange?: (date: DateTimePickerValue) => void;
17
+ locale?: string;
18
+ valueFormat?: string;
19
+ firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
20
+ minDate?: DateTimePickerDate;
21
+ maxDate?: DateTimePickerDate;
22
+ clearable?: boolean;
23
+ defaultTimeValue?: string;
24
+ withSeconds?: boolean;
25
+ };
26
+ declare const DateTimePicker: ({
27
+ classNames,
28
+ name,
29
+ label,
30
+ placeholder,
31
+ description,
32
+ error,
33
+ required,
34
+ value,
35
+ defaultValue,
36
+ onChange,
37
+ locale,
38
+ valueFormat,
39
+ firstDayOfWeek,
40
+ minDate,
41
+ maxDate,
42
+ clearable,
43
+ defaultTimeValue,
44
+ withSeconds,
45
+ ...props
46
+ }: DateTimePickerProps) => ReactNode;
47
+ type DateTimePickerClassNames = InputClassNamesType & CalendarClassNamesType & CalendarHeaderClassNamesType & CalendarDayClassNamesType & CalendarWeekClassNamesType & CalendarMonthClassNamesType & CalendarMonthsListClassNamesType & CalendarYearsListClassNamesType & TimeClassNamesType & PopoverClassNamesType & {
48
+ icon?: IconClassNamesType;
49
+ buttonIcon?: ButtonIconClassNamesType;
50
+ };
51
+ type InputClassNamesType = {
52
+ dateTimePicker?: string;
53
+ root?: string;
54
+ wrapper?: string;
55
+ input?: string;
56
+ label?: string;
57
+ error?: string;
58
+ description?: string;
59
+ placeholder?: string;
60
+ section?: string;
61
+ required?: string;
62
+ datePickerRoot?: string;
63
+ };
64
+ type IconClassNamesType = IconProps['classNames'];
65
+ type ButtonIconClassNamesType = {
66
+ buttonIcon?: string;
67
+ buttonIconRoot?: string;
68
+ };
69
+ type CalendarHeaderClassNamesType = {
70
+ calendarHeaderControl?: string;
71
+ calendarHeader?: string;
72
+ calendarHeaderLevel?: string;
73
+ calendarHeaderControlIcon?: string;
74
+ };
75
+ type CalendarClassNamesType = {
76
+ levelsGroup?: string;
77
+ presetsList?: string;
78
+ presetButton?: string;
79
+ };
80
+ type CalendarDayClassNamesType = {
81
+ day?: string;
82
+ };
83
+ type CalendarWeekClassNamesType = {
84
+ weekDaysRow?: string;
85
+ weekDay?: string;
86
+ weekNumber?: string;
87
+ };
88
+ type CalendarMonthClassNamesType = {
89
+ month?: string;
90
+ monthRow?: string;
91
+ monthCell?: string;
92
+ monthThead?: string;
93
+ monthTbody?: string;
94
+ };
95
+ type CalendarMonthsListClassNamesType = {
96
+ monthsList?: string;
97
+ monthsListRow?: string;
98
+ monthsListCell?: string;
99
+ monthsListControl?: string;
100
+ };
101
+ type CalendarYearsListClassNamesType = {
102
+ yearsList?: string;
103
+ yearsListRow?: string;
104
+ yearsListCell?: string;
105
+ yearsListControl?: string;
106
+ };
107
+ type TimeClassNamesType = {
108
+ timePicker?: string;
109
+ timeWrapper?: string;
110
+ timeInput?: string;
111
+ submitButton?: string;
112
+ };
113
+ type PopoverClassNamesType = {
114
+ dropdown?: string;
115
+ arrow?: string;
116
+ overlay?: string;
117
+ };
118
+ //#endregion
119
+ export { DateTimePicker, DateTimePickerClassNames, DateTimePickerDate, DateTimePickerProps, DateTimePickerValue };
120
+ //# sourceMappingURL=DateTimePicker.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePicker.d.mts","names":[],"sources":["../../../../src/components/controls/date-time-picker/DateTimePicker.tsx"],"mappings":";;;;KAuDY,mBAAA,GAAsB,IAAA;AAAA,KACtB,kBAAA,GAAqB,IAAA;AAAA,KAErB,mBAAA,GAAsB,IAAA,CAChC,cAAA;EAGA,KAAA,GAAQ,SAAA;EACR,WAAA;EACA,WAAA,GAAc,SAAA;EACd,KAAA,GAAQ,SAAA;EACR,QAAA;EACA,UAAA,GAAa,wBAAA;EACb,KAAA,GAAQ,mBAAA;EACR,YAAA,GAAe,mBAAA;EACf,QAAA,IAAY,IAAA,EAAM,mBAAA;EAClB,MAAA;EACA,WAAA;EACA,cAAA;EACA,OAAA,GAAU,kBAAA;EACV,OAAA,GAAU,kBAAA;EACV,SAAA;EACA,gBAAA;EACA,WAAA;AAAA;AAAA,cAGW,cAAA;EAAkB,UAAA;EAAA,IAAA;EAAA,KAAA;EAAA,WAAA;EAAA,WAAA;EAAA,KAAA;EAAA,QAAA;EAAA,KAAA;EAAA,YAAA;EAAA,QAAA;EAAA,MAAA;EAAA,WAAA;EAAA,cAAA;EAAA,OAAA;EAAA,OAAA;EAAA,SAAA;EAAA,gBAAA;EAAA,WAAA;EAAA,GAAA;AAAA,GAoB5B,mBAAA,KAAsB,SAAA;AAAA,KAuCb,wBAAA,GAA2B,mBAAA,GACrC,sBAAA,GACA,4BAAA,GACA,yBAAA,GACA,0BAAA,GACA,2BAAA,GACA,gCAAA,GACA,+BAAA,GACA,kBAAA,GACA,qBAAA;EACE,IAAA,GAAO,kBAAA;EACP,UAAA,GAAa,wBAAA;AAAA;AAAA,KAGZ,mBAAA;EACH,cAAA;EACA,IAAA;EACA,OAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;AAAA;AAAA,KAsBG,kBAAA,GAAqB,SAAA;AAAA,KAarB,wBAAA;EACH,UAAA;EACA,cAAA;AAAA;AAAA,KAUG,4BAAA;EACH,qBAAA;EACA,cAAA;EACA,mBAAA;EACA,yBAAA;AAAA;AAAA,KAoBG,sBAAA;EACH,WAAA;EACA,WAAA;EACA,YAAA;AAAA;AAAA,KAWG,yBAAA;EACH,GAAA;AAAA;AAAA,KASG,0BAAA;EACH,WAAA;EACA,OAAA;EACA,UAAA;AAAA;AAAA,KAWG,2BAAA;EACH,KAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,KAaG,gCAAA;EACH,UAAA;EACA,aAAA;EACA,cAAA;EACA,iBAAA;AAAA;AAAA,KAgBG,+BAAA;EACH,SAAA;EACA,YAAA;EACA,aAAA;EACA,gBAAA;AAAA;AAAA,KAeG,kBAAA;EACH,UAAA;EACA,WAAA;EACA,SAAA;EACA,YAAA;AAAA;AAAA,KAYG,qBAAA;EACH,QAAA;EACA,KAAA;EACA,OAAA;AAAA"}
@@ -0,0 +1,2 @@
1
+ import{Icon as e}from"../../data-display/icons/icon/Icon.mjs";import{cx as t}from"@mage-ui/styled-system/css";import{dateTimePicker as n,dateTimePickerArrow as r,dateTimePickerButtonIcon as i,dateTimePickerButtonIconRoot as a,dateTimePickerCalendarHeader as o,dateTimePickerCalendarHeaderControl as s,dateTimePickerCalendarHeaderControlIcon as c,dateTimePickerCalendarHeaderLevel as l,dateTimePickerDatePickerRoot as u,dateTimePickerDay as d,dateTimePickerDescription as f,dateTimePickerDropdown as p,dateTimePickerError as m,dateTimePickerIconIcon as h,dateTimePickerIconIconRaw as g,dateTimePickerIconIconRawRoot as _,dateTimePickerIconRoot as v,dateTimePickerInput as y,dateTimePickerLabel as b,dateTimePickerLevelsGroup as ee,dateTimePickerMonth as x,dateTimePickerMonthCell as S,dateTimePickerMonthRow as C,dateTimePickerMonthTbody as w,dateTimePickerMonthThead as T,dateTimePickerMonthsList as E,dateTimePickerMonthsListCell as D,dateTimePickerMonthsListControl as O,dateTimePickerMonthsListRow as k,dateTimePickerOverlay as A,dateTimePickerPlaceholder as j,dateTimePickerPresetButton as M,dateTimePickerPresetsList as N,dateTimePickerRequired as P,dateTimePickerRoot as F,dateTimePickerSection as I,dateTimePickerSubmitButton as L,dateTimePickerTimeInput as R,dateTimePickerTimeWrapper as z,dateTimePickerWeekNumber as B,dateTimePickerWeekday as te,dateTimePickerWeekdaysRow as V,dateTimePickerWrapper as H,dateTimePickerYearsList as U,dateTimePickerYearsListCell as W,dateTimePickerYearsListControl as G,dateTimePickerYearsListRow as K}from"@mage-ui/styled-system/recipes";import{jsx as q}from"react/jsx-runtime";import{DateTimePicker as J}from"@mantine/dates";const Y=({classNames:t,name:n,label:r,placeholder:i,description:a,error:o,required:s,value:c,defaultValue:l,onChange:u,locale:d,valueFormat:f,firstDayOfWeek:p,minDate:m,maxDate:h,clearable:g,defaultTimeValue:_,withSeconds:v,...y})=>q(J,{...y,name:n,label:r,placeholder:i,description:a,error:o,withAsterisk:s,value:c,defaultValue:l,onChange:u,locale:d,valueFormat:f,firstDayOfWeek:p,minDate:m,maxDate:h,clearable:g,defaultTimeValue:_,withSeconds:v,classNames:ue(t),popoverProps:{classNames:le(t)},leftSection:q(e,{path:`/icons/sprite-mage.svg`,name:`mage-date-picker-calendar`,classNames:Z(t?.icon)}),clearButtonProps:{className:Q(t?.buttonIcon)}}),X=e=>({root:t(e?.dateTimePicker??n(),e?.root??F()),wrapper:e?.wrapper??H(),input:t(e?.input??y(),`peer`),label:e?.label??b(),error:e?.error??m(),description:e?.description??f(),placeholder:e?.placeholder??j(),section:t(e?.section??I(),`group`),required:e?.required??P(),datePickerRoot:e?.datePickerRoot??u()}),Z=e=>({icon:e?.icon??h(),root:e?.root??v(),iconRaw:{iconRaw:e?.iconRaw?.iconRaw??g(),root:e?.iconRaw?.root??_()}}),Q=e=>t(e?.buttonIcon??i(),e?.buttonIconRoot??a()),ne=e=>({calendarHeader:e?.calendarHeader??o(),calendarHeaderControl:e?.calendarHeaderControl??s(),calendarHeaderLevel:e?.calendarHeaderLevel??l(),calendarHeaderControlIcon:e?.calendarHeaderControlIcon??c()}),re=e=>({levelsGroup:e?.levelsGroup??ee(),presetsList:e?.presetsList??N(),presetButton:e?.presetButton??M()}),ie=e=>({day:e?.day??d()}),ae=e=>({weekdaysRow:e?.weekDaysRow??V(),weekday:e?.weekDay??te(),weekNumber:e?.weekNumber??B()}),oe=e=>({month:e?.month??x(),monthRow:e?.monthRow??C(),monthThead:e?.monthThead??T(),monthTbody:e?.monthTbody??w(),monthCell:e?.monthCell??S()}),$=e=>({monthsList:e?.monthsList??E(),monthsListRow:e?.monthsListRow??k(),monthsListCell:e?.monthsListCell??D(),monthsListControl:e?.monthsListControl??O()}),se=e=>({yearsList:e?.yearsList??U(),yearsListRow:e?.yearsListRow??K(),yearsListCell:e?.yearsListCell??W(),yearsListControl:e?.yearsListControl??G()}),ce=e=>({timePicker:e?.timePicker??n(),timeWrapper:e?.timeWrapper??z(),timeInput:e?.timeInput??R(),submitButton:e?.submitButton??L()}),le=e=>({dropdown:e?.dropdown??p(),arrow:e?.arrow??r(),overlay:e?.overlay??A()}),ue=e=>({...X(e),...re(e),...ne(e),...ie(e),...ae(e),...oe(e),...$(e),...se(e),...ce(e)});export{Y as DateTimePicker};
2
+ //# sourceMappingURL=DateTimePicker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateTimePicker.mjs","names":["DateTimePicker","MantineDateTimePicker"],"sources":["../../../../src/components/controls/date-time-picker/DateTimePicker.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\n\nimport { cx } from '@mage-ui/styled-system/css';\nimport {\n dateTimePicker,\n dateTimePickerArrow,\n dateTimePickerButtonIcon,\n dateTimePickerButtonIconRoot,\n dateTimePickerCalendarHeader,\n dateTimePickerCalendarHeaderControl,\n dateTimePickerCalendarHeaderControlIcon,\n dateTimePickerCalendarHeaderLevel,\n dateTimePickerDatePickerRoot,\n dateTimePickerDay,\n dateTimePickerDescription,\n dateTimePickerDropdown,\n dateTimePickerError,\n dateTimePickerIconIcon,\n dateTimePickerIconIconRaw,\n dateTimePickerIconIconRawRoot,\n dateTimePickerIconRoot,\n dateTimePickerInput,\n dateTimePickerLabel,\n dateTimePickerLevelsGroup,\n dateTimePickerMonth,\n dateTimePickerMonthCell,\n dateTimePickerMonthRow,\n dateTimePickerMonthsList,\n dateTimePickerMonthsListCell,\n dateTimePickerMonthsListControl,\n dateTimePickerMonthsListRow,\n dateTimePickerMonthTbody,\n dateTimePickerMonthThead,\n dateTimePickerOverlay,\n dateTimePickerPlaceholder,\n dateTimePickerPresetButton,\n dateTimePickerPresetsList,\n dateTimePickerRequired,\n dateTimePickerRoot,\n dateTimePickerSection,\n dateTimePickerSubmitButton,\n dateTimePickerTimeInput,\n dateTimePickerTimeWrapper,\n dateTimePickerWeekday,\n dateTimePickerWeekdaysRow,\n dateTimePickerWeekNumber,\n dateTimePickerWrapper,\n dateTimePickerYearsList,\n dateTimePickerYearsListCell,\n dateTimePickerYearsListControl,\n dateTimePickerYearsListRow,\n} from '@mage-ui/styled-system/recipes';\nimport { DateTimePicker as MantineDateTimePicker } from '@mantine/dates';\nimport { Icon, type IconProps } from '@/components/data-display';\n\nexport type DateTimePickerValue = Date | string | null;\nexport type DateTimePickerDate = Date | string;\n\nexport type DateTimePickerProps = Omit<\n ComponentProps<'button'>,\n 'children' | 'defaultValue' | 'size' | 'type' | 'value' | 'onChange'\n> & {\n label?: ReactNode;\n placeholder?: string;\n description?: ReactNode;\n error?: ReactNode;\n required?: boolean;\n classNames?: DateTimePickerClassNames;\n value?: DateTimePickerValue;\n defaultValue?: DateTimePickerValue;\n onChange?: (date: DateTimePickerValue) => void;\n locale?: string;\n valueFormat?: string;\n firstDayOfWeek?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n minDate?: DateTimePickerDate;\n maxDate?: DateTimePickerDate;\n clearable?: boolean;\n defaultTimeValue?: string;\n withSeconds?: boolean;\n};\n\nexport const DateTimePicker = ({\n classNames,\n name,\n label,\n placeholder,\n description,\n error,\n required,\n value,\n defaultValue,\n onChange,\n locale,\n valueFormat,\n firstDayOfWeek,\n minDate,\n maxDate,\n clearable,\n defaultTimeValue,\n withSeconds,\n ...props\n}: DateTimePickerProps): ReactNode => {\n return (\n <MantineDateTimePicker\n {...props}\n name={name}\n label={label}\n placeholder={placeholder}\n description={description}\n error={error}\n withAsterisk={required}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n locale={locale}\n valueFormat={valueFormat}\n firstDayOfWeek={firstDayOfWeek}\n minDate={minDate}\n maxDate={maxDate}\n clearable={clearable}\n defaultTimeValue={defaultTimeValue}\n withSeconds={withSeconds}\n classNames={dateTimePickerClassNames(classNames)}\n popoverProps={{\n classNames: popoverClassNames(classNames),\n }}\n leftSection={\n <Icon\n path='/icons/sprite-mage.svg'\n name='mage-date-picker-calendar'\n classNames={iconClassNames(classNames?.icon)}\n />\n }\n clearButtonProps={{\n className: buttonIconClassNames(classNames?.buttonIcon),\n }}\n />\n );\n};\n\nexport type DateTimePickerClassNames = InputClassNamesType &\n CalendarClassNamesType &\n CalendarHeaderClassNamesType &\n CalendarDayClassNamesType &\n CalendarWeekClassNamesType &\n CalendarMonthClassNamesType &\n CalendarMonthsListClassNamesType &\n CalendarYearsListClassNamesType &\n TimeClassNamesType &\n PopoverClassNamesType & {\n icon?: IconClassNamesType;\n buttonIcon?: ButtonIconClassNamesType;\n };\n\ntype InputClassNamesType = {\n dateTimePicker?: string;\n root?: string;\n wrapper?: string;\n input?: string;\n label?: string;\n error?: string;\n description?: string;\n placeholder?: string;\n section?: string;\n required?: string;\n datePickerRoot?: string;\n};\n\nconst inputClassNames = (classNames?: InputClassNamesType) => {\n return {\n root: cx(\n classNames?.dateTimePicker ?? dateTimePicker(),\n classNames?.root ?? dateTimePickerRoot(),\n ),\n wrapper: classNames?.wrapper ?? dateTimePickerWrapper(),\n input: cx(classNames?.input ?? dateTimePickerInput(), 'peer'),\n label: classNames?.label ?? dateTimePickerLabel(),\n error: classNames?.error ?? dateTimePickerError(),\n description: classNames?.description ?? dateTimePickerDescription(),\n placeholder: classNames?.placeholder ?? dateTimePickerPlaceholder(),\n section: cx(classNames?.section ?? dateTimePickerSection(), 'group'),\n required: classNames?.required ?? dateTimePickerRequired(),\n datePickerRoot:\n classNames?.datePickerRoot ?? dateTimePickerDatePickerRoot(),\n };\n};\n\ntype IconClassNamesType = IconProps['classNames'];\n\nconst iconClassNames = (classNames?: IconClassNamesType) => {\n return {\n icon: classNames?.icon ?? dateTimePickerIconIcon(),\n root: classNames?.root ?? dateTimePickerIconRoot(),\n iconRaw: {\n iconRaw: classNames?.iconRaw?.iconRaw ?? dateTimePickerIconIconRaw(),\n root: classNames?.iconRaw?.root ?? dateTimePickerIconIconRawRoot(),\n },\n };\n};\n\ntype ButtonIconClassNamesType = {\n buttonIcon?: string;\n buttonIconRoot?: string;\n};\n\nconst buttonIconClassNames = (classNames?: ButtonIconClassNamesType) => {\n return cx(\n classNames?.buttonIcon ?? dateTimePickerButtonIcon(),\n classNames?.buttonIconRoot ?? dateTimePickerButtonIconRoot(),\n );\n};\n\ntype CalendarHeaderClassNamesType = {\n calendarHeaderControl?: string;\n calendarHeader?: string;\n calendarHeaderLevel?: string;\n calendarHeaderControlIcon?: string;\n};\n\nconst calendarHeaderClassNames = (\n classNames?: CalendarHeaderClassNamesType,\n) => {\n return {\n calendarHeader:\n classNames?.calendarHeader ?? dateTimePickerCalendarHeader(),\n calendarHeaderControl:\n classNames?.calendarHeaderControl ??\n dateTimePickerCalendarHeaderControl(),\n calendarHeaderLevel:\n classNames?.calendarHeaderLevel ?? dateTimePickerCalendarHeaderLevel(),\n calendarHeaderControlIcon:\n classNames?.calendarHeaderControlIcon ??\n dateTimePickerCalendarHeaderControlIcon(),\n };\n};\n\ntype CalendarClassNamesType = {\n levelsGroup?: string;\n presetsList?: string;\n presetButton?: string;\n};\n\nconst calendarClassNames = (classNames?: CalendarClassNamesType) => {\n return {\n levelsGroup: classNames?.levelsGroup ?? dateTimePickerLevelsGroup(),\n presetsList: classNames?.presetsList ?? dateTimePickerPresetsList(),\n presetButton: classNames?.presetButton ?? dateTimePickerPresetButton(),\n };\n};\n\ntype CalendarDayClassNamesType = {\n day?: string;\n};\n\nconst calendarDayClassNames = (classNames?: CalendarDayClassNamesType) => {\n return {\n day: classNames?.day ?? dateTimePickerDay(),\n };\n};\n\ntype CalendarWeekClassNamesType = {\n weekDaysRow?: string;\n weekDay?: string;\n weekNumber?: string;\n};\n\nconst calendarWeekClassNames = (classNames?: CalendarWeekClassNamesType) => {\n return {\n weekdaysRow: classNames?.weekDaysRow ?? dateTimePickerWeekdaysRow(),\n weekday: classNames?.weekDay ?? dateTimePickerWeekday(),\n weekNumber: classNames?.weekNumber ?? dateTimePickerWeekNumber(),\n };\n};\n\ntype CalendarMonthClassNamesType = {\n month?: string;\n monthRow?: string;\n monthCell?: string;\n monthThead?: string;\n monthTbody?: string;\n};\n\nconst calendarMonthClassNames = (classNames?: CalendarMonthClassNamesType) => {\n return {\n month: classNames?.month ?? dateTimePickerMonth(),\n monthRow: classNames?.monthRow ?? dateTimePickerMonthRow(),\n monthThead: classNames?.monthThead ?? dateTimePickerMonthThead(),\n monthTbody: classNames?.monthTbody ?? dateTimePickerMonthTbody(),\n monthCell: classNames?.monthCell ?? dateTimePickerMonthCell(),\n };\n};\n\ntype CalendarMonthsListClassNamesType = {\n monthsList?: string;\n monthsListRow?: string;\n monthsListCell?: string;\n monthsListControl?: string;\n};\n\nconst calendarMonthsListClassNames = (\n classNames?: CalendarMonthsListClassNamesType,\n) => {\n return {\n monthsList: classNames?.monthsList ?? dateTimePickerMonthsList(),\n monthsListRow: classNames?.monthsListRow ?? dateTimePickerMonthsListRow(),\n monthsListCell:\n classNames?.monthsListCell ?? dateTimePickerMonthsListCell(),\n monthsListControl:\n classNames?.monthsListControl ?? dateTimePickerMonthsListControl(),\n };\n};\n\ntype CalendarYearsListClassNamesType = {\n yearsList?: string;\n yearsListRow?: string;\n yearsListCell?: string;\n yearsListControl?: string;\n};\n\nconst calendarYearsListClassNames = (\n classNames?: CalendarYearsListClassNamesType,\n) => {\n return {\n yearsList: classNames?.yearsList ?? dateTimePickerYearsList(),\n yearsListRow: classNames?.yearsListRow ?? dateTimePickerYearsListRow(),\n yearsListCell: classNames?.yearsListCell ?? dateTimePickerYearsListCell(),\n yearsListControl:\n classNames?.yearsListControl ?? dateTimePickerYearsListControl(),\n };\n};\n\ntype TimeClassNamesType = {\n timePicker?: string;\n timeWrapper?: string;\n timeInput?: string;\n submitButton?: string;\n};\n\nconst timeClassNames = (classNames?: TimeClassNamesType) => {\n return {\n timePicker: classNames?.timePicker ?? dateTimePicker(),\n timeWrapper: classNames?.timeWrapper ?? dateTimePickerTimeWrapper(),\n timeInput: classNames?.timeInput ?? dateTimePickerTimeInput(),\n submitButton: classNames?.submitButton ?? dateTimePickerSubmitButton(),\n };\n};\n\ntype PopoverClassNamesType = {\n dropdown?: string;\n arrow?: string;\n overlay?: string;\n};\n\nconst popoverClassNames = (classNames?: PopoverClassNamesType) => {\n return {\n dropdown: classNames?.dropdown ?? dateTimePickerDropdown(),\n arrow: classNames?.arrow ?? dateTimePickerArrow(),\n overlay: classNames?.overlay ?? dateTimePickerOverlay(),\n };\n};\n\nconst dateTimePickerClassNames = (classNames?: DateTimePickerClassNames) => {\n return {\n ...inputClassNames(classNames),\n ...calendarClassNames(classNames),\n ...calendarHeaderClassNames(classNames),\n ...calendarDayClassNames(classNames),\n ...calendarWeekClassNames(classNames),\n ...calendarMonthClassNames(classNames),\n ...calendarMonthsListClassNames(classNames),\n ...calendarYearsListClassNames(classNames),\n ...timeClassNames(classNames),\n };\n};\n"],"mappings":"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"}
@@ -12,6 +12,7 @@ type FileData = {
12
12
  uploaded: boolean;
13
13
  loading: boolean;
14
14
  url: string;
15
+ token?: string;
15
16
  error?: string;
16
17
  progress?: number;
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneBase.d.mts","names":[],"sources":["../../../../src/components/controls/dropzone/DropzoneBase.tsx"],"mappings":";;;;;;KAkCY,QAAA;EACV,IAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,OAAA;EACA,GAAA;EACA,KAAA;EACA,QAAA;AAAA;AAAA,KAGU,iBAAA;EACV,QAAA;IACE,KAAA;IACA,WAAA;IACA;EAAA;IAEA,KAAA,EAAO,MAAA,SAAe,QAAA;IACtB,WAAA;IACA,UAAA,GAAa,QAAA;EAAA,MACT,SAAA;EACN,YAAA,GAAe,MAAA,SAAe,QAAA;EAC9B,QAAA;EAXU;;;;;EAiBV,GAAA;EAXwB;;;;;EAiBxB,QAAA,GAAW,QAAA,EAMQ;EAJnB,QAAA,YAMU;EAJV,OAAA,WAoBQ;EAlBR,QAAA,IAAY,KAAA,EAAO,IAAA;EACnB,IAAA,GAAO,MAAA;EACP,OAAA,GAAU,MAAA;EA8BO;;;;;;;;;;;;;;EAfjB,MAAA,cAAoB,MAAA;EACpB,KAAA,GAAQ,SAAA;EACR,QAAA,GAAW,SAAA;EACX,IAAA,GAAO,SAAA;EACP,OAAA;EACA,cAAA,IAAkB,IAAA,EAAM,QAAA;EACxB,YAAA;EACA,UAAA;IACE,YAAA;IACA,IAAA;IACA,KAAA;MACE,IAAA;MACA,KAAA;IAAA;IAEF,QAAA;IACA,YAAA,GAAe,SAAA;IACf,MAAA,GAAS,eAAA;IACT,QAAA;IACA,KAAA;IACA,QAAA;IACA,IAAA;EAAA;EAEF,SAAA;AAAA"}
1
+ {"version":3,"file":"DropzoneBase.d.mts","names":[],"sources":["../../../../src/components/controls/dropzone/DropzoneBase.tsx"],"mappings":";;;;;;KAkCY,QAAA;EACV,IAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,OAAA;EACA,GAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;AAAA;AAAA,KAGU,iBAAA;EACV,QAAA;IACE,KAAA;IACA,WAAA;IACA;EAAA;IAEA,KAAA,EAAO,MAAA,SAAe,QAAA;IACtB,WAAA;IACA,UAAA,GAAa,QAAA;EAAA,MACT,SAAA;EACN,YAAA,GAAe,MAAA,SAAe,QAAA;EAC9B,QAAA;EAXU;;;;;EAiBV,GAAA;EAXwB;;;;;EAiBxB,QAAA,GAAW,QAAA,EAMQ;EAJnB,QAAA,YAMU;EAJV,OAAA,WAoBQ;EAlBR,QAAA,IAAY,KAAA,EAAO,IAAA;EACnB,IAAA,GAAO,MAAA;EACP,OAAA,GAAU,MAAA;EA8BO;;;;;;;;;;;;;;EAfjB,MAAA,cAAoB,MAAA;EACpB,KAAA,GAAQ,SAAA;EACR,QAAA,GAAW,SAAA;EACX,IAAA,GAAO,SAAA;EACP,OAAA;EACA,cAAA,IAAkB,IAAA,EAAM,QAAA;EACxB,YAAA;EACA,UAAA;IACE,YAAA;IACA,IAAA;IACA,KAAA;MACE,IAAA;MACA,KAAA;IAAA;IAEF,QAAA;IACA,YAAA,GAAe,SAAA;IACf,MAAA,GAAS,eAAA;IACT,QAAA;IACA,KAAA;IACA,QAAA;IACA,IAAA;EAAA;EAEF,SAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneBase.mjs","names":["MantineDropzone"],"sources":["../../../../src/components/controls/dropzone/DropzoneBase.tsx"],"sourcesContent":["import { type ReactNode, useCallback, useRef } from 'react';\n\nimport { cx } from '@mage-ui/styled-system/css';\nimport {\n dropzoneBase,\n dropzoneBaseHint,\n dropzoneBaseIcon,\n dropzoneBaseIconSlot,\n dropzoneBaseInput,\n dropzoneBaseInputInner,\n dropzoneBaseLoader,\n dropzoneBaseLoaderRoot,\n dropzoneBaseRoot,\n dropzoneBaseSubtitle,\n dropzoneBaseTextSlot,\n dropzoneBaseTitle,\n} from '@mage-ui/styled-system/recipes';\nimport { Dropzone as MantineDropzone } from '@mantine/dropzone';\nimport {\n Icon,\n type IconProps,\n LoaderOval,\n type LoaderOvalProps,\n} from '@/components/data-display';\n\nimport type {\n Uploader,\n UploadProgress,\n UploadResponse,\n} from './upload-service';\nimport { useDropzoneState } from './use-dropzone-state';\n\nexport type { Uploader, UploadProgress, UploadResponse };\n\nexport type FileData = {\n name: string;\n size: number;\n type: string;\n date: string;\n uploaded: boolean;\n loading: boolean;\n url: string;\n error?: string;\n progress?: number; // (0-100)\n};\n\nexport type DropzoneBaseProps = {\n children: ({\n files,\n isUploading,\n removeFile,\n }: {\n files: Record<string, FileData>;\n isUploading: boolean;\n removeFile: (fileName: string) => void;\n }) => ReactNode;\n initialFiles?: Record<string, FileData>;\n maxFiles?: number;\n /**\n * Endpoint used by the built-in FormData uploader. Required when\n * `autoSend=true` (default) AND no custom `uploader` is provided.\n * Ignored if `uploader` is provided.\n */\n url?: string;\n /**\n * Custom upload function that replaces the built-in FormData POST.\n * Use it for multi-step flows (e.g. presigned S3) or any non-standard\n * transport. When set, the `url` prop is ignored.\n */\n uploader?: Uploader;\n /** When false, files are added to state but not uploaded automatically. Default: true. */\n autoSend?: boolean;\n /** Maximum file size in bytes. Files exceeding this will be rejected. */\n maxSize?: number;\n /** Called when the file list changes (added or removed). Useful when autoSend=false. */\n onChange?: (files: File[]) => void;\n data?: Record<string, unknown>;\n headers?: Record<string, string>;\n /**\n * Files the dropzone accepts. Forwarded directly to Mantine's\n * `<Dropzone accept>`.\n *\n * Two formats are supported:\n * - **Map (preferred)**: `{ [mimeType]: ['.ext', ...] }` — matches\n * the native `react-dropzone` shape and produces a correct\n * `<input accept>` with MIME + extension pairs. Required when any\n * key would otherwise be a bare extension string.\n * - **Array**: `string[]` of MIME types (no `.ext` entries) — kept\n * for backward compatibility. Mixing `.ext` strings into the\n * array triggers a `Skipped \"...\" because it is not a valid MIME\n * type` warning from `react-dropzone` v15+.\n */\n accept?: string[] | Record<string, string[]>;\n title?: ReactNode;\n subtitle?: ReactNode;\n hint?: ReactNode;\n inputId?: string;\n onFileUploaded?: (file: FileData) => void;\n hideWhenFull?: boolean;\n classNames?: {\n dropzoneBase?: string;\n root?: string;\n input?: {\n root?: string;\n inner?: string;\n };\n iconSlot?: string;\n dropzoneIcon?: IconProps['classNames'];\n loader?: LoaderOvalProps['classNames'];\n textSlot?: string;\n title?: string;\n subtitle?: string;\n hint?: string;\n };\n direction?: 'default' | 'reverse';\n};\n\nexport const DropzoneBase = ({\n data,\n headers,\n children,\n initialFiles = {},\n maxFiles,\n url,\n uploader,\n autoSend = true,\n maxSize,\n onChange,\n accept,\n title,\n subtitle,\n hint,\n inputId,\n onFileUploaded,\n classNames,\n direction = 'default',\n hideWhenFull = false,\n}: DropzoneBaseProps) => {\n const dropzoneRef = useRef<HTMLDivElement>(null);\n const rawFilesRef = useRef<Map<string, File>>(new Map());\n const {\n files,\n isUploading,\n uploadMultipleFiles,\n addFile,\n removeFile: hookRemoveFile,\n } = useDropzoneState(url, initialFiles, onFileUploaded, headers, uploader);\n\n const removeFile = useCallback(\n (fileName: string) => {\n hookRemoveFile(fileName);\n rawFilesRef.current.delete(fileName);\n if (!autoSend && onChange) {\n onChange(Array.from(rawFilesRef.current.values()));\n }\n },\n [hookRemoveFile, autoSend, onChange],\n );\n\n const handleDrop = useCallback(\n async (acceptedFiles: File[]) => {\n const currentCount = Object.keys(files).length;\n const max = maxFiles ?? Number.POSITIVE_INFINITY;\n const remainingSlots = max - currentCount;\n if (remainingSlots <= 0) {\n return;\n }\n const filesToProcess = acceptedFiles.slice(0, remainingSlots);\n if (autoSend) {\n await uploadMultipleFiles(filesToProcess, data);\n } else {\n for (const file of filesToProcess) {\n addFile(file);\n rawFilesRef.current.set(file.name, file);\n }\n onChange?.(Array.from(rawFilesRef.current.values()));\n }\n },\n [autoSend, uploadMultipleFiles, addFile, data, files, maxFiles, onChange],\n );\n\n const isFull =\n maxFiles !== undefined && Object.keys(files).length >= maxFiles;\n\n return (\n <div\n className={cx(\n classNames?.dropzoneBase ?? dropzoneBase(),\n classNames?.root ?? dropzoneBaseRoot(),\n )}\n data-direction={direction}\n >\n {(!hideWhenFull || !isFull) && (\n <MantineDropzone\n ref={dropzoneRef}\n onDrop={handleDrop}\n disabled={isFull}\n loading={isUploading}\n accept={accept}\n maxSize={maxSize}\n preventDropOnDocument\n inputProps={{ id: inputId }}\n classNames={{\n root: classNames?.input?.root ?? cx(dropzoneBaseInput(), 'group'),\n inner: classNames?.input?.inner ?? dropzoneBaseInputInner(),\n }}\n >\n <div className={classNames?.iconSlot ?? dropzoneBaseIconSlot()}>\n {isUploading ? (\n <LoaderOval\n classNames={{\n loader: classNames?.loader?.loader ?? dropzoneBaseLoader(),\n root: classNames?.loader?.root ?? dropzoneBaseLoaderRoot(),\n }}\n />\n ) : (\n <>\n <MantineDropzone.Idle>\n <Icon\n name='mage-dropzone-upload-01'\n path='/icons/sprite-mage.svg'\n classNames={{\n icon:\n classNames?.dropzoneIcon?.icon ?? dropzoneBaseIcon(),\n }}\n />\n </MantineDropzone.Idle>\n <MantineDropzone.Accept>\n <Icon\n name='mage-dropzone-thumbs-up'\n path='/icons/sprite-mage.svg'\n classNames={{\n icon:\n classNames?.dropzoneIcon?.icon ?? dropzoneBaseIcon(),\n }}\n />\n </MantineDropzone.Accept>\n <MantineDropzone.Reject>\n <Icon\n name='mage-dropzone-thumbs-down'\n path='/icons/sprite-mage.svg'\n classNames={{\n icon:\n classNames?.dropzoneIcon?.icon ?? dropzoneBaseIcon(),\n }}\n />\n </MantineDropzone.Reject>\n </>\n )}\n </div>\n <div className={classNames?.textSlot ?? dropzoneBaseTextSlot()}>\n <span className={classNames?.title ?? dropzoneBaseTitle()}>\n {title || 'Upload files'}\n </span>\n <span className={classNames?.subtitle ?? dropzoneBaseSubtitle()}>\n {subtitle || 'Drag images here or click to select files'}\n </span>\n <span className={classNames?.hint ?? dropzoneBaseHint()}>\n {hint ||\n 'Attach as many files as you like, each file should not exceed 5mb'}\n </span>\n </div>\n </MantineDropzone>\n )}\n {children({ files, isUploading, removeFile })}\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DropzoneBase.mjs","names":["MantineDropzone"],"sources":["../../../../src/components/controls/dropzone/DropzoneBase.tsx"],"sourcesContent":["import { type ReactNode, useCallback, useRef } from 'react';\n\nimport { cx } from '@mage-ui/styled-system/css';\nimport {\n dropzoneBase,\n dropzoneBaseHint,\n dropzoneBaseIcon,\n dropzoneBaseIconSlot,\n dropzoneBaseInput,\n dropzoneBaseInputInner,\n dropzoneBaseLoader,\n dropzoneBaseLoaderRoot,\n dropzoneBaseRoot,\n dropzoneBaseSubtitle,\n dropzoneBaseTextSlot,\n dropzoneBaseTitle,\n} from '@mage-ui/styled-system/recipes';\nimport { Dropzone as MantineDropzone } from '@mantine/dropzone';\nimport {\n Icon,\n type IconProps,\n LoaderOval,\n type LoaderOvalProps,\n} from '@/components/data-display';\n\nimport type {\n Uploader,\n UploadProgress,\n UploadResponse,\n} from './upload-service';\nimport { useDropzoneState } from './use-dropzone-state';\n\nexport type { Uploader, UploadProgress, UploadResponse };\n\nexport type FileData = {\n name: string;\n size: number;\n type: string;\n date: string;\n uploaded: boolean;\n loading: boolean;\n url: string;\n token?: string;\n error?: string;\n progress?: number; // (0-100)\n};\n\nexport type DropzoneBaseProps = {\n children: ({\n files,\n isUploading,\n removeFile,\n }: {\n files: Record<string, FileData>;\n isUploading: boolean;\n removeFile: (fileName: string) => void;\n }) => ReactNode;\n initialFiles?: Record<string, FileData>;\n maxFiles?: number;\n /**\n * Endpoint used by the built-in FormData uploader. Required when\n * `autoSend=true` (default) AND no custom `uploader` is provided.\n * Ignored if `uploader` is provided.\n */\n url?: string;\n /**\n * Custom upload function that replaces the built-in FormData POST.\n * Use it for multi-step flows (e.g. presigned S3) or any non-standard\n * transport. When set, the `url` prop is ignored.\n */\n uploader?: Uploader;\n /** When false, files are added to state but not uploaded automatically. Default: true. */\n autoSend?: boolean;\n /** Maximum file size in bytes. Files exceeding this will be rejected. */\n maxSize?: number;\n /** Called when the file list changes (added or removed). Useful when autoSend=false. */\n onChange?: (files: File[]) => void;\n data?: Record<string, unknown>;\n headers?: Record<string, string>;\n /**\n * Files the dropzone accepts. Forwarded directly to Mantine's\n * `<Dropzone accept>`.\n *\n * Two formats are supported:\n * - **Map (preferred)**: `{ [mimeType]: ['.ext', ...] }` — matches\n * the native `react-dropzone` shape and produces a correct\n * `<input accept>` with MIME + extension pairs. Required when any\n * key would otherwise be a bare extension string.\n * - **Array**: `string[]` of MIME types (no `.ext` entries) — kept\n * for backward compatibility. Mixing `.ext` strings into the\n * array triggers a `Skipped \"...\" because it is not a valid MIME\n * type` warning from `react-dropzone` v15+.\n */\n accept?: string[] | Record<string, string[]>;\n title?: ReactNode;\n subtitle?: ReactNode;\n hint?: ReactNode;\n inputId?: string;\n onFileUploaded?: (file: FileData) => void;\n hideWhenFull?: boolean;\n classNames?: {\n dropzoneBase?: string;\n root?: string;\n input?: {\n root?: string;\n inner?: string;\n };\n iconSlot?: string;\n dropzoneIcon?: IconProps['classNames'];\n loader?: LoaderOvalProps['classNames'];\n textSlot?: string;\n title?: string;\n subtitle?: string;\n hint?: string;\n };\n direction?: 'default' | 'reverse';\n};\n\nexport const DropzoneBase = ({\n data,\n headers,\n children,\n initialFiles = {},\n maxFiles,\n url,\n uploader,\n autoSend = true,\n maxSize,\n onChange,\n accept,\n title,\n subtitle,\n hint,\n inputId,\n onFileUploaded,\n classNames,\n direction = 'default',\n hideWhenFull = false,\n}: DropzoneBaseProps) => {\n const dropzoneRef = useRef<HTMLDivElement>(null);\n const rawFilesRef = useRef<Map<string, File>>(new Map());\n const {\n files,\n isUploading,\n uploadMultipleFiles,\n addFile,\n removeFile: hookRemoveFile,\n } = useDropzoneState(url, initialFiles, onFileUploaded, headers, uploader);\n\n const removeFile = useCallback(\n (fileName: string) => {\n hookRemoveFile(fileName);\n rawFilesRef.current.delete(fileName);\n if (!autoSend && onChange) {\n onChange(Array.from(rawFilesRef.current.values()));\n }\n },\n [hookRemoveFile, autoSend, onChange],\n );\n\n const handleDrop = useCallback(\n async (acceptedFiles: File[]) => {\n const currentCount = Object.keys(files).length;\n const max = maxFiles ?? Number.POSITIVE_INFINITY;\n const remainingSlots = max - currentCount;\n if (remainingSlots <= 0) {\n return;\n }\n const filesToProcess = acceptedFiles.slice(0, remainingSlots);\n if (autoSend) {\n await uploadMultipleFiles(filesToProcess, data);\n } else {\n for (const file of filesToProcess) {\n addFile(file);\n rawFilesRef.current.set(file.name, file);\n }\n onChange?.(Array.from(rawFilesRef.current.values()));\n }\n },\n [autoSend, uploadMultipleFiles, addFile, data, files, maxFiles, onChange],\n );\n\n const isFull =\n maxFiles !== undefined && Object.keys(files).length >= maxFiles;\n\n return (\n <div\n className={cx(\n classNames?.dropzoneBase ?? dropzoneBase(),\n classNames?.root ?? dropzoneBaseRoot(),\n )}\n data-direction={direction}\n >\n {(!hideWhenFull || !isFull) && (\n <MantineDropzone\n ref={dropzoneRef}\n onDrop={handleDrop}\n disabled={isFull}\n loading={isUploading}\n accept={accept}\n maxSize={maxSize}\n preventDropOnDocument\n inputProps={{ id: inputId }}\n classNames={{\n root: classNames?.input?.root ?? cx(dropzoneBaseInput(), 'group'),\n inner: classNames?.input?.inner ?? dropzoneBaseInputInner(),\n }}\n >\n <div className={classNames?.iconSlot ?? dropzoneBaseIconSlot()}>\n {isUploading ? (\n <LoaderOval\n classNames={{\n loader: classNames?.loader?.loader ?? dropzoneBaseLoader(),\n root: classNames?.loader?.root ?? dropzoneBaseLoaderRoot(),\n }}\n />\n ) : (\n <>\n <MantineDropzone.Idle>\n <Icon\n name='mage-dropzone-upload-01'\n path='/icons/sprite-mage.svg'\n classNames={{\n icon:\n classNames?.dropzoneIcon?.icon ?? dropzoneBaseIcon(),\n }}\n />\n </MantineDropzone.Idle>\n <MantineDropzone.Accept>\n <Icon\n name='mage-dropzone-thumbs-up'\n path='/icons/sprite-mage.svg'\n classNames={{\n icon:\n classNames?.dropzoneIcon?.icon ?? dropzoneBaseIcon(),\n }}\n />\n </MantineDropzone.Accept>\n <MantineDropzone.Reject>\n <Icon\n name='mage-dropzone-thumbs-down'\n path='/icons/sprite-mage.svg'\n classNames={{\n icon:\n classNames?.dropzoneIcon?.icon ?? dropzoneBaseIcon(),\n }}\n />\n </MantineDropzone.Reject>\n </>\n )}\n </div>\n <div className={classNames?.textSlot ?? dropzoneBaseTextSlot()}>\n <span className={classNames?.title ?? dropzoneBaseTitle()}>\n {title || 'Upload files'}\n </span>\n <span className={classNames?.subtitle ?? dropzoneBaseSubtitle()}>\n {subtitle || 'Drag images here or click to select files'}\n </span>\n <span className={classNames?.hint ?? dropzoneBaseHint()}>\n {hint ||\n 'Attach as many files as you like, each file should not exceed 5mb'}\n </span>\n </div>\n </MantineDropzone>\n )}\n {children({ files, isUploading, removeFile })}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{buildAcceptMap as e,defaultGetErrorMessage as t,useS3Upload as n}from"./use-s3-upload.mjs";import{Dropzone as r}from"./Dropzone.mjs";import{jsx as i}from"react/jsx-runtime";const a=({texts:a,acceptedTypes:o,accept:s,initUrl:c,buildInitBody:l,register:u,getHeaders:d,getErrorMessage:f=t,resolveUploadedUrl:p,...m})=>{let h=s??e(o),{upload:g}=n({initUrl:c,buildInitBody:l,register:u,getHeaders:d,getErrorMessage:f,resolveUploadedUrl:p,acceptedTypes:o,texts:a}),_=async(e,{onProgress:t})=>({body:{url:await g(e,n=>t?.({loaded:0,total:e.size,percentage:n}))}});return i(r,{...m,title:a?.title,subtitle:a?.subtitle,hint:a?.hint,accept:h,uploader:_})};export{a as DropzoneS3};
1
+ import{buildAcceptMap as e,defaultGetErrorMessage as t,useS3Upload as n}from"./use-s3-upload.mjs";import{Dropzone as r}from"./Dropzone.mjs";import{jsx as i}from"react/jsx-runtime";const a=({texts:a,acceptedTypes:o,accept:s,initUrl:c,buildInitBody:l,register:u,getHeaders:d,getErrorMessage:f=t,resolveUploadedUrl:p,...m})=>{let h=s??e(o),{upload:g}=n({initUrl:c,buildInitBody:l,register:u,getHeaders:d,getErrorMessage:f,resolveUploadedUrl:p,acceptedTypes:o,texts:a}),_=async(e,{onProgress:t})=>{let{url:n,token:r}=await g(e,n=>t?.({loaded:0,total:e.size,percentage:n}));return{body:{url:n,token:r}}};return i(r,{...m,title:a?.title,subtitle:a?.subtitle,hint:a?.hint,accept:h,uploader:_})};export{a as DropzoneS3};
2
2
  //# sourceMappingURL=DropzoneS3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneS3.mjs","names":[],"sources":["../../../../src/components/controls/dropzone/DropzoneS3.tsx"],"sourcesContent":["import { Dropzone, type DropzoneProps } from './Dropzone';\nimport type { Uploader } from './upload-service';\nimport {\n buildAcceptMap,\n type DropzoneS3Texts,\n defaultGetErrorMessage,\n getFileExtension,\n type S3FileMeta,\n type S3InitBody,\n type S3InitResponse,\n type S3UploadConfig,\n useS3Upload,\n} from './use-s3-upload';\n\nexport type { DropzoneS3Texts, S3FileMeta, S3InitBody, S3InitResponse };\nexport { getFileExtension };\n\nexport type DropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> = Omit<\n DropzoneProps,\n 'uploader' | 'url' | 'accept' | 'title' | 'subtitle' | 'hint'\n> &\n S3UploadConfig<TInitBody> & {\n /**\n * Explicit accept list forwarded to the underlying Mantine dropzone.\n * Takes precedence over `acceptedTypes`. Prefer the map shape\n * `{ [mimeType]: ['.ext', ...] }` — passing a `.ext` entry inside a\n * plain `string[]` triggers a \"Skipped … not a valid MIME type\"\n * warning in react-dropzone v15+.\n */\n accept?: string[] | Record<string, string[]>;\n };\n\nexport const DropzoneS3 = <TInitBody extends S3InitBody = S3InitBody>({\n texts,\n acceptedTypes,\n accept,\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage = defaultGetErrorMessage,\n resolveUploadedUrl,\n ...dropzoneProps\n}: DropzoneS3Props<TInitBody>) => {\n const acceptList = accept ?? buildAcceptMap(acceptedTypes);\n const { upload } = useS3Upload<TInitBody>({\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage,\n resolveUploadedUrl,\n acceptedTypes,\n texts,\n });\n\n const uploader: Uploader = async (file, { onProgress }) => {\n const url = await upload(file, (p) =>\n onProgress?.({ loaded: 0, total: file.size, percentage: p }),\n );\n return { body: { url } };\n };\n\n return (\n <Dropzone\n {...dropzoneProps}\n title={texts?.title}\n subtitle={texts?.subtitle}\n hint={texts?.hint}\n accept={acceptList}\n uploader={uploader}\n />\n );\n};\n"],"mappings":"oLAgCA,MAAa,GAAyD,CACpE,QACA,gBACA,SACA,UACA,gBACA,WACA,aACA,kBAAkB,EAClB,qBACA,GAAG,KAC6B,CAChC,IAAM,EAAa,GAAU,EAAe,EAAc,CACpD,CAAE,UAAW,EAAuB,CACxC,UACA,gBACA,WACA,aACA,kBACA,qBACA,gBACA,QACD,CAAC,CAEI,EAAqB,MAAO,EAAM,CAAE,iBAIjC,CAAE,KAAM,CAAE,IAHL,MAAM,EAAO,EAAO,GAC9B,IAAa,CAAE,OAAQ,EAAG,MAAO,EAAK,KAAM,WAAY,EAAG,CAAC,CAC7D,CACqB,CAAE,EAG1B,OACE,EAAC,EAAD,CACE,GAAI,EACJ,MAAO,GAAO,MACd,SAAU,GAAO,SACjB,KAAM,GAAO,KACb,OAAQ,EACE,WACV,CAAA"}
1
+ {"version":3,"file":"DropzoneS3.mjs","names":[],"sources":["../../../../src/components/controls/dropzone/DropzoneS3.tsx"],"sourcesContent":["import { Dropzone, type DropzoneProps } from './Dropzone';\nimport type { Uploader } from './upload-service';\nimport {\n buildAcceptMap,\n type DropzoneS3Texts,\n defaultGetErrorMessage,\n getFileExtension,\n type S3FileMeta,\n type S3InitBody,\n type S3InitResponse,\n type S3UploadConfig,\n useS3Upload,\n} from './use-s3-upload';\n\nexport type { DropzoneS3Texts, S3FileMeta, S3InitBody, S3InitResponse };\nexport { getFileExtension };\n\nexport type DropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> = Omit<\n DropzoneProps,\n 'uploader' | 'url' | 'accept' | 'title' | 'subtitle' | 'hint'\n> &\n S3UploadConfig<TInitBody> & {\n /**\n * Explicit accept list forwarded to the underlying Mantine dropzone.\n * Takes precedence over `acceptedTypes`. Prefer the map shape\n * `{ [mimeType]: ['.ext', ...] }` — passing a `.ext` entry inside a\n * plain `string[]` triggers a \"Skipped … not a valid MIME type\"\n * warning in react-dropzone v15+.\n */\n accept?: string[] | Record<string, string[]>;\n };\n\nexport const DropzoneS3 = <TInitBody extends S3InitBody = S3InitBody>({\n texts,\n acceptedTypes,\n accept,\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage = defaultGetErrorMessage,\n resolveUploadedUrl,\n ...dropzoneProps\n}: DropzoneS3Props<TInitBody>) => {\n const acceptList = accept ?? buildAcceptMap(acceptedTypes);\n const { upload } = useS3Upload<TInitBody>({\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage,\n resolveUploadedUrl,\n acceptedTypes,\n texts,\n });\n\n const uploader: Uploader = async (file, { onProgress }) => {\n const { url, token } = await upload(file, (p) =>\n onProgress?.({ loaded: 0, total: file.size, percentage: p }),\n );\n return { body: { url, token } };\n };\n\n return (\n <Dropzone\n {...dropzoneProps}\n title={texts?.title}\n subtitle={texts?.subtitle}\n hint={texts?.hint}\n accept={acceptList}\n uploader={uploader}\n />\n );\n};\n"],"mappings":"oLAgCA,MAAa,GAAyD,CACpE,QACA,gBACA,SACA,UACA,gBACA,WACA,aACA,kBAAkB,EAClB,qBACA,GAAG,KAC6B,CAChC,IAAM,EAAa,GAAU,EAAe,EAAc,CACpD,CAAE,UAAW,EAAuB,CACxC,UACA,gBACA,WACA,aACA,kBACA,qBACA,gBACA,QACD,CAAC,CAEI,EAAqB,MAAO,EAAM,CAAE,gBAAiB,CACzD,GAAM,CAAE,MAAK,SAAU,MAAM,EAAO,EAAO,GACzC,IAAa,CAAE,OAAQ,EAAG,MAAO,EAAK,KAAM,WAAY,EAAG,CAAC,CAC7D,CACD,MAAO,CAAE,KAAM,CAAE,MAAK,QAAO,CAAE,EAGjC,OACE,EAAC,EAAD,CACE,GAAI,EACJ,MAAO,GAAO,MACd,SAAU,GAAO,SACjB,KAAM,GAAO,KACb,OAAQ,EACE,WACV,CAAA"}
@@ -1,2 +1,2 @@
1
- import{AvatarDropzoneBase as e}from"./AvatarDropzoneBase.mjs";import{useS3Upload as t}from"../use-s3-upload.mjs";import{jsx as n}from"react/jsx-runtime";import{useCallback as r,useState as i}from"react";const a=({value:a,onChange:o,onError:s,maxSize:c,disabled:l=!1,classNames:u,initUrl:d,buildInitBody:f,register:p,getHeaders:m,getErrorMessage:h,resolveUploadedUrl:g,acceptedTypes:_,texts:v})=>{let[y,b]=i(a??null),{upload:x,isUploading:S}=t({initUrl:d,buildInitBody:f,register:p,getHeaders:m,getErrorMessage:h,resolveUploadedUrl:g,acceptedTypes:_,texts:v});return n(e,{onDrop:r(async e=>{let t=e[0];if(t){b(URL.createObjectURL(t));try{let e=await x(t);o?.(e)}catch(e){b(a??null),s?.(e.message)}}},[x,o,s,a]),value:y,maxSize:c,disabled:l,isUploading:S,classNames:u})};export{a as AvatarDropzoneS3};
1
+ import{AvatarDropzoneBase as e}from"./AvatarDropzoneBase.mjs";import{useS3Upload as t}from"../use-s3-upload.mjs";import{jsx as n}from"react/jsx-runtime";import{useCallback as r,useState as i}from"react";const a=({value:a,onChange:o,onError:s,maxSize:c,disabled:l=!1,classNames:u,initUrl:d,buildInitBody:f,register:p,getHeaders:m,getErrorMessage:h,resolveUploadedUrl:g,acceptedTypes:_,texts:v})=>{let[y,b]=i(a??null),{upload:x,isUploading:S}=t({initUrl:d,buildInitBody:f,register:p,getHeaders:m,getErrorMessage:h,resolveUploadedUrl:g,acceptedTypes:_,texts:v});return n(e,{onDrop:r(async e=>{let t=e[0];if(t){b(URL.createObjectURL(t));try{let{url:e}=await x(t);o?.(e)}catch(e){b(a??null),s?.(e.message)}}},[x,o,s,a]),value:y,maxSize:c,disabled:l,isUploading:S,classNames:u})};export{a as AvatarDropzoneS3};
2
2
  //# sourceMappingURL=AvatarDropzoneS3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarDropzoneS3.mjs","names":[],"sources":["../../../../../src/components/controls/dropzone/avatar/AvatarDropzoneS3.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nimport type { IconProps, LoaderOvalProps } from '@/components/data-display';\n\nimport {\n type S3InitBody,\n type S3UploadConfig,\n useS3Upload,\n} from '../use-s3-upload';\nimport {\n AvatarDropzoneBase,\n type AvatarDropzoneClassNames,\n} from './AvatarDropzoneBase';\n\nexport type AvatarDropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> =\n S3UploadConfig<TInitBody> & {\n value?: string;\n onChange?: (url: string) => void;\n onError?: (message: string) => void;\n maxSize?: number;\n disabled?: boolean;\n classNames?: AvatarDropzoneClassNames & {\n icon?: IconProps['classNames'];\n loader?: LoaderOvalProps['classNames'];\n };\n };\n\nexport const AvatarDropzoneS3 = <TInitBody extends S3InitBody = S3InitBody>({\n value,\n onChange,\n onError,\n maxSize,\n disabled = false,\n classNames,\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage,\n resolveUploadedUrl,\n acceptedTypes,\n texts,\n}: AvatarDropzoneS3Props<TInitBody>) => {\n const [preview, setPreview] = useState<string | null>(value ?? null);\n const { upload, isUploading } = useS3Upload<TInitBody>({\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage,\n resolveUploadedUrl,\n acceptedTypes,\n texts,\n });\n\n const handleDrop = useCallback(\n async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n setPreview(URL.createObjectURL(file));\n try {\n const url = await upload(file);\n onChange?.(url);\n } catch (err) {\n setPreview(value ?? null);\n onError?.((err as Error).message);\n }\n },\n [upload, onChange, onError, value],\n );\n\n return (\n <AvatarDropzoneBase\n onDrop={handleDrop}\n value={preview}\n maxSize={maxSize}\n disabled={disabled}\n isUploading={isUploading}\n classNames={classNames}\n />\n );\n};\n"],"mappings":"2MA2BA,MAAa,GAA+D,CAC1E,QACA,WACA,UACA,UACA,WAAW,GACX,aACA,UACA,gBACA,WACA,aACA,kBACA,qBACA,gBACA,WACsC,CACtC,GAAM,CAAC,EAAS,GAAc,EAAwB,GAAS,KAAK,CAC9D,CAAE,SAAQ,eAAgB,EAAuB,CACrD,UACA,gBACA,WACA,aACA,kBACA,qBACA,gBACA,QACD,CAAC,CAkBF,OACE,EAAC,EAAD,CACE,OAlBe,EACjB,KAAO,IAAkB,CACvB,IAAM,EAAO,EAAM,GACd,KACL,GAAW,IAAI,gBAAgB,EAAK,CAAC,CACrC,GAAI,CACF,IAAM,EAAM,MAAM,EAAO,EAAK,CAC9B,IAAW,EAAI,OACR,EAAK,CACZ,EAAW,GAAS,KAAK,CACzB,IAAW,EAAc,QAAQ,IAGrC,CAAC,EAAQ,EAAU,EAAS,EAAM,CACnC,CAKG,MAAO,EACE,UACC,WACG,cACD,aACZ,CAAA"}
1
+ {"version":3,"file":"AvatarDropzoneS3.mjs","names":[],"sources":["../../../../../src/components/controls/dropzone/avatar/AvatarDropzoneS3.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nimport type { IconProps, LoaderOvalProps } from '@/components/data-display';\n\nimport {\n type S3InitBody,\n type S3UploadConfig,\n useS3Upload,\n} from '../use-s3-upload';\nimport {\n AvatarDropzoneBase,\n type AvatarDropzoneClassNames,\n} from './AvatarDropzoneBase';\n\nexport type AvatarDropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> =\n S3UploadConfig<TInitBody> & {\n value?: string;\n onChange?: (url: string) => void;\n onError?: (message: string) => void;\n maxSize?: number;\n disabled?: boolean;\n classNames?: AvatarDropzoneClassNames & {\n icon?: IconProps['classNames'];\n loader?: LoaderOvalProps['classNames'];\n };\n };\n\nexport const AvatarDropzoneS3 = <TInitBody extends S3InitBody = S3InitBody>({\n value,\n onChange,\n onError,\n maxSize,\n disabled = false,\n classNames,\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage,\n resolveUploadedUrl,\n acceptedTypes,\n texts,\n}: AvatarDropzoneS3Props<TInitBody>) => {\n const [preview, setPreview] = useState<string | null>(value ?? null);\n const { upload, isUploading } = useS3Upload<TInitBody>({\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage,\n resolveUploadedUrl,\n acceptedTypes,\n texts,\n });\n\n const handleDrop = useCallback(\n async (files: File[]) => {\n const file = files[0];\n if (!file) return;\n setPreview(URL.createObjectURL(file));\n try {\n const { url } = await upload(file);\n onChange?.(url);\n } catch (err) {\n setPreview(value ?? null);\n onError?.((err as Error).message);\n }\n },\n [upload, onChange, onError, value],\n );\n\n return (\n <AvatarDropzoneBase\n onDrop={handleDrop}\n value={preview}\n maxSize={maxSize}\n disabled={disabled}\n isUploading={isUploading}\n classNames={classNames}\n />\n );\n};\n"],"mappings":"2MA2BA,MAAa,GAA+D,CAC1E,QACA,WACA,UACA,UACA,WAAW,GACX,aACA,UACA,gBACA,WACA,aACA,kBACA,qBACA,gBACA,WACsC,CACtC,GAAM,CAAC,EAAS,GAAc,EAAwB,GAAS,KAAK,CAC9D,CAAE,SAAQ,eAAgB,EAAuB,CACrD,UACA,gBACA,WACA,aACA,kBACA,qBACA,gBACA,QACD,CAAC,CAkBF,OACE,EAAC,EAAD,CACE,OAlBe,EACjB,KAAO,IAAkB,CACvB,IAAM,EAAO,EAAM,GACd,KACL,GAAW,IAAI,gBAAgB,EAAK,CAAC,CACrC,GAAI,CACF,GAAM,CAAE,OAAQ,MAAM,EAAO,EAAK,CAClC,IAAW,EAAI,OACR,EAAK,CACZ,EAAW,GAAS,KAAK,CACzB,IAAW,EAAc,QAAQ,IAGrC,CAAC,EAAQ,EAAU,EAAS,EAAM,CACnC,CAKG,MAAO,EACE,UACC,WACG,cACD,aACZ,CAAA"}
@@ -2,6 +2,7 @@
2
2
  type UploadResponse = {
3
3
  body: {
4
4
  url: string;
5
+ token?: string;
5
6
  };
6
7
  };
7
8
  type UploadProgress = {
@@ -1 +1 @@
1
- {"version":3,"file":"upload-service.d.mts","names":[],"sources":["../../../../src/components/controls/dropzone/upload-service.ts"],"mappings":";KAAY,cAAA;EACV,IAAA;IACE,GAAA;EAAA;AAAA;AAAA,KAIQ,cAAA;EACV,MAAA;EACA,KAAA;EACA,UAAA;AAAA;;;;;;AAWF;;;KAAY,QAAA,IACV,IAAA,EAAM,IAAA,EACN,OAAA;EACE,IAAA,GAAO,MAAA;EACP,UAAA,IAAc,QAAA,EAAU,cAAA;EACxB,OAAA,GAAU,MAAA;AAAA,MAET,OAAA,CAAQ,cAAA"}
1
+ {"version":3,"file":"upload-service.d.mts","names":[],"sources":["../../../../src/components/controls/dropzone/upload-service.ts"],"mappings":";KAAY,cAAA;EACV,IAAA;IACE,GAAA;IACA,KAAA;EAAA;AAAA;AAAA,KAIQ,cAAA;EACV,MAAA;EACA,KAAA;EACA,UAAA;AAAA;;;;;;;;;KAWU,QAAA,IACV,IAAA,EAAM,IAAA,EACN,OAAA;EACE,IAAA,GAAO,MAAA;EACP,UAAA,IAAc,QAAA,EAAU,cAAA;EACxB,OAAA,GAAU,MAAA;AAAA,MAET,OAAA,CAAQ,cAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"upload-service.mjs","names":[],"sources":["../../../../src/components/controls/dropzone/upload-service.ts"],"sourcesContent":["export type UploadResponse = {\n body: {\n url: string;\n };\n};\n\nexport type UploadProgress = {\n loaded: number;\n total: number;\n percentage: number;\n};\n\n/**\n * Custom upload function that replaces the built-in FormData POST.\n * Useful for multi-step flows (e.g. presigned S3 uploads with separate\n * init/register endpoints) or any non-standard transport.\n *\n * The function must resolve with an `UploadResponse` once the file is\n * fully persisted, or reject with an `Error` describing the failure.\n */\nexport type Uploader = (\n file: File,\n options: {\n data?: Record<string, unknown>;\n onProgress?: (progress: UploadProgress) => void;\n headers?: Record<string, string>;\n },\n) => Promise<UploadResponse>;\n\nexport const uploadFile = async (\n url: string,\n file: File,\n data?: Record<string, unknown>,\n onProgress?: (progress: UploadProgress) => void,\n headers?: Record<string, string>,\n): Promise<UploadResponse> => {\n const formData = new FormData();\n formData.append('file', file);\n if (data) {\n Object.entries(data).forEach(([key, value]) => {\n formData.append(key, value as string);\n });\n }\n const xhr = new XMLHttpRequest();\n\n return new Promise((resolve, reject) => {\n // Prevenir múltiples solicitudes simultáneas\n if (xhr.readyState !== 0) {\n reject(new Error('Ya hay una solicitud en progreso'));\n return;\n }\n\n xhr.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable && onProgress) {\n const progress: UploadProgress = {\n loaded: event.loaded,\n total: event.total,\n percentage: Math.round((event.loaded / event.total) * 100),\n };\n onProgress(progress);\n }\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const response = JSON.parse(xhr.responseText);\n resolve(response);\n } catch (_) {\n reject(new Error('Error al parsear la respuesta'));\n }\n } else {\n try {\n const errorData = JSON.parse(xhr.responseText);\n reject(new Error(errorData.error || 'Error al subir el archivo'));\n } catch {\n reject(new Error(`Error ${xhr.status}: ${xhr.statusText}`));\n }\n }\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Error de red al subir el archivo'));\n });\n\n xhr.addEventListener('abort', () => {\n reject(new Error('Subida cancelada'));\n });\n\n // Configurar timeout para evitar solicitudes colgadas\n xhr.timeout = 30000; // 30 segundos\n xhr.addEventListener('timeout', () => {\n reject(new Error('Tiempo de espera agotado'));\n });\n\n try {\n xhr.open('POST', url);\n if (headers) {\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n }\n xhr.send(formData);\n } catch (_) {\n reject(new Error('Error al iniciar la solicitud'));\n }\n });\n};\n"],"mappings":"AA6BA,MAAa,EAAa,MACxB,EACA,EACA,EACA,EACA,IAC4B,CAC5B,IAAM,EAAW,IAAI,SACrB,EAAS,OAAO,OAAQ,EAAK,CACzB,GACF,OAAO,QAAQ,EAAK,CAAC,SAAS,CAAC,EAAK,KAAW,CAC7C,EAAS,OAAO,EAAK,EAAgB,EACrC,CAEJ,IAAM,EAAM,IAAI,eAEhB,OAAO,IAAI,SAAS,EAAS,IAAW,CAEtC,GAAI,EAAI,aAAe,EAAG,CACxB,EAAW,MAAM,mCAAmC,CAAC,CACrD,OAGF,EAAI,OAAO,iBAAiB,WAAa,GAAU,CAC7C,EAAM,kBAAoB,GAM5B,EALiC,CAC/B,OAAQ,EAAM,OACd,MAAO,EAAM,MACb,WAAY,KAAK,MAAO,EAAM,OAAS,EAAM,MAAS,IAAI,CAC3D,CACmB,EAEtB,CAEF,EAAI,iBAAiB,WAAc,CACjC,GAAI,EAAI,QAAU,KAAO,EAAI,OAAS,IACpC,GAAI,CAEF,EADiB,KAAK,MAAM,EAAI,aAAa,CAC5B,MACP,CACV,EAAW,MAAM,gCAAgC,CAAC,MAGpD,GAAI,CACF,IAAM,EAAY,KAAK,MAAM,EAAI,aAAa,CAC9C,EAAW,MAAM,EAAU,OAAS,4BAA4B,CAAC,MAC3D,CACN,EAAW,MAAM,SAAS,EAAI,OAAO,IAAI,EAAI,aAAa,CAAC,GAG/D,CAEF,EAAI,iBAAiB,YAAe,CAClC,EAAW,MAAM,mCAAmC,CAAC,EACrD,CAEF,EAAI,iBAAiB,YAAe,CAClC,EAAW,MAAM,mBAAmB,CAAC,EACrC,CAGF,EAAI,QAAU,IACd,EAAI,iBAAiB,cAAiB,CACpC,EAAW,MAAM,2BAA2B,CAAC,EAC7C,CAEF,GAAI,CACF,EAAI,KAAK,OAAQ,EAAI,CACjB,GACF,OAAO,QAAQ,EAAQ,CAAC,SAAS,CAAC,EAAK,KAAW,CAChD,EAAI,iBAAiB,EAAK,EAAM,EAChC,CAEJ,EAAI,KAAK,EAAS,MACR,CACV,EAAW,MAAM,gCAAgC,CAAC,GAEpD"}
1
+ {"version":3,"file":"upload-service.mjs","names":[],"sources":["../../../../src/components/controls/dropzone/upload-service.ts"],"sourcesContent":["export type UploadResponse = {\n body: {\n url: string;\n token?: string;\n };\n};\n\nexport type UploadProgress = {\n loaded: number;\n total: number;\n percentage: number;\n};\n\n/**\n * Custom upload function that replaces the built-in FormData POST.\n * Useful for multi-step flows (e.g. presigned S3 uploads with separate\n * init/register endpoints) or any non-standard transport.\n *\n * The function must resolve with an `UploadResponse` once the file is\n * fully persisted, or reject with an `Error` describing the failure.\n */\nexport type Uploader = (\n file: File,\n options: {\n data?: Record<string, unknown>;\n onProgress?: (progress: UploadProgress) => void;\n headers?: Record<string, string>;\n },\n) => Promise<UploadResponse>;\n\nexport const uploadFile = async (\n url: string,\n file: File,\n data?: Record<string, unknown>,\n onProgress?: (progress: UploadProgress) => void,\n headers?: Record<string, string>,\n): Promise<UploadResponse> => {\n const formData = new FormData();\n formData.append('file', file);\n if (data) {\n Object.entries(data).forEach(([key, value]) => {\n formData.append(key, value as string);\n });\n }\n const xhr = new XMLHttpRequest();\n\n return new Promise((resolve, reject) => {\n // Prevenir múltiples solicitudes simultáneas\n if (xhr.readyState !== 0) {\n reject(new Error('Ya hay una solicitud en progreso'));\n return;\n }\n\n xhr.upload.addEventListener('progress', (event) => {\n if (event.lengthComputable && onProgress) {\n const progress: UploadProgress = {\n loaded: event.loaded,\n total: event.total,\n percentage: Math.round((event.loaded / event.total) * 100),\n };\n onProgress(progress);\n }\n });\n\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n const response = JSON.parse(xhr.responseText);\n resolve(response);\n } catch (_) {\n reject(new Error('Error al parsear la respuesta'));\n }\n } else {\n try {\n const errorData = JSON.parse(xhr.responseText);\n reject(new Error(errorData.error || 'Error al subir el archivo'));\n } catch {\n reject(new Error(`Error ${xhr.status}: ${xhr.statusText}`));\n }\n }\n });\n\n xhr.addEventListener('error', () => {\n reject(new Error('Error de red al subir el archivo'));\n });\n\n xhr.addEventListener('abort', () => {\n reject(new Error('Subida cancelada'));\n });\n\n // Configurar timeout para evitar solicitudes colgadas\n xhr.timeout = 30000; // 30 segundos\n xhr.addEventListener('timeout', () => {\n reject(new Error('Tiempo de espera agotado'));\n });\n\n try {\n xhr.open('POST', url);\n if (headers) {\n Object.entries(headers).forEach(([key, value]) => {\n xhr.setRequestHeader(key, value);\n });\n }\n xhr.send(formData);\n } catch (_) {\n reject(new Error('Error al iniciar la solicitud'));\n }\n });\n};\n"],"mappings":"AA8BA,MAAa,EAAa,MACxB,EACA,EACA,EACA,EACA,IAC4B,CAC5B,IAAM,EAAW,IAAI,SACrB,EAAS,OAAO,OAAQ,EAAK,CACzB,GACF,OAAO,QAAQ,EAAK,CAAC,SAAS,CAAC,EAAK,KAAW,CAC7C,EAAS,OAAO,EAAK,EAAgB,EACrC,CAEJ,IAAM,EAAM,IAAI,eAEhB,OAAO,IAAI,SAAS,EAAS,IAAW,CAEtC,GAAI,EAAI,aAAe,EAAG,CACxB,EAAW,MAAM,mCAAmC,CAAC,CACrD,OAGF,EAAI,OAAO,iBAAiB,WAAa,GAAU,CAC7C,EAAM,kBAAoB,GAM5B,EALiC,CAC/B,OAAQ,EAAM,OACd,MAAO,EAAM,MACb,WAAY,KAAK,MAAO,EAAM,OAAS,EAAM,MAAS,IAAI,CAC3D,CACmB,EAEtB,CAEF,EAAI,iBAAiB,WAAc,CACjC,GAAI,EAAI,QAAU,KAAO,EAAI,OAAS,IACpC,GAAI,CAEF,EADiB,KAAK,MAAM,EAAI,aAAa,CAC5B,MACP,CACV,EAAW,MAAM,gCAAgC,CAAC,MAGpD,GAAI,CACF,IAAM,EAAY,KAAK,MAAM,EAAI,aAAa,CAC9C,EAAW,MAAM,EAAU,OAAS,4BAA4B,CAAC,MAC3D,CACN,EAAW,MAAM,SAAS,EAAI,OAAO,IAAI,EAAI,aAAa,CAAC,GAG/D,CAEF,EAAI,iBAAiB,YAAe,CAClC,EAAW,MAAM,mCAAmC,CAAC,EACrD,CAEF,EAAI,iBAAiB,YAAe,CAClC,EAAW,MAAM,mBAAmB,CAAC,EACrC,CAGF,EAAI,QAAU,IACd,EAAI,iBAAiB,cAAiB,CACpC,EAAW,MAAM,2BAA2B,CAAC,EAC7C,CAEF,GAAI,CACF,EAAI,KAAK,OAAQ,EAAI,CACjB,GACF,OAAO,QAAQ,EAAQ,CAAC,SAAS,CAAC,EAAK,KAAW,CAChD,EAAI,iBAAiB,EAAK,EAAM,EAChC,CAEJ,EAAI,KAAK,EAAS,MACR,CACV,EAAW,MAAM,gCAAgC,CAAC,GAEpD"}
@@ -1,2 +1,2 @@
1
- import{uploadFile as e}from"./upload-service.mjs";import{useCallback as t,useRef as n,useState as r}from"react";const i=(i,a={},o,s,c)=>{let[l,u]=r((()=>{if(!a)return{};if(typeof a==`object`&&!(`name`in a))return a;if(typeof a==`object`&&`name`in a){let e=a;return{[e.name]:{name:e.name,size:e.size,type:e.type,date:e.date,uploaded:e.uploaded??!0,loading:e.loading??!1,url:e.url,error:e.error,progress:e.progress}}}return{}})()),[d,f]=r(!1),p=n(new Set),m=t((e,t)=>{let n={name:e.name,size:e.size,type:e.type,url:``,uploaded:!1,loading:!1,progress:0,date:t??new Date().toLocaleString(`es-ES`,{timeZone:`Europe/Madrid`,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})};return u(t=>({...t,[e.name]:n})),e.name},[]),h=t((e,t)=>{u(n=>({...n,[e]:{...n[e],progress:t,loading:t<100}}))},[]),g=t((e,t)=>{u(n=>({...n,[e]:{...n[e],uploaded:!0,loading:!1,progress:100,url:t}}))},[]),_=t((e,t)=>{u(n=>({...n,[e]:{...n[e],uploaded:!1,loading:!1,progress:0,error:t}}))},[]),v=t(e=>{u(t=>{let n={...t};return delete n[e],n}),p.current.delete(e)},[]),y=t(()=>{u({}),p.current.clear()},[]),b=t(e=>p.current.has(e),[]),x=t(e=>{p.current.add(e)},[]),S=t(e=>{p.current.delete(e)},[]),C=t(async(t,n)=>{let r=new Date().toLocaleString(`es-ES`,{timeZone:`Europe/Madrid`,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),a=m(t,r);x(a);try{let l=e=>{h(a,e.percentage)},{body:u}=c?await c(t,{data:n,onProgress:l,headers:s}):await e(i??``,t,n,l,s);g(a,u.url),o?.({name:t.name,size:t.size,type:t.type,date:r,uploaded:!0,loading:!1,progress:100,url:u.url})}catch(e){console.error(`Error al subir archivo:`,e),_(a,e instanceof Error?e.message:`Error desconocido`)}finally{S(a)}},[m,x,h,g,_,S,o,i,s,c]);return{files:l,isUploading:d,setIsUploading:f,addFile:m,updateFileProgress:h,markFileAsUploaded:g,markFileAsError:_,removeFile:v,clearFiles:y,isFileUploading:b,addToUploadQueue:x,removeFromUploadQueue:S,uploadFileToServer:C,uploadMultipleFiles:t(async(e,t)=>{if(d){console.warn(`Ya hay una subida en progreso`);return}f(!0);try{for(let n of e)await C(n,t)}finally{f(!1)}},[d,f,C])}};export{i as useDropzoneState};
1
+ import{uploadFile as e}from"./upload-service.mjs";import{useCallback as t,useRef as n,useState as r}from"react";const i=(i,a={},o,s,c)=>{let[l,u]=r((()=>{if(!a)return{};if(typeof a==`object`&&!(`name`in a))return a;if(typeof a==`object`&&`name`in a){let e=a;return{[e.name]:{name:e.name,size:e.size,type:e.type,date:e.date,uploaded:e.uploaded??!0,loading:e.loading??!1,url:e.url,error:e.error,progress:e.progress}}}return{}})()),[d,f]=r(!1),p=n(new Set),m=t((e,t)=>{let n={name:e.name,size:e.size,type:e.type,url:``,uploaded:!1,loading:!1,progress:0,date:t??new Date().toLocaleString(`es-ES`,{timeZone:`Europe/Madrid`,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`})};return u(t=>({...t,[e.name]:n})),e.name},[]),h=t((e,t)=>{u(n=>({...n,[e]:{...n[e],progress:t,loading:t<100}}))},[]),g=t((e,t,n)=>{u(r=>({...r,[e]:{...r[e],uploaded:!0,loading:!1,progress:100,url:t,...n===void 0?{}:{token:n}}}))},[]),_=t((e,t)=>{u(n=>({...n,[e]:{...n[e],uploaded:!1,loading:!1,progress:0,error:t}}))},[]),v=t(e=>{u(t=>{let n={...t};return delete n[e],n}),p.current.delete(e)},[]),y=t(()=>{u({}),p.current.clear()},[]),b=t(e=>p.current.has(e),[]),x=t(e=>{p.current.add(e)},[]),S=t(e=>{p.current.delete(e)},[]),C=t(async(t,n)=>{let r=new Date().toLocaleString(`es-ES`,{timeZone:`Europe/Madrid`,year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),a=m(t,r);x(a);try{let l=e=>{h(a,e.percentage)},{body:u}=c?await c(t,{data:n,onProgress:l,headers:s}):await e(i??``,t,n,l,s);g(a,u.url,u.token),o?.({name:t.name,size:t.size,type:t.type,date:r,uploaded:!0,loading:!1,progress:100,url:u.url,token:u.token})}catch(e){console.error(`Error al subir archivo:`,e),_(a,e instanceof Error?e.message:`Error desconocido`)}finally{S(a)}},[m,x,h,g,_,S,o,i,s,c]);return{files:l,isUploading:d,setIsUploading:f,addFile:m,updateFileProgress:h,markFileAsUploaded:g,markFileAsError:_,removeFile:v,clearFiles:y,isFileUploading:b,addToUploadQueue:x,removeFromUploadQueue:S,uploadFileToServer:C,uploadMultipleFiles:t(async(e,t)=>{if(d){console.warn(`Ya hay una subida en progreso`);return}f(!0);try{for(let n of e)await C(n,t)}finally{f(!1)}},[d,f,C])}};export{i as useDropzoneState};
2
2
  //# sourceMappingURL=use-dropzone-state.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-dropzone-state.mjs","names":[],"sources":["../../../../src/components/controls/dropzone/use-dropzone-state.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport type { FileData } from './DropzoneBase';\nimport {\n type Uploader,\n type UploadProgress,\n uploadFile,\n} from './upload-service';\n\nexport const useDropzoneState = (\n url: string | undefined,\n initialFiles: Record<string, FileData> | FileData | null | undefined = {},\n onFileUploaded?: (file: FileData) => void,\n headers?: Record<string, string>,\n uploader?: Uploader,\n) => {\n const normalizeInitialFiles = (): Record<string, FileData> => {\n if (!initialFiles) return {};\n\n if (typeof initialFiles === 'object' && !('name' in initialFiles)) {\n return initialFiles;\n }\n\n if (typeof initialFiles === 'object' && 'name' in initialFiles) {\n const fileData = initialFiles as FileData;\n return {\n [fileData.name]: {\n name: fileData.name,\n size: fileData.size,\n type: fileData.type,\n date: fileData.date,\n uploaded: fileData.uploaded ?? true,\n loading: fileData.loading ?? false,\n url: fileData.url,\n error: fileData.error,\n progress: fileData.progress,\n },\n };\n }\n\n return {};\n };\n\n const [files, setFiles] = useState<Record<string, FileData>>(\n normalizeInitialFiles(),\n );\n const [isUploading, setIsUploading] = useState(false);\n const uploadQueue = useRef<Set<string>>(new Set());\n\n const addFile = useCallback((file: File, date?: string) => {\n const fileData: FileData = {\n name: file.name,\n size: file.size,\n type: file.type,\n url: '',\n uploaded: false,\n loading: false,\n progress: 0,\n date:\n date ??\n new Date().toLocaleString('es-ES', {\n timeZone: 'Europe/Madrid',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }),\n };\n\n setFiles((prev) => ({\n ...prev,\n [file.name]: fileData,\n }));\n\n return file.name;\n }, []);\n\n const updateFileProgress = useCallback(\n (fileName: string, progress: number) => {\n setFiles((prev) => ({\n ...prev,\n [fileName]: {\n ...prev[fileName],\n progress,\n loading: progress < 100,\n },\n }));\n },\n [],\n );\n\n const markFileAsUploaded = useCallback((fileName: string, url: string) => {\n setFiles((prev) => ({\n ...prev,\n [fileName]: {\n ...prev[fileName],\n uploaded: true,\n loading: false,\n progress: 100,\n url,\n },\n }));\n }, []);\n\n const markFileAsError = useCallback((fileName: string, error: string) => {\n setFiles((prev) => ({\n ...prev,\n [fileName]: {\n ...prev[fileName],\n uploaded: false,\n loading: false,\n progress: 0,\n error,\n },\n }));\n }, []);\n\n const removeFile = useCallback((fileName: string) => {\n setFiles((prev) => {\n const newFiles = { ...prev };\n delete newFiles[fileName];\n return newFiles;\n });\n uploadQueue.current.delete(fileName);\n }, []);\n\n const clearFiles = useCallback(() => {\n setFiles({});\n uploadQueue.current.clear();\n }, []);\n\n const isFileUploading = useCallback((fileName: string) => {\n return uploadQueue.current.has(fileName);\n }, []);\n\n const addToUploadQueue = useCallback((fileName: string) => {\n uploadQueue.current.add(fileName);\n }, []);\n\n const removeFromUploadQueue = useCallback((fileName: string) => {\n uploadQueue.current.delete(fileName);\n }, []);\n\n const uploadFileToServer = useCallback(\n async (file: File, data?: Record<string, unknown>) => {\n const date = new Date().toLocaleString('es-ES', {\n timeZone: 'Europe/Madrid',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n const fileName = addFile(file, date);\n addToUploadQueue(fileName);\n\n try {\n const onProgress = (progress: UploadProgress) => {\n updateFileProgress(fileName, progress.percentage);\n };\n const { body } = uploader\n ? await uploader(file, { data, onProgress, headers })\n : await uploadFile(url ?? '', file, data, onProgress, headers);\n\n markFileAsUploaded(fileName, body.url);\n onFileUploaded?.({\n name: file.name,\n size: file.size,\n type: file.type,\n date,\n uploaded: true,\n loading: false,\n progress: 100,\n url: body.url,\n });\n } catch (error) {\n console.error('Error al subir archivo:', error);\n markFileAsError(\n fileName,\n error instanceof Error ? error.message : 'Error desconocido',\n );\n } finally {\n removeFromUploadQueue(fileName);\n }\n },\n [\n addFile,\n addToUploadQueue,\n updateFileProgress,\n markFileAsUploaded,\n markFileAsError,\n removeFromUploadQueue,\n onFileUploaded,\n url,\n headers,\n uploader,\n ],\n );\n\n const uploadMultipleFiles = useCallback(\n async (acceptedFiles: File[], data?: Record<string, unknown>) => {\n if (isUploading) {\n console.warn('Ya hay una subida en progreso');\n return;\n }\n\n setIsUploading(true);\n\n try {\n for (const file of acceptedFiles) {\n await uploadFileToServer(file, data);\n }\n } finally {\n setIsUploading(false);\n }\n },\n [isUploading, setIsUploading, uploadFileToServer],\n );\n\n return {\n files,\n isUploading,\n setIsUploading,\n addFile,\n updateFileProgress,\n markFileAsUploaded,\n markFileAsError,\n removeFile,\n clearFiles,\n isFileUploading,\n addToUploadQueue,\n removeFromUploadQueue,\n uploadFileToServer,\n uploadMultipleFiles,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-dropzone-state.mjs","names":[],"sources":["../../../../src/components/controls/dropzone/use-dropzone-state.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport type { FileData } from './DropzoneBase';\nimport {\n type Uploader,\n type UploadProgress,\n uploadFile,\n} from './upload-service';\n\nexport const useDropzoneState = (\n url: string | undefined,\n initialFiles: Record<string, FileData> | FileData | null | undefined = {},\n onFileUploaded?: (file: FileData) => void,\n headers?: Record<string, string>,\n uploader?: Uploader,\n) => {\n const normalizeInitialFiles = (): Record<string, FileData> => {\n if (!initialFiles) return {};\n\n if (typeof initialFiles === 'object' && !('name' in initialFiles)) {\n return initialFiles;\n }\n\n if (typeof initialFiles === 'object' && 'name' in initialFiles) {\n const fileData = initialFiles as FileData;\n return {\n [fileData.name]: {\n name: fileData.name,\n size: fileData.size,\n type: fileData.type,\n date: fileData.date,\n uploaded: fileData.uploaded ?? true,\n loading: fileData.loading ?? false,\n url: fileData.url,\n error: fileData.error,\n progress: fileData.progress,\n },\n };\n }\n\n return {};\n };\n\n const [files, setFiles] = useState<Record<string, FileData>>(\n normalizeInitialFiles(),\n );\n const [isUploading, setIsUploading] = useState(false);\n const uploadQueue = useRef<Set<string>>(new Set());\n\n const addFile = useCallback((file: File, date?: string) => {\n const fileData: FileData = {\n name: file.name,\n size: file.size,\n type: file.type,\n url: '',\n uploaded: false,\n loading: false,\n progress: 0,\n date:\n date ??\n new Date().toLocaleString('es-ES', {\n timeZone: 'Europe/Madrid',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }),\n };\n\n setFiles((prev) => ({\n ...prev,\n [file.name]: fileData,\n }));\n\n return file.name;\n }, []);\n\n const updateFileProgress = useCallback(\n (fileName: string, progress: number) => {\n setFiles((prev) => ({\n ...prev,\n [fileName]: {\n ...prev[fileName],\n progress,\n loading: progress < 100,\n },\n }));\n },\n [],\n );\n\n const markFileAsUploaded = useCallback(\n (fileName: string, url: string, token?: string) => {\n setFiles((prev) => ({\n ...prev,\n [fileName]: {\n ...prev[fileName],\n uploaded: true,\n loading: false,\n progress: 100,\n url,\n ...(token !== undefined ? { token } : {}),\n },\n }));\n },\n [],\n );\n\n const markFileAsError = useCallback((fileName: string, error: string) => {\n setFiles((prev) => ({\n ...prev,\n [fileName]: {\n ...prev[fileName],\n uploaded: false,\n loading: false,\n progress: 0,\n error,\n },\n }));\n }, []);\n\n const removeFile = useCallback((fileName: string) => {\n setFiles((prev) => {\n const newFiles = { ...prev };\n delete newFiles[fileName];\n return newFiles;\n });\n uploadQueue.current.delete(fileName);\n }, []);\n\n const clearFiles = useCallback(() => {\n setFiles({});\n uploadQueue.current.clear();\n }, []);\n\n const isFileUploading = useCallback((fileName: string) => {\n return uploadQueue.current.has(fileName);\n }, []);\n\n const addToUploadQueue = useCallback((fileName: string) => {\n uploadQueue.current.add(fileName);\n }, []);\n\n const removeFromUploadQueue = useCallback((fileName: string) => {\n uploadQueue.current.delete(fileName);\n }, []);\n\n const uploadFileToServer = useCallback(\n async (file: File, data?: Record<string, unknown>) => {\n const date = new Date().toLocaleString('es-ES', {\n timeZone: 'Europe/Madrid',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n const fileName = addFile(file, date);\n addToUploadQueue(fileName);\n\n try {\n const onProgress = (progress: UploadProgress) => {\n updateFileProgress(fileName, progress.percentage);\n };\n const { body } = uploader\n ? await uploader(file, { data, onProgress, headers })\n : await uploadFile(url ?? '', file, data, onProgress, headers);\n\n markFileAsUploaded(fileName, body.url, body.token);\n onFileUploaded?.({\n name: file.name,\n size: file.size,\n type: file.type,\n date,\n uploaded: true,\n loading: false,\n progress: 100,\n url: body.url,\n token: body.token,\n });\n } catch (error) {\n console.error('Error al subir archivo:', error);\n markFileAsError(\n fileName,\n error instanceof Error ? error.message : 'Error desconocido',\n );\n } finally {\n removeFromUploadQueue(fileName);\n }\n },\n [\n addFile,\n addToUploadQueue,\n updateFileProgress,\n markFileAsUploaded,\n markFileAsError,\n removeFromUploadQueue,\n onFileUploaded,\n url,\n headers,\n uploader,\n ],\n );\n\n const uploadMultipleFiles = useCallback(\n async (acceptedFiles: File[], data?: Record<string, unknown>) => {\n if (isUploading) {\n console.warn('Ya hay una subida en progreso');\n return;\n }\n\n setIsUploading(true);\n\n try {\n for (const file of acceptedFiles) {\n await uploadFileToServer(file, data);\n }\n } finally {\n setIsUploading(false);\n }\n },\n [isUploading, setIsUploading, uploadFileToServer],\n );\n\n return {\n files,\n isUploading,\n setIsUploading,\n addFile,\n updateFileProgress,\n markFileAsUploaded,\n markFileAsError,\n removeFile,\n clearFiles,\n isFileUploading,\n addToUploadQueue,\n removeFromUploadQueue,\n uploadFileToServer,\n uploadMultipleFiles,\n };\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{useState as e}from"react";const t={initFailed:e=>`Failed to request upload URL (${e})`,registerFailed:e=>`Failed to register file (${e})`,uploadFailed:(e,t)=>`Upload failed (${e} ${t})`,networkError:`Network error during direct upload`,uploadAborted:`Upload aborted`,uploadTimedOut:`Upload timed out`},n=(e,t,n,r,i)=>new Promise((a,o)=>{let s=new XMLHttpRequest;s.upload.addEventListener(`progress`,e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener(`load`,()=>{s.status>=200&&s.status<300?a():o(Error(i.uploadFailed(s.status,s.statusText)))}),s.addEventListener(`error`,()=>o(Error(i.networkError))),s.addEventListener(`abort`,()=>o(Error(i.uploadAborted))),s.addEventListener(`timeout`,()=>o(Error(i.uploadTimedOut))),s.open(`PUT`,e);for(let[e,n]of Object.entries(t)){let t=e.toLowerCase();if(!(t===`host`||t===`content-length`))try{s.setRequestHeader(e,n)}catch{}}s.send(n)}),r=e=>{let t={};if(!e)return t;for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?r.join(`,`):String(r);return t},i=e=>{let t=e.lastIndexOf(`.`);return t>=0?e.slice(t+1).toLowerCase():``},a=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=`.${n}`,i=t[r];i?i.includes(e)||i.push(e):t[r]=[e]}return t},o=(e,t)=>{let n=i(e.name);if(!t)return{mimeType:e.type,extension:n};let r=Object.values(t);return e.type&&r.includes(e.type)?{mimeType:e.type,extension:n}:{mimeType:t[n]??e.type,extension:n}},s=async(e,t)=>{try{let n=await e.clone().json();if(n.errors){let e=Object.values(n.errors)[0];if(e&&e.length>0)return e[0]}return n.body?.message??n.body?.text??n.message??t}catch{return t}},c=({initUrl:i,buildInitBody:a,register:c,getHeaders:l,getErrorMessage:u=s,resolveUploadedUrl:d,acceptedTypes:f,texts:p})=>{let[m,h]=e(!1);return{upload:async(e,s)=>{let m={...t,...p};h(!0);try{let t=()=>({"Content-Type":`application/json`,Accept:`application/json`,...l?.()??{}}),p=o(e,f),h=await fetch(i,{method:`POST`,headers:t(),body:JSON.stringify(a(e,p))});if(!h.ok)throw Error(await u(h,m.initFailed(h.status)));let g=await h.json(),{url:_,headers:v}=g.body;if(await n(_,r(v),e,e=>s?.(e),m),c){let n=await fetch(c.url,{method:`POST`,headers:t(),body:JSON.stringify(c.buildBody(e,g.body,p))});if(!n.ok)throw Error(await u(n,m.registerFailed(n.status)))}return d?.(g.body,e)??(typeof g.body.key==`string`?g.body.key:_.split(`?`)[0])}finally{h(!1)}},isUploading:m}};export{a as buildAcceptMap,s as defaultGetErrorMessage,i as getFileExtension,o as resolveMeta,c as useS3Upload};
1
+ import{useState as e}from"react";const t={initFailed:e=>`Failed to request upload URL (${e})`,registerFailed:e=>`Failed to register file (${e})`,uploadFailed:(e,t)=>`Upload failed (${e} ${t})`,networkError:`Network error during direct upload`,uploadAborted:`Upload aborted`,uploadTimedOut:`Upload timed out`},n=(e,t,n,r,i)=>new Promise((a,o)=>{let s=new XMLHttpRequest;s.upload.addEventListener(`progress`,e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener(`load`,()=>{s.status>=200&&s.status<300?a():o(Error(i.uploadFailed(s.status,s.statusText)))}),s.addEventListener(`error`,()=>o(Error(i.networkError))),s.addEventListener(`abort`,()=>o(Error(i.uploadAborted))),s.addEventListener(`timeout`,()=>o(Error(i.uploadTimedOut))),s.open(`PUT`,e);for(let[e,n]of Object.entries(t)){let t=e.toLowerCase();if(!(t===`host`||t===`content-length`))try{s.setRequestHeader(e,n)}catch{}}s.send(n)}),r=e=>{let t={};if(!e)return t;for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?r.join(`,`):String(r);return t},i=e=>{let t=e.lastIndexOf(`.`);return t>=0?e.slice(t+1).toLowerCase():``},a=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=`.${n}`,i=t[r];i?i.includes(e)||i.push(e):t[r]=[e]}return t},o=(e,t)=>{let n=i(e.name);if(!t)return{mimeType:e.type,extension:n};let r=Object.values(t);return e.type&&r.includes(e.type)?{mimeType:e.type,extension:n}:{mimeType:t[n]??e.type,extension:n}},s=async(e,t)=>{try{let n=await e.clone().json();if(n.errors){let e=Object.values(n.errors)[0];if(e&&e.length>0)return e[0]}return n.body?.message??n.body?.text??n.message??t}catch{return t}},c=({initUrl:i,buildInitBody:a,register:c,getHeaders:l,getErrorMessage:u=s,resolveUploadedUrl:d,acceptedTypes:f,texts:p})=>{let[m,h]=e(!1);return{upload:async(e,s)=>{let m={...t,...p};h(!0);try{let t=()=>({"Content-Type":`application/json`,Accept:`application/json`,...l?.()??{}}),p=o(e,f),h=await fetch(i,{method:`POST`,headers:t(),body:JSON.stringify(a(e,p))});if(!h.ok)throw Error(await u(h,m.initFailed(h.status)));let g=await h.json(),{url:_,headers:v}=g.body;await n(_,r(v),e,e=>s?.(e),m);let y;if(c){let n=await fetch(c.url,{method:`POST`,headers:t(),body:JSON.stringify(c.buildBody(e,g.body,p))});if(!n.ok)throw Error(await u(n,m.registerFailed(n.status)));y=(await n.json())?.token}return{url:d?.(g.body,e)??(typeof g.body.key==`string`?g.body.key:_.split(`?`)[0]),token:y}}finally{h(!1)}},isUploading:m}};export{a as buildAcceptMap,s as defaultGetErrorMessage,i as getFileExtension,o as resolveMeta,c as useS3Upload};
2
2
  //# sourceMappingURL=use-s3-upload.mjs.map