@sfxcode/formkit-primevue 4.2.0 → 4.2.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.
@@ -35,6 +35,7 @@ export interface FormKitPrimeListboxProps {
35
35
  transferContainerClass?: string;
36
36
  transferListContainerClass?: string;
37
37
  transferButtonClass?: string;
38
+ transferDragDrop?: boolean;
38
39
  }
39
40
  declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
40
41
  context: {
@@ -39,6 +39,7 @@ export interface FormKitPrimeListboxProps {
39
39
  transferContainerClass?: string
40
40
  transferListContainerClass?: string
41
41
  transferButtonClass?: string
42
+ transferDragDrop?: boolean
42
43
  }
43
44
 
44
45
  const props = defineProps({
@@ -67,6 +68,14 @@ const transferButtonSeverity = computed(() => {
67
68
  return props.context.transferButtonSeverity || 'secondary'
68
69
  })
69
70
 
71
+ const transferDragDrop = computed(() => {
72
+ return props.context.transferDragDrop ?? true
73
+ })
74
+
75
+ const transferSlotNames = computed(() => {
76
+ return validSlotNames.value.filter((slotName: string) => slotName !== 'option')
77
+ })
78
+
70
79
  // Transfer List functionality
71
80
  const optionValueKey = computed(() => {
72
81
  const key = props.context.optionValue
@@ -109,6 +118,121 @@ const sourceItems = computed(() => {
109
118
  })
110
119
  })
111
120
 
121
+ type TransferList = 'source' | 'target'
122
+
123
+ const dragSource = ref<TransferList | null>(null)
124
+ const draggedItems = ref<any[]>([])
125
+ const activeDropzone = ref<TransferList | null>(null)
126
+
127
+ function getComparableValue(item: any): any {
128
+ const valueKey = optionValueKey.value
129
+ return valueKey && typeof item === 'object' ? item?.[valueKey] : item
130
+ }
131
+
132
+ function isSameOption(left: any, right: any): boolean {
133
+ return getComparableValue(left) === getComparableValue(right)
134
+ }
135
+
136
+ function getUniqueItems(items: any[]): any[] {
137
+ return items.filter((item, index) => items.findIndex(candidate => isSameOption(candidate, item)) === index)
138
+ }
139
+
140
+ function mergeUniqueItems(base: any[], toAdd: any[]): any[] {
141
+ return [...base, ...toAdd.filter(item => !base.some(candidate => isSameOption(candidate, item)))]
142
+ }
143
+
144
+ function getDraggableItems(origin: TransferList, option: any): any[] {
145
+ const selection = origin === 'source' ? sourceSelection.value : targetSelection.value
146
+ if (!selection.length)
147
+ return [option]
148
+
149
+ const hasOptionSelected = selection.some(item => isSameOption(item, option))
150
+ return hasOptionSelected ? getUniqueItems(selection) : [option]
151
+ }
152
+
153
+ function clearDragState() {
154
+ dragSource.value = null
155
+ draggedItems.value = []
156
+ activeDropzone.value = null
157
+ }
158
+
159
+ function canDropInto(target: TransferList): boolean {
160
+ return transferDragDrop.value
161
+ && !props.context.disabled
162
+ && !!dragSource.value
163
+ && dragSource.value !== target
164
+ && draggedItems.value.length > 0
165
+ }
166
+
167
+ function handleOptionDragStart(origin: TransferList, option: any, event: DragEvent) {
168
+ if (!transferDragDrop.value || props.context.disabled)
169
+ return
170
+
171
+ draggedItems.value = getDraggableItems(origin, option)
172
+ dragSource.value = origin
173
+ if (event.dataTransfer) {
174
+ event.dataTransfer.effectAllowed = 'move'
175
+ event.dataTransfer.setData('text/plain', 'formkit-primevue-transfer')
176
+ }
177
+ }
178
+
179
+ function handleOptionDragEnd() {
180
+ clearDragState()
181
+ }
182
+
183
+ function handleDropzoneDragOver(target: TransferList, event: DragEvent) {
184
+ if (!canDropInto(target))
185
+ return
186
+
187
+ event.preventDefault()
188
+ activeDropzone.value = target
189
+ if (event.dataTransfer)
190
+ event.dataTransfer.dropEffect = 'move'
191
+ }
192
+
193
+ function handleDropzoneDragLeave(target: TransferList) {
194
+ if (activeDropzone.value === target)
195
+ activeDropzone.value = null
196
+ }
197
+
198
+ function handleDropzoneDrop(target: TransferList, event: DragEvent) {
199
+ if (!canDropInto(target)) {
200
+ clearDragState()
201
+ return
202
+ }
203
+
204
+ event.preventDefault()
205
+ if (target === 'target') {
206
+ targetItems.value = mergeUniqueItems(targetItems.value, draggedItems.value)
207
+ sourceSelection.value = []
208
+ }
209
+ else {
210
+ targetItems.value = targetItems.value.filter(item => !draggedItems.value.some(dragged => isSameOption(dragged, item)))
211
+ targetSelection.value = []
212
+ }
213
+
214
+ clearDragState()
215
+ }
216
+
217
+ function resolveOptionDisabled(option: any): boolean {
218
+ const optionDisabled = props.context.optionDisabled
219
+ if (!optionDisabled)
220
+ return false
221
+ if (typeof optionDisabled === 'function')
222
+ return !!optionDisabled(option)
223
+ if (typeof optionDisabled === 'string')
224
+ return !!option?.[optionDisabled]
225
+ return !!optionDisabled
226
+ }
227
+
228
+ function resolveOptionLabel(option: any): string {
229
+ if (!props.context.optionLabel)
230
+ return String(option)
231
+ if (typeof props.context.optionLabel === 'function')
232
+ return String(props.context.optionLabel(option))
233
+ return String(option?.[props.context.optionLabel] ?? option)
234
+ }
235
+
112
236
  function transferSelected() {
113
237
  if (sourceSelection.value.length === 0)
114
238
  return
@@ -216,7 +340,12 @@ watch(() => modelValue.value, (newVal) => {
216
340
  :class="transferContainerClass"
217
341
  >
218
342
  <!-- Source List -->
219
- <div :class="transferListContainerClass">
343
+ <div
344
+ :class="[transferListContainerClass, { 'p-formkit-transfer-dropzone-active': activeDropzone === 'source' }]"
345
+ @dragover="handleDropzoneDragOver('source', $event)"
346
+ @dragleave="handleDropzoneDragLeave('source')"
347
+ @drop="handleDropzoneDrop('source', $event)"
348
+ >
220
349
  <span
221
350
  v-if="context.transferLeftHeaderText"
222
351
  :class="transferHeaderClass"
@@ -254,7 +383,23 @@ watch(() => modelValue.value, (newVal) => {
254
383
  :unstyled="unstyled"
255
384
  @blur="handleBlur"
256
385
  >
257
- <template v-for="slotName in validSlotNames" :key="slotName" #[slotName]="slotProps">
386
+ <template #option="slotProps">
387
+ <div
388
+ :draggable="transferDragDrop && !context.disabled && !resolveOptionDisabled(slotProps.option)"
389
+ class="p-formkit-transfer-option"
390
+ :class="{ 'p-formkit-transfer-option-draggable': transferDragDrop && !context.disabled && !resolveOptionDisabled(slotProps.option) }"
391
+ @dragstart="handleOptionDragStart('source', slotProps.option, $event)"
392
+ @dragend="handleOptionDragEnd"
393
+ >
394
+ <component
395
+ :is="context?.slots.option"
396
+ v-if="context?.slots?.option"
397
+ v-bind="{ ...context, ...slotProps }"
398
+ />
399
+ <span v-else>{{ resolveOptionLabel(slotProps.option) }}</span>
400
+ </div>
401
+ </template>
402
+ <template v-for="slotName in transferSlotNames" :key="slotName" #[slotName]="slotProps">
258
403
  <component :is="context?.slots[slotName]" v-bind="{ ...context, ...slotProps }" />
259
404
  </template>
260
405
  </Listbox>
@@ -303,7 +448,12 @@ watch(() => modelValue.value, (newVal) => {
303
448
  </div>
304
449
 
305
450
  <!-- Target List -->
306
- <div :class="transferListContainerClass">
451
+ <div
452
+ :class="[transferListContainerClass, { 'p-formkit-transfer-dropzone-active': activeDropzone === 'target' }]"
453
+ @dragover="handleDropzoneDragOver('target', $event)"
454
+ @dragleave="handleDropzoneDragLeave('target')"
455
+ @drop="handleDropzoneDrop('target', $event)"
456
+ >
307
457
  <span
308
458
  v-if="context.transferRightHeaderText"
309
459
  :class="transferHeaderClass"
@@ -341,7 +491,23 @@ watch(() => modelValue.value, (newVal) => {
341
491
  :unstyled="unstyled"
342
492
  @blur="handleBlur"
343
493
  >
344
- <template v-for="slotName in validSlotNames" :key="slotName" #[slotName]="slotProps">
494
+ <template #option="slotProps">
495
+ <div
496
+ :draggable="transferDragDrop && !context.disabled && !resolveOptionDisabled(slotProps.option)"
497
+ class="p-formkit-transfer-option"
498
+ :class="{ 'p-formkit-transfer-option-draggable': transferDragDrop && !context.disabled && !resolveOptionDisabled(slotProps.option) }"
499
+ @dragstart="handleOptionDragStart('target', slotProps.option, $event)"
500
+ @dragend="handleOptionDragEnd"
501
+ >
502
+ <component
503
+ :is="context?.slots.option"
504
+ v-if="context?.slots?.option"
505
+ v-bind="{ ...context, ...slotProps }"
506
+ />
507
+ <span v-else>{{ resolveOptionLabel(slotProps.option) }}</span>
508
+ </div>
509
+ </template>
510
+ <template v-for="slotName in transferSlotNames" :key="slotName" #[slotName]="slotProps">
345
511
  <component :is="context?.slots[slotName]" v-bind="{ ...context, ...slotProps }" />
346
512
  </template>
347
513
  </Listbox>
@@ -350,10 +516,6 @@ watch(() => modelValue.value, (newVal) => {
350
516
  </template>
351
517
 
352
518
  <style scoped>
353
- .p-formkit-transfer {
354
- min-width: 600px;
355
- }
356
-
357
519
  .p-formkit-transfer :deep(.p-listbox) {
358
520
  width: 100%;
359
521
  height: 100%;
@@ -362,4 +524,9 @@ watch(() => modelValue.value, (newVal) => {
362
524
  .p-formkit-transfer :deep(.p-listbox-list-container) {
363
525
  max-height: none;
364
526
  }
527
+
528
+ .p-formkit-transfer-dropzone-active :deep(.p-listbox) {
529
+ outline: 2px dashed var(--p-primary-color);
530
+ outline-offset: 2px;
531
+ }
365
532
  </style>
@@ -35,6 +35,7 @@ export interface FormKitPrimeListboxProps {
35
35
  transferContainerClass?: string;
36
36
  transferListContainerClass?: string;
37
37
  transferButtonClass?: string;
38
+ transferDragDrop?: boolean;
38
39
  }
39
40
  declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
40
41
  context: {
@@ -73,7 +73,7 @@ const primeMultiSelectDefinition = exports.primeMultiSelectDefinition = (0, _vue
73
73
  family: "PrimeInput"
74
74
  });
75
75
  const primeListboxDefinition = exports.primeListboxDefinition = (0, _vue.createInput)(_PrimeListbox.default, {
76
- props: ["pt", "ptOptions", "unstyled", "options", "optionLabel", "optionValue", "multiple", "filter", "filterIcon", "filterPlaceholder", "filterLocale", "filterMatchMode", "autoOptionFocus", "selectOnFocus", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "dataKey", "metaKeySelection", "virtualScrollerOptions", "displayMode", "transferLeftHeaderText", "transferRightHeaderText", "transferHeaderClass", "transferAll"],
76
+ props: ["pt", "ptOptions", "unstyled", "options", "optionLabel", "optionValue", "multiple", "filter", "filterIcon", "filterPlaceholder", "filterLocale", "filterMatchMode", "autoOptionFocus", "selectOnFocus", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "dataKey", "metaKeySelection", "virtualScrollerOptions", "displayMode", "transferLeftHeaderText", "transferRightHeaderText", "transferHeaderClass", "transferAll", "transferButtonSeverity", "transferContainerClass", "transferListContainerClass", "transferButtonClass", "transferDragDrop"],
77
77
  family: "PrimeInput"
78
78
  });
79
79
  const primeDatePickerDefinition = exports.primeDatePickerDefinition = (0, _vue.createInput)(_PrimeDatePicker.default, {
@@ -66,7 +66,7 @@ export const primeMultiSelectDefinition = createInput(PrimeMultiSelect, {
66
66
  family: "PrimeInput"
67
67
  });
68
68
  export const primeListboxDefinition = createInput(PrimeListbox, {
69
- props: ["pt", "ptOptions", "unstyled", "options", "optionLabel", "optionValue", "multiple", "filter", "filterIcon", "filterPlaceholder", "filterLocale", "filterMatchMode", "autoOptionFocus", "selectOnFocus", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "dataKey", "metaKeySelection", "virtualScrollerOptions", "displayMode", "transferLeftHeaderText", "transferRightHeaderText", "transferHeaderClass", "transferAll"],
69
+ props: ["pt", "ptOptions", "unstyled", "options", "optionLabel", "optionValue", "multiple", "filter", "filterIcon", "filterPlaceholder", "filterLocale", "filterMatchMode", "autoOptionFocus", "selectOnFocus", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "dataKey", "metaKeySelection", "virtualScrollerOptions", "displayMode", "transferLeftHeaderText", "transferRightHeaderText", "transferHeaderClass", "transferAll", "transferButtonSeverity", "transferContainerClass", "transferListContainerClass", "transferButtonClass", "transferDragDrop"],
70
70
  family: "PrimeInput"
71
71
  });
72
72
  export const primeDatePickerDefinition = createInput(PrimeDatePicker, {
@@ -5,13 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.primeRepeaterDefinition = void 0;
7
7
  var _vue = require("@formkit/vue");
8
- var _useFormKitSchema = require("../composables/useFormKitSchema");
8
+ var _composables = require("../composables");
9
9
  const {
10
10
  addList,
11
11
  addElement,
12
12
  addListGroup,
13
13
  addComponent
14
- } = (0, _useFormKitSchema.useFormKitSchema)();
14
+ } = (0, _composables.useFormKitSchema)();
15
15
  function addButtonGroup(buttonGroupClass = "", buttonGroupItemClass = "", buttonSize, render = "true") {
16
16
  const addActionButtonComponent = (onClick = "", icon = "", severity = "", render2 = "true", disabled = "false") => {
17
17
  return addElement("div", [addComponent("Button", {
@@ -39,14 +39,30 @@ function addInsertButton(label = "Add Item", icon = "i-lucide-plus", styleClass
39
39
  class: styleClass
40
40
  }, render);
41
41
  }
42
- const primeRepeaterDefinition = exports.primeRepeaterDefinition = (0, _vue.createInput)(addElement("div", [addList("$listName", [addInsertButton("$insertButtonLabel", "pi pi-plus", "$insertButtonClass", "$insertButtonSize", "$node.children.length == 0 || $alwaysDisplayInsertButton"), addListGroup([addElement("div", [{
42
+ function addDragHandle(handleClass = "", iconClass = "", render = "true") {
43
+ return addElement("span", [addElement("i", [], {
44
+ class: iconClass
45
+ })], {
46
+ "class": handleClass,
47
+ "aria-label": "Drag to reorder"
48
+ }, render);
49
+ }
50
+ const primeRepeaterDefinition = exports.primeRepeaterDefinition = (0, _vue.createInput)(addElement("div", [addList("$listName", [addInsertButton("$insertButtonLabel", "pi pi-plus", "$insertButtonClass", "$insertButtonSize", "$node.children.length == 0 || $alwaysDisplayInsertButton"), addListGroup([addElement("div", [addDragHandle("$internalDragHandleClass", "$dragHandleIconClass", "$renderDragHandle"), {
43
51
  children: "$slots.default"
44
52
  }, addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")], {
45
- class: "$internalListItemClass"
53
+ id: "$getListItemId($index)",
54
+ class: "$getListItemClass($index)",
55
+ draggable: "$renderDragHandle",
56
+ onDragstart: "$dragNodeStart($node.parent, $index)",
57
+ onDragover: "$dragNodeOver($index)",
58
+ onDragleave: "$dragNodeLeave($index)",
59
+ onDrop: "$dropNode($node.parent, $index)",
60
+ onDragend: "$dragNodeEnd"
46
61
  })], true, {})], true, "true")], {
47
- class: "$internalListClass"
62
+ class: "$internalListClass",
63
+ id: "$internalListId"
48
64
  }, true), {
49
- props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems"],
65
+ props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems", "displayDragHandle", "dragHandleClass", "dragHandleIconClass"],
50
66
  features: [addRepeaterHandler]
51
67
  });
52
68
  function addRepeaterHandler(node) {
@@ -54,16 +70,30 @@ function addRepeaterHandler(node) {
54
70
  array.splice(index2, 0, array.splice(index1, 1)[0]);
55
71
  return array;
56
72
  };
73
+ const uuid = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
57
74
  node.on("created", () => {
58
75
  if (node.context) {
76
+ let dragStartIndex = null;
77
+ let dragOverIndex = null;
59
78
  const newItem = node.context.newItem || {};
60
79
  node.context.listName = node.name;
61
80
  node.context.renderButtons = !node.context.hideButtonGroup;
62
81
  node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : "";
63
82
  node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : "";
64
83
  node.context.renderMoveButtons = !node.context.hideMoveButtons;
84
+ node.context.renderDragHandle = !!node.context.displayDragHandle;
85
+ node.context.dragHandleIconClass = node.context.dragHandleIconClass || "pi pi-bars";
86
+ node.context.internalDragHandleClass = node.context.dragHandleClass ? `formkit-repeater-drag-handle ${node.context.dragHandleClass}` : "formkit-repeater-drag-handle";
65
87
  node.context.internalListClass = node.context.listClass ? `formkit-items ${node.context.listClass}` : "formkit-items";
66
88
  node.context.internalListItemClass = node.context.listItemClass ? `formkit-item ${node.context.listItemClass}` : "formkit-item";
89
+ node.context.internalListId = `formkit-items-${uuid}`;
90
+ node.context.getListItemClass = index => {
91
+ if (dragOverIndex === index && dragStartIndex !== index) return `${node.context?.internalListItemClass} formkit-repeater-drop-target`;
92
+ return node.context?.internalListItemClass?.toString() ?? "";
93
+ };
94
+ node.context.getListItemId = index => {
95
+ return `formkit-item-${index}-${uuid}`;
96
+ };
67
97
  node.context.insertNode = parentNode => () => {
68
98
  if (parentNode && Array.isArray(parentNode._value)) {
69
99
  const newArray = [{
@@ -102,6 +132,45 @@ function addRepeaterHandler(node) {
102
132
  if (index < parentNode.value.length - 1) parentNode.input(swapElements(parentNode.value, index, index + 1), false);
103
133
  }
104
134
  };
135
+ node.context.dragNodeStart = (_parentNode, index) => event => {
136
+ dragStartIndex = index;
137
+ if (event?.dataTransfer) {
138
+ event.dataTransfer.effectAllowed = "move";
139
+ event.dataTransfer.setData("text/plain", String(index));
140
+ }
141
+ };
142
+ node.context.dragNodeOver = targetIndex => event => {
143
+ event?.preventDefault();
144
+ dragOverIndex = targetIndex;
145
+ if (event?.dataTransfer) event.dataTransfer.dropEffect = "move";
146
+ };
147
+ node.context.dragNodeLeave = targetIndex => () => {
148
+ if (dragOverIndex === targetIndex) dragOverIndex = null;
149
+ };
150
+ node.context.dropNode = (parentNode, targetIndex) => event => {
151
+ event?.preventDefault();
152
+ if (!parentNode || !Array.isArray(parentNode._value)) {
153
+ dragOverIndex = null;
154
+ return;
155
+ }
156
+ const sourceFromEvent = Number.parseInt(event?.dataTransfer?.getData("text/plain") || "", 10);
157
+ const sourceIndex = Number.isInteger(sourceFromEvent) ? sourceFromEvent : dragStartIndex;
158
+ if (sourceIndex === null || sourceIndex === targetIndex) {
159
+ dragOverIndex = null;
160
+ return;
161
+ }
162
+ if (sourceIndex < 0 || sourceIndex >= parentNode.value.length) {
163
+ dragOverIndex = null;
164
+ return;
165
+ }
166
+ parentNode.input(swapElements(parentNode.value, sourceIndex, targetIndex), false);
167
+ dragStartIndex = null;
168
+ dragOverIndex = null;
169
+ };
170
+ node.context.dragNodeEnd = () => {
171
+ dragStartIndex = null;
172
+ dragOverIndex = null;
173
+ };
105
174
  }
106
175
  });
107
176
  }
@@ -1,5 +1,5 @@
1
1
  import { createInput } from "@formkit/vue";
2
- import { useFormKitSchema } from "../composables/useFormKitSchema.mjs";
2
+ import { useFormKitSchema } from "../composables/index.mjs";
3
3
  const { addList, addElement, addListGroup, addComponent } = useFormKitSchema();
4
4
  function addButtonGroup(buttonGroupClass = "", buttonGroupItemClass = "", buttonSize, render = "true") {
5
5
  const addActionButtonComponent = (onClick = "", icon = "", severity = "", render2 = "true", disabled = "false") => {
@@ -18,17 +18,38 @@ function addInsertButton(label = "Add Item", icon = "i-lucide-plus", styleClass
18
18
  addComponent("Button", { onClick: "$insertNode($node)", label, icon, size: buttonSize, disabled: "$node.value.length > $maxItems -1" })
19
19
  ], { class: styleClass }, render);
20
20
  }
21
+ function addDragHandle(handleClass = "", iconClass = "", render = "true") {
22
+ return addElement("span", [
23
+ addElement("i", [], { class: iconClass })
24
+ ], {
25
+ "class": handleClass,
26
+ "aria-label": "Drag to reorder"
27
+ }, render);
28
+ }
21
29
  export const primeRepeaterDefinition = createInput(
22
30
  addElement("div", [
23
31
  addList("$listName", [
24
32
  addInsertButton("$insertButtonLabel", "pi pi-plus", "$insertButtonClass", "$insertButtonSize", "$node.children.length == 0 || $alwaysDisplayInsertButton"),
25
33
  addListGroup([
26
- addElement("div", [{ children: "$slots.default" }, addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")], { class: "$internalListItemClass" })
34
+ addElement("div", [
35
+ addDragHandle("$internalDragHandleClass", "$dragHandleIconClass", "$renderDragHandle"),
36
+ { children: "$slots.default" },
37
+ addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")
38
+ ], {
39
+ id: "$getListItemId($index)",
40
+ class: "$getListItemClass($index)",
41
+ draggable: "$renderDragHandle",
42
+ onDragstart: "$dragNodeStart($node.parent, $index)",
43
+ onDragover: "$dragNodeOver($index)",
44
+ onDragleave: "$dragNodeLeave($index)",
45
+ onDrop: "$dropNode($node.parent, $index)",
46
+ onDragend: "$dragNodeEnd"
47
+ })
27
48
  ], true, {})
28
49
  ], true, "true")
29
- ], { class: "$internalListClass" }, true),
50
+ ], { class: "$internalListClass", id: "$internalListId" }, true),
30
51
  {
31
- props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems"],
52
+ props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems", "displayDragHandle", "dragHandleClass", "dragHandleIconClass"],
32
53
  features: [addRepeaterHandler]
33
54
  }
34
55
  );
@@ -37,16 +58,31 @@ function addRepeaterHandler(node) {
37
58
  array.splice(index2, 0, array.splice(index1, 1)[0]);
38
59
  return array;
39
60
  };
61
+ const uuid = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
40
62
  node.on("created", () => {
41
63
  if (node.context) {
64
+ let dragStartIndex = null;
65
+ let dragOverIndex = null;
42
66
  const newItem = node.context.newItem || {};
43
67
  node.context.listName = node.name;
44
68
  node.context.renderButtons = !node.context.hideButtonGroup;
45
69
  node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : "";
46
70
  node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : "";
47
71
  node.context.renderMoveButtons = !node.context.hideMoveButtons;
72
+ node.context.renderDragHandle = !!node.context.displayDragHandle;
73
+ node.context.dragHandleIconClass = node.context.dragHandleIconClass || "pi pi-bars";
74
+ node.context.internalDragHandleClass = node.context.dragHandleClass ? `formkit-repeater-drag-handle ${node.context.dragHandleClass}` : "formkit-repeater-drag-handle";
48
75
  node.context.internalListClass = node.context.listClass ? `formkit-items ${node.context.listClass}` : "formkit-items";
49
76
  node.context.internalListItemClass = node.context.listItemClass ? `formkit-item ${node.context.listItemClass}` : "formkit-item";
77
+ node.context.internalListId = `formkit-items-${uuid}`;
78
+ node.context.getListItemClass = (index) => {
79
+ if (dragOverIndex === index && dragStartIndex !== index)
80
+ return `${node.context?.internalListItemClass} formkit-repeater-drop-target`;
81
+ return node.context?.internalListItemClass?.toString() ?? "";
82
+ };
83
+ node.context.getListItemId = (index) => {
84
+ return `formkit-item-${index}-${uuid}`;
85
+ };
50
86
  node.context.insertNode = (parentNode) => () => {
51
87
  if (parentNode && Array.isArray(parentNode._value)) {
52
88
  const newArray = [{ ...newItem }, ...parentNode.value];
@@ -85,6 +121,47 @@ function addRepeaterHandler(node) {
85
121
  parentNode.input(swapElements(parentNode.value, index, index + 1), false);
86
122
  }
87
123
  };
124
+ node.context.dragNodeStart = (_parentNode, index) => (event) => {
125
+ dragStartIndex = index;
126
+ if (event?.dataTransfer) {
127
+ event.dataTransfer.effectAllowed = "move";
128
+ event.dataTransfer.setData("text/plain", String(index));
129
+ }
130
+ };
131
+ node.context.dragNodeOver = (targetIndex) => (event) => {
132
+ event?.preventDefault();
133
+ dragOverIndex = targetIndex;
134
+ if (event?.dataTransfer)
135
+ event.dataTransfer.dropEffect = "move";
136
+ };
137
+ node.context.dragNodeLeave = (targetIndex) => () => {
138
+ if (dragOverIndex === targetIndex)
139
+ dragOverIndex = null;
140
+ };
141
+ node.context.dropNode = (parentNode, targetIndex) => (event) => {
142
+ event?.preventDefault();
143
+ if (!parentNode || !Array.isArray(parentNode._value)) {
144
+ dragOverIndex = null;
145
+ return;
146
+ }
147
+ const sourceFromEvent = Number.parseInt(event?.dataTransfer?.getData("text/plain") || "", 10);
148
+ const sourceIndex = Number.isInteger(sourceFromEvent) ? sourceFromEvent : dragStartIndex;
149
+ if (sourceIndex === null || sourceIndex === targetIndex) {
150
+ dragOverIndex = null;
151
+ return;
152
+ }
153
+ if (sourceIndex < 0 || sourceIndex >= parentNode.value.length) {
154
+ dragOverIndex = null;
155
+ return;
156
+ }
157
+ parentNode.input(swapElements(parentNode.value, sourceIndex, targetIndex), false);
158
+ dragStartIndex = null;
159
+ dragOverIndex = null;
160
+ };
161
+ node.context.dragNodeEnd = () => {
162
+ dragStartIndex = null;
163
+ dragOverIndex = null;
164
+ };
88
165
  }
89
166
  });
90
167
  }
@@ -177,6 +177,27 @@ $grid-breakpoints: (
177
177
  border-radius: 1rem;
178
178
  padding: 0.2rem 0.5rem;
179
179
  }
180
+
181
+ .formkit-repeater-drag-handle {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ cursor: grab;
185
+ user-select: none;
186
+ }
187
+
188
+ .formkit-item[draggable="true"] {
189
+ cursor: grab;
190
+
191
+ &:active {
192
+ cursor: grabbing;
193
+ }
194
+
195
+ &.formkit-repeater-drop-target {
196
+ outline: 1px dashed var(--p-primary-color, #3b82f6);
197
+ outline-offset: 2px;
198
+ background: color-mix(in srgb, var(--p-primary-color, #3b82f6) 12%, transparent);
199
+ }
200
+ }
180
201
  }
181
202
 
182
203
  // data view only
@@ -312,6 +333,20 @@ $grid-breakpoints: (
312
333
  gap: 0.5rem;
313
334
  }
314
335
 
336
+ .p-formkit-transfer-option {
337
+ width: 100%;
338
+ }
339
+
340
+ .p-formkit-transfer-option-draggable {
341
+ cursor: grab;
342
+ }
343
+
344
+ .p-formkit-transfer-option-draggable:active {
345
+ cursor: grabbing;
346
+ }
347
+
348
+
349
+
315
350
 
316
351
  // Debug
317
352
  .p-formkit-data-debug {
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- :root{--formkit-error-color: #ef9a9a}.formkit-form .formkit-messages{margin:.125rem 0;padding-top:.5rem;padding-left:.5rem}.formkit-form .formkit-message{list-style:none;padding:0;margin:0;color:var(--formkit-error-color);font-size:.8rem}.formkit-form .formkit-outer{padding-bottom:.8rem}.formkit-form .formkit-outer .formkit-messages{margin:.125rem 0;padding-top:.25rem;padding-left:0}.formkit-form .formkit-outer .formkit-inner .p-formkit .p-formkit-icon{box-sizing:border-box;width:100%}.formkit-form .formkit-outer .formkit-inner .p-formkit .p-inputtext,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-textarea,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-password,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-multiselect,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-select,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-editor{box-sizing:border-box;width:100%}.formkit-form .formkit-outer .formkit-inner .p-formkit .p-inputtext.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-textarea.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-password.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-multiselect.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-select.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-editor.p-colorpicker-preview{width:2rem}.formkit-form .formkit-outer .formkit-help{margin:.25rem 0 0 0;font-size:.8rem;color:var(--text-color-secondary)}.formkit-form .formkit-label{display:block;margin:0;padding-bottom:.5rem;font-weight:bold;font-size:.8rem}.formkit-form .p-formkit>*{margin-right:.5rem}.formkit-form .p-formkit>*:last-child,.formkit-form .p-formkit>*:only-child{margin-right:0}.formkit-form .p-formkit-options{display:flex;flex-wrap:wrap;gap:.5rem}.formkit-form .p-formkit-options .p-formkit-option{display:flex;align-items:center}.formkit-form .p-formkit-options .p-formkit-option label{margin-left:.5rem}.formkit-form .formkit-fieldset{margin:0;padding:0;border-radius:0;border:0}.formkit-form .formkit-fieldset:focus-within{border:0}.formkit-form .formkit-fieldset>.formkit-help{margin-top:0;margin-bottom:0}.formkit-form .formkit-legend{display:block;margin:0;padding:0}.formkit-form .formkit-actions{padding-top:.5rem;display:flex}.formkit-form .formkit-actions button{margin-right:.5rem}.formkit-form .p-action-buttons{margin-top:.25rem}.formkit-form .p-action-buttons .p-button{margin-right:.5rem}.formkit-form .p-action-buttons span .p-space{margin-right:3rem}.formkit-form .p-chip-item{align-items:center;background:var(--p-surface-500);color:var(--p-surface-0);border-radius:1rem;padding:.2rem .5rem}.p-formkit-data-view .formkit-outer{padding-bottom:.5rem}.p-formkit-data-view.form-horizontal{padding-bottom:.8rem}.p-formkit-data-view .formkit-help{padding-top:.25rem;margin:0}.p-formkit-data-view ul,.p-formkit-data-view ol{padding-inline-start:1rem;margin-block-start:0;margin-block-end:0}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper{display:flex;flex-wrap:wrap}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .formkit-inner{width:auto !important}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label{width:auto;order:2;padding:.125rem 0}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:after{content:""}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label+.formkit-inner{margin-left:0 !important;order:1;flex-basis:2rem;flex-grow:0;flex-shrink:0;overflow:hidden}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label+.formkit-inner:has(label){flex-grow:1;flex-basis:100%}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3),.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3)~label{width:auto}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3){order:1}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3)+div.p-checkbox{order:2;width:auto}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3)~label{order:3}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .formkit-inner:first-child{margin-left:0 !important}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .formkit-inner:first-child .p-formkit{display:flex}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .p-checkbox:not(:only-child){width:2rem;overflow:hidden}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-help{width:auto !important}.p-formkit-transfer{display:flex;align-items:stretch;gap:1rem;width:100%;min-width:600px}.p-formkit-transfer-list-container{display:flex;flex-direction:column;flex:1;gap:.5rem;min-width:0}.p-formkit-transfer-buttons{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}.p-formkit-data-debug pre,.p-formkit-data-debug span{font-size:.75rem;line-height:1rem}@media(min-width: 1024px){.formkit-form{display:flex;flex-wrap:wrap;margin-left:-0.5rem;margin-right:-0.5rem}.formkit-form>*{flex-shrink:0;width:100%;max-width:100%;padding-left:.5rem;padding-right:.5rem}.col-1{width:8.3333333333%}.col-2{width:16.6666666667%}.col-3{width:25%}.col-4{width:33.3333333333%}.col-5{width:41.6666666667%}.col-6{width:50%}.col-7{width:58.3333333333%}.col-8{width:66.6666666667%}.col-9{width:75%}.col-10{width:83.3333333333%}.col-11{width:91.6666666667%}.col-12{width:100%}}@media(min-width: 768px){.formkit-form.form-horizontal .formkit-wrapper{display:flex}.formkit-form.form-horizontal .formkit-wrapper label{display:inline-block;padding:0 .25rem 0 0;font-size:inherit}.formkit-form.form-horizontal .formkit-wrapper label:after{content:":"}}@media(min-width: 768px)and (min-width: 768px){.formkit-form.form-horizontal.form-horizontal-checkbox-indent .formkit-outer[data-type=primeCheckbox]{padding-left:33.3333333333%}}@media(min-width: 768px){.p-formkit-data-view .formkit-form.form-horizontal label{white-space:nowrap}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-outer{width:100%}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-outer label{width:33.3333333333%;padding-top:.25rem;line-height:normal}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-outer .formkit-inner{width:66.6666666667%}.p-formkit-data-edit .formkit-form.form-horizontal div[data-type=primeCheckbox] .formkit-inner{margin-left:auto}.p-formkit-data-edit .formkit-form.form-horizontal div[data-type=primeCheckbox] .formkit-inner .p-formkit{display:flex}.p-formkit-data-edit .formkit-form.form-horizontal div[data-type=primeCheckbox] .formkit-inner label{width:auto;padding:0}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-help,.p-formkit-data-edit .formkit-form.form-horizontal .formkit-messages{width:66.6666666667%;margin-left:auto}}
1
+ :root{--formkit-error-color: #ef9a9a}.formkit-form .formkit-messages{margin:.125rem 0;padding-top:.5rem;padding-left:.5rem}.formkit-form .formkit-message{list-style:none;padding:0;margin:0;color:var(--formkit-error-color);font-size:.8rem}.formkit-form .formkit-outer{padding-bottom:.8rem}.formkit-form .formkit-outer .formkit-messages{margin:.125rem 0;padding-top:.25rem;padding-left:0}.formkit-form .formkit-outer .formkit-inner .p-formkit .p-formkit-icon{box-sizing:border-box;width:100%}.formkit-form .formkit-outer .formkit-inner .p-formkit .p-inputtext,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-textarea,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-password,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-multiselect,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-select,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-editor{box-sizing:border-box;width:100%}.formkit-form .formkit-outer .formkit-inner .p-formkit .p-inputtext.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-textarea.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-password.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-multiselect.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-select.p-colorpicker-preview,.formkit-form .formkit-outer .formkit-inner .p-formkit .p-editor.p-colorpicker-preview{width:2rem}.formkit-form .formkit-outer .formkit-help{margin:.25rem 0 0 0;font-size:.8rem;color:var(--text-color-secondary)}.formkit-form .formkit-label{display:block;margin:0;padding-bottom:.5rem;font-weight:bold;font-size:.8rem}.formkit-form .p-formkit>*{margin-right:.5rem}.formkit-form .p-formkit>*:last-child,.formkit-form .p-formkit>*:only-child{margin-right:0}.formkit-form .p-formkit-options{display:flex;flex-wrap:wrap;gap:.5rem}.formkit-form .p-formkit-options .p-formkit-option{display:flex;align-items:center}.formkit-form .p-formkit-options .p-formkit-option label{margin-left:.5rem}.formkit-form .formkit-fieldset{margin:0;padding:0;border-radius:0;border:0}.formkit-form .formkit-fieldset:focus-within{border:0}.formkit-form .formkit-fieldset>.formkit-help{margin-top:0;margin-bottom:0}.formkit-form .formkit-legend{display:block;margin:0;padding:0}.formkit-form .formkit-actions{padding-top:.5rem;display:flex}.formkit-form .formkit-actions button{margin-right:.5rem}.formkit-form .p-action-buttons{margin-top:.25rem}.formkit-form .p-action-buttons .p-button{margin-right:.5rem}.formkit-form .p-action-buttons span .p-space{margin-right:3rem}.formkit-form .p-chip-item{align-items:center;background:var(--p-surface-500);color:var(--p-surface-0);border-radius:1rem;padding:.2rem .5rem}.formkit-form .formkit-repeater-drag-handle{display:inline-flex;align-items:center;cursor:grab;user-select:none}.formkit-form .formkit-item[draggable=true]{cursor:grab}.formkit-form .formkit-item[draggable=true]:active{cursor:grabbing}.formkit-form .formkit-item[draggable=true].formkit-repeater-drop-target{outline:1px dashed var(--p-primary-color, #3b82f6);outline-offset:2px;background:color-mix(in srgb, var(--p-primary-color, #3b82f6) 12%, transparent)}.p-formkit-data-view .formkit-outer{padding-bottom:.5rem}.p-formkit-data-view.form-horizontal{padding-bottom:.8rem}.p-formkit-data-view .formkit-help{padding-top:.25rem;margin:0}.p-formkit-data-view ul,.p-formkit-data-view ol{padding-inline-start:1rem;margin-block-start:0;margin-block-end:0}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper{display:flex;flex-wrap:wrap}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .formkit-inner{width:auto !important}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label{width:auto;order:2;padding:.125rem 0}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:after{content:""}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label+.formkit-inner{margin-left:0 !important;order:1;flex-basis:2rem;flex-grow:0;flex-shrink:0;overflow:hidden}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label+.formkit-inner:has(label){flex-grow:1;flex-basis:100%}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3),.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3)~label{width:auto}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3){order:1}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3)+div.p-checkbox{order:2;width:auto}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper label:first-child:nth-last-child(3)~label{order:3}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .formkit-inner:first-child{margin-left:0 !important}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .formkit-inner:first-child .p-formkit{display:flex}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-wrapper .p-checkbox:not(:only-child){width:2rem;overflow:hidden}.p-formkit-data-edit .formkit-outer[data-type=primeCheckbox] .formkit-help{width:auto !important}.p-formkit-transfer{display:flex;align-items:stretch;gap:1rem;width:100%;min-width:600px}.p-formkit-transfer-list-container{display:flex;flex-direction:column;flex:1;gap:.5rem;min-width:0}.p-formkit-transfer-buttons{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}.p-formkit-transfer-option{width:100%}.p-formkit-transfer-option-draggable{cursor:grab}.p-formkit-transfer-option-draggable:active{cursor:grabbing}.p-formkit-data-debug pre,.p-formkit-data-debug span{font-size:.75rem;line-height:1rem}@media(min-width: 1024px){.formkit-form{display:flex;flex-wrap:wrap;margin-left:-0.5rem;margin-right:-0.5rem}.formkit-form>*{flex-shrink:0;width:100%;max-width:100%;padding-left:.5rem;padding-right:.5rem}.col-1{width:8.3333333333%}.col-2{width:16.6666666667%}.col-3{width:25%}.col-4{width:33.3333333333%}.col-5{width:41.6666666667%}.col-6{width:50%}.col-7{width:58.3333333333%}.col-8{width:66.6666666667%}.col-9{width:75%}.col-10{width:83.3333333333%}.col-11{width:91.6666666667%}.col-12{width:100%}}@media(min-width: 768px){.formkit-form.form-horizontal .formkit-wrapper{display:flex}.formkit-form.form-horizontal .formkit-wrapper label{display:inline-block;padding:0 .25rem 0 0;font-size:inherit}.formkit-form.form-horizontal .formkit-wrapper label:after{content:":"}}@media(min-width: 768px)and (min-width: 768px){.formkit-form.form-horizontal.form-horizontal-checkbox-indent .formkit-outer[data-type=primeCheckbox]{padding-left:33.3333333333%}}@media(min-width: 768px){.p-formkit-data-view .formkit-form.form-horizontal label{white-space:nowrap}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-outer{width:100%}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-outer label{width:33.3333333333%;padding-top:.25rem;line-height:normal}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-outer .formkit-inner{width:66.6666666667%}.p-formkit-data-edit .formkit-form.form-horizontal div[data-type=primeCheckbox] .formkit-inner{margin-left:auto}.p-formkit-data-edit .formkit-form.form-horizontal div[data-type=primeCheckbox] .formkit-inner .p-formkit{display:flex}.p-formkit-data-edit .formkit-form.form-horizontal div[data-type=primeCheckbox] .formkit-inner label{width:auto;padding:0}.p-formkit-data-edit .formkit-form.form-horizontal .formkit-help,.p-formkit-data-edit .formkit-form.form-horizontal .formkit-messages{width:66.6666666667%;margin-left:auto}}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sfxcode/formkit-primevue",
3
3
  "type": "module",
4
- "version": "4.2.0",
4
+ "version": "4.2.2",
5
5
  "packageManager": "pnpm@11.0.9+sha512.34ce82e6780233cf9cad8685029a8f81d2e06196c5a9bad98879f7424940c6817c4e4524fb7d38b8553ceed48b9758b8ebaf1abd3600c232c4c8cf7366086f38",
6
6
  "author": {
7
7
  "name": "Tom",
@@ -79,7 +79,7 @@
79
79
  "dev": "vite serve dev",
80
80
  "dev:build": "vite build dev",
81
81
  "dev:preview": "vite preview dev",
82
- "release": "npm run lint && npm run build && changelogen --minor --release && npm publish --access public && git push --follow-tags",
82
+ "release": "npm run lint && npm run build && changelogen --patch --release && npm publish --access public && git push --follow-tags",
83
83
  "lint": "eslint .",
84
84
  "lint:fix": "eslint . --fix",
85
85
  "prepublishOnly": "pnpm build",
@@ -107,7 +107,6 @@
107
107
  },
108
108
  "devDependencies": {
109
109
  "@antfu/eslint-config": "^9.0.0",
110
- "@formkit/drag-and-drop": "^0.5.3",
111
110
  "@primeuix/themes": "^2.0.3",
112
111
  "@types/node": "^25.9.1",
113
112
  "@unocss/preset-icons": "66.7.0",