maquinaweb-ui 2.75.0 → 2.75.2

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 (175) hide show
  1. package/dist/actions.js +0 -1
  2. package/dist/actions.js.map +1 -1
  3. package/dist/analytics/core.d.ts.map +1 -1
  4. package/dist/analytics/core.js +0 -1
  5. package/dist/analytics/core.js.map +1 -1
  6. package/dist/analytics/delegated-clicks.d.ts.map +1 -1
  7. package/dist/analytics/delegated-clicks.js +0 -1
  8. package/dist/analytics/delegated-clicks.js.map +1 -1
  9. package/dist/analytics/provider.d.ts +2 -2
  10. package/dist/analytics/provider.d.ts.map +1 -1
  11. package/dist/analytics/provider.js +0 -1
  12. package/dist/analytics/provider.js.map +1 -1
  13. package/dist/analytics/types.d.ts.map +1 -1
  14. package/dist/analytics.js +0 -1
  15. package/dist/container-animation/container-animation.d.ts +2 -2
  16. package/dist/container-animation/container-animation.d.ts.map +1 -1
  17. package/dist/container-animation/container-animation.js +1 -2
  18. package/dist/container-animation/container-animation.js.map +1 -1
  19. package/dist/container-animation.js +0 -1
  20. package/dist/date-field/DateField.d.ts +2 -2
  21. package/dist/date-field/DateField.d.ts.map +1 -1
  22. package/dist/date-field/DateField.js +0 -1
  23. package/dist/date-field/DateField.js.map +1 -1
  24. package/dist/date-field.js +0 -1
  25. package/dist/date-hour-field/DateHourField.d.ts +2 -2
  26. package/dist/date-hour-field/DateHourField.d.ts.map +1 -1
  27. package/dist/date-hour-field/DateHourField.js +0 -1
  28. package/dist/date-hour-field/DateHourField.js.map +1 -1
  29. package/dist/date-hour-field/time-wheel-column.js.map +1 -1
  30. package/dist/date-hour-field.js +0 -1
  31. package/dist/input-suggest/input-suggest.d.ts +2 -2
  32. package/dist/input-suggest/input-suggest.d.ts.map +1 -1
  33. package/dist/input-suggest/input-suggest.js +6 -7
  34. package/dist/input-suggest/input-suggest.js.map +1 -1
  35. package/dist/input-suggest.js +0 -1
  36. package/dist/kanban-dnd/constants.js +1 -4
  37. package/dist/kanban-dnd/constants.js.map +1 -1
  38. package/dist/kanban-dnd/context.d.ts +0 -4
  39. package/dist/kanban-dnd/context.d.ts.map +1 -1
  40. package/dist/kanban-dnd/context.js +0 -1
  41. package/dist/kanban-dnd/context.js.map +1 -1
  42. package/dist/kanban-dnd/drag-preview.js +4 -4
  43. package/dist/kanban-dnd/drag-preview.js.map +1 -1
  44. package/dist/kanban-dnd/drop-animation.js.map +1 -1
  45. package/dist/kanban-dnd/kanban-card-item.d.ts +2 -2
  46. package/dist/kanban-dnd/kanban-card-item.d.ts.map +1 -1
  47. package/dist/kanban-dnd/kanban-card-item.js +0 -1
  48. package/dist/kanban-dnd/kanban-card-item.js.map +1 -1
  49. package/dist/kanban-dnd/kanban-dnd-monitor.d.ts +2 -2
  50. package/dist/kanban-dnd/kanban-dnd-monitor.d.ts.map +1 -1
  51. package/dist/kanban-dnd/kanban-dnd-monitor.js +0 -1
  52. package/dist/kanban-dnd/kanban-dnd-monitor.js.map +1 -1
  53. package/dist/kanban-dnd/kanban-dropzone.d.ts +2 -2
  54. package/dist/kanban-dnd/kanban-dropzone.d.ts.map +1 -1
  55. package/dist/kanban-dnd/kanban-dropzone.js +0 -1
  56. package/dist/kanban-dnd/kanban-dropzone.js.map +1 -1
  57. package/dist/kanban-dnd/kanban-selector.d.ts +2 -2
  58. package/dist/kanban-dnd/kanban-selector.d.ts.map +1 -1
  59. package/dist/kanban-dnd/kanban-selector.js +0 -1
  60. package/dist/kanban-dnd/kanban-selector.js.map +1 -1
  61. package/dist/kanban-dnd/move-cards.d.ts.map +1 -1
  62. package/dist/kanban-dnd/move-cards.js.map +1 -1
  63. package/dist/kanban-dnd/types.d.ts.map +1 -1
  64. package/dist/kanban-dnd/use-kanban-column-dnd.d.ts.map +1 -1
  65. package/dist/kanban-dnd/use-kanban-column-dnd.js +0 -1
  66. package/dist/kanban-dnd/use-kanban-column-dnd.js.map +1 -1
  67. package/dist/kanban-dnd/use-kanban-selector-auto-scroll.js.map +1 -1
  68. package/dist/kanban-dnd.d.ts +0 -1
  69. package/dist/kanban-dnd.js +0 -1
  70. package/dist/landing-text/client-landing-text.js +0 -1
  71. package/dist/landing-text/client-landing-text.js.map +1 -1
  72. package/dist/landing-text/landing-content.d.ts +0 -2
  73. package/dist/landing-text/landing-content.d.ts.map +1 -1
  74. package/dist/landing-text/landing-content.js.map +1 -1
  75. package/dist/landing-text/landing-text.d.ts +2 -2
  76. package/dist/landing-text/landing-text.d.ts.map +1 -1
  77. package/dist/landing-text/landing-text.js +1 -1
  78. package/dist/landing-text/landing-text.js.map +1 -1
  79. package/dist/landing-text/server-landing-text.d.ts +2 -2
  80. package/dist/landing-text/server-landing-text.d.ts.map +1 -1
  81. package/dist/landing-text/server-landing-text.js +1 -1
  82. package/dist/landing-text/server-landing-text.js.map +1 -1
  83. package/dist/landing-text/types.d.ts.map +1 -1
  84. package/dist/node_modules/framer-motion/dist/es/utils/use-in-view.js +0 -1
  85. package/dist/node_modules/framer-motion/dist/es/utils/use-in-view.js.map +1 -1
  86. package/dist/node_modules/framer-motion/dist/types/index.d.ts +4 -0
  87. package/dist/node_modules/framer-motion/dist/types.d-DOCC-kZB.d.ts +1 -0
  88. package/dist/node_modules/motion/dist/react.d.ts +2 -0
  89. package/dist/node_modules/motion-dom/dist/index.d.ts +1001 -0
  90. package/dist/node_modules/motion-dom/dist/index.d.ts.map +1 -0
  91. package/dist/node_modules/motion-utils/dist/index.d.ts +17 -0
  92. package/dist/node_modules/motion-utils/dist/index.d.ts.map +1 -0
  93. package/dist/page-header/page-header.d.ts +2 -2
  94. package/dist/page-header/page-header.d.ts.map +1 -1
  95. package/dist/page-header/page-header.js.map +1 -1
  96. package/dist/page-header.js +0 -1
  97. package/dist/remote-selector/remote-selector.d.ts +3 -3
  98. package/dist/remote-selector/remote-selector.d.ts.map +1 -1
  99. package/dist/remote-selector/remote-selector.js +3 -4
  100. package/dist/remote-selector/remote-selector.js.map +1 -1
  101. package/dist/remote-selector.js +0 -1
  102. package/dist/server-infinite-scroll/server-infinite-scroll-items.d.ts +2 -2
  103. package/dist/server-infinite-scroll/server-infinite-scroll-items.d.ts.map +1 -1
  104. package/dist/server-infinite-scroll/server-infinite-scroll-items.js.map +1 -1
  105. package/dist/server-infinite-scroll/server-infinite-scroll-list.d.ts +2 -2
  106. package/dist/server-infinite-scroll/server-infinite-scroll-list.d.ts.map +1 -1
  107. package/dist/server-infinite-scroll/server-infinite-scroll-list.js +6 -7
  108. package/dist/server-infinite-scroll/server-infinite-scroll-list.js.map +1 -1
  109. package/dist/server-infinite-scroll/server-infinite-scroll-observer.d.ts +2 -2
  110. package/dist/server-infinite-scroll/server-infinite-scroll-observer.d.ts.map +1 -1
  111. package/dist/server-infinite-scroll/server-infinite-scroll-observer.js +0 -1
  112. package/dist/server-infinite-scroll/server-infinite-scroll-observer.js.map +1 -1
  113. package/dist/server-infinite-scroll/server-infinite-scroll.d.ts +2 -2
  114. package/dist/server-infinite-scroll/server-infinite-scroll.d.ts.map +1 -1
  115. package/dist/server-infinite-scroll/types.d.ts.map +1 -1
  116. package/dist/split-text-poor/split-text-poor.d.ts.map +1 -1
  117. package/dist/split-text-poor/split-text-poor.js +1 -2
  118. package/dist/split-text-poor/split-text-poor.js.map +1 -1
  119. package/dist/split-text-poor.js +0 -1
  120. package/dist/src/hooks/get-mask-options.js.map +1 -1
  121. package/dist/src/hooks/is-server.js +1 -2
  122. package/dist/src/hooks/is-server.js.map +1 -1
  123. package/dist/src/hooks/use-money-input.js +1 -3
  124. package/dist/src/hooks/use-money-input.js.map +1 -1
  125. package/dist/src/hooks/with-mask.d.ts +0 -1
  126. package/dist/src/hooks/with-mask.d.ts.map +1 -1
  127. package/dist/src/hooks/with-mask.js +2 -2
  128. package/dist/src/hooks/with-mask.js.map +1 -1
  129. package/dist/text-field/TextField.d.ts +5 -5
  130. package/dist/text-field/TextField.d.ts.map +1 -1
  131. package/dist/text-field/TextField.js +8 -9
  132. package/dist/text-field/TextField.js.map +1 -1
  133. package/dist/text-field.js +0 -1
  134. package/dist/toggle-field/ToggleField.d.ts.map +1 -1
  135. package/dist/toggle-field/ToggleField.js +1 -2
  136. package/dist/toggle-field/ToggleField.js.map +1 -1
  137. package/dist/toggle-field/ToggleGroup.d.ts +6 -6
  138. package/dist/toggle-field/ToggleGroup.d.ts.map +1 -1
  139. package/dist/toggle-field/ToggleGroup.js +2 -3
  140. package/dist/toggle-field/ToggleGroup.js.map +1 -1
  141. package/dist/toggle-field.js +0 -1
  142. package/dist/ui/badge.js +1 -1
  143. package/dist/ui/badge.js.map +1 -1
  144. package/dist/ui/button.js +1 -1
  145. package/dist/ui/button.js.map +1 -1
  146. package/dist/ui/calendar.js +8 -9
  147. package/dist/ui/calendar.js.map +1 -1
  148. package/dist/ui/checkbox.js +1 -2
  149. package/dist/ui/checkbox.js.map +1 -1
  150. package/dist/ui/command.js +5 -6
  151. package/dist/ui/command.js.map +1 -1
  152. package/dist/ui/content-help.js.map +1 -1
  153. package/dist/ui/form.js +4 -5
  154. package/dist/ui/form.js.map +1 -1
  155. package/dist/ui/input-date-field.js +1 -1
  156. package/dist/ui/input-date-field.js.map +1 -1
  157. package/dist/ui/input-help.js +0 -1
  158. package/dist/ui/input-help.js.map +1 -1
  159. package/dist/ui/input.js +1 -1
  160. package/dist/ui/input.js.map +1 -1
  161. package/dist/ui/label.js +1 -2
  162. package/dist/ui/label.js.map +1 -1
  163. package/dist/ui/popover.js +1 -2
  164. package/dist/ui/popover.js.map +1 -1
  165. package/dist/ui/scroll-area.js +1 -2
  166. package/dist/ui/scroll-area.js.map +1 -1
  167. package/dist/ui/selector.d.ts +0 -2
  168. package/dist/ui/selector.d.ts.map +1 -1
  169. package/dist/ui/selector.js +3 -4
  170. package/dist/ui/selector.js.map +1 -1
  171. package/dist/ui/tooltip.js +2 -3
  172. package/dist/ui/tooltip.js.map +1 -1
  173. package/dist/ui/tree-item-renderer.js +1 -3
  174. package/dist/ui/tree-item-renderer.js.map +1 -1
  175. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"input-suggest.d.ts","names":[],"sources":["../../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":[],"mappings":";;;;;;;UAmCiB,uCACM,cAAc,gCAChB,UAAU,gBAAgB,UAAU,uBAC/C,mBAAmB,cAAc;;;EAH1B,QAAA,CAAA,EAAA,CAAA,MAAA,EAAiB,MAAA,EAAA,GAAA,IAAA;EACX,QAAA,CAAA,EAMV,QANU,CAMD,cANC,CAAA,MAAA,CAAA,CAAA;EAAc,KAAA,CAAA,EAAA,MAAA;EACN,WAAA,CAAA,EAAA,MAAA;EAAV,SAAA,CAAA,EAAA,MAAA;EAAoC,OAAA,EAAA,CAAA,MAAA,CAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAWrC,MAXqC,EAAA,GAAA;IAAV,IAAA,CAAA,EAAA;MAClB,EAAA,EAAA,MAAA,GAAA,MAAA;MAAc,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,GAAA;IAIrB,CAAA,EAAA;IAAT,OAAA,CAAA,EAAA,GAAA;EAMO,CAAA;EAqBX,QAAA,CAAA,EAAA,OAAA;EACO,KAAA,CAAA,EAAA,MAAA;EACE,kBAAA,CAAA,EAAA,OAAA;EAjCR,YAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAkB,UAAA,CAAA,EAAA,OAAA;EAuCnB,OAAA,CAAA,EAAA,MAAY;EACE,IAAA,CAAA,EAAA,MAAA;EAAc,UAAA,EAAA,MAAA;EACN,MAAA,CAAA,EAAA,MAAA;EAAV,WAAA,CAAA,EAAA,CAAA,KAAA,EAAA,GAAA,EAAA,GAAA,GAAA;EAAoC,aAAA,CAAA,EAAA,CAAA,OAAA,EAAA,GAAA,EAAA,GAAA,GAAA;EAAV,KAAA,CAAA,EAAA,MAAA;EAE7C,UAAA,CAAA,EAAA,MAAA;EACA,IAAA,CAAA,EAbO,IAaP;EACA,WAAA,CAAA,EAbc,OAad;EACA,aAAA,CAAA,EAbgB,MAahB;EACA,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EACA,YAAA,CAAA,EAAA,MAAA;EACA,OAAA,CAAA,EAAA,MAAA;;iBAVO,YAYP,CAAA,qBAXqB,WAWrB,GAXmC,WAWnC,EAAA,mBAVmB,SAUnB,CAV6B,YAU7B,CAAA,GAV6C,SAU7C,CAVuD,YAUvD,CAAA,CAAA,CAAA;EAAA,IAAA;EAAA,UAAA;EAAA,QAAA;EAAA,UAAA;EAAA,KAAA;EAAA,SAAA;EAAA,WAAA;EAAA,OAAA;EAAA,QAAA;EAAA,QAAA;EAAA,QAAA;EAAA,kBAAA;EAAA,KAAA;EAAA,KAAA;EAAA,YAAA;EAAA,UAAA;EAAA,OAAA;EAAA,IAAA;EAAA,MAAA;EAAA,WAAA;EAAA,aAAA;EAAA,KAAA;EAAA,IAAA;EAAA,WAAA;EAAA,QAAA;EAAA,OAAA;EAAA,aAAA;EAAA,YAAA;EAAA,OAAA;EAAA,GAAA;AAAA,CAAA,EAsBC,iBAtBD,CAsBmB,YAtBnB,EAsBiC,UAtBjC,CAAA,GAsB+C,YAtB/C,CAAA,EAsB2D,mBAAA,CAAA,GAAA,CAAA,OAtB3D"}
1
+ {"version":3,"file":"input-suggest.d.ts","names":[],"sources":["../../src/components/input-suggest/input-suggest.tsx"],"mappings":";;;;;;;UAmCiB,iBAAA,sBACM,WAAA,GAAc,WAAA,qBAChB,SAAA,CAAU,YAAA,IAAgB,SAAA,CAAU,YAAA,WAC/C,kBAAA,CAAmB,YAAA,EAAc,UAAA;EACzC,KAAA;EACA,MAAA;EACA,QAAA,IAAY,MAAA;EACZ,QAAA,GAAW,QAAA,CAAS,cAAA;EACpB,KAAA;EACA,WAAA;EACA,SAAA;EACA,OAAA,GACE,MAAA,WACA,aAAA,GAAgB,MAAA;IAEhB,IAAA;MACE,EAAA;MAAA,CACC,GAAA;IAAA;IAEH,OAAA;EAAA;EAEF,QAAA;EACA,KAAA;EACA,kBAAA;EACA,YAAA;EACA,UAAA;EACA,OAAA;EACA,IAAA;EACA,UAAA;EACA,MAAA;EACA,WAAA,IAAe,KAAA;EACf,aAAA,IAAiB,OAAA;EACjB,KAAA;EACA,UAAA;EACA,IAAA,GAAO,IAAA;EACP,WAAA,GAAc,OAAA;EACd,aAAA,GAAgB,MAAA;EAChB,OAAA;EACA,YAAA;EACA,OAAA;AAAA;AAAA,iBAGO,YAAA,sBACc,WAAA,GAAc,WAAA,qBAChB,SAAA,CAAU,YAAA,IAAgB,SAAA,CAAU,YAAA,EAAA,CAAA;EAEvD,IAAA;EACA,UAAA;EACA,QAAA;EACA,UAAA;EACA,KAAA;EACA,SAAA;EACA,WAAA;EACA,OAAA;EACA,QAAA;EACA,QAAA;EACA,QAAA;EACA,kBAAA;EACA,KAAA;EACA,KAAA;EACA,YAAA;EACA,UAAA;EACA,OAAA;EACA,IAAA;EACA,MAAA;EACA,WAAA;EACA,aAAA;EACA,KAAA;EACA,IAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA;EACA,aAAA;EACA,YAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,iBAAA,CAAkB,YAAA,EAAc,UAAA,IAAc,YAAA,GAAY,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { cn } from "../src/lib/utils.js";
5
4
  import withMask from "../src/hooks/with-mask.js";
6
5
  import { FormItem, FormLabel, FormMessage } from "../ui/form.js";
@@ -16,7 +15,7 @@ import { useDebounce } from "use-debounce";
16
15
  import { ScrollArea, ScrollAreaViewport } from "@radix-ui/react-scroll-area";
17
16
 
18
17
  //#region src/components/input-suggest/input-suggest.tsx
19
- function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label, className, placeholder, useData, setValue, required, disabled, updateSearchOnBlur = true, value, extra, extraOnClick, withPortal = false, counter, help, prefix, refineValue, refineSuggest, limit = 10, mask, maskOptions, children, onClear, initialParams, debounceTime = 100, maxWait = 200,...props }) {
18
+ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label, className, placeholder, useData, setValue, required, disabled, updateSearchOnBlur = true, value, extra, extraOnClick, withPortal = false, counter, help, prefix, refineValue, refineSuggest, limit = 10, mask, maskOptions, children, onClear, initialParams, debounceTime = 100, maxWait = 200, ...props }) {
20
19
  const form = useFormContext();
21
20
  const inputName = prefix ? `${prefix}.${name}` : name;
22
21
  const { field: searchField } = useController({
@@ -43,18 +42,18 @@ function InputSuggest({ name, nameSearch, onSearch, fieldValue = "name", label,
43
42
  fieldValue
44
43
  ]);
45
44
  const handleChange = useCallback((e) => {
46
- const value$1 = e.currentTarget.value;
47
- if (value$1 === "") {
45
+ const value = e.currentTarget.value;
46
+ if (value === "") {
48
47
  searchField.onChange("");
49
48
  field.onChange(null);
50
49
  onClear?.();
51
50
  onSearch?.("");
52
51
  return;
53
52
  }
54
- searchField.onChange(value$1);
55
- onSearch?.(value$1);
53
+ searchField.onChange(value);
54
+ onSearch?.(value);
56
55
  setOpen(true);
57
- const item = data?.find((item$1) => item$1[fieldValue] === value$1);
56
+ const item = data?.find((item) => item[fieldValue] === value);
58
57
  if (item) {
59
58
  onChange(item);
60
59
  setOpen(false);
@@ -1 +1 @@
1
- {"version":3,"file":"input-suggest.js","names":["value","item"],"sources":["../../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":["'use client';\n\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from 'react';\n\nimport {\n FieldPath,\n FieldValues,\n UseControllerProps,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport { useDebounce } from 'use-debounce';\nimport withMask, {\n type Mask,\n type Options as MaskOptions,\n} from '@/hooks/with-mask';\n\nimport type { PopoverProps } from '@radix-ui/react-popover';\nimport { ScrollArea, ScrollAreaViewport } from '@radix-ui/react-scroll-area';\nimport { Input } from '@/components/ui/input';\nimport { FormItem, FormLabel, FormMessage } from '@/ui/form';\nimport { InputHelp } from '@/ui/input-help';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ui/popover';\nimport { ScrollBar } from '../ui/scroll-area';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface InputSuggestProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends UseControllerProps<TFieldValues, TFieldName> {\n label: string;\n search?: string;\n onSearch?: (search: string) => void;\n setValue?: Dispatch<SetStateAction<string>>;\n value?: string;\n placeholder?: string;\n className?: string;\n useData: (\n search?: string,\n initialParams?: Object\n ) => {\n data?: {\n id: string | number;\n [key: string]: any;\n }[];\n refresh?: any;\n };\n required?: boolean;\n extra?: string;\n updateSearchOnBlur?: boolean;\n extraOnClick?: () => void;\n withPortal?: boolean;\n counter?: number;\n help?: string;\n nameSearch: string;\n prefix?: string;\n refineValue?: (value: any) => any;\n refineSuggest?: (suggest: any) => any;\n limit?: number;\n fieldValue?: string;\n mask?: Mask;\n maskOptions?: MaskOptions;\n initialParams?: Object;\n onClear?: () => void;\n debounceTime?: number;\n maxWait?: number;\n}\n\nfunction InputSuggest<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n nameSearch,\n onSearch,\n fieldValue = 'name',\n label,\n className,\n placeholder,\n useData,\n setValue,\n required,\n disabled,\n updateSearchOnBlur = true,\n value,\n extra,\n extraOnClick,\n withPortal = false,\n counter,\n help,\n prefix,\n refineValue,\n refineSuggest,\n limit = 10,\n mask,\n maskOptions,\n children,\n onClear,\n initialParams,\n debounceTime = 100,\n maxWait = 200,\n ...props\n}: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps) {\n const form = useFormContext();\n const inputName = prefix ? `${prefix}.${name}` : name;\n const searchName = prefix ? `${prefix}.${nameSearch}` : nameSearch;\n\n const { field: searchField } = useController({\n name: searchName,\n control: form.control,\n });\n const { field, fieldState } = useController({\n name: inputName,\n control: form.control,\n });\n\n const [ariaSelected, setAriaSelected] = useState(-1);\n\n const [open, setOpen] = useState(false);\n\n const [searchDebounced] = useDebounce(searchField.value, debounceTime, {\n maxWait: maxWait,\n });\n const { data } = useData?.(searchDebounced, initialParams);\n\n const onChange = useCallback(\n (item: any) => {\n const searchValue = item?.[fieldValue as keyof typeof item];\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n field.onChange(refineValue?.(item) || item);\n setOpen(false);\n },\n [field.value, refineValue, fieldValue]\n );\n\n const handleChange = useCallback(\n (e: React.FormEvent<HTMLInputElement>) => {\n const value = e.currentTarget.value;\n\n if (value === '') {\n searchField.onChange('');\n field.onChange(null);\n onClear?.();\n onSearch?.('');\n return;\n }\n\n searchField.onChange(value);\n onSearch?.(value);\n setOpen(true);\n\n const item = data?.find((item) => item[fieldValue] === value);\n if (item) {\n onChange(item);\n setOpen(false);\n }\n },\n [field, searchField, onClear, onSearch]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n ariaSelected < (data?.length ?? 0) - 1 &&\n setAriaSelected((prev) => prev + 1);\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n ariaSelected > 0 && setAriaSelected((prev) => prev - 1);\n }\n if (e.key === 'Enter' && data && data[ariaSelected]) {\n e.preventDefault();\n e.stopPropagation();\n onChange(data[ariaSelected]);\n }\n },\n [data, ariaSelected, onChange]\n );\n\n useEffect(() => {\n const searchValue = field?.value?.[fieldValue as keyof typeof field.value];\n if (searchValue !== searchField.value && updateSearchOnBlur) {\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n }\n }, [field.value]);\n\n return (\n <FormItem\n className={cn('w-full flex flex-col', className)}\n id={`input-suggest-${inputName}`}\n >\n <div className=\"flex items-end gap-1.5\">\n <FormLabel htmlFor={inputName}>\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </FormLabel>\n\n <InputHelp help={help} name={inputName} />\n </div>\n <Popover onOpenChange={setOpen} open={open} {...props}>\n <PopoverTrigger className=\"outline-hidden w-full relative\">\n <Input\n autoComplete=\"off\"\n className={cn(fieldState.error && 'border-destructive')}\n disabled={disabled}\n name={name}\n onInput={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={\n mask\n ? withMask(mask, { autoUnmask: true, ...maskOptions })\n : (undefined as any)\n }\n value={searchField.value}\n />\n {children}\n </PopoverTrigger>\n {fieldState.error && <FormMessage />}\n <PopoverContent\n className={cn(\n 'mt-1 w-(--radix-popover-trigger-width) max-w-2xl p-0 z-50',\n data?.length === 0 && 'hidden'\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <ScrollArea className=\"h-fit max-h-[300px]\" id=\"scroll\">\n <ScrollAreaViewport className=\"w-full h-fit max-h-[300px]\">\n <ul className=\"p-1\">\n {data?.slice(0, limit)?.map((item) => (\n <li\n aria-selected={data[ariaSelected]?.id === item.id}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:bg-accent/50 hover:text-accent-foreground',\n field?.value?.id === item.id &&\n 'bg-accent! text-accent-foreground'\n )}\n key={item.id}\n onMouseDown={(e) => {\n onChange(item);\n e.preventDefault();\n }}\n >\n <span className=\"line-clamp-1 flex-1\">\n {refineSuggest\n ? refineSuggest(item)\n : item?.[fieldValue as keyof typeof item]}\n </span>\n {field?.value?.id == item.id && (\n <Check className=\"ml-auto h-4 w-4 shrink-0\" />\n )}\n </li>\n ))}\n\n {extra && (\n <li\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:text-accent-foreground sticky bottom-0.5 bg-white hover:bg-accent'\n )}\n onMouseDown={(e) => {\n e.preventDefault();\n extraOnClick?.();\n }}\n >\n <span className=\"line-clamp-1\">{extra}</span>\n </li>\n )}\n\n {(data?.length === 0 || !data) && !extra && (\n <p className=\"text-sm text-center text-accent-foreground/50 py-2\">\n Nenhum resultado encontrado.\n </p>\n )}\n </ul>\n </ScrollAreaViewport>\n <ScrollBar />\n </ScrollArea>\n </PopoverContent>\n </Popover>\n </FormItem>\n );\n}\n\nexport { InputSuggest };\n"],"mappings":";;;;;;;;;;;;;;;;;;AA6EA,SAAS,aAGP,EACA,MACA,YACA,UACA,aAAa,QACb,OACA,WACA,aACA,SACA,UACA,UACA,UACA,qBAAqB,MACrB,OACA,OACA,cACA,aAAa,OACb,SACA,MACA,QACA,aACA,eACA,QAAQ,IACR,MACA,aACA,UACA,SACA,eACA,eAAe,KACf,UAAU,IACV,GAAG,SAC0D;CAC7D,MAAM,OAAO,gBAAgB;CAC7B,MAAM,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS;CAGjD,MAAM,EAAE,OAAO,gBAAgB,cAAc;EAC3C,MAHiB,SAAS,GAAG,OAAO,GAAG,eAAe;EAItD,SAAS,KAAK;EACf,CAAC;CACF,MAAM,EAAE,OAAO,eAAe,cAAc;EAC1C,MAAM;EACN,SAAS,KAAK;EACf,CAAC;CAEF,MAAM,CAAC,cAAc,mBAAmB,SAAS,GAAG;CAEpD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,CAAC,mBAAmB,YAAY,YAAY,OAAO,cAAc,EAC5D,SACV,CAAC;CACF,MAAM,EAAE,SAAS,UAAU,iBAAiB,cAAc;CAE1D,MAAM,WAAW,aACd,SAAc;EACb,MAAM,cAAc,OAAO;AAC3B,cAAY,SAAS,YAAY;AACjC,aAAW,YAAY;AACvB,QAAM,SAAS,cAAc,KAAK,IAAI,KAAK;AAC3C,UAAQ,MAAM;IAEhB;EAAC,MAAM;EAAO;EAAa;EAAW,CACvC;CAED,MAAM,eAAe,aAClB,MAAyC;EACxC,MAAMA,UAAQ,EAAE,cAAc;AAE9B,MAAIA,YAAU,IAAI;AAChB,eAAY,SAAS,GAAG;AACxB,SAAM,SAAS,KAAK;AACpB,cAAW;AACX,cAAW,GAAG;AACd;;AAGF,cAAY,SAASA,QAAM;AAC3B,aAAWA,QAAM;AACjB,UAAQ,KAAK;EAEb,MAAM,OAAO,MAAM,MAAM,WAASC,OAAK,gBAAgBD,QAAM;AAC7D,MAAI,MAAM;AACR,YAAS,KAAK;AACd,WAAQ,MAAM;;IAGlB;EAAC;EAAO;EAAa;EAAS;EAAS,CACxC;CAED,MAAM,gBAAgB,aACnB,MAA6C;AAC5C,MAAI,EAAE,QAAQ,aAAa;AACzB,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,mBAAgB,MAAM,UAAU,KAAK,KACnC,iBAAiB,SAAS,OAAO,EAAE;;AAEvC,MAAI,EAAE,QAAQ,WAAW;AACvB,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,kBAAe,KAAK,iBAAiB,SAAS,OAAO,EAAE;;AAEzD,MAAI,EAAE,QAAQ,WAAW,QAAQ,KAAK,eAAe;AACnD,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,YAAS,KAAK,cAAc;;IAGhC;EAAC;EAAM;EAAc;EAAS,CAC/B;AAED,iBAAgB;EACd,MAAM,cAAc,OAAO,QAAQ;AACnC,MAAI,gBAAgB,YAAY,SAAS,oBAAoB;AAC3D,eAAY,SAAS,YAAY;AACjC,cAAW,YAAY;;IAExB,CAAC,MAAM,MAAM,CAAC;AAEjB,QACE,qBAAC;EACC,WAAW,GAAG,wBAAwB,UAAU;EAChD,IAAI,iBAAiB;aAErB,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAU,SAAS;;KACjB;KAAM;KACN,YACC,oBAAC;MAAK,WAAU;gBAAqC;OAAQ;;KAErD,EAEZ,oBAAC;IAAgB;IAAM,MAAM;KAAa;IACtC,EACN,qBAAC;GAAQ,cAAc;GAAe;GAAM,GAAI;;IAC9C,qBAAC;KAAe,WAAU;gBACxB,oBAAC;MACC,cAAa;MACb,WAAW,GAAG,WAAW,SAAS,qBAAqB;MAC7C;MACJ;MACN,SAAS;MACT,WAAW;MACE;MACb,KACE,OACI,SAAS,MAAM;OAAE,YAAY;OAAM,GAAG;OAAa,CAAC,GACnD;MAEP,OAAO,YAAY;OACnB,EACD;MACc;IAChB,WAAW,SAAS,oBAAC,gBAAc;IACpC,oBAAC;KACC,WAAW,GACT,6DACA,MAAM,WAAW,KAAK,SACvB;KACD,kBAAkB,MAAM,EAAE,gBAAgB;eAE1C,qBAAC;MAAW,WAAU;MAAsB,IAAG;iBAC7C,oBAAC;OAAmB,WAAU;iBAC5B,qBAAC;QAAG,WAAU;;SACX,MAAM,MAAM,GAAG,MAAM,EAAE,KAAK,SAC3B,qBAAC;UACC,iBAAe,KAAK,eAAe,OAAO,KAAK;UAC/C,WAAW,GACT,+SACA,OAAO,OAAO,OAAO,KAAK,MACxB,oCACH;UAED,cAAc,MAAM;AAClB,oBAAS,KAAK;AACd,aAAE,gBAAgB;;qBAGpB,oBAAC;WAAK,WAAU;qBACb,gBACG,cAAc,KAAK,GACnB,OAAO;YACN,EACN,OAAO,OAAO,MAAM,KAAK,MACxB,oBAAC,SAAM,WAAU,6BAA6B;YAZ3C,KAAK,GAcP,CACL;SAED,SACC,oBAAC;UACC,WAAW,GACT,6TACD;UACD,cAAc,MAAM;AAClB,aAAE,gBAAgB;AAClB,2BAAgB;;oBAGlB,oBAAC;WAAK,WAAU;qBAAgB;YAAa;WAC1C;UAGL,MAAM,WAAW,KAAK,CAAC,SAAS,CAAC,SACjC,oBAAC;UAAE,WAAU;oBAAqD;WAE9D;;SAEH;QACc,EACrB,oBAAC,cAAY;OACF;MACE;;IACT;GACD"}
1
+ {"version":3,"file":"input-suggest.js","names":[],"sources":["../../src/components/input-suggest/input-suggest.tsx"],"sourcesContent":["'use client';\n\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState,\n} from 'react';\n\nimport {\n FieldPath,\n FieldValues,\n UseControllerProps,\n useController,\n useFormContext,\n} from 'react-hook-form';\nimport { useDebounce } from 'use-debounce';\nimport withMask, {\n type Mask,\n type Options as MaskOptions,\n} from '@/hooks/with-mask';\n\nimport type { PopoverProps } from '@radix-ui/react-popover';\nimport { ScrollArea, ScrollAreaViewport } from '@radix-ui/react-scroll-area';\nimport { Input } from '@/components/ui/input';\nimport { FormItem, FormLabel, FormMessage } from '@/ui/form';\nimport { InputHelp } from '@/ui/input-help';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ui/popover';\nimport { ScrollBar } from '../ui/scroll-area';\n\nimport { Check } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface InputSuggestProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends UseControllerProps<TFieldValues, TFieldName> {\n label: string;\n search?: string;\n onSearch?: (search: string) => void;\n setValue?: Dispatch<SetStateAction<string>>;\n value?: string;\n placeholder?: string;\n className?: string;\n useData: (\n search?: string,\n initialParams?: Object\n ) => {\n data?: {\n id: string | number;\n [key: string]: any;\n }[];\n refresh?: any;\n };\n required?: boolean;\n extra?: string;\n updateSearchOnBlur?: boolean;\n extraOnClick?: () => void;\n withPortal?: boolean;\n counter?: number;\n help?: string;\n nameSearch: string;\n prefix?: string;\n refineValue?: (value: any) => any;\n refineSuggest?: (suggest: any) => any;\n limit?: number;\n fieldValue?: string;\n mask?: Mask;\n maskOptions?: MaskOptions;\n initialParams?: Object;\n onClear?: () => void;\n debounceTime?: number;\n maxWait?: number;\n}\n\nfunction InputSuggest<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n nameSearch,\n onSearch,\n fieldValue = 'name',\n label,\n className,\n placeholder,\n useData,\n setValue,\n required,\n disabled,\n updateSearchOnBlur = true,\n value,\n extra,\n extraOnClick,\n withPortal = false,\n counter,\n help,\n prefix,\n refineValue,\n refineSuggest,\n limit = 10,\n mask,\n maskOptions,\n children,\n onClear,\n initialParams,\n debounceTime = 100,\n maxWait = 200,\n ...props\n}: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps) {\n const form = useFormContext();\n const inputName = prefix ? `${prefix}.${name}` : name;\n const searchName = prefix ? `${prefix}.${nameSearch}` : nameSearch;\n\n const { field: searchField } = useController({\n name: searchName,\n control: form.control,\n });\n const { field, fieldState } = useController({\n name: inputName,\n control: form.control,\n });\n\n const [ariaSelected, setAriaSelected] = useState(-1);\n\n const [open, setOpen] = useState(false);\n\n const [searchDebounced] = useDebounce(searchField.value, debounceTime, {\n maxWait: maxWait,\n });\n const { data } = useData?.(searchDebounced, initialParams);\n\n const onChange = useCallback(\n (item: any) => {\n const searchValue = item?.[fieldValue as keyof typeof item];\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n field.onChange(refineValue?.(item) || item);\n setOpen(false);\n },\n [field.value, refineValue, fieldValue]\n );\n\n const handleChange = useCallback(\n (e: React.FormEvent<HTMLInputElement>) => {\n const value = e.currentTarget.value;\n\n if (value === '') {\n searchField.onChange('');\n field.onChange(null);\n onClear?.();\n onSearch?.('');\n return;\n }\n\n searchField.onChange(value);\n onSearch?.(value);\n setOpen(true);\n\n const item = data?.find((item) => item[fieldValue] === value);\n if (item) {\n onChange(item);\n setOpen(false);\n }\n },\n [field, searchField, onClear, onSearch]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n ariaSelected < (data?.length ?? 0) - 1 &&\n setAriaSelected((prev) => prev + 1);\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n ariaSelected > 0 && setAriaSelected((prev) => prev - 1);\n }\n if (e.key === 'Enter' && data && data[ariaSelected]) {\n e.preventDefault();\n e.stopPropagation();\n onChange(data[ariaSelected]);\n }\n },\n [data, ariaSelected, onChange]\n );\n\n useEffect(() => {\n const searchValue = field?.value?.[fieldValue as keyof typeof field.value];\n if (searchValue !== searchField.value && updateSearchOnBlur) {\n searchField.onChange(searchValue);\n onSearch?.(searchValue);\n }\n }, [field.value]);\n\n return (\n <FormItem\n className={cn('w-full flex flex-col', className)}\n id={`input-suggest-${inputName}`}\n >\n <div className=\"flex items-end gap-1.5\">\n <FormLabel htmlFor={inputName}>\n {label}:\n {required && (\n <span className=\"text-red-500 text-lg leading-[1px]\">*</span>\n )}\n </FormLabel>\n\n <InputHelp help={help} name={inputName} />\n </div>\n <Popover onOpenChange={setOpen} open={open} {...props}>\n <PopoverTrigger className=\"outline-hidden w-full relative\">\n <Input\n autoComplete=\"off\"\n className={cn(fieldState.error && 'border-destructive')}\n disabled={disabled}\n name={name}\n onInput={handleChange}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n ref={\n mask\n ? withMask(mask, { autoUnmask: true, ...maskOptions })\n : (undefined as any)\n }\n value={searchField.value}\n />\n {children}\n </PopoverTrigger>\n {fieldState.error && <FormMessage />}\n <PopoverContent\n className={cn(\n 'mt-1 w-(--radix-popover-trigger-width) max-w-2xl p-0 z-50',\n data?.length === 0 && 'hidden'\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <ScrollArea className=\"h-fit max-h-[300px]\" id=\"scroll\">\n <ScrollAreaViewport className=\"w-full h-fit max-h-[300px]\">\n <ul className=\"p-1\">\n {data?.slice(0, limit)?.map((item) => (\n <li\n aria-selected={data[ariaSelected]?.id === item.id}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:bg-accent/50 hover:text-accent-foreground',\n field?.value?.id === item.id &&\n 'bg-accent! text-accent-foreground'\n )}\n key={item.id}\n onMouseDown={(e) => {\n onChange(item);\n e.preventDefault();\n }}\n >\n <span className=\"line-clamp-1 flex-1\">\n {refineSuggest\n ? refineSuggest(item)\n : item?.[fieldValue as keyof typeof item]}\n </span>\n {field?.value?.id == item.id && (\n <Check className=\"ml-auto h-4 w-4 shrink-0\" />\n )}\n </li>\n ))}\n\n {extra && (\n <li\n className={cn(\n 'flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden aria-selected:bg-accent/50 aria-selected:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 transition-all hover:text-accent-foreground sticky bottom-0.5 bg-white hover:bg-accent'\n )}\n onMouseDown={(e) => {\n e.preventDefault();\n extraOnClick?.();\n }}\n >\n <span className=\"line-clamp-1\">{extra}</span>\n </li>\n )}\n\n {(data?.length === 0 || !data) && !extra && (\n <p className=\"text-sm text-center text-accent-foreground/50 py-2\">\n Nenhum resultado encontrado.\n </p>\n )}\n </ul>\n </ScrollAreaViewport>\n <ScrollBar />\n </ScrollArea>\n </PopoverContent>\n </Popover>\n </FormItem>\n );\n}\n\nexport { InputSuggest };\n"],"mappings":";;;;;;;;;;;;;;;;;AA6EA,SAAS,aAGP,EACA,MACA,YACA,UACA,aAAa,QACb,OACA,WACA,aACA,SACA,UACA,UACA,UACA,qBAAqB,MACrB,OACA,OACA,cACA,aAAa,OACb,SACA,MACA,QACA,aACA,eACA,QAAQ,IACR,MACA,aACA,UACA,SACA,eACA,eAAe,KACf,UAAU,KACV,GAAG,SAC0D;CAC7D,MAAM,OAAO,gBAAgB;CAC7B,MAAM,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS;CAGjD,MAAM,EAAE,OAAO,gBAAgB,cAAc;EAC3C,MAHiB,SAAS,GAAG,OAAO,GAAG,eAAe;EAItD,SAAS,KAAK;EACf,CAAC;CACF,MAAM,EAAE,OAAO,eAAe,cAAc;EAC1C,MAAM;EACN,SAAS,KAAK;EACf,CAAC;CAEF,MAAM,CAAC,cAAc,mBAAmB,SAAS,GAAG;CAEpD,MAAM,CAAC,MAAM,WAAW,SAAS,MAAM;CAEvC,MAAM,CAAC,mBAAmB,YAAY,YAAY,OAAO,cAAc,EAC5D,SACV,CAAC;CACF,MAAM,EAAE,SAAS,UAAU,iBAAiB,cAAc;CAE1D,MAAM,WAAW,aACd,SAAc;EACb,MAAM,cAAc,OAAO;AAC3B,cAAY,SAAS,YAAY;AACjC,aAAW,YAAY;AACvB,QAAM,SAAS,cAAc,KAAK,IAAI,KAAK;AAC3C,UAAQ,MAAM;IAEhB;EAAC,MAAM;EAAO;EAAa;EAAW,CACvC;CAED,MAAM,eAAe,aAClB,MAAyC;EACxC,MAAM,QAAQ,EAAE,cAAc;AAE9B,MAAI,UAAU,IAAI;AAChB,eAAY,SAAS,GAAG;AACxB,SAAM,SAAS,KAAK;AACpB,cAAW;AACX,cAAW,GAAG;AACd;;AAGF,cAAY,SAAS,MAAM;AAC3B,aAAW,MAAM;AACjB,UAAQ,KAAK;EAEb,MAAM,OAAO,MAAM,MAAM,SAAS,KAAK,gBAAgB,MAAM;AAC7D,MAAI,MAAM;AACR,YAAS,KAAK;AACd,WAAQ,MAAM;;IAGlB;EAAC;EAAO;EAAa;EAAS;EAAS,CACxC;CAED,MAAM,gBAAgB,aACnB,MAA6C;AAC5C,MAAI,EAAE,QAAQ,aAAa;AACzB,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,mBAAgB,MAAM,UAAU,KAAK,KACnC,iBAAiB,SAAS,OAAO,EAAE;;AAEvC,MAAI,EAAE,QAAQ,WAAW;AACvB,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,kBAAe,KAAK,iBAAiB,SAAS,OAAO,EAAE;;AAEzD,MAAI,EAAE,QAAQ,WAAW,QAAQ,KAAK,eAAe;AACnD,KAAE,gBAAgB;AAClB,KAAE,iBAAiB;AACnB,YAAS,KAAK,cAAc;;IAGhC;EAAC;EAAM;EAAc;EAAS,CAC/B;AAED,iBAAgB;EACd,MAAM,cAAc,OAAO,QAAQ;AACnC,MAAI,gBAAgB,YAAY,SAAS,oBAAoB;AAC3D,eAAY,SAAS,YAAY;AACjC,cAAW,YAAY;;IAExB,CAAC,MAAM,MAAM,CAAC;AAEjB,QACE,qBAAC,UAAD;EACE,WAAW,GAAG,wBAAwB,UAAU;EAChD,IAAI,iBAAiB;YAFvB,CAIE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,qBAAC,WAAD;IAAW,SAAS;cAApB;KACG;KAAM;KACN,YACC,oBAAC,QAAD;MAAM,WAAU;gBAAqC;MAAQ;KAErD;OAEZ,oBAAC,WAAD;IAAiB;IAAM,MAAM;IAAa,EACtC;MACN,qBAAC,SAAD;GAAS,cAAc;GAAe;GAAM,GAAI;aAAhD;IACE,qBAAC,gBAAD;KAAgB,WAAU;eAA1B,CACE,oBAAC,OAAD;MACE,cAAa;MACb,WAAW,GAAG,WAAW,SAAS,qBAAqB;MAC7C;MACJ;MACN,SAAS;MACT,WAAW;MACE;MACb,KACE,OACI,SAAS,MAAM;OAAE,YAAY;OAAM,GAAG;OAAa,CAAC,GACnD;MAEP,OAAO,YAAY;MACnB,GACD,SACc;;IAChB,WAAW,SAAS,oBAAC,aAAD,EAAe;IACpC,oBAAC,gBAAD;KACE,WAAW,GACT,6DACA,MAAM,WAAW,KAAK,SACvB;KACD,kBAAkB,MAAM,EAAE,gBAAgB;eAE1C,qBAAC,YAAD;MAAY,WAAU;MAAsB,IAAG;gBAA/C,CACE,oBAAC,oBAAD;OAAoB,WAAU;iBAC5B,qBAAC,MAAD;QAAI,WAAU;kBAAd;SACG,MAAM,MAAM,GAAG,MAAM,EAAE,KAAK,SAC3B,qBAAC,MAAD;UACE,iBAAe,KAAK,eAAe,OAAO,KAAK;UAC/C,WAAW,GACT,+SACA,OAAO,OAAO,OAAO,KAAK,MACxB,oCACH;UAED,cAAc,MAAM;AAClB,oBAAS,KAAK;AACd,aAAE,gBAAgB;;oBAVtB,CAaE,oBAAC,QAAD;WAAM,WAAU;qBACb,gBACG,cAAc,KAAK,GACnB,OAAO;WACN,GACN,OAAO,OAAO,MAAM,KAAK,MACxB,oBAAC,OAAD,EAAO,WAAU,4BAA6B,EAE7C;YAdE,KAAK,GAcP,CACL;SAED,SACC,oBAAC,MAAD;UACE,WAAW,GACT,6TACD;UACD,cAAc,MAAM;AAClB,aAAE,gBAAgB;AAClB,2BAAgB;;oBAGlB,oBAAC,QAAD;WAAM,WAAU;qBAAgB;WAAa;UAC1C;UAGL,MAAM,WAAW,KAAK,CAAC,SAAS,CAAC,SACjC,oBAAC,KAAD;UAAG,WAAU;oBAAqD;UAE9D;SAEH;;OACc,GACrB,oBAAC,WAAD,EAAa,EACF;;KACE;IACT;KACD"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { InputSuggest } from "./input-suggest/input-suggest.js";
5
4
 
6
5
  export { InputSuggest };
@@ -1,7 +1,4 @@
1
1
  //#region src/components/kanban-dnd/constants.ts
2
- const PREVIEW_STACK_LIMIT = 10;
3
- const PREVIEW_STACK_X_OFFSET = 10;
4
- const PREVIEW_STACK_Y_OFFSET = 8;
5
2
  const PREVIEW_STACK_MIN_OPACITY = .75;
6
3
  const STACKED_CLONE_BASE_STYLE = {
7
4
  pointerEvents: "none",
@@ -24,5 +21,5 @@ const DEFAULT_AUTO_SCROLL_OVERFLOW = {
24
21
  };
25
22
 
26
23
  //#endregion
27
- export { DEFAULT_AUTO_SCROLL_OVERFLOW, PREVIEW_STACK_LIMIT, PREVIEW_STACK_MIN_OPACITY, PREVIEW_STACK_X_OFFSET, PREVIEW_STACK_Y_OFFSET, STACKED_CLONE_BASE_STYLE };
24
+ export { DEFAULT_AUTO_SCROLL_OVERFLOW, PREVIEW_STACK_MIN_OPACITY, STACKED_CLONE_BASE_STYLE };
28
25
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>"],"sources":["../../src/components/kanban-dnd/constants.ts"],"sourcesContent":["export const PREVIEW_STACK_LIMIT = 10;\nexport const PREVIEW_STACK_X_OFFSET = 10;\nexport const PREVIEW_STACK_Y_OFFSET = 8;\nexport const PREVIEW_STACK_MIN_OPACITY = 0.75;\n\nexport const STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration> = {\n pointerEvents: 'none',\n margin: '0',\n width: '100%',\n top: '0',\n left: '0',\n};\n\nexport const DEFAULT_AUTO_SCROLL_OVERFLOW = {\n forLeftEdge: {\n left: 320,\n top: 160,\n bottom: 160,\n },\n forRightEdge: {\n right: 160,\n top: 120,\n bottom: 120,\n },\n};\n"],"mappings":";AAAA,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,4BAA4B;AAEzC,MAAaA,2BAAyD;CACpE,eAAe;CACf,QAAQ;CACR,OAAO;CACP,KAAK;CACL,MAAM;CACP;AAED,MAAa,+BAA+B;CAC1C,aAAa;EACX,MAAM;EACN,KAAK;EACL,QAAQ;EACT;CACD,cAAc;EACZ,OAAO;EACP,KAAK;EACL,QAAQ;EACT;CACF"}
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../src/components/kanban-dnd/constants.ts"],"sourcesContent":["export const PREVIEW_STACK_LIMIT = 10;\nexport const PREVIEW_STACK_X_OFFSET = 10;\nexport const PREVIEW_STACK_Y_OFFSET = 8;\nexport const PREVIEW_STACK_MIN_OPACITY = 0.75;\n\nexport const STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration> = {\n pointerEvents: 'none',\n margin: '0',\n width: '100%',\n top: '0',\n left: '0',\n};\n\nexport const DEFAULT_AUTO_SCROLL_OVERFLOW = {\n forLeftEdge: {\n left: 320,\n top: 160,\n bottom: 160,\n },\n forRightEdge: {\n right: 160,\n top: 120,\n bottom: 120,\n },\n};\n"],"mappings":";AAGA,MAAa,4BAA4B;AAEzC,MAAa,2BAAyD;CACpE,eAAe;CACf,QAAQ;CACR,OAAO;CACP,KAAK;CACL,MAAM;CACP;AAED,MAAa,+BAA+B;CAC1C,aAAa;EACX,MAAM;EACN,KAAK;EACL,QAAQ;EACT;CACD,cAAc;EACZ,OAAO;EACP,KAAK;EACL,QAAQ;EACT;CACF"}
@@ -1,8 +1,4 @@
1
- import "./types.js";
2
- import "react/jsx-runtime";
3
-
4
1
  //#region src/components/kanban-dnd/context.d.ts
5
-
6
2
  declare function useKanbanSelection(): {
7
3
  selectedCardIds: string[];
8
4
  isSelected: (cardId: string) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/components/kanban-dnd/context.tsx"],"sourcesContent":[],"mappings":";;;;;iBAsCgB,kBAAA,CAAA;;;;;;;;iBA8BA,qBAAA;iBAcA,yBAAA,CAAA"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../src/components/kanban-dnd/context.tsx"],"mappings":";iBAsCgB,kBAAA,CAAA;;;;;;;;iBA8BA,qBAAA,CAAsB,MAAA;AAAA,iBActB,yBAAA,CAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { createContext, useContext, useSyncExternalStore } from "react";
5
4
  import { jsx } from "react/jsx-runtime";
6
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../src/components/kanban-dnd/context.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useSyncExternalStore } from 'react';\n\nimport type { KanbanSelectableItem } from './types';\n\ntype KanbanDndContextValue = {\n getIsDragging: () => boolean;\n getSelectedCardIds: () => string[];\n subscribeSelection: (listener: () => void) => () => void;\n setSelectedCardIds: (cardIds: string[]) => void;\n addSelectedCardId: (cardId: string) => void;\n clearSelectedCards: () => void;\n toggleSelectedCardId: (cardId: string) => void;\n registerSelectableItem: (id: string, element: HTMLElement | null) => void;\n getSelectableItems: () => KanbanSelectableItem[];\n};\n\nconst KanbanDndContext = createContext<KanbanDndContextValue | null>(null);\n\nexport function KanbanDndProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KanbanDndContextValue;\n}) {\n return (\n <KanbanDndContext.Provider value={value}>\n {children}\n </KanbanDndContext.Provider>\n );\n}\n\nexport function useKanbanDndContext() {\n return useContext(KanbanDndContext);\n}\n\nexport function useKanbanSelection() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n selectedCardIds: [] as string[],\n isSelected: () => false,\n setSelectedCardIds: () => {},\n addSelectedCardId: () => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: () => {},\n };\n }\n\n const selectedCardIds = useSyncExternalStore(\n context.subscribeSelection,\n context.getSelectedCardIds,\n () => []\n );\n\n return {\n selectedCardIds,\n isSelected: (cardId: string) => selectedCardIds.includes(cardId),\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n\nexport function useKanbanCardSelected(cardId: string | number) {\n const context = useKanbanDndContext();\n\n if (!context) return false;\n\n const normalizedId = String(cardId);\n\n return useSyncExternalStore(\n context.subscribeSelection,\n () => context.getSelectedCardIds().includes(normalizedId),\n () => false\n );\n}\n\nexport function useKanbanSelectionActions() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n setSelectedCardIds: (_cardIds: string[]) => {},\n addSelectedCardId: (_cardId: string) => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: (_cardId: string) => {},\n };\n }\n\n return {\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n"],"mappings":";;;;;;;AAkBA,MAAM,mBAAmB,cAA4C,KAAK;AAE1E,SAAgB,kBAAkB,EAChC,UACA,SAIC;AACD,QACE,oBAAC,iBAAiB;EAAgB;EAC/B;GACyB;;AAIhC,SAAgB,sBAAsB;AACpC,QAAO,WAAW,iBAAiB;;AAGrC,SAAgB,qBAAqB;CACnC,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QACH,QAAO;EACL,iBAAiB,EAAE;EACnB,kBAAkB;EAClB,0BAA0B;EAC1B,yBAAyB;EACzB,0BAA0B;EAC1B,4BAA4B;EAC7B;CAGH,MAAM,kBAAkB,qBACtB,QAAQ,oBACR,QAAQ,0BACF,EAAE,CACT;AAED,QAAO;EACL;EACA,aAAa,WAAmB,gBAAgB,SAAS,OAAO;EAChE,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,sBAAsB,QAAQ;EAC/B;;AAGH,SAAgB,sBAAsB,QAAyB;CAC7D,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,eAAe,OAAO,OAAO;AAEnC,QAAO,qBACL,QAAQ,0BACF,QAAQ,oBAAoB,CAAC,SAAS,aAAa,QACnD,MACP;;AAGH,SAAgB,4BAA4B;CAC1C,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QACH,QAAO;EACL,qBAAqB,aAAuB;EAC5C,oBAAoB,YAAoB;EACxC,0BAA0B;EAC1B,uBAAuB,YAAoB;EAC5C;AAGH,QAAO;EACL,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,sBAAsB,QAAQ;EAC/B"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../src/components/kanban-dnd/context.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useSyncExternalStore } from 'react';\n\nimport type { KanbanSelectableItem } from './types';\n\ntype KanbanDndContextValue = {\n getIsDragging: () => boolean;\n getSelectedCardIds: () => string[];\n subscribeSelection: (listener: () => void) => () => void;\n setSelectedCardIds: (cardIds: string[]) => void;\n addSelectedCardId: (cardId: string) => void;\n clearSelectedCards: () => void;\n toggleSelectedCardId: (cardId: string) => void;\n registerSelectableItem: (id: string, element: HTMLElement | null) => void;\n getSelectableItems: () => KanbanSelectableItem[];\n};\n\nconst KanbanDndContext = createContext<KanbanDndContextValue | null>(null);\n\nexport function KanbanDndProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KanbanDndContextValue;\n}) {\n return (\n <KanbanDndContext.Provider value={value}>\n {children}\n </KanbanDndContext.Provider>\n );\n}\n\nexport function useKanbanDndContext() {\n return useContext(KanbanDndContext);\n}\n\nexport function useKanbanSelection() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n selectedCardIds: [] as string[],\n isSelected: () => false,\n setSelectedCardIds: () => {},\n addSelectedCardId: () => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: () => {},\n };\n }\n\n const selectedCardIds = useSyncExternalStore(\n context.subscribeSelection,\n context.getSelectedCardIds,\n () => []\n );\n\n return {\n selectedCardIds,\n isSelected: (cardId: string) => selectedCardIds.includes(cardId),\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n\nexport function useKanbanCardSelected(cardId: string | number) {\n const context = useKanbanDndContext();\n\n if (!context) return false;\n\n const normalizedId = String(cardId);\n\n return useSyncExternalStore(\n context.subscribeSelection,\n () => context.getSelectedCardIds().includes(normalizedId),\n () => false\n );\n}\n\nexport function useKanbanSelectionActions() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n setSelectedCardIds: (_cardIds: string[]) => {},\n addSelectedCardId: (_cardId: string) => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: (_cardId: string) => {},\n };\n }\n\n return {\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n"],"mappings":";;;;;;AAkBA,MAAM,mBAAmB,cAA4C,KAAK;AAE1E,SAAgB,kBAAkB,EAChC,UACA,SAIC;AACD,QACE,oBAAC,iBAAiB,UAAlB;EAAkC;EAC/B;EACyB;;AAIhC,SAAgB,sBAAsB;AACpC,QAAO,WAAW,iBAAiB;;AAGrC,SAAgB,qBAAqB;CACnC,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QACH,QAAO;EACL,iBAAiB,EAAE;EACnB,kBAAkB;EAClB,0BAA0B;EAC1B,yBAAyB;EACzB,0BAA0B;EAC1B,4BAA4B;EAC7B;CAGH,MAAM,kBAAkB,qBACtB,QAAQ,oBACR,QAAQ,0BACF,EAAE,CACT;AAED,QAAO;EACL;EACA,aAAa,WAAmB,gBAAgB,SAAS,OAAO;EAChE,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,sBAAsB,QAAQ;EAC/B;;AAGH,SAAgB,sBAAsB,QAAyB;CAC7D,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,eAAe,OAAO,OAAO;AAEnC,QAAO,qBACL,QAAQ,0BACF,QAAQ,oBAAoB,CAAC,SAAS,aAAa,QACnD,MACP;;AAGH,SAAgB,4BAA4B;CAC1C,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QACH,QAAO;EACL,qBAAqB,aAAuB;EAC5C,oBAAoB,YAAoB;EACxC,0BAA0B;EAC1B,uBAAuB,YAAoB;EAC5C;AAGH,QAAO;EACL,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,sBAAsB,QAAQ;EAC/B"}
@@ -1,11 +1,11 @@
1
- import { PREVIEW_STACK_LIMIT, PREVIEW_STACK_MIN_OPACITY, PREVIEW_STACK_X_OFFSET, PREVIEW_STACK_Y_OFFSET, STACKED_CLONE_BASE_STYLE } from "./constants.js";
1
+ import { PREVIEW_STACK_MIN_OPACITY, STACKED_CLONE_BASE_STYLE } from "./constants.js";
2
2
  import { applyStyles } from "./utils.js";
3
3
 
4
4
  //#region src/components/kanban-dnd/drag-preview.ts
5
5
  function createStackedClone(original, index, widthPx) {
6
6
  const clone = original.cloneNode(true);
7
- const xOffset = index * PREVIEW_STACK_X_OFFSET;
8
- const yOffset = index * PREVIEW_STACK_Y_OFFSET;
7
+ const xOffset = index * 10;
8
+ const yOffset = index * 8;
9
9
  const opacity = Math.max(1 - index * .1, PREVIEW_STACK_MIN_OPACITY);
10
10
  applyStyles(clone, {
11
11
  ...STACKED_CLONE_BASE_STYLE,
@@ -44,7 +44,7 @@ function buildDragPreview({ cardId, sourceElement, getSelectableItems, getSelect
44
44
  });
45
45
  const selectableItems = getSelectableItems?.() ?? [];
46
46
  const itemElementById = new Map(selectableItems.filter((item) => item.element).map((item) => [String(item.id), item.element]));
47
- idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {
47
+ idsToPreview.slice(0, 10).forEach((previewId, index) => {
48
48
  const original = itemElementById.get(String(previewId));
49
49
  if (!original) return;
50
50
  root.appendChild(createStackedClone(original, index, widthPx));
@@ -1 +1 @@
1
- {"version":3,"file":"drag-preview.js","names":[],"sources":["../../src/components/kanban-dnd/drag-preview.ts"],"sourcesContent":["import {\n PREVIEW_STACK_LIMIT,\n PREVIEW_STACK_MIN_OPACITY,\n PREVIEW_STACK_X_OFFSET,\n PREVIEW_STACK_Y_OFFSET,\n STACKED_CLONE_BASE_STYLE,\n} from './constants';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nfunction createStackedClone(\n original: HTMLElement,\n index: number,\n widthPx: string\n) {\n const clone = original.cloneNode(true) as HTMLElement;\n const xOffset = index * PREVIEW_STACK_X_OFFSET;\n const yOffset = index * PREVIEW_STACK_Y_OFFSET;\n const opacity = Math.max(1 - index * 0.1, PREVIEW_STACK_MIN_OPACITY);\n\n applyStyles(clone, {\n ...STACKED_CLONE_BASE_STYLE,\n position: index === 0 ? 'relative' : 'absolute',\n transform: `translate(${xOffset}px, ${yOffset}px)`,\n opacity: String(opacity),\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement, widthPx: string) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\n });\n\n return fallback;\n}\n\nexport function buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const selectedIds = getSelectedCardIds?.() ?? [];\n const idsToPreview = Array.from(new Set([...selectedIds, String(cardId)]));\n const root = document.createElement('div');\n const widthPx = `${sourceElement.getBoundingClientRect().width}px`;\n\n applyStyles(root, {\n position: 'relative',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n });\n\n const selectableItems = getSelectableItems?.() ?? [];\n const itemElementById = new Map(\n selectableItems\n .filter((item) => item.element)\n .map((item) => [String(item.id), item.element as HTMLElement])\n );\n\n idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {\n const original = itemElementById.get(String(previewId));\n if (!original) return;\n\n root.appendChild(createStackedClone(original, index, widthPx));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement, widthPx));\n }\n\n return root;\n}\n"],"mappings":";;;;AAUA,SAAS,mBACP,UACA,OACA,SACA;CACA,MAAM,QAAQ,SAAS,UAAU,KAAK;CACtC,MAAM,UAAU,QAAQ;CACxB,MAAM,UAAU,QAAQ;CACxB,MAAM,UAAU,KAAK,IAAI,IAAI,QAAQ,IAAK,0BAA0B;AAEpE,aAAY,OAAO;EACjB,GAAG;EACH,UAAU,UAAU,IAAI,aAAa;EACrC,WAAW,aAAa,QAAQ,MAAM,QAAQ;EAC9C,SAAS,OAAO,QAAQ;EACxB,OAAO;EACP,UAAU;EACV,UAAU;EACV,WAAW;EACZ,CAAC;AAEF,QAAO;;AAGT,SAAS,oBAAoB,eAA4B,SAAiB;CACxE,MAAM,WAAW,cAAc,UAAU,KAAK;AAE9C,aAAY,UAAU;EACpB,eAAe;EACf,QAAQ;EACR,OAAO;EACP,UAAU;EACV,UAAU;EACV,WAAW;EACZ,CAAC;AAEF,QAAO;;AAGT,SAAgB,iBAAiB,EAC/B,QACA,eACA,oBACA,sBAMC;CACD,MAAM,cAAc,sBAAsB,IAAI,EAAE;CAChD,MAAM,eAAe,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,aAAa,OAAO,OAAO,CAAC,CAAC,CAAC;CAC1E,MAAM,OAAO,SAAS,cAAc,MAAM;CAC1C,MAAM,UAAU,GAAG,cAAc,uBAAuB,CAAC,MAAM;AAE/D,aAAY,MAAM;EAChB,UAAU;EACV,OAAO;EACP,UAAU;EACV,UAAU;EACX,CAAC;CAEF,MAAM,kBAAkB,sBAAsB,IAAI,EAAE;CACpD,MAAM,kBAAkB,IAAI,IAC1B,gBACG,QAAQ,SAAS,KAAK,QAAQ,CAC9B,KAAK,SAAS,CAAC,OAAO,KAAK,GAAG,EAAE,KAAK,QAAuB,CAAC,CACjE;AAED,cAAa,MAAM,GAAG,oBAAoB,CAAC,SAAS,WAAW,UAAU;EACvE,MAAM,WAAW,gBAAgB,IAAI,OAAO,UAAU,CAAC;AACvD,MAAI,CAAC,SAAU;AAEf,OAAK,YAAY,mBAAmB,UAAU,OAAO,QAAQ,CAAC;GAC9D;AAEF,KAAI,CAAC,KAAK,kBACR,MAAK,YAAY,oBAAoB,eAAe,QAAQ,CAAC;AAG/D,QAAO"}
1
+ {"version":3,"file":"drag-preview.js","names":[],"sources":["../../src/components/kanban-dnd/drag-preview.ts"],"sourcesContent":["import {\n PREVIEW_STACK_LIMIT,\n PREVIEW_STACK_MIN_OPACITY,\n PREVIEW_STACK_X_OFFSET,\n PREVIEW_STACK_Y_OFFSET,\n STACKED_CLONE_BASE_STYLE,\n} from './constants';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nfunction createStackedClone(\n original: HTMLElement,\n index: number,\n widthPx: string\n) {\n const clone = original.cloneNode(true) as HTMLElement;\n const xOffset = index * PREVIEW_STACK_X_OFFSET;\n const yOffset = index * PREVIEW_STACK_Y_OFFSET;\n const opacity = Math.max(1 - index * 0.1, PREVIEW_STACK_MIN_OPACITY);\n\n applyStyles(clone, {\n ...STACKED_CLONE_BASE_STYLE,\n position: index === 0 ? 'relative' : 'absolute',\n transform: `translate(${xOffset}px, ${yOffset}px)`,\n opacity: String(opacity),\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement, widthPx: string) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\n });\n\n return fallback;\n}\n\nexport function buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const selectedIds = getSelectedCardIds?.() ?? [];\n const idsToPreview = Array.from(new Set([...selectedIds, String(cardId)]));\n const root = document.createElement('div');\n const widthPx = `${sourceElement.getBoundingClientRect().width}px`;\n\n applyStyles(root, {\n position: 'relative',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n });\n\n const selectableItems = getSelectableItems?.() ?? [];\n const itemElementById = new Map(\n selectableItems\n .filter((item) => item.element)\n .map((item) => [String(item.id), item.element as HTMLElement])\n );\n\n idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {\n const original = itemElementById.get(String(previewId));\n if (!original) return;\n\n root.appendChild(createStackedClone(original, index, widthPx));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement, widthPx));\n }\n\n return root;\n}\n"],"mappings":";;;;AAUA,SAAS,mBACP,UACA,OACA,SACA;CACA,MAAM,QAAQ,SAAS,UAAU,KAAK;CACtC,MAAM,UAAU;CAChB,MAAM,UAAU;CAChB,MAAM,UAAU,KAAK,IAAI,IAAI,QAAQ,IAAK,0BAA0B;AAEpE,aAAY,OAAO;EACjB,GAAG;EACH,UAAU,UAAU,IAAI,aAAa;EACrC,WAAW,aAAa,QAAQ,MAAM,QAAQ;EAC9C,SAAS,OAAO,QAAQ;EACxB,OAAO;EACP,UAAU;EACV,UAAU;EACV,WAAW;EACZ,CAAC;AAEF,QAAO;;AAGT,SAAS,oBAAoB,eAA4B,SAAiB;CACxE,MAAM,WAAW,cAAc,UAAU,KAAK;AAE9C,aAAY,UAAU;EACpB,eAAe;EACf,QAAQ;EACR,OAAO;EACP,UAAU;EACV,UAAU;EACV,WAAW;EACZ,CAAC;AAEF,QAAO;;AAGT,SAAgB,iBAAiB,EAC/B,QACA,eACA,oBACA,sBAMC;CACD,MAAM,cAAc,sBAAsB,IAAI,EAAE;CAChD,MAAM,eAAe,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,aAAa,OAAO,OAAO,CAAC,CAAC,CAAC;CAC1E,MAAM,OAAO,SAAS,cAAc,MAAM;CAC1C,MAAM,UAAU,GAAG,cAAc,uBAAuB,CAAC,MAAM;AAE/D,aAAY,MAAM;EAChB,UAAU;EACV,OAAO;EACP,UAAU;EACV,UAAU;EACX,CAAC;CAEF,MAAM,kBAAkB,sBAAsB,IAAI,EAAE;CACpD,MAAM,kBAAkB,IAAI,IAC1B,gBACG,QAAQ,SAAS,KAAK,QAAQ,CAC9B,KAAK,SAAS,CAAC,OAAO,KAAK,GAAG,EAAE,KAAK,QAAuB,CAAC,CACjE;AAED,cAAa,MAAM,MAAuB,CAAC,SAAS,WAAW,UAAU;EACvE,MAAM,WAAW,gBAAgB,IAAI,OAAO,UAAU,CAAC;AACvD,MAAI,CAAC,SAAU;AAEf,OAAK,YAAY,mBAAmB,UAAU,OAAO,QAAQ,CAAC;GAC9D;AAEF,KAAI,CAAC,KAAK,kBACR,MAAK,YAAY,oBAAoB,eAAe,QAAQ,CAAC;AAG/D,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"drop-animation.js","names":[],"sources":["../../src/components/kanban-dnd/drop-animation.ts"],"sourcesContent":["import { buildDragPreview } from './drag-preview';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nconst DROP_ANIMATION_DURATION_MS = 405;\nconst DROP_ANIMATION_EASING = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\nconst DROP_PREVIEW_Z_INDEX = '9999';\nconst DROP_PREVIEW_MIN_DELTA_PX = 6;\n\nfunction getCardIdFromElementId(elementId: string) {\n const prefix = 'kanban-card-item-';\n if (!elementId.startsWith(prefix)) return '';\n return elementId.slice(prefix.length);\n}\n\nfunction getDropDestinationPoint({\n targetElement,\n movingCardIds,\n}: {\n targetElement: HTMLElement;\n movingCardIds: Set<string>;\n}) {\n const targetRect = targetElement.getBoundingClientRect();\n const cardsInTarget = Array.from(\n targetElement.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n const remainingCards = cardsInTarget.filter((cardElement) => {\n const cardId = getCardIdFromElementId(cardElement.id);\n return cardId && !movingCardIds.has(cardId);\n });\n\n if (remainingCards.length === 0) {\n return {\n x: targetRect.left + Math.min(20, targetRect.width * 0.1),\n y: targetRect.top + Math.min(16, targetRect.height * 0.08),\n };\n }\n\n const lastCardRect =\n remainingCards[remainingCards.length - 1]?.getBoundingClientRect();\n\n return {\n x: lastCardRect?.left ?? targetRect.left,\n y: lastCardRect?.bottom ?? targetRect.bottom + 8,\n };\n}\n\nexport function animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n sourceRect?: Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;\n destinationPoint?: { x: number; y: number };\n}) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return;\n }\n\n const originRect = sourceRect ?? sourceElement.getBoundingClientRect();\n const selectedIds = getSelectedCardIds?.() ?? [];\n const movingCardIds = new Set<string>([\n ...selectedIds.map(String),\n String(cardId),\n ]);\n\n if (!originRect.width || !originRect.height) {\n return;\n }\n\n const preview = buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n });\n\n applyStyles(preview, {\n position: 'fixed',\n left: `${originRect.left}px`,\n top: `${originRect.top}px`,\n width: `${originRect.width}px`,\n pointerEvents: 'none',\n zIndex: DROP_PREVIEW_Z_INDEX,\n margin: '0',\n transformOrigin: 'top left',\n willChange: 'transform, opacity',\n });\n\n document.body.appendChild(preview);\n\n const destination =\n destinationPoint ??\n getDropDestinationPoint({\n targetElement,\n movingCardIds,\n });\n\n const targetX = destination.x;\n const targetY = destination.y;\n const translateX = targetX - originRect.left;\n const translateY = targetY - originRect.top;\n\n const animation = preview.animate(\n [\n {\n transform: 'translate3d(0, 0, 0) scale(1)',\n opacity: 1,\n },\n {\n transform: `translate3d(${translateX}px, ${translateY}px, 0) scale(0.88)`,\n opacity: 0,\n },\n ],\n {\n duration: DROP_ANIMATION_DURATION_MS,\n easing: DROP_ANIMATION_EASING,\n fill: 'forwards',\n }\n );\n\n const cleanup = () => {\n if (preview.parentElement) {\n preview.parentElement.removeChild(preview);\n }\n };\n\n animation.addEventListener('finish', cleanup, { once: true });\n animation.addEventListener('cancel', cleanup, { once: true });\n}\n\nfunction animateContainerReorder(container: HTMLElement, mutate: () => void) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n mutate();\n return;\n }\n\n const beforeRects = new Map<string, DOMRect>();\n const beforeElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n beforeElements.forEach((element) => {\n beforeRects.set(element.id, element.getBoundingClientRect());\n });\n\n mutate();\n\n requestAnimationFrame(() => {\n const afterElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n afterElements.forEach((element) => {\n const before = beforeRects.get(element.id);\n if (!before) return;\n\n const after = element.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) {\n return;\n }\n\n element.animate(\n [\n { transform: `translate(${dx}px, ${dy}px)` },\n { transform: 'translate(0, 0)' },\n ],\n {\n duration: 278,\n easing: 'cubic-bezier(0.2, 0.8, 0.2, 1)',\n }\n );\n });\n });\n}\n\nexport function animateCardDropToFinalPosition({\n cardId,\n sourceElement,\n targetElement,\n performDrop,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n performDrop: () => void;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const sourceRect = sourceElement.getBoundingClientRect();\n\n animateContainerReorder(targetElement, performDrop);\n\n requestAnimationFrame(() => {\n const finalCardElement = document.getElementById(\n `kanban-card-item-${cardId}`\n );\n const destinationRect =\n finalCardElement instanceof HTMLElement\n ? finalCardElement.getBoundingClientRect()\n : targetElement.getBoundingClientRect();\n\n const dx = Math.abs(destinationRect.left - sourceRect.left);\n const dy = Math.abs(destinationRect.top - sourceRect.top);\n if (dx < DROP_PREVIEW_MIN_DELTA_PX && dy < DROP_PREVIEW_MIN_DELTA_PX) {\n return;\n }\n\n animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint: {\n x: destinationRect.left,\n y: destinationRect.top,\n },\n });\n });\n}\n"],"mappings":";;;;AAIA,MAAM,6BAA6B;AACnC,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,4BAA4B;AAElC,SAAS,uBAAuB,WAAmB;AAEjD,KAAI,CAAC,UAAU,WADA,oBACkB,CAAE,QAAO;AAC1C,QAAO,UAAU,MAAM,GAAc;;AAGvC,SAAS,wBAAwB,EAC/B,eACA,iBAIC;CACD,MAAM,aAAa,cAAc,uBAAuB;CAKxD,MAAM,iBAJgB,MAAM,KAC1B,cAAc,iBAA8B,8BAA4B,CACzE,CAEoC,QAAQ,gBAAgB;EAC3D,MAAM,SAAS,uBAAuB,YAAY,GAAG;AACrD,SAAO,UAAU,CAAC,cAAc,IAAI,OAAO;GAC3C;AAEF,KAAI,eAAe,WAAW,EAC5B,QAAO;EACL,GAAG,WAAW,OAAO,KAAK,IAAI,IAAI,WAAW,QAAQ,GAAI;EACzD,GAAG,WAAW,MAAM,KAAK,IAAI,IAAI,WAAW,SAAS,IAAK;EAC3D;CAGH,MAAM,eACJ,eAAe,eAAe,SAAS,IAAI,uBAAuB;AAEpE,QAAO;EACL,GAAG,cAAc,QAAQ,WAAW;EACpC,GAAG,cAAc,UAAU,WAAW,SAAS;EAChD;;AAGH,SAAgB,2BAA2B,EACzC,QACA,eACA,eACA,oBACA,oBACA,YACA,oBASC;AACD,KAAI,OAAO,WAAW,mCAAmC,CAAC,QACxD;CAGF,MAAM,aAAa,cAAc,cAAc,uBAAuB;CACtE,MAAM,cAAc,sBAAsB,IAAI,EAAE;CAChD,MAAM,gBAAgB,IAAI,IAAY,CACpC,GAAG,YAAY,IAAI,OAAO,EAC1B,OAAO,OAAO,CACf,CAAC;AAEF,KAAI,CAAC,WAAW,SAAS,CAAC,WAAW,OACnC;CAGF,MAAM,UAAU,iBAAiB;EAC/B;EACA;EACA;EACA;EACD,CAAC;AAEF,aAAY,SAAS;EACnB,UAAU;EACV,MAAM,GAAG,WAAW,KAAK;EACzB,KAAK,GAAG,WAAW,IAAI;EACvB,OAAO,GAAG,WAAW,MAAM;EAC3B,eAAe;EACf,QAAQ;EACR,QAAQ;EACR,iBAAiB;EACjB,YAAY;EACb,CAAC;AAEF,UAAS,KAAK,YAAY,QAAQ;CAElC,MAAM,cACJ,oBACA,wBAAwB;EACtB;EACA;EACD,CAAC;CAEJ,MAAM,UAAU,YAAY;CAC5B,MAAM,UAAU,YAAY;CAC5B,MAAM,aAAa,UAAU,WAAW;CACxC,MAAM,aAAa,UAAU,WAAW;CAExC,MAAM,YAAY,QAAQ,QACxB,CACE;EACE,WAAW;EACX,SAAS;EACV,EACD;EACE,WAAW,eAAe,WAAW,MAAM,WAAW;EACtD,SAAS;EACV,CACF,EACD;EACE,UAAU;EACV,QAAQ;EACR,MAAM;EACP,CACF;CAED,MAAM,gBAAgB;AACpB,MAAI,QAAQ,cACV,SAAQ,cAAc,YAAY,QAAQ;;AAI9C,WAAU,iBAAiB,UAAU,SAAS,EAAE,MAAM,MAAM,CAAC;AAC7D,WAAU,iBAAiB,UAAU,SAAS,EAAE,MAAM,MAAM,CAAC;;AAG/D,SAAS,wBAAwB,WAAwB,QAAoB;AAC3E,KAAI,OAAO,WAAW,mCAAmC,CAAC,SAAS;AACjE,UAAQ;AACR;;CAGF,MAAM,8BAAc,IAAI,KAAsB;AAK9C,CAJuB,MAAM,KAC3B,UAAU,iBAA8B,8BAA4B,CACrE,CAEc,SAAS,YAAY;AAClC,cAAY,IAAI,QAAQ,IAAI,QAAQ,uBAAuB,CAAC;GAC5D;AAEF,SAAQ;AAER,6BAA4B;AAK1B,EAJsB,MAAM,KAC1B,UAAU,iBAA8B,8BAA4B,CACrE,CAEa,SAAS,YAAY;GACjC,MAAM,SAAS,YAAY,IAAI,QAAQ,GAAG;AAC1C,OAAI,CAAC,OAAQ;GAEb,MAAM,QAAQ,QAAQ,uBAAuB;GAC7C,MAAM,KAAK,OAAO,OAAO,MAAM;GAC/B,MAAM,KAAK,OAAO,MAAM,MAAM;AAE9B,OAAI,KAAK,IAAI,GAAG,GAAG,MAAO,KAAK,IAAI,GAAG,GAAG,GACvC;AAGF,WAAQ,QACN,CACE,EAAE,WAAW,aAAa,GAAG,MAAM,GAAG,MAAM,EAC5C,EAAE,WAAW,mBAAmB,CACjC,EACD;IACE,UAAU;IACV,QAAQ;IACT,CACF;IACD;GACF;;AAGJ,SAAgB,+BAA+B,EAC7C,QACA,eACA,eACA,aACA,oBACA,sBAQC;CACD,MAAM,aAAa,cAAc,uBAAuB;AAExD,yBAAwB,eAAe,YAAY;AAEnD,6BAA4B;EAC1B,MAAM,mBAAmB,SAAS,eAChC,oBAAoB,SACrB;EACD,MAAM,kBACJ,4BAA4B,cACxB,iBAAiB,uBAAuB,GACxC,cAAc,uBAAuB;EAE3C,MAAM,KAAK,KAAK,IAAI,gBAAgB,OAAO,WAAW,KAAK;EAC3D,MAAM,KAAK,KAAK,IAAI,gBAAgB,MAAM,WAAW,IAAI;AACzD,MAAI,KAAK,6BAA6B,KAAK,0BACzC;AAGF,6BAA2B;GACzB;GACA;GACA;GACA;GACA;GACA;GACA,kBAAkB;IAChB,GAAG,gBAAgB;IACnB,GAAG,gBAAgB;IACpB;GACF,CAAC;GACF"}
1
+ {"version":3,"file":"drop-animation.js","names":[],"sources":["../../src/components/kanban-dnd/drop-animation.ts"],"sourcesContent":["import { buildDragPreview } from './drag-preview';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nconst DROP_ANIMATION_DURATION_MS = 405;\nconst DROP_ANIMATION_EASING = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\nconst DROP_PREVIEW_Z_INDEX = '9999';\nconst DROP_PREVIEW_MIN_DELTA_PX = 6;\n\nfunction getCardIdFromElementId(elementId: string) {\n const prefix = 'kanban-card-item-';\n if (!elementId.startsWith(prefix)) return '';\n return elementId.slice(prefix.length);\n}\n\nfunction getDropDestinationPoint({\n targetElement,\n movingCardIds,\n}: {\n targetElement: HTMLElement;\n movingCardIds: Set<string>;\n}) {\n const targetRect = targetElement.getBoundingClientRect();\n const cardsInTarget = Array.from(\n targetElement.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n const remainingCards = cardsInTarget.filter((cardElement) => {\n const cardId = getCardIdFromElementId(cardElement.id);\n return cardId && !movingCardIds.has(cardId);\n });\n\n if (remainingCards.length === 0) {\n return {\n x: targetRect.left + Math.min(20, targetRect.width * 0.1),\n y: targetRect.top + Math.min(16, targetRect.height * 0.08),\n };\n }\n\n const lastCardRect =\n remainingCards[remainingCards.length - 1]?.getBoundingClientRect();\n\n return {\n x: lastCardRect?.left ?? targetRect.left,\n y: lastCardRect?.bottom ?? targetRect.bottom + 8,\n };\n}\n\nexport function animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n sourceRect?: Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;\n destinationPoint?: { x: number; y: number };\n}) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return;\n }\n\n const originRect = sourceRect ?? sourceElement.getBoundingClientRect();\n const selectedIds = getSelectedCardIds?.() ?? [];\n const movingCardIds = new Set<string>([\n ...selectedIds.map(String),\n String(cardId),\n ]);\n\n if (!originRect.width || !originRect.height) {\n return;\n }\n\n const preview = buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n });\n\n applyStyles(preview, {\n position: 'fixed',\n left: `${originRect.left}px`,\n top: `${originRect.top}px`,\n width: `${originRect.width}px`,\n pointerEvents: 'none',\n zIndex: DROP_PREVIEW_Z_INDEX,\n margin: '0',\n transformOrigin: 'top left',\n willChange: 'transform, opacity',\n });\n\n document.body.appendChild(preview);\n\n const destination =\n destinationPoint ??\n getDropDestinationPoint({\n targetElement,\n movingCardIds,\n });\n\n const targetX = destination.x;\n const targetY = destination.y;\n const translateX = targetX - originRect.left;\n const translateY = targetY - originRect.top;\n\n const animation = preview.animate(\n [\n {\n transform: 'translate3d(0, 0, 0) scale(1)',\n opacity: 1,\n },\n {\n transform: `translate3d(${translateX}px, ${translateY}px, 0) scale(0.88)`,\n opacity: 0,\n },\n ],\n {\n duration: DROP_ANIMATION_DURATION_MS,\n easing: DROP_ANIMATION_EASING,\n fill: 'forwards',\n }\n );\n\n const cleanup = () => {\n if (preview.parentElement) {\n preview.parentElement.removeChild(preview);\n }\n };\n\n animation.addEventListener('finish', cleanup, { once: true });\n animation.addEventListener('cancel', cleanup, { once: true });\n}\n\nfunction animateContainerReorder(container: HTMLElement, mutate: () => void) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n mutate();\n return;\n }\n\n const beforeRects = new Map<string, DOMRect>();\n const beforeElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n beforeElements.forEach((element) => {\n beforeRects.set(element.id, element.getBoundingClientRect());\n });\n\n mutate();\n\n requestAnimationFrame(() => {\n const afterElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n afterElements.forEach((element) => {\n const before = beforeRects.get(element.id);\n if (!before) return;\n\n const after = element.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) {\n return;\n }\n\n element.animate(\n [\n { transform: `translate(${dx}px, ${dy}px)` },\n { transform: 'translate(0, 0)' },\n ],\n {\n duration: 278,\n easing: 'cubic-bezier(0.2, 0.8, 0.2, 1)',\n }\n );\n });\n });\n}\n\nexport function animateCardDropToFinalPosition({\n cardId,\n sourceElement,\n targetElement,\n performDrop,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n performDrop: () => void;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const sourceRect = sourceElement.getBoundingClientRect();\n\n animateContainerReorder(targetElement, performDrop);\n\n requestAnimationFrame(() => {\n const finalCardElement = document.getElementById(\n `kanban-card-item-${cardId}`\n );\n const destinationRect =\n finalCardElement instanceof HTMLElement\n ? finalCardElement.getBoundingClientRect()\n : targetElement.getBoundingClientRect();\n\n const dx = Math.abs(destinationRect.left - sourceRect.left);\n const dy = Math.abs(destinationRect.top - sourceRect.top);\n if (dx < DROP_PREVIEW_MIN_DELTA_PX && dy < DROP_PREVIEW_MIN_DELTA_PX) {\n return;\n }\n\n animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint: {\n x: destinationRect.left,\n y: destinationRect.top,\n },\n });\n });\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { KanbanCardItemProps } from "./types.js";
2
- import * as react_jsx_runtime20 from "react/jsx-runtime";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/kanban-dnd/kanban-card-item.d.ts
5
5
  declare function KanbanCardItem({
@@ -8,7 +8,7 @@ declare function KanbanCardItem({
8
8
  className,
9
9
  getSelectedCardIds,
10
10
  getSelectableItems
11
- }: KanbanCardItemProps): react_jsx_runtime20.JSX.Element;
11
+ }: KanbanCardItemProps): _$react_jsx_runtime0.JSX.Element;
12
12
  //#endregion
13
13
  export { KanbanCardItem };
14
14
  //# sourceMappingURL=kanban-card-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-card-item.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-card-item.tsx"],"sourcesContent":[],"mappings":";;;;iBAWgB,cAAA;;;;;;GAMb,sBAAmB,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"kanban-card-item.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-card-item.tsx"],"mappings":";;;;iBAWgB,cAAA,CAAA;EACd,EAAA;EACA,QAAA;EACA,SAAA;EACA,kBAAA;EACA;AAAA,GACC,mBAAA,GAAmB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { useKanbanDndContext } from "./context.js";
5
4
  import { buildDragPreview } from "./drag-preview.js";
6
5
  import { useEffect, useRef } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-card-item.js","names":[],"sources":["../../src/components/kanban-dnd/kanban-card-item.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { useKanbanDndContext } from './context';\nimport { buildDragPreview } from './drag-preview';\nimport type { KanbanCardItemProps } from './types';\n\nexport function KanbanCardItem({\n id,\n children,\n className,\n getSelectedCardIds,\n getSelectableItems,\n}: KanbanCardItemProps) {\n const ref = useRef<HTMLDivElement>(null);\n const context = useKanbanDndContext();\n\n const getSelectedCardIdsSafe =\n getSelectedCardIds ?? context?.getSelectedCardIds;\n const getSelectableItemsSafe =\n getSelectableItems ?? context?.getSelectableItems;\n\n useEffect(() => {\n context?.registerSelectableItem(String(id), ref.current);\n\n return () => {\n context?.registerSelectableItem(String(id), null);\n };\n }, [context, id]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return draggable({\n element,\n getInitialData: () => ({\n type: 'card',\n cardId: String(id),\n }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n setCustomNativeDragPreview({\n getOffset: preserveOffsetOnSource({\n element: source.element,\n input: location.current.input,\n }),\n render({ container }) {\n const root = buildDragPreview({\n cardId: String(id),\n sourceElement: source.element,\n getSelectableItems: getSelectableItemsSafe,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n container.appendChild(root);\n\n return () => {\n if (root.parentElement === container) {\n container.removeChild(root);\n }\n };\n },\n nativeSetDragImage,\n });\n },\n });\n }, [getSelectableItemsSafe, getSelectedCardIdsSafe, id]);\n\n return (\n <div\n className={className}\n data-draggable=\"true\"\n id={`kanban-card-item-${id}`}\n ref={ref}\n suppressHydrationWarning\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,SAAgB,eAAe,EAC7B,IACA,UACA,WACA,oBACA,sBACsB;CACtB,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,UAAU,qBAAqB;CAErC,MAAM,yBACJ,sBAAsB,SAAS;CACjC,MAAM,yBACJ,sBAAsB,SAAS;AAEjC,iBAAgB;AACd,WAAS,uBAAuB,OAAO,GAAG,EAAE,IAAI,QAAQ;AAExD,eAAa;AACX,YAAS,uBAAuB,OAAO,GAAG,EAAE,KAAK;;IAElD,CAAC,SAAS,GAAG,CAAC;AAEjB,iBAAgB;EACd,MAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS;AAEd,SAAO,UAAU;GACf;GACA,uBAAuB;IACrB,MAAM;IACN,QAAQ,OAAO,GAAG;IACnB;GACD,wBAAwB,EAAE,oBAAoB,QAAQ,eAAe;AACnE,+BAA2B;KACzB,WAAW,uBAAuB;MAChC,SAAS,OAAO;MAChB,OAAO,SAAS,QAAQ;MACzB,CAAC;KACF,OAAO,EAAE,aAAa;MACpB,MAAM,OAAO,iBAAiB;OAC5B,QAAQ,OAAO,GAAG;OAClB,eAAe,OAAO;OACtB,oBAAoB;OACpB,oBAAoB;OACrB,CAAC;AAEF,gBAAU,YAAY,KAAK;AAE3B,mBAAa;AACX,WAAI,KAAK,kBAAkB,UACzB,WAAU,YAAY,KAAK;;;KAIjC;KACD,CAAC;;GAEL,CAAC;IACD;EAAC;EAAwB;EAAwB;EAAG,CAAC;AAExD,QACE,oBAAC;EACY;EACX,kBAAe;EACf,IAAI,oBAAoB;EACnB;EACL;EAEC;GACG"}
1
+ {"version":3,"file":"kanban-card-item.js","names":[],"sources":["../../src/components/kanban-dnd/kanban-card-item.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { useKanbanDndContext } from './context';\nimport { buildDragPreview } from './drag-preview';\nimport type { KanbanCardItemProps } from './types';\n\nexport function KanbanCardItem({\n id,\n children,\n className,\n getSelectedCardIds,\n getSelectableItems,\n}: KanbanCardItemProps) {\n const ref = useRef<HTMLDivElement>(null);\n const context = useKanbanDndContext();\n\n const getSelectedCardIdsSafe =\n getSelectedCardIds ?? context?.getSelectedCardIds;\n const getSelectableItemsSafe =\n getSelectableItems ?? context?.getSelectableItems;\n\n useEffect(() => {\n context?.registerSelectableItem(String(id), ref.current);\n\n return () => {\n context?.registerSelectableItem(String(id), null);\n };\n }, [context, id]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return draggable({\n element,\n getInitialData: () => ({\n type: 'card',\n cardId: String(id),\n }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n setCustomNativeDragPreview({\n getOffset: preserveOffsetOnSource({\n element: source.element,\n input: location.current.input,\n }),\n render({ container }) {\n const root = buildDragPreview({\n cardId: String(id),\n sourceElement: source.element,\n getSelectableItems: getSelectableItemsSafe,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n container.appendChild(root);\n\n return () => {\n if (root.parentElement === container) {\n container.removeChild(root);\n }\n };\n },\n nativeSetDragImage,\n });\n },\n });\n }, [getSelectableItemsSafe, getSelectedCardIdsSafe, id]);\n\n return (\n <div\n className={className}\n data-draggable=\"true\"\n id={`kanban-card-item-${id}`}\n ref={ref}\n suppressHydrationWarning\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,eAAe,EAC7B,IACA,UACA,WACA,oBACA,sBACsB;CACtB,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,UAAU,qBAAqB;CAErC,MAAM,yBACJ,sBAAsB,SAAS;CACjC,MAAM,yBACJ,sBAAsB,SAAS;AAEjC,iBAAgB;AACd,WAAS,uBAAuB,OAAO,GAAG,EAAE,IAAI,QAAQ;AAExD,eAAa;AACX,YAAS,uBAAuB,OAAO,GAAG,EAAE,KAAK;;IAElD,CAAC,SAAS,GAAG,CAAC;AAEjB,iBAAgB;EACd,MAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS;AAEd,SAAO,UAAU;GACf;GACA,uBAAuB;IACrB,MAAM;IACN,QAAQ,OAAO,GAAG;IACnB;GACD,wBAAwB,EAAE,oBAAoB,QAAQ,eAAe;AACnE,+BAA2B;KACzB,WAAW,uBAAuB;MAChC,SAAS,OAAO;MAChB,OAAO,SAAS,QAAQ;MACzB,CAAC;KACF,OAAO,EAAE,aAAa;MACpB,MAAM,OAAO,iBAAiB;OAC5B,QAAQ,OAAO,GAAG;OAClB,eAAe,OAAO;OACtB,oBAAoB;OACpB,oBAAoB;OACrB,CAAC;AAEF,gBAAU,YAAY,KAAK;AAE3B,mBAAa;AACX,WAAI,KAAK,kBAAkB,UACzB,WAAU,YAAY,KAAK;;;KAIjC;KACD,CAAC;;GAEL,CAAC;IACD;EAAC;EAAwB;EAAwB;EAAG,CAAC;AAExD,QACE,oBAAC,OAAD;EACa;EACX,kBAAe;EACf,IAAI,oBAAoB;EACnB;EACL;EAEC;EACG"}
@@ -1,5 +1,5 @@
1
1
  import { KanbanDndMonitorProps } from "./types.js";
2
- import * as react_jsx_runtime21 from "react/jsx-runtime";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/kanban-dnd/kanban-dnd-monitor.d.ts
5
5
  declare function KanbanDndMonitor<TColumn>({
@@ -23,7 +23,7 @@ declare function KanbanDndMonitor<TColumn>({
23
23
  isAutoScrollEnabled,
24
24
  renderIdleLayer,
25
25
  className
26
- }: KanbanDndMonitorProps<TColumn>): react_jsx_runtime21.JSX.Element;
26
+ }: KanbanDndMonitorProps<TColumn>): _$react_jsx_runtime0.JSX.Element;
27
27
  //#endregion
28
28
  export { KanbanDndMonitor };
29
29
  //# sourceMappingURL=kanban-dnd-monitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dnd-monitor.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-dnd-monitor.tsx"],"sourcesContent":[],"mappings":";;;;iBA8BgB;;;;;;;;;;;;;;;;;;;;;GAqBb,sBAAsB,WAAQ,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"kanban-dnd-monitor.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-dnd-monitor.tsx"],"mappings":";;;;iBA8BgB,gBAAA,SAAA,CAAA;EACd,WAAA;EACA,eAAA;EACA,iBAAA;EACA,UAAA;EACA,QAAA;EACA,WAAA;EACA,SAAA;EACA,kBAAA;EACA,gBAAA;EACA,SAAA;EACA,kBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,eAAA;EACA;AAAA,GACC,qBAAA,CAAsB,OAAA,IAAQ,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { cn } from "../src/lib/utils.js";
5
4
  import { KanbanDndProvider } from "./context.js";
6
5
  import { DEFAULT_AUTO_SCROLL_OVERFLOW } from "./constants.js";
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dnd-monitor.js","names":["nextOrder: number | null"],"sources":["../../src/components/kanban-dnd/kanban-dnd-monitor.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { reorder } from '@atlaskit/pragmatic-drag-and-drop/reorder';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { unsafeOverflowAutoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element';\nimport { DEFAULT_AUTO_SCROLL_OVERFLOW } from './constants';\nimport { KanbanDndProvider } from './context';\nimport { animateCardDropToFinalPosition } from './drop-animation';\nimport { moveCardsInColumns } from './move-cards';\nimport type { DropTarget, KanbanDndMonitorProps } from './types';\nimport { getTargetColumnId } from './utils';\n\nfunction areSameCardSet(a: string[], b: string[]) {\n if (a.length !== b.length) return false;\n const aSet = new Set(a.map(String));\n if (aSet.size !== b.length) return false;\n return b.every((id) => aSet.has(String(id)));\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n const maybeColumn = column as Record<string, unknown>;\n const id = maybeColumn?.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function KanbanDndMonitor<TColumn>({\n onCardsMove,\n onColumnReorder,\n scrollContainerId,\n setColumns,\n children,\n getColumnId,\n moveCards,\n getCardsFromColumn,\n setCardsInColumn,\n getCardId,\n getSelectedCardIds,\n setSelectedCardIds,\n addSelectedCardId,\n clearSelectedCards,\n onSelectionChange,\n setIsDragging,\n autoScrollOverflow,\n isAutoScrollEnabled = true,\n renderIdleLayer,\n className,\n}: KanbanDndMonitorProps<TColumn>) {\n const [isDragging, setLocalIsDragging] = useState(false);\n const isDraggingRef = useRef(false);\n const selectedCardIdsRef = useRef<string[]>([]);\n const selectableItemMapRef = useRef(new Map<string, HTMLElement>());\n const selectionListenersRef = useRef(new Set<() => void>());\n\n const notifySelectionListeners = useCallback(() => {\n selectionListenersRef.current.forEach((listener) => listener());\n }, []);\n\n const subscribeSelection = useCallback((listener: () => void) => {\n selectionListenersRef.current.add(listener);\n return () => {\n selectionListenersRef.current.delete(listener);\n };\n }, []);\n const getColumnIdSafe = useCallback(\n (column: TColumn) =>\n getColumnId ? getColumnId(column) : defaultGetColumnId(column),\n [getColumnId]\n );\n\n const getSelectedCardIdsSafe = useCallback(\n () => getSelectedCardIds?.() ?? selectedCardIdsRef.current,\n [getSelectedCardIds]\n );\n\n const setInternalSelectedCardIdsSafe = useCallback(\n (nextIds: string[]) => {\n selectedCardIdsRef.current = nextIds;\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n },\n [notifySelectionListeners, onSelectionChange]\n );\n\n const addSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n return;\n }\n\n const nextIds = [...selectedIds, cardId];\n\n if (addSelectedCardId) {\n addSelectedCardId(cardId);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const clearSelectedCardsSafe = useCallback(() => {\n const currentIds = getSelectedCardIdsSafe();\n if (currentIds.length === 0) {\n return;\n }\n\n if (clearSelectedCards) {\n clearSelectedCards();\n notifySelectionListeners();\n onSelectionChange?.([]);\n return;\n }\n\n setInternalSelectedCardIdsSafe([]);\n }, [\n clearSelectedCards,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]);\n\n const setSelectedCardIdsSafe = useCallback(\n (cardIds: string[]) => {\n const nextIds = Array.from(new Set(cardIds.map(String)));\n const currentIds = getSelectedCardIdsSafe();\n\n if (areSameCardSet(nextIds, currentIds)) {\n return;\n }\n\n if (setSelectedCardIds) {\n setSelectedCardIds(nextIds);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {\n clearSelectedCards();\n nextIds.forEach((cardId) => addSelectedCardId(cardId));\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n clearSelectedCards,\n getSelectedCardIdsSafe,\n getSelectedCardIds,\n notifySelectionListeners,\n onSelectionChange,\n setSelectedCardIds,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const toggleSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n setSelectedCardIdsSafe(\n selectedIds.filter((selectedId) => selectedId !== cardId)\n );\n return;\n }\n\n addSelectedCardIdSafe(cardId);\n },\n [addSelectedCardIdSafe, getSelectedCardIdsSafe, setSelectedCardIdsSafe]\n );\n\n const registerSelectableItem = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (!element) {\n selectableItemMapRef.current.delete(id);\n return;\n }\n\n selectableItemMapRef.current.set(id, element);\n },\n []\n );\n\n const getSelectableItems = useCallback(\n () =>\n Array.from(selectableItemMapRef.current.entries()).map(\n ([id, element]) => ({\n id,\n element,\n })\n ),\n []\n );\n\n const contextValue = useMemo(\n () => ({\n getIsDragging: () => isDraggingRef.current,\n getSelectedCardIds: getSelectedCardIdsSafe,\n subscribeSelection,\n setSelectedCardIds: setSelectedCardIdsSafe,\n addSelectedCardId: addSelectedCardIdSafe,\n clearSelectedCards: clearSelectedCardsSafe,\n toggleSelectedCardId: toggleSelectedCardIdSafe,\n registerSelectableItem,\n getSelectableItems,\n }),\n [\n addSelectedCardIdSafe,\n clearSelectedCardsSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n registerSelectableItem,\n setSelectedCardIdsSafe,\n subscribeSelection,\n toggleSelectedCardIdSafe,\n ]\n );\n\n const setDraggingState = useCallback(\n (value: boolean) => {\n isDraggingRef.current = value;\n if (renderIdleLayer) {\n setLocalIsDragging(value);\n }\n },\n [renderIdleLayer]\n );\n\n const finishDrag = () => {\n setDraggingState(false);\n setIsDragging?.(false);\n clearSelectedCardsSafe();\n };\n\n const startDrag = (source: { data: Record<string, unknown> }) => {\n if (source.data.type !== 'column' && source.data.type !== 'card') return;\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const selectedIds = getSelectedCardIdsSafe();\n if (!selectedIds.includes(cardId)) {\n addSelectedCardIdSafe(cardId);\n }\n }\n\n setIsDragging?.(true);\n setDraggingState(true);\n };\n\n const dropColumn = (sourceColumnId: string, targetColumnId: string) => {\n if (!sourceColumnId || sourceColumnId === targetColumnId) return;\n\n let nextOrder: number | null = null;\n\n setColumns((prev) => {\n const oldIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === sourceColumnId\n );\n const newIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === targetColumnId\n );\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) {\n return prev;\n }\n\n nextOrder = newIndex + 1;\n return reorder({\n list: prev,\n startIndex: oldIndex,\n finishIndex: newIndex,\n });\n });\n\n if (nextOrder !== null) {\n onColumnReorder?.({ columnId: sourceColumnId, order: nextOrder });\n }\n };\n\n const dropCard = (cardId: string, targetColumnId: string) => {\n if (!cardId || !targetColumnId) return;\n\n const selectedIds = getSelectedCardIdsSafe();\n const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];\n\n setColumns((prev) => {\n if (moveCards) {\n return moveCards(prev, idsToMove, targetColumnId);\n }\n\n return moveCardsInColumns(prev, idsToMove, targetColumnId, {\n getColumnId: getColumnIdSafe,\n getCards: getCardsFromColumn as\n | ((column: TColumn) => unknown[])\n | undefined,\n setCards: setCardsInColumn as\n | ((column: TColumn, cards: unknown[]) => TColumn)\n | undefined,\n getCardId,\n });\n });\n onCardsMove?.({ cardIds: idsToMove, targetColumnId });\n };\n\n useEffect(() => {\n const monitorCleanup = monitorForElements({\n onDragStart: ({ source }) => startDrag(source),\n onDrop: ({ source, location }) => {\n const dropTargets = location.current.dropTargets as DropTarget[];\n\n if (source.data.type === 'column') {\n dropColumn(\n String(source.data.columnId ?? ''),\n getTargetColumnId(dropTargets, 'column')\n );\n finishDrag();\n return;\n }\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const targetColumnId = getTargetColumnId(dropTargets, 'column-drop');\n const targetDrop = dropTargets.find(\n (item) => item.data.type === 'column-drop'\n );\n\n if (source.element instanceof HTMLElement) {\n const targetElement =\n targetDrop?.element instanceof HTMLElement\n ? targetDrop.element\n : targetColumnId\n ? document.getElementById(\n `kanban-drop-zone-${targetColumnId}`\n )\n : null;\n\n if (targetElement instanceof HTMLElement) {\n animateCardDropToFinalPosition({\n cardId,\n sourceElement: source.element,\n targetElement,\n performDrop: () => {\n dropCard(cardId, targetColumnId);\n },\n getSelectableItems,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n finishDrag();\n return;\n }\n }\n\n dropCard(cardId, targetColumnId);\n finishDrag();\n return;\n }\n\n finishDrag();\n },\n });\n\n if (!isAutoScrollEnabled || !scrollContainerId) {\n return monitorCleanup;\n }\n\n const scrollContainer = document.getElementById(scrollContainerId);\n if (!scrollContainer) {\n return monitorCleanup;\n }\n\n return combine(\n monitorCleanup,\n autoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n }),\n unsafeOverflowAutoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW,\n })\n );\n }, [\n addSelectedCardIdSafe,\n autoScrollOverflow,\n clearSelectedCardsSafe,\n getCardId,\n getCardsFromColumn,\n getColumnIdSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n isAutoScrollEnabled,\n moveCards,\n onCardsMove,\n onColumnReorder,\n setCardsInColumn,\n scrollContainerId,\n setSelectedCardIds,\n setColumns,\n setIsDragging,\n ]);\n\n return (\n <KanbanDndProvider value={contextValue}>\n <div\n className={cn('contain-layout h-full', className)}\n id=\"draggable-area\"\n >\n {!isDragging && renderIdleLayer}\n {children}\n </div>\n </KanbanDndProvider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kanban-dnd-monitor.js","names":["maybeColumn"],"sources":["../../src/components/kanban-dnd/kanban-dnd-monitor.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { reorder } from '@atlaskit/pragmatic-drag-and-drop/reorder';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { unsafeOverflowAutoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element';\nimport { DEFAULT_AUTO_SCROLL_OVERFLOW } from './constants';\nimport { KanbanDndProvider } from './context';\nimport { animateCardDropToFinalPosition } from './drop-animation';\nimport { moveCardsInColumns } from './move-cards';\nimport type { DropTarget, KanbanDndMonitorProps } from './types';\nimport { getTargetColumnId } from './utils';\n\nfunction areSameCardSet(a: string[], b: string[]) {\n if (a.length !== b.length) return false;\n const aSet = new Set(a.map(String));\n if (aSet.size !== b.length) return false;\n return b.every((id) => aSet.has(String(id)));\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n const maybeColumn = column as Record<string, unknown>;\n const id = maybeColumn?.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function KanbanDndMonitor<TColumn>({\n onCardsMove,\n onColumnReorder,\n scrollContainerId,\n setColumns,\n children,\n getColumnId,\n moveCards,\n getCardsFromColumn,\n setCardsInColumn,\n getCardId,\n getSelectedCardIds,\n setSelectedCardIds,\n addSelectedCardId,\n clearSelectedCards,\n onSelectionChange,\n setIsDragging,\n autoScrollOverflow,\n isAutoScrollEnabled = true,\n renderIdleLayer,\n className,\n}: KanbanDndMonitorProps<TColumn>) {\n const [isDragging, setLocalIsDragging] = useState(false);\n const isDraggingRef = useRef(false);\n const selectedCardIdsRef = useRef<string[]>([]);\n const selectableItemMapRef = useRef(new Map<string, HTMLElement>());\n const selectionListenersRef = useRef(new Set<() => void>());\n\n const notifySelectionListeners = useCallback(() => {\n selectionListenersRef.current.forEach((listener) => listener());\n }, []);\n\n const subscribeSelection = useCallback((listener: () => void) => {\n selectionListenersRef.current.add(listener);\n return () => {\n selectionListenersRef.current.delete(listener);\n };\n }, []);\n const getColumnIdSafe = useCallback(\n (column: TColumn) =>\n getColumnId ? getColumnId(column) : defaultGetColumnId(column),\n [getColumnId]\n );\n\n const getSelectedCardIdsSafe = useCallback(\n () => getSelectedCardIds?.() ?? selectedCardIdsRef.current,\n [getSelectedCardIds]\n );\n\n const setInternalSelectedCardIdsSafe = useCallback(\n (nextIds: string[]) => {\n selectedCardIdsRef.current = nextIds;\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n },\n [notifySelectionListeners, onSelectionChange]\n );\n\n const addSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n return;\n }\n\n const nextIds = [...selectedIds, cardId];\n\n if (addSelectedCardId) {\n addSelectedCardId(cardId);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const clearSelectedCardsSafe = useCallback(() => {\n const currentIds = getSelectedCardIdsSafe();\n if (currentIds.length === 0) {\n return;\n }\n\n if (clearSelectedCards) {\n clearSelectedCards();\n notifySelectionListeners();\n onSelectionChange?.([]);\n return;\n }\n\n setInternalSelectedCardIdsSafe([]);\n }, [\n clearSelectedCards,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]);\n\n const setSelectedCardIdsSafe = useCallback(\n (cardIds: string[]) => {\n const nextIds = Array.from(new Set(cardIds.map(String)));\n const currentIds = getSelectedCardIdsSafe();\n\n if (areSameCardSet(nextIds, currentIds)) {\n return;\n }\n\n if (setSelectedCardIds) {\n setSelectedCardIds(nextIds);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {\n clearSelectedCards();\n nextIds.forEach((cardId) => addSelectedCardId(cardId));\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n clearSelectedCards,\n getSelectedCardIdsSafe,\n getSelectedCardIds,\n notifySelectionListeners,\n onSelectionChange,\n setSelectedCardIds,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const toggleSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n setSelectedCardIdsSafe(\n selectedIds.filter((selectedId) => selectedId !== cardId)\n );\n return;\n }\n\n addSelectedCardIdSafe(cardId);\n },\n [addSelectedCardIdSafe, getSelectedCardIdsSafe, setSelectedCardIdsSafe]\n );\n\n const registerSelectableItem = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (!element) {\n selectableItemMapRef.current.delete(id);\n return;\n }\n\n selectableItemMapRef.current.set(id, element);\n },\n []\n );\n\n const getSelectableItems = useCallback(\n () =>\n Array.from(selectableItemMapRef.current.entries()).map(\n ([id, element]) => ({\n id,\n element,\n })\n ),\n []\n );\n\n const contextValue = useMemo(\n () => ({\n getIsDragging: () => isDraggingRef.current,\n getSelectedCardIds: getSelectedCardIdsSafe,\n subscribeSelection,\n setSelectedCardIds: setSelectedCardIdsSafe,\n addSelectedCardId: addSelectedCardIdSafe,\n clearSelectedCards: clearSelectedCardsSafe,\n toggleSelectedCardId: toggleSelectedCardIdSafe,\n registerSelectableItem,\n getSelectableItems,\n }),\n [\n addSelectedCardIdSafe,\n clearSelectedCardsSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n registerSelectableItem,\n setSelectedCardIdsSafe,\n subscribeSelection,\n toggleSelectedCardIdSafe,\n ]\n );\n\n const setDraggingState = useCallback(\n (value: boolean) => {\n isDraggingRef.current = value;\n if (renderIdleLayer) {\n setLocalIsDragging(value);\n }\n },\n [renderIdleLayer]\n );\n\n const finishDrag = () => {\n setDraggingState(false);\n setIsDragging?.(false);\n clearSelectedCardsSafe();\n };\n\n const startDrag = (source: { data: Record<string, unknown> }) => {\n if (source.data.type !== 'column' && source.data.type !== 'card') return;\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const selectedIds = getSelectedCardIdsSafe();\n if (!selectedIds.includes(cardId)) {\n addSelectedCardIdSafe(cardId);\n }\n }\n\n setIsDragging?.(true);\n setDraggingState(true);\n };\n\n const dropColumn = (sourceColumnId: string, targetColumnId: string) => {\n if (!sourceColumnId || sourceColumnId === targetColumnId) return;\n\n let nextOrder: number | null = null;\n\n setColumns((prev) => {\n const oldIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === sourceColumnId\n );\n const newIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === targetColumnId\n );\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) {\n return prev;\n }\n\n nextOrder = newIndex + 1;\n return reorder({\n list: prev,\n startIndex: oldIndex,\n finishIndex: newIndex,\n });\n });\n\n if (nextOrder !== null) {\n onColumnReorder?.({ columnId: sourceColumnId, order: nextOrder });\n }\n };\n\n const dropCard = (cardId: string, targetColumnId: string) => {\n if (!cardId || !targetColumnId) return;\n\n const selectedIds = getSelectedCardIdsSafe();\n const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];\n\n setColumns((prev) => {\n if (moveCards) {\n return moveCards(prev, idsToMove, targetColumnId);\n }\n\n return moveCardsInColumns(prev, idsToMove, targetColumnId, {\n getColumnId: getColumnIdSafe,\n getCards: getCardsFromColumn as\n | ((column: TColumn) => unknown[])\n | undefined,\n setCards: setCardsInColumn as\n | ((column: TColumn, cards: unknown[]) => TColumn)\n | undefined,\n getCardId,\n });\n });\n onCardsMove?.({ cardIds: idsToMove, targetColumnId });\n };\n\n useEffect(() => {\n const monitorCleanup = monitorForElements({\n onDragStart: ({ source }) => startDrag(source),\n onDrop: ({ source, location }) => {\n const dropTargets = location.current.dropTargets as DropTarget[];\n\n if (source.data.type === 'column') {\n dropColumn(\n String(source.data.columnId ?? ''),\n getTargetColumnId(dropTargets, 'column')\n );\n finishDrag();\n return;\n }\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const targetColumnId = getTargetColumnId(dropTargets, 'column-drop');\n const targetDrop = dropTargets.find(\n (item) => item.data.type === 'column-drop'\n );\n\n if (source.element instanceof HTMLElement) {\n const targetElement =\n targetDrop?.element instanceof HTMLElement\n ? targetDrop.element\n : targetColumnId\n ? document.getElementById(\n `kanban-drop-zone-${targetColumnId}`\n )\n : null;\n\n if (targetElement instanceof HTMLElement) {\n animateCardDropToFinalPosition({\n cardId,\n sourceElement: source.element,\n targetElement,\n performDrop: () => {\n dropCard(cardId, targetColumnId);\n },\n getSelectableItems,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n finishDrag();\n return;\n }\n }\n\n dropCard(cardId, targetColumnId);\n finishDrag();\n return;\n }\n\n finishDrag();\n },\n });\n\n if (!isAutoScrollEnabled || !scrollContainerId) {\n return monitorCleanup;\n }\n\n const scrollContainer = document.getElementById(scrollContainerId);\n if (!scrollContainer) {\n return monitorCleanup;\n }\n\n return combine(\n monitorCleanup,\n autoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n }),\n unsafeOverflowAutoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW,\n })\n );\n }, [\n addSelectedCardIdSafe,\n autoScrollOverflow,\n clearSelectedCardsSafe,\n getCardId,\n getCardsFromColumn,\n getColumnIdSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n isAutoScrollEnabled,\n moveCards,\n onCardsMove,\n onColumnReorder,\n setCardsInColumn,\n scrollContainerId,\n setSelectedCardIds,\n setColumns,\n setIsDragging,\n ]);\n\n return (\n <KanbanDndProvider value={contextValue}>\n <div\n className={cn('contain-layout h-full', className)}\n id=\"draggable-area\"\n >\n {!isDragging && renderIdleLayer}\n {children}\n </div>\n </KanbanDndProvider>\n );\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { KanbanDropZoneProps } from "./types.js";
2
- import * as react_jsx_runtime22 from "react/jsx-runtime";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/kanban-dnd/kanban-dropzone.d.ts
5
5
  declare function KanbanDropZone({
@@ -7,7 +7,7 @@ declare function KanbanDropZone({
7
7
  id,
8
8
  className,
9
9
  isOverClassName
10
- }: KanbanDropZoneProps): react_jsx_runtime22.JSX.Element;
10
+ }: KanbanDropZoneProps): _$react_jsx_runtime0.JSX.Element;
11
11
  //#endregion
12
12
  export { KanbanDropZone };
13
13
  //# sourceMappingURL=kanban-dropzone.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dropzone.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-dropzone.tsx"],"sourcesContent":[],"mappings":";;;;iBAQgB,cAAA;;;;;GAKb,sBAAmB,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"kanban-dropzone.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-dropzone.tsx"],"mappings":";;;;iBAQgB,cAAA,CAAA;EACd,QAAA;EACA,EAAA;EACA,SAAA;EACA;AAAA,GACC,mBAAA,GAAmB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { cn } from "../src/lib/utils.js";
5
4
  import { useEffect, useRef, useState } from "react";
6
5
  import { jsx } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dropzone.js","names":[],"sources":["../../src/components/kanban-dnd/kanban-dropzone.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { KanbanDropZoneProps } from './types';\n\nexport function KanbanDropZone({\n children,\n id,\n className,\n isOverClassName,\n}: KanbanDropZoneProps) {\n const [isOver, setIsOver] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return dropTargetForElements({\n element,\n canDrop: ({ source }) => source.data.type === 'card',\n getData: () => ({\n type: 'column-drop',\n columnId: String(id),\n }),\n onDragEnter: () => setIsOver(true),\n onDragLeave: () => setIsOver(false),\n onDrop: () => setIsOver(false),\n });\n }, [id]);\n\n return (\n <div\n className={cn(\n 'border flex-1 border-transparent rounded-xl transition-colors',\n isOver && (isOverClassName ?? 'border-border'),\n className\n )}\n id={`kanban-drop-zone-${id}`}\n ref={ref}\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,eAAe,EAC7B,UACA,IACA,WACA,mBACsB;CACtB,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAC3C,MAAM,MAAM,OAAuB,KAAK;AAExC,iBAAgB;EACd,MAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS;AAEd,SAAO,sBAAsB;GAC3B;GACA,UAAU,EAAE,aAAa,OAAO,KAAK,SAAS;GAC9C,gBAAgB;IACd,MAAM;IACN,UAAU,OAAO,GAAG;IACrB;GACD,mBAAmB,UAAU,KAAK;GAClC,mBAAmB,UAAU,MAAM;GACnC,cAAc,UAAU,MAAM;GAC/B,CAAC;IACD,CAAC,GAAG,CAAC;AAER,QACE,oBAAC;EACC,WAAW,GACT,iEACA,WAAW,mBAAmB,kBAC9B,UACD;EACD,IAAI,oBAAoB;EACnB;EAEJ;GACG"}
1
+ {"version":3,"file":"kanban-dropzone.js","names":[],"sources":["../../src/components/kanban-dnd/kanban-dropzone.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { KanbanDropZoneProps } from './types';\n\nexport function KanbanDropZone({\n children,\n id,\n className,\n isOverClassName,\n}: KanbanDropZoneProps) {\n const [isOver, setIsOver] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return dropTargetForElements({\n element,\n canDrop: ({ source }) => source.data.type === 'card',\n getData: () => ({\n type: 'column-drop',\n columnId: String(id),\n }),\n onDragEnter: () => setIsOver(true),\n onDragLeave: () => setIsOver(false),\n onDrop: () => setIsOver(false),\n });\n }, [id]);\n\n return (\n <div\n className={cn(\n 'border flex-1 border-transparent rounded-xl transition-colors',\n isOver && (isOverClassName ?? 'border-border'),\n className\n )}\n id={`kanban-drop-zone-${id}`}\n ref={ref}\n >\n {children}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,eAAe,EAC7B,UACA,IACA,WACA,mBACsB;CACtB,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAC3C,MAAM,MAAM,OAAuB,KAAK;AAExC,iBAAgB;EACd,MAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS;AAEd,SAAO,sBAAsB;GAC3B;GACA,UAAU,EAAE,aAAa,OAAO,KAAK,SAAS;GAC9C,gBAAgB;IACd,MAAM;IACN,UAAU,OAAO,GAAG;IACrB;GACD,mBAAmB,UAAU,KAAK;GAClC,mBAAmB,UAAU,MAAM;GACnC,cAAc,UAAU,MAAM;GAC/B,CAAC;IACD,CAAC,GAAG,CAAC;AAER,QACE,oBAAC,OAAD;EACE,WAAW,GACT,iEACA,WAAW,mBAAmB,kBAC9B,UACD;EACD,IAAI,oBAAoB;EACnB;EAEJ;EACG"}
@@ -1,12 +1,12 @@
1
1
  import { KanbanSelectorProps } from "./types.js";
2
- import * as react_jsx_runtime23 from "react/jsx-runtime";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/kanban-dnd/kanban-selector.d.ts
5
5
  declare function KanbanSelector({
6
6
  dragAreaId,
7
7
  autoScrollMargin,
8
8
  ignoredSlots
9
- }: KanbanSelectorProps): react_jsx_runtime23.JSX.Element | null;
9
+ }: KanbanSelectorProps): _$react_jsx_runtime0.JSX.Element | null;
10
10
  //#endregion
11
11
  export { KanbanSelector };
12
12
  //# sourceMappingURL=kanban-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-selector.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-selector.tsx"],"sourcesContent":[],"mappings":";;;;iBAoDgB,cAAA;;;;GAIb,sBAAmB,mBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"kanban-selector.d.ts","names":[],"sources":["../../src/components/kanban-dnd/kanban-selector.tsx"],"mappings":";;;;iBAoDgB,cAAA,CAAA;EACd,UAAA;EACA,gBAAA;EACA;AAAA,GACC,mBAAA,GAAmB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
 
3
-
4
3
  import { useKanbanDndContext } from "./context.js";
5
4
  import { useKanbanSelectorAutoScroll } from "./use-kanban-selector-auto-scroll.js";
6
5
  import { useEffect, useRef } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-selector.js","names":[],"sources":["../../src/components/kanban-dnd/kanban-selector.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport {\n boxesIntersect,\n useSelectionContainer,\n} from '@air/react-drag-to-select';\nimport { useKanbanDndContext } from './context';\nimport type { KanbanSelectorProps } from './types';\nimport { useKanbanSelectorAutoScroll } from './use-kanban-selector-auto-scroll';\n\nconst DEFAULT_DRAG_AREA_ID = 'draggable-area';\nconst DEFAULT_AUTO_SCROLL_MARGIN = 120;\nconst DEFAULT_IGNORED_SLOTS = [\n 'sheet-content',\n 'popover-content',\n 'select-content',\n 'dialog-content',\n 'dialog-overlay',\n];\nconst SELECTION_STYLE = {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n} as const;\n\ntype SelectionBox = Parameters<typeof boxesIntersect>[0];\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\nconst toUniqueStringIds = (ids: Array<string | number>) =>\n Array.from(new Set(ids.map(String)));\nconst haveSameIds = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n const set = new Set(a);\n return b.every((id) => set.has(id));\n};\nconst xorSelection = (base: string[], ids: string[]) => {\n const next = new Set(base);\n ids.forEach((id) => (next.has(id) ? next.delete(id) : next.add(id)));\n return Array.from(next);\n};\n\nexport function KanbanSelector({\n dragAreaId = DEFAULT_DRAG_AREA_ID,\n autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN,\n ignoredSlots = DEFAULT_IGNORED_SLOTS,\n}: KanbanSelectorProps) {\n const context = useKanbanDndContext();\n const isSelectingRef = useRef(false);\n const shiftOnPointerDownRef = useRef(false);\n const sessionRef = useRef<{ toggle: boolean; base: string[] }>({\n toggle: false,\n base: [],\n });\n\n useKanbanSelectorAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: (target) =>\n shouldStartSelecting(target, ignoredSlots),\n onSelectionChange: (selection: SelectionBox) => {\n if (!context) return;\n const selectedIds = toUniqueStringIds(\n context.getSelectableItems().flatMap((item) => {\n const element = item.element;\n if (!element) return [];\n const rect = element.getBoundingClientRect();\n const intersects = boxesIntersect(selection, {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n return intersects ? [String(item.id)] : [];\n })\n );\n const nextIds = sessionRef.current.toggle\n ? xorSelection(sessionRef.current.base, selectedIds)\n : selectedIds;\n if (haveSameIds(nextIds, context.getSelectedCardIds())) return;\n context.setSelectedCardIds(nextIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n sessionRef.current = { toggle: false, base: [] };\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n sessionRef.current = {\n toggle: shiftOnPointerDownRef.current,\n base: context?.getSelectedCardIds() ?? [],\n };\n },\n selectionProps: { style: SELECTION_STYLE },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n shiftOnPointerDownRef.current = e.shiftKey;\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.getIsDragging() &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n shiftOnPointerDownRef.current = false;\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kanban-selector.js","names":[],"sources":["../../src/components/kanban-dnd/kanban-selector.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport {\n boxesIntersect,\n useSelectionContainer,\n} from '@air/react-drag-to-select';\nimport { useKanbanDndContext } from './context';\nimport type { KanbanSelectorProps } from './types';\nimport { useKanbanSelectorAutoScroll } from './use-kanban-selector-auto-scroll';\n\nconst DEFAULT_DRAG_AREA_ID = 'draggable-area';\nconst DEFAULT_AUTO_SCROLL_MARGIN = 120;\nconst DEFAULT_IGNORED_SLOTS = [\n 'sheet-content',\n 'popover-content',\n 'select-content',\n 'dialog-content',\n 'dialog-overlay',\n];\nconst SELECTION_STYLE = {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n} as const;\n\ntype SelectionBox = Parameters<typeof boxesIntersect>[0];\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\nconst toUniqueStringIds = (ids: Array<string | number>) =>\n Array.from(new Set(ids.map(String)));\nconst haveSameIds = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n const set = new Set(a);\n return b.every((id) => set.has(id));\n};\nconst xorSelection = (base: string[], ids: string[]) => {\n const next = new Set(base);\n ids.forEach((id) => (next.has(id) ? next.delete(id) : next.add(id)));\n return Array.from(next);\n};\n\nexport function KanbanSelector({\n dragAreaId = DEFAULT_DRAG_AREA_ID,\n autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN,\n ignoredSlots = DEFAULT_IGNORED_SLOTS,\n}: KanbanSelectorProps) {\n const context = useKanbanDndContext();\n const isSelectingRef = useRef(false);\n const shiftOnPointerDownRef = useRef(false);\n const sessionRef = useRef<{ toggle: boolean; base: string[] }>({\n toggle: false,\n base: [],\n });\n\n useKanbanSelectorAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: (target) =>\n shouldStartSelecting(target, ignoredSlots),\n onSelectionChange: (selection: SelectionBox) => {\n if (!context) return;\n const selectedIds = toUniqueStringIds(\n context.getSelectableItems().flatMap((item) => {\n const element = item.element;\n if (!element) return [];\n const rect = element.getBoundingClientRect();\n const intersects = boxesIntersect(selection, {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n return intersects ? [String(item.id)] : [];\n })\n );\n const nextIds = sessionRef.current.toggle\n ? xorSelection(sessionRef.current.base, selectedIds)\n : selectedIds;\n if (haveSameIds(nextIds, context.getSelectedCardIds())) return;\n context.setSelectedCardIds(nextIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n sessionRef.current = { toggle: false, base: [] };\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n sessionRef.current = {\n toggle: shiftOnPointerDownRef.current,\n base: context?.getSelectedCardIds() ?? [],\n };\n },\n selectionProps: { style: SELECTION_STYLE },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n shiftOnPointerDownRef.current = e.shiftKey;\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.getIsDragging() &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n shiftOnPointerDownRef.current = false;\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"move-cards.d.ts","names":[],"sources":["../../src/components/kanban-dnd/move-cards.ts"],"sourcesContent":[],"mappings":";KAEK;EAAA,WAAA,EAAA,CAAA,MAAA,EACmB,OADD,EAAA,GAAA,MAAA;EACC,QAAA,EAAA,CAAA,MAAA,EACH,OADG,EAAA,GACS,KADT,EAAA;EACH,QAAA,EAAA,CAAA,MAAA,EACA,OADA,EAAA,KAAA,EACgB,KADhB,EAAA,EAAA,GAC4B,OAD5B;EAAY,SAAA,EAAA,CAAA,IAAA,EAEb,KAFa,EAAA,GAAA,MAAA;CACZ;AAAgB,iBAkCrB,kBAlCqB,CAAA,OAAA,EAAA,KAAA,CAAA,CAAA,OAAA,EAmC1B,OAnC0B,EAAA,EAAA,OAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAsCxB,OAtCwB,CAsChB,kBAtCgB,CAsCG,OAtCH,EAsCY,KAtCZ,CAAA,CAAA,CAAA,EAuClC,OAvCkC,EAAA"}
1
+ {"version":3,"file":"move-cards.d.ts","names":[],"sources":["../../src/components/kanban-dnd/move-cards.ts"],"mappings":";KAEK,kBAAA;EACH,WAAA,GAAc,MAAA,EAAQ,OAAA;EACtB,QAAA,GAAW,MAAA,EAAQ,OAAA,KAAY,KAAA;EAC/B,QAAA,GAAW,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,KAAA,OAAY,OAAA;EAC/C,SAAA,GAAY,IAAA,EAAM,KAAA;AAAA;AAAA,iBAiCJ,kBAAA,gBAAA,CACd,OAAA,EAAS,OAAA,IACT,OAAA,YACA,cAAA,UACA,SAAA,GAAW,OAAA,CAAQ,kBAAA,CAAmB,OAAA,EAAS,KAAA,KAC9C,OAAA"}