@sfxcode/formkit-primevue 4.2.1 → 4.2.3
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.
- package/dist/components/PrimeListbox.d.vue.ts +1 -0
- package/dist/components/PrimeListbox.vue +175 -8
- package/dist/components/PrimeListbox.vue.d.ts +1 -0
- package/dist/definitions/input.js +1 -1
- package/dist/definitions/input.mjs +1 -1
- package/dist/definitions/repeater.js +9 -3
- package/dist/definitions/repeater.mjs +9 -3
- package/dist/sass/formkit-primevue.scss +14 -0
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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, {
|
|
@@ -50,8 +50,9 @@ function addDragHandle(handleClass = "", iconClass = "", render = "true") {
|
|
|
50
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"), {
|
|
51
51
|
children: "$slots.default"
|
|
52
52
|
}, addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")], {
|
|
53
|
+
id: "$getListItemId($index)",
|
|
53
54
|
class: "$getListItemClass($index)",
|
|
54
|
-
draggable: "$
|
|
55
|
+
draggable: "$draggable",
|
|
55
56
|
onDragstart: "$dragNodeStart($node.parent, $index)",
|
|
56
57
|
onDragover: "$dragNodeOver($index)",
|
|
57
58
|
onDragleave: "$dragNodeLeave($index)",
|
|
@@ -61,7 +62,7 @@ const primeRepeaterDefinition = exports.primeRepeaterDefinition = (0, _vue.creat
|
|
|
61
62
|
class: "$internalListClass",
|
|
62
63
|
id: "$internalListId"
|
|
63
64
|
}, true), {
|
|
64
|
-
props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems", "displayDragHandle", "dragHandleClass", "dragHandleIconClass"],
|
|
65
|
+
props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems", "displayDragHandle", "draggable", "dragHandleClass", "dragHandleIconClass"],
|
|
65
66
|
features: [addRepeaterHandler]
|
|
66
67
|
});
|
|
67
68
|
function addRepeaterHandler(node) {
|
|
@@ -69,6 +70,7 @@ function addRepeaterHandler(node) {
|
|
|
69
70
|
array.splice(index2, 0, array.splice(index1, 1)[0]);
|
|
70
71
|
return array;
|
|
71
72
|
};
|
|
73
|
+
const uuid = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
|
|
72
74
|
node.on("created", () => {
|
|
73
75
|
if (node.context) {
|
|
74
76
|
let dragStartIndex = null;
|
|
@@ -79,16 +81,20 @@ function addRepeaterHandler(node) {
|
|
|
79
81
|
node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : "";
|
|
80
82
|
node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : "";
|
|
81
83
|
node.context.renderMoveButtons = !node.context.hideMoveButtons;
|
|
84
|
+
node.context.draggable = !!node.context.draggable;
|
|
82
85
|
node.context.renderDragHandle = !!node.context.displayDragHandle;
|
|
83
86
|
node.context.dragHandleIconClass = node.context.dragHandleIconClass || "pi pi-bars";
|
|
84
87
|
node.context.internalDragHandleClass = node.context.dragHandleClass ? `formkit-repeater-drag-handle ${node.context.dragHandleClass}` : "formkit-repeater-drag-handle";
|
|
85
88
|
node.context.internalListClass = node.context.listClass ? `formkit-items ${node.context.listClass}` : "formkit-items";
|
|
86
89
|
node.context.internalListItemClass = node.context.listItemClass ? `formkit-item ${node.context.listItemClass}` : "formkit-item";
|
|
87
|
-
node.context.internalListId = `formkit-
|
|
90
|
+
node.context.internalListId = `formkit-items-${uuid}`;
|
|
88
91
|
node.context.getListItemClass = index => {
|
|
89
92
|
if (dragOverIndex === index && dragStartIndex !== index) return `${node.context?.internalListItemClass} formkit-repeater-drop-target`;
|
|
90
93
|
return node.context?.internalListItemClass?.toString() ?? "";
|
|
91
94
|
};
|
|
95
|
+
node.context.getListItemId = index => {
|
|
96
|
+
return `formkit-item-${index}-${uuid}`;
|
|
97
|
+
};
|
|
92
98
|
node.context.insertNode = parentNode => () => {
|
|
93
99
|
if (parentNode && Array.isArray(parentNode._value)) {
|
|
94
100
|
const newArray = [{
|
|
@@ -36,8 +36,9 @@ export const primeRepeaterDefinition = createInput(
|
|
|
36
36
|
{ children: "$slots.default" },
|
|
37
37
|
addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")
|
|
38
38
|
], {
|
|
39
|
+
id: "$getListItemId($index)",
|
|
39
40
|
class: "$getListItemClass($index)",
|
|
40
|
-
draggable: "$
|
|
41
|
+
draggable: "$draggable",
|
|
41
42
|
onDragstart: "$dragNodeStart($node.parent, $index)",
|
|
42
43
|
onDragover: "$dragNodeOver($index)",
|
|
43
44
|
onDragleave: "$dragNodeLeave($index)",
|
|
@@ -48,7 +49,7 @@ export const primeRepeaterDefinition = createInput(
|
|
|
48
49
|
], true, "true")
|
|
49
50
|
], { class: "$internalListClass", id: "$internalListId" }, true),
|
|
50
51
|
{
|
|
51
|
-
props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems", "displayDragHandle", "dragHandleClass", "dragHandleIconClass"],
|
|
52
|
+
props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems", "displayDragHandle", "draggable", "dragHandleClass", "dragHandleIconClass"],
|
|
52
53
|
features: [addRepeaterHandler]
|
|
53
54
|
}
|
|
54
55
|
);
|
|
@@ -57,6 +58,7 @@ function addRepeaterHandler(node) {
|
|
|
57
58
|
array.splice(index2, 0, array.splice(index1, 1)[0]);
|
|
58
59
|
return array;
|
|
59
60
|
};
|
|
61
|
+
const uuid = typeof crypto !== "undefined" && crypto.randomUUID ? crypto.randomUUID() : Math.random().toString(36).slice(2);
|
|
60
62
|
node.on("created", () => {
|
|
61
63
|
if (node.context) {
|
|
62
64
|
let dragStartIndex = null;
|
|
@@ -67,17 +69,21 @@ function addRepeaterHandler(node) {
|
|
|
67
69
|
node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : "";
|
|
68
70
|
node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : "";
|
|
69
71
|
node.context.renderMoveButtons = !node.context.hideMoveButtons;
|
|
72
|
+
node.context.draggable = !!node.context.draggable;
|
|
70
73
|
node.context.renderDragHandle = !!node.context.displayDragHandle;
|
|
71
74
|
node.context.dragHandleIconClass = node.context.dragHandleIconClass || "pi pi-bars";
|
|
72
75
|
node.context.internalDragHandleClass = node.context.dragHandleClass ? `formkit-repeater-drag-handle ${node.context.dragHandleClass}` : "formkit-repeater-drag-handle";
|
|
73
76
|
node.context.internalListClass = node.context.listClass ? `formkit-items ${node.context.listClass}` : "formkit-items";
|
|
74
77
|
node.context.internalListItemClass = node.context.listItemClass ? `formkit-item ${node.context.listItemClass}` : "formkit-item";
|
|
75
|
-
node.context.internalListId = `formkit-
|
|
78
|
+
node.context.internalListId = `formkit-items-${uuid}`;
|
|
76
79
|
node.context.getListItemClass = (index) => {
|
|
77
80
|
if (dragOverIndex === index && dragStartIndex !== index)
|
|
78
81
|
return `${node.context?.internalListItemClass} formkit-repeater-drop-target`;
|
|
79
82
|
return node.context?.internalListItemClass?.toString() ?? "";
|
|
80
83
|
};
|
|
84
|
+
node.context.getListItemId = (index) => {
|
|
85
|
+
return `formkit-item-${index}-${uuid}`;
|
|
86
|
+
};
|
|
81
87
|
node.context.insertNode = (parentNode) => () => {
|
|
82
88
|
if (parentNode && Array.isArray(parentNode._value)) {
|
|
83
89
|
const newArray = [{ ...newItem }, ...parentNode.value];
|
|
@@ -333,6 +333,20 @@ $grid-breakpoints: (
|
|
|
333
333
|
gap: 0.5rem;
|
|
334
334
|
}
|
|
335
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
|
+
|
|
336
350
|
|
|
337
351
|
// Debug
|
|
338
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}.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-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.
|
|
4
|
+
"version": "4.2.3",
|
|
5
5
|
"packageManager": "pnpm@11.0.9+sha512.34ce82e6780233cf9cad8685029a8f81d2e06196c5a9bad98879f7424940c6817c4e4524fb7d38b8553ceed48b9758b8ebaf1abd3600c232c4c8cf7366086f38",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Tom",
|