@quickflo/quickforms-vue 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +157 -0
  2. package/dist/components/AllOfField.vue.d.ts +31 -0
  3. package/dist/components/AllOfField.vue.d.ts.map +1 -0
  4. package/dist/components/ArrayField.vue.d.ts +31 -0
  5. package/dist/components/ArrayField.vue.d.ts.map +1 -0
  6. package/dist/components/BooleanField.vue.d.ts +31 -0
  7. package/dist/components/BooleanField.vue.d.ts.map +1 -0
  8. package/dist/components/DateField.vue.d.ts +31 -0
  9. package/dist/components/DateField.vue.d.ts.map +1 -0
  10. package/dist/components/DynamicForm.vue.d.ts +63 -0
  11. package/dist/components/DynamicForm.vue.d.ts.map +1 -0
  12. package/dist/components/EnumField.vue.d.ts +31 -0
  13. package/dist/components/EnumField.vue.d.ts.map +1 -0
  14. package/dist/components/FieldRenderer.vue.d.ts +39 -0
  15. package/dist/components/FieldRenderer.vue.d.ts.map +1 -0
  16. package/dist/components/NumberField.vue.d.ts +31 -0
  17. package/dist/components/NumberField.vue.d.ts.map +1 -0
  18. package/dist/components/ObjectField.vue.d.ts +31 -0
  19. package/dist/components/ObjectField.vue.d.ts.map +1 -0
  20. package/dist/components/OneOfField.vue.d.ts +31 -0
  21. package/dist/components/OneOfField.vue.d.ts.map +1 -0
  22. package/dist/components/StringField.vue.d.ts +31 -0
  23. package/dist/components/StringField.vue.d.ts.map +1 -0
  24. package/dist/composables/useFormContext.d.ts +11 -0
  25. package/dist/composables/useFormContext.d.ts.map +1 -0
  26. package/dist/composables/useFormField.d.ts +19 -0
  27. package/dist/composables/useFormField.d.ts.map +1 -0
  28. package/dist/composables/utils.d.ts +23 -0
  29. package/dist/composables/utils.d.ts.map +1 -0
  30. package/dist/index.d.ts +20 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +6161 -0
  33. package/dist/registry.d.ts +28 -0
  34. package/dist/registry.d.ts.map +1 -0
  35. package/dist/style.css +1 -0
  36. package/dist/types/index.d.ts +73 -0
  37. package/dist/types/index.d.ts.map +1 -0
  38. package/package.json +51 -0
@@ -0,0 +1,28 @@
1
+ import { Component } from 'vue';
2
+ import { ComponentRegistry } from '@quickflo/quickforms';
3
+
4
+ /**
5
+ * Create a default component registry with all built-in field components
6
+ *
7
+ * Users can call this function, add their own components, and pass the
8
+ * registry to DynamicForm via the options prop.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { createDefaultRegistry, rankWith } from '@quickforms/vue';
13
+ * import { isStringType } from '@quickflo/quickforms';
14
+ * import CustomPhoneInput from './CustomPhoneInput.vue';
15
+ *
16
+ * const registry = createDefaultRegistry();
17
+ *
18
+ * // Register custom component with higher priority
19
+ * registry.register('phone', CustomPhoneInput, (schema) =>
20
+ * rankWith(10, isStringType(schema) && schema.format === 'phone')
21
+ * );
22
+ *
23
+ * // Use in form
24
+ * <DynamicForm :schema="schema" v-model="data" :options="{ registry }" />
25
+ * ```
26
+ */
27
+ export declare function createDefaultRegistry(): ComponentRegistry<Component>;
28
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,iBAAiB,EAA0I,MAAM,sBAAsB,CAAC;AAWjM;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAsDpE"}
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--quickform-color-primary: #3b82f6;--quickform-color-primary-hover: #2563eb;--quickform-color-primary-light: rgba(59, 130, 246, .1);--quickform-color-text: #1f2937;--quickform-color-text-secondary: #6b7280;--quickform-color-text-disabled: #9ca3af;--quickform-color-bg: #ffffff;--quickform-color-bg-disabled: #f3f4f6;--quickform-color-bg-hover: #f9fafb;--quickform-color-border: #d1d5db;--quickform-color-border-hover: #9ca3af;--quickform-color-border-focus: #3b82f6;--quickform-color-error: #dc2626;--quickform-color-error-bg: #fef2f2;--quickform-color-success: #10b981;--quickform-color-warning: #f59e0b;--quickform-spacing-xs: .125rem;--quickform-spacing-sm: .25rem;--quickform-spacing-md: .5rem;--quickform-spacing-lg: 1rem;--quickform-spacing-xl: 1.5rem;--quickform-radius-sm: .25rem;--quickform-radius-md: .375rem;--quickform-radius-lg: .5rem;--quickform-font-family: inherit;--quickform-font-size-base: 1rem;--quickform-font-size-sm: .875rem;--quickform-font-size-xs: .75rem;--quickform-font-weight-normal: 400;--quickform-font-weight-medium: 500;--quickform-font-weight-semibold: 600;--quickform-line-height: 1.5;--quickform-input-padding-x: .5rem;--quickform-input-padding-y: .5rem;--quickform-input-border-width: 1px;--quickform-input-border-style: solid;--quickform-input-font-size: var(--quickform-font-size-base);--quickform-input-line-height: var(--quickform-line-height);--quickform-label-font-size: var(--quickform-font-size-base);--quickform-label-font-weight: var(--quickform-font-weight-medium);--quickform-label-margin-bottom: var(--quickform-spacing-sm);--quickform-label-color: var(--quickform-color-text);--quickform-hint-font-size: var(--quickform-font-size-sm);--quickform-hint-color: var(--quickform-color-text-secondary);--quickform-hint-margin-top: var(--quickform-spacing-sm);--quickform-error-font-size: var(--quickform-font-size-sm);--quickform-error-color: var(--quickform-color-error);--quickform-error-margin-top: var(--quickform-spacing-sm);--quickform-field-margin-bottom: 1rem;--quickform-focus-ring-width: 3px;--quickform-focus-ring-color: var(--quickform-color-primary-light);--quickform-focus-ring-offset: 0;--quickform-shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--quickform-shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--quickform-shadow-focus: 0 0 0 var(--quickform-focus-ring-width) var(--quickform-focus-ring-color);--quickform-transition-fast: .15s;--quickform-transition-base: .2s;--quickform-transition-slow: .3s;--quickform-transition-timing: cubic-bezier(.4, 0, .2, 1);--quickform-checkbox-size: 1.25rem;--quickform-checkbox-margin-right: .5rem;--quickform-object-bg: transparent;--quickform-object-border-color: var(--quickform-color-border);--quickform-object-padding: 1.5rem;--quickform-array-bg: transparent;--quickform-array-item-bg: rgba(0,0,0,.02);--quickform-array-border-color: var(--quickform-color-border);--quickform-oneof-bg: transparent;--quickform-select-padding-right: 2.5rem;--quickform-select-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");--quickform-textarea-min-height: 6rem;--quickform-textarea-resize: vertical;--quickform-password-toggle-size: 2.5rem;--quickform-password-toggle-color: var(--quickform-color-text-secondary);--quickform-password-toggle-hover-color: var(--quickform-color-text);--quickform-submit-bg: var(--quickform-color-primary);--quickform-submit-bg-hover: var(--quickform-color-primary-hover);--quickform-submit-color: #ffffff;--quickform-submit-padding-x: 1.5rem;--quickform-submit-padding-y: .5rem;--quickform-submit-font-weight: var(--quickform-font-weight-medium);--quickform-submit-border-radius: var(--quickform-radius-md);--quickform-required-color: var(--quickform-color-error);--quickform-required-margin-left: var(--quickform-spacing-xs)}[data-v-ad9ab1f4]:root{--quickform-color-primary: #3b82f6;--quickform-color-primary-hover: #2563eb;--quickform-color-primary-light: rgba(59, 130, 246, .1);--quickform-color-text: #1f2937;--quickform-color-text-secondary: #6b7280;--quickform-color-text-disabled: #9ca3af;--quickform-color-bg: #ffffff;--quickform-color-bg-disabled: #f3f4f6;--quickform-color-bg-hover: #f9fafb;--quickform-color-border: #d1d5db;--quickform-color-border-hover: #9ca3af;--quickform-color-border-focus: #3b82f6;--quickform-color-error: #dc2626;--quickform-color-error-bg: #fef2f2;--quickform-color-success: #10b981;--quickform-color-warning: #f59e0b;--quickform-spacing-xs: .125rem;--quickform-spacing-sm: .25rem;--quickform-spacing-md: .5rem;--quickform-spacing-lg: 1rem;--quickform-spacing-xl: 1.5rem;--quickform-radius-sm: .25rem;--quickform-radius-md: .375rem;--quickform-radius-lg: .5rem;--quickform-font-family: inherit;--quickform-font-size-base: 1rem;--quickform-font-size-sm: .875rem;--quickform-font-size-xs: .75rem;--quickform-font-weight-normal: 400;--quickform-font-weight-medium: 500;--quickform-font-weight-semibold: 600;--quickform-line-height: 1.5;--quickform-input-padding-x: .5rem;--quickform-input-padding-y: .5rem;--quickform-input-border-width: 1px;--quickform-input-border-style: solid;--quickform-input-font-size: var(--quickform-font-size-base);--quickform-input-line-height: var(--quickform-line-height);--quickform-label-font-size: var(--quickform-font-size-base);--quickform-label-font-weight: var(--quickform-font-weight-medium);--quickform-label-margin-bottom: var(--quickform-spacing-sm);--quickform-label-color: var(--quickform-color-text);--quickform-hint-font-size: var(--quickform-font-size-sm);--quickform-hint-color: var(--quickform-color-text-secondary);--quickform-hint-margin-top: var(--quickform-spacing-sm);--quickform-error-font-size: var(--quickform-font-size-sm);--quickform-error-color: var(--quickform-color-error);--quickform-error-margin-top: var(--quickform-spacing-sm);--quickform-field-margin-bottom: 1rem;--quickform-focus-ring-width: 3px;--quickform-focus-ring-color: var(--quickform-color-primary-light);--quickform-focus-ring-offset: 0;--quickform-shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--quickform-shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--quickform-shadow-focus: 0 0 0 var(--quickform-focus-ring-width) var(--quickform-focus-ring-color);--quickform-transition-fast: .15s;--quickform-transition-base: .2s;--quickform-transition-slow: .3s;--quickform-transition-timing: cubic-bezier(.4, 0, .2, 1);--quickform-checkbox-size: 1.25rem;--quickform-checkbox-margin-right: .5rem;--quickform-object-bg: transparent;--quickform-object-border-color: var(--quickform-color-border);--quickform-object-padding: 1.5rem;--quickform-array-bg: transparent;--quickform-array-item-bg: rgba(0,0,0,.02);--quickform-array-border-color: var(--quickform-color-border);--quickform-oneof-bg: transparent;--quickform-select-padding-right: 2.5rem;--quickform-select-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");--quickform-textarea-min-height: 6rem;--quickform-textarea-resize: vertical;--quickform-password-toggle-size: 2.5rem;--quickform-password-toggle-color: var(--quickform-color-text-secondary);--quickform-password-toggle-hover-color: var(--quickform-color-text);--quickform-submit-bg: var(--quickform-color-primary);--quickform-submit-bg-hover: var(--quickform-color-primary-hover);--quickform-submit-color: #ffffff;--quickform-submit-padding-x: 1.5rem;--quickform-submit-padding-y: .5rem;--quickform-submit-font-weight: var(--quickform-font-weight-medium);--quickform-submit-border-radius: var(--quickform-radius-md);--quickform-required-color: var(--quickform-color-error);--quickform-required-margin-left: var(--quickform-spacing-xs)}.quickform-field[data-v-ad9ab1f4]{margin-bottom:var(--quickform-field-margin-bottom)}.quickform-label[data-v-ad9ab1f4]{display:block;margin-bottom:var(--quickform-label-margin-bottom);font-weight:var(--quickform-label-font-weight);font-size:var(--quickform-label-font-size);color:var(--quickform-label-color);font-family:var(--quickform-font-family)}.quickform-required[data-v-ad9ab1f4]{color:var(--quickform-required-color);margin-left:var(--quickform-required-margin-left)}.quickform-input[data-v-ad9ab1f4],.quickform-textarea[data-v-ad9ab1f4]{width:100%;padding:var(--quickform-input-padding-y) var(--quickform-input-padding-x);border:var(--quickform-input-border-width) var(--quickform-input-border-style) var(--quickform-color-border);border-radius:var(--quickform-radius-md);font-size:var(--quickform-input-font-size);font-family:var(--quickform-font-family);line-height:var(--quickform-input-line-height);background-color:var(--quickform-color-bg);color:var(--quickform-color-text);box-sizing:border-box;transition:border-color var(--quickform-transition-base) var(--quickform-transition-timing),box-shadow var(--quickform-transition-base) var(--quickform-transition-timing)}.quickform-input[data-v-ad9ab1f4]:focus,.quickform-textarea[data-v-ad9ab1f4]:focus{outline:none;border-color:var(--quickform-color-border-focus);box-shadow:var(--quickform-shadow-focus)}.quickform-input[aria-invalid=true][data-v-ad9ab1f4],.quickform-textarea[aria-invalid=true][data-v-ad9ab1f4]{border-color:var(--quickform-color-error);background-color:var(--quickform-color-error-bg)}.quickform-textarea[data-v-ad9ab1f4]{min-height:var(--quickform-textarea-min-height);resize:var(--quickform-textarea-resize)}.quickform-hint[data-v-ad9ab1f4]{margin-top:var(--quickform-hint-margin-top);font-size:var(--quickform-hint-font-size);color:var(--quickform-hint-color)}.quickform-error[data-v-ad9ab1f4]{margin-top:var(--quickform-error-margin-top);font-size:var(--quickform-error-font-size);color:var(--quickform-error-color);font-weight:var(--quickform-font-weight-medium)}.quickform-input[data-v-ad9ab1f4]:disabled,.quickform-textarea[data-v-ad9ab1f4]:disabled{background-color:var(--quickform-color-bg-disabled);color:var(--quickform-color-text-disabled);cursor:not-allowed;opacity:.6}.quickform-input-wrapper[data-v-ad9ab1f4]{position:relative;display:flex;align-items:center}.quickform-input-with-icon[data-v-ad9ab1f4]{padding-right:var(--quickform-password-toggle-size)}.quickform-password-toggle[data-v-ad9ab1f4]{position:absolute;right:var(--quickform-spacing-md);background:none;border:none;padding:var(--quickform-spacing-sm);cursor:pointer;color:var(--quickform-password-toggle-color);display:flex;align-items:center;justify-content:center;transition:color var(--quickform-transition-base) var(--quickform-transition-timing);border-radius:var(--quickform-radius-sm)}.quickform-password-toggle[data-v-ad9ab1f4]:hover{color:var(--quickform-password-toggle-hover-color)}.quickform-password-toggle[data-v-ad9ab1f4]:focus{outline:2px solid var(--quickform-color-border-focus);outline-offset:2px}.quickform-field[data-v-7def4a8b]{margin-bottom:1rem}.quickform-label[data-v-7def4a8b]{display:block;margin-bottom:.25rem;font-weight:500}.quickform-required[data-v-7def4a8b]{color:#dc2626;margin-left:.125rem}.quickform-input[data-v-7def4a8b]{width:100%;padding:.5rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:1rem}.quickform-input[data-v-7def4a8b]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.quickform-input[aria-invalid=true][data-v-7def4a8b]{border-color:#dc2626}.quickform-hint[data-v-7def4a8b]{margin-top:.25rem;font-size:.875rem;color:#6b7280}.quickform-error[data-v-7def4a8b]{margin-top:.25rem;font-size:.875rem;color:#dc2626}.quickform-input[data-v-7def4a8b]:disabled{background-color:#f3f4f6;cursor:not-allowed}.quickform-field[data-v-1ff012c7]{margin-bottom:1rem}.quickform-checkbox-label[data-v-1ff012c7]{display:flex;align-items:flex-start;cursor:pointer;-webkit-user-select:none;user-select:none}.quickform-checkbox[data-v-1ff012c7]{width:1.25rem;height:1.25rem;margin-right:.5rem;margin-top:.125rem;cursor:pointer;flex-shrink:0}.quickform-checkbox[data-v-1ff012c7]:disabled{cursor:not-allowed;opacity:.5}.quickform-checkbox-text[data-v-1ff012c7]{font-weight:500}.quickform-required[data-v-1ff012c7]{color:#dc2626;margin-left:.125rem}.quickform-hint[data-v-1ff012c7]{margin-top:.25rem;margin-left:1.75rem;font-size:.875rem;color:#6b7280}.quickform-error[data-v-1ff012c7]{margin-top:.25rem;margin-left:1.75rem;font-size:.875rem;color:#dc2626}.quickform-field[data-v-666cc49b]{margin-bottom:1rem}.quickform-label[data-v-666cc49b]{display:block;margin-bottom:.25rem;font-weight:500}.quickform-required[data-v-666cc49b]{color:#dc2626;margin-left:.125rem}.quickform-select[data-v-666cc49b]{width:100%;padding:.5rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:1rem;background-color:#fff;cursor:pointer}.quickform-select[data-v-666cc49b]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.quickform-select[aria-invalid=true][data-v-666cc49b]{border-color:#dc2626}.quickform-hint[data-v-666cc49b]{margin-top:.25rem;font-size:.875rem;color:#6b7280}.quickform-error[data-v-666cc49b]{margin-top:.25rem;font-size:.875rem;color:#dc2626}.quickform-select[data-v-666cc49b]:disabled{background-color:#f3f4f6;cursor:not-allowed}.quickform-field[data-v-e0ddab64]{margin-bottom:1rem}.quickform-label[data-v-e0ddab64]{display:block;margin-bottom:.25rem;font-weight:500}.quickform-required[data-v-e0ddab64]{color:#dc2626;margin-left:.125rem}.quickform-input[data-v-e0ddab64]{width:100%;padding:.5rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:1rem}.quickform-input[data-v-e0ddab64]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.quickform-input[aria-invalid=true][data-v-e0ddab64]{border-color:#dc2626}.quickform-hint[data-v-e0ddab64]{margin-top:.25rem;font-size:.875rem;color:#6b7280}.quickform-error[data-v-e0ddab64]{margin-top:.25rem;font-size:.875rem;color:#dc2626}.quickform-input[data-v-e0ddab64]:disabled{background-color:#f3f4f6;cursor:not-allowed}.quickform-no-renderer[data-v-abf28e2e]{padding:1rem;background-color:#fef2f2;border:1px solid #fecaca;border-radius:.375rem;color:#991b1b}.quickform-no-renderer pre[data-v-abf28e2e]{margin-top:.5rem;padding:.5rem;background-color:#fff;border-radius:.25rem;overflow-x:auto;font-size:.75rem}.quickform-field[data-v-8012fc15]{margin-bottom:1rem}.quickform-fieldset[data-v-8012fc15]{border:1px solid var(--quickform-color-border);border-radius:var(--quickform-radius-md);padding:var(--quickform-spacing-lg);margin:0;background-color:var(--quickform-object-bg, transparent)}.quickform-legend[data-v-8012fc15]{font-weight:var(--quickform-label-font-weight);font-size:var(--quickform-label-font-size);color:var(--quickform-label-color);padding:0 var(--quickform-spacing-sm)}.quickform-object-content[data-v-8012fc15]{display:flex;flex-direction:column;gap:var(--quickform-spacing-md);margin-top:var(--quickform-spacing-md)}.quickform-object-hint[data-v-8012fc15]{margin-bottom:var(--quickform-spacing-md);margin-top:0}.quickform-required[data-v-8012fc15]{color:var(--quickform-required-color);margin-left:var(--quickform-required-margin-left)}.quickform-hint[data-v-8012fc15]{font-size:var(--quickform-hint-font-size);color:var(--quickform-hint-color)}.quickform-error[data-v-8012fc15]{margin-top:var(--quickform-spacing-sm);font-size:var(--quickform-error-font-size);color:var(--quickform-error-color)}.quickform-field[data-v-a0783890]{margin-bottom:1rem}.quickform-fieldset[data-v-a0783890]{border:1px solid var(--quickform-color-border);border-radius:var(--quickform-radius-md);padding:var(--quickform-spacing-lg);margin:0;background-color:var(--quickform-array-bg, transparent)}.quickform-legend[data-v-a0783890]{font-weight:var(--quickform-label-font-weight);font-size:var(--quickform-label-font-size);color:var(--quickform-label-color);padding:0 var(--quickform-spacing-sm)}.quickform-array-hint[data-v-a0783890]{margin-bottom:var(--quickform-spacing-md);margin-top:0}.quickform-array-items[data-v-a0783890]{display:flex;flex-direction:column;gap:var(--quickform-spacing-md)}.quickform-array-item[data-v-a0783890]{display:flex;gap:var(--quickform-spacing-md);align-items:flex-start;padding:var(--quickform-spacing-md);background-color:var(--quickform-array-item-bg, rgba(0, 0, 0, .02));border:1px solid var(--quickform-color-border);border-radius:var(--quickform-radius-sm)}.quickform-array-item-content[data-v-a0783890]{flex:1}.quickform-array-item-actions[data-v-a0783890]{display:flex;flex-direction:column;gap:var(--quickform-spacing-xs)}.quickform-array-empty[data-v-a0783890]{padding:var(--quickform-spacing-md);text-align:center;color:var(--quickform-color-text-secondary);font-style:italic;background-color:var(--quickform-array-item-bg, rgba(0, 0, 0, .02));border-radius:var(--quickform-radius-sm)}.quickform-array-footer[data-v-a0783890]{margin-top:var(--quickform-spacing-md)}.quickform-btn[data-v-a0783890]{padding:var(--quickform-spacing-sm) var(--quickform-spacing-md);border-radius:var(--quickform-radius-sm);border:1px solid var(--quickform-color-border);background-color:#fff;cursor:pointer;font-size:var(--quickform-font-size-sm);transition:all .2s}.quickform-btn[data-v-a0783890]:hover:not(:disabled){background-color:var(--quickform-color-bg-hover);border-color:var(--quickform-color-border-focus)}.quickform-btn[data-v-a0783890]:disabled{opacity:.5;cursor:not-allowed}.quickform-btn-icon[data-v-a0783890]{width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border:1px solid var(--quickform-color-border);background-color:#fff;border-radius:var(--quickform-radius-sm);cursor:pointer;transition:all .2s}.quickform-btn-icon[data-v-a0783890]:hover:not(:disabled){border-color:var(--quickform-color-border-focus);color:var(--quickform-color-primary)}.quickform-btn-danger[data-v-a0783890]:hover:not(:disabled){border-color:var(--quickform-color-error);color:var(--quickform-color-error);background-color:var(--quickform-color-error-bg)}.quickform-required[data-v-a0783890]{color:var(--quickform-required-color);margin-left:var(--quickform-required-margin-left)}.quickform-hint[data-v-a0783890]{font-size:var(--quickform-hint-font-size);color:var(--quickform-hint-color)}.quickform-error[data-v-a0783890]{margin-top:var(--quickform-spacing-sm);font-size:var(--quickform-error-font-size);color:var(--quickform-error-color)}.quickform-field[data-v-dab625e6]{margin-bottom:1rem}.quickform-fieldset[data-v-dab625e6]{border:1px solid var(--quickform-color-border);border-radius:var(--quickform-radius-md);padding:var(--quickform-spacing-lg);margin:0;background-color:var(--quickform-oneof-bg, transparent)}.quickform-legend[data-v-dab625e6]{font-weight:var(--quickform-label-font-weight);font-size:var(--quickform-label-font-size);color:var(--quickform-label-color);padding:0 var(--quickform-spacing-sm)}.quickform-oneof-hint[data-v-dab625e6]{margin-bottom:var(--quickform-spacing-md);margin-top:0}.quickform-oneof-selector[data-v-dab625e6]{margin-bottom:var(--quickform-spacing-md)}.quickform-select[data-v-dab625e6]{width:100%;padding:.5rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:1rem;background-color:#fff;cursor:pointer}.quickform-oneof-content[data-v-dab625e6]{margin-top:var(--quickform-spacing-md);border-top:1px dashed var(--quickform-color-border);padding-top:var(--quickform-spacing-md)}.quickform-required[data-v-dab625e6]{color:var(--quickform-required-color);margin-left:var(--quickform-required-margin-left)}.quickform-hint[data-v-dab625e6]{font-size:var(--quickform-hint-font-size);color:var(--quickform-hint-color)}.quickform-error[data-v-dab625e6]{margin-top:var(--quickform-spacing-sm);font-size:var(--quickform-error-font-size);color:var(--quickform-error-color)}.quickform-field[data-v-094fd67d]{margin-bottom:1rem}[data-v-cb85e2c1]:root{--quickform-color-primary: #3b82f6;--quickform-color-primary-hover: #2563eb;--quickform-color-primary-light: rgba(59, 130, 246, .1);--quickform-color-text: #1f2937;--quickform-color-text-secondary: #6b7280;--quickform-color-text-disabled: #9ca3af;--quickform-color-bg: #ffffff;--quickform-color-bg-disabled: #f3f4f6;--quickform-color-bg-hover: #f9fafb;--quickform-color-border: #d1d5db;--quickform-color-border-hover: #9ca3af;--quickform-color-border-focus: #3b82f6;--quickform-color-error: #dc2626;--quickform-color-error-bg: #fef2f2;--quickform-color-success: #10b981;--quickform-color-warning: #f59e0b;--quickform-spacing-xs: .125rem;--quickform-spacing-sm: .25rem;--quickform-spacing-md: .5rem;--quickform-spacing-lg: 1rem;--quickform-spacing-xl: 1.5rem;--quickform-radius-sm: .25rem;--quickform-radius-md: .375rem;--quickform-radius-lg: .5rem;--quickform-font-family: inherit;--quickform-font-size-base: 1rem;--quickform-font-size-sm: .875rem;--quickform-font-size-xs: .75rem;--quickform-font-weight-normal: 400;--quickform-font-weight-medium: 500;--quickform-font-weight-semibold: 600;--quickform-line-height: 1.5;--quickform-input-padding-x: .5rem;--quickform-input-padding-y: .5rem;--quickform-input-border-width: 1px;--quickform-input-border-style: solid;--quickform-input-font-size: var(--quickform-font-size-base);--quickform-input-line-height: var(--quickform-line-height);--quickform-label-font-size: var(--quickform-font-size-base);--quickform-label-font-weight: var(--quickform-font-weight-medium);--quickform-label-margin-bottom: var(--quickform-spacing-sm);--quickform-label-color: var(--quickform-color-text);--quickform-hint-font-size: var(--quickform-font-size-sm);--quickform-hint-color: var(--quickform-color-text-secondary);--quickform-hint-margin-top: var(--quickform-spacing-sm);--quickform-error-font-size: var(--quickform-font-size-sm);--quickform-error-color: var(--quickform-color-error);--quickform-error-margin-top: var(--quickform-spacing-sm);--quickform-field-margin-bottom: 1rem;--quickform-focus-ring-width: 3px;--quickform-focus-ring-color: var(--quickform-color-primary-light);--quickform-focus-ring-offset: 0;--quickform-shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--quickform-shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--quickform-shadow-focus: 0 0 0 var(--quickform-focus-ring-width) var(--quickform-focus-ring-color);--quickform-transition-fast: .15s;--quickform-transition-base: .2s;--quickform-transition-slow: .3s;--quickform-transition-timing: cubic-bezier(.4, 0, .2, 1);--quickform-checkbox-size: 1.25rem;--quickform-checkbox-margin-right: .5rem;--quickform-object-bg: transparent;--quickform-object-border-color: var(--quickform-color-border);--quickform-object-padding: 1.5rem;--quickform-array-bg: transparent;--quickform-array-item-bg: rgba(0,0,0,.02);--quickform-array-border-color: var(--quickform-color-border);--quickform-oneof-bg: transparent;--quickform-select-padding-right: 2.5rem;--quickform-select-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");--quickform-textarea-min-height: 6rem;--quickform-textarea-resize: vertical;--quickform-password-toggle-size: 2.5rem;--quickform-password-toggle-color: var(--quickform-color-text-secondary);--quickform-password-toggle-hover-color: var(--quickform-color-text);--quickform-submit-bg: var(--quickform-color-primary);--quickform-submit-bg-hover: var(--quickform-color-primary-hover);--quickform-submit-color: #ffffff;--quickform-submit-padding-x: 1.5rem;--quickform-submit-padding-y: .5rem;--quickform-submit-font-weight: var(--quickform-font-weight-medium);--quickform-submit-border-radius: var(--quickform-radius-md);--quickform-required-color: var(--quickform-color-error);--quickform-required-margin-left: var(--quickform-spacing-xs)}.quickform[data-v-cb85e2c1]{max-width:100%}.quickform-actions[data-v-cb85e2c1]{margin-top:var(--quickform-spacing-xl);display:flex;gap:var(--quickform-spacing-md)}.quickform-submit[data-v-cb85e2c1]{padding:var(--quickform-submit-padding-y) var(--quickform-submit-padding-x);background-color:var(--quickform-submit-bg);color:var(--quickform-submit-color);border:none;border-radius:var(--quickform-submit-border-radius);font-size:var(--quickform-font-size-base);font-weight:var(--quickform-submit-font-weight);font-family:var(--quickform-font-family);cursor:pointer;transition:background-color var(--quickform-transition-base) var(--quickform-transition-timing),transform var(--quickform-transition-fast) var(--quickform-transition-timing)}.quickform-submit[data-v-cb85e2c1]:hover:not(:disabled){background-color:var(--quickform-submit-bg-hover)}.quickform-submit[data-v-cb85e2c1]:disabled{background-color:var(--quickform-color-text-secondary);cursor:not-allowed;opacity:.5}
@@ -0,0 +1,73 @@
1
+ import { Component } from 'vue';
2
+ import { JSONSchema, UISchemaElement, TesterFunction, ComponentRegistry } from '@quickflo/quickforms';
3
+
4
+ /**
5
+ * Vue component with tester function
6
+ */
7
+ export interface VueFieldComponent {
8
+ component: Component;
9
+ tester: TesterFunction;
10
+ }
11
+ /**
12
+ * Props passed to field components
13
+ */
14
+ export interface FieldProps {
15
+ schema: JSONSchema;
16
+ uischema?: UISchemaElement;
17
+ path: string;
18
+ modelValue?: any;
19
+ disabled?: boolean;
20
+ readonly?: boolean;
21
+ label?: string;
22
+ }
23
+ /**
24
+ * Validation result - can be boolean, error string, or object
25
+ */
26
+ export type ValidationResult = boolean | string | {
27
+ valid: boolean;
28
+ message?: string;
29
+ };
30
+ /**
31
+ * Custom validator function - supports both sync and async
32
+ */
33
+ export type ValidatorFunction = (value: any, allValues: Record<string, any>, context?: Record<string, any>) => ValidationResult | Promise<ValidationResult>;
34
+ /**
35
+ * Options for form configuration
36
+ */
37
+ export interface FormOptions {
38
+ readonly?: boolean;
39
+ disabled?: boolean;
40
+ validateOnMount?: boolean;
41
+ validateOnChange?: boolean;
42
+ /** Populate form with default values from schema. Defaults to true. */
43
+ useDefaults?: boolean;
44
+ /** Custom component registry. If not provided, default registry will be used. */
45
+ registry?: ComponentRegistry<Component>;
46
+ /** Application context (user, roles, etc) for field visibility logic */
47
+ context?: Record<string, any>;
48
+ /** Validation mode. Defaults to 'ValidateAndShow' */
49
+ validationMode?: 'ValidateAndShow' | 'ValidateAndHide' | 'NoValidation';
50
+ /** Custom error messages by path and rule type */
51
+ errorMessages?: Record<string, Record<string, string>>;
52
+ /** Custom field validators (sync or async) */
53
+ validators?: Record<string, ValidatorFunction>;
54
+ /** Debounce delay for async validators in milliseconds */
55
+ validatorDebounce?: number | Record<string, number>;
56
+ }
57
+ /**
58
+ * Form context provided to child components
59
+ */
60
+ export interface FormContext {
61
+ readonly: boolean;
62
+ disabled: boolean;
63
+ schema: JSONSchema;
64
+ rootPath: string;
65
+ registry: ComponentRegistry<Component>;
66
+ context: Record<string, any>;
67
+ validationMode: 'ValidateAndShow' | 'ValidateAndHide' | 'NoValidation';
68
+ errorMessages?: Record<string, Record<string, string>>;
69
+ validators?: Record<string, ValidatorFunction>;
70
+ validatorDebounce?: number | Record<string, number>;
71
+ formValues: () => Record<string, any>;
72
+ }
73
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE3G;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC1B,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACxC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,qDAAqD;IACrD,cAAc,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,CAAC;IACxE,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,cAAc,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACvC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@quickflo/quickforms-vue",
3
+ "version": "0.1.0",
4
+ "description": "Vue 3 bindings for QuickForms - JSON Schema form generator",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "vite build",
20
+ "dev": "vite",
21
+ "dev:build": "vite build --watch",
22
+ "test": "vitest",
23
+ "typecheck": "tsc --noEmit"
24
+ },
25
+ "keywords": [
26
+ "vue",
27
+ "vue3",
28
+ "jsonschema",
29
+ "forms",
30
+ "validation",
31
+ "veevalidate"
32
+ ],
33
+ "author": "",
34
+ "license": "MIT",
35
+ "peerDependencies": {
36
+ "vue": "^3.3.0"
37
+ },
38
+ "dependencies": {
39
+ "@quickflo/quickforms": "workspace:*",
40
+ "vee-validate": "^4.12.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^20.0.0",
44
+ "@vitejs/plugin-vue": "^5.0.0",
45
+ "typescript": "^5.3.0",
46
+ "vite": "^5.0.0",
47
+ "vite-plugin-dts": "^3.0.0",
48
+ "vitest": "^1.0.0",
49
+ "vue": "^3.4.0"
50
+ }
51
+ }