@solace-health/ui 0.10.688 → 0.10.689

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 (183) hide show
  1. package/dist/BackLink/BackLink.cjs +1 -1
  2. package/dist/BackLink/BackLink.js +1 -1
  3. package/dist/Card/illustrations/Clock.cjs +1 -1
  4. package/dist/Card/illustrations/Clock.js +1 -1
  5. package/dist/Card/illustrations/Coffee.cjs +1 -1
  6. package/dist/Card/illustrations/Coffee.js +1 -1
  7. package/dist/Card/illustrations/Laptop.cjs +1 -1
  8. package/dist/Card/illustrations/Laptop.js +1 -1
  9. package/dist/Card/illustrations/Medication.cjs +1 -1
  10. package/dist/Card/illustrations/Medication.js +1 -1
  11. package/dist/Card/illustrations/Notepad.cjs +1 -1
  12. package/dist/Card/illustrations/Notepad.js +1 -1
  13. package/dist/Card/illustrations/index.cjs +1 -1
  14. package/dist/Card/illustrations/index.js +1 -1
  15. package/dist/Card/index.cjs +1 -1
  16. package/dist/Card/index.js +1 -1
  17. package/dist/DateDropdown/index.cjs +1 -1
  18. package/dist/DateDropdown/index.js +1 -1
  19. package/dist/DateSelectCalendar/DateSelectCalendar.cjs +1 -1
  20. package/dist/DateSelectCalendar/DateSelectCalendar.js +1 -1
  21. package/dist/Error/index.cjs +1 -1
  22. package/dist/Error/index.js +1 -1
  23. package/dist/ExpandableDrawer/index.cjs +1 -1
  24. package/dist/ExpandableDrawer/index.js +1 -1
  25. package/dist/File/index.cjs +1 -1
  26. package/dist/File/index.js +1 -1
  27. package/dist/Form/AddressSelect/index.cjs +1 -1
  28. package/dist/Form/AddressSelect/index.js +1 -1
  29. package/dist/Form/Checkbox/index.cjs +1 -1
  30. package/dist/Form/Checkbox/index.js +1 -1
  31. package/dist/Form/DateDropdown/index.cjs +1 -1
  32. package/dist/Form/DateDropdown/index.js +1 -1
  33. package/dist/Form/DateSelect/index.cjs +1 -1
  34. package/dist/Form/DateSelect/index.js +1 -1
  35. package/dist/Form/DateTextMaskInput/index.cjs +1 -1
  36. package/dist/Form/DateTextMaskInput/index.js +1 -1
  37. package/dist/Form/FileUpload/index.cjs +1 -1
  38. package/dist/Form/FileUpload/index.js +1 -1
  39. package/dist/Form/Keyword/index.cjs +1 -1
  40. package/dist/Form/Keyword/index.js +1 -1
  41. package/dist/Form/LocationSelect/index.cjs +1 -1
  42. package/dist/Form/LocationSelect/index.js +1 -1
  43. package/dist/Form/Number/index.cjs +1 -1
  44. package/dist/Form/Number/index.js +1 -1
  45. package/dist/Form/OTP/index.cjs +1 -1
  46. package/dist/Form/OTP/index.js +1 -1
  47. package/dist/Form/Radio/index.cjs +1 -1
  48. package/dist/Form/Radio/index.js +1 -1
  49. package/dist/Form/Select/index.cjs +1 -1
  50. package/dist/Form/Select/index.js +1 -1
  51. package/dist/Form/SelectMenu/index.cjs +1 -1
  52. package/dist/Form/SelectMenu/index.js +1 -1
  53. package/dist/Form/SentimentSelector/index.cjs +1 -1
  54. package/dist/Form/SentimentSelector/index.js +1 -1
  55. package/dist/Form/Signature/index.cjs +1 -1
  56. package/dist/Form/Signature/index.js +1 -1
  57. package/dist/Form/Text/index.cjs +1 -1
  58. package/dist/Form/Text/index.js +1 -1
  59. package/dist/Form/TextInput/index.cjs +1 -1
  60. package/dist/Form/TextInput/index.js +1 -1
  61. package/dist/Form/TimePicker/index.cjs +1 -1
  62. package/dist/Form/TimePicker/index.js +1 -1
  63. package/dist/Form/TimeSelect/index.cjs +1 -1
  64. package/dist/Form/TimeSelect/index.js +1 -1
  65. package/dist/Form/index.cjs +1 -1
  66. package/dist/Form/index.js +1 -1
  67. package/dist/Form/shared/FormInputLabel.cjs +1 -1
  68. package/dist/Form/shared/FormInputLabel.js +1 -1
  69. package/dist/Form/shared/HelpModal.cjs +1 -1
  70. package/dist/Form/shared/HelpModal.js +1 -1
  71. package/dist/IconSelector/IconSelector.cjs +1 -1
  72. package/dist/IconSelector/IconSelector.js +1 -1
  73. package/dist/Menu/ExpandIcon.cjs +1 -1
  74. package/dist/Menu/ExpandIcon.js +1 -1
  75. package/dist/Menu/index.cjs +1 -1
  76. package/dist/Menu/index.js +1 -1
  77. package/dist/Molecules/FilterPopover/FiltersMenu/FiltersMenu.cjs +1 -1
  78. package/dist/Molecules/FilterPopover/FiltersMenu/FiltersMenu.js +1 -1
  79. package/dist/Molecules/FilterPopover/index.cjs +1 -1
  80. package/dist/Molecules/FilterPopover/index.js +1 -1
  81. package/dist/NavigationMenu/ExpandIcon.cjs +1 -1
  82. package/dist/NavigationMenu/ExpandIcon.js +1 -1
  83. package/dist/NavigationMenu/index.cjs +1 -1
  84. package/dist/NavigationMenu/index.js +1 -1
  85. package/dist/PreviewDrawer/PreviewDrawer.cjs +1 -1
  86. package/dist/PreviewDrawer/PreviewDrawer.js +1 -1
  87. package/dist/Search/index.cjs +1 -1
  88. package/dist/Search/index.js +1 -1
  89. package/dist/SelectClient/index.cjs +1 -1
  90. package/dist/SelectClient/index.js +1 -1
  91. package/dist/SentimentSelector/index.cjs +1 -1
  92. package/dist/SentimentSelector/index.js +1 -1
  93. package/dist/SortableList/index.cjs +1 -1
  94. package/dist/SortableList/index.js +1 -1
  95. package/dist/TimeSelect/styles.cjs +4 -4
  96. package/dist/TimeSelect/styles.js +1 -1
  97. package/dist/{chunk-HLHHTNKY.js → chunk-7OKSLNLM.js} +3 -3
  98. package/dist/{chunk-HLHHTNKY.js.map → chunk-7OKSLNLM.js.map} +1 -1
  99. package/dist/{chunk-IPOD5S7I.js → chunk-E2CBSOU7.js} +3 -3
  100. package/dist/{chunk-IPOD5S7I.js.map → chunk-E2CBSOU7.js.map} +1 -1
  101. package/dist/{chunk-LVCOLESY.cjs → chunk-FTPAMVPB.cjs} +2 -2
  102. package/dist/{chunk-LVCOLESY.cjs.map → chunk-FTPAMVPB.cjs.map} +1 -1
  103. package/dist/{chunk-IBQWP337.cjs → chunk-G4NTJXGK.cjs} +2 -2
  104. package/dist/{chunk-IBQWP337.cjs.map → chunk-G4NTJXGK.cjs.map} +1 -1
  105. package/dist/{chunk-2KZYFEKJ.cjs → chunk-HCMJMPCZ.cjs} +3 -3
  106. package/dist/{chunk-2KZYFEKJ.cjs.map → chunk-HCMJMPCZ.cjs.map} +1 -1
  107. package/dist/{chunk-ZGR3AQC3.js → chunk-JLEVRYCV.js} +2 -2
  108. package/dist/{chunk-ZGR3AQC3.js.map → chunk-JLEVRYCV.js.map} +1 -1
  109. package/dist/{chunk-KPBWHCJ2.js → chunk-JTOJMLMA.js} +2 -2
  110. package/dist/{chunk-KPBWHCJ2.js.map → chunk-JTOJMLMA.js.map} +1 -1
  111. package/dist/{chunk-UAVPAKRR.cjs → chunk-LXRAIIGD.cjs} +4 -4
  112. package/dist/{chunk-UAVPAKRR.cjs.map → chunk-LXRAIIGD.cjs.map} +1 -1
  113. package/dist/{chunk-NQNIXM6Z.cjs → chunk-N7VC2Y6D.cjs} +2 -2
  114. package/dist/{chunk-NQNIXM6Z.cjs.map → chunk-N7VC2Y6D.cjs.map} +1 -1
  115. package/dist/{chunk-AJB6MKQH.cjs → chunk-NN627YY4.cjs} +2 -2
  116. package/dist/{chunk-AJB6MKQH.cjs.map → chunk-NN627YY4.cjs.map} +1 -1
  117. package/dist/{chunk-KJULJRWW.cjs → chunk-P4TOP5DA.cjs} +2 -2
  118. package/dist/{chunk-KJULJRWW.cjs.map → chunk-P4TOP5DA.cjs.map} +1 -1
  119. package/dist/chunk-PQG2NCLD.js +2 -0
  120. package/dist/chunk-PQG2NCLD.js.map +1 -0
  121. package/dist/{chunk-MESFO57T.js → chunk-QA5JXTX4.js} +2 -2
  122. package/dist/{chunk-MESFO57T.js.map → chunk-QA5JXTX4.js.map} +1 -1
  123. package/dist/{chunk-W6OLZGJC.js → chunk-QN6ZLLO3.js} +2 -2
  124. package/dist/{chunk-W6OLZGJC.js.map → chunk-QN6ZLLO3.js.map} +1 -1
  125. package/dist/chunk-S5RP7WP6.cjs +2 -0
  126. package/dist/{chunk-235PPUQG.cjs.map → chunk-S5RP7WP6.cjs.map} +1 -1
  127. package/dist/chunk-TWOIGGMW.js +2 -0
  128. package/dist/chunk-TWOIGGMW.js.map +1 -0
  129. package/dist/{chunk-IVVUUCIG.cjs → chunk-TYLOUCWJ.cjs} +2 -2
  130. package/dist/{chunk-IVVUUCIG.cjs.map → chunk-TYLOUCWJ.cjs.map} +1 -1
  131. package/dist/{chunk-ZF7TZTE3.js → chunk-UZGCNEY6.js} +2 -2
  132. package/dist/{chunk-ZF7TZTE3.js.map → chunk-UZGCNEY6.js.map} +1 -1
  133. package/dist/{chunk-VRNWKIGB.js → chunk-VUICODT4.js} +2 -2
  134. package/dist/{chunk-VRNWKIGB.js.map → chunk-VUICODT4.js.map} +1 -1
  135. package/dist/chunk-W6M23VV3.cjs +2 -0
  136. package/dist/chunk-W6M23VV3.cjs.map +1 -0
  137. package/dist/chunk-WBCK7PUI.js +2 -0
  138. package/dist/{chunk-UOJ2V7M2.js.map → chunk-WBCK7PUI.js.map} +1 -1
  139. package/dist/{chunk-BFHEVJNW.cjs → chunk-WTGHWP7T.cjs} +2 -2
  140. package/dist/{chunk-BFHEVJNW.cjs.map → chunk-WTGHWP7T.cjs.map} +1 -1
  141. package/dist/{chunk-QFJFQRIG.js → chunk-XN7TZP35.js} +2 -2
  142. package/dist/{chunk-QFJFQRIG.js.map → chunk-XN7TZP35.js.map} +1 -1
  143. package/dist/chunk-YUQOWZET.cjs +2 -0
  144. package/dist/chunk-YUQOWZET.cjs.map +1 -0
  145. package/dist/{chunk-77YT6JM5.js → chunk-Z63TFEEM.js} +2 -2
  146. package/dist/{chunk-77YT6JM5.js.map → chunk-Z63TFEEM.js.map} +1 -1
  147. package/dist/{chunk-TKAISLRS.cjs → chunk-ZWRW73XY.cjs} +2 -2
  148. package/dist/{chunk-TKAISLRS.cjs.map → chunk-ZWRW73XY.cjs.map} +1 -1
  149. package/dist/index.cjs +1 -1
  150. package/dist/index.js +1 -1
  151. package/dist/metafile-cjs.json +1 -1
  152. package/dist/metafile-esm.json +1 -1
  153. package/dist/v2/criteria/criteria.cjs +2 -0
  154. package/dist/v2/criteria/criteria.cjs.map +1 -0
  155. package/dist/v2/criteria/criteria.d.ts +32 -0
  156. package/dist/v2/criteria/criteria.js +2 -0
  157. package/dist/v2/criteria/criteria.js.map +1 -0
  158. package/dist/v2/criteria/criteria.stories.d.ts +23 -0
  159. package/dist/v2/date-picker/date-picker-input.cjs +1 -1
  160. package/dist/v2/date-picker/date-picker-input.js +1 -1
  161. package/dist/v2/date-picker/date-picker.cjs +1 -1
  162. package/dist/v2/date-picker/date-picker.js +1 -1
  163. package/dist/v2/image-preview/image-preview.cjs +1 -1
  164. package/dist/v2/image-preview/image-preview.js +1 -1
  165. package/dist/v2/index.cjs +1 -1
  166. package/dist/v2/index.d.ts +2 -0
  167. package/dist/v2/index.js +1 -1
  168. package/dist/v2/multiselect/components/MultiSelectInput.cjs +1 -1
  169. package/dist/v2/multiselect/components/MultiSelectInput.js +1 -1
  170. package/dist/v2/multiselect/multiselect.cjs +1 -1
  171. package/dist/v2/multiselect/multiselect.js +1 -1
  172. package/dist/v2/sortable-list/sortable-list.cjs +2 -0
  173. package/dist/v2/sortable-list/sortable-list.cjs.map +1 -0
  174. package/dist/v2/sortable-list/sortable-list.d.ts +131 -0
  175. package/dist/v2/sortable-list/sortable-list.interactions.stories.d.ts +58 -0
  176. package/dist/v2/sortable-list/sortable-list.js +2 -0
  177. package/dist/v2/sortable-list/sortable-list.js.map +1 -0
  178. package/dist/v2/sortable-list/sortable-list.stories.d.ts +104 -0
  179. package/dist/v2/time-select/time-select.cjs +1 -1
  180. package/dist/v2/time-select/time-select.js +1 -1
  181. package/package.json +1 -1
  182. package/dist/chunk-235PPUQG.cjs +0 -2
  183. package/dist/chunk-UOJ2V7M2.js +0 -2
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkJ7T2Y2VK_cjs=require('./chunk-J7T2Y2VK.cjs'),chunkIOQHWC3B_cjs=require('./chunk-IOQHWC3B.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),cmdk=require('cmdk'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');var O=({classNames:s,selected:t,toggleOption:d,inputProps:r,inputRef:g,open:h,setOpen:a,scrollbarRef:R,placeholder:C,hidePlaceholderWhenSelected:n=true,disabled:i,badgeWrapperClassName:b,inputSearchValue:u,setInputSearchValue:c,badgeClassName:k,getBadgeClassName:v,persistInputOnBlur:y})=>{let S=h?lu.LuChevronUp:lu.LuChevronDown,N=chunkJ7T2Y2VK_cjs.a({selected:t,inputSearchValue:u});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{ref:N,className:chunkQRO22BPZ_cjs.a("relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",b,s?.badge?.wrapper),children:[t.map(e=>jsxRuntime.jsx(chunkIOQHWC3B_cjs.a,{badgeClassName:k,getBadgeClassName:v,classNames:s,option:e,toggleOption:d},e.value)),jsxRuntime.jsx(cmdk.Command.Input,{...r,ref:g,value:u,disabled:i,onValueChange:e=>{c(e),r?.onValueChange?.(e);},onBlur:e=>{R?.current||(y||c(""),a(false)),r?.onBlur?.(e);},onFocus:e=>{a(true),r?.onFocus?.(e);},placeholder:n&&t.length!==0?"":C,className:chunkQRO22BPZ_cjs.a("placeholder:text-secondary flex-[1_0_3ch] self-baseline bg-transparent outline-none",{"w-full":n,"ml-1":t.length!==0},r?.className)})]}),jsxRuntime.jsx(S,{className:chunkQRO22BPZ_cjs.a("size-5 min-w-5 cursor-pointer",i&&"text-gray-600")})]})};exports.a=O;//# sourceMappingURL=chunk-NQNIXM6Z.cjs.map
2
- //# sourceMappingURL=chunk-NQNIXM6Z.cjs.map
1
+ 'use strict';var chunkIOQHWC3B_cjs=require('./chunk-IOQHWC3B.cjs'),chunkJ7T2Y2VK_cjs=require('./chunk-J7T2Y2VK.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),cmdk=require('cmdk'),lu=require('react-icons/lu'),jsxRuntime=require('react/jsx-runtime');var O=({classNames:s,selected:t,toggleOption:d,inputProps:r,inputRef:g,open:h,setOpen:a,scrollbarRef:R,placeholder:C,hidePlaceholderWhenSelected:n=true,disabled:i,badgeWrapperClassName:b,inputSearchValue:u,setInputSearchValue:c,badgeClassName:k,getBadgeClassName:v,persistInputOnBlur:y})=>{let S=h?lu.LuChevronUp:lu.LuChevronDown,N=chunkJ7T2Y2VK_cjs.a({selected:t,inputSearchValue:u});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsxs("div",{ref:N,className:chunkQRO22BPZ_cjs.a("relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0",b,s?.badge?.wrapper),children:[t.map(e=>jsxRuntime.jsx(chunkIOQHWC3B_cjs.a,{badgeClassName:k,getBadgeClassName:v,classNames:s,option:e,toggleOption:d},e.value)),jsxRuntime.jsx(cmdk.Command.Input,{...r,ref:g,value:u,disabled:i,onValueChange:e=>{c(e),r?.onValueChange?.(e);},onBlur:e=>{R?.current||(y||c(""),a(false)),r?.onBlur?.(e);},onFocus:e=>{a(true),r?.onFocus?.(e);},placeholder:n&&t.length!==0?"":C,className:chunkQRO22BPZ_cjs.a("placeholder:text-secondary flex-[1_0_3ch] self-baseline bg-transparent outline-none",{"w-full":n,"ml-1":t.length!==0},r?.className)})]}),jsxRuntime.jsx(S,{className:chunkQRO22BPZ_cjs.a("size-5 min-w-5 cursor-pointer",i&&"text-gray-600")})]})};exports.a=O;//# sourceMappingURL=chunk-N7VC2Y6D.cjs.map
2
+ //# sourceMappingURL=chunk-N7VC2Y6D.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/v2/multiselect/components/MultiSelectInput.tsx"],"names":["MultiSelectInput","classNames","selected","toggleOption","inputProps","inputRef","open","setOpen","scrollbarRef","placeholder","hidePlaceholderWhenSelected","disabled","badgeWrapperClassName","inputSearchValue","setInputSearchValue","badgeClassName","getBadgeClassName","persistInputOnBlur","ChevronIcon","LuChevronUp","LuChevronDown","badgeContainerRef","useScrollSelected","jsxs","Fragment","cn","option","jsx","SelectedBadge","CommandPrimitive","value","event"],"mappings":"qQA8BaA,CAAAA,CAAmB,CAAC,CAC/B,UAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,aAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,2BAAA,CAAAC,CAAAA,CAA8B,KAC9B,QAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,oBAAAC,CAAAA,CACA,cAAA,CAAAC,EACA,iBAAA,CAAAC,CAAAA,CACA,mBAAAC,CACF,CAAA,GAAa,CACX,IAAMC,CAAAA,CAAcZ,EAAOa,cAAAA,CAAcC,gBAAAA,CAEnCC,EAAoBC,mBAAAA,CAAkB,CAAE,SAAApB,CAAAA,CAAU,gBAAA,CAAAW,CAAiB,CAAC,CAAA,CAE1E,OACEU,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,eAAAA,CAAC,OACC,GAAA,CAAKF,CAAAA,CACL,UAAWI,mBAAAA,CACT,8DAAA,CACAb,EACAX,CAAAA,EAAY,KAAA,EAAO,OACrB,CAAA,CAEC,QAAA,CAAA,CAAAC,EAAS,GAAA,CAAKwB,CAAAA,EAEXC,cAAAA,CAACC,mBAAAA,CAAA,CAEO,cAAA,CAAAb,EAAgB,iBAAA,CAAAC,CAAAA,CAAmB,WAAAf,CAAAA,CAAY,MAAA,CAAAyB,EAAQ,YAAA,CAAAvB,CAAAA,CAAAA,CADxDuB,EAAO,KAEd,CAEH,EACDC,cAAAA,CAACE,YAAAA,CAAiB,MAAjB,CACE,GAAGzB,EACJ,GAAA,CAAKC,CAAAA,CACL,MAAOQ,CAAAA,CACP,QAAA,CAAUF,EACV,aAAA,CAAgBmB,CAAAA,EAAU,CACxBhB,CAAAA,CAAoBgB,CAAK,EACzB1B,CAAAA,EAAY,aAAA,GAAgB0B,CAAK,EACnC,CAAA,CACA,OAASC,CAAAA,EAAU,CACZvB,GAAc,OAAA,GACZS,CAAAA,EACHH,EAAoB,EAAE,CAAA,CAExBP,CAAAA,CAAQ,KAAK,CAAA,CAAA,CAEfH,CAAAA,EAAY,SAAS2B,CAAK,EAC5B,EACA,OAAA,CAAUA,CAAAA,EAAU,CAClBxB,CAAAA,CAAQ,IAAI,EACZH,CAAAA,EAAY,OAAA,GAAU2B,CAAK,EAC7B,CAAA,CACA,YAAarB,CAAAA,EAA+BR,CAAAA,CAAS,SAAW,CAAA,CAAI,EAAA,CAAKO,CAAAA,CACzE,SAAA,CAAWgB,mBAAAA,CACT,qFAAA,CACA,CACE,QAAA,CAAUf,CAAAA,CACV,OAAQR,CAAAA,CAAS,MAAA,GAAW,CAC9B,CAAA,CACAE,CAAAA,EAAY,SACd,CAAA,CACF,CAAA,CAAA,CACF,EACAuB,cAAAA,CAACT,CAAAA,CAAA,CAAY,SAAA,CAAWO,mBAAAA,CAAG,gCAAiCd,CAAAA,EAAY,eAAe,CAAA,CAAG,CAAA,CAAA,CAC5F,CAEJ","file":"chunk-NQNIXM6Z.cjs","sourcesContent":["import { Command as CommandPrimitive } from 'cmdk';\nimport { LuChevronDown, LuChevronUp } from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\nimport { SelectedBadge } from './SelectedBadge';\nimport type { MultiSelectProps } from '../types';\nimport type { UseRefsReturn } from '../hooks/useRefs';\nimport type { UseMultiSelectReturn } from '../hooks/useMultiSelect';\nimport type { UseInteractionsReturn } from '../hooks/useInteractions';\nimport { useScrollSelected } from '../hooks/useScrollSelected';\n\ntype Props = Pick<\n MultiSelectProps,\n | 'badgeWrapperClassName'\n | 'badgeClassName'\n | 'getBadgeClassName'\n | 'disabled'\n | 'className'\n | 'classNames'\n | 'hidePlaceholderWhenSelected'\n | 'placeholder'\n | 'inputProps'\n | 'persistInputOnBlur'\n> &\n Pick<UseRefsReturn, 'inputRef' | 'scrollbarRef'> &\n Pick<\n UseMultiSelectReturn,\n 'selected' | 'open' | 'setOpen' | 'inputSearchValue' | 'setInputSearchValue'\n > &\n Pick<UseInteractionsReturn, 'toggleOption'>;\n\nexport const MultiSelectInput = ({\n classNames,\n selected,\n toggleOption,\n inputProps,\n inputRef,\n open,\n setOpen,\n scrollbarRef,\n placeholder,\n hidePlaceholderWhenSelected = true,\n disabled,\n badgeWrapperClassName,\n inputSearchValue,\n setInputSearchValue,\n badgeClassName,\n getBadgeClassName,\n persistInputOnBlur,\n}: Props) => {\n const ChevronIcon = open ? LuChevronUp : LuChevronDown;\n\n const badgeContainerRef = useScrollSelected({ selected, inputSearchValue });\n\n return (\n <>\n <div\n ref={badgeContainerRef}\n className={cn(\n 'relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0',\n badgeWrapperClassName,\n classNames?.badge?.wrapper,\n )}\n >\n {selected.map((option) => {\n return (\n <SelectedBadge\n key={option.value}\n {...{ badgeClassName, getBadgeClassName, classNames, option, toggleOption }}\n />\n );\n })}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputSearchValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputSearchValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!scrollbarRef?.current) {\n if (!persistInputOnBlur) {\n setInputSearchValue('');\n }\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n inputProps?.onFocus?.(event);\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-secondary flex-[1_0_3ch] self-baseline bg-transparent outline-none',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'ml-1': selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n </div>\n <ChevronIcon className={cn('size-5 min-w-5 cursor-pointer', disabled && 'text-gray-600')} />\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/v2/multiselect/components/MultiSelectInput.tsx"],"names":["MultiSelectInput","classNames","selected","toggleOption","inputProps","inputRef","open","setOpen","scrollbarRef","placeholder","hidePlaceholderWhenSelected","disabled","badgeWrapperClassName","inputSearchValue","setInputSearchValue","badgeClassName","getBadgeClassName","persistInputOnBlur","ChevronIcon","LuChevronUp","LuChevronDown","badgeContainerRef","useScrollSelected","jsxs","Fragment","cn","option","jsx","SelectedBadge","CommandPrimitive","value","event"],"mappings":"qQA8BaA,CAAAA,CAAmB,CAAC,CAC/B,UAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,YAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CACA,SAAAC,CAAAA,CACA,IAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,aAAAC,CAAAA,CACA,WAAA,CAAAC,EACA,2BAAA,CAAAC,CAAAA,CAA8B,KAC9B,QAAA,CAAAC,CAAAA,CACA,qBAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,oBAAAC,CAAAA,CACA,cAAA,CAAAC,EACA,iBAAA,CAAAC,CAAAA,CACA,mBAAAC,CACF,CAAA,GAAa,CACX,IAAMC,CAAAA,CAAcZ,EAAOa,cAAAA,CAAcC,gBAAAA,CAEnCC,EAAoBC,mBAAAA,CAAkB,CAAE,SAAApB,CAAAA,CAAU,gBAAA,CAAAW,CAAiB,CAAC,CAAA,CAE1E,OACEU,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAAD,eAAAA,CAAC,OACC,GAAA,CAAKF,CAAAA,CACL,UAAWI,mBAAAA,CACT,8DAAA,CACAb,EACAX,CAAAA,EAAY,KAAA,EAAO,OACrB,CAAA,CAEC,QAAA,CAAA,CAAAC,EAAS,GAAA,CAAKwB,CAAAA,EAEXC,cAAAA,CAACC,mBAAAA,CAAA,CAEO,cAAA,CAAAb,EAAgB,iBAAA,CAAAC,CAAAA,CAAmB,WAAAf,CAAAA,CAAY,MAAA,CAAAyB,EAAQ,YAAA,CAAAvB,CAAAA,CAAAA,CADxDuB,EAAO,KAEd,CAEH,EACDC,cAAAA,CAACE,YAAAA,CAAiB,MAAjB,CACE,GAAGzB,EACJ,GAAA,CAAKC,CAAAA,CACL,MAAOQ,CAAAA,CACP,QAAA,CAAUF,EACV,aAAA,CAAgBmB,CAAAA,EAAU,CACxBhB,CAAAA,CAAoBgB,CAAK,EACzB1B,CAAAA,EAAY,aAAA,GAAgB0B,CAAK,EACnC,CAAA,CACA,OAASC,CAAAA,EAAU,CACZvB,GAAc,OAAA,GACZS,CAAAA,EACHH,EAAoB,EAAE,CAAA,CAExBP,CAAAA,CAAQ,KAAK,CAAA,CAAA,CAEfH,CAAAA,EAAY,SAAS2B,CAAK,EAC5B,EACA,OAAA,CAAUA,CAAAA,EAAU,CAClBxB,CAAAA,CAAQ,IAAI,EACZH,CAAAA,EAAY,OAAA,GAAU2B,CAAK,EAC7B,CAAA,CACA,YAAarB,CAAAA,EAA+BR,CAAAA,CAAS,SAAW,CAAA,CAAI,EAAA,CAAKO,CAAAA,CACzE,SAAA,CAAWgB,mBAAAA,CACT,qFAAA,CACA,CACE,QAAA,CAAUf,CAAAA,CACV,OAAQR,CAAAA,CAAS,MAAA,GAAW,CAC9B,CAAA,CACAE,CAAAA,EAAY,SACd,CAAA,CACF,CAAA,CAAA,CACF,EACAuB,cAAAA,CAACT,CAAAA,CAAA,CAAY,SAAA,CAAWO,mBAAAA,CAAG,gCAAiCd,CAAAA,EAAY,eAAe,CAAA,CAAG,CAAA,CAAA,CAC5F,CAEJ","file":"chunk-N7VC2Y6D.cjs","sourcesContent":["import { Command as CommandPrimitive } from 'cmdk';\nimport { LuChevronDown, LuChevronUp } from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\nimport { SelectedBadge } from './SelectedBadge';\nimport type { MultiSelectProps } from '../types';\nimport type { UseRefsReturn } from '../hooks/useRefs';\nimport type { UseMultiSelectReturn } from '../hooks/useMultiSelect';\nimport type { UseInteractionsReturn } from '../hooks/useInteractions';\nimport { useScrollSelected } from '../hooks/useScrollSelected';\n\ntype Props = Pick<\n MultiSelectProps,\n | 'badgeWrapperClassName'\n | 'badgeClassName'\n | 'getBadgeClassName'\n | 'disabled'\n | 'className'\n | 'classNames'\n | 'hidePlaceholderWhenSelected'\n | 'placeholder'\n | 'inputProps'\n | 'persistInputOnBlur'\n> &\n Pick<UseRefsReturn, 'inputRef' | 'scrollbarRef'> &\n Pick<\n UseMultiSelectReturn,\n 'selected' | 'open' | 'setOpen' | 'inputSearchValue' | 'setInputSearchValue'\n > &\n Pick<UseInteractionsReturn, 'toggleOption'>;\n\nexport const MultiSelectInput = ({\n classNames,\n selected,\n toggleOption,\n inputProps,\n inputRef,\n open,\n setOpen,\n scrollbarRef,\n placeholder,\n hidePlaceholderWhenSelected = true,\n disabled,\n badgeWrapperClassName,\n inputSearchValue,\n setInputSearchValue,\n badgeClassName,\n getBadgeClassName,\n persistInputOnBlur,\n}: Props) => {\n const ChevronIcon = open ? LuChevronUp : LuChevronDown;\n\n const badgeContainerRef = useScrollSelected({ selected, inputSearchValue });\n\n return (\n <>\n <div\n ref={badgeContainerRef}\n className={cn(\n 'relative flex gap-1 overflow-auto [&::-webkit-scrollbar]:h-0',\n badgeWrapperClassName,\n classNames?.badge?.wrapper,\n )}\n >\n {selected.map((option) => {\n return (\n <SelectedBadge\n key={option.value}\n {...{ badgeClassName, getBadgeClassName, classNames, option, toggleOption }}\n />\n );\n })}\n <CommandPrimitive.Input\n {...inputProps}\n ref={inputRef}\n value={inputSearchValue}\n disabled={disabled}\n onValueChange={(value) => {\n setInputSearchValue(value);\n inputProps?.onValueChange?.(value);\n }}\n onBlur={(event) => {\n if (!scrollbarRef?.current) {\n if (!persistInputOnBlur) {\n setInputSearchValue('');\n }\n setOpen(false);\n }\n inputProps?.onBlur?.(event);\n }}\n onFocus={(event) => {\n setOpen(true);\n inputProps?.onFocus?.(event);\n }}\n placeholder={hidePlaceholderWhenSelected && selected.length !== 0 ? '' : placeholder}\n className={cn(\n 'placeholder:text-secondary flex-[1_0_3ch] self-baseline bg-transparent outline-none',\n {\n 'w-full': hidePlaceholderWhenSelected,\n 'ml-1': selected.length !== 0,\n },\n inputProps?.className,\n )}\n />\n </div>\n <ChevronIcon className={cn('size-5 min-w-5 cursor-pointer', disabled && 'text-gray-600')} />\n </>\n );\n};\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkUM5IERUP_cjs=require('./chunk-UM5IERUP.cjs'),chunkQAGOBPAT_cjs=require('./chunk-QAGOBPAT.cjs'),chunkSV7GB6CH_cjs=require('./chunk-SV7GB6CH.cjs'),chunkSOCTL7OO_cjs=require('./chunk-SOCTL7OO.cjs'),chunk4JAIMZSZ_cjs=require('./chunk-4JAIMZSZ.cjs'),chunk2DLCWPKO_cjs=require('./chunk-2DLCWPKO.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),lu=require('react-icons/lu'),w=require('dayjs'),Te=require('dayjs/plugin/customParseFormat.js'),reactImask=require('react-imask'),reactDayPicker=require('react-day-picker'),jsxRuntime=require('react/jsx-runtime'),ve=require('react-easy-crop'),luxon=require('luxon');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var w__default=/*#__PURE__*/_interopDefault(w);var Te__default=/*#__PURE__*/_interopDefault(Te);var ve__default=/*#__PURE__*/_interopDefault(ve);function fe(a){let o=a.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function ge(a){if(a.length!==10)return;let o=a.split("/");if(o.length!==3||o[2].length!==4)return;let e=parseInt(o[0],10),n=parseInt(o[1],10),t=parseInt(o[2],10);if(Number.isNaN(e)||Number.isNaN(n)||Number.isNaN(t))return;let l=new Date(t,e-1,n);if(!(l.getFullYear()!==t||l.getMonth()!==e-1||l.getDate()!==n))return l}function De({className:a,wrapperClassName:o,value:e,onChange:n,disabled:t=false,calendarProps:l,placeholder:b="MM/DD/YYYY",variant:g}){let[c,u]=react.useState(false),[v,h]=react.useState(e),[I,i]=react.useState(e?w__default.default(e).format("MM/DD/YYYY"):""),s=react.useRef(e?w__default.default(e).format("MM/DD/YYYY"):"");react.useEffect(()=>{let r=e?w__default.default(e).format("MM/DD/YYYY"):"";r!==s.current&&(s.current=r,i(r),e&&h(e));},[e]);let D=r=>{let f=fe(r.target.value);i(f);let T=ge(f);T?(s.current=f,n?.(T)):f===""&&(s.current="",n?.(void 0));},d=r=>{r.key==="ArrowDown"&&(r.preventDefault(),u(true)),!/[0-9/]/.test(r.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(r.key)&&!r.metaKey&&!r.ctrlKey&&r.preventDefault();};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",o),children:[jsxRuntime.jsx("input",{type:"text","data-slot":"input",className:chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a({variant:g}),"pr-10",a),value:I,placeholder:b,onChange:D,onKeyDown:d,disabled:t}),jsxRuntime.jsxs(chunkSV7GB6CH_cjs.a,{open:!t&&c,onOpenChange:u,children:[jsxRuntime.jsx(chunkSV7GB6CH_cjs.b,{asChild:true,children:jsxRuntime.jsx(chunk4JAIMZSZ_cjs.b,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:t,"aria-label":"Select date",type:"button",children:jsxRuntime.jsx(lu.LuCalendar,{})})}),jsxRuntime.jsx(chunkSV7GB6CH_cjs.c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsxRuntime.jsx(chunkSOCTL7OO_cjs.b,{mode:"single",selected:e,month:v,onMonthChange:h,onSelect:r=>{let f=r?w__default.default(r).format("MM/DD/YYYY"):"";s.current=f,i(f),n?.(r),u(false);},...l})})]})]})}var ye=({alt:a,className:o="",containerClassName:e="",imagePreview:n=void 0,cropper:t=void 0})=>{let[l,b]=react.useState(false),g=!n||!l,c=!!t;return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("flex max-w-[386px] flex-col",o),children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative h-60 rounded-md border",e),children:[n&&c?jsxRuntime.jsx(ve__default.default,{image:n,crop:t.crop,zoom:t.zoom,aspect:t.aspect,objectFit:"contain",onCropChange:t.setCrop,onZoomChange:t.setZoom,onCropComplete:t.onCropComplete,onMediaLoaded:()=>b(true),showGrid:false}):n&&jsxRuntime.jsx("img",{alt:a,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>b(true),draggable:false}),g&&jsxRuntime.jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&c&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center gap-3",children:[jsxRuntime.jsx(chunk4JAIMZSZ_cjs.b,{"aria-label":"zoom out",onClick:()=>t.setZoom(Math.max(t.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsxRuntime.jsx(lu.LuZoomOut,{})}),jsxRuntime.jsx(chunkQAGOBPAT_cjs.a,{value:[t.zoom],min:1,max:3,step:.01,onValueChange:u=>t.setZoom(u[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsxRuntime.jsx(chunk4JAIMZSZ_cjs.b,{"aria-label":"zoom in",onClick:()=>t.setZoom(Math.min(t.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsxRuntime.jsx(lu.LuZoomIn,{})})]}),jsxRuntime.jsxs(chunk4JAIMZSZ_cjs.b,{onClick:t.reset,variant:"ghost",className:"h-8 p-2",children:[jsxRuntime.jsx(lu.LuRefreshCcw,{}),"Reset"]})]})]})};var W="00:00",ee="24:00",te=a=>luxon.DateTime.fromFormat(a,"HH:mm").isValid,oe=({startTime:a=W,endTime:o=ee,interval:e=30,onChange:n=void 0,className:t="",placeholder:l="Select one",size:b="default",portal:g=true,triggerIcon:c,getSublabel:u,...v})=>{te(a)||(console.error(`Invalid startTime: ${a}`),a=W),te(o)||(console.error(`Invalid endTime: ${o}`),o=ee);let h=react.useMemo(()=>{let i=luxon.DateTime.fromFormat(o,"HH:mm"),s=luxon.Duration.fromObject({minutes:e}),D=[],d=luxon.DateTime.fromFormat(a,"HH:mm");for(;d<=i;){let r=d.toFormat("HH:mm");r==="00:00"&&d.equals(i)&&(r="24:00"),D.push({label:d.toFormat("h:mm a"),value:{hour:d.toFormat("HH"),min:d.toFormat("mm"),raw:r,formatted:d.toFormat("h:mm a")}}),d=d.plus(s);}return D},[a,o,e]);return jsxRuntime.jsxs(chunkUM5IERUP_cjs.a,{onValueChange:i=>{let s=h.find(D=>D.value.raw===i);s&&n?.(s);},...v,children:[jsxRuntime.jsx(chunkUM5IERUP_cjs.d,{className:chunkQRO22BPZ_cjs.a("max-w-[240px] md:w-[150px]",t),size:b,triggerIcon:c,children:jsxRuntime.jsx(chunkUM5IERUP_cjs.c,{placeholder:l})}),jsxRuntime.jsx(chunkUM5IERUP_cjs.g,{position:"popper",className:"max-h-90",portal:g,children:h.map(i=>{let s=u?.(i);return jsxRuntime.jsx(chunkUM5IERUP_cjs.i,{className:chunkQRO22BPZ_cjs.a(s?"h-auto py-2":"h-10"),value:i.value.raw,sublabel:s,children:i.label},i.value.raw)})})]})},Qe=oe;w__default.default.extend(Te__default.default);var ae="MM/DD/YYYY",Fe="00/00/0000",X=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function M(a){return a?w__default.default(a).format(ae):""}function we({className:a="",wrapperClassName:o="",value:e=void 0,onChange:n=void 0,disabled:t=false,calendarProps:l=void 0,placeholder:b,inputProps:g=void 0,showCalendarIcon:c=true,editable:u=false}){let[v,h]=react.useState(false),I=b??(u?ae:"Pick a date"),[i,s]=react.useState(void 0),D=react.useRef(e);e!==D.current&&(D.current=e,i!==void 0&&s(void 0));let d=i??e,r=p=>l?.disabled?!reactDayPicker.isMatch(p,l.disabled):true,f=react.useRef(n);f.current=n;let T=react.useRef(r);T.current=r;let{ref:q,setValue:E}=reactImask.useIMask({mask:Fe,lazy:true,overwrite:false},{onComplete:p=>{let C=w__default.default(p,X,true);C.isValid()&&T.current(C.toDate())&&f.current?.(C.toDate());}}),ie=p=>{n?.(p),E(M(p)),h(false);},se=p=>{let C=p.clipboardData.getData("text").trim(),H=w__default.default(C,X,true);if(H.isValid()&&r(H.toDate())){p.preventDefault();let J=H.toDate();n?.(J),E(M(J));}},pe=()=>{E(M(e));},le=()=>{let p=q.current?.value??"";if(p===""){e!==void 0&&n?.(void 0);return}let C=w__default.default(p,X,true);C.isValid()&&r(C.toDate())&&n?.(C.toDate()),E(M(e));},me=chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a(),c&&"pl-10",v?"border-dark-green":"",a);return jsxRuntime.jsxs(chunkSV7GB6CH_cjs.a,{open:!t&&v,onOpenChange:h,children:[jsxRuntime.jsx(chunkSV7GB6CH_cjs.b,{asChild:true,children:jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative flex w-full items-center rounded-md",o),children:[u?jsxRuntime.jsx("input",{ref:q,defaultValue:M(e),className:me,placeholder:I,disabled:t,onFocus:pe,onPaste:se,onBlur:p=>{le(),g?.onBlur?.(p);}}):jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{className:chunkQRO22BPZ_cjs.a(c&&"pl-10",v?"border-dark-green":"",a),...g,value:M(e),placeholder:I,readOnly:true,disabled:t}),c&&jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",t?"text-gray-400":"cursor-pointer text-black"),children:jsxRuntime.jsx(lu.LuCalendar,{size:16})})]})}),jsxRuntime.jsx(chunkSV7GB6CH_cjs.c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:u?p=>p.preventDefault():void 0,children:jsxRuntime.jsx(chunkSOCTL7OO_cjs.b,{mode:"single",selected:e?w__default.default(e).toDate():void 0,onSelect:ie,...u?{month:d,onMonthChange:s}:{},...l})})]})}exports.a=we;exports.b=De;exports.c=ye;exports.d=oe;exports.e=Qe;//# sourceMappingURL=chunk-AJB6MKQH.cjs.map
2
- //# sourceMappingURL=chunk-AJB6MKQH.cjs.map
1
+ 'use strict';var chunkUM5IERUP_cjs=require('./chunk-UM5IERUP.cjs'),chunkQAGOBPAT_cjs=require('./chunk-QAGOBPAT.cjs'),chunkSV7GB6CH_cjs=require('./chunk-SV7GB6CH.cjs'),chunkSOCTL7OO_cjs=require('./chunk-SOCTL7OO.cjs'),chunk4JAIMZSZ_cjs=require('./chunk-4JAIMZSZ.cjs'),chunk2DLCWPKO_cjs=require('./chunk-2DLCWPKO.cjs'),chunkQRO22BPZ_cjs=require('./chunk-QRO22BPZ.cjs'),react=require('react'),lu=require('react-icons/lu'),M=require('dayjs'),Te=require('dayjs/plugin/customParseFormat.js'),reactImask=require('react-imask'),reactDayPicker=require('react-day-picker'),jsxRuntime=require('react/jsx-runtime'),Se=require('react-easy-crop'),luxon=require('luxon');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var M__default=/*#__PURE__*/_interopDefault(M);var Te__default=/*#__PURE__*/_interopDefault(Te);var Se__default=/*#__PURE__*/_interopDefault(Se);function fe(a){let o=a.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function ge(a){if(a.length!==10)return;let o=a.split("/");if(o.length!==3||o[2].length!==4)return;let e=parseInt(o[0],10),n=parseInt(o[1],10),t=parseInt(o[2],10);if(Number.isNaN(e)||Number.isNaN(n)||Number.isNaN(t))return;let l=new Date(t,e-1,n);if(!(l.getFullYear()!==t||l.getMonth()!==e-1||l.getDate()!==n))return l}function Ce({className:a,wrapperClassName:o,value:e,onChange:n,disabled:t=false,calendarProps:l,placeholder:b="MM/DD/YYYY",variant:g}){let[c,u]=react.useState(false),[S,h]=react.useState(e),[w,i]=react.useState(e?M__default.default(e).format("MM/DD/YYYY"):""),p=react.useRef(e?M__default.default(e).format("MM/DD/YYYY"):"");react.useEffect(()=>{let r=e?M__default.default(e).format("MM/DD/YYYY"):"";r!==p.current&&(p.current=r,i(r),e&&h(e));},[e]);let C=r=>{let f=fe(r.target.value);i(f);let T=ge(f);T?(p.current=f,n?.(T)):f===""&&(p.current="",n?.(void 0));},d=r=>{r.key==="ArrowDown"&&(r.preventDefault(),u(true)),!/[0-9/]/.test(r.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(r.key)&&!r.metaKey&&!r.ctrlKey&&r.preventDefault();};return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative w-full",o),children:[jsxRuntime.jsx("input",{type:"text","data-slot":"input",className:chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a({variant:g}),"pr-10",a),value:w,placeholder:b,onChange:C,onKeyDown:d,disabled:t}),jsxRuntime.jsxs(chunkSV7GB6CH_cjs.a,{open:!t&&c,onOpenChange:u,children:[jsxRuntime.jsx(chunkSV7GB6CH_cjs.b,{asChild:true,children:jsxRuntime.jsx(chunk4JAIMZSZ_cjs.b,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:t,"aria-label":"Select date",type:"button",children:jsxRuntime.jsx(lu.LuCalendar,{})})}),jsxRuntime.jsx(chunkSV7GB6CH_cjs.c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsxRuntime.jsx(chunkSOCTL7OO_cjs.b,{mode:"single",selected:e,month:S,onMonthChange:h,onSelect:r=>{let f=r?M__default.default(r).format("MM/DD/YYYY"):"";p.current=f,i(f),n?.(r),u(false);},...l})})]})]})}var ye=({alt:a,className:o="",containerClassName:e="",imagePreview:n=void 0,cropper:t=void 0})=>{let[l,b]=react.useState(false),g=!n||!l,c=!!t;return jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("flex max-w-[386px] flex-col",o),children:[jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative h-60 rounded-md border",e),children:[n&&c?jsxRuntime.jsx(Se__default.default,{image:n,crop:t.crop,zoom:t.zoom,aspect:t.aspect,objectFit:"contain",onCropChange:t.setCrop,onZoomChange:t.setZoom,onCropComplete:t.onCropComplete,onMediaLoaded:()=>b(true),showGrid:false}):n&&jsxRuntime.jsx("img",{alt:a,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>b(true),draggable:false}),g&&jsxRuntime.jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&c&&jsxRuntime.jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxRuntime.jsxs("div",{className:"flex w-full items-center gap-3",children:[jsxRuntime.jsx(chunk4JAIMZSZ_cjs.b,{"aria-label":"zoom out",onClick:()=>t.setZoom(Math.max(t.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsxRuntime.jsx(lu.LuZoomOut,{})}),jsxRuntime.jsx(chunkQAGOBPAT_cjs.a,{value:[t.zoom],min:1,max:3,step:.01,onValueChange:u=>t.setZoom(u[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsxRuntime.jsx(chunk4JAIMZSZ_cjs.b,{"aria-label":"zoom in",onClick:()=>t.setZoom(Math.min(t.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsxRuntime.jsx(lu.LuZoomIn,{})})]}),jsxRuntime.jsxs(chunk4JAIMZSZ_cjs.b,{onClick:t.reset,variant:"ghost",className:"h-8 p-2",children:[jsxRuntime.jsx(lu.LuRefreshCcw,{}),"Reset"]})]})]})};var W="00:00",ee="24:00",te=a=>luxon.DateTime.fromFormat(a,"HH:mm").isValid,oe=({startTime:a=W,endTime:o=ee,interval:e=30,onChange:n=void 0,className:t="",placeholder:l="Select one",size:b="default",portal:g=true,triggerIcon:c,getSublabel:u,...S})=>{te(a)||(console.error(`Invalid startTime: ${a}`),a=W),te(o)||(console.error(`Invalid endTime: ${o}`),o=ee);let h=react.useMemo(()=>{let i=luxon.DateTime.fromFormat(o,"HH:mm"),p=luxon.Duration.fromObject({minutes:e}),C=[],d=luxon.DateTime.fromFormat(a,"HH:mm");for(;d<=i;){let r=d.toFormat("HH:mm");r==="00:00"&&d.equals(i)&&(r="24:00"),C.push({label:d.toFormat("h:mm a"),value:{hour:d.toFormat("HH"),min:d.toFormat("mm"),raw:r,formatted:d.toFormat("h:mm a")}}),d=d.plus(p);}return C},[a,o,e]);return jsxRuntime.jsxs(chunkUM5IERUP_cjs.a,{onValueChange:i=>{let p=h.find(C=>C.value.raw===i);p&&n?.(p);},...S,children:[jsxRuntime.jsx(chunkUM5IERUP_cjs.d,{className:chunkQRO22BPZ_cjs.a("max-w-[240px] md:w-[150px]",t),size:b,triggerIcon:c,children:jsxRuntime.jsx(chunkUM5IERUP_cjs.c,{placeholder:l})}),jsxRuntime.jsx(chunkUM5IERUP_cjs.g,{position:"popper",className:"max-h-90",portal:g,children:h.map(i=>{let p=u?.(i);return jsxRuntime.jsx(chunkUM5IERUP_cjs.i,{className:chunkQRO22BPZ_cjs.a(p?"h-auto py-2":"h-10"),value:i.value.raw,sublabel:p,children:i.label},i.value.raw)})})]})},Qe=oe;M__default.default.extend(Te__default.default);var ae="MM/DD/YYYY",ke="00/00/0000",X=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function I(a){return a?M__default.default(a).format(ae):""}function Me({className:a="",wrapperClassName:o="",value:e=void 0,onChange:n=void 0,disabled:t=false,calendarProps:l=void 0,placeholder:b,inputProps:g=void 0,showCalendarIcon:c=true,editable:u=false}){let[S,h]=react.useState(false),w=b??(u?ae:"Pick a date"),[i,p]=react.useState(void 0),C=react.useRef(e);e!==C.current&&(C.current=e,i!==void 0&&p(void 0));let d=i??e,r=s=>l?.disabled?!reactDayPicker.isMatch(s,l.disabled):true,f=react.useRef(n);f.current=n;let T=react.useRef(r);T.current=r;let{ref:q,setValue:L}=reactImask.useIMask({mask:ke,lazy:true,overwrite:false},{onComplete:s=>{let D=M__default.default(s,X,true);D.isValid()&&T.current(D.toDate())&&f.current?.(D.toDate());}}),ie=s=>{n?.(s),L(I(s)),h(false);},pe=s=>{let D=s.clipboardData.getData("text").trim(),V=M__default.default(D,X,true);if(V.isValid()&&r(V.toDate())){s.preventDefault();let J=V.toDate();n?.(J),L(I(J));}},se=()=>{L(I(e));},le=()=>{let s=q.current?.value??"";if(s===""){e!==void 0&&n?.(void 0);return}let D=M__default.default(s,X,true);D.isValid()&&r(D.toDate())&&n?.(D.toDate()),L(I(e));},me=chunkQRO22BPZ_cjs.a(chunk2DLCWPKO_cjs.a(),c&&"pl-10",S?"border-dark-green":"",a);return jsxRuntime.jsxs(chunkSV7GB6CH_cjs.a,{open:!t&&S,onOpenChange:h,children:[jsxRuntime.jsx(chunkSV7GB6CH_cjs.b,{asChild:true,children:jsxRuntime.jsxs("div",{className:chunkQRO22BPZ_cjs.a("relative flex w-full items-center rounded-md",o),children:[u?jsxRuntime.jsx("input",{ref:q,defaultValue:I(e),className:me,placeholder:w,disabled:t,onFocus:se,onPaste:pe,onBlur:s=>{le(),g?.onBlur?.(s);}}):jsxRuntime.jsx(chunk2DLCWPKO_cjs.b,{className:chunkQRO22BPZ_cjs.a(c&&"pl-10",S?"border-dark-green":"",a),...g,value:I(e),placeholder:w,readOnly:true,disabled:t}),c&&jsxRuntime.jsx("div",{className:chunkQRO22BPZ_cjs.a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",t?"text-gray-400":"cursor-pointer text-black"),children:jsxRuntime.jsx(lu.LuCalendar,{size:16})})]})}),jsxRuntime.jsx(chunkSV7GB6CH_cjs.c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:u?s=>s.preventDefault():void 0,children:jsxRuntime.jsx(chunkSOCTL7OO_cjs.b,{mode:"single",selected:e?M__default.default(e).toDate():void 0,onSelect:ie,...u?{month:d,onMonthChange:p}:{},...l})})]})}exports.a=Me;exports.b=Ce;exports.c=ye;exports.d=oe;exports.e=Qe;//# sourceMappingURL=chunk-NN627YY4.cjs.map
2
+ //# sourceMappingURL=chunk-NN627YY4.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/date-picker/date-picker.tsx"],"names":["maskDate","value","digits","parseDate","parts","month","day","year","date","DatePickerInput","className","wrapperClassName","onChange","disabled","calendarProps","placeholder","variant","open","setOpen","useState","setMonth","inputValue","setInputValue","dayjs","lastSyncedRef","useRef","useEffect","formatted","handleInputChange","e","masked","parsed","handleKeyDown","jsxs","cn","jsx","inputVariants","Popover","PopoverTrigger","Button","LuCalendar","PopoverContent","Calendar","d","ImagePreview","alt","containerClassName","imagePreview","cropper","loaded","setLoaded","showLoader","enableCrop","Cropper","LuZoomOut","Slider","v","LuZoomIn","LuRefreshCcw","START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","size","portal","triggerIcon","getSublabel","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","Select","SelectTrigger","SelectValue","SelectContent","sublabel","SelectItem","time_select_default","customParseFormat","DISPLAY_FORMAT","INPUT_MASK","ACCEPTED_INPUT_FORMATS","formatDate","DatePicker","placeholderProp","showCalendarIcon","editable","navigatedMonth","setNavigatedMonth","prevValueForMonth","calendarMonth","isDateAllowed","isMatch","onChangeRef","isDateAllowedRef","maskRef","setMaskValue","useIMask","maskedValue","handleSelect","val","handlePaste","pasted","handleFocus","handleBlur","current","inputClasses","Input"],"mappings":"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","file":"chunk-AJB6MKQH.cjs","sourcesContent":["import * as React from 'react';\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Button, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '../input/input';\n\nfunction maskDate(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n if (value.length !== 10) return undefined;\n const parts = value.split('/');\n if (parts.length !== 3 || parts[2].length !== 4) return undefined;\n const month = parseInt(parts[0], 10);\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n if (Number.isNaN(month) || Number.isNaN(day) || Number.isNaN(year)) return undefined;\n const date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n}\n\nexport type DatePickerInputProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n variant?: 'default' | 'invalid';\n};\n\nexport function DatePickerInput({\n className,\n wrapperClassName,\n value,\n onChange,\n disabled = false,\n calendarProps,\n placeholder = 'MM/DD/YYYY',\n variant,\n}: DatePickerInputProps) {\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date | undefined>(value);\n const [inputValue, setInputValue] = useState<string>(\n value ? dayjs(value).format('MM/DD/YYYY') : '',\n );\n // Track the last value we synced from props to avoid overwriting partial user input\n const lastSyncedRef = useRef(value ? dayjs(value).format('MM/DD/YYYY') : '');\n\n useEffect(() => {\n const formatted = value ? dayjs(value).format('MM/DD/YYYY') : '';\n if (formatted !== lastSyncedRef.current) {\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n if (value) setMonth(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskDate(e.target.value);\n setInputValue(masked);\n const parsed = parseDate(masked);\n if (parsed) {\n lastSyncedRef.current = masked;\n onChange?.(parsed);\n } else if (masked === '') {\n lastSyncedRef.current = '';\n onChange?.(undefined);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n if (\n !/[0-9/]/.test(e.key) &&\n !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Tab'].includes(e.key) &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n e.preventDefault();\n }\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n <input\n type=\"text\"\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), 'pr-10', className)}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost-icon\"\n size=\"sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2\"\n disabled={disabled}\n aria-label=\"Select date\"\n type=\"button\"\n >\n <LuCalendar />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <Calendar\n mode=\"single\"\n selected={value}\n month={month}\n onMonthChange={setMonth}\n onSelect={(d) => {\n const formatted = d ? dayjs(d).format('MM/DD/YYYY') : '';\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n onChange?.(d);\n setOpen(false);\n }}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LuRefreshCcw, LuZoomIn, LuZoomOut } from 'react-icons/lu';\nimport Cropper from 'react-easy-crop';\nimport { Button, Slider } from '../index';\nimport type { UseImageCropper } from './useImageCropper';\nimport { cn } from '@/lib/utils';\n\nexport type ImagePreviewProps = {\n alt: string;\n className?: string;\n containerClassName?: string;\n imagePreview?: string; // optional so we can show skeleton while awaiting URL\n cropper?: UseImageCropper; // when provided, show cropping UI\n};\n\nexport const ImagePreview = ({\n alt,\n className = '',\n containerClassName = '',\n imagePreview = undefined,\n cropper = undefined,\n}: ImagePreviewProps) => {\n const [loaded, setLoaded] = useState(false);\n const showLoader = !imagePreview || !loaded;\n const enableCrop = !!cropper;\n\n return (\n <div className={cn(`flex max-w-[386px] flex-col`, className)}>\n <div className={cn('relative h-60 rounded-md border', containerClassName)}>\n {imagePreview && enableCrop ? (\n <Cropper\n image={imagePreview}\n crop={cropper.crop}\n zoom={cropper.zoom}\n aspect={cropper.aspect}\n objectFit=\"contain\"\n onCropChange={cropper.setCrop}\n onZoomChange={cropper.setZoom}\n onCropComplete={cropper.onCropComplete}\n onMediaLoaded={() => setLoaded(true)}\n showGrid={false}\n />\n ) : (\n imagePreview && (\n <img\n alt={alt}\n className={`m-auto h-full w-full object-contain transition-opacity duration-300 ${loaded ? 'opacity-100' : 'opacity-0'}`}\n src={imagePreview}\n onLoad={() => setLoaded(true)}\n draggable={false}\n />\n )\n )}\n\n {showLoader && (\n <div\n aria-label={imagePreview ? 'Loading image' : 'Awaiting image'}\n className=\"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r\"\n />\n )}\n </div>\n\n {!showLoader && enableCrop && (\n <div className=\"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4\">\n <div className=\"flex w-full items-center gap-3\">\n <Button\n aria-label=\"zoom out\"\n onClick={() => cropper.setZoom(Math.max(cropper.zoom - 0.1, 1))}\n className=\"h-8\"\n variant=\"ghost-icon\"\n >\n <LuZoomOut />\n </Button>\n\n <Slider\n value={[cropper.zoom]}\n min={1}\n max={3}\n step={0.01}\n onValueChange={(v: number[]) => cropper.setZoom(v[0])}\n className=\"w-full sm:flex-50\"\n classNames={{ thumb: 'border-2 border-green-800', range: 'bg-green-900' }}\n />\n\n <Button\n aria-label=\"zoom in\"\n onClick={() => cropper.setZoom(Math.min(cropper.zoom + 0.1, 3))}\n variant=\"ghost-icon\"\n className=\"h-8\"\n >\n <LuZoomIn />\n </Button>\n </div>\n\n <Button onClick={cropper.reset} variant=\"ghost\" className=\"h-8 p-2\">\n <LuRefreshCcw />\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n","import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n placeholder?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n triggerIcon?: ReactElement;\n getSublabel?: (interval: Interval) => ReactNode;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n placeholder = 'Select one',\n size = 'default',\n portal = true,\n triggerIcon,\n getSublabel,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger\n className={cn('max-w-[240px] md:w-[150px]', className)}\n size={size}\n triggerIcon={triggerIcon}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {intervals.map((time) => {\n const sublabel = getSublabel?.(time);\n return (\n <SelectItem\n className={cn(sublabel ? 'h-auto py-2' : 'h-10')}\n key={time.value.raw}\n value={time.value.raw}\n sublabel={sublabel}\n >\n {time.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import { ComponentProps, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport { useIMask } from 'react-imask';\nimport { isMatch } from 'react-day-picker';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '@/v2/input/input';\nimport type { InputProps } from '@/v2/input/input';\n\ndayjs.extend(customParseFormat);\n\n/** Display and input format for dates. Also used as the placeholder when `editable` is true. */\nconst DISPLAY_FORMAT = 'MM/DD/YYYY';\n\n/** IMask pattern — each `0` is a required digit, slashes are fixed literals. */\nconst INPUT_MASK = '00/00/0000';\n\n/**\n * Formats accepted when parsing typed or pasted input (dayjs strict mode).\n * Ordered from most specific to least specific to avoid ambiguous matches.\n */\nconst ACCEPTED_INPUT_FORMATS = ['MM/DD/YYYY', 'MM/D/YYYY', 'M/DD/YYYY', 'M/D/YYYY', 'YYYY-MM-DD'];\n\nexport type DatePickerProps = {\n /** Additional class name(s) applied to the input element. */\n className?: string;\n /** Additional class name(s) applied to the outer popover trigger wrapper. */\n wrapperClassName?: string;\n /** The currently selected date. `undefined` means no date is selected. */\n value?: Date;\n /** Called when the selected date changes. Receives `undefined` when the date is cleared. */\n onChange?: (value: Date | undefined) => void;\n /** When `true`, the picker is non-interactive. */\n disabled?: boolean;\n /**\n * Props forwarded to the underlying `Calendar` component (react-day-picker).\n * Use `disabled` within this object to restrict selectable dates — these\n * constraints apply to both calendar clicks and typed input when `editable` is `true`.\n *\n * @example\n * ```tsx\n * <DatePicker calendarProps={{ disabled: [{ before: new Date() }] }} />\n * ```\n */\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n /**\n * Input placeholder text. Defaults to `\"Pick a date\"` in read-only mode\n * and `\"MM/DD/YYYY\"` when `editable` is `true`.\n */\n placeholder?: string;\n /** Props forwarded to the underlying `Input` component. */\n inputProps?: InputProps;\n /** Whether to show the calendar icon inside the input. @default true */\n showCalendarIcon?: boolean;\n /**\n * When `true`, the input accepts typed and pasted dates in `MM/DD/YYYY` format.\n * Slashes are auto-inserted, non-numeric characters are rejected, and common\n * formats like `M/D/YYYY` and `YYYY-MM-DD` are accepted on paste.\n * Dates that fall in `calendarProps.disabled` ranges are rejected.\n *\n * When `false` (default), the input is read-only and dates can only be\n * selected via the calendar popover.\n *\n * @default false\n */\n editable?: boolean;\n};\n\nfunction formatDate(date: Date | undefined): string {\n return date ? dayjs(date).format(DISPLAY_FORMAT) : '';\n}\n\n/**\n * A date picker that combines a text input with a calendar popover.\n *\n * By default the input is read-only — dates are selected via the calendar.\n * Set `editable` to allow typing or pasting dates in `MM/DD/YYYY` format.\n */\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder: placeholderProp,\n inputProps = undefined,\n showCalendarIcon = true,\n editable = false,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const placeholder = placeholderProp ?? (editable ? DISPLAY_FORMAT : 'Pick a date');\n\n // Calendar month: derived from value, with user navigation override.\n // When value changes, navigation resets to the new value's month.\n const [navigatedMonth, setNavigatedMonth] = useState<Date | undefined>(undefined);\n const prevValueForMonth = useRef(value);\n if (value !== prevValueForMonth.current) {\n prevValueForMonth.current = value;\n if (navigatedMonth !== undefined) {\n setNavigatedMonth(undefined);\n }\n }\n const calendarMonth = navigatedMonth ?? value;\n\n const isDateAllowed = (date: Date): boolean => {\n if (!calendarProps?.disabled) {\n return true;\n }\n return !isMatch(date, calendarProps.disabled);\n };\n\n // Refs ensure IMask callbacks always see the latest values without re-creating the mask\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const isDateAllowedRef = useRef(isDateAllowed);\n isDateAllowedRef.current = isDateAllowed;\n\n const { ref: maskRef, setValue: setMaskValue } = useIMask<HTMLInputElement>(\n { mask: INPUT_MASK, lazy: true, overwrite: false },\n {\n onComplete: (maskedValue) => {\n const parsed = dayjs(maskedValue, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowedRef.current(parsed.toDate())) {\n onChangeRef.current?.(parsed.toDate());\n }\n },\n },\n );\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setMaskValue(formatDate(val));\n setOpen(false);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').trim();\n const parsed = dayjs(pasted, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n e.preventDefault();\n const date = parsed.toDate();\n onChange?.(date);\n setMaskValue(formatDate(date));\n }\n // If we can't parse it, let IMask handle it naturally\n };\n\n const handleFocus = () => {\n // Sync the mask to the current value on focus — handles external parent resets\n setMaskValue(formatDate(value));\n };\n\n const handleBlur = () => {\n const current = maskRef.current?.value ?? '';\n if (current === '') {\n if (value !== undefined) {\n onChange?.(undefined);\n }\n return;\n }\n const parsed = dayjs(current, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n onChange?.(parsed.toDate());\n }\n // Revert to last valid display value\n setMaskValue(formatDate(value));\n };\n\n const inputClasses = cn(\n inputVariants(),\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n );\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div className={cn('relative flex w-full items-center rounded-md', wrapperClassName)}>\n {editable ? (\n <input\n ref={maskRef}\n defaultValue={formatDate(value)}\n className={inputClasses}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onBlur={(e) => {\n handleBlur();\n inputProps?.onBlur?.(e);\n }}\n />\n ) : (\n <Input\n className={cn(\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n )}\n {...inputProps}\n value={formatDate(value)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n />\n )}\n {showCalendarIcon && (\n <div\n className={cn(\n 'absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2',\n disabled ? 'text-gray-400' : 'cursor-pointer text-black',\n )}\n >\n <LuCalendar size={16} />\n </div>\n )}\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto overflow-hidden p-0\"\n align=\"start\"\n onOpenAutoFocus={editable ? (e) => e.preventDefault() : undefined}\n >\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...(editable ? { month: calendarMonth, onMonthChange: setNavigatedMonth } : {})}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/v2/date-picker/date-picker-input.tsx","../src/v2/image-preview/image-preview.tsx","../src/v2/time-select/time-select.tsx","../src/v2/date-picker/date-picker.tsx"],"names":["maskDate","value","digits","parseDate","parts","month","day","year","date","DatePickerInput","className","wrapperClassName","onChange","disabled","calendarProps","placeholder","variant","open","setOpen","useState","setMonth","inputValue","setInputValue","dayjs","lastSyncedRef","useRef","useEffect","formatted","handleInputChange","e","masked","parsed","handleKeyDown","jsxs","cn","jsx","inputVariants","Popover","PopoverTrigger","Button","LuCalendar","PopoverContent","Calendar","d","ImagePreview","alt","containerClassName","imagePreview","cropper","loaded","setLoaded","showLoader","enableCrop","Cropper","LuZoomOut","Slider","v","LuZoomIn","LuRefreshCcw","START_TIME_DEFAULT","END_TIME_DEFAULT","isValidTime","time","DateTime","TimeSelect","startTime","endTime","interval","size","portal","triggerIcon","getSublabel","inputProps","intervals","useMemo","dtEnd","durationInterval","Duration","res","i","raw","Select","SelectTrigger","SelectValue","SelectContent","sublabel","SelectItem","time_select_default","customParseFormat","DISPLAY_FORMAT","INPUT_MASK","ACCEPTED_INPUT_FORMATS","formatDate","DatePicker","placeholderProp","showCalendarIcon","editable","navigatedMonth","setNavigatedMonth","prevValueForMonth","calendarMonth","isDateAllowed","isMatch","onChangeRef","isDateAllowedRef","maskRef","setMaskValue","useIMask","maskedValue","handleSelect","val","handlePaste","pasted","handleFocus","handleBlur","current","inputClasses","Input"],"mappings":"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","file":"chunk-NN627YY4.cjs","sourcesContent":["import * as React from 'react';\nimport { ComponentProps, useEffect, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport { Calendar, Button, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '../input/input';\n\nfunction maskDate(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 8);\n if (digits.length <= 2) return digits;\n if (digits.length <= 4) return `${digits.slice(0, 2)}/${digits.slice(2)}`;\n return `${digits.slice(0, 2)}/${digits.slice(2, 4)}/${digits.slice(4)}`;\n}\n\nfunction parseDate(value: string): Date | undefined {\n if (value.length !== 10) return undefined;\n const parts = value.split('/');\n if (parts.length !== 3 || parts[2].length !== 4) return undefined;\n const month = parseInt(parts[0], 10);\n const day = parseInt(parts[1], 10);\n const year = parseInt(parts[2], 10);\n if (Number.isNaN(month) || Number.isNaN(day) || Number.isNaN(year)) return undefined;\n const date = new Date(year, month - 1, day);\n if (date.getFullYear() !== year || date.getMonth() !== month - 1 || date.getDate() !== day) {\n return undefined;\n }\n return date;\n}\n\nexport type DatePickerInputProps = {\n className?: string;\n wrapperClassName?: string;\n value?: Date;\n onChange?: (value: Date | undefined) => void;\n disabled?: boolean;\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n placeholder?: string;\n variant?: 'default' | 'invalid';\n};\n\nexport function DatePickerInput({\n className,\n wrapperClassName,\n value,\n onChange,\n disabled = false,\n calendarProps,\n placeholder = 'MM/DD/YYYY',\n variant,\n}: DatePickerInputProps) {\n const [open, setOpen] = useState(false);\n const [month, setMonth] = useState<Date | undefined>(value);\n const [inputValue, setInputValue] = useState<string>(\n value ? dayjs(value).format('MM/DD/YYYY') : '',\n );\n // Track the last value we synced from props to avoid overwriting partial user input\n const lastSyncedRef = useRef(value ? dayjs(value).format('MM/DD/YYYY') : '');\n\n useEffect(() => {\n const formatted = value ? dayjs(value).format('MM/DD/YYYY') : '';\n if (formatted !== lastSyncedRef.current) {\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n if (value) setMonth(value);\n }\n }, [value]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const masked = maskDate(e.target.value);\n setInputValue(masked);\n const parsed = parseDate(masked);\n if (parsed) {\n lastSyncedRef.current = masked;\n onChange?.(parsed);\n } else if (masked === '') {\n lastSyncedRef.current = '';\n onChange?.(undefined);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n if (\n !/[0-9/]/.test(e.key) &&\n !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'Tab'].includes(e.key) &&\n !e.metaKey &&\n !e.ctrlKey\n ) {\n e.preventDefault();\n }\n };\n\n return (\n <div className={cn('relative w-full', wrapperClassName)}>\n <input\n type=\"text\"\n data-slot=\"input\"\n className={cn(inputVariants({ variant }), 'pr-10', className)}\n value={inputValue}\n placeholder={placeholder}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n />\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"ghost-icon\"\n size=\"sm\"\n className=\"absolute top-1/2 right-1 -translate-y-1/2\"\n disabled={disabled}\n aria-label=\"Select date\"\n type=\"button\"\n >\n <LuCalendar />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"end\" sideOffset={10}>\n <Calendar\n mode=\"single\"\n selected={value}\n month={month}\n onMonthChange={setMonth}\n onSelect={(d) => {\n const formatted = d ? dayjs(d).format('MM/DD/YYYY') : '';\n lastSyncedRef.current = formatted;\n setInputValue(formatted);\n onChange?.(d);\n setOpen(false);\n }}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LuRefreshCcw, LuZoomIn, LuZoomOut } from 'react-icons/lu';\nimport Cropper from 'react-easy-crop';\nimport { Button, Slider } from '../index';\nimport type { UseImageCropper } from './useImageCropper';\nimport { cn } from '@/lib/utils';\n\nexport type ImagePreviewProps = {\n alt: string;\n className?: string;\n containerClassName?: string;\n imagePreview?: string; // optional so we can show skeleton while awaiting URL\n cropper?: UseImageCropper; // when provided, show cropping UI\n};\n\nexport const ImagePreview = ({\n alt,\n className = '',\n containerClassName = '',\n imagePreview = undefined,\n cropper = undefined,\n}: ImagePreviewProps) => {\n const [loaded, setLoaded] = useState(false);\n const showLoader = !imagePreview || !loaded;\n const enableCrop = !!cropper;\n\n return (\n <div className={cn(`flex max-w-[386px] flex-col`, className)}>\n <div className={cn('relative h-60 rounded-md border', containerClassName)}>\n {imagePreview && enableCrop ? (\n <Cropper\n image={imagePreview}\n crop={cropper.crop}\n zoom={cropper.zoom}\n aspect={cropper.aspect}\n objectFit=\"contain\"\n onCropChange={cropper.setCrop}\n onZoomChange={cropper.setZoom}\n onCropComplete={cropper.onCropComplete}\n onMediaLoaded={() => setLoaded(true)}\n showGrid={false}\n />\n ) : (\n imagePreview && (\n <img\n alt={alt}\n className={`m-auto h-full w-full object-contain transition-opacity duration-300 ${loaded ? 'opacity-100' : 'opacity-0'}`}\n src={imagePreview}\n onLoad={() => setLoaded(true)}\n draggable={false}\n />\n )\n )}\n\n {showLoader && (\n <div\n aria-label={imagePreview ? 'Loading image' : 'Awaiting image'}\n className=\"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r\"\n />\n )}\n </div>\n\n {!showLoader && enableCrop && (\n <div className=\"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4\">\n <div className=\"flex w-full items-center gap-3\">\n <Button\n aria-label=\"zoom out\"\n onClick={() => cropper.setZoom(Math.max(cropper.zoom - 0.1, 1))}\n className=\"h-8\"\n variant=\"ghost-icon\"\n >\n <LuZoomOut />\n </Button>\n\n <Slider\n value={[cropper.zoom]}\n min={1}\n max={3}\n step={0.01}\n onValueChange={(v: number[]) => cropper.setZoom(v[0])}\n className=\"w-full sm:flex-50\"\n classNames={{ thumb: 'border-2 border-green-800', range: 'bg-green-900' }}\n />\n\n <Button\n aria-label=\"zoom in\"\n onClick={() => cropper.setZoom(Math.min(cropper.zoom + 0.1, 3))}\n variant=\"ghost-icon\"\n className=\"h-8\"\n >\n <LuZoomIn />\n </Button>\n </div>\n\n <Button onClick={cropper.reset} variant=\"ghost\" className=\"h-8 p-2\">\n <LuRefreshCcw />\n Reset\n </Button>\n </div>\n )}\n </div>\n );\n};\n","import { DateTime, Duration } from 'luxon';\nimport { useMemo } from 'react';\nimport type { ReactElement, ReactNode } from 'react';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/v2';\nimport { cn } from '@/lib/utils';\n\nexport type Interval = {\n label: string;\n value: {\n hour: string;\n min: string;\n raw: string;\n formatted: string;\n };\n};\n\ntype Props = {\n startTime?: string;\n endTime?: string;\n interval?: number;\n onChange?: (e: Interval) => void;\n className?: string;\n placeholder?: string;\n size?: 'default' | 'sm';\n portal?: boolean;\n triggerIcon?: ReactElement;\n getSublabel?: (interval: Interval) => ReactNode;\n [inputProps: string]: unknown;\n};\n\nconst START_TIME_DEFAULT = '00:00';\nconst END_TIME_DEFAULT = '24:00';\n\nconst isValidTime = (time: string) => {\n const dt = DateTime.fromFormat(time, 'HH:mm');\n return dt.isValid;\n};\n\nexport const TimeSelect = ({\n startTime = START_TIME_DEFAULT,\n endTime = END_TIME_DEFAULT,\n interval = 30,\n onChange = undefined,\n className = '',\n placeholder = 'Select one',\n size = 'default',\n portal = true,\n triggerIcon,\n getSublabel,\n ...inputProps\n}: Props) => {\n if (!isValidTime(startTime)) {\n console.error(`Invalid startTime: ${startTime}`);\n // eslint-disable-next-line no-param-reassign\n startTime = START_TIME_DEFAULT;\n }\n if (!isValidTime(endTime)) {\n console.error(`Invalid endTime: ${endTime}`);\n // eslint-disable-next-line no-param-reassign\n endTime = END_TIME_DEFAULT;\n }\n\n const intervals = useMemo((): Interval[] => {\n const dtEnd = DateTime.fromFormat(endTime, 'HH:mm');\n const durationInterval = Duration.fromObject({ minutes: interval });\n const res = [];\n let i = DateTime.fromFormat(startTime, 'HH:mm');\n while (i <= dtEnd) {\n let raw = i.toFormat('HH:mm');\n // Avoid duplicate keys for \"00:00\" and \"00:00\" (end of day)\n if (raw === '00:00' && i.equals(dtEnd)) raw = '24:00';\n\n res.push({\n label: i.toFormat('h:mm a'),\n value: {\n hour: i.toFormat('HH'),\n min: i.toFormat('mm'),\n raw,\n formatted: i.toFormat('h:mm a'),\n },\n });\n i = i.plus(durationInterval);\n }\n\n return res;\n }, [startTime, endTime, interval]);\n\n const handleOnSelect = (e: unknown) => {\n const interval = intervals.find((time) => time.value.raw === e);\n\n if (!interval) return;\n\n onChange?.(interval);\n };\n\n return (\n <Select onValueChange={handleOnSelect} {...inputProps}>\n <SelectTrigger\n className={cn('max-w-[240px] md:w-[150px]', className)}\n size={size}\n triggerIcon={triggerIcon}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent position=\"popper\" className=\"max-h-90\" portal={portal}>\n {intervals.map((time) => {\n const sublabel = getSublabel?.(time);\n return (\n <SelectItem\n className={cn(sublabel ? 'h-auto py-2' : 'h-10')}\n key={time.value.raw}\n value={time.value.raw}\n sublabel={sublabel}\n >\n {time.label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </Select>\n );\n};\n\nexport default TimeSelect;\n","import { ComponentProps, useRef, useState } from 'react';\nimport { LuCalendar } from 'react-icons/lu';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\nimport { useIMask } from 'react-imask';\nimport { isMatch } from 'react-day-picker';\nimport { Calendar, Input, Popover, PopoverContent, PopoverTrigger } from '@/v2';\nimport { cn } from '@/lib/utils';\nimport { inputVariants } from '@/v2/input/input';\nimport type { InputProps } from '@/v2/input/input';\n\ndayjs.extend(customParseFormat);\n\n/** Display and input format for dates. Also used as the placeholder when `editable` is true. */\nconst DISPLAY_FORMAT = 'MM/DD/YYYY';\n\n/** IMask pattern — each `0` is a required digit, slashes are fixed literals. */\nconst INPUT_MASK = '00/00/0000';\n\n/**\n * Formats accepted when parsing typed or pasted input (dayjs strict mode).\n * Ordered from most specific to least specific to avoid ambiguous matches.\n */\nconst ACCEPTED_INPUT_FORMATS = ['MM/DD/YYYY', 'MM/D/YYYY', 'M/DD/YYYY', 'M/D/YYYY', 'YYYY-MM-DD'];\n\nexport type DatePickerProps = {\n /** Additional class name(s) applied to the input element. */\n className?: string;\n /** Additional class name(s) applied to the outer popover trigger wrapper. */\n wrapperClassName?: string;\n /** The currently selected date. `undefined` means no date is selected. */\n value?: Date;\n /** Called when the selected date changes. Receives `undefined` when the date is cleared. */\n onChange?: (value: Date | undefined) => void;\n /** When `true`, the picker is non-interactive. */\n disabled?: boolean;\n /**\n * Props forwarded to the underlying `Calendar` component (react-day-picker).\n * Use `disabled` within this object to restrict selectable dates — these\n * constraints apply to both calendar clicks and typed input when `editable` is `true`.\n *\n * @example\n * ```tsx\n * <DatePicker calendarProps={{ disabled: [{ before: new Date() }] }} />\n * ```\n */\n calendarProps?: Omit<ComponentProps<typeof Calendar>, 'mode' | 'selected' | 'onSelect'>;\n /**\n * Input placeholder text. Defaults to `\"Pick a date\"` in read-only mode\n * and `\"MM/DD/YYYY\"` when `editable` is `true`.\n */\n placeholder?: string;\n /** Props forwarded to the underlying `Input` component. */\n inputProps?: InputProps;\n /** Whether to show the calendar icon inside the input. @default true */\n showCalendarIcon?: boolean;\n /**\n * When `true`, the input accepts typed and pasted dates in `MM/DD/YYYY` format.\n * Slashes are auto-inserted, non-numeric characters are rejected, and common\n * formats like `M/D/YYYY` and `YYYY-MM-DD` are accepted on paste.\n * Dates that fall in `calendarProps.disabled` ranges are rejected.\n *\n * When `false` (default), the input is read-only and dates can only be\n * selected via the calendar popover.\n *\n * @default false\n */\n editable?: boolean;\n};\n\nfunction formatDate(date: Date | undefined): string {\n return date ? dayjs(date).format(DISPLAY_FORMAT) : '';\n}\n\n/**\n * A date picker that combines a text input with a calendar popover.\n *\n * By default the input is read-only — dates are selected via the calendar.\n * Set `editable` to allow typing or pasting dates in `MM/DD/YYYY` format.\n */\nexport function DatePicker({\n className = '',\n wrapperClassName = '',\n value = undefined,\n onChange = undefined,\n disabled = false,\n calendarProps = undefined,\n placeholder: placeholderProp,\n inputProps = undefined,\n showCalendarIcon = true,\n editable = false,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const placeholder = placeholderProp ?? (editable ? DISPLAY_FORMAT : 'Pick a date');\n\n // Calendar month: derived from value, with user navigation override.\n // When value changes, navigation resets to the new value's month.\n const [navigatedMonth, setNavigatedMonth] = useState<Date | undefined>(undefined);\n const prevValueForMonth = useRef(value);\n if (value !== prevValueForMonth.current) {\n prevValueForMonth.current = value;\n if (navigatedMonth !== undefined) {\n setNavigatedMonth(undefined);\n }\n }\n const calendarMonth = navigatedMonth ?? value;\n\n const isDateAllowed = (date: Date): boolean => {\n if (!calendarProps?.disabled) {\n return true;\n }\n return !isMatch(date, calendarProps.disabled);\n };\n\n // Refs ensure IMask callbacks always see the latest values without re-creating the mask\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const isDateAllowedRef = useRef(isDateAllowed);\n isDateAllowedRef.current = isDateAllowed;\n\n const { ref: maskRef, setValue: setMaskValue } = useIMask<HTMLInputElement>(\n { mask: INPUT_MASK, lazy: true, overwrite: false },\n {\n onComplete: (maskedValue) => {\n const parsed = dayjs(maskedValue, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowedRef.current(parsed.toDate())) {\n onChangeRef.current?.(parsed.toDate());\n }\n },\n },\n );\n\n const handleSelect = (val: Date | undefined) => {\n onChange?.(val);\n setMaskValue(formatDate(val));\n setOpen(false);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').trim();\n const parsed = dayjs(pasted, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n e.preventDefault();\n const date = parsed.toDate();\n onChange?.(date);\n setMaskValue(formatDate(date));\n }\n // If we can't parse it, let IMask handle it naturally\n };\n\n const handleFocus = () => {\n // Sync the mask to the current value on focus — handles external parent resets\n setMaskValue(formatDate(value));\n };\n\n const handleBlur = () => {\n const current = maskRef.current?.value ?? '';\n if (current === '') {\n if (value !== undefined) {\n onChange?.(undefined);\n }\n return;\n }\n const parsed = dayjs(current, ACCEPTED_INPUT_FORMATS, true);\n if (parsed.isValid() && isDateAllowed(parsed.toDate())) {\n onChange?.(parsed.toDate());\n }\n // Revert to last valid display value\n setMaskValue(formatDate(value));\n };\n\n const inputClasses = cn(\n inputVariants(),\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n );\n\n return (\n <Popover open={!disabled && open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <div className={cn('relative flex w-full items-center rounded-md', wrapperClassName)}>\n {editable ? (\n <input\n ref={maskRef}\n defaultValue={formatDate(value)}\n className={inputClasses}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onBlur={(e) => {\n handleBlur();\n inputProps?.onBlur?.(e);\n }}\n />\n ) : (\n <Input\n className={cn(\n showCalendarIcon && 'pl-10',\n open ? 'border-dark-green' : '',\n className,\n )}\n {...inputProps}\n value={formatDate(value)}\n placeholder={placeholder}\n readOnly\n disabled={disabled}\n />\n )}\n {showCalendarIcon && (\n <div\n className={cn(\n 'absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2',\n disabled ? 'text-gray-400' : 'cursor-pointer text-black',\n )}\n >\n <LuCalendar size={16} />\n </div>\n )}\n </div>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-auto overflow-hidden p-0\"\n align=\"start\"\n onOpenAutoFocus={editable ? (e) => e.preventDefault() : undefined}\n >\n <Calendar\n mode=\"single\"\n selected={value ? dayjs(value).toDate() : undefined}\n onSelect={handleSelect}\n {...(editable ? { month: calendarMonth, onMonthChange: setNavigatedMonth } : {})}\n {...calendarProps}\n />\n </PopoverContent>\n </Popover>\n );\n}\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkIJMCTNX6_cjs=require('./chunk-IJMCTNX6.cjs'),chunkI5LC3XFB_cjs=require('./chunk-I5LC3XFB.cjs'),chunkMKSIR4NW_cjs=require('./chunk-MKSIR4NW.cjs'),jsxRuntime=require('react/jsx-runtime');var g=({active:e=false})=>jsxRuntime.jsxs(chunkI5LC3XFB_cjs.a,{children:[jsxRuntime.jsxs(chunkI5LC3XFB_cjs.b,{children:[jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-desktop.svg`,alt:"coffee",width:"300",height:"300"}),jsxRuntime.jsx(chunkIJMCTNX6_cjs.a,{active:e,children:jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-desktop-fill.svg`,alt:"",width:"300",height:"300"})})]}),jsxRuntime.jsxs(chunkI5LC3XFB_cjs.c,{children:[jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-mobile.svg`,alt:"coffee",width:"358",height:"112"}),jsxRuntime.jsx(chunkIJMCTNX6_cjs.a,{active:e,children:jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-mobile-fill.svg`,alt:"",width:"358",height:"112"})})]})]});exports.a=g;//# sourceMappingURL=chunk-KJULJRWW.cjs.map
2
- //# sourceMappingURL=chunk-KJULJRWW.cjs.map
1
+ 'use strict';var chunkI5LC3XFB_cjs=require('./chunk-I5LC3XFB.cjs'),chunkIJMCTNX6_cjs=require('./chunk-IJMCTNX6.cjs'),chunkMKSIR4NW_cjs=require('./chunk-MKSIR4NW.cjs'),jsxRuntime=require('react/jsx-runtime');var g=({active:e=false})=>jsxRuntime.jsxs(chunkI5LC3XFB_cjs.a,{children:[jsxRuntime.jsxs(chunkI5LC3XFB_cjs.b,{children:[jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-desktop.svg`,alt:"coffee",width:"300",height:"300"}),jsxRuntime.jsx(chunkIJMCTNX6_cjs.a,{active:e,children:jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-desktop-fill.svg`,alt:"",width:"300",height:"300"})})]}),jsxRuntime.jsxs(chunkI5LC3XFB_cjs.c,{children:[jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-mobile.svg`,alt:"coffee",width:"358",height:"112"}),jsxRuntime.jsx(chunkIJMCTNX6_cjs.a,{active:e,children:jsxRuntime.jsx("img",{src:`${chunkMKSIR4NW_cjs.a}/illustrations/card/coffee-mobile-fill.svg`,alt:"",width:"358",height:"112"})})]})]});exports.a=g;//# sourceMappingURL=chunk-P4TOP5DA.cjs.map
2
+ //# sourceMappingURL=chunk-P4TOP5DA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Card/illustrations/Coffee.tsx"],"names":["Coffee","active","jsxs","IllustrationContainer","DesktopIllustration","jsx","ILLUSTRATIONS_BASE_URL","FillContainer_default","MobileIllustration"],"mappings":"+MAQO,IAAMA,CAAAA,CAAS,CAAC,CAAE,MAAA,CAAAC,EAAS,KAAM,CAAA,GACtCC,gBAACC,mBAAAA,CAAA,CACC,UAAAD,eAAAA,CAACE,mBAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,cAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,mBAAsB,CAAA,sCAAA,CAAA,CAC9B,GAAA,CAAI,SACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACAD,eAACE,mBAAAA,CAAA,CAAc,OAAQN,CAAAA,CACrB,QAAA,CAAAI,eAAC,KAAA,CAAA,CACC,GAAA,CAAK,GAAGC,mBAAsB,CAAA,2CAAA,CAAA,CAC9B,IAAI,EAAA,CACJ,KAAA,CAAM,MACN,MAAA,CAAO,KAAA,CACT,EACF,CAAA,CAAA,CACF,CAAA,CACAJ,gBAACM,mBAAAA,CAAA,CACC,UAAAH,cAAAA,CAAC,KAAA,CAAA,CACC,IAAK,CAAA,EAAGC,mBAAsB,wCAC9B,GAAA,CAAI,QAAA,CACJ,MAAM,KAAA,CACN,MAAA,CAAO,MACT,CAAA,CAEAD,cAAAA,CAACE,oBAAA,CAAc,MAAA,CAAQN,EACrB,QAAA,CAAAI,cAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,mBAAsB,CAAA,0CAAA,CAAA,CAC9B,GAAA,CAAI,GACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACF,GACF,CAAA,CAAA,CACF","file":"chunk-KJULJRWW.cjs","sourcesContent":["import { ILLUSTRATIONS_BASE_URL } from '../../constants';\nimport FillContainer from '../../Form/Checkbox/shared/FillContainer';\nimport {\n DesktopIllustration,\n IllustrationContainer,\n MobileIllustration,\n} from '../../Form/Checkbox/shared/style';\n\nexport const Coffee = ({ active = false }: { active?: boolean }) => (\n <IllustrationContainer>\n <DesktopIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-desktop.svg`}\n alt=\"coffee\"\n width=\"300\"\n height=\"300\"\n />\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-desktop-fill.svg`}\n alt=\"\"\n width=\"300\"\n height=\"300\"\n />\n </FillContainer>\n </DesktopIllustration>\n <MobileIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-mobile.svg`}\n alt=\"coffee\"\n width=\"358\"\n height=\"112\"\n />\n\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-mobile-fill.svg`}\n alt=\"\"\n width=\"358\"\n height=\"112\"\n />\n </FillContainer>\n </MobileIllustration>\n </IllustrationContainer>\n);\n"]}
1
+ {"version":3,"sources":["../src/Card/illustrations/Coffee.tsx"],"names":["Coffee","active","jsxs","IllustrationContainer","DesktopIllustration","jsx","ILLUSTRATIONS_BASE_URL","FillContainer_default","MobileIllustration"],"mappings":"+MAQO,IAAMA,CAAAA,CAAS,CAAC,CAAE,MAAA,CAAAC,EAAS,KAAM,CAAA,GACtCC,gBAACC,mBAAAA,CAAA,CACC,UAAAD,eAAAA,CAACE,mBAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,cAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,mBAAsB,CAAA,sCAAA,CAAA,CAC9B,GAAA,CAAI,SACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACAD,eAACE,mBAAAA,CAAA,CAAc,OAAQN,CAAAA,CACrB,QAAA,CAAAI,eAAC,KAAA,CAAA,CACC,GAAA,CAAK,GAAGC,mBAAsB,CAAA,2CAAA,CAAA,CAC9B,IAAI,EAAA,CACJ,KAAA,CAAM,MACN,MAAA,CAAO,KAAA,CACT,EACF,CAAA,CAAA,CACF,CAAA,CACAJ,gBAACM,mBAAAA,CAAA,CACC,UAAAH,cAAAA,CAAC,KAAA,CAAA,CACC,IAAK,CAAA,EAAGC,mBAAsB,wCAC9B,GAAA,CAAI,QAAA,CACJ,MAAM,KAAA,CACN,MAAA,CAAO,MACT,CAAA,CAEAD,cAAAA,CAACE,oBAAA,CAAc,MAAA,CAAQN,EACrB,QAAA,CAAAI,cAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,mBAAsB,CAAA,0CAAA,CAAA,CAC9B,GAAA,CAAI,GACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACF,GACF,CAAA,CAAA,CACF","file":"chunk-P4TOP5DA.cjs","sourcesContent":["import { ILLUSTRATIONS_BASE_URL } from '../../constants';\nimport FillContainer from '../../Form/Checkbox/shared/FillContainer';\nimport {\n DesktopIllustration,\n IllustrationContainer,\n MobileIllustration,\n} from '../../Form/Checkbox/shared/style';\n\nexport const Coffee = ({ active = false }: { active?: boolean }) => (\n <IllustrationContainer>\n <DesktopIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-desktop.svg`}\n alt=\"coffee\"\n width=\"300\"\n height=\"300\"\n />\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-desktop-fill.svg`}\n alt=\"\"\n width=\"300\"\n height=\"300\"\n />\n </FillContainer>\n </DesktopIllustration>\n <MobileIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-mobile.svg`}\n alt=\"coffee\"\n width=\"358\"\n height=\"112\"\n />\n\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/coffee-mobile-fill.svg`}\n alt=\"\"\n width=\"358\"\n height=\"112\"\n />\n </FillContainer>\n </MobileIllustration>\n </IllustrationContainer>\n);\n"]}
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-YTIIAU4W.js';import*as i from'react';import {useSensors,useSensor,PointerSensor,KeyboardSensor,DndContext,closestCorners,closestCenter,useDroppable}from'@dnd-kit/core';import {sortableKeyboardCoordinates,SortableContext,verticalListSortingStrategy,useSortable}from'@dnd-kit/sortable';import {CSS}from'@dnd-kit/utilities';import {LuGripVertical}from'react-icons/lu';import {jsx,jsxs}from'react/jsx-runtime';var L=i.createContext(null);function q(n){let a=n==null?-1:n.lastIndexOf("$");return a===-1?null:n.slice(a+1)}function C(n,{strict:a,namespace:f}){let o=[];return {children:i.Children.toArray(n).map((s,m)=>{if(!i.isValidElement(s)||s.type!==X){if(a)throw new Error("SortableList.Group children must be SortableListItem elements.");return s}let u=q(s.key)??(f==null?String(m):`${String(f)}/${m}`);return o.push(u),i.cloneElement(s,{id:u})}),ids:o}}function H({id:n,children:a$1,className:f}){let o=i.useContext(L),{setNodeRef:c}=useDroppable({id:n}),s=C(a$1,{strict:true,namespace:n});if(!o)throw new Error("SortableList.Group must be rendered inside a SortableList.");return o.current.set(n,s.ids),i.useEffect(()=>{let m=o.current;return ()=>{m.delete(n);}},[o,n]),jsx(SortableContext,{id:String(n),items:s.ids,strategy:verticalListSortingStrategy,children:jsx("div",{ref:c,className:a("flex flex-col gap-2",f),children:s.children})})}function J({children:n,onSort:a$1,className:f}){let o=i.useRef(new Map),c=i.useRef(null),s=i.useRef(false),m=useSensors(useSensor(PointerSensor),useSensor(KeyboardSensor,{coordinateGetter:sortableKeyboardCoordinates})),p=C(n,{strict:false}),u=()=>o.current.size>0,g=e=>{let t;return o.current.forEach((r,l)=>{t===void 0&&r.includes(e)&&(t=l);}),t},y=e=>g(e)??(o.current.has(e)?e:void 0),R=(e,t)=>{let r=g(e),l=y(t);if(r==null||l==null)return null;let d=o.current.get(r)??[],S=o.current.get(l)??[],v=S.indexOf(t);return {id:e,from:d.indexOf(e),to:v>=0?v:S.length,fromGroup:r,toGroup:l}},I=({active:e})=>{if(c.current=null,s.current=false,!u())return;let t=g(e.id);if(t==null)return;let r=o.current.get(t)??[];c.current={id:e.id,index:r.indexOf(e.id),groupId:t};},D=({active:e,over:t})=>{if(!t||!u())return;let r=R(e.id,t.id);!r||r.fromGroup===r.toGroup||(s.current=true,a$1(r));},w=({active:e,over:t})=>{let r=u();if(c.current=null,s.current=false,!t)return;if(!r){if(e.id===t.id)return;let d=p.ids.indexOf(e.id),S=p.ids.indexOf(t.id);if(d===-1||S===-1)return;a$1({id:e.id,from:d,to:S});return}let l=R(e.id,t.id);l&&a$1(l);},N=()=>{let e=c.current,t=s.current;if(c.current=null,s.current=false,!e||!t)return;let r=g(e.id);if(r==null)return;let l=o.current.get(r)??[];a$1({id:e.id,from:l.indexOf(e.id),to:e.index,fromGroup:r,toGroup:e.groupId});};return i.useEffect(()=>{let e=new Set,t=new Set,r=d=>{e.has(d)&&t.add(d),e.add(d);};if(p.ids.forEach(r),o.current.forEach(d=>d.forEach(r)),t.size===0)return;let l=Array.from(t,d=>`"${String(d)}"`).join(", ");console.error(`SortableList: more than one item is using the id ${l}. An id is derived from an element key and used verbatim so it survives moving between groups, which means two groups keying a child the same way collide. Key those children uniquely across the whole list.`);}),jsx(DndContext,{sensors:m,collisionDetection:e=>u()?closestCorners(e):closestCenter(e),onDragStart:I,onDragOver:D,onDragEnd:w,onDragCancel:N,children:jsx(L.Provider,{value:o,children:jsx(SortableContext,{items:p.ids,strategy:verticalListSortingStrategy,children:jsx("div",{className:a("flex flex-col gap-2",f),children:p.children})})})})}var _=Object.assign(J,{Group:H});function T({id:n,disabled:a$1=false,dragHandleLabel:f="Drag to reorder",children:o,className:c}){if(n==null)throw new Error("SortableListItem needs an id, which the enclosing SortableList or SortableList.Group derives from the element key. Render it as a direct child of one.");let{attributes:s,listeners:m,setNodeRef:p,setActivatorNodeRef:u,transform:g,transition:y,isDragging:R}=useSortable({id:n,disabled:a$1}),I={transform:CSS.Transform.toString(g),transition:y};return jsxs("div",{ref:p,style:I,className:a("flex items-center gap-2",R&&"relative z-10 opacity-80",c),children:[jsx("button",{type:"button","aria-label":f,disabled:a$1,className:"flex size-5 shrink-0 cursor-grab items-center justify-center text-gray-400 hover:text-gray-600 active:cursor-grabbing disabled:cursor-not-allowed disabled:text-gray-200",...s,...m,ref:u,children:jsx(LuGripVertical,{className:"size-4"})}),o]})}var X=T;export{H as a,_ as b,X as c};//# sourceMappingURL=chunk-PQG2NCLD.js.map
2
+ //# sourceMappingURL=chunk-PQG2NCLD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/v2/sortable-list/sortable-list.tsx"],"names":["RegistryContext","unmangleKey","key","marker","resolveChildren","children","strict","namespace","ids","child","index","SortableListItem","id","SortableListGroup","className","registryRef","setNodeRef","useDroppable","resolved","registry","jsx","SortableContext","verticalListSortingStrategy","cn","SortableListBase","onSort","dragOrigin","movedGroups","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","root","isGrouped","findGroup","found","itemIds","groupId","resolveOverGroup","overId","buildGroupedEvent","activeId","fromGroup","toGroup","fromItems","toItems","overIndex","handleDragStart","active","handleDragOver","over","event","handleDragEnd","grouped","from","to","handleDragCancel","origin","moved","seen","duplicates","check","list","DndContext","args","closestCorners","closestCenter","SortableList","SortableListItemBase","disabled","dragHandleLabel","attributes","listeners","setActivatorNodeRef","transform","transition","isDragging","useSortable","style","CSS","jsxs","LuGripVertical"],"mappings":"6aAkDA,IAAMA,CAAAA,CAAwB,CAAA,CAAA,aAAA,CAA4D,IAAI,CAAA,CAU9F,SAASC,CAAAA,CAAYC,CAAAA,CAAmC,CACtD,IAAMC,EAASD,CAAAA,EAAO,IAAA,CAAO,GAAKA,CAAAA,CAAI,WAAA,CAAY,GAAG,CAAA,CACrD,OAAOC,CAAAA,GAAW,EAAA,CAAK,IAAA,CAAQD,CAAAA,CAAe,MAAMC,CAAAA,CAAS,CAAC,CAChE,CAkDA,SAASC,CAAAA,CACPC,EACA,CAAE,MAAA,CAAAC,CAAAA,CAAQ,SAAA,CAAAC,CAAU,CAAA,CACF,CAClB,IAAMC,CAAAA,CAAoB,EAAC,CAiB3B,OAAO,CAAE,SAfc,CAAA,CAAA,QAAA,CAAS,OAAA,CAAQH,CAAQ,CAAA,CAAE,GAAA,CAAI,CAACI,EAAOC,CAAAA,GAAU,CACtE,GAAI,CAAO,CAAA,CAAA,cAAA,CAAeD,CAAK,GAAKA,CAAAA,CAAM,IAAA,GAASE,CAAAA,CAAkB,CACnE,GAAIL,CAAAA,CACF,MAAM,IAAI,KAAA,CAAM,gEAAgE,CAAA,CAElF,OAAOG,CACT,CAGA,IAAMG,CAAAA,CADMX,CAAAA,CAAYQ,CAAAA,CAAM,GAAG,IACdF,CAAAA,EAAa,IAAA,CAAO,MAAA,CAAOG,CAAK,CAAA,CAAI,CAAA,EAAG,OAAOH,CAAS,CAAC,CAAA,CAAA,EAAIG,CAAK,CAAA,CAAA,CAAA,CACpF,OAAAF,EAAI,IAAA,CAAKI,CAAE,CAAA,CAEE,CAAA,CAAA,YAAA,CAAaH,CAAAA,CAAkD,CAAE,GAAAG,CAAG,CAAC,CACpF,CAAC,CAAA,CAE4B,GAAA,CAAAJ,CAAI,CACnC,CAqCA,SAASK,CAAAA,CAAkB,CAAE,EAAA,CAAAD,EAAI,QAAA,CAAAP,GAAAA,CAAU,SAAA,CAAAS,CAAU,CAAA,CAA2B,CAC9E,IAAMC,CAAAA,CAAoB,CAAA,CAAA,UAAA,CAAWf,CAAe,CAAA,CAC9C,CAAE,WAAAgB,CAAW,CAAA,CAAIC,YAAAA,CAAa,CAAE,EAAA,CAAAL,CAAG,CAAC,CAAA,CACpCM,CAAAA,CAAWd,CAAAA,CAAgBC,GAAAA,CAAU,CAAE,MAAA,CAAQ,KAAM,SAAA,CAAWO,CAAG,CAAC,CAAA,CAE1E,GAAI,CAACG,EACH,MAAM,IAAI,KAAA,CAAM,4DAA4D,CAAA,CAO9E,OAAAA,EAAY,OAAA,CAAQ,GAAA,CAAIH,CAAAA,CAAIM,CAAAA,CAAS,GAAG,CAAA,CAElC,YAAU,IAAM,CACpB,IAAMC,CAAAA,CAAWJ,CAAAA,CAAY,OAAA,CAC7B,OAAO,IAAM,CACXI,CAAAA,CAAS,MAAA,CAAOP,CAAE,EACpB,CACF,CAAA,CAAG,CAACG,EAAaH,CAAE,CAAC,EAGlBQ,GAAAA,CAACC,eAAAA,CAAA,CAAgB,EAAA,CAAI,MAAA,CAAOT,CAAE,EAAG,KAAA,CAAOM,CAAAA,CAAS,GAAA,CAAK,QAAA,CAAUI,2BAAAA,CAC9D,QAAA,CAAAF,IAAC,KAAA,CAAA,CAAI,GAAA,CAAKJ,CAAAA,CAAY,SAAA,CAAWO,CAAAA,CAAG,qBAAA,CAAuBT,CAAS,CAAA,CACjE,QAAA,CAAAI,CAAAA,CAAS,QAAA,CACZ,CAAA,CACF,CAEJ,CA2DA,SAASM,CAAAA,CAAiB,CAAE,QAAA,CAAAnB,CAAAA,CAAU,MAAA,CAAAoB,IAAQ,SAAA,CAAAX,CAAU,CAAA,CAAsB,CAC5E,IAAMC,CAAAA,CAAoB,SAAsB,IAAI,GAAK,CAAA,CAOnDW,CAAAA,CAAmB,CAAA,CAAA,MAAA,CAIf,IAAI,EACRC,CAAAA,CAAoB,CAAA,CAAA,MAAA,CAAO,KAAK,CAAA,CAEhCC,CAAAA,CAAUC,WACdC,SAAAA,CAAUC,aAAa,CAAA,CACvBD,SAAAA,CAAUE,cAAAA,CAAgB,CAAE,iBAAkBC,2BAA4B,CAAC,CAC7E,CAAA,CAEMC,CAAAA,CAAO9B,CAAAA,CAAgBC,EAAU,CAAE,MAAA,CAAQ,KAAM,CAAC,CAAA,CAKlD8B,CAAAA,CAAY,IAAMpB,CAAAA,CAAY,OAAA,CAAQ,IAAA,CAAO,CAAA,CAE7CqB,CAAAA,CAAaxB,CAAAA,EAAmB,CACpC,IAAIyB,CAAAA,CACJ,OAAAtB,CAAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,CAACuB,CAAAA,CAASC,CAAAA,GAAY,CAC5CF,CAAAA,GAAU,MAAA,EAAaC,CAAAA,CAAQ,SAAS1B,CAAE,CAAA,GAAGyB,CAAAA,CAAQE,CAAAA,EAC3D,CAAC,CAAA,CACMF,CACT,CAAA,CAGMG,CAAAA,CAAoBC,GACxBL,CAAAA,CAAUK,CAAM,IAAM1B,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI0B,CAAM,CAAA,CAAIA,CAAAA,CAAS,QAU7DC,CAAAA,CAAoB,CAACC,CAAAA,CAAsBF,CAAAA,GAAyC,CACxF,IAAMG,EAAYR,CAAAA,CAAUO,CAAQ,CAAA,CAC9BE,CAAAA,CAAUL,CAAAA,CAAiBC,CAAM,EACvC,GAAIG,CAAAA,EAAa,IAAA,EAAQC,CAAAA,EAAW,IAAA,CAAM,OAAO,KAEjD,IAAMC,CAAAA,CAAY/B,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI6B,CAAS,GAAK,EAAC,CACnDG,CAAAA,CAAUhC,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI8B,CAAO,CAAA,EAAK,EAAC,CAC/CG,CAAAA,CAAYD,CAAAA,CAAQ,OAAA,CAAQN,CAAM,CAAA,CAExC,OAAO,CACL,EAAA,CAAIE,CAAAA,CACJ,KAAMG,CAAAA,CAAU,OAAA,CAAQH,CAAQ,CAAA,CAGhC,EAAA,CAAIK,CAAAA,EAAa,EAAIA,CAAAA,CAAYD,CAAAA,CAAQ,MAAA,CACzC,SAAA,CAAAH,CAAAA,CACA,OAAA,CAAAC,CACF,CACF,CAAA,CAEMI,CAAAA,CAAkB,CAAC,CAAE,MAAA,CAAAC,CAAO,CAAA,GAAsB,CAGtD,GAFAxB,CAAAA,CAAW,OAAA,CAAU,IAAA,CACrBC,EAAY,OAAA,CAAU,KAAA,CAClB,CAACQ,CAAAA,EAAU,CAAG,OAElB,IAAMI,CAAAA,CAAUH,CAAAA,CAAUc,CAAAA,CAAO,EAAE,CAAA,CACnC,GAAIX,GAAW,IAAA,CAAM,OAErB,IAAMD,CAAAA,CAAUvB,CAAAA,CAAY,OAAA,CAAQ,IAAIwB,CAAO,CAAA,EAAK,EAAC,CACrDb,CAAAA,CAAW,QAAU,CAAE,EAAA,CAAIwB,CAAAA,CAAO,EAAA,CAAI,KAAA,CAAOZ,CAAAA,CAAQ,QAAQY,CAAAA,CAAO,EAAE,CAAA,CAAG,OAAA,CAAAX,CAAQ,EACnF,EAEMY,CAAAA,CAAiB,CAAC,CAAE,MAAA,CAAAD,CAAAA,CAAQ,IAAA,CAAAE,CAAK,CAAA,GAAqB,CAC1D,GAAI,CAACA,CAAAA,EAAQ,CAACjB,GAAU,CAAG,OAE3B,IAAMkB,CAAAA,CAAQX,CAAAA,CAAkBQ,CAAAA,CAAO,GAAIE,CAAAA,CAAK,EAAE,CAAA,CAC9C,CAACC,CAAAA,EAASA,CAAAA,CAAM,YAAcA,CAAAA,CAAM,OAAA,GAExC1B,CAAAA,CAAY,OAAA,CAAU,IAAA,CACtBF,GAAAA,CAAO4B,CAAK,CAAA,EACd,CAAA,CAEMC,EAAgB,CAAC,CAAE,OAAAJ,CAAAA,CAAQ,IAAA,CAAAE,CAAK,CAAA,GAAoB,CACxD,IAAMG,EAAUpB,CAAAA,EAAU,CAI1B,GAHAT,CAAAA,CAAW,OAAA,CAAU,IAAA,CACrBC,EAAY,OAAA,CAAU,KAAA,CAElB,CAACyB,CAAAA,CAAM,OAEX,GAAI,CAACG,CAAAA,CAAS,CACZ,GAAIL,CAAAA,CAAO,EAAA,GAAOE,CAAAA,CAAK,GAAI,OAC3B,IAAMI,CAAAA,CAAOtB,CAAAA,CAAK,GAAA,CAAI,OAAA,CAAQgB,EAAO,EAAE,CAAA,CACjCO,CAAAA,CAAKvB,CAAAA,CAAK,GAAA,CAAI,OAAA,CAAQkB,EAAK,EAAE,CAAA,CACnC,GAAII,CAAAA,GAAS,EAAA,EAAMC,CAAAA,GAAO,GAAI,OAC9BhC,GAAAA,CAAO,CAAE,EAAA,CAAIyB,CAAAA,CAAO,GAAI,IAAA,CAAAM,CAAAA,CAAM,EAAA,CAAAC,CAAG,CAAC,CAAA,CAClC,MACF,CAEA,IAAMJ,CAAAA,CAAQX,CAAAA,CAAkBQ,CAAAA,CAAO,EAAA,CAAIE,EAAK,EAAE,CAAA,CAC9CC,CAAAA,EAAO5B,GAAAA,CAAO4B,CAAK,EACzB,EAMMK,CAAAA,CAAmB,IAAM,CAC7B,IAAMC,CAAAA,CAASjC,CAAAA,CAAW,QACpBkC,CAAAA,CAAQjC,CAAAA,CAAY,OAAA,CAI1B,GAHAD,CAAAA,CAAW,OAAA,CAAU,KACrBC,CAAAA,CAAY,OAAA,CAAU,KAAA,CAElB,CAACgC,CAAAA,EAAU,CAACC,EAAO,OAEvB,IAAMhB,CAAAA,CAAYR,CAAAA,CAAUuB,CAAAA,CAAO,EAAE,EACrC,GAAIf,CAAAA,EAAa,KAAM,OACvB,IAAME,EAAY/B,CAAAA,CAAY,OAAA,CAAQ,GAAA,CAAI6B,CAAS,CAAA,EAAK,GAExDnB,GAAAA,CAAO,CACL,EAAA,CAAIkC,CAAAA,CAAO,EAAA,CACX,IAAA,CAAMb,EAAU,OAAA,CAAQa,CAAAA,CAAO,EAAE,CAAA,CACjC,EAAA,CAAIA,CAAAA,CAAO,MACX,SAAA,CAAAf,CAAAA,CACA,OAAA,CAASe,CAAAA,CAAO,OAClB,CAAC,EACH,CAAA,CAMA,OAAM,CAAA,CAAA,SAAA,CAAU,IAAM,CACpB,IAAME,EAAO,IAAI,GAAA,CACXC,CAAAA,CAAa,IAAI,GAAA,CACjBC,CAAAA,CAASnD,GAAmB,CAC5BiD,CAAAA,CAAK,GAAA,CAAIjD,CAAE,CAAA,EAAGkD,CAAAA,CAAW,IAAIlD,CAAE,CAAA,CACnCiD,EAAK,GAAA,CAAIjD,CAAE,EACb,CAAA,CAKA,GAHAsB,CAAAA,CAAK,GAAA,CAAI,OAAA,CAAQ6B,CAAK,EACtBhD,CAAAA,CAAY,OAAA,CAAQ,OAAA,CAASuB,CAAAA,EAAYA,CAAAA,CAAQ,OAAA,CAAQyB,CAAK,CAAC,CAAA,CAE3DD,CAAAA,CAAW,IAAA,GAAS,CAAA,CAAG,OAE3B,IAAME,CAAAA,CAAO,KAAA,CAAM,IAAA,CAAKF,CAAAA,CAAalD,CAAAA,EAAO,CAAA,CAAA,EAAI,OAAOA,CAAE,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,IAAA,CAAK,IAAI,EAExE,OAAA,CAAQ,KAAA,CACN,CAAA,iDAAA,EAAoDoD,CAAI,CAAA,6MAAA,CAC1D,EACF,CAAC,CAAA,CAGC5C,GAAAA,CAAC6C,UAAAA,CAAA,CACC,OAAA,CAASrC,CAAAA,CACT,mBAAqBsC,CAAAA,EAAU/B,CAAAA,GAAcgC,cAAAA,CAAeD,CAAI,EAAIE,aAAAA,CAAcF,CAAI,CAAA,CACtF,WAAA,CAAajB,CAAAA,CACb,UAAA,CAAYE,EACZ,SAAA,CAAWG,CAAAA,CACX,YAAA,CAAcI,CAAAA,CAEd,QAAA,CAAAtC,GAAAA,CAACpB,EAAgB,QAAA,CAAhB,CAAyB,KAAA,CAAOe,CAAAA,CAI/B,QAAA,CAAAK,GAAAA,CAACC,gBAAA,CAAgB,KAAA,CAAOa,CAAAA,CAAK,GAAA,CAAK,QAAA,CAAUZ,2BAAAA,CAC1C,SAAAF,GAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAWG,CAAAA,CAAG,qBAAA,CAAuBT,CAAS,EAAI,QAAA,CAAAoB,CAAAA,CAAK,QAAA,CAAS,CAAA,CACvE,CAAA,CACF,CAAA,CACF,CAEJ,CAEA,IAAMmC,CAAAA,CAAe,MAAA,CAAO,MAAA,CAAO7C,CAAAA,CAAkB,CAAE,KAAA,CAAOX,CAAkB,CAAC,EAmBjF,SAASyD,EAAqB,CAC5B,EAAA,CAAA1D,CAAAA,CACA,QAAA,CAAA2D,GAAAA,CAAW,KAAA,CACX,gBAAAC,CAAAA,CAAkB,iBAAA,CAClB,QAAA,CAAAnE,CAAAA,CACA,SAAA,CAAAS,CACF,EAAsB,CAIpB,GAAIF,CAAAA,EAAM,IAAA,CACR,MAAM,IAAI,MACR,wJACF,CAAA,CAGF,GAAM,CACJ,UAAA,CAAA6D,CAAAA,CACA,UAAAC,CAAAA,CACA,UAAA,CAAA1D,CAAAA,CACA,mBAAA,CAAA2D,CAAAA,CACA,SAAA,CAAAC,EACA,UAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CACF,CAAA,CAAIC,WAAAA,CAAY,CAAE,EAAA,CAAAnE,CAAAA,CAAI,QAAA,CAAA2D,GAAS,CAAC,CAAA,CAE1BS,EAA6B,CACjC,SAAA,CAAWC,GAAAA,CAAI,SAAA,CAAU,QAAA,CAASL,CAAS,EAC3C,UAAA,CAAAC,CACF,CAAA,CAEA,OACEK,IAAAA,CAAC,KAAA,CAAA,CACC,IAAKlE,CAAAA,CACL,KAAA,CAAOgE,CAAAA,CACP,SAAA,CAAWzD,CAAAA,CAAG,yBAAA,CAA2BuD,GAAc,0BAAA,CAA4BhE,CAAS,CAAA,CAE5F,QAAA,CAAA,CAAAM,GAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,YAAA,CAAYoD,CAAAA,CACZ,QAAA,CAAUD,GAAAA,CACV,SAAA,CAAU,2KACT,GAAGE,CAAAA,CACH,GAAGC,CAAAA,CACJ,GAAA,CAAKC,CAAAA,CAEL,SAAAvD,GAAAA,CAAC+D,cAAAA,CAAA,CAAe,SAAA,CAAU,QAAA,CAAS,CAAA,CACrC,EACC9E,CAAAA,CAAAA,CACH,CAEJ,CAUA,IAAMM,CAAAA,CAAwE2D","file":"chunk-PQG2NCLD.js","sourcesContent":["import * as React from 'react';\nimport type { DragEndEvent, DragOverEvent, DragStartEvent } from '@dnd-kit/core';\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n closestCorners,\n useDroppable,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { LuGripVertical } from 'react-icons/lu';\nimport { cn } from '@/lib/utils';\n\n/**\n * Identifier for a sortable item or group. Structurally identical to dnd-kit's\n * `UniqueIdentifier`, aliased here so no dnd-kit type crosses this module's\n * public API — consumers never import from `@dnd-kit/*` to type an `onSort`.\n */\nexport type SortableId = string | number;\n\n/**\n * Where a sortable item moved, and what it moved between. `from` is the item's\n * index immediately before this move, so `arrayMove(prev, from, to)` is always\n * the right way to apply it. The group fields are only set on grouped lists.\n */\nexport type SortEvent = {\n /** The item's id, derived from its React key. */\n id: SortableId;\n from: number;\n to: number;\n fromGroup?: SortableId;\n toGroup?: SortableId;\n};\n\n/**\n * Ordered item ids per group. Written by each `SortableListGroup` as it renders\n * and read only inside drag handlers, which is what lets a group sit anywhere in\n * the consumer's markup instead of having to be a direct child.\n */\ntype GroupRegistry = Map<SortableId, SortableId[]>;\n\nconst RegistryContext = React.createContext<React.MutableRefObject<GroupRegistry> | null>(null);\n\n/**\n * Recovers the key the consumer wrote from the one `React.Children.toArray`\n * hands back. `toArray` rewrites explicit keys with an internal prefix —\n * `key=\"name\"` becomes `.$name`, and a key inside a nested array becomes\n * `.1:$name` — so everything through the last `$` is React's and what follows is\n * the consumer's. A child with no explicit key gets a purely positional key\n * (`.0`) with no `$` at all, which is the signal to fall back to its index.\n */\nfunction unmangleKey(key: string | null): string | null {\n const marker = key == null ? -1 : key.lastIndexOf('$');\n return marker === -1 ? null : (key as string).slice(marker + 1);\n}\n\n/* `resolveChildren` and the components below it are mutually recursive — each\n component resolves its children through `resolveChildren`, and `resolveChildren`\n has to recognise `SortableListItem` among the children it's handed. They only\n ever reach each other during render, long after the module has finished\n evaluating, so the cycle never bites; there's just no ordering that satisfies\n the rule. */\n/* eslint-disable no-use-before-define */\n\ntype ResolvedChildren = {\n /** `children`, with a derived `id` injected into every `SortableListItem`. */\n children: React.ReactNode[];\n /** Ordered ids of the sortable items among those children. */\n ids: SortableId[];\n};\n\n/**\n * Pairs each sortable child with the id dnd-kit tracks it by. Items never carry\n * one themselves — it's derived from the React key every child in an array needs\n * anyway, so a plain `string[]` can be dropped straight in:\n *\n * ```tsx\n * {labels.map((label) => <SortableListItem key={label}>{label}</SortableListItem>)}\n * ```\n *\n * The key is used verbatim, so an id the consumer already has flows through\n * `onSort` untouched by keying the item with it. Unkeyed children fall back to\n * their index.\n *\n * Keys and not indices: a cross-group drag commits its move optimistically in\n * `onDragOver`, mid-drag. A positional id would shift under that re-render and\n * the `active.id` dnd-kit captured at drag start would stop resolving before the\n * drop ever landed. For the same reason a key-derived id is never scoped to its\n * group — an item's identity has to survive moving between groups. Two groups\n * that key a child the same way therefore collide, and `SortableList` says so on\n * the console when it spots one.\n *\n * `strict` throws on a child that isn't a `SortableListItem` — right for a\n * group, whose contract is that its children are items. The root is lenient\n * because a grouped `SortableList` is expected to contain the consumer's own\n * layout markup, which is simply not sortable at that level. A\n * `SortableList.Group` falls out of that same check: it isn't an item, so it's\n * skipped rather than mistaken for one when a group sits directly under the root.\n *\n * `namespace` scopes the positional fallback to a group, so two groups' unkeyed\n * children don't both come out as `0`. Only the fallback needs it: unkeyed\n * children are static markup rather than a moving array, so there's no\n * cross-group identity to preserve.\n */\nfunction resolveChildren(\n children: React.ReactNode,\n { strict, namespace }: { strict: boolean; namespace?: SortableId },\n): ResolvedChildren {\n const ids: SortableId[] = [];\n\n const resolved = React.Children.toArray(children).map((child, index) => {\n if (!React.isValidElement(child) || child.type !== SortableListItem) {\n if (strict) {\n throw new Error('SortableList.Group children must be SortableListItem elements.');\n }\n return child;\n }\n\n const key = unmangleKey(child.key);\n const id = key ?? (namespace == null ? String(index) : `${String(namespace)}/${index}`);\n ids.push(id);\n\n return React.cloneElement(child as React.ReactElement<{ id?: SortableId }>, { id });\n });\n\n return { children: resolved, ids };\n}\n\n/* eslint-enable no-use-before-define */\n\nexport type SortableListGroupProps = {\n /** Identifies this group in `onSort`, and makes it a drop target while empty. */\n id: SortableId;\n /** `SortableListItem` children. Each needs a React `key`. */\n children: React.ReactNode;\n className?: string;\n};\n\n/**\n * One droppable group of a `SortableList`. Owns its own `SortableContext` and\n * drop target so an empty group stays a valid place to drop, and registers its\n * items with the enclosing `SortableList` so it can be nested at any depth in\n * the consumer's own markup:\n *\n * ```tsx\n * <SortableList onSort={handleSort}>\n * <div className=\"flex gap-4\">\n * <div className=\"flex-1\">\n * <Label>Backlog</Label>\n * <SortableList.Group id=\"backlog\">{...}</SortableList.Group>\n * </div>\n * <div className=\"flex-1\">\n * <Label>In progress</Label>\n * <SortableList.Group id=\"inProgress\">{...}</SortableList.Group>\n * </div>\n * </div>\n * </SortableList>\n * ```\n *\n * Headless apart from stacking its items — bring your own border, padding and\n * heading. Give a group that can be empty a `min-h-*` via `className`, or it\n * collapses to nothing and there's no area left to drop onto.\n */\nfunction SortableListGroup({ id, children, className }: SortableListGroupProps) {\n const registryRef = React.useContext(RegistryContext);\n const { setNodeRef } = useDroppable({ id });\n const resolved = resolveChildren(children, { strict: true, namespace: id });\n\n if (!registryRef) {\n throw new Error('SortableList.Group must be rendered inside a SortableList.');\n }\n\n // Registered during render, not in an effect: the parent only ever reads this\n // from a drag handler, which is always after children have rendered, so there\n // is no window where the structure is stale. Writing the same ids twice (e.g.\n // StrictMode's double render) is idempotent.\n registryRef.current.set(id, resolved.ids);\n\n React.useEffect(() => {\n const registry = registryRef.current;\n return () => {\n registry.delete(id);\n };\n }, [registryRef, id]);\n\n return (\n <SortableContext id={String(id)} items={resolved.ids} strategy={verticalListSortingStrategy}>\n <div ref={setNodeRef} className={cn('flex flex-col gap-2', className)}>\n {resolved.children}\n </div>\n </SortableContext>\n );\n}\n\nexport type SortableListProps = {\n /**\n * `SortableListItem` children for a single list, or `SortableList.Group`\n * children — nested in whatever markup you like — to let items drag between\n * groups. Both share the same `DndContext`, sensors and `onSort`.\n */\n children: React.ReactNode;\n /**\n * Called with a `SortEvent` describing the move. `from` is the item's index\n * immediately before it, so applying one is always the same one-liner:\n *\n * ```tsx\n * onSort={({ from, to }) => setItems((prev) => arrayMove(prev, from, to))}\n * ```\n *\n * `fromGroup`/`toGroup` are only set when using `SortableList.Group`.\n *\n * For a single list this fires once, on drop. Grouped lists are optimistic:\n * crossing into another group fires immediately — mid-drag, before any drop —\n * so the target group can open a gap, and the drop then fires again with the\n * final index. Cancelling a drag (Escape) fires once more, moving the item\n * back to where it started and undoing the optimistic move.\n *\n * So a grouped `onSort` can fire several times per drag and must be safe to\n * apply repeatedly. Treat it as local state; if it also persists, debounce or\n * write from a `useEffect` on the settled list rather than from here.\n */\n onSort: (event: SortEvent) => void;\n className?: string;\n};\n\n/**\n * SortableList — the whole-list-owns-DnD primitive for v2 (POPS-1084).\n *\n * Owns `DndContext`, sensors and the reorder math so consumers only supply\n * children and an `onSort` callback — no dnd-kit imports required.\n *\n * Items don't bring an id — one is derived from the React key every child in an\n * array needs anyway, so a plain `string[]` works as-is:\n *\n * ```tsx\n * <SortableList onSort={({ from, to }) => setLabels((prev) => arrayMove(prev, from, to))}>\n * {labels.map((label) => (\n * <SortableListItem key={label}>{label}</SortableListItem>\n * ))}\n * </SortableList>\n * ```\n *\n * Key by an id the item already has and that id is what comes back on the\n * `SortEvent`, ready to read off when the reorder has to be persisted by id:\n *\n * ```tsx\n * <SortableListItem key={rule.id}>\n * <Criteria onRemove={() => removeRule(rule.id)}>...</Criteria>\n * </SortableListItem>\n * ```\n */\nfunction SortableListBase({ children, onSort, className }: SortableListProps) {\n const registryRef = React.useRef<GroupRegistry>(new Map());\n\n // Where the dragged item sat when the drag began, so a cancelled drag can be\n // put back. Grouped drags move the item across groups optimistically in\n // `onDragOver` — that's what opens a gap in the target group — and dnd-kit\n // fires either `onDragEnd` or `onDragCancel`, never both. Without an origin to\n // replay, pressing Escape mid-drag would leave the optimistic move applied.\n const dragOrigin = React.useRef<{\n id: SortableId;\n index: number;\n groupId: SortableId;\n } | null>(null);\n const movedGroups = React.useRef(false);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n const root = resolveChildren(children, { strict: false });\n\n // Grouped-ness is resolved per drag rather than per render: groups register as\n // they render, so by the time any of these run the registry is populated. That\n // keeps one render path for both shapes — no branch, no flicker.\n const isGrouped = () => registryRef.current.size > 0;\n\n const findGroup = (id: SortableId) => {\n let found: SortableId | undefined;\n registryRef.current.forEach((itemIds, groupId) => {\n if (found === undefined && itemIds.includes(id)) found = groupId;\n });\n return found;\n };\n\n /** The group an `over` id belongs to, whether it's an item or an empty group itself. */\n const resolveOverGroup = (overId: SortableId) =>\n findGroup(overId) ?? (registryRef.current.has(overId) ? overId : undefined);\n\n /**\n * The move `active` would make landing on `over`, read from the registry as it\n * stands right now. Both indices are resolved at call time, which is what\n * makes `from` mean \"immediately before this move\" even on the drop that\n * follows an optimistic cross-group move — by then the item already sits in\n * the target group, so both groups come back equal and the consumer applies a\n * plain within-group reorder.\n */\n const buildGroupedEvent = (activeId: SortableId, overId: SortableId): SortEvent | null => {\n const fromGroup = findGroup(activeId);\n const toGroup = resolveOverGroup(overId);\n if (fromGroup == null || toGroup == null) return null;\n\n const fromItems = registryRef.current.get(fromGroup) ?? [];\n const toItems = registryRef.current.get(toGroup) ?? [];\n const overIndex = toItems.indexOf(overId);\n\n return {\n id: activeId,\n from: fromItems.indexOf(activeId),\n // Dropping on the group itself rather than one of its items — an empty\n // group, or the space below the last row — appends.\n to: overIndex >= 0 ? overIndex : toItems.length,\n fromGroup,\n toGroup,\n };\n };\n\n const handleDragStart = ({ active }: DragStartEvent) => {\n dragOrigin.current = null;\n movedGroups.current = false;\n if (!isGrouped()) return;\n\n const groupId = findGroup(active.id);\n if (groupId == null) return;\n\n const itemIds = registryRef.current.get(groupId) ?? [];\n dragOrigin.current = { id: active.id, index: itemIds.indexOf(active.id), groupId };\n };\n\n const handleDragOver = ({ active, over }: DragOverEvent) => {\n if (!over || !isGrouped()) return;\n\n const event = buildGroupedEvent(active.id, over.id);\n if (!event || event.fromGroup === event.toGroup) return;\n\n movedGroups.current = true;\n onSort(event);\n };\n\n const handleDragEnd = ({ active, over }: DragEndEvent) => {\n const grouped = isGrouped();\n dragOrigin.current = null;\n movedGroups.current = false;\n\n if (!over) return;\n\n if (!grouped) {\n if (active.id === over.id) return;\n const from = root.ids.indexOf(active.id);\n const to = root.ids.indexOf(over.id);\n if (from === -1 || to === -1) return;\n onSort({ id: active.id, from, to });\n return;\n }\n\n const event = buildGroupedEvent(active.id, over.id);\n if (event) onSort(event);\n };\n\n // Moving the item from wherever it currently sits back to the origin reverses\n // whatever `onDragOver` committed, so consumers get their item put back\n // without having to write a second, inverse reducer. No-op when the drag never\n // left its group, since nothing was committed to undo.\n const handleDragCancel = () => {\n const origin = dragOrigin.current;\n const moved = movedGroups.current;\n dragOrigin.current = null;\n movedGroups.current = false;\n\n if (!origin || !moved) return;\n\n const fromGroup = findGroup(origin.id);\n if (fromGroup == null) return;\n const fromItems = registryRef.current.get(fromGroup) ?? [];\n\n onSort({\n id: origin.id,\n from: fromItems.indexOf(origin.id),\n to: origin.index,\n fromGroup,\n toGroup: origin.groupId,\n });\n };\n\n // React already warns about duplicate keys within one array, but two groups\n // are two arrays and nothing catches a key they share — dnd-kit would then be\n // tracking two items under one id. Deliberately has no dependency array: it\n // has to re-check after every render, once each group has registered.\n React.useEffect(() => {\n const seen = new Set<SortableId>();\n const duplicates = new Set<SortableId>();\n const check = (id: SortableId) => {\n if (seen.has(id)) duplicates.add(id);\n seen.add(id);\n };\n\n root.ids.forEach(check);\n registryRef.current.forEach((itemIds) => itemIds.forEach(check));\n\n if (duplicates.size === 0) return;\n\n const list = Array.from(duplicates, (id) => `\"${String(id)}\"`).join(', ');\n // eslint-disable-next-line no-console\n console.error(\n `SortableList: more than one item is using the id ${list}. An id is derived from an element key and used verbatim so it survives moving between groups, which means two groups keying a child the same way collide. Key those children uniquely across the whole list.`,\n );\n });\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={(args) => (isGrouped() ? closestCorners(args) : closestCenter(args))}\n onDragStart={handleDragStart}\n onDragOver={handleDragOver}\n onDragEnd={handleDragEnd}\n onDragCancel={handleDragCancel}\n >\n <RegistryContext.Provider value={registryRef}>\n {/* Inert when grouped: the consumer's wrapper markup has no ids, so this\n resolves to an empty item list and each group's own nested\n `SortableContext` is the one its items bind to. */}\n <SortableContext items={root.ids} strategy={verticalListSortingStrategy}>\n <div className={cn('flex flex-col gap-2', className)}>{root.children}</div>\n </SortableContext>\n </RegistryContext.Provider>\n </DndContext>\n );\n}\n\nconst SortableList = Object.assign(SortableListBase, { Group: SortableListGroup });\n\nexport type SortableListItemProps = {\n /** Stops this item being picked up — its handle goes inert and is marked `aria-disabled`. */\n disabled?: boolean;\n /** Accessible label for the drag handle. Defaults to a generic label — set a specific one when several items are on screen at once. */\n dragHandleLabel?: string;\n children: React.ReactNode;\n className?: string;\n};\n\n/**\n * The `id` the enclosing list injects during render. Not part of the public\n * API: ids come from element keys, and `SortableListItem` is exported below as\n * a component taking `SortableListItemProps` alone, so a consumer setting one\n * is a type error rather than a prop that silently gets overwritten here.\n */\ntype InjectedItemProps = SortableListItemProps & { id?: SortableId };\n\nfunction SortableListItemBase({\n id,\n disabled = false,\n dragHandleLabel = 'Drag to reorder',\n children,\n className,\n}: InjectedItemProps) {\n // Injected by the enclosing list during render, so the only way to get here\n // without one is to sit somewhere it can't see: nested inside the consumer's\n // own markup rather than directly under a `SortableList`/`SortableList.Group`.\n if (id == null) {\n throw new Error(\n 'SortableListItem needs an id, which the enclosing SortableList or SortableList.Group derives from the element key. Render it as a direct child of one.',\n );\n }\n\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id, disabled });\n\n const style: React.CSSProperties = {\n transform: CSS.Transform.toString(transform),\n transition,\n };\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cn('flex items-center gap-2', isDragging && 'relative z-10 opacity-80', className)}\n >\n <button\n type=\"button\"\n aria-label={dragHandleLabel}\n disabled={disabled}\n className=\"flex size-5 shrink-0 cursor-grab items-center justify-center text-gray-400 hover:text-gray-600 active:cursor-grabbing disabled:cursor-not-allowed disabled:text-gray-200\"\n {...attributes}\n {...listeners}\n ref={setActivatorNodeRef}\n >\n <LuGripVertical className=\"size-4\" />\n </button>\n {children}\n </div>\n );\n}\n\n/**\n * SortableListItem — renders the ⋮⋮ drag handle and wires the row's dnd-kit\n * transform/listeners, so `children` (e.g. `Criteria`) stays presentation-only\n * and has no idea it's draggable.\n *\n * Annotated with the public props rather than inferred, so the `id` the\n * enclosing list injects stays out of the type consumers see.\n */\nconst SortableListItem: (props: SortableListItemProps) => React.JSX.Element = SortableListItemBase;\n\nexport { SortableList, SortableListGroup, SortableListItem };\n"]}
@@ -1,2 +1,2 @@
1
- import {a as a$2}from'./chunk-QXJCAXNP.js';import {a,b,c}from'./chunk-ICTICKOW.js';import {a as a$1}from'./chunk-K6BJQE2V.js';import {jsxs,jsx}from'react/jsx-runtime';var h=({active:a$3=false})=>jsxs(a,{children:[jsxs(b,{children:[jsx("img",{src:`${a$1}/illustrations/card/laptop-desktop.svg`,alt:"laptop",width:"290",height:"290"}),jsx(a$2,{active:a$3,children:jsx("img",{src:`${a$1}/illustrations/card/laptop-desktop-fill.svg`,alt:"",width:"290",height:"290"})})]}),jsxs(c,{children:[jsx("img",{src:`${a$1}/illustrations/card/laptop-mobile.svg`,alt:"laptop",width:"358",height:"112"}),jsx(a$2,{active:a$3,children:jsx("img",{src:`${a$1}/illustrations/card/laptop-mobile-fill.svg`,alt:"",width:"358",height:"112"})})]})]});export{h as a};//# sourceMappingURL=chunk-MESFO57T.js.map
2
- //# sourceMappingURL=chunk-MESFO57T.js.map
1
+ import {a,b,c}from'./chunk-ICTICKOW.js';import {a as a$2}from'./chunk-QXJCAXNP.js';import {a as a$1}from'./chunk-K6BJQE2V.js';import {jsxs,jsx}from'react/jsx-runtime';var h=({active:a$3=false})=>jsxs(a,{children:[jsxs(b,{children:[jsx("img",{src:`${a$1}/illustrations/card/laptop-desktop.svg`,alt:"laptop",width:"290",height:"290"}),jsx(a$2,{active:a$3,children:jsx("img",{src:`${a$1}/illustrations/card/laptop-desktop-fill.svg`,alt:"",width:"290",height:"290"})})]}),jsxs(c,{children:[jsx("img",{src:`${a$1}/illustrations/card/laptop-mobile.svg`,alt:"laptop",width:"358",height:"112"}),jsx(a$2,{active:a$3,children:jsx("img",{src:`${a$1}/illustrations/card/laptop-mobile-fill.svg`,alt:"",width:"358",height:"112"})})]})]});export{h as a};//# sourceMappingURL=chunk-QA5JXTX4.js.map
2
+ //# sourceMappingURL=chunk-QA5JXTX4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Card/illustrations/Laptop.tsx"],"names":["Laptop","active","jsxs","IllustrationContainer","DesktopIllustration","jsx","ILLUSTRATIONS_BASE_URL","FillContainer_default","MobileIllustration"],"mappings":"uKAQO,IAAMA,CAAAA,CAAS,CAAC,CAAE,MAAA,CAAAC,IAAS,KAAM,CAAA,GACtCC,KAACC,CAAAA,CAAA,CACC,UAAAD,IAAAA,CAACE,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,GAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,GAAsB,CAAA,sCAAA,CAAA,CAC9B,GAAA,CAAI,SACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACAD,IAACE,GAAAA,CAAA,CAAc,OAAQN,GAAAA,CACrB,QAAA,CAAAI,IAAC,KAAA,CAAA,CACC,GAAA,CAAK,GAAGC,GAAsB,CAAA,2CAAA,CAAA,CAC9B,IAAI,EAAA,CACJ,KAAA,CAAM,MACN,MAAA,CAAO,KAAA,CACT,EACF,CAAA,CAAA,CACF,CAAA,CACAJ,KAACM,CAAAA,CAAA,CACC,UAAAH,GAAAA,CAAC,KAAA,CAAA,CACC,IAAK,CAAA,EAAGC,GAAsB,wCAC9B,GAAA,CAAI,QAAA,CACJ,MAAM,KAAA,CACN,MAAA,CAAO,MACT,CAAA,CAEAD,GAAAA,CAACE,IAAA,CAAc,MAAA,CAAQN,IACrB,QAAA,CAAAI,GAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,GAAsB,CAAA,0CAAA,CAAA,CAC9B,GAAA,CAAI,GACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACF,GACF,CAAA,CAAA,CACF","file":"chunk-MESFO57T.js","sourcesContent":["import { ILLUSTRATIONS_BASE_URL } from '../../constants';\nimport FillContainer from '../../Form/Checkbox/shared/FillContainer';\nimport {\n DesktopIllustration,\n IllustrationContainer,\n MobileIllustration,\n} from '../../Form/Checkbox/shared/style';\n\nexport const Laptop = ({ active = false }: { active?: boolean }) => (\n <IllustrationContainer>\n <DesktopIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-desktop.svg`}\n alt=\"laptop\"\n width=\"290\"\n height=\"290\"\n />\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-desktop-fill.svg`}\n alt=\"\"\n width=\"290\"\n height=\"290\"\n />\n </FillContainer>\n </DesktopIllustration>\n <MobileIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-mobile.svg`}\n alt=\"laptop\"\n width=\"358\"\n height=\"112\"\n />\n\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-mobile-fill.svg`}\n alt=\"\"\n width=\"358\"\n height=\"112\"\n />\n </FillContainer>\n </MobileIllustration>\n </IllustrationContainer>\n);\n"]}
1
+ {"version":3,"sources":["../src/Card/illustrations/Laptop.tsx"],"names":["Laptop","active","jsxs","IllustrationContainer","DesktopIllustration","jsx","ILLUSTRATIONS_BASE_URL","FillContainer_default","MobileIllustration"],"mappings":"uKAQO,IAAMA,CAAAA,CAAS,CAAC,CAAE,MAAA,CAAAC,IAAS,KAAM,CAAA,GACtCC,KAACC,CAAAA,CAAA,CACC,UAAAD,IAAAA,CAACE,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAC,GAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,GAAsB,CAAA,sCAAA,CAAA,CAC9B,GAAA,CAAI,SACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACAD,IAACE,GAAAA,CAAA,CAAc,OAAQN,GAAAA,CACrB,QAAA,CAAAI,IAAC,KAAA,CAAA,CACC,GAAA,CAAK,GAAGC,GAAsB,CAAA,2CAAA,CAAA,CAC9B,IAAI,EAAA,CACJ,KAAA,CAAM,MACN,MAAA,CAAO,KAAA,CACT,EACF,CAAA,CAAA,CACF,CAAA,CACAJ,KAACM,CAAAA,CAAA,CACC,UAAAH,GAAAA,CAAC,KAAA,CAAA,CACC,IAAK,CAAA,EAAGC,GAAsB,wCAC9B,GAAA,CAAI,QAAA,CACJ,MAAM,KAAA,CACN,MAAA,CAAO,MACT,CAAA,CAEAD,GAAAA,CAACE,IAAA,CAAc,MAAA,CAAQN,IACrB,QAAA,CAAAI,GAAAA,CAAC,OACC,GAAA,CAAK,CAAA,EAAGC,GAAsB,CAAA,0CAAA,CAAA,CAC9B,GAAA,CAAI,GACJ,KAAA,CAAM,KAAA,CACN,OAAO,KAAA,CACT,CAAA,CACF,GACF,CAAA,CAAA,CACF","file":"chunk-QA5JXTX4.js","sourcesContent":["import { ILLUSTRATIONS_BASE_URL } from '../../constants';\nimport FillContainer from '../../Form/Checkbox/shared/FillContainer';\nimport {\n DesktopIllustration,\n IllustrationContainer,\n MobileIllustration,\n} from '../../Form/Checkbox/shared/style';\n\nexport const Laptop = ({ active = false }: { active?: boolean }) => (\n <IllustrationContainer>\n <DesktopIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-desktop.svg`}\n alt=\"laptop\"\n width=\"290\"\n height=\"290\"\n />\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-desktop-fill.svg`}\n alt=\"\"\n width=\"290\"\n height=\"290\"\n />\n </FillContainer>\n </DesktopIllustration>\n <MobileIllustration>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-mobile.svg`}\n alt=\"laptop\"\n width=\"358\"\n height=\"112\"\n />\n\n <FillContainer active={active}>\n <img\n src={`${ILLUSTRATIONS_BASE_URL}/illustrations/card/laptop-mobile-fill.svg`}\n alt=\"\"\n width=\"358\"\n height=\"112\"\n />\n </FillContainer>\n </MobileIllustration>\n </IllustrationContainer>\n);\n"]}
@@ -1,2 +1,2 @@
1
- import {a as a$4,d,c as c$1,g,i}from'./chunk-MGE3NPBN.js';import {a as a$3}from'./chunk-WEDRHQPW.js';import {a as a$2,b,c}from'./chunk-QXJK4OO3.js';import {b as b$2}from'./chunk-SFZYM6JO.js';import {b as b$1}from'./chunk-6ZOLJV4E.js';import {a as a$1,b as b$3}from'./chunk-7QWN4Z56.js';import {a}from'./chunk-YTIIAU4W.js';import {useState,useRef,useEffect,useMemo}from'react';import {LuCalendar,LuZoomOut,LuZoomIn,LuRefreshCcw}from'react-icons/lu';import w from'dayjs';import Te from'dayjs/plugin/customParseFormat.js';import {useIMask}from'react-imask';import {isMatch}from'react-day-picker';import {jsxs,jsx}from'react/jsx-runtime';import ve from'react-easy-crop';import {DateTime,Duration}from'luxon';function fe(a){let o=a.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function ge(a){if(a.length!==10)return;let o=a.split("/");if(o.length!==3||o[2].length!==4)return;let e=parseInt(o[0],10),n=parseInt(o[1],10),t=parseInt(o[2],10);if(Number.isNaN(e)||Number.isNaN(n)||Number.isNaN(t))return;let l=new Date(t,e-1,n);if(!(l.getFullYear()!==t||l.getMonth()!==e-1||l.getDate()!==n))return l}function De({className:a$3,wrapperClassName:o,value:e,onChange:n,disabled:t=false,calendarProps:l,placeholder:b$3="MM/DD/YYYY",variant:g}){let[c$1,u]=useState(false),[v,h]=useState(e),[I,i]=useState(e?w(e).format("MM/DD/YYYY"):""),s=useRef(e?w(e).format("MM/DD/YYYY"):"");useEffect(()=>{let r=e?w(e).format("MM/DD/YYYY"):"";r!==s.current&&(s.current=r,i(r),e&&h(e));},[e]);let D=r=>{let f=fe(r.target.value);i(f);let T=ge(f);T?(s.current=f,n?.(T)):f===""&&(s.current="",n?.(void 0));},d=r=>{r.key==="ArrowDown"&&(r.preventDefault(),u(true)),!/[0-9/]/.test(r.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(r.key)&&!r.metaKey&&!r.ctrlKey&&r.preventDefault();};return jsxs("div",{className:a("relative w-full",o),children:[jsx("input",{type:"text","data-slot":"input",className:a(a$1({variant:g}),"pr-10",a$3),value:I,placeholder:b$3,onChange:D,onKeyDown:d,disabled:t}),jsxs(a$2,{open:!t&&c$1,onOpenChange:u,children:[jsx(b,{asChild:true,children:jsx(b$1,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:t,"aria-label":"Select date",type:"button",children:jsx(LuCalendar,{})})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsx(b$2,{mode:"single",selected:e,month:v,onMonthChange:h,onSelect:r=>{let f=r?w(r).format("MM/DD/YYYY"):"";s.current=f,i(f),n?.(r),u(false);},...l})})]})]})}var ye=({alt:a$1,className:o="",containerClassName:e="",imagePreview:n=void 0,cropper:t=void 0})=>{let[l,b]=useState(false),g=!n||!l,c=!!t;return jsxs("div",{className:a("flex max-w-[386px] flex-col",o),children:[jsxs("div",{className:a("relative h-60 rounded-md border",e),children:[n&&c?jsx(ve,{image:n,crop:t.crop,zoom:t.zoom,aspect:t.aspect,objectFit:"contain",onCropChange:t.setCrop,onZoomChange:t.setZoom,onCropComplete:t.onCropComplete,onMediaLoaded:()=>b(true),showGrid:false}):n&&jsx("img",{alt:a$1,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>b(true),draggable:false}),g&&jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&c&&jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxs("div",{className:"flex w-full items-center gap-3",children:[jsx(b$1,{"aria-label":"zoom out",onClick:()=>t.setZoom(Math.max(t.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsx(LuZoomOut,{})}),jsx(a$3,{value:[t.zoom],min:1,max:3,step:.01,onValueChange:u=>t.setZoom(u[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsx(b$1,{"aria-label":"zoom in",onClick:()=>t.setZoom(Math.min(t.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsx(LuZoomIn,{})})]}),jsxs(b$1,{onClick:t.reset,variant:"ghost",className:"h-8 p-2",children:[jsx(LuRefreshCcw,{}),"Reset"]})]})]})};var W="00:00",ee="24:00",te=a=>DateTime.fromFormat(a,"HH:mm").isValid,oe=({startTime:a$1=W,endTime:o=ee,interval:e=30,onChange:n=void 0,className:t="",placeholder:l="Select one",size:b="default",portal:g$1=true,triggerIcon:c,getSublabel:u,...v})=>{te(a$1)||(console.error(`Invalid startTime: ${a$1}`),a$1=W),te(o)||(console.error(`Invalid endTime: ${o}`),o=ee);let h=useMemo(()=>{let i=DateTime.fromFormat(o,"HH:mm"),s=Duration.fromObject({minutes:e}),D=[],d=DateTime.fromFormat(a$1,"HH:mm");for(;d<=i;){let r=d.toFormat("HH:mm");r==="00:00"&&d.equals(i)&&(r="24:00"),D.push({label:d.toFormat("h:mm a"),value:{hour:d.toFormat("HH"),min:d.toFormat("mm"),raw:r,formatted:d.toFormat("h:mm a")}}),d=d.plus(s);}return D},[a$1,o,e]);return jsxs(a$4,{onValueChange:i=>{let s=h.find(D=>D.value.raw===i);s&&n?.(s);},...v,children:[jsx(d,{className:a("max-w-[240px] md:w-[150px]",t),size:b,triggerIcon:c,children:jsx(c$1,{placeholder:l})}),jsx(g,{position:"popper",className:"max-h-90",portal:g$1,children:h.map(i$1=>{let s=u?.(i$1);return jsx(i,{className:a(s?"h-auto py-2":"h-10"),value:i$1.value.raw,sublabel:s,children:i$1.label},i$1.value.raw)})})]})},Qe=oe;w.extend(Te);var ae="MM/DD/YYYY",Fe="00/00/0000",X=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function M(a){return a?w(a).format(ae):""}function we({className:a$3="",wrapperClassName:o="",value:e=void 0,onChange:n=void 0,disabled:t=false,calendarProps:l=void 0,placeholder:b$1,inputProps:g=void 0,showCalendarIcon:c$1=true,editable:u=false}){let[v,h]=useState(false),I=b$1??(u?ae:"Pick a date"),[i,s]=useState(void 0),D=useRef(e);e!==D.current&&(D.current=e,i!==void 0&&s(void 0));let d=i??e,r=p=>l?.disabled?!isMatch(p,l.disabled):true,f=useRef(n);f.current=n;let T=useRef(r);T.current=r;let{ref:q,setValue:E}=useIMask({mask:Fe,lazy:true,overwrite:false},{onComplete:p=>{let C=w(p,X,true);C.isValid()&&T.current(C.toDate())&&f.current?.(C.toDate());}}),ie=p=>{n?.(p),E(M(p)),h(false);},se=p=>{let C=p.clipboardData.getData("text").trim(),H=w(C,X,true);if(H.isValid()&&r(H.toDate())){p.preventDefault();let J=H.toDate();n?.(J),E(M(J));}},pe=()=>{E(M(e));},le=()=>{let p=q.current?.value??"";if(p===""){e!==void 0&&n?.(void 0);return}let C=w(p,X,true);C.isValid()&&r(C.toDate())&&n?.(C.toDate()),E(M(e));},me=a(a$1(),c$1&&"pl-10",v?"border-dark-green":"",a$3);return jsxs(a$2,{open:!t&&v,onOpenChange:h,children:[jsx(b,{asChild:true,children:jsxs("div",{className:a("relative flex w-full items-center rounded-md",o),children:[u?jsx("input",{ref:q,defaultValue:M(e),className:me,placeholder:I,disabled:t,onFocus:pe,onPaste:se,onBlur:p=>{le(),g?.onBlur?.(p);}}):jsx(b$3,{className:a(c$1&&"pl-10",v?"border-dark-green":"",a$3),...g,value:M(e),placeholder:I,readOnly:true,disabled:t}),c$1&&jsx("div",{className:a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",t?"text-gray-400":"cursor-pointer text-black"),children:jsx(LuCalendar,{size:16})})]})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:u?p=>p.preventDefault():void 0,children:jsx(b$2,{mode:"single",selected:e?w(e).toDate():void 0,onSelect:ie,...u?{month:d,onMonthChange:s}:{},...l})})]})}export{we as a,De as b,ye as c,oe as d,Qe as e};//# sourceMappingURL=chunk-W6OLZGJC.js.map
2
- //# sourceMappingURL=chunk-W6OLZGJC.js.map
1
+ import {a as a$4,d,c as c$1,g,i}from'./chunk-MGE3NPBN.js';import {a as a$3}from'./chunk-WEDRHQPW.js';import {a as a$2,b,c}from'./chunk-QXJK4OO3.js';import {b as b$2}from'./chunk-SFZYM6JO.js';import {b as b$1}from'./chunk-6ZOLJV4E.js';import {a as a$1,b as b$3}from'./chunk-7QWN4Z56.js';import {a}from'./chunk-YTIIAU4W.js';import {useState,useRef,useEffect,useMemo}from'react';import {LuCalendar,LuZoomOut,LuZoomIn,LuRefreshCcw}from'react-icons/lu';import M from'dayjs';import Te from'dayjs/plugin/customParseFormat.js';import {useIMask}from'react-imask';import {isMatch}from'react-day-picker';import {jsxs,jsx}from'react/jsx-runtime';import Se from'react-easy-crop';import {DateTime,Duration}from'luxon';function fe(a){let o=a.replace(/\D/g,"").slice(0,8);return o.length<=2?o:o.length<=4?`${o.slice(0,2)}/${o.slice(2)}`:`${o.slice(0,2)}/${o.slice(2,4)}/${o.slice(4)}`}function ge(a){if(a.length!==10)return;let o=a.split("/");if(o.length!==3||o[2].length!==4)return;let e=parseInt(o[0],10),n=parseInt(o[1],10),t=parseInt(o[2],10);if(Number.isNaN(e)||Number.isNaN(n)||Number.isNaN(t))return;let l=new Date(t,e-1,n);if(!(l.getFullYear()!==t||l.getMonth()!==e-1||l.getDate()!==n))return l}function Ce({className:a$3,wrapperClassName:o,value:e,onChange:n,disabled:t=false,calendarProps:l,placeholder:b$3="MM/DD/YYYY",variant:g}){let[c$1,u]=useState(false),[S,h]=useState(e),[w,i]=useState(e?M(e).format("MM/DD/YYYY"):""),p=useRef(e?M(e).format("MM/DD/YYYY"):"");useEffect(()=>{let r=e?M(e).format("MM/DD/YYYY"):"";r!==p.current&&(p.current=r,i(r),e&&h(e));},[e]);let C=r=>{let f=fe(r.target.value);i(f);let T=ge(f);T?(p.current=f,n?.(T)):f===""&&(p.current="",n?.(void 0));},d=r=>{r.key==="ArrowDown"&&(r.preventDefault(),u(true)),!/[0-9/]/.test(r.key)&&!["Backspace","Delete","ArrowLeft","ArrowRight","ArrowUp","Tab"].includes(r.key)&&!r.metaKey&&!r.ctrlKey&&r.preventDefault();};return jsxs("div",{className:a("relative w-full",o),children:[jsx("input",{type:"text","data-slot":"input",className:a(a$1({variant:g}),"pr-10",a$3),value:w,placeholder:b$3,onChange:C,onKeyDown:d,disabled:t}),jsxs(a$2,{open:!t&&c$1,onOpenChange:u,children:[jsx(b,{asChild:true,children:jsx(b$1,{variant:"ghost-icon",size:"sm",className:"absolute top-1/2 right-1 -translate-y-1/2",disabled:t,"aria-label":"Select date",type:"button",children:jsx(LuCalendar,{})})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"end",sideOffset:10,children:jsx(b$2,{mode:"single",selected:e,month:S,onMonthChange:h,onSelect:r=>{let f=r?M(r).format("MM/DD/YYYY"):"";p.current=f,i(f),n?.(r),u(false);},...l})})]})]})}var ye=({alt:a$1,className:o="",containerClassName:e="",imagePreview:n=void 0,cropper:t=void 0})=>{let[l,b]=useState(false),g=!n||!l,c=!!t;return jsxs("div",{className:a("flex max-w-[386px] flex-col",o),children:[jsxs("div",{className:a("relative h-60 rounded-md border",e),children:[n&&c?jsx(Se,{image:n,crop:t.crop,zoom:t.zoom,aspect:t.aspect,objectFit:"contain",onCropChange:t.setCrop,onZoomChange:t.setZoom,onCropComplete:t.onCropComplete,onMediaLoaded:()=>b(true),showGrid:false}):n&&jsx("img",{alt:a$1,className:`m-auto h-full w-full object-contain transition-opacity duration-300 ${l?"opacity-100":"opacity-0"}`,src:n,onLoad:()=>b(true),draggable:false}),g&&jsx("div",{"aria-label":n?"Loading image":"Awaiting image",className:"from-grey-300 to-grey-300 absolute inset-0 animate-pulse bg-gradient-to-r"})]}),!g&&c&&jsxs("div",{className:"mt-3 flex flex-col items-center justify-between gap-1 px-1 sm:flex-row sm:gap-4",children:[jsxs("div",{className:"flex w-full items-center gap-3",children:[jsx(b$1,{"aria-label":"zoom out",onClick:()=>t.setZoom(Math.max(t.zoom-.1,1)),className:"h-8",variant:"ghost-icon",children:jsx(LuZoomOut,{})}),jsx(a$3,{value:[t.zoom],min:1,max:3,step:.01,onValueChange:u=>t.setZoom(u[0]),className:"w-full sm:flex-50",classNames:{thumb:"border-2 border-green-800",range:"bg-green-900"}}),jsx(b$1,{"aria-label":"zoom in",onClick:()=>t.setZoom(Math.min(t.zoom+.1,3)),variant:"ghost-icon",className:"h-8",children:jsx(LuZoomIn,{})})]}),jsxs(b$1,{onClick:t.reset,variant:"ghost",className:"h-8 p-2",children:[jsx(LuRefreshCcw,{}),"Reset"]})]})]})};var W="00:00",ee="24:00",te=a=>DateTime.fromFormat(a,"HH:mm").isValid,oe=({startTime:a$1=W,endTime:o=ee,interval:e=30,onChange:n=void 0,className:t="",placeholder:l="Select one",size:b="default",portal:g$1=true,triggerIcon:c,getSublabel:u,...S})=>{te(a$1)||(console.error(`Invalid startTime: ${a$1}`),a$1=W),te(o)||(console.error(`Invalid endTime: ${o}`),o=ee);let h=useMemo(()=>{let i=DateTime.fromFormat(o,"HH:mm"),p=Duration.fromObject({minutes:e}),C=[],d=DateTime.fromFormat(a$1,"HH:mm");for(;d<=i;){let r=d.toFormat("HH:mm");r==="00:00"&&d.equals(i)&&(r="24:00"),C.push({label:d.toFormat("h:mm a"),value:{hour:d.toFormat("HH"),min:d.toFormat("mm"),raw:r,formatted:d.toFormat("h:mm a")}}),d=d.plus(p);}return C},[a$1,o,e]);return jsxs(a$4,{onValueChange:i=>{let p=h.find(C=>C.value.raw===i);p&&n?.(p);},...S,children:[jsx(d,{className:a("max-w-[240px] md:w-[150px]",t),size:b,triggerIcon:c,children:jsx(c$1,{placeholder:l})}),jsx(g,{position:"popper",className:"max-h-90",portal:g$1,children:h.map(i$1=>{let p=u?.(i$1);return jsx(i,{className:a(p?"h-auto py-2":"h-10"),value:i$1.value.raw,sublabel:p,children:i$1.label},i$1.value.raw)})})]})},Qe=oe;M.extend(Te);var ae="MM/DD/YYYY",ke="00/00/0000",X=["MM/DD/YYYY","MM/D/YYYY","M/DD/YYYY","M/D/YYYY","YYYY-MM-DD"];function I(a){return a?M(a).format(ae):""}function Me({className:a$3="",wrapperClassName:o="",value:e=void 0,onChange:n=void 0,disabled:t=false,calendarProps:l=void 0,placeholder:b$1,inputProps:g=void 0,showCalendarIcon:c$1=true,editable:u=false}){let[S,h]=useState(false),w=b$1??(u?ae:"Pick a date"),[i,p]=useState(void 0),C=useRef(e);e!==C.current&&(C.current=e,i!==void 0&&p(void 0));let d=i??e,r=s=>l?.disabled?!isMatch(s,l.disabled):true,f=useRef(n);f.current=n;let T=useRef(r);T.current=r;let{ref:q,setValue:L}=useIMask({mask:ke,lazy:true,overwrite:false},{onComplete:s=>{let D=M(s,X,true);D.isValid()&&T.current(D.toDate())&&f.current?.(D.toDate());}}),ie=s=>{n?.(s),L(I(s)),h(false);},pe=s=>{let D=s.clipboardData.getData("text").trim(),V=M(D,X,true);if(V.isValid()&&r(V.toDate())){s.preventDefault();let J=V.toDate();n?.(J),L(I(J));}},se=()=>{L(I(e));},le=()=>{let s=q.current?.value??"";if(s===""){e!==void 0&&n?.(void 0);return}let D=M(s,X,true);D.isValid()&&r(D.toDate())&&n?.(D.toDate()),L(I(e));},me=a(a$1(),c$1&&"pl-10",S?"border-dark-green":"",a$3);return jsxs(a$2,{open:!t&&S,onOpenChange:h,children:[jsx(b,{asChild:true,children:jsxs("div",{className:a("relative flex w-full items-center rounded-md",o),children:[u?jsx("input",{ref:q,defaultValue:I(e),className:me,placeholder:w,disabled:t,onFocus:se,onPaste:pe,onBlur:s=>{le(),g?.onBlur?.(s);}}):jsx(b$3,{className:a(c$1&&"pl-10",S?"border-dark-green":"",a$3),...g,value:I(e),placeholder:w,readOnly:true,disabled:t}),c$1&&jsx("div",{className:a("absolute top-1/2 left-4 h-4 w-4 -translate-y-1/2",t?"text-gray-400":"cursor-pointer text-black"),children:jsx(LuCalendar,{size:16})})]})}),jsx(c,{className:"w-auto overflow-hidden p-0",align:"start",onOpenAutoFocus:u?s=>s.preventDefault():void 0,children:jsx(b$2,{mode:"single",selected:e?M(e).toDate():void 0,onSelect:ie,...u?{month:d,onMonthChange:p}:{},...l})})]})}export{Me as a,Ce as b,ye as c,oe as d,Qe as e};//# sourceMappingURL=chunk-QN6ZLLO3.js.map
2
+ //# sourceMappingURL=chunk-QN6ZLLO3.js.map