diff --git a/components/ComponentPreview.vue b/components/ComponentPreview.vue
index eb1205d..eb2a021 100644
--- a/components/ComponentPreview.vue
+++ b/components/ComponentPreview.vue
@@ -35,8 +35,6 @@
options: 'space-y-0.5'
} : {}" :class="{ 'canvas-component': isPreview }" />
-
-
Unknown component type: {{ component.type }}
@@ -838,6 +844,21 @@ const componentStyle = computed(() => {
boxSizing: 'border-box'
};
});
+
+// Update dynamic list items
+const updateListItems = (listName, newItems) => {
+ const updatedData = { ...formStore.previewFormData, [listName]: newItems };
+ formStore.updatePreviewFormData(updatedData);
+};
+
+// Update table data for repeating-table component
+const updateTableData = (newData) => {
+ const tableName = props.component.props.name;
+ if (!tableName) return;
+
+ const updatedFormData = { ...formStore.previewFormData, [tableName]: newData };
+ formStore.updatePreviewFormData(updatedFormData);
+};
\ No newline at end of file
diff --git a/components/FormBuilderComponents.vue b/components/FormBuilderComponents.vue
index 209e245..cd53f0f 100644
--- a/components/FormBuilderComponents.vue
+++ b/components/FormBuilderComponents.vue
@@ -504,6 +504,55 @@ const availableComponents = [
importEnabled: false
}
},
+ {
+ type: 'repeating-table',
+ name: 'Data Table',
+ category: 'Advanced',
+ icon: 'material-symbols:table',
+ description: 'Structured table for collecting multiple records',
+ defaultProps: {
+ label: 'Data Records',
+ name: 'data_table',
+ help: 'Add records using the form and view them in a table',
+ buttonText: 'Add Record',
+ editText: 'Edit',
+ deleteText: 'Delete',
+ minRecords: 0,
+ maxRecords: 50,
+ showRowNumbers: true,
+ allowEdit: true,
+ allowDelete: true,
+ confirmDelete: true,
+ enableSearch: false,
+ columns: [
+ {
+ name: 'name',
+ label: 'Name',
+ type: 'text',
+ required: true,
+ placeholder: 'Enter name',
+ validation: 'required'
+ },
+ {
+ name: 'email',
+ label: 'Email',
+ type: 'email',
+ required: true,
+ placeholder: 'Enter email',
+ validation: 'required|email'
+ },
+ {
+ name: 'phone',
+ label: 'Phone',
+ type: 'tel',
+ required: false,
+ placeholder: 'Enter phone',
+ validation: ''
+ }
+ ],
+ defaultData: []
+ }
+ },
{
type: 'otp',
name: 'OTP Input',
diff --git a/components/FormBuilderFieldSettingsModal.vue b/components/FormBuilderFieldSettingsModal.vue
index f029753..864fb1e 100644
--- a/components/FormBuilderFieldSettingsModal.vue
+++ b/components/FormBuilderFieldSettingsModal.vue
@@ -233,18 +233,18 @@
Common patterns:
-
-
-
-
+
@@ -608,6 +608,252 @@
+
+