form-builder-pro 0.0.1 → 0.0.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/README.md CHANGED
@@ -20,74 +20,52 @@ npm install form-builder-pro
20
20
 
21
21
  ## Usage
22
22
 
23
- ### Form Builder
23
+ ### Vanilla JS / Angular / Vue
24
24
 
25
- ```tsx
26
- import { FormBuilder } from 'form-builder-pro';
27
- import 'form-builder-pro/dist/index.css';
28
-
29
- function App() {
30
- return (
31
- <div className="h-screen">
32
- <FormBuilder />
33
- </div>
34
- );
35
- }
36
- ```
25
+ This package is framework-agnostic. You can use it anywhere.
37
26
 
38
- ### Form Renderer
27
+ 1. **Import the classes**:
39
28
 
40
- ```tsx
41
- import { FormRenderer, FormSchema } from 'form-builder-pro';
29
+ ```typescript
30
+ import { FormBuilder, FormRenderer } from 'form-builder-pro';
42
31
  import 'form-builder-pro/dist/index.css';
43
-
44
- const schema: FormSchema = {
45
- // ... your schema
46
- };
47
-
48
- function App() {
49
- const handleSubmit = (data: any) => {
50
- console.log(data);
51
- };
52
-
53
- return (
54
- <FormRenderer
55
- schema={schema}
56
- onSubmit={handleSubmit}
57
- />
58
- );
59
- }
60
32
  ```
61
33
 
62
- ### Angular / Vanilla JS (Web Components)
34
+ 2. **Initialize Builder**:
63
35
 
64
- This package exports standard Web Components that can be used in any framework.
36
+ ```typescript
37
+ const container = document.getElementById('builder-container');
38
+ const builder = new FormBuilder(container);
65
39
 
66
- 1. **Import the registration function** in your app's entry point (e.g., `main.ts` in Angular):
40
+ // To destroy
41
+ // builder.destroy();
42
+ ```
67
43
 
68
- ```typescript
69
- import { registerWebComponents } from 'form-builder-pro';
70
- import 'form-builder-pro/dist/index.css';
44
+ 3. **Initialize Renderer**:
71
45
 
72
- registerWebComponents();
46
+ ```typescript
47
+ const container = document.getElementById('form-container');
48
+ const renderer = new FormRenderer(container, schema, (data) => {
49
+ console.log('Form submitted:', data);
50
+ });
73
51
  ```
74
52
 
75
- 2. **Use in HTML/Template**:
53
+ ### Angular Example
76
54
 
77
- ```html
78
- <!-- Builder -->
79
- <form-builder-pro></form-builder-pro>
55
+ In your component:
80
56
 
81
- <!-- Renderer -->
82
- <form-renderer-pro id="my-renderer"></form-renderer-pro>
83
- ```
57
+ ```typescript
58
+ import { Component, ElementRef, ViewChild, AfterViewInit } from '@angular/core';
59
+ import { FormBuilder } from 'form-builder-pro';
84
60
 
85
- 3. **Pass complex data via JavaScript**:
61
+ @Component({ ... })
62
+ export class MyComponent implements AfterViewInit {
63
+ @ViewChild('builderContainer') container: ElementRef;
86
64
 
87
- ```javascript
88
- const renderer = document.getElementById('my-renderer');
89
- renderer.schema = { ... }; // Pass your schema object
90
- renderer.onSubmit = (data) => console.log(data);
65
+ ngAfterViewInit() {
66
+ new FormBuilder(this.container.nativeElement);
67
+ }
68
+ }
91
69
  ```
92
70
 
93
71
  ## Development
package/dist/index.css CHANGED
@@ -389,18 +389,42 @@ body {
389
389
  max-width: 1536px;
390
390
  }
391
391
  }
392
+ .form-builder-grid .col-span-1 {
393
+ grid-column: span 1 / span 1 !important;
394
+ }
395
+ .form-builder-grid .col-span-2 {
396
+ grid-column: span 2 / span 2 !important;
397
+ }
398
+ .form-builder-grid .col-span-4 {
399
+ grid-column: span 4 / span 4 !important;
400
+ }
401
+ .form-builder-field-wrapper {
402
+ position: relative;
403
+ border-radius: 0.5rem;
404
+ border-width: 2px;
405
+ transition: all 0.2s;
406
+ }
407
+ .form-builder-field-wrapper.selected {
408
+ border-color: rgb(59 130 246) !important;
409
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.2) !important;
410
+ }
411
+ .form-builder-field-wrapper:hover:not(.selected) {
412
+ border-color: rgb(209 213 219) !important;
413
+ }
414
+ .form-builder-grid {
415
+ display: grid !important;
416
+ grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
417
+ gap: 1rem !important;
418
+ }
392
419
  .pointer-events-none {
393
420
  pointer-events: none;
394
421
  }
395
- .visible {
396
- visibility: visible;
422
+ .static {
423
+ position: static;
397
424
  }
398
425
  .absolute {
399
426
  position: absolute;
400
427
  }
401
- .relative {
402
- position: relative;
403
- }
404
428
  .left-2 {
405
429
  left: 0.5rem;
406
430
  }
@@ -410,8 +434,11 @@ body {
410
434
  .top-2 {
411
435
  top: 0.5rem;
412
436
  }
413
- .z-50 {
414
- z-index: 50;
437
+ .col-span-1 {
438
+ grid-column: span 1 / span 1;
439
+ }
440
+ .col-span-2 {
441
+ grid-column: span 2 / span 2;
415
442
  }
416
443
  .col-span-4 {
417
444
  grid-column: span 4 / span 4;
@@ -438,8 +465,8 @@ body {
438
465
  .ml-1 {
439
466
  margin-left: 0.25rem;
440
467
  }
441
- .mr-2 {
442
- margin-right: 0.5rem;
468
+ .ml-2 {
469
+ margin-left: 0.5rem;
443
470
  }
444
471
  .mr-3 {
445
472
  margin-right: 0.75rem;
@@ -456,15 +483,9 @@ body {
456
483
  .block {
457
484
  display: block;
458
485
  }
459
- .inline {
460
- display: inline;
461
- }
462
486
  .flex {
463
487
  display: flex;
464
488
  }
465
- .inline-flex {
466
- display: inline-flex;
467
- }
468
489
  .grid {
469
490
  display: grid;
470
491
  }
@@ -483,9 +504,6 @@ body {
483
504
  .h-5 {
484
505
  height: 1.25rem;
485
506
  }
486
- .h-\[24px\] {
487
- height: 24px;
488
- }
489
507
  .h-full {
490
508
  height: 100%;
491
509
  }
@@ -504,9 +522,6 @@ body {
504
522
  .w-4 {
505
523
  width: 1rem;
506
524
  }
507
- .w-48 {
508
- width: 12rem;
509
- }
510
525
  .w-5 {
511
526
  width: 1.25rem;
512
527
  }
@@ -516,9 +531,6 @@ body {
516
531
  .w-80 {
517
532
  width: 20rem;
518
533
  }
519
- .w-\[44px\] {
520
- width: 44px;
521
- }
522
534
  .w-full {
523
535
  width: 100%;
524
536
  }
@@ -528,29 +540,12 @@ body {
528
540
  .flex-1 {
529
541
  flex: 1 1 0%;
530
542
  }
531
- .shrink-0 {
532
- flex-shrink: 0;
533
- }
534
- .translate-x-0 {
535
- --tw-translate-x: 0px;
536
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
537
- }
538
- .translate-x-5 {
539
- --tw-translate-x: 1.25rem;
540
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
541
- }
542
- .transform {
543
- transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
544
- }
545
543
  .cursor-move {
546
544
  cursor: move;
547
545
  }
548
546
  .cursor-pointer {
549
547
  cursor: pointer;
550
548
  }
551
- .grid-cols-4 {
552
- grid-template-columns: repeat(4, minmax(0, 1fr));
553
- }
554
549
  .flex-col {
555
550
  flex-direction: column;
556
551
  }
@@ -563,12 +558,6 @@ body {
563
558
  .justify-between {
564
559
  justify-content: space-between;
565
560
  }
566
- .gap-2 {
567
- gap: 0.5rem;
568
- }
569
- .gap-4 {
570
- gap: 1rem;
571
- }
572
561
  .space-x-2 > :not([hidden]) ~ :not([hidden]) {
573
562
  --tw-space-x-reverse: 0;
574
563
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
@@ -599,18 +588,12 @@ body {
599
588
  margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
600
589
  margin-bottom: calc(2rem * var(--tw-space-y-reverse));
601
590
  }
602
- .overflow-auto {
603
- overflow: auto;
604
- }
605
591
  .overflow-hidden {
606
592
  overflow: hidden;
607
593
  }
608
594
  .overflow-y-auto {
609
595
  overflow-y: auto;
610
596
  }
611
- .whitespace-pre-wrap {
612
- white-space: pre-wrap;
613
- }
614
597
  .rounded {
615
598
  border-radius: 0.25rem;
616
599
  }
@@ -664,19 +647,12 @@ body {
664
647
  --tw-border-opacity: 1;
665
648
  border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
666
649
  }
667
- .border-gray-700 {
668
- --tw-border-opacity: 1;
669
- border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
670
- }
671
650
  .border-input {
672
651
  border-color: hsl(var(--input));
673
652
  }
674
653
  .border-primary {
675
654
  border-color: hsl(var(--primary));
676
655
  }
677
- .border-transparent {
678
- border-color: transparent;
679
- }
680
656
  .bg-background {
681
657
  background-color: hsl(var(--background));
682
658
  }
@@ -696,16 +672,6 @@ body {
696
672
  --tw-bg-opacity: 1;
697
673
  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
698
674
  }
699
- .bg-gray-900 {
700
- --tw-bg-opacity: 1;
701
- background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
702
- }
703
- .bg-input {
704
- background-color: hsl(var(--input));
705
- }
706
- .bg-primary {
707
- background-color: hsl(var(--primary));
708
- }
709
675
  .bg-transparent {
710
676
  background-color: transparent;
711
677
  }
@@ -746,10 +712,6 @@ body {
746
712
  .p-8 {
747
713
  padding: 2rem;
748
714
  }
749
- .px-2 {
750
- padding-left: 0.5rem;
751
- padding-right: 0.5rem;
752
- }
753
715
  .px-3 {
754
716
  padding-left: 0.75rem;
755
717
  padding-right: 0.75rem;
@@ -762,10 +724,6 @@ body {
762
724
  padding-left: 1.5rem;
763
725
  padding-right: 1.5rem;
764
726
  }
765
- .py-1 {
766
- padding-top: 0.25rem;
767
- padding-bottom: 0.25rem;
768
- }
769
727
  .py-2 {
770
728
  padding-top: 0.5rem;
771
729
  padding-bottom: 0.5rem;
@@ -774,10 +732,6 @@ body {
774
732
  padding-top: 1rem;
775
733
  padding-bottom: 1rem;
776
734
  }
777
- .py-8 {
778
- padding-top: 2rem;
779
- padding-bottom: 2rem;
780
- }
781
735
  .pb-2 {
782
736
  padding-bottom: 0.5rem;
783
737
  }
@@ -787,17 +741,6 @@ body {
787
741
  .text-center {
788
742
  text-align: center;
789
743
  }
790
- .font-mono {
791
- font-family:
792
- ui-monospace,
793
- SFMono-Regular,
794
- Menlo,
795
- Monaco,
796
- Consolas,
797
- "Liberation Mono",
798
- "Courier New",
799
- monospace;
800
- }
801
744
  .text-2xl {
802
745
  font-size: 1.5rem;
803
746
  line-height: 2rem;
@@ -844,13 +787,6 @@ body {
844
787
  --tw-text-opacity: 1;
845
788
  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
846
789
  }
847
- .text-destructive {
848
- color: hsl(var(--destructive));
849
- }
850
- .text-gray-300 {
851
- --tw-text-opacity: 1;
852
- color: rgb(209 213 219 / var(--tw-text-opacity, 1));
853
- }
854
790
  .text-gray-400 {
855
791
  --tw-text-opacity: 1;
856
792
  color: rgb(156 163 175 / var(--tw-text-opacity, 1));
@@ -902,20 +838,6 @@ body {
902
838
  .opacity-100 {
903
839
  opacity: 1;
904
840
  }
905
- .opacity-50 {
906
- opacity: 0.5;
907
- }
908
- .opacity-80 {
909
- opacity: 0.8;
910
- }
911
- .shadow-lg {
912
- --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
913
- --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
914
- box-shadow:
915
- var(--tw-ring-offset-shadow, 0 0 #0000),
916
- var(--tw-ring-shadow, 0 0 #0000),
917
- var(--tw-shadow);
918
- }
919
841
  .shadow-sm {
920
842
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
921
843
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
@@ -924,48 +846,12 @@ body {
924
846
  var(--tw-ring-shadow, 0 0 #0000),
925
847
  var(--tw-shadow);
926
848
  }
927
- .ring-0 {
928
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
929
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
930
- box-shadow:
931
- var(--tw-ring-offset-shadow),
932
- var(--tw-ring-shadow),
933
- var(--tw-shadow, 0 0 #0000);
934
- }
935
- .ring-2 {
936
- --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
937
- --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
938
- box-shadow:
939
- var(--tw-ring-offset-shadow),
940
- var(--tw-ring-shadow),
941
- var(--tw-shadow, 0 0 #0000);
942
- }
943
- .ring-blue-200 {
944
- --tw-ring-opacity: 1;
945
- --tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1));
946
- }
947
849
  .ring-offset-background {
948
850
  --tw-ring-offset-color: hsl(var(--background));
949
851
  }
950
852
  .filter {
951
853
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
952
854
  }
953
- .transition {
954
- transition-property:
955
- color,
956
- background-color,
957
- border-color,
958
- text-decoration-color,
959
- fill,
960
- stroke,
961
- opacity,
962
- box-shadow,
963
- transform,
964
- filter,
965
- backdrop-filter;
966
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
967
- transition-duration: 150ms;
968
- }
969
855
  .transition-all {
970
856
  transition-property: all;
971
857
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -987,11 +873,6 @@ body {
987
873
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
988
874
  transition-duration: 150ms;
989
875
  }
990
- .transition-transform {
991
- transition-property: transform;
992
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
993
- transition-duration: 150ms;
994
- }
995
876
  .file\:border-0::file-selector-button {
996
877
  border-width: 0px;
997
878
  }
@@ -1015,10 +896,6 @@ body {
1015
896
  --tw-border-opacity: 1;
1016
897
  border-color: rgb(59 130 246 / var(--tw-border-opacity, 1));
1017
898
  }
1018
- .hover\:border-gray-300:hover {
1019
- --tw-border-opacity: 1;
1020
- border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
1021
- }
1022
899
  .hover\:bg-blue-700:hover {
1023
900
  --tw-bg-opacity: 1;
1024
901
  background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
@@ -1035,10 +912,6 @@ body {
1035
912
  --tw-text-opacity: 1;
1036
913
  color: rgb(59 130 246 / var(--tw-text-opacity, 1));
1037
914
  }
1038
- .hover\:text-blue-700:hover {
1039
- --tw-text-opacity: 1;
1040
- color: rgb(29 78 216 / var(--tw-text-opacity, 1));
1041
- }
1042
915
  .hover\:text-gray-600:hover {
1043
916
  --tw-text-opacity: 1;
1044
917
  color: rgb(75 85 99 / var(--tw-text-opacity, 1));
@@ -1055,10 +928,6 @@ body {
1055
928
  --tw-text-opacity: 1;
1056
929
  color: rgb(220 38 38 / var(--tw-text-opacity, 1));
1057
930
  }
1058
- .hover\:text-red-700:hover {
1059
- --tw-text-opacity: 1;
1060
- color: rgb(185 28 28 / var(--tw-text-opacity, 1));
1061
- }
1062
931
  .hover\:shadow-sm:hover {
1063
932
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1064
933
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
@@ -1184,10 +1053,6 @@ body {
1184
1053
  --tw-text-opacity: 1;
1185
1054
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
1186
1055
  }
1187
- .dark\:hover\:border-gray-600:hover:is(.dark *) {
1188
- --tw-border-opacity: 1;
1189
- border-color: rgb(75 85 99 / var(--tw-border-opacity, 1));
1190
- }
1191
1056
  .dark\:hover\:bg-gray-700:hover:is(.dark *) {
1192
1057
  --tw-bg-opacity: 1;
1193
1058
  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
@@ -1196,9 +1061,4 @@ body {
1196
1061
  --tw-bg-opacity: 1;
1197
1062
  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
1198
1063
  }
1199
- @media (min-width: 1280px) {
1200
- .xl\:block {
1201
- display: block;
1202
- }
1203
- }
1204
1064
  /*# sourceMappingURL=index.css.map */