@sfxcode/formkit-primevue 4.1.8 → 4.2.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.
@@ -77,9 +77,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
77
77
  type: PropType<any>;
78
78
  };
79
79
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
80
- onReset: (...args: any[]) => void;
81
- dataSaved: (...args: any[]) => void;
82
- "update:modelValue": (value: any) => void;
80
+ "update:modelValue": (value: any) => any;
83
81
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
84
82
  id: {
85
83
  type: StringConstructor;
@@ -149,8 +147,6 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
149
147
  type: PropType<any>;
150
148
  };
151
149
  }>> & Readonly<{
152
- onOnReset?: ((...args: any[]) => any) | undefined;
153
- onDataSaved?: ((...args: any[]) => any) | undefined;
154
150
  "onUpdate:modelValue"?: ((value: any) => any) | undefined;
155
151
  }>, {
156
152
  data: Record<string, any>;
@@ -3,7 +3,7 @@ import type { FormKitSchemaDefinition } from '@formkit/core'
3
3
  import type { PropType } from 'vue'
4
4
  import { reset } from '@formkit/core'
5
5
  import { FormKit, FormKitMessages, FormKitSchema } from '@formkit/vue'
6
- import { ref } from 'vue'
6
+ import { ref, watch } from 'vue'
7
7
  import FormKitDataDebug from './FormKitDataDebug.vue'
8
8
 
9
9
  const props = defineProps({
@@ -82,6 +82,17 @@ if (props.data) {
82
82
 
83
83
  const formSchema = ref(props.schema)
84
84
 
85
+ // Watch for changes to props and update internal refs
86
+ watch(() => props.schema, (newSchema) => {
87
+ formSchema.value = newSchema
88
+ }, { deep: true })
89
+
90
+ watch(() => props.data, (newData) => {
91
+ if (newData && newData !== formData.value) {
92
+ formData.value = newData
93
+ }
94
+ }, { deep: true })
95
+
85
96
  function handleSave() {
86
97
  emit('dataSaved', formData.value)
87
98
  }
@@ -77,9 +77,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
77
77
  type: PropType<any>;
78
78
  };
79
79
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
80
- onReset: (...args: any[]) => void;
81
- dataSaved: (...args: any[]) => void;
82
- "update:modelValue": (value: any) => void;
80
+ "update:modelValue": (value: any) => any;
83
81
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
84
82
  id: {
85
83
  type: StringConstructor;
@@ -149,8 +147,6 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
149
147
  type: PropType<any>;
150
148
  };
151
149
  }>> & Readonly<{
152
- onOnReset?: ((...args: any[]) => any) | undefined;
153
- onDataSaved?: ((...args: any[]) => any) | undefined;
154
150
  "onUpdate:modelValue"?: ((value: any) => any) | undefined;
155
151
  }>, {
156
152
  data: Record<string, any>;
@@ -3,7 +3,7 @@ import type { FormKitSchemaDefinition } from '@formkit/core'
3
3
  import type { PropType } from 'vue'
4
4
 
5
5
  import { FormKit, FormKitSchema } from '@formkit/vue'
6
- import { ref } from 'vue'
6
+ import { ref, watch } from 'vue'
7
7
  import FormKitDataDebug from './FormKitDataDebug.vue'
8
8
 
9
9
  const props = defineProps({
@@ -33,6 +33,17 @@ const formSchema = ref(props.schema)
33
33
 
34
34
  const formData = defineModel<any>()
35
35
 
36
+ // Watch for changes to props and update internal refs
37
+ watch(() => props.schema, (newSchema) => {
38
+ formSchema.value = newSchema
39
+ }, { deep: true })
40
+
41
+ watch(() => props.data, (newData) => {
42
+ if (newData && newData !== formData.value) {
43
+ formData.value = newData
44
+ }
45
+ }, { deep: true })
46
+
36
47
  if (props.data) {
37
48
  formData.value = props.data
38
49
  }
@@ -31,6 +31,10 @@ export interface FormKitPrimeListboxProps {
31
31
  transferRightHeaderText?: string;
32
32
  transferHeaderClass?: string;
33
33
  transferAll?: boolean;
34
+ transferButtonSeverity?: string;
35
+ transferContainerClass?: string;
36
+ transferListContainerClass?: string;
37
+ transferButtonClass?: string;
34
38
  }
35
39
  declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
36
40
  context: {
@@ -35,6 +35,10 @@ export interface FormKitPrimeListboxProps {
35
35
  transferRightHeaderText?: string
36
36
  transferHeaderClass?: string
37
37
  transferAll?: boolean
38
+ transferButtonSeverity?: string
39
+ transferContainerClass?: string
40
+ transferListContainerClass?: string
41
+ transferButtonClass?: string
38
42
  }
39
43
 
40
44
  const props = defineProps({
@@ -44,7 +48,24 @@ const props = defineProps({
44
48
  },
45
49
  })
46
50
 
47
- const { validSlotNames, unstyled, isInvalid, handleInput, handleBlur, modelValue } = useFormKitInput(props.context)
51
+ const { validSlotNames, unstyled, isInvalid, handleInput, handleBlur, handleChange, modelValue } = useFormKitInput(props.context)
52
+
53
+ // Computed properties for transfer mode styling
54
+ const transferContainerClass = computed(() => {
55
+ return props.context.transferContainerClass || 'p-formkit-transfer'
56
+ })
57
+
58
+ const transferListContainerClass = computed(() => {
59
+ return props.context.transferListContainerClass || 'p-formkit-transfer-list-container'
60
+ })
61
+
62
+ const transferButtonClass = computed(() => {
63
+ return props.context.transferButtonClass || ''
64
+ })
65
+
66
+ const transferButtonSeverity = computed(() => {
67
+ return props.context.transferButtonSeverity || 'secondary'
68
+ })
48
69
 
49
70
  // Transfer List functionality
50
71
  const optionValueKey = computed(() => {
@@ -89,22 +110,30 @@ const sourceItems = computed(() => {
89
110
  })
90
111
 
91
112
  function transferSelected() {
92
- // sourceSelection now contains full objects since we removed optionValue
113
+ if (sourceSelection.value.length === 0)
114
+ return
115
+ // Use splice-based approach for better performance
93
116
  targetItems.value = [...targetItems.value, ...sourceSelection.value]
94
117
  sourceSelection.value = []
95
118
  }
96
119
 
97
120
  function transferAll() {
121
+ if (sourceItems.value.length === 0)
122
+ return
98
123
  targetItems.value = [...targetItems.value, ...sourceItems.value]
99
124
  sourceSelection.value = []
100
125
  }
101
126
 
102
127
  function removeSelected() {
103
- // targetSelection now contains full objects since we removed optionValue
128
+ if (targetSelection.value.length === 0)
129
+ return
130
+
131
+ // Filter out selected items using splice-inspired logic
132
+ const valueKey = optionValueKey.value
104
133
  targetItems.value = targetItems.value.filter((item: any) => {
105
- const itemValue = optionValueKey.value && typeof item === 'object' ? item[optionValueKey.value] : item
134
+ const itemValue = valueKey && typeof item === 'object' ? item[valueKey] : item
106
135
  return !targetSelection.value.some((sel: any) => {
107
- const selValue = optionValueKey.value && typeof sel === 'object' ? sel[optionValueKey.value] : sel
136
+ const selValue = valueKey && typeof sel === 'object' ? sel[valueKey] : sel
108
137
  return selValue === itemValue
109
138
  })
110
139
  })
@@ -112,6 +141,8 @@ function removeSelected() {
112
141
  }
113
142
 
114
143
  function removeAll() {
144
+ if (targetItems.value.length === 0)
145
+ return
115
146
  targetItems.value = []
116
147
  targetSelection.value = []
117
148
  }
@@ -119,6 +150,7 @@ function removeAll() {
119
150
  watch(targetItems, (newVal) => {
120
151
  modelValue.value = newVal
121
152
  handleInput(newVal)
153
+ handleChange(newVal)
122
154
  }, { deep: true })
123
155
 
124
156
  // Watch for external changes to modelValue and update targetItems
@@ -168,7 +200,8 @@ watch(() => modelValue.value, (newVal) => {
168
200
  :pt="context.pt"
169
201
  :pt-options="context.ptOptions"
170
202
  :unstyled="unstyled"
171
- @change="handleInput"
203
+ @update:model-value="handleInput"
204
+ @change="handleChange"
172
205
  @blur="handleBlur"
173
206
  >
174
207
  <template v-for="slotName in validSlotNames" :key="slotName" #[slotName]="slotProps">
@@ -180,11 +213,10 @@ watch(() => modelValue.value, (newVal) => {
180
213
  <!-- Transfer Mode -->
181
214
  <div
182
215
  v-if="context.displayMode === 'transfer'"
183
- class="p-formkit-transfer"
184
- style="display: flex; align-items: stretch; gap: 1rem; width: 100%;"
216
+ :class="transferContainerClass"
185
217
  >
186
218
  <!-- Source List -->
187
- <div style="display: flex; flex-direction: column; flex: 1; gap: 0.5rem; min-width: 0;">
219
+ <div :class="transferListContainerClass">
188
220
  <span
189
221
  v-if="context.transferLeftHeaderText"
190
222
  :class="transferHeaderClass"
@@ -199,7 +231,7 @@ watch(() => modelValue.value, (newVal) => {
199
231
  :class="context?.attrs?.class"
200
232
  :invalid="isInvalid"
201
233
  :tabindex="context?.attrs.tabindex"
202
- :aria-label="context?.attrs.ariaLabel"
234
+ :aria-label="context?.attrs.ariaLabel || 'Source list'"
203
235
  :aria-labelledby="context?.attrs.ariaLabelledby"
204
236
  :options="sourceItems"
205
237
  :option-label="context.optionLabel"
@@ -229,19 +261,21 @@ watch(() => modelValue.value, (newVal) => {
229
261
  </div>
230
262
 
231
263
  <!-- Transfer Buttons -->
232
- <div style="display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 0.5rem;">
264
+ <div class="p-formkit-transfer-buttons">
233
265
  <Button
234
266
  icon="pi pi-angle-right"
235
- severity="secondary"
267
+ :severity="transferButtonSeverity"
268
+ :class="transferButtonClass"
236
269
  outlined
237
270
  :disabled="sourceSelection.length === 0"
238
- aria-label="Move selected to target"
271
+ :aria-label="context.transferAll ? 'Move selected to target' : 'Move to target'"
239
272
  @click="transferSelected"
240
273
  />
241
274
  <Button
242
275
  v-if="context.transferAll"
243
276
  icon="pi pi-angle-double-right"
244
- severity="secondary"
277
+ :severity="transferButtonSeverity"
278
+ :class="transferButtonClass"
245
279
  outlined
246
280
  :disabled="sourceItems.length === 0"
247
281
  aria-label="Move all to target"
@@ -249,16 +283,18 @@ watch(() => modelValue.value, (newVal) => {
249
283
  />
250
284
  <Button
251
285
  icon="pi pi-angle-left"
252
- severity="secondary"
286
+ :severity="transferButtonSeverity"
287
+ :class="transferButtonClass"
253
288
  outlined
254
289
  :disabled="targetSelection.length === 0"
255
- aria-label="Move selected to source"
290
+ :aria-label="context.transferAll ? 'Move selected to source' : 'Move to source'"
256
291
  @click="removeSelected"
257
292
  />
258
293
  <Button
259
294
  v-if="context.transferAll"
260
295
  icon="pi pi-angle-double-left"
261
- severity="secondary"
296
+ :severity="transferButtonSeverity"
297
+ :class="transferButtonClass"
262
298
  outlined
263
299
  :disabled="targetItems.length === 0"
264
300
  aria-label="Move all to source"
@@ -267,7 +303,7 @@ watch(() => modelValue.value, (newVal) => {
267
303
  </div>
268
304
 
269
305
  <!-- Target List -->
270
- <div style="display: flex; flex-direction: column; flex: 1; gap: 0.5rem; min-width: 0;">
306
+ <div :class="transferListContainerClass">
271
307
  <span
272
308
  v-if="context.transferRightHeaderText"
273
309
  :class="transferHeaderClass"
@@ -282,7 +318,7 @@ watch(() => modelValue.value, (newVal) => {
282
318
  :class="context?.attrs?.class"
283
319
  :invalid="isInvalid"
284
320
  :tabindex="context?.attrs.tabindex"
285
- :aria-label="context?.attrs.ariaLabel"
321
+ :aria-label="context?.attrs.ariaLabel || 'Target list'"
286
322
  :aria-labelledby="context?.attrs.ariaLabelledby"
287
323
  :options="targetItems"
288
324
  :option-label="context.optionLabel"
@@ -31,6 +31,10 @@ export interface FormKitPrimeListboxProps {
31
31
  transferRightHeaderText?: string;
32
32
  transferHeaderClass?: string;
33
33
  transferAll?: boolean;
34
+ transferButtonSeverity?: string;
35
+ transferContainerClass?: string;
36
+ transferListContainerClass?: string;
37
+ transferButtonClass?: string;
34
38
  }
35
39
  declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
36
40
  context: {
@@ -24,7 +24,7 @@ function addButtonGroup(buttonGroupClass = "", buttonGroupItemClass = "", button
24
24
  class: buttonGroupItemClass
25
25
  }, render2);
26
26
  };
27
- return addElement("div", [addActionButtonComponent("$moveNodeUp($node.parent, $index)", "pi pi-arrow-up", "secondary", "$renderMoveButtons", "$index === 0"), addActionButtonComponent("$removeNode($node.parent, $index)", "pi pi-trash", "danger", "$displayDeleteButton", "$false"), addActionButtonComponent("$cloneNode($node.parent, $index)", "pi pi-clone", "", "$displayCloneButton", "$false"), addActionButtonComponent("$addNode($node.parent, $index)", "pi pi-plus", "", "$displayAddButton", "$false"), addActionButtonComponent("$moveNodeDown($node.parent, $index)", "pi pi-arrow-down", "secondary", "$renderMoveButtons", "$index === $node.parent.value.length -1")], {
27
+ return addElement("div", [addActionButtonComponent("$moveNodeUp($node.parent, $index)", "pi pi-arrow-up", "secondary", "$renderMoveButtons", "$index === 0"), addActionButtonComponent("$removeNode($node.parent, $index)", "pi pi-trash", "danger", "$displayDeleteButton", "$node.parent.value.length === $minItems"), addActionButtonComponent("$cloneNode($node.parent, $index)", "pi pi-clone", "", "$displayCloneButton", "$node.parent.value.length > $maxItems -1"), addActionButtonComponent("$addNode($node.parent, $index)", "pi pi-plus", "", "$displayAddButton", "$node.parent.value.length > $maxItems -1"), addActionButtonComponent("$moveNodeDown($node.parent, $index)", "pi pi-arrow-down", "secondary", "$renderMoveButtons", "$index === $node.parent.value.length -1")], {
28
28
  class: buttonGroupClass
29
29
  }, render);
30
30
  }
@@ -33,30 +33,26 @@ function addInsertButton(label = "Add Item", icon = "i-lucide-plus", styleClass
33
33
  onClick: "$insertNode($node)",
34
34
  label,
35
35
  icon,
36
- size: buttonSize
36
+ size: buttonSize,
37
+ disabled: "$node.value.length > $maxItems -1"
37
38
  })], {
38
39
  class: styleClass
39
40
  }, render);
40
41
  }
41
- 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", [addElement("div", [{
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
43
  children: "$slots.default"
43
- }], {
44
- class: "$groupClass"
45
- }), addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")], {
44
+ }, addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")], {
46
45
  class: "$internalListItemClass"
47
- })])], true, "true")], {
46
+ })], true, {})], true, "true")], {
48
47
  class: "$internalListClass"
49
- })], {
50
- props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "groupClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton"],
48
+ }, true), {
49
+ props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems"],
51
50
  features: [addRepeaterHandler]
52
51
  });
53
52
  function addRepeaterHandler(node) {
54
53
  const swapElements = (array, index1, index2) => {
55
- const newArray = [...array];
56
- const temp = newArray[index1];
57
- newArray[index1] = newArray[index2];
58
- newArray[index2] = temp;
59
- return newArray;
54
+ array.splice(index2, 0, array.splice(index1, 1)[0]);
55
+ return array;
60
56
  };
61
57
  node.on("created", () => {
62
58
  if (node.context) {
@@ -66,8 +62,8 @@ function addRepeaterHandler(node) {
66
62
  node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : "";
67
63
  node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : "";
68
64
  node.context.renderMoveButtons = !node.context.hideMoveButtons;
69
- node.context.internalListClass = node.context.listClass ? `items ${node.context.listClass}` : "items";
70
- node.context.internalListItemClass = node.context.listItemClass ? `item ${node.context.listItemClass}` : "item";
65
+ node.context.internalListClass = node.context.listClass ? `formkit-items ${node.context.listClass}` : "formkit-items";
66
+ node.context.internalListItemClass = node.context.listItemClass ? `formkit-item ${node.context.listItemClass}` : "formkit-item";
71
67
  node.context.insertNode = parentNode => () => {
72
68
  if (parentNode && Array.isArray(parentNode._value)) {
73
69
  const newArray = [{
@@ -83,31 +79,27 @@ function addRepeaterHandler(node) {
83
79
  };
84
80
  node.context.addNode = (parentNode, index) => () => {
85
81
  if (parentNode && Array.isArray(parentNode._value)) {
86
- const newArray = [...parentNode.value.slice(0, index + 1), {
87
- ...newItem
88
- }, ...parentNode.value.slice(index + 1)];
89
- parentNode.input([...newArray], false);
82
+ const array = parentNode.value;
83
+ array.splice(index + 1, 0, newItem);
84
+ parentNode.input(array, false);
90
85
  }
91
86
  };
92
87
  node.context.cloneNode = (parentNode, index) => () => {
93
88
  if (parentNode && Array.isArray(parentNode._value)) {
94
89
  const item = parentNode.value[index];
95
- const newArray = [...parentNode.value.slice(0, index + 1), {
96
- ...item
97
- }, ...parentNode.value.slice(index + 1)];
98
- parentNode.input([...newArray], false);
90
+ const array = parentNode.value;
91
+ array.splice(index + 1, 0, item);
92
+ parentNode.input(array, false);
99
93
  }
100
94
  };
101
95
  node.context.moveNodeUp = (parentNode, index) => () => {
102
96
  if (parentNode && Array.isArray(parentNode._value)) {
103
- const array = [...parentNode.value];
104
- if (index > 0) parentNode.input(swapElements(array, index - 1, index), false);
97
+ if (index > 0) parentNode.input(swapElements(parentNode.value, index - 1, index), false);
105
98
  }
106
99
  };
107
100
  node.context.moveNodeDown = (parentNode, index) => () => {
108
101
  if (parentNode && Array.isArray(parentNode._value)) {
109
- const array = [...parentNode.value];
110
- if (index < array.length - 1) parentNode.input(swapElements(array, index, index + 1), false);
102
+ if (index < parentNode.value.length - 1) parentNode.input(swapElements(parentNode.value, index, index + 1), false);
111
103
  }
112
104
  };
113
105
  }
@@ -7,45 +7,35 @@ function addButtonGroup(buttonGroupClass = "", buttonGroupItemClass = "", button
7
7
  };
8
8
  return addElement("div", [
9
9
  addActionButtonComponent("$moveNodeUp($node.parent, $index)", "pi pi-arrow-up", "secondary", "$renderMoveButtons", "$index === 0"),
10
- addActionButtonComponent("$removeNode($node.parent, $index)", "pi pi-trash", "danger", "$displayDeleteButton", "$false"),
11
- addActionButtonComponent("$cloneNode($node.parent, $index)", "pi pi-clone", "", "$displayCloneButton", "$false"),
12
- addActionButtonComponent("$addNode($node.parent, $index)", "pi pi-plus", "", "$displayAddButton", "$false"),
10
+ addActionButtonComponent("$removeNode($node.parent, $index)", "pi pi-trash", "danger", "$displayDeleteButton", "$node.parent.value.length === $minItems"),
11
+ addActionButtonComponent("$cloneNode($node.parent, $index)", "pi pi-clone", "", "$displayCloneButton", "$node.parent.value.length > $maxItems -1"),
12
+ addActionButtonComponent("$addNode($node.parent, $index)", "pi pi-plus", "", "$displayAddButton", "$node.parent.value.length > $maxItems -1"),
13
13
  addActionButtonComponent("$moveNodeDown($node.parent, $index)", "pi pi-arrow-down", "secondary", "$renderMoveButtons", "$index === $node.parent.value.length -1")
14
14
  ], { class: buttonGroupClass }, render);
15
15
  }
16
16
  function addInsertButton(label = "Add Item", icon = "i-lucide-plus", styleClass = "", buttonSize, render = "true") {
17
17
  return addElement("div", [
18
- addComponent("Button", { onClick: "$insertNode($node)", label, icon, size: buttonSize })
18
+ addComponent("Button", { onClick: "$insertNode($node)", label, icon, size: buttonSize, disabled: "$node.value.length > $maxItems -1" })
19
19
  ], { class: styleClass }, render);
20
20
  }
21
21
  export const primeRepeaterDefinition = createInput(
22
- [
23
- addElement("div", [
24
- addList("$listName", [
25
- addInsertButton("$insertButtonLabel", "pi pi-plus", "$insertButtonClass", "$insertButtonSize", "$node.children.length == 0 || $alwaysDisplayInsertButton"),
26
- addListGroup(
27
- [
28
- addElement("div", [
29
- addElement("div", [{ children: "$slots.default" }], { class: "$groupClass" }),
30
- addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")
31
- ], { class: "$internalListItemClass" })
32
- ]
33
- )
34
- ], true, "true")
35
- ], { class: "$internalListClass" })
36
- ],
22
+ addElement("div", [
23
+ addList("$listName", [
24
+ addInsertButton("$insertButtonLabel", "pi pi-plus", "$insertButtonClass", "$insertButtonSize", "$node.children.length == 0 || $alwaysDisplayInsertButton"),
25
+ addListGroup([
26
+ addElement("div", [{ children: "$slots.default" }, addButtonGroup("$buttonGroupClass", "$buttonGroupItemClass", "$buttonSize", "$renderButtons")], { class: "$internalListItemClass" })
27
+ ], true, {})
28
+ ], true, "true")
29
+ ], { class: "$internalListClass" }, true),
37
30
  {
38
- props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "groupClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton"],
31
+ props: ["insertButtonLabel", "insertButtonClass", "insertButtonSize", "alwaysDisplayInsertButton", "newItem", "listClass", "listItemClass", "hideButtonGroup", "hideMoveButtons", "buttonGroupClass", "buttonGroupItemClass", "buttonSize", "displayCloneButton", "displayAddButton", "displayDeleteButton", "minItems", "maxItems"],
39
32
  features: [addRepeaterHandler]
40
33
  }
41
34
  );
42
35
  function addRepeaterHandler(node) {
43
36
  const swapElements = (array, index1, index2) => {
44
- const newArray = [...array];
45
- const temp = newArray[index1];
46
- newArray[index1] = newArray[index2];
47
- newArray[index2] = temp;
48
- return newArray;
37
+ array.splice(index2, 0, array.splice(index1, 1)[0]);
38
+ return array;
49
39
  };
50
40
  node.on("created", () => {
51
41
  if (node.context) {
@@ -55,8 +45,8 @@ function addRepeaterHandler(node) {
55
45
  node.context.insertButtonSize = node.context.insertButtonSize ? node.context.insertButtonSize : "";
56
46
  node.context.buttonSize = node.context.buttonSize ? node.context.buttonSize : "";
57
47
  node.context.renderMoveButtons = !node.context.hideMoveButtons;
58
- node.context.internalListClass = node.context.listClass ? `items ${node.context.listClass}` : "items";
59
- node.context.internalListItemClass = node.context.listItemClass ? `item ${node.context.listItemClass}` : "item";
48
+ node.context.internalListClass = node.context.listClass ? `formkit-items ${node.context.listClass}` : "formkit-items";
49
+ node.context.internalListItemClass = node.context.listItemClass ? `formkit-item ${node.context.listItemClass}` : "formkit-item";
60
50
  node.context.insertNode = (parentNode) => () => {
61
51
  if (parentNode && Array.isArray(parentNode._value)) {
62
52
  const newArray = [{ ...newItem }, ...parentNode.value];
@@ -70,29 +60,29 @@ function addRepeaterHandler(node) {
70
60
  };
71
61
  node.context.addNode = (parentNode, index) => () => {
72
62
  if (parentNode && Array.isArray(parentNode._value)) {
73
- const newArray = [...parentNode.value.slice(0, index + 1), { ...newItem }, ...parentNode.value.slice(index + 1)];
74
- parentNode.input([...newArray], false);
63
+ const array = parentNode.value;
64
+ array.splice(index + 1, 0, newItem);
65
+ parentNode.input(array, false);
75
66
  }
76
67
  };
77
68
  node.context.cloneNode = (parentNode, index) => () => {
78
69
  if (parentNode && Array.isArray(parentNode._value)) {
79
70
  const item = parentNode.value[index];
80
- const newArray = [...parentNode.value.slice(0, index + 1), { ...item }, ...parentNode.value.slice(index + 1)];
81
- parentNode.input([...newArray], false);
71
+ const array = parentNode.value;
72
+ array.splice(index + 1, 0, item);
73
+ parentNode.input(array, false);
82
74
  }
83
75
  };
84
76
  node.context.moveNodeUp = (parentNode, index) => () => {
85
77
  if (parentNode && Array.isArray(parentNode._value)) {
86
- const array = [...parentNode.value];
87
78
  if (index > 0)
88
- parentNode.input(swapElements(array, index - 1, index), false);
79
+ parentNode.input(swapElements(parentNode.value, index - 1, index), false);
89
80
  }
90
81
  };
91
82
  node.context.moveNodeDown = (parentNode, index) => () => {
92
83
  if (parentNode && Array.isArray(parentNode._value)) {
93
- const array = [...parentNode.value];
94
- if (index < array.length - 1)
95
- parentNode.input(swapElements(array, index, index + 1), false);
84
+ if (index < parentNode.value.length - 1)
85
+ parentNode.input(swapElements(parentNode.value, index, index + 1), false);
96
86
  }
97
87
  };
98
88
  }
@@ -287,6 +287,30 @@ $grid-breakpoints: (
287
287
  }
288
288
  }
289
289
 
290
+ // Listbox Transfer
291
+ .p-formkit-transfer {
292
+ display: flex;
293
+ align-items: stretch;
294
+ gap: 1rem;
295
+ width: 100%;
296
+ min-width: 600px;
297
+ }
298
+
299
+ .p-formkit-transfer-list-container {
300
+ display: flex;
301
+ flex-direction: column;
302
+ flex: 1;
303
+ gap: 0.5rem;
304
+ min-width: 0;
305
+ }
306
+
307
+ .p-formkit-transfer-buttons {
308
+ display: flex;
309
+ flex-direction: column;
310
+ align-items: center;
311
+ justify-content: center;
312
+ gap: 0.5rem;
313
+ }
290
314
 
291
315
 
292
316
  // 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-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}.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}}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sfxcode/formkit-primevue",
3
3
  "type": "module",
4
- "version": "4.1.8",
4
+ "version": "4.2.0",
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 --patch --release && npm publish --access public && git push --follow-tags",
82
+ "release": "npm run lint && npm run build && changelogen --minor --release && npm publish --access public && git push --follow-tags",
83
83
  "lint": "eslint .",
84
84
  "lint:fix": "eslint . --fix",
85
85
  "prepublishOnly": "pnpm build",
@@ -95,28 +95,29 @@
95
95
  },
96
96
  "dependencies": {
97
97
  "@formkit/addons": "^2.0.0",
98
+ "@formkit/auto-animate": "^0.9.0",
98
99
  "@formkit/core": "^2.0.0",
99
100
  "@formkit/i18n": "^2.0.0",
100
101
  "@formkit/inputs": "^2.0.0",
101
102
  "@formkit/vue": "^2.0.0",
102
- "@intlify/core": "^11.4.2",
103
+ "@intlify/core": "^11.4.4",
103
104
  "primeicons": "^7.0.0",
104
105
  "primevue": "^4.5.5",
105
- "vue-i18n": "^11.4.2"
106
+ "vue-i18n": "^11.4.4"
106
107
  },
107
108
  "devDependencies": {
108
- "@antfu/eslint-config": "^8.2.0",
109
+ "@antfu/eslint-config": "^9.0.0",
109
110
  "@formkit/drag-and-drop": "^0.5.3",
110
111
  "@primeuix/themes": "^2.0.3",
111
- "@types/node": "^25.6.2",
112
- "@unocss/preset-icons": "66.6.8",
113
- "@unocss/preset-uno": "66.6.8",
114
- "@vitejs/plugin-vue": "^6.0.6",
115
- "@vitest/coverage-v8": "^4.1.5",
116
- "@vitest/ui": "^4.1.5",
117
- "@vue/compiler-sfc": "^3.5.34",
118
- "@vue/server-renderer": "^3.5.34",
119
- "@vue/test-utils": "^2.4.10",
112
+ "@types/node": "^25.9.1",
113
+ "@unocss/preset-icons": "66.7.0",
114
+ "@unocss/preset-uno": "66.7.0",
115
+ "@vitejs/plugin-vue": "^6.0.7",
116
+ "@vitest/coverage-v8": "^4.1.8",
117
+ "@vitest/ui": "^4.1.8",
118
+ "@vue/compiler-sfc": "^3.5.35",
119
+ "@vue/server-renderer": "^3.5.35",
120
+ "@vue/test-utils": "^2.4.11",
120
121
  "@vue/tsconfig": "^0.9.1",
121
122
  "@vueuse/core": "^14.3.0",
122
123
  "@vueuse/head": "^2.0.0",
@@ -125,27 +126,26 @@
125
126
  "consola": "^3.4.2",
126
127
  "cookie": "^1.1.1",
127
128
  "esbuild": "^0.28.0",
128
- "eslint": "^10.3.0",
129
- "happy-dom": "^20.9.0",
129
+ "eslint": "^10.4.1",
130
+ "happy-dom": "^20.10.1",
130
131
  "json-editor-vue": "^0.18.1",
131
132
  "mkdist": "^2.4.1",
132
- "sass": "^1.99.0",
133
+ "sass": "^1.100.0",
133
134
  "tslib": "^2.8.1",
134
135
  "typescript": "^6.0.3",
135
136
  "unbuild": "^3.6.1",
136
- "unocss": "66.6.8",
137
+ "unocss": "66.7.0",
137
138
  "unplugin-auto-import": "^21.0.0",
138
- "unplugin-vue-components": "^32.0.0",
139
- "vite": "^8.0.11",
139
+ "unplugin-vue-components": "^32.1.0",
140
+ "vite": "^8.0.16",
140
141
  "vite-plugin-dts": "^4.5.4",
141
- "vite-plugin-eslint": "^1.8.1",
142
142
  "vite-plugin-pages": "^0.33.3",
143
143
  "vite-ssg": "^28.3.0",
144
144
  "vitepress": "2.0.0-alpha.16",
145
- "vitest": "^4.1.5",
146
- "vue": "^3.5.34",
145
+ "vitest": "^4.1.8",
146
+ "vue": "^3.5.35",
147
147
  "vue-demi": "^0.14.10",
148
- "vue-router": "^5.0.6",
149
- "vue-tsc": "^3.2.8"
148
+ "vue-router": "^5.1.0",
149
+ "vue-tsc": "^3.3.3"
150
150
  }
151
151
  }