@proyecto-viviana/solidaria-components 0.2.5 → 0.3.0

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 (225) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -272
  3. package/dist/ActionBar.d.ts +79 -0
  4. package/dist/ActionBar.d.ts.map +1 -0
  5. package/dist/ActionGroup.d.ts +74 -0
  6. package/dist/ActionGroup.d.ts.map +1 -0
  7. package/dist/Alert.d.ts +70 -0
  8. package/dist/Alert.d.ts.map +1 -0
  9. package/dist/Autocomplete.d.ts +5 -5
  10. package/dist/Autocomplete.d.ts.map +1 -1
  11. package/dist/Breadcrumbs.d.ts +27 -8
  12. package/dist/Breadcrumbs.d.ts.map +1 -1
  13. package/dist/Button.d.ts +28 -5
  14. package/dist/Button.d.ts.map +1 -1
  15. package/dist/Calendar.d.ts +51 -7
  16. package/dist/Calendar.d.ts.map +1 -1
  17. package/dist/Checkbox.d.ts +33 -8
  18. package/dist/Checkbox.d.ts.map +1 -1
  19. package/dist/Collection.d.ts +130 -0
  20. package/dist/Collection.d.ts.map +1 -0
  21. package/dist/Color.d.ts +210 -9
  22. package/dist/Color.d.ts.map +1 -1
  23. package/dist/ColorEditor.d.ts +42 -0
  24. package/dist/ColorEditor.d.ts.map +1 -0
  25. package/dist/ComboBox.d.ts +146 -16
  26. package/dist/ComboBox.d.ts.map +1 -1
  27. package/dist/ContextualHelpTrigger.d.ts +40 -0
  28. package/dist/ContextualHelpTrigger.d.ts.map +1 -0
  29. package/dist/DateField.d.ts +35 -8
  30. package/dist/DateField.d.ts.map +1 -1
  31. package/dist/DatePicker.d.ts +101 -5
  32. package/dist/DatePicker.d.ts.map +1 -1
  33. package/dist/DateRangePickerContext.d.ts +30 -0
  34. package/dist/DateRangePickerContext.d.ts.map +1 -0
  35. package/dist/Dialog.d.ts +5 -5
  36. package/dist/Dialog.d.ts.map +1 -1
  37. package/dist/Disclosure.d.ts +25 -5
  38. package/dist/Disclosure.d.ts.map +1 -1
  39. package/dist/DragAndDrop.d.ts +80 -0
  40. package/dist/DragAndDrop.d.ts.map +1 -0
  41. package/dist/DragPreview.d.ts +14 -0
  42. package/dist/DragPreview.d.ts.map +1 -0
  43. package/dist/DropZone.d.ts +27 -0
  44. package/dist/DropZone.d.ts.map +1 -0
  45. package/dist/FieldError.d.ts +27 -0
  46. package/dist/FieldError.d.ts.map +1 -0
  47. package/dist/FileTrigger.d.ts +26 -0
  48. package/dist/FileTrigger.d.ts.map +1 -0
  49. package/dist/Focusable.d.ts +27 -0
  50. package/dist/Focusable.d.ts.map +1 -0
  51. package/dist/Form.d.ts +41 -0
  52. package/dist/Form.d.ts.map +1 -0
  53. package/dist/GridList.d.ts +69 -10
  54. package/dist/GridList.d.ts.map +1 -1
  55. package/dist/HiddenDateInput.d.ts +26 -0
  56. package/dist/HiddenDateInput.d.ts.map +1 -0
  57. package/dist/HiddenTimeInput.d.ts +25 -0
  58. package/dist/HiddenTimeInput.d.ts.map +1 -0
  59. package/dist/Icon.d.ts +57 -0
  60. package/dist/Icon.d.ts.map +1 -0
  61. package/dist/Keyboard.d.ts +13 -0
  62. package/dist/Keyboard.d.ts.map +1 -0
  63. package/dist/Landmark.d.ts +3 -3
  64. package/dist/Landmark.d.ts.map +1 -1
  65. package/dist/Link.d.ts +10 -4
  66. package/dist/Link.d.ts.map +1 -1
  67. package/dist/ListBox.d.ts +73 -11
  68. package/dist/ListBox.d.ts.map +1 -1
  69. package/dist/ListDropTargetDelegate.d.ts +38 -0
  70. package/dist/ListDropTargetDelegate.d.ts.map +1 -0
  71. package/dist/Menu.d.ts +79 -10
  72. package/dist/Menu.d.ts.map +1 -1
  73. package/dist/Meter.d.ts +4 -4
  74. package/dist/Meter.d.ts.map +1 -1
  75. package/dist/Modal.d.ts +6 -4
  76. package/dist/Modal.d.ts.map +1 -1
  77. package/dist/NumberField.d.ts +10 -12
  78. package/dist/NumberField.d.ts.map +1 -1
  79. package/dist/Popover.d.ts +32 -7
  80. package/dist/Popover.d.ts.map +1 -1
  81. package/dist/Pressable.d.ts +27 -0
  82. package/dist/Pressable.d.ts.map +1 -0
  83. package/dist/ProgressBar.d.ts +6 -4
  84. package/dist/ProgressBar.d.ts.map +1 -1
  85. package/dist/RadioGroup.d.ts +43 -9
  86. package/dist/RadioGroup.d.ts.map +1 -1
  87. package/dist/RangeCalendar.d.ts +39 -7
  88. package/dist/RangeCalendar.d.ts.map +1 -1
  89. package/dist/RouterProvider.d.ts +75 -0
  90. package/dist/RouterProvider.d.ts.map +1 -0
  91. package/dist/SearchField.d.ts +23 -21
  92. package/dist/SearchField.d.ts.map +1 -1
  93. package/dist/Select.d.ts +48 -7
  94. package/dist/Select.d.ts.map +1 -1
  95. package/dist/SelectionIndicator.d.ts +30 -0
  96. package/dist/SelectionIndicator.d.ts.map +1 -0
  97. package/dist/Separator.d.ts +9 -3
  98. package/dist/Separator.d.ts.map +1 -1
  99. package/dist/SharedElementTransition.d.ts +41 -0
  100. package/dist/SharedElementTransition.d.ts.map +1 -0
  101. package/dist/Slider.d.ts +15 -8
  102. package/dist/Slider.d.ts.map +1 -1
  103. package/dist/StepList.d.ts +90 -0
  104. package/dist/StepList.d.ts.map +1 -0
  105. package/dist/Switch.d.ts +11 -5
  106. package/dist/Switch.d.ts.map +1 -1
  107. package/dist/Table.d.ts +222 -19
  108. package/dist/Table.d.ts.map +1 -1
  109. package/dist/Tabs.d.ts +47 -10
  110. package/dist/Tabs.d.ts.map +1 -1
  111. package/dist/TagGroup.d.ts +22 -10
  112. package/dist/TagGroup.d.ts.map +1 -1
  113. package/dist/Text.d.ts +10 -0
  114. package/dist/Text.d.ts.map +1 -0
  115. package/dist/TextField.d.ts +19 -11
  116. package/dist/TextField.d.ts.map +1 -1
  117. package/dist/TimeField.d.ts +32 -7
  118. package/dist/TimeField.d.ts.map +1 -1
  119. package/dist/Toast.d.ts +29 -14
  120. package/dist/Toast.d.ts.map +1 -1
  121. package/dist/ToggleButton.d.ts +36 -0
  122. package/dist/ToggleButton.d.ts.map +1 -0
  123. package/dist/ToggleButtonGroup.d.ts +33 -0
  124. package/dist/ToggleButtonGroup.d.ts.map +1 -0
  125. package/dist/Toolbar.d.ts +7 -3
  126. package/dist/Toolbar.d.ts.map +1 -1
  127. package/dist/Tooltip.d.ts +58 -7
  128. package/dist/Tooltip.d.ts.map +1 -1
  129. package/dist/Tree.d.ts +102 -11
  130. package/dist/Tree.d.ts.map +1 -1
  131. package/dist/Virtualizer.d.ts +61 -0
  132. package/dist/Virtualizer.d.ts.map +1 -0
  133. package/dist/VirtualizerLayouts.d.ts +82 -0
  134. package/dist/VirtualizerLayouts.d.ts.map +1 -0
  135. package/dist/VisuallyHidden.d.ts +4 -2
  136. package/dist/VisuallyHidden.d.ts.map +1 -1
  137. package/dist/contexts.d.ts +6 -1
  138. package/dist/contexts.d.ts.map +1 -1
  139. package/dist/index.d.ts +73 -39
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +23342 -10644
  142. package/dist/index.js.map +1 -7
  143. package/dist/index.jsx +18110 -0
  144. package/dist/index.jsx.map +1 -0
  145. package/dist/useDragAndDrop.d.ts +93 -0
  146. package/dist/useDragAndDrop.d.ts.map +1 -0
  147. package/dist/utils.d.ts +8 -2
  148. package/dist/utils.d.ts.map +1 -1
  149. package/dist/virtualizer/Layout.d.ts +79 -0
  150. package/dist/virtualizer/Layout.d.ts.map +1 -0
  151. package/package.json +33 -32
  152. package/src/ActionBar.tsx +251 -0
  153. package/src/ActionGroup.tsx +277 -0
  154. package/src/Alert.tsx +152 -0
  155. package/src/Autocomplete.tsx +39 -44
  156. package/src/Breadcrumbs.tsx +227 -72
  157. package/src/Button.tsx +315 -74
  158. package/src/Calendar.tsx +347 -141
  159. package/src/Checkbox.tsx +414 -123
  160. package/src/Collection.tsx +350 -0
  161. package/src/Color.tsx +1325 -284
  162. package/src/ColorEditor.tsx +213 -0
  163. package/src/ComboBox.tsx +644 -245
  164. package/src/ContextualHelpTrigger.tsx +195 -0
  165. package/src/DateField.tsx +274 -106
  166. package/src/DatePicker.tsx +892 -111
  167. package/src/DateRangePickerContext.tsx +44 -0
  168. package/src/Dialog.tsx +173 -104
  169. package/src/Disclosure.tsx +158 -105
  170. package/src/DragAndDrop.tsx +340 -0
  171. package/src/DragPreview.tsx +47 -0
  172. package/src/DropZone.tsx +233 -0
  173. package/src/FieldError.tsx +89 -0
  174. package/src/FileTrigger.tsx +83 -0
  175. package/src/Focusable.tsx +103 -0
  176. package/src/Form.tsx +140 -0
  177. package/src/GridList.tsx +542 -128
  178. package/src/HiddenDateInput.tsx +153 -0
  179. package/src/HiddenTimeInput.tsx +133 -0
  180. package/src/Icon.tsx +133 -0
  181. package/src/Keyboard.tsx +26 -0
  182. package/src/Landmark.tsx +37 -63
  183. package/src/Link.tsx +132 -69
  184. package/src/ListBox.tsx +656 -106
  185. package/src/ListDropTargetDelegate.ts +283 -0
  186. package/src/Menu.tsx +1234 -132
  187. package/src/Meter.tsx +44 -58
  188. package/src/Modal.tsx +262 -166
  189. package/src/NumberField.tsx +267 -151
  190. package/src/Popover.tsx +452 -343
  191. package/src/Pressable.tsx +108 -0
  192. package/src/ProgressBar.tsx +54 -59
  193. package/src/RadioGroup.tsx +533 -121
  194. package/src/RangeCalendar.tsx +249 -150
  195. package/src/RouterProvider.tsx +223 -0
  196. package/src/SearchField.tsx +460 -133
  197. package/src/Select.tsx +804 -233
  198. package/src/SelectionIndicator.tsx +108 -0
  199. package/src/Separator.tsx +47 -49
  200. package/src/SharedElementTransition.tsx +264 -0
  201. package/src/Slider.tsx +148 -98
  202. package/src/StepList.tsx +272 -0
  203. package/src/Switch.tsx +93 -46
  204. package/src/Table.tsx +1551 -225
  205. package/src/Tabs.tsx +377 -123
  206. package/src/TagGroup.tsx +233 -135
  207. package/src/Text.tsx +18 -0
  208. package/src/TextField.tsx +413 -86
  209. package/src/TimeField.tsx +232 -222
  210. package/src/Toast.tsx +306 -160
  211. package/src/ToggleButton.tsx +169 -0
  212. package/src/ToggleButtonGroup.tsx +141 -0
  213. package/src/Toolbar.tsx +61 -70
  214. package/src/Tooltip.tsx +473 -116
  215. package/src/Tree.tsx +1514 -175
  216. package/src/Virtualizer.tsx +730 -0
  217. package/src/VirtualizerLayouts.ts +280 -0
  218. package/src/VisuallyHidden.tsx +32 -38
  219. package/src/contexts.ts +29 -36
  220. package/src/index.ts +972 -620
  221. package/src/useDragAndDrop.ts +367 -0
  222. package/src/utils.tsx +69 -50
  223. package/src/virtualizer/Layout.ts +192 -0
  224. package/dist/index.ssr.js +0 -9785
  225. package/dist/index.ssr.js.map +0 -7
@@ -0,0 +1,283 @@
1
+ import type { Accessor } from "solid-js";
2
+ import type { DropTarget } from "@proyecto-viviana/solid-stately";
3
+
4
+ type Direction = "ltr" | "rtl";
5
+ type Orientation = "horizontal" | "vertical";
6
+ type Layout = "stack" | "grid";
7
+
8
+ interface CollectionNodeLike {
9
+ key: string | number;
10
+ type?: string;
11
+ }
12
+
13
+ export interface ListDropTargetDelegateOptions {
14
+ layout?: Layout;
15
+ orientation?: Orientation;
16
+ direction?: Direction;
17
+ }
18
+
19
+ const cssEscape = (value: string): string => {
20
+ const css = (globalThis as { CSS?: { escape?: (input: string) => string } }).CSS;
21
+ return css?.escape ? css.escape(value) : value.replace(/[^a-zA-Z0-9_-]/g, "\\$&");
22
+ };
23
+
24
+ export class ListDropTargetDelegate {
25
+ private collection: Iterable<CollectionNodeLike> | (() => Iterable<CollectionNodeLike>);
26
+ private ref: Accessor<HTMLElement | null>;
27
+ private layout: Layout;
28
+ private orientation: Orientation;
29
+ private direction: Direction;
30
+
31
+ constructor(
32
+ collection: Iterable<CollectionNodeLike> | (() => Iterable<CollectionNodeLike>),
33
+ ref: Accessor<HTMLElement | null>,
34
+ options?: ListDropTargetDelegateOptions,
35
+ ) {
36
+ this.collection = collection;
37
+ this.ref = ref;
38
+ this.layout = options?.layout ?? "stack";
39
+ this.orientation = options?.orientation ?? "vertical";
40
+ this.direction = options?.direction ?? "ltr";
41
+ }
42
+
43
+ private getCollection(): Iterable<CollectionNodeLike> {
44
+ return typeof this.collection === "function"
45
+ ? (this.collection as () => Iterable<CollectionNodeLike>)()
46
+ : this.collection;
47
+ }
48
+
49
+ private getPrimaryStart(rect: DOMRect): number {
50
+ return this.orientation === "horizontal" ? rect.left : rect.top;
51
+ }
52
+
53
+ private getPrimaryEnd(rect: DOMRect): number {
54
+ return this.orientation === "horizontal" ? rect.right : rect.bottom;
55
+ }
56
+
57
+ private getSecondaryStart(rect: DOMRect): number {
58
+ return this.orientation === "horizontal" ? rect.top : rect.left;
59
+ }
60
+
61
+ private getSecondaryEnd(rect: DOMRect): number {
62
+ return this.orientation === "horizontal" ? rect.bottom : rect.right;
63
+ }
64
+
65
+ private getFlowStart(rect: DOMRect): number {
66
+ return this.layout === "stack" ? this.getPrimaryStart(rect) : this.getSecondaryStart(rect);
67
+ }
68
+
69
+ private getFlowEnd(rect: DOMRect): number {
70
+ return this.layout === "stack" ? this.getPrimaryEnd(rect) : this.getSecondaryEnd(rect);
71
+ }
72
+
73
+ private getFlowSize(rect: DOMRect): number {
74
+ return this.getFlowEnd(rect) - this.getFlowStart(rect);
75
+ }
76
+
77
+ private getItemKeys(): Array<string | number> {
78
+ return [...this.getCollection()].filter((item) => item.type === "item").map((item) => item.key);
79
+ }
80
+
81
+ private resolveBoundaryTarget(
82
+ direction: "next" | "previous",
83
+ isValidDropTarget: (target: DropTarget) => boolean,
84
+ ): DropTarget | null {
85
+ const keys = this.getItemKeys();
86
+ if (keys.length === 0) return null;
87
+ const key = direction === "next" ? keys[0] : keys[keys.length - 1];
88
+ const order: Array<"before" | "on" | "after"> =
89
+ direction === "next" ? ["before", "on", "after"] : ["after", "on", "before"];
90
+ for (const dropPosition of order) {
91
+ const target: DropTarget = { type: "item", key, dropPosition };
92
+ if (isValidDropTarget(target)) return target;
93
+ }
94
+ return null;
95
+ }
96
+
97
+ private resolveTransitionTarget(
98
+ target: DropTarget,
99
+ direction: "next" | "previous",
100
+ isValidDropTarget: (target: DropTarget) => boolean,
101
+ ): DropTarget | null {
102
+ if (target.type !== "item") return null;
103
+ const tryPosition = (dropPosition: "before" | "on" | "after"): DropTarget | null => {
104
+ if (target.dropPosition === dropPosition) return null;
105
+ const nextTarget: DropTarget = {
106
+ type: "item",
107
+ key: target.key,
108
+ dropPosition,
109
+ };
110
+ return isValidDropTarget(nextTarget) ? nextTarget : null;
111
+ };
112
+
113
+ if (direction === "next") {
114
+ if (target.dropPosition === "before") {
115
+ return tryPosition("on") ?? tryPosition("after");
116
+ }
117
+ if (target.dropPosition === "on") {
118
+ return tryPosition("after");
119
+ }
120
+ } else {
121
+ if (target.dropPosition === "after") {
122
+ return tryPosition("on") ?? tryPosition("before");
123
+ }
124
+ if (target.dropPosition === "on") {
125
+ return tryPosition("before");
126
+ }
127
+ }
128
+
129
+ return null;
130
+ }
131
+
132
+ private resolveNeighborTarget(
133
+ target: DropTarget,
134
+ direction: "next" | "previous",
135
+ isValidDropTarget: (target: DropTarget) => boolean,
136
+ ): DropTarget | null {
137
+ if (target.type !== "item") return null;
138
+ const keys = this.getItemKeys();
139
+ const index = keys.findIndex((key) => key === target.key);
140
+ if (index < 0) return this.resolveBoundaryTarget(direction, isValidDropTarget);
141
+ const nextIndex = direction === "next" ? index + 1 : index - 1;
142
+ if (nextIndex < 0 || nextIndex >= keys.length) {
143
+ const rootTarget: DropTarget = { type: "root" };
144
+ return isValidDropTarget(rootTarget) ? rootTarget : null;
145
+ }
146
+ const key = keys[nextIndex];
147
+ const order: Array<"on" | "before" | "after"> =
148
+ direction === "next" ? ["on", "before", "after"] : ["on", "after", "before"];
149
+ for (const dropPosition of order) {
150
+ const nextTarget: DropTarget = { type: "item", key, dropPosition };
151
+ if (isValidDropTarget(nextTarget)) return nextTarget;
152
+ }
153
+ return null;
154
+ }
155
+
156
+ getKeyboardNavigationTarget(
157
+ target: DropTarget | null,
158
+ direction: "next" | "previous",
159
+ isValidDropTarget: (target: DropTarget) => boolean,
160
+ ): DropTarget | null {
161
+ if (!target || target.type === "root") {
162
+ return this.resolveBoundaryTarget(direction, isValidDropTarget);
163
+ }
164
+ const transition = this.resolveTransitionTarget(target, direction, isValidDropTarget);
165
+ if (transition) return transition;
166
+ return this.resolveNeighborTarget(target, direction, isValidDropTarget);
167
+ }
168
+
169
+ getDropTargetFromPoint(
170
+ x: number,
171
+ y: number,
172
+ isValidDropTarget: (target: DropTarget) => boolean,
173
+ ): DropTarget {
174
+ const root = this.ref();
175
+ if (!root) {
176
+ return { type: "root" };
177
+ }
178
+
179
+ const allItems = [...this.getCollection()].filter((item) => item.type === "item");
180
+ if (allItems.length === 0) {
181
+ return { type: "root" };
182
+ }
183
+
184
+ const collectionId = root.dataset.collection;
185
+ const selector = collectionId ? `[data-collection="${cssEscape(collectionId)}"]` : "[data-key]";
186
+ const elements = root.querySelectorAll(selector);
187
+ const elementMap = new Map<string, HTMLElement>();
188
+ for (const node of elements) {
189
+ if (node instanceof HTMLElement && node.dataset.key != null) {
190
+ elementMap.set(node.dataset.key, node);
191
+ }
192
+ }
193
+
194
+ let low = 0;
195
+ let high = allItems.length;
196
+ const rootRect = root.getBoundingClientRect();
197
+ let primary = this.orientation === "horizontal" ? x : y;
198
+ let secondary = this.orientation === "horizontal" ? y : x;
199
+ primary += this.getPrimaryStart(rootRect);
200
+ secondary += this.getSecondaryStart(rootRect);
201
+
202
+ const flow = this.layout === "stack" ? primary : secondary;
203
+ const isPrimaryRtl = this.orientation === "horizontal" && this.direction === "rtl";
204
+ const isSecondaryRtl =
205
+ this.layout === "grid" && this.orientation === "vertical" && this.direction === "rtl";
206
+ const isFlowRtl = this.layout === "stack" ? isPrimaryRtl : isSecondaryRtl;
207
+
208
+ while (low < high) {
209
+ const mid = Math.floor((low + high) / 2);
210
+ const item = allItems[mid];
211
+ const element = elementMap.get(String(item.key));
212
+ if (!element) break;
213
+ const rect = element.getBoundingClientRect();
214
+ const update = (isGreater: boolean) => {
215
+ if (isGreater) {
216
+ low = mid + 1;
217
+ } else {
218
+ high = mid;
219
+ }
220
+ };
221
+
222
+ if (primary < this.getPrimaryStart(rect)) {
223
+ update(isPrimaryRtl);
224
+ } else if (primary > this.getPrimaryEnd(rect)) {
225
+ update(!isPrimaryRtl);
226
+ } else if (secondary < this.getSecondaryStart(rect)) {
227
+ update(isSecondaryRtl);
228
+ } else if (secondary > this.getSecondaryEnd(rect)) {
229
+ update(!isSecondaryRtl);
230
+ } else {
231
+ const target: DropTarget = {
232
+ type: "item",
233
+ key: item.key,
234
+ dropPosition: "on",
235
+ };
236
+
237
+ if (isValidDropTarget(target)) {
238
+ if (
239
+ flow <= this.getFlowStart(rect) + 5 &&
240
+ isValidDropTarget({ ...target, dropPosition: "before" })
241
+ ) {
242
+ target.dropPosition = isFlowRtl ? "after" : "before";
243
+ } else if (
244
+ flow >= this.getFlowEnd(rect) - 5 &&
245
+ isValidDropTarget({ ...target, dropPosition: "after" })
246
+ ) {
247
+ target.dropPosition = isFlowRtl ? "before" : "after";
248
+ }
249
+ } else {
250
+ const midpoint = this.getFlowStart(rect) + this.getFlowSize(rect) / 2;
251
+ if (flow <= midpoint && isValidDropTarget({ ...target, dropPosition: "before" })) {
252
+ target.dropPosition = isFlowRtl ? "after" : "before";
253
+ } else if (flow >= midpoint && isValidDropTarget({ ...target, dropPosition: "after" })) {
254
+ target.dropPosition = isFlowRtl ? "before" : "after";
255
+ }
256
+ }
257
+
258
+ return target;
259
+ }
260
+ }
261
+
262
+ const item = allItems[Math.min(low, allItems.length - 1)];
263
+ const element = elementMap.get(String(item.key));
264
+ const rect = element?.getBoundingClientRect();
265
+ if (
266
+ rect &&
267
+ (primary < this.getPrimaryStart(rect) ||
268
+ Math.abs(flow - this.getFlowStart(rect)) < Math.abs(flow - this.getFlowEnd(rect)))
269
+ ) {
270
+ return {
271
+ type: "item",
272
+ key: item.key,
273
+ dropPosition: isFlowRtl ? "after" : "before",
274
+ };
275
+ }
276
+
277
+ return {
278
+ type: "item",
279
+ key: item.key,
280
+ dropPosition: isFlowRtl ? "before" : "after",
281
+ };
282
+ }
283
+ }