@masterteam/form-builder 0.0.5 → 0.0.6
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/assets/form-builder.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-700:oklch(50.5% .213 27.518);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.\!absolute{position:absolute!important}.absolute{position:absolute}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.z-1{z-index:1}.z-10{z-index:10}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.col-span-12{grid-column:span 12/span 12}.me-auto{margin-inline-end:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-full{width:100%;height:100%}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-27{height:calc(var(--spacing)*27)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-27{min-height:calc(var(--spacing)*27)}.\!w-\[27\%\]{width:27%!important}.\!w-\[73\%\]{width:73%!important}.\!w-\[79\%\]{width:79%!important}.w-1\/3{width:33.3333%}.w-1\/5{width:20%}.w-2\/3{width:66.6667%}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-full{width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.rotate-180{rotate:180deg}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-7{gap:calc(var(--spacing)*7)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden\!{overflow-y:hidden!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-primary{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.border-primary{border-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.border-surface-300{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.border-surface-300{border-color:color-mix(in srgb,var(--p-surface-300)calc(100%*1),transparent)}}.border-t-transparent{border-top-color:#0000}.\!bg-transparent{background-color:#0000!important}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-primary{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary{background-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb,var(--p-primary-50)calc(100%*1),transparent)}}.bg-surface-200{background-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.bg-surface-200{background-color:color-mix(in srgb,var(--p-surface-200)calc(100%*1),transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-4{padding:calc(var(--spacing)*4)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-5{padding-top:calc(var(--spacing)*5)}.\!pb-3{padding-bottom:calc(var(--spacing)*3)!important}.pb-10{padding-bottom:calc(var(--spacing)*10)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-gray-500{color:var(--color-gray-500)}.text-muted-color{color:var(--p-text-muted-color)}.text-primary{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.text-primary{color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.text-primary-contrast{color:var(--p-primary-contrast-color)}@supports (color:color-mix(in lab, red, red)){.text-primary-contrast{color:color-mix(in srgb,var(--p-primary-contrast-color)calc(100%*1),transparent)}}.text-red-700{color:var(--color-red-700)}.opacity-50{opacity:.5}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.transition-\[rotate\]{transition-property:rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:bg-emphasis:hover{background:var(--p-content-hover-background);color:var(--p-content-hover-color)}}.active\:cursor-grabbing:active{cursor:grabbing}.dark\:border-surface-500:where(.dark,.dark *){border-color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-500:where(.dark,.dark *){border-color:color-mix(in srgb,var(--p-surface-500)calc(100%*1),transparent)}}.\[\&_\.cdk-drag-placeholder\]\:hidden .cdk-drag-placeholder{display:none}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0),var(--p-enter-translate-y,0),0)scale3d(var(--p-enter-scale,1),var(--p-enter-scale,1),var(--p-enter-scale,1))rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0),var(--p-leave-translate-y,0),0)scale3d(var(--p-leave-scale,1),var(--p-leave-scale,1),var(--p-leave-scale,1))rotate(var(--p-leave-rotate,0))}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-700:oklch(50.5% .213 27.518);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.\!absolute{position:absolute!important}.absolute{position:absolute}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.z-1{z-index:1}.z-10{z-index:10}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.col-span-12{grid-column:span 12/span 12}.me-auto{margin-inline-end:auto}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-full{width:100%;height:100%}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-27{height:calc(var(--spacing)*27)}.h-64{height:calc(var(--spacing)*64)}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-27{min-height:calc(var(--spacing)*27)}.\!w-\[27\%\]{width:27%!important}.\!w-\[73\%\]{width:73%!important}.\!w-\[79\%\]{width:79%!important}.w-1\/3{width:33.3333%}.w-1\/5{width:20%}.w-2\/3{width:66.6667%}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-full{width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.rotate-180{rotate:180deg}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-move{cursor:move}.cursor-pointer{cursor:pointer}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-7{gap:calc(var(--spacing)*7)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden\!{overflow-y:hidden!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border,.border-1{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-primary{border-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.border-primary{border-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.border-surface-300{border-color:var(--p-surface-300)}@supports (color:color-mix(in lab, red, red)){.border-surface-300{border-color:color-mix(in srgb,var(--p-surface-300)calc(100%*1),transparent)}}.border-t-transparent{border-top-color:#0000}.\!bg-transparent{background-color:#0000!important}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.bg-primary{background-color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.bg-primary{background-color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.bg-primary-50{background-color:var(--p-primary-50)}@supports (color:color-mix(in lab, red, red)){.bg-primary-50{background-color:color-mix(in srgb,var(--p-primary-50)calc(100%*1),transparent)}}.bg-surface-0{background-color:var(--p-surface-0)}@supports (color:color-mix(in lab, red, red)){.bg-surface-0{background-color:color-mix(in srgb,var(--p-surface-0)calc(100%*1),transparent)}}.bg-surface-200{background-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.bg-surface-200{background-color:color-mix(in srgb,var(--p-surface-200)calc(100%*1),transparent)}}.bg-white\/50{background-color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.bg-white\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-4{padding:calc(var(--spacing)*4)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-5{padding-top:calc(var(--spacing)*5)}.\!pb-3{padding-bottom:calc(var(--spacing)*3)!important}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.text-center{text-align:center}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.text-gray-500{color:var(--color-gray-500)}.text-muted-color{color:var(--p-text-muted-color)}.text-primary{color:var(--p-primary-color)}@supports (color:color-mix(in lab, red, red)){.text-primary{color:color-mix(in srgb,var(--p-primary-color)calc(100%*1),transparent)}}.text-primary-contrast{color:var(--p-primary-contrast-color)}@supports (color:color-mix(in lab, red, red)){.text-primary-contrast{color:color-mix(in srgb,var(--p-primary-contrast-color)calc(100%*1),transparent)}}.text-red-700{color:var(--color-red-700)}.opacity-50{opacity:.5}.\!shadow-none{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.transition-\[rotate\]{transition-property:rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.hover\:bg-emphasis:hover{background:var(--p-content-hover-background);color:var(--p-content-hover-color)}}.active\:cursor-grabbing:active{cursor:grabbing}.dark\:border-surface-500:where(.dark,.dark *){border-color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-500:where(.dark,.dark *){border-color:color-mix(in srgb,var(--p-surface-500)calc(100%*1),transparent)}}.\[\&_\.cdk-drag-placeholder\]\:hidden .cdk-drag-placeholder{display:none}}@keyframes enter{0%{opacity:var(--p-enter-opacity,1);transform:translate3d(var(--p-enter-translate-x,0),var(--p-enter-translate-y,0),0)scale3d(var(--p-enter-scale,1),var(--p-enter-scale,1),var(--p-enter-scale,1))rotate(var(--p-enter-rotate,0))}}@keyframes leave{to{opacity:var(--p-leave-opacity,1);transform:translate3d(var(--p-leave-translate-x,0),var(--p-leave-translate-y,0),0)scale3d(var(--p-leave-scale,1),var(--p-leave-scale,1),var(--p-leave-scale,1))rotate(var(--p-leave-rotate,0))}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
package/assets/i18n/ar.json
CHANGED
package/assets/i18n/en.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Injectable, computed, input, signal, viewChild, Component, effect, output } from '@angular/core';
|
|
3
|
-
import * as
|
|
3
|
+
import * as i5 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i1 from '@angular/forms';
|
|
6
6
|
import { FormControl, ReactiveFormsModule, FormGroup, FormsModule } from '@angular/forms';
|
|
7
|
-
import * as
|
|
7
|
+
import * as i2 from 'primeng/tabs';
|
|
8
8
|
import { TabsModule } from 'primeng/tabs';
|
|
9
|
-
import * as
|
|
9
|
+
import * as i3 from 'primeng/skeleton';
|
|
10
10
|
import { SkeletonModule } from 'primeng/skeleton';
|
|
11
11
|
import { Button } from '@masterteam/components/button';
|
|
12
12
|
import { Card } from '@masterteam/components/card';
|
|
13
|
+
import { TextField } from '@masterteam/components/text-field';
|
|
13
14
|
import { ModalService } from '@masterteam/components/modal';
|
|
14
15
|
import { ConfirmationService } from '@masterteam/components/confirmation';
|
|
15
16
|
import { TranslocoDirective, TranslocoService } from '@jsverse/transloco';
|
|
16
|
-
import * as
|
|
17
|
+
import * as i4 from '@angular/cdk/drag-drop';
|
|
17
18
|
import { CdkDrag, CdkDropList, CdkDragPlaceholder, DragDropModule } from '@angular/cdk/drag-drop';
|
|
18
19
|
import { DynamicField } from '@masterteam/forms/dynamic-field';
|
|
19
20
|
import { Icon } from '@masterteam/icons';
|
|
@@ -1748,6 +1749,7 @@ class FormBuilder {
|
|
|
1748
1749
|
dialogRef;
|
|
1749
1750
|
// Local UI state
|
|
1750
1751
|
activeTab = signal('system', ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
|
|
1752
|
+
searchQuery = signal('', ...(ngDevMode ? [{ debugName: "searchQuery" }] : []));
|
|
1751
1753
|
// State from facade
|
|
1752
1754
|
sections = this.facade.sections;
|
|
1753
1755
|
properties = this.facade.properties;
|
|
@@ -1800,6 +1802,21 @@ class FormBuilder {
|
|
|
1800
1802
|
}
|
|
1801
1803
|
return tabs;
|
|
1802
1804
|
}, ...(ngDevMode ? [{ debugName: "availableTabs" }] : []));
|
|
1805
|
+
// Filtered properties based on search query
|
|
1806
|
+
filteredPropertiesByTab = computed(() => {
|
|
1807
|
+
const query = this.searchQuery().toLowerCase().trim();
|
|
1808
|
+
const tabs = this.availableTabs();
|
|
1809
|
+
if (!query) {
|
|
1810
|
+
return tabs;
|
|
1811
|
+
}
|
|
1812
|
+
return tabs.map((tab) => ({
|
|
1813
|
+
...tab,
|
|
1814
|
+
properties: tab.properties.filter((prop) => {
|
|
1815
|
+
const name = prop.name;
|
|
1816
|
+
return name.toLowerCase().includes(query);
|
|
1817
|
+
}),
|
|
1818
|
+
}));
|
|
1819
|
+
}, ...(ngDevMode ? [{ debugName: "filteredPropertiesByTab" }] : []));
|
|
1803
1820
|
constructor() {
|
|
1804
1821
|
// Update active tab when tabs change
|
|
1805
1822
|
effect(() => {
|
|
@@ -1880,7 +1897,7 @@ class FormBuilder {
|
|
|
1880
1897
|
}
|
|
1881
1898
|
noReturnPredicate = () => false;
|
|
1882
1899
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FormBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1883
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FormBuilder, isStandalone: true, selector: "mt-form-builder", ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 p-4 [&_.cdk-drag-placeholder]:hidden h-full overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n All {{ tab.title }} items are in use\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [".cdk-drag{cursor:grab}.cdk-drag:active,.cdk-drag-preview{cursor:grabbing}.cdk-drag-placeholder{opacity:.5}.cdk-drop-list-dragging .cdk-drag{cursor:grabbing}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i1$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i1$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i1$1.TabPanel, selector: "p-tabpanel", inputs: ["lazy", "value"], outputs: ["valueChange"] }, { kind: "component", type: i1$1.TabList, selector: "p-tablist" }, { kind: "component", type: i1$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: FBSection, selector: "mt-fb-section", inputs: ["section", "sectionsCount", "allSections"], outputs: ["onFieldDrop"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "pipe", type: i4.TitleCasePipe, name: "titlecase" }] });
|
|
1900
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: FormBuilder, isStandalone: true, selector: "mt-form-builder", ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of filteredPropertiesByTab(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full flex flex-col\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden flex-1 overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n <!-- Search Field (Sticky) -->\r\n <div class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\">\r\n <mt-text-field\r\n [placeholder]=\"t('search-properties')\"\r\n [(ngModel)]=\"searchQuery\"\r\n icon=\"general.search-lg\"\r\n />\r\n </div>\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n @if (searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else {\r\n All {{ tab.title }} items are in use\r\n }\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [".cdk-drag{cursor:grab}.cdk-drag:active,.cdk-drag-preview{cursor:grabbing}.cdk-drag-placeholder{opacity:.5}.cdk-drop-list-dragging .cdk-drag{cursor:grabbing}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i2.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i2.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i2.TabPanel, selector: "p-tabpanel", inputs: ["lazy", "value"], outputs: ["valueChange"] }, { kind: "component", type: i2.TabList, selector: "p-tablist" }, { kind: "component", type: i2.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: FBSection, selector: "mt-fb-section", inputs: ["section", "sectionsCount", "allSections"], outputs: ["onFieldDrop"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }] });
|
|
1884
1901
|
}
|
|
1885
1902
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FormBuilder, decorators: [{
|
|
1886
1903
|
type: Component,
|
|
@@ -1891,11 +1908,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
1891
1908
|
SkeletonModule,
|
|
1892
1909
|
Button,
|
|
1893
1910
|
Card,
|
|
1911
|
+
TextField,
|
|
1894
1912
|
TranslocoDirective,
|
|
1895
1913
|
FBSection,
|
|
1896
1914
|
DragDropModule,
|
|
1897
1915
|
Icon,
|
|
1898
|
-
], template: "<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of
|
|
1916
|
+
], template: "<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of filteredPropertiesByTab(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full flex flex-col\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden flex-1 overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n <!-- Search Field (Sticky) -->\r\n <div class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\">\r\n <mt-text-field\r\n [placeholder]=\"t('search-properties')\"\r\n [(ngModel)]=\"searchQuery\"\r\n icon=\"general.search-lg\"\r\n />\r\n </div>\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n @if (searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else {\r\n All {{ tab.title }} items are in use\r\n }\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [".cdk-drag{cursor:grab}.cdk-drag:active,.cdk-drag-preview{cursor:grabbing}.cdk-drag-placeholder{opacity:.5}.cdk-drop-list-dragging .cdk-drag{cursor:grabbing}\n"] }]
|
|
1899
1917
|
}], ctorParameters: () => [] });
|
|
1900
1918
|
|
|
1901
1919
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-form-builder.mjs","sources":["../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.actions.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.model.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.state.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.facade.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/condition-constants.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.html","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.html","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.html","../../../../packages/masterteam/form-builder/src/lib/form-builder.ts","../../../../packages/masterteam/form-builder/src/lib/form-builder.html","../../../../packages/masterteam/form-builder/src/public-api.ts","../../../../packages/masterteam/form-builder/src/masterteam-form-builder.ts"],"sourcesContent":["import type {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n} from './form-builder.model';\r\n\r\n// ============================================================================\r\n// Module Configuration Actions\r\n// ============================================================================\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[FormBuilder] Set Module Info';\r\n constructor(\r\n public moduleType: string,\r\n public moduleId: string | number,\r\n public parentModuleType?: string,\r\n public parentModuleId?: string | number,\r\n public parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class ResetFormBuilderState {\r\n static readonly type = '[FormBuilder] Reset State';\r\n}\r\n\r\nexport class SetProperties {\r\n static readonly type = '[FormBuilder] Set Properties';\r\n constructor(public properties: PropertyItem[]) {}\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration Actions\r\n// ============================================================================\r\n\r\nexport class GetFormConfiguration {\r\n static readonly type = '[FormBuilder] Get Form Configuration';\r\n}\r\n\r\nexport class ResetFormConfiguration {\r\n static readonly type = '[FormBuilder] Reset Form Configuration';\r\n}\r\n\r\n// ============================================================================\r\n// Section Actions\r\n// ============================================================================\r\n\r\nexport class AddSection {\r\n static readonly type = '[FormBuilder] Add Section';\r\n constructor(public payload: AddSectionPayload) {}\r\n}\r\n\r\nexport class UpdateSection {\r\n static readonly type = '[FormBuilder] Update Section';\r\n constructor(\r\n public sectionId: string,\r\n public payload: UpdateSectionPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteSection {\r\n static readonly type = '[FormBuilder] Delete Section';\r\n constructor(public sectionId: string) {}\r\n}\r\n\r\n// ============================================================================\r\n// Field Actions\r\n// ============================================================================\r\n\r\nexport class AddField {\r\n static readonly type = '[FormBuilder] Add Field';\r\n constructor(\r\n public sectionId: string,\r\n public payload: AddFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdateField {\r\n static readonly type = '[FormBuilder] Update Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: UpdateFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteField {\r\n static readonly type = '[FormBuilder] Delete Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n ) {}\r\n}\r\n\r\nexport class ReorderFields {\r\n static readonly type = '[FormBuilder] Reorder Fields';\r\n constructor(\r\n public sectionId: string,\r\n public payload: ReorderFieldPayload[],\r\n ) {}\r\n}\r\n\r\nexport class MoveField {\r\n static readonly type = '[FormBuilder] Move Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: MoveFieldPayload,\r\n ) {}\r\n}\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\n\r\n// ============================================================================\r\n// Action Keys Enum\r\n// ============================================================================\r\nexport enum FormBuilderActionKey {\r\n // Form Configuration\r\n GetFormConfiguration = 'getFormConfiguration',\r\n ResetFormConfiguration = 'resetFormConfiguration',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n\r\n // Field CRUD\r\n AddField = 'addField',\r\n UpdateField = 'updateField',\r\n DeleteField = 'deleteField',\r\n MoveField = 'moveField',\r\n ReorderFields = 'reorderFields',\r\n}\r\n\r\n// ============================================================================\r\n// API Models\r\n// ============================================================================\r\n\r\nexport type FieldWidth = '25' | '50' | '100';\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyId: number;\r\n width: FieldWidth;\r\n order: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n _pending?: boolean; // Optimistic: field is being added\r\n _deleting?: boolean; // Optimistic: field is being deleted\r\n}\r\n\r\nexport interface FormSection {\r\n id: string;\r\n name: {\r\n en: string;\r\n ar: string;\r\n };\r\n order: number;\r\n fields: FormField[];\r\n}\r\n\r\nexport interface FormConfiguration {\r\n isActive: boolean;\r\n sections: FormSection[];\r\n}\r\n\r\n// ============================================================================\r\n// Request Payloads\r\n// ============================================================================\r\n\r\nexport interface AddSectionPayload {\r\n name: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface UpdateSectionPayload {\r\n name?: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface AddFieldPayload {\r\n propertyId: number;\r\n width: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n}\r\n\r\nexport interface UpdateFieldPayload {\r\n width?: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string | null;\r\n}\r\n\r\nexport interface MoveFieldPayload {\r\n targetSectionId: string;\r\n order?: number;\r\n}\r\n\r\nexport interface ReorderFieldPayload {\r\n id: string;\r\n order: number;\r\n}\r\n\r\n// ============================================================================\r\n// Property Item (for enrichment)\r\n// ============================================================================\r\nexport interface PropertyItem {\r\n id: number;\r\n name: string | Record<string, string>;\r\n viewType?: string;\r\n [key: string]: any;\r\n}\r\n\r\n// ============================================================================\r\n// Enriched Types (for UI display)\r\n// ============================================================================\r\n\r\n// Enriched field with UI properties (from PropertyItem)\r\nexport interface EnrichedFormField extends FormField {\r\n name: string;\r\n type: string;\r\n data?: any;\r\n}\r\n\r\n// Enriched section for UI display\r\nexport interface EnrichedFormSection extends Omit<FormSection, 'fields'> {\r\n fields: EnrichedFormField[];\r\n}\r\n\r\n// ============================================================================\r\n// State Model\r\n// ============================================================================\r\nexport interface FormBuilderStateModel extends LoadingStateShape<FormBuilderActionKey> {\r\n // Module configuration\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType: string | null;\r\n parentModuleId: string | number | null;\r\n parentPath: string;\r\n\r\n // Form data\r\n formConfiguration: FormConfiguration | null;\r\n\r\n // Properties for field enrichment\r\n properties: PropertyItem[];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CrudStateBase,\r\n handleApiRequest,\r\n Response,\r\n} from '@masterteam/components';\r\n\r\nimport {\r\n FormBuilderActionKey,\r\n FormBuilderStateModel,\r\n FormConfiguration,\r\n FormField,\r\n FormSection,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n DeleteField,\r\n DeleteSection,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n UpdateField,\r\n UpdateSection,\r\n} from './form-builder.actions';\r\n\r\n// Default State\r\nconst DEFAULT_STATE: FormBuilderStateModel = {\r\n // Module configuration\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n\r\n // Form data\r\n formConfiguration: null,\r\n\r\n // Properties for field enrichment\r\n properties: [],\r\n\r\n // Loading state (from LoadingStateShape)\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<FormBuilderStateModel>({\r\n name: 'formBuilder',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class FormBuilderState extends CrudStateBase<\r\n FormSection,\r\n FormBuilderStateModel,\r\n FormBuilderActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n private baseUrl = 'formConfigurations';\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private getApiPath(state: FormBuilderStateModel): string {\r\n const { parentPath, moduleType, moduleId } = state;\r\n return `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}`;\r\n }\r\n\r\n // ============================================================================\r\n // Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getState(state: FormBuilderStateModel): FormBuilderStateModel {\r\n return state ?? DEFAULT_STATE;\r\n }\r\n\r\n @Selector()\r\n static getFormConfiguration(\r\n state: FormBuilderStateModel,\r\n ): FormConfiguration | null {\r\n return state?.formConfiguration ?? null;\r\n }\r\n\r\n @Selector()\r\n static getSections(state: FormBuilderStateModel): FormSection[] {\r\n return state?.formConfiguration?.sections ?? [];\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: FormBuilderStateModel): string | null {\r\n return state?.moduleType ?? null;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: FormBuilderStateModel): string | number | null {\r\n return state?.moduleId ?? null;\r\n }\r\n\r\n @Selector()\r\n static getProperties(state: FormBuilderStateModel) {\r\n return state?.properties ?? [];\r\n }\r\n\r\n // ============================================================================\r\n // Module Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(ResetFormBuilderState)\r\n resetState(ctx: StateContext<FormBuilderStateModel>) {\r\n ctx.setState(DEFAULT_STATE);\r\n }\r\n\r\n @Action(SetProperties)\r\n setProperties(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetProperties,\r\n ) {\r\n ctx.patchState({\r\n properties: action.properties,\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(GetFormConfiguration)\r\n getFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = this.getApiPath(state);\r\n const req$ = this.http.get<Response<FormConfiguration>>(apiPath);\r\n\r\n return this.load(ctx, {\r\n key: FormBuilderActionKey.GetFormConfiguration,\r\n request$: req$,\r\n updateState: (_state, data) => ({\r\n formConfiguration: data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetFormConfiguration)\r\n resetFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/reset`;\r\n const req$ = this.http.delete<Response<FormConfiguration>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ResetFormConfiguration,\r\n request$: req$,\r\n onSuccess: (res, _currentState) => ({\r\n formConfiguration: res.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Section Actions\r\n // ============================================================================\r\n\r\n @Action(AddSection)\r\n addSection(ctx: StateContext<FormBuilderStateModel>, action: AddSection) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections`;\r\n const req$ = this.http.post<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.addOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateSection)\r\n updateSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.put<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.upsertOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteSection)\r\n deleteSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: DeleteSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.delete<Response<{ id: string }>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.removeOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data.id,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Field Actions\r\n // ============================================================================\r\n\r\n @Action(AddField)\r\n addField(ctx: StateContext<FormBuilderStateModel>, action: AddField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields`;\r\n const req$ = this.http.post<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Generate temp ID for optimistic update\r\n const tempId = `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n const tempField: FormField = {\r\n id: tempId,\r\n sectionId: action.sectionId,\r\n propertyId: action.payload.propertyId,\r\n width: action.payload.width,\r\n order: action.payload.order ?? 0,\r\n hiddenInCreation: action.payload.hiddenInCreation,\r\n _pending: true,\r\n };\r\n\r\n // Optimistically add the temp field\r\n const sectionsWithTemp = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const insertIndex = action.payload.order ?? fields.length;\r\n fields.splice(insertIndex, 0, tempField);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithTemp,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const newField = res.data;\r\n // Replace temp field with real field\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === tempId ? newField : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove temp field on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== tempId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateField)\r\n updateField(ctx: StateContext<FormBuilderStateModel>, action: UpdateField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update for order changes\r\n if (action.payload.order !== undefined) {\r\n const newOrder = action.payload.order;\r\n const sections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const currentIndex = fields.findIndex(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (currentIndex !== -1) {\r\n const [movedField] = fields.splice(currentIndex, 1);\r\n fields.splice(newOrder, 0, movedField);\r\n }\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections,\r\n },\r\n });\r\n }\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n // Update the field but preserve current array order (from optimistic update)\r\n // Don't re-sort by order property as other fields may have stale order values\r\n const updatedFields = section.fields.map((f, index) =>\r\n f.id === updatedField.id\r\n ? { ...updatedField, order: index }\r\n : { ...f, order: index },\r\n );\r\n return {\r\n ...section,\r\n fields: updatedFields,\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error - reload original state\r\n if (action.payload.order !== undefined) {\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n }\r\n return {};\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteField)\r\n deleteField(ctx: StateContext<FormBuilderStateModel>, action: DeleteField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ =\r\n this.http.delete<Response<{ id: string; sectionId: string }>>(apiPath);\r\n\r\n // Optimistically mark field as deleting\r\n const sectionsWithDeleting = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: true } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithDeleting,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const { id: deletedId, sectionId } = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== deletedId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove _deleting flag on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: false } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ReorderFields)\r\n reorderFields(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ReorderFields,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/reorder`;\r\n const req$ = this.http.put<Response<{ fields: FormField[] }>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n // Create order map for optimistic update\r\n const orderMap = new Map(action.payload.map((p) => [p.id, p.order]));\r\n\r\n // Apply optimistic update\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const reorderedFields = section.fields\r\n .map((f) => ({\r\n ...f,\r\n order: orderMap.get(f.id) ?? f.order,\r\n }))\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: reorderedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: optimisticSections,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ReorderFields,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedFields = res.data.fields;\r\n const fieldMap = new Map(updatedFields.map((f) => [f.id, f]));\r\n\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const mergedFields = section.fields\r\n .map((f) => fieldMap.get(f.id) ?? f)\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: mergedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert to original state on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(MoveField)\r\n moveField(ctx: StateContext<FormBuilderStateModel>, action: MoveField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}/move`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update - move field immediately\r\n const sourceSectionId = action.sectionId;\r\n const targetSectionId = action.payload.targetSectionId;\r\n const targetOrder = action.payload.order ?? 0;\r\n\r\n let movedFieldData: FormField | null = null;\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sourceSectionId) {\r\n const fieldToMove = section.fields.find(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (fieldToMove) {\r\n movedFieldData = { ...fieldToMove, order: targetOrder };\r\n }\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== action.fieldId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n // Add to target section\r\n const sectionsWithMoved = optimisticSections.map((section) => {\r\n if (section.id === targetSectionId && movedFieldData) {\r\n const fields = [...section.fields];\r\n fields.splice(targetOrder, 0, movedFieldData);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n });\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithMoved,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.MoveField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const movedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n // Update the moved field with server response\r\n if (section.id === targetSectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields\r\n .map((f) => (f.id === movedField.id ? movedField : f))\r\n .sort((a, b) => a.order - b.order),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n}\r\n","import { computed, Injectable, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\n\r\nimport {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n FormBuilderActionKey,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n DeleteField,\r\n DeleteSection,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n UpdateField,\r\n UpdateSection,\r\n} from './form-builder.actions';\r\nimport { FormBuilderState } from './form-builder.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FormBuilderFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // State Selectors\r\n // ============================================================================\r\n\r\n private readonly stateSignal = select(FormBuilderState.getState);\r\n\r\n readonly formConfiguration = select(FormBuilderState.getFormConfiguration);\r\n readonly sections = select(FormBuilderState.getSections);\r\n readonly properties = select(FormBuilderState.getProperties);\r\n readonly moduleType = select(FormBuilderState.getModuleType);\r\n readonly moduleId = select(FormBuilderState.getModuleId);\r\n\r\n // ============================================================================\r\n // Loading Signals\r\n // ============================================================================\r\n\r\n readonly isLoadingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.GetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isResettingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ResetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isAddingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddSection),\r\n );\r\n\r\n readonly isUpdatingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateSection,\r\n ),\r\n );\r\n\r\n readonly isDeletingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.DeleteSection,\r\n ),\r\n );\r\n\r\n readonly isAddingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddField),\r\n );\r\n\r\n readonly isUpdatingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.UpdateField),\r\n );\r\n\r\n readonly isDeletingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.DeleteField),\r\n );\r\n\r\n readonly isMovingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.MoveField),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals\r\n // ============================================================================\r\n\r\n readonly formConfigurationError = computed(\r\n () =>\r\n this.stateSignal().errors[FormBuilderActionKey.GetFormConfiguration] ??\r\n null,\r\n );\r\n\r\n readonly sectionError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddSection] ??\r\n errors[FormBuilderActionKey.UpdateSection] ??\r\n errors[FormBuilderActionKey.DeleteSection] ??\r\n null\r\n );\r\n });\r\n\r\n readonly fieldError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddField] ??\r\n errors[FormBuilderActionKey.UpdateField] ??\r\n errors[FormBuilderActionKey.DeleteField] ??\r\n errors[FormBuilderActionKey.MoveField] ??\r\n null\r\n );\r\n });\r\n\r\n // ============================================================================\r\n // Module Configuration Dispatchers\r\n // ============================================================================\r\n\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ) {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetFormBuilderState());\r\n }\r\n\r\n setProperties(properties: PropertyItem[]) {\r\n return this.store.dispatch(new SetProperties(properties));\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Dispatchers\r\n // ============================================================================\r\n\r\n getFormConfiguration() {\r\n return this.store.dispatch(new GetFormConfiguration());\r\n }\r\n\r\n resetFormConfiguration() {\r\n return this.store.dispatch(new ResetFormConfiguration());\r\n }\r\n\r\n // ============================================================================\r\n // Section Dispatchers\r\n // ============================================================================\r\n\r\n addSection(payload: AddSectionPayload) {\r\n return this.store.dispatch(new AddSection(payload));\r\n }\r\n\r\n updateSection(sectionId: string, payload: UpdateSectionPayload) {\r\n return this.store.dispatch(new UpdateSection(sectionId, payload));\r\n }\r\n\r\n deleteSection(sectionId: string) {\r\n return this.store.dispatch(new DeleteSection(sectionId));\r\n }\r\n\r\n // ============================================================================\r\n // Field Dispatchers\r\n // ============================================================================\r\n\r\n addField(sectionId: string, payload: AddFieldPayload) {\r\n return this.store.dispatch(new AddField(sectionId, payload));\r\n }\r\n\r\n updateField(sectionId: string, fieldId: string, payload: UpdateFieldPayload) {\r\n return this.store.dispatch(new UpdateField(sectionId, fieldId, payload));\r\n }\r\n\r\n deleteField(sectionId: string, fieldId: string) {\r\n return this.store.dispatch(new DeleteField(sectionId, fieldId));\r\n }\r\n\r\n reorderFields(sectionId: string, payload: ReorderFieldPayload[]) {\r\n return this.store.dispatch(new ReorderFields(sectionId, payload));\r\n }\r\n\r\n moveField(sectionId: string, fieldId: string, payload: MoveFieldPayload) {\r\n return this.store.dispatch(new MoveField(sectionId, fieldId, payload));\r\n }\r\n}\r\n","/**\r\n * Condition Formula Constants\r\n * Static functions and operators for condition formulas (Show/Hide/Enable/Disable)\r\n */\r\n\r\nimport type {\r\n FunctionCategoryGroup,\r\n OperatorDefinition,\r\n} from '@masterteam/components/formula';\r\n\r\n/**\r\n * Functions for field conditions\r\n */\r\nexport const CONDITION_FUNCTION_CATEGORIES: FunctionCategoryGroup[] = [\r\n {\r\n name: 'Logic',\r\n displayName: 'Field Visibility',\r\n functions: [\r\n {\r\n name: 'SHOW_IF',\r\n category: 'Logic',\r\n description: 'Show this field when condition is true',\r\n signature: 'SHOW_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is visible',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'SHOW_IF(@Status == \"Active\")',\r\n 'SHOW_IF(@Type == \"Custom\")',\r\n ],\r\n },\r\n {\r\n name: 'HIDE_IF',\r\n category: 'Logic',\r\n description: 'Hide this field when condition is true',\r\n signature: 'HIDE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is hidden',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['HIDE_IF(@Status == \"Closed\")', 'HIDE_IF(ISNULL(@Parent))'],\r\n },\r\n {\r\n name: 'DISABLE_IF',\r\n category: 'Logic',\r\n description: 'Disable this field when condition is true',\r\n signature: 'DISABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is disabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'DISABLE_IF(@IsLocked == true)',\r\n 'DISABLE_IF(@Status == \"Approved\")',\r\n ],\r\n },\r\n {\r\n name: 'ENABLE_IF',\r\n category: 'Logic',\r\n description: 'Enable this field when condition is true',\r\n signature: 'ENABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is enabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'ENABLE_IF(@Status == \"Draft\")',\r\n 'ENABLE_IF(@CanEdit == true)',\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Aggregation',\r\n displayName: 'Logic Helpers',\r\n functions: [\r\n {\r\n name: 'AND',\r\n category: 'Aggregation',\r\n description: 'Returns true if all conditions are true',\r\n signature: 'AND(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['AND(@Status == \"Active\", @Priority > 0)'],\r\n },\r\n {\r\n name: 'OR',\r\n category: 'Aggregation',\r\n description: 'Returns true if any condition is true',\r\n signature: 'OR(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['OR(@Status == \"Active\", @Status == \"Pending\")'],\r\n },\r\n {\r\n name: 'NOT',\r\n category: 'Aggregation',\r\n description: 'Returns the opposite of the condition',\r\n signature: 'NOT(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'The condition to negate',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['NOT(@IsCompleted)'],\r\n },\r\n {\r\n name: 'ISNULL',\r\n category: 'Aggregation',\r\n description: 'Returns true if value is null or empty',\r\n signature: 'ISNULL(value)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'any',\r\n description: 'The value to check',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['ISNULL(@Description)'],\r\n },\r\n {\r\n name: 'CONTAINS',\r\n category: 'Aggregation',\r\n description: 'Returns true if text contains the search string',\r\n signature: 'CONTAINS(text, search)',\r\n parameters: [\r\n {\r\n name: 'text',\r\n type: 'string',\r\n description: 'The text to search in',\r\n required: true,\r\n },\r\n {\r\n name: 'search',\r\n type: 'string',\r\n description: 'The string to search for',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['CONTAINS(@Name, \"Project\")'],\r\n },\r\n ],\r\n },\r\n];\r\n\r\n/**\r\n * Operators for conditions\r\n */\r\nexport const CONDITION_OPERATORS: OperatorDefinition[] = [\r\n // Comparison\r\n {\r\n symbol: '==',\r\n name: 'Equal',\r\n type: 'comparison',\r\n description: 'Equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '!=',\r\n name: 'Not Equal',\r\n type: 'comparison',\r\n description: 'Not equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '>',\r\n name: 'Greater Than',\r\n type: 'comparison',\r\n description: 'Greater than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<',\r\n name: 'Less Than',\r\n type: 'comparison',\r\n description: 'Less than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '>=',\r\n name: 'Greater or Equal',\r\n type: 'comparison',\r\n description: 'Greater than or equal',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<=',\r\n name: 'Less or Equal',\r\n type: 'comparison',\r\n description: 'Less than or equal',\r\n precedence: 4,\r\n },\r\n // Logical\r\n {\r\n symbol: '&&',\r\n name: 'And',\r\n type: 'logical',\r\n description: 'Logical AND',\r\n precedence: 2,\r\n },\r\n {\r\n symbol: '||',\r\n name: 'Or',\r\n type: 'logical',\r\n description: 'Logical OR',\r\n precedence: 1,\r\n },\r\n];\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n SmartBlock,\r\n FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n CONDITION_FUNCTION_CATEGORIES,\r\n CONDITION_OPERATORS,\r\n} from './condition-constants';\r\n\r\n/**\r\n * Field property for condition formula\r\n */\r\nexport interface ConditionFieldProperty {\r\n /** Unique key (used in formula as @key) */\r\n key: string;\r\n /** Display name */\r\n name: string;\r\n /** Field type for hint */\r\n type?: string;\r\n}\r\n\r\n/**\r\n * Field Conditions Dialog\r\n *\r\n * Allows users to define conditional display formulas for form fields.\r\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\r\n */\r\n@Component({\r\n selector: 'mt-fb-field-conditions',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-field-conditions.html',\r\n})\r\nexport class FBFieldConditions implements OnInit {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n // Inputs\r\n /** Initial formula (JSON string from backend) */\r\n readonly initialFormula = input<string>('');\r\n\r\n /** Available fields from the form builder (other fields that can be referenced) */\r\n readonly availableFields = input<ConditionFieldProperty[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n\r\n // Form control for the formula editor (tokens array)\r\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\r\n\r\n // View child for the editor\r\n private readonly editorRef = viewChild<FormulaEditor>('editor');\r\n\r\n // Condition-specific functions and operators\r\n readonly functionCategories = CONDITION_FUNCTION_CATEGORIES;\r\n readonly operators = CONDITION_OPERATORS;\r\n\r\n /** Extract property keys for toolbar */\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((f) => f.key),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = {\r\n functions: 'Functions',\r\n properties: 'Fields',\r\n operators: 'Operators',\r\n noPropertiesAvailable: 'No fields available',\r\n };\r\n\r\n ngOnInit(): void {\r\n // Parse JSON string to tokens\r\n const formula = this.initialFormula();\r\n if (formula) {\r\n try {\r\n const tokens = JSON.parse(formula) as FormulaToken[];\r\n this.formulaControl.patchValue(tokens);\r\n } catch {\r\n // Invalid JSON, start with empty\r\n }\r\n }\r\n }\r\n\r\n /** Handle block insert from toolbar */\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close({ saved: false });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10 flex flex-col gap-3\">\r\n <!-- Formula Toolbar -->\r\n <mt-formula-toolbar\r\n [knownProperties]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <!-- Formula Editor -->\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('build-condition-formula')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n RadioCardsFieldConfig,\r\n} from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n FieldWidth,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n FBFieldConditions,\r\n ConditionFieldProperty,\r\n} from '../fb-field-conditions/fb-field-conditions';\r\n\r\n@Component({\r\n selector: 'mt-fb-field-form',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n DynamicForm,\r\n Button,\r\n ToggleField,\r\n ],\r\n templateUrl: './fb-field-form.html',\r\n})\r\nexport class FBFieldForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string>('');\r\n readonly initialData = input<EnrichedFormField | null>(null);\r\n /** All sections with enriched fields (to get available fields for conditions) */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n readonly conditionalDisplayFormula = signal<string>('');\r\n private conditionsDialogRef: any;\r\n\r\n /**\r\n * Compute available fields for condition formula\r\n * Excludes the current field being edited\r\n */\r\n readonly availableFields = computed<ConditionFieldProperty[]>(() => {\r\n const sections = this.allSections();\r\n const currentField = this.initialData();\r\n const fields: ConditionFieldProperty[] = [];\r\n\r\n for (const section of sections) {\r\n for (const field of section.fields) {\r\n // Exclude the current field being edited\r\n if (currentField && field.id === currentField.id) continue;\r\n\r\n fields.push({\r\n key: field.name,\r\n name: field.name,\r\n type: field.type,\r\n });\r\n }\r\n }\r\n\r\n return fields;\r\n });\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly showHideControl = new FormControl(false);\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'isRequired',\r\n label: this.transloco.translate('formBuilder.is-required'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'hiddenInCreation',\r\n label: this.transloco.translate('formBuilder.hidden-in-creation'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n {\r\n key: 'hiddenInEditForm',\r\n label: this.transloco.translate('formBuilder.hidden-in-edit-form'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 3,\r\n },\r\n new RadioCardsFieldConfig({\r\n key: 'size',\r\n label: this.transloco.translate('formBuilder.size'),\r\n placeholder: this.transloco.translate('formBuilder.size'),\r\n options: [\r\n { id: 's', name: 'S' },\r\n { id: 'm', name: 'M' },\r\n { id: 'l', name: 'L' },\r\n ],\r\n order: 4,\r\n size: 'small',\r\n }),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n const widthToSize: Record<string, string> = {\r\n '25': 's',\r\n '50': 'm',\r\n '100': 'l',\r\n };\r\n this.formControl.patchValue({\r\n isRequired: data.isRequired ?? false,\r\n hiddenInCreation: data.hiddenInCreation ?? false,\r\n hiddenInEditForm: data.hiddenInEditForm ?? false,\r\n size: widthToSize[data.width] ?? 'l',\r\n });\r\n // Set show/hide toggle based on existing value\r\n this.showHideControl.patchValue(\r\n data.showConditionalDisplayFormula ?? false,\r\n );\r\n this.conditionalDisplayFormula.set(\r\n data.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n const widthMap: Record<string, FieldWidth> = {\r\n s: '25',\r\n m: '50',\r\n l: '100',\r\n };\r\n\r\n const payload = {\r\n width: widthMap[formValue.size] ?? '100',\r\n hiddenInCreation: formValue.hiddenInCreation ?? false,\r\n hiddenInEditForm: formValue.hiddenInEditForm ?? false,\r\n isRequired: formValue.isRequired ?? false,\r\n showConditionalDisplayFormula: this.showHideControl.value ?? false,\r\n conditionalDisplayFormula: this.showHideControl.value\r\n ? this.conditionalDisplayFormula()\r\n : null,\r\n };\r\n\r\n this.submitting.set(true);\r\n this.facade.updateField(sectionId, field.id, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onSetConditions(): void {\r\n this.conditionsDialogRef = this.modalService.openModal(\r\n FBFieldConditions,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('formBuilder.set-conditions'),\r\n styleClass: '!w-[73%] !absolute ',\r\n position: 'start',\r\n modal: true,\r\n dismissible: true,\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialFormula: this.conditionalDisplayFormula(),\r\n availableFields: this.availableFields(),\r\n },\r\n },\r\n );\r\n\r\n this.conditionsDialogRef.onClose.subscribe(\r\n (result: { saved: boolean; conditionalDisplayFormula?: string }) => {\r\n if (result?.saved) {\r\n this.conditionalDisplayFormula.set(\r\n result.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n },\r\n );\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteField(sectionId, field.id).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-2 h-full overflow-y-auto pb-10 flex flex-col gap-4\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n\r\n <!-- Show/Hide Toggle with Set Conditions -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-description')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n class=\"mt-3\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('set-conditions')\"\r\n size=\"small\"\r\n (onClick)=\"onSetConditions()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (initialData()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import { Component, effect, inject, input, signal } from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\n\r\n@Component({\r\n selector: 'mt-fb-section-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Button],\r\n templateUrl: './fb-section-form.html',\r\n})\r\nexport class FBSectionForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string | null>(null);\r\n readonly initialData = input<{ ar: string; en: string } | null>(null);\r\n readonly sectionsCount = input<number>(0);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name-ar',\r\n label: this.transloco.translate('formBuilder.name-ar'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-ar'),\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'name-en',\r\n label: this.transloco.translate('formBuilder.name-en'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-en'),\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n this.formControl.patchValue({\r\n 'name-ar': data.ar,\r\n 'name-en': data.en,\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const payload = {\r\n name: {\r\n ar: formValue['name-ar'],\r\n en: formValue['name-en'],\r\n },\r\n };\r\n\r\n this.submitting.set(true);\r\n const sectionId = this.sectionId();\r\n\r\n if (sectionId) {\r\n // Update existing section\r\n this.facade.updateSection(sectionId, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n } else {\r\n // Create new section\r\n this.facade\r\n .addSection({ ...payload, order: this.sectionsCount() })\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const sectionId = this.sectionId();\r\n if (!sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteSection(sectionId).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (sectionId()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n outlined\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n effect,\r\n} from '@angular/core';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n CdkDrag,\r\n CdkDragDrop,\r\n CdkDragPlaceholder,\r\n CdkDropList,\r\n} from '@angular/cdk/drag-drop';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\r\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\r\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-fb-section',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n Card,\r\n Icon,\r\n CdkDrag,\r\n CdkDropList,\r\n CdkDragPlaceholder,\r\n TranslocoDirective,\r\n DynamicField,\r\n ReactiveFormsModule,\r\n Tooltip,\r\n ],\r\n templateUrl: './fb-section.html',\r\n})\r\nexport class FBSection {\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly section = input.required<EnrichedFormSection>();\r\n readonly sectionsCount = input<number>(0);\r\n /** All sections - used to get available fields for condition formulas */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\r\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\r\n\r\n // Computed\r\n readonly sectionName = computed(() => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const section = this.section();\r\n return section.name[lang] ?? section.name['en'];\r\n });\r\n\r\n readonly fields = computed(() => this.section().fields);\r\n\r\n // UI State\r\n readonly expanded = signal(true);\r\n\r\n // Form groups cache for dynamic fields\r\n private readonly formGroupsCache = new Map<string, FormGroup>();\r\n\r\n constructor() {\r\n // Cleanup stale form groups when fields change\r\n effect(() => {\r\n const currentIds = new Set(this.fields().map((f) => f.id));\r\n for (const id of this.formGroupsCache.keys()) {\r\n if (!currentIds.has(id)) {\r\n this.formGroupsCache.delete(id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getFormGroup(field: EnrichedFormField): FormGroup {\r\n let fg = this.formGroupsCache.get(field.id);\r\n\r\n if (fg) {\r\n // Check if field name changed\r\n if (!fg.contains(field.name)) {\r\n const oldKey = Object.keys(fg.controls)[0];\r\n const value = oldKey ? fg.get(oldKey)?.value : field.data?.data;\r\n\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(value),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(field.data?.data),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n toggleExpanded(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\r\n this.onFieldDrop.emit(event);\r\n }\r\n\r\n editSection(event: Event): void {\r\n event.stopPropagation();\r\n const section = this.section();\r\n\r\n this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.edit-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n modal: true,\r\n dismissible: true,\r\n\r\n inputValues: {\r\n sectionId: section.id,\r\n initialData: section.name,\r\n sectionsCount: this.sectionsCount(),\r\n },\r\n });\r\n }\r\n\r\n removeField(event: Event, field: EnrichedFormField): void {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.facade.deleteField(this.section().id, field.id);\r\n },\r\n });\r\n }\r\n\r\n editField(field: EnrichedFormField): void {\r\n this.modalService.openModal(FBFieldForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.field-settings'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none',\r\n position: 'end',\r\n modal: true,\r\n dismissible: true,\r\n\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialData: field,\r\n sectionId: this.section().id,\r\n allSections: this.allSections(),\r\n },\r\n });\r\n }\r\n\r\n getFieldColSpan(field: EnrichedFormField): string {\r\n switch (field.width) {\r\n case '100':\r\n return 'col-span-12';\r\n case '50':\r\n return 'col-span-6';\r\n case '25':\r\n return 'col-span-3';\r\n default:\r\n return 'col-span-12';\r\n }\r\n }\r\n\r\n getFieldType(field: EnrichedFormField): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex flex-col\">\r\n <div\r\n class=\"flex justify-between items-center bg-primary py-3 px-3 text-primary-contrast rounded-xl\"\r\n >\r\n <mt-icon\r\n class=\"text-2xl cursor-pointer transition-[rotate]\"\r\n [class.rotate-180]=\"expanded()\"\r\n icon=\"arrow.chevron-down\"\r\n (click)=\"toggleExpanded()\"\r\n ></mt-icon>\r\n\r\n <div class=\"flex gap-3 items-center\">\r\n <span class=\"font-semibold\">\r\n {{ sectionName() }}\r\n </span>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editSection($event)\"\r\n [mtTooltip]=\"t('edit-section')\"\r\n ></mt-icon>\r\n </div>\r\n <span></span>\r\n </div>\r\n @if (expanded()) {\r\n <div\r\n cdkDropList\r\n [id]=\"section().id\"\r\n cdkDropListOrientation=\"mixed\"\r\n [cdkDropListData]=\"fields()\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"grid grid-cols-12 gap-4 relative py-4\"\r\n [class.min-h-27]=\"fields().length === 0\"\r\n >\r\n @for (field of fields(); track field.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"field\"\r\n [cdkDragDisabled]=\"field._pending || field._deleting\"\r\n [class]=\"\r\n getFieldColSpan(field) + ' cursor-grab active:cursor-grabbing'\r\n \"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n [class]=\"\r\n 'h-full min-h-27 bg-black/10 rounded-2xl ' +\r\n getFieldColSpan(field)\r\n \"\r\n ></div>\r\n @if (field._pending) {\r\n <!-- Skeleton for pending field -->\r\n <mt-card class=\"h-full animate-pulse\">\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1 space-y-3\">\r\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n } @else {\r\n <mt-card\r\n class=\"h-full relative\"\r\n [class.opacity-50]=\"field._deleting\"\r\n >\r\n @if (field._deleting) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\r\n >\r\n <div\r\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\r\n ></div>\r\n </div>\r\n }\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1\">\r\n <form [formGroup]=\"getFormGroup(field)\">\r\n <div class=\"flex items-center gap-4 mb-2\">\r\n <div class=\"font-semibold\">\r\n {{ field.name }}\r\n </div>\r\n <!-- <div class=\"flex gap-2\">\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-primary\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editField(field)\"\r\n [mtTooltip]=\"t('edit-field')\"\r\n ></mt-icon>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-red-700\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeField($event, field)\"\r\n [mtTooltip]=\"t('remove-field')\"\r\n ></mt-icon>\r\n </div> -->\r\n </div>\r\n\r\n <mt-dynamic-field\r\n [fieldName]=\"field.name\"\r\n [fieldConfig]=\"{\r\n readonly: true,\r\n type: getFieldType(field),\r\n }\"\r\n />\r\n </form>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.settings-01\"\r\n [tooltip]=\"t('edit-field')\"\r\n [variant]=\"'outlined'\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"editField(field)\"\r\n ></mt-button>\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n [tooltip]=\"t('remove-field')\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"removeField($event, field)\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n } @empty {\r\n <mt-card class=\"absolute inset-0 top-4 h-full\" paddingless>\r\n <div class=\"size-full p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\r\n <span>{{ t(\"drag-from-the-side\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, DynamicFieldConfig } from '@masterteam/components';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport type { EnrichedFormSection } from '../../store/form-builder/form-builder.model';\r\n\r\ntype PreviewMode = 'create' | 'edit';\r\n\r\n@Component({\r\n selector: 'mt-fb-preview-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Tabs],\r\n templateUrl: './fb-preview-form.html',\r\n})\r\nexport class FBPreviewForm {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // Inputs\r\n readonly sections = input<EnrichedFormSection[]>([]);\r\n\r\n // Tab state\r\n readonly activeTab = signal<PreviewMode>('create');\r\n readonly isLoading = signal(false);\r\n readonly tabOptions = [\r\n {\r\n label: this.transloco.translate('formBuilder.create-form'),\r\n value: 'create',\r\n },\r\n { label: this.transloco.translate('formBuilder.edit-form'), value: 'edit' },\r\n ];\r\n\r\n // Form control for dynamic form\r\n readonly formControl = new FormControl();\r\n\r\n constructor() {\r\n // Show skeleton briefly when tab changes to force rebuild\r\n effect(() => {\r\n this.activeTab(); // Track tab changes\r\n this.isLoading.set(true);\r\n setTimeout(() => this.isLoading.set(false), 50);\r\n });\r\n }\r\n\r\n // Convert enriched sections to DynamicFormConfig based on active tab\r\n readonly formConfig = computed<DynamicFormConfig>(() => {\r\n const sections = this.sections();\r\n const mode = this.activeTab();\r\n\r\n return {\r\n sections: sections\r\n .map((section, sectionIndex) => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\r\n\r\n // Filter fields based on mode\r\n const visibleFields = section.fields.filter((field) => {\r\n if (mode === 'create') {\r\n return !field.hiddenInCreation;\r\n } else {\r\n return !field.hiddenInEditForm;\r\n }\r\n });\r\n\r\n return {\r\n key: section.id,\r\n label: sectionName,\r\n type: 'header' as const,\r\n columns: 12,\r\n order: section.order ?? sectionIndex,\r\n fields: visibleFields.map((field, fieldIndex) => {\r\n const colSpan = this.getColSpan(field.width);\r\n\r\n return {\r\n key: `field_${field.propertyId}`,\r\n label: field.name,\r\n type: this.mapFieldType(field.type),\r\n colSpan,\r\n order: field.order ?? fieldIndex,\r\n placeholder: field.name,\r\n } as DynamicFieldConfig;\r\n }),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0), // Hide empty sections\r\n };\r\n });\r\n\r\n /**\r\n * Map property view type to dynamic form field type\r\n */\r\n private mapFieldType(viewType: string): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[viewType] ?? 'text';\r\n }\r\n\r\n /**\r\n * Convert field width to colSpan\r\n */\r\n private getColSpan(width: string): number {\r\n const widthMap: Record<string, number> = {\r\n '25': 3,\r\n '50': 6,\r\n '100': 12,\r\n };\r\n\r\n return widthMap[width] ?? 12;\r\n }\r\n\r\n onClose(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <!-- Tabs for Create/Edit mode -->\r\n <div class=\"flex justify-center mb-4\">\r\n <mt-tabs [options]=\"tabOptions\" [(active)]=\"activeTab\"></mt-tabs>\r\n </div>\r\n\r\n <div class=\"h-full overflow-y-auto px-3 pb-10\">\r\n @if (isLoading()) {\r\n <div class=\"space-y-4 animate-pulse\">\r\n <div class=\"h-6 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded w-2/3\"></div>\r\n </div>\r\n } @else if (formConfig().sections.length > 0) {\r\n <mt-dynamic-form\r\n [formConfig]=\"formConfig()\"\r\n [formControl]=\"formControl\"\r\n >\r\n </mt-dynamic-form>\r\n } @else {\r\n <div\r\n class=\"flex justify-center items-center h-64 text-muted-color text-lg\"\r\n >\r\n {{ t(\"no-fields-visible\") }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { Component, computed, inject, signal, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TabsModule } from 'primeng/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { FBSection } from './fb-section/fb-section';\r\nimport type {\r\n EnrichedFormSection,\r\n EnrichedFormField,\r\n FieldWidth,\r\n PropertyItem,\r\n} from '../store/form-builder/form-builder.model';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FBSectionForm } from './fb-section-form/fb-section-form';\r\nimport { FBPreviewForm } from './fb-preview-form/fb-preview-form';\r\nimport { FormBuilderFacade } from '../store/form-builder/form-builder.facade';\r\nimport { Icon } from '@masterteam/icons';\r\n\r\n@Component({\r\n selector: 'mt-form-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TabsModule,\r\n SkeletonModule,\r\n Button,\r\n Card,\r\n TranslocoDirective,\r\n FBSection,\r\n DragDropModule,\r\n Icon,\r\n ],\r\n templateUrl: './form-builder.html',\r\n styleUrl: './form-builder.scss',\r\n})\r\nexport class FormBuilder {\r\n private readonly modalService = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly translocoService = inject(TranslocoService);\r\n protected readonly facade = inject(FormBuilderFacade);\r\n\r\n private dialogRef: any;\r\n\r\n // Local UI state\r\n readonly activeTab = signal<string>('system');\r\n\r\n // State from facade\r\n readonly sections = this.facade.sections;\r\n readonly properties = this.facade.properties;\r\n readonly isLoading = this.facade.isLoadingFormConfiguration;\r\n readonly error = this.facade.formConfigurationError;\r\n\r\n // Properties map for enrichment\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<number, PropertyItem>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.id, prop);\r\n }\r\n return map;\r\n });\r\n\r\n // Enrich sections with property data for UI display\r\n readonly enrichedSections = computed<EnrichedFormSection[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n\r\n return sections.map((section) => ({\r\n ...section,\r\n fields: section.fields.map((field): EnrichedFormField => {\r\n const prop = propsMap.get(field.propertyId);\r\n const propName = prop?.name;\r\n const name =\r\n typeof propName === 'string'\r\n ? propName\r\n : (propName?.[lang] ??\r\n propName?.['en'] ??\r\n `Property ${field.propertyId}`);\r\n\r\n return {\r\n ...field,\r\n name,\r\n type: prop?.viewType || 'text',\r\n data: prop,\r\n };\r\n }),\r\n }));\r\n });\r\n\r\n // Available properties for toolbox tabs\r\n readonly availableTabs = computed(() => {\r\n const tabs: Array<{\r\n id: string;\r\n title: string;\r\n properties: PropertyItem[];\r\n }> = [];\r\n const usedPropertyIds = new Set(\r\n this.sections().flatMap((s) => s.fields.map((f) => f.propertyId)),\r\n );\r\n\r\n const availableProps = this.properties().filter(\r\n (p) => !usedPropertyIds.has(p.id),\r\n );\r\n\r\n const systemProps = availableProps.filter((p) => p['isSystem']);\r\n const customProps = availableProps.filter((p) => !p['isSystem']);\r\n\r\n if (systemProps.length > 0) {\r\n tabs.push({ id: 'system', title: 'System', properties: systemProps });\r\n }\r\n if (customProps.length > 0) {\r\n tabs.push({ id: 'custom', title: 'Custom', properties: customProps });\r\n }\r\n\r\n return tabs;\r\n });\r\n\r\n constructor() {\r\n // Update active tab when tabs change\r\n effect(() => {\r\n const tabs = this.availableTabs();\r\n const currentTab = this.activeTab();\r\n if (tabs.length > 0 && !tabs.some((t) => t.id === currentTab)) {\r\n this.activeTab.set(tabs[0].id);\r\n }\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop<EnrichedFormField[] | PropertyItem[]>): void {\r\n const targetSectionId = event.container.id;\r\n\r\n if (event.previousContainer === event.container) {\r\n // Reordering within the same section\r\n const fields = [...(event.container.data as EnrichedFormField[])];\r\n const [movedField] = fields.splice(event.previousIndex, 1);\r\n fields.splice(event.currentIndex, 0, movedField);\r\n\r\n // Build bulk reorder payload with new order values\r\n const reorderPayload = fields.map((field, index) => ({\r\n id: field.id,\r\n order: index,\r\n }));\r\n\r\n this.facade.reorderFields(targetSectionId, reorderPayload);\r\n } else if (event.previousContainer.id.startsWith('toolbox-')) {\r\n // Adding from toolbox\r\n const propertyItem = event.item.data as PropertyItem;\r\n this.facade.addField(targetSectionId, {\r\n propertyId: propertyItem.id,\r\n width: '100' as FieldWidth,\r\n order: event.currentIndex,\r\n hiddenInCreation: false,\r\n });\r\n } else {\r\n // Moving between sections\r\n const sourceSectionId = event.previousContainer.id;\r\n const field = event.item.data as EnrichedFormField;\r\n this.facade.moveField(sourceSectionId, field.id, {\r\n targetSectionId,\r\n order: event.currentIndex,\r\n });\r\n }\r\n }\r\n\r\n addSection(): void {\r\n this.dialogRef = this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.add-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sectionsCount: this.sections().length,\r\n },\r\n });\r\n }\r\n\r\n openPreview(): void {\r\n this.dialogRef = this.modalService.openModal(FBPreviewForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.preview'),\r\n styleClass: '!w-[79%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sections: this.enrichedSections(),\r\n },\r\n });\r\n }\r\n\r\n resetFormConfiguration(): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n acceptButtonStyleClass: 'p-button-danger',\r\n accept: () => {\r\n this.facade.resetFormConfiguration();\r\n },\r\n });\r\n }\r\n\r\n noReturnPredicate = (): boolean => false;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 p-4 [&_.cdk-drag-placeholder]:hidden h-full overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n All {{ tab.title }} items are in use\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/*\r\n * Public API Surface of form-builder\r\n */\r\n\r\nexport * from './lib/form-builder';\r\nexport * from './store/form-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-form-builder.mjs","sources":["../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.actions.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.model.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.state.ts","../../../../packages/masterteam/form-builder/src/store/form-builder/form-builder.facade.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/condition-constants.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-conditions/fb-field-conditions.html","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-field-form/fb-field-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section-form/fb-section-form.html","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.ts","../../../../packages/masterteam/form-builder/src/lib/fb-section/fb-section.html","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.ts","../../../../packages/masterteam/form-builder/src/lib/fb-preview-form/fb-preview-form.html","../../../../packages/masterteam/form-builder/src/lib/form-builder.ts","../../../../packages/masterteam/form-builder/src/lib/form-builder.html","../../../../packages/masterteam/form-builder/src/public-api.ts","../../../../packages/masterteam/form-builder/src/masterteam-form-builder.ts"],"sourcesContent":["import type {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n} from './form-builder.model';\r\n\r\n// ============================================================================\r\n// Module Configuration Actions\r\n// ============================================================================\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[FormBuilder] Set Module Info';\r\n constructor(\r\n public moduleType: string,\r\n public moduleId: string | number,\r\n public parentModuleType?: string,\r\n public parentModuleId?: string | number,\r\n public parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class ResetFormBuilderState {\r\n static readonly type = '[FormBuilder] Reset State';\r\n}\r\n\r\nexport class SetProperties {\r\n static readonly type = '[FormBuilder] Set Properties';\r\n constructor(public properties: PropertyItem[]) {}\r\n}\r\n\r\n// ============================================================================\r\n// Form Configuration Actions\r\n// ============================================================================\r\n\r\nexport class GetFormConfiguration {\r\n static readonly type = '[FormBuilder] Get Form Configuration';\r\n}\r\n\r\nexport class ResetFormConfiguration {\r\n static readonly type = '[FormBuilder] Reset Form Configuration';\r\n}\r\n\r\n// ============================================================================\r\n// Section Actions\r\n// ============================================================================\r\n\r\nexport class AddSection {\r\n static readonly type = '[FormBuilder] Add Section';\r\n constructor(public payload: AddSectionPayload) {}\r\n}\r\n\r\nexport class UpdateSection {\r\n static readonly type = '[FormBuilder] Update Section';\r\n constructor(\r\n public sectionId: string,\r\n public payload: UpdateSectionPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteSection {\r\n static readonly type = '[FormBuilder] Delete Section';\r\n constructor(public sectionId: string) {}\r\n}\r\n\r\n// ============================================================================\r\n// Field Actions\r\n// ============================================================================\r\n\r\nexport class AddField {\r\n static readonly type = '[FormBuilder] Add Field';\r\n constructor(\r\n public sectionId: string,\r\n public payload: AddFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class UpdateField {\r\n static readonly type = '[FormBuilder] Update Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: UpdateFieldPayload,\r\n ) {}\r\n}\r\n\r\nexport class DeleteField {\r\n static readonly type = '[FormBuilder] Delete Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n ) {}\r\n}\r\n\r\nexport class ReorderFields {\r\n static readonly type = '[FormBuilder] Reorder Fields';\r\n constructor(\r\n public sectionId: string,\r\n public payload: ReorderFieldPayload[],\r\n ) {}\r\n}\r\n\r\nexport class MoveField {\r\n static readonly type = '[FormBuilder] Move Field';\r\n constructor(\r\n public sectionId: string,\r\n public fieldId: string,\r\n public payload: MoveFieldPayload,\r\n ) {}\r\n}\r\n","import type { LoadingStateShape } from '@masterteam/components';\r\n\r\n// ============================================================================\r\n// Action Keys Enum\r\n// ============================================================================\r\nexport enum FormBuilderActionKey {\r\n // Form Configuration\r\n GetFormConfiguration = 'getFormConfiguration',\r\n ResetFormConfiguration = 'resetFormConfiguration',\r\n\r\n // Section CRUD\r\n AddSection = 'addSection',\r\n UpdateSection = 'updateSection',\r\n DeleteSection = 'deleteSection',\r\n\r\n // Field CRUD\r\n AddField = 'addField',\r\n UpdateField = 'updateField',\r\n DeleteField = 'deleteField',\r\n MoveField = 'moveField',\r\n ReorderFields = 'reorderFields',\r\n}\r\n\r\n// ============================================================================\r\n// API Models\r\n// ============================================================================\r\n\r\nexport type FieldWidth = '25' | '50' | '100';\r\n\r\nexport interface FormField {\r\n id: string;\r\n sectionId: string;\r\n propertyId: number;\r\n width: FieldWidth;\r\n order: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n _pending?: boolean; // Optimistic: field is being added\r\n _deleting?: boolean; // Optimistic: field is being deleted\r\n}\r\n\r\nexport interface FormSection {\r\n id: string;\r\n name: {\r\n en: string;\r\n ar: string;\r\n };\r\n order: number;\r\n fields: FormField[];\r\n}\r\n\r\nexport interface FormConfiguration {\r\n isActive: boolean;\r\n sections: FormSection[];\r\n}\r\n\r\n// ============================================================================\r\n// Request Payloads\r\n// ============================================================================\r\n\r\nexport interface AddSectionPayload {\r\n name: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface UpdateSectionPayload {\r\n name?: { en: string; ar: string };\r\n order?: number;\r\n}\r\n\r\nexport interface AddFieldPayload {\r\n propertyId: number;\r\n width: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string;\r\n}\r\n\r\nexport interface UpdateFieldPayload {\r\n width?: FieldWidth;\r\n order?: number;\r\n hiddenInCreation?: boolean;\r\n hiddenInEditForm?: boolean;\r\n isRequired?: boolean;\r\n showConditionalDisplayFormula?: boolean;\r\n conditionalDisplayFormula?: string | null;\r\n}\r\n\r\nexport interface MoveFieldPayload {\r\n targetSectionId: string;\r\n order?: number;\r\n}\r\n\r\nexport interface ReorderFieldPayload {\r\n id: string;\r\n order: number;\r\n}\r\n\r\n// ============================================================================\r\n// Property Item (for enrichment)\r\n// ============================================================================\r\nexport interface PropertyItem {\r\n id: number;\r\n name: string | Record<string, string>;\r\n viewType?: string;\r\n [key: string]: any;\r\n}\r\n\r\n// ============================================================================\r\n// Enriched Types (for UI display)\r\n// ============================================================================\r\n\r\n// Enriched field with UI properties (from PropertyItem)\r\nexport interface EnrichedFormField extends FormField {\r\n name: string;\r\n type: string;\r\n data?: any;\r\n}\r\n\r\n// Enriched section for UI display\r\nexport interface EnrichedFormSection extends Omit<FormSection, 'fields'> {\r\n fields: EnrichedFormField[];\r\n}\r\n\r\n// ============================================================================\r\n// State Model\r\n// ============================================================================\r\nexport interface FormBuilderStateModel extends LoadingStateShape<FormBuilderActionKey> {\r\n // Module configuration\r\n moduleType: string | null;\r\n moduleId: string | number | null;\r\n parentModuleType: string | null;\r\n parentModuleId: string | number | null;\r\n parentPath: string;\r\n\r\n // Form data\r\n formConfiguration: FormConfiguration | null;\r\n\r\n // Properties for field enrichment\r\n properties: PropertyItem[];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport {\r\n CrudStateBase,\r\n handleApiRequest,\r\n Response,\r\n} from '@masterteam/components';\r\n\r\nimport {\r\n FormBuilderActionKey,\r\n FormBuilderStateModel,\r\n FormConfiguration,\r\n FormField,\r\n FormSection,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n DeleteField,\r\n DeleteSection,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n UpdateField,\r\n UpdateSection,\r\n} from './form-builder.actions';\r\n\r\n// Default State\r\nconst DEFAULT_STATE: FormBuilderStateModel = {\r\n // Module configuration\r\n moduleType: null,\r\n moduleId: null,\r\n parentModuleType: null,\r\n parentModuleId: null,\r\n parentPath: '',\r\n\r\n // Form data\r\n formConfiguration: null,\r\n\r\n // Properties for field enrichment\r\n properties: [],\r\n\r\n // Loading state (from LoadingStateShape)\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<FormBuilderStateModel>({\r\n name: 'formBuilder',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class FormBuilderState extends CrudStateBase<\r\n FormSection,\r\n FormBuilderStateModel,\r\n FormBuilderActionKey\r\n> {\r\n private http = inject(HttpClient);\r\n private baseUrl = 'formConfigurations';\r\n\r\n // ============================================================================\r\n // Helpers\r\n // ============================================================================\r\n\r\n private getApiPath(state: FormBuilderStateModel): string {\r\n const { parentPath, moduleType, moduleId } = state;\r\n return `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}`;\r\n }\r\n\r\n // ============================================================================\r\n // Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getState(state: FormBuilderStateModel): FormBuilderStateModel {\r\n return state ?? DEFAULT_STATE;\r\n }\r\n\r\n @Selector()\r\n static getFormConfiguration(\r\n state: FormBuilderStateModel,\r\n ): FormConfiguration | null {\r\n return state?.formConfiguration ?? null;\r\n }\r\n\r\n @Selector()\r\n static getSections(state: FormBuilderStateModel): FormSection[] {\r\n return state?.formConfiguration?.sections ?? [];\r\n }\r\n\r\n @Selector()\r\n static getModuleType(state: FormBuilderStateModel): string | null {\r\n return state?.moduleType ?? null;\r\n }\r\n\r\n @Selector()\r\n static getModuleId(state: FormBuilderStateModel): string | number | null {\r\n return state?.moduleId ?? null;\r\n }\r\n\r\n @Selector()\r\n static getProperties(state: FormBuilderStateModel) {\r\n return state?.properties ?? [];\r\n }\r\n\r\n // ============================================================================\r\n // Module Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetModuleInfo,\r\n ) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(ResetFormBuilderState)\r\n resetState(ctx: StateContext<FormBuilderStateModel>) {\r\n ctx.setState(DEFAULT_STATE);\r\n }\r\n\r\n @Action(SetProperties)\r\n setProperties(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: SetProperties,\r\n ) {\r\n ctx.patchState({\r\n properties: action.properties,\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Actions\r\n // ============================================================================\r\n\r\n @Action(GetFormConfiguration)\r\n getFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = this.getApiPath(state);\r\n const req$ = this.http.get<Response<FormConfiguration>>(apiPath);\r\n\r\n return this.load(ctx, {\r\n key: FormBuilderActionKey.GetFormConfiguration,\r\n request$: req$,\r\n updateState: (_state, data) => ({\r\n formConfiguration: data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n @Action(ResetFormConfiguration)\r\n resetFormConfiguration(ctx: StateContext<FormBuilderStateModel>) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/reset`;\r\n const req$ = this.http.delete<Response<FormConfiguration>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ResetFormConfiguration,\r\n request$: req$,\r\n onSuccess: (res, _currentState) => ({\r\n formConfiguration: res.data ?? null,\r\n }),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Section Actions\r\n // ============================================================================\r\n\r\n @Action(AddSection)\r\n addSection(ctx: StateContext<FormBuilderStateModel>, action: AddSection) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections`;\r\n const req$ = this.http.post<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.addOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateSection)\r\n updateSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: UpdateSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.put<Response<FormSection>>(apiPath, action.payload);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.upsertOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteSection)\r\n deleteSection(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: DeleteSection,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}`;\r\n const req$ = this.http.delete<Response<{ id: string }>>(apiPath);\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteSection,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const sections = this.adapter.removeOne(\r\n currentState.formConfiguration?.sections ?? [],\r\n res.data.id,\r\n 'id',\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Field Actions\r\n // ============================================================================\r\n\r\n @Action(AddField)\r\n addField(ctx: StateContext<FormBuilderStateModel>, action: AddField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields`;\r\n const req$ = this.http.post<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Generate temp ID for optimistic update\r\n const tempId = `temp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\r\n const tempField: FormField = {\r\n id: tempId,\r\n sectionId: action.sectionId,\r\n propertyId: action.payload.propertyId,\r\n width: action.payload.width,\r\n order: action.payload.order ?? 0,\r\n hiddenInCreation: action.payload.hiddenInCreation,\r\n _pending: true,\r\n };\r\n\r\n // Optimistically add the temp field\r\n const sectionsWithTemp = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const insertIndex = action.payload.order ?? fields.length;\r\n fields.splice(insertIndex, 0, tempField);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithTemp,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.AddField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const newField = res.data;\r\n // Replace temp field with real field\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === tempId ? newField : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove temp field on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== tempId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateField)\r\n updateField(ctx: StateContext<FormBuilderStateModel>, action: UpdateField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update for order changes\r\n if (action.payload.order !== undefined) {\r\n const newOrder = action.payload.order;\r\n const sections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const fields = [...section.fields];\r\n const currentIndex = fields.findIndex(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (currentIndex !== -1) {\r\n const [movedField] = fields.splice(currentIndex, 1);\r\n fields.splice(newOrder, 0, movedField);\r\n }\r\n return { ...section, fields };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections,\r\n },\r\n });\r\n }\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.UpdateField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n // Update the field but preserve current array order (from optimistic update)\r\n // Don't re-sort by order property as other fields may have stale order values\r\n const updatedFields = section.fields.map((f, index) =>\r\n f.id === updatedField.id\r\n ? { ...updatedField, order: index }\r\n : { ...f, order: index },\r\n );\r\n return {\r\n ...section,\r\n fields: updatedFields,\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error - reload original state\r\n if (action.payload.order !== undefined) {\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n }\r\n return {};\r\n },\r\n });\r\n }\r\n\r\n @Action(DeleteField)\r\n deleteField(ctx: StateContext<FormBuilderStateModel>, action: DeleteField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}`;\r\n const req$ =\r\n this.http.delete<Response<{ id: string; sectionId: string }>>(apiPath);\r\n\r\n // Optimistically mark field as deleting\r\n const sectionsWithDeleting = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: true } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithDeleting,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.DeleteField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const { id: deletedId, sectionId } = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== deletedId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, currentState) => {\r\n // Remove _deleting flag on error\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields.map((f) =>\r\n f.id === action.fieldId ? { ...f, _deleting: false } : f,\r\n ),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(ReorderFields)\r\n reorderFields(\r\n ctx: StateContext<FormBuilderStateModel>,\r\n action: ReorderFields,\r\n ) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/reorder`;\r\n const req$ = this.http.put<Response<{ fields: FormField[] }>>(\r\n apiPath,\r\n action.payload,\r\n );\r\n\r\n // Create order map for optimistic update\r\n const orderMap = new Map(action.payload.map((p) => [p.id, p.order]));\r\n\r\n // Apply optimistic update\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const reorderedFields = section.fields\r\n .map((f) => ({\r\n ...f,\r\n order: orderMap.get(f.id) ?? f.order,\r\n }))\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: reorderedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: optimisticSections,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.ReorderFields,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const updatedFields = res.data.fields;\r\n const fieldMap = new Map(updatedFields.map((f) => [f.id, f]));\r\n\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === action.sectionId) {\r\n const mergedFields = section.fields\r\n .map((f) => fieldMap.get(f.id) ?? f)\r\n .sort((a, b) => a.order - b.order);\r\n return { ...section, fields: mergedFields };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert to original state on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(MoveField)\r\n moveField(ctx: StateContext<FormBuilderStateModel>, action: MoveField) {\r\n const state = ctx.getState();\r\n const apiPath = `${this.getApiPath(state)}/sections/${action.sectionId}/fields/${action.fieldId}/move`;\r\n const req$ = this.http.put<Response<FormField>>(apiPath, action.payload);\r\n\r\n // Apply optimistic update - move field immediately\r\n const sourceSectionId = action.sectionId;\r\n const targetSectionId = action.payload.targetSectionId;\r\n const targetOrder = action.payload.order ?? 0;\r\n\r\n let movedFieldData: FormField | null = null;\r\n const optimisticSections = (state.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n if (section.id === sourceSectionId) {\r\n const fieldToMove = section.fields.find(\r\n (f) => f.id === action.fieldId,\r\n );\r\n if (fieldToMove) {\r\n movedFieldData = { ...fieldToMove, order: targetOrder };\r\n }\r\n return {\r\n ...section,\r\n fields: section.fields.filter((f) => f.id !== action.fieldId),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n\r\n // Add to target section\r\n const sectionsWithMoved = optimisticSections.map((section) => {\r\n if (section.id === targetSectionId && movedFieldData) {\r\n const fields = [...section.fields];\r\n fields.splice(targetOrder, 0, movedFieldData);\r\n return { ...section, fields };\r\n }\r\n return section;\r\n });\r\n\r\n ctx.patchState({\r\n formConfiguration: {\r\n ...state.formConfiguration!,\r\n sections: sectionsWithMoved,\r\n },\r\n });\r\n\r\n return handleApiRequest({\r\n ctx,\r\n key: FormBuilderActionKey.MoveField,\r\n request$: req$,\r\n onSuccess: (res, currentState) => {\r\n const movedField = res.data;\r\n const sections = (currentState.formConfiguration?.sections ?? []).map(\r\n (section) => {\r\n // Update the moved field with server response\r\n if (section.id === targetSectionId) {\r\n return {\r\n ...section,\r\n fields: section.fields\r\n .map((f) => (f.id === movedField.id ? movedField : f))\r\n .sort((a, b) => a.order - b.order),\r\n };\r\n }\r\n return section;\r\n },\r\n );\r\n return {\r\n formConfiguration: {\r\n ...currentState.formConfiguration!,\r\n sections,\r\n },\r\n };\r\n },\r\n onError: (_error, _currentState) => {\r\n // Revert optimistic update on error\r\n return {\r\n formConfiguration: state.formConfiguration,\r\n };\r\n },\r\n });\r\n }\r\n}\r\n","import { computed, Injectable, inject } from '@angular/core';\r\nimport { Store, select } from '@ngxs/store';\r\n\r\nimport {\r\n AddFieldPayload,\r\n AddSectionPayload,\r\n FormBuilderActionKey,\r\n MoveFieldPayload,\r\n PropertyItem,\r\n ReorderFieldPayload,\r\n UpdateFieldPayload,\r\n UpdateSectionPayload,\r\n} from './form-builder.model';\r\nimport {\r\n AddField,\r\n AddSection,\r\n DeleteField,\r\n DeleteSection,\r\n GetFormConfiguration,\r\n MoveField,\r\n ReorderFields,\r\n ResetFormBuilderState,\r\n ResetFormConfiguration,\r\n SetModuleInfo,\r\n SetProperties,\r\n UpdateField,\r\n UpdateSection,\r\n} from './form-builder.actions';\r\nimport { FormBuilderState } from './form-builder.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FormBuilderFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ============================================================================\r\n // State Selectors\r\n // ============================================================================\r\n\r\n private readonly stateSignal = select(FormBuilderState.getState);\r\n\r\n readonly formConfiguration = select(FormBuilderState.getFormConfiguration);\r\n readonly sections = select(FormBuilderState.getSections);\r\n readonly properties = select(FormBuilderState.getProperties);\r\n readonly moduleType = select(FormBuilderState.getModuleType);\r\n readonly moduleId = select(FormBuilderState.getModuleId);\r\n\r\n // ============================================================================\r\n // Loading Signals\r\n // ============================================================================\r\n\r\n readonly isLoadingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.GetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isResettingFormConfiguration = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.ResetFormConfiguration,\r\n ),\r\n );\r\n\r\n readonly isAddingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddSection),\r\n );\r\n\r\n readonly isUpdatingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.UpdateSection,\r\n ),\r\n );\r\n\r\n readonly isDeletingSection = computed(() =>\r\n this.stateSignal().loadingActive.includes(\r\n FormBuilderActionKey.DeleteSection,\r\n ),\r\n );\r\n\r\n readonly isAddingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.AddField),\r\n );\r\n\r\n readonly isUpdatingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.UpdateField),\r\n );\r\n\r\n readonly isDeletingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.DeleteField),\r\n );\r\n\r\n readonly isMovingField = computed(() =>\r\n this.stateSignal().loadingActive.includes(FormBuilderActionKey.MoveField),\r\n );\r\n\r\n // ============================================================================\r\n // Error Signals\r\n // ============================================================================\r\n\r\n readonly formConfigurationError = computed(\r\n () =>\r\n this.stateSignal().errors[FormBuilderActionKey.GetFormConfiguration] ??\r\n null,\r\n );\r\n\r\n readonly sectionError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddSection] ??\r\n errors[FormBuilderActionKey.UpdateSection] ??\r\n errors[FormBuilderActionKey.DeleteSection] ??\r\n null\r\n );\r\n });\r\n\r\n readonly fieldError = computed(() => {\r\n const errors = this.stateSignal().errors;\r\n return (\r\n errors[FormBuilderActionKey.AddField] ??\r\n errors[FormBuilderActionKey.UpdateField] ??\r\n errors[FormBuilderActionKey.DeleteField] ??\r\n errors[FormBuilderActionKey.MoveField] ??\r\n null\r\n );\r\n });\r\n\r\n // ============================================================================\r\n // Module Configuration Dispatchers\r\n // ============================================================================\r\n\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ) {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n resetState() {\r\n return this.store.dispatch(new ResetFormBuilderState());\r\n }\r\n\r\n setProperties(properties: PropertyItem[]) {\r\n return this.store.dispatch(new SetProperties(properties));\r\n }\r\n\r\n // ============================================================================\r\n // Form Configuration Dispatchers\r\n // ============================================================================\r\n\r\n getFormConfiguration() {\r\n return this.store.dispatch(new GetFormConfiguration());\r\n }\r\n\r\n resetFormConfiguration() {\r\n return this.store.dispatch(new ResetFormConfiguration());\r\n }\r\n\r\n // ============================================================================\r\n // Section Dispatchers\r\n // ============================================================================\r\n\r\n addSection(payload: AddSectionPayload) {\r\n return this.store.dispatch(new AddSection(payload));\r\n }\r\n\r\n updateSection(sectionId: string, payload: UpdateSectionPayload) {\r\n return this.store.dispatch(new UpdateSection(sectionId, payload));\r\n }\r\n\r\n deleteSection(sectionId: string) {\r\n return this.store.dispatch(new DeleteSection(sectionId));\r\n }\r\n\r\n // ============================================================================\r\n // Field Dispatchers\r\n // ============================================================================\r\n\r\n addField(sectionId: string, payload: AddFieldPayload) {\r\n return this.store.dispatch(new AddField(sectionId, payload));\r\n }\r\n\r\n updateField(sectionId: string, fieldId: string, payload: UpdateFieldPayload) {\r\n return this.store.dispatch(new UpdateField(sectionId, fieldId, payload));\r\n }\r\n\r\n deleteField(sectionId: string, fieldId: string) {\r\n return this.store.dispatch(new DeleteField(sectionId, fieldId));\r\n }\r\n\r\n reorderFields(sectionId: string, payload: ReorderFieldPayload[]) {\r\n return this.store.dispatch(new ReorderFields(sectionId, payload));\r\n }\r\n\r\n moveField(sectionId: string, fieldId: string, payload: MoveFieldPayload) {\r\n return this.store.dispatch(new MoveField(sectionId, fieldId, payload));\r\n }\r\n}\r\n","/**\r\n * Condition Formula Constants\r\n * Static functions and operators for condition formulas (Show/Hide/Enable/Disable)\r\n */\r\n\r\nimport type {\r\n FunctionCategoryGroup,\r\n OperatorDefinition,\r\n} from '@masterteam/components/formula';\r\n\r\n/**\r\n * Functions for field conditions\r\n */\r\nexport const CONDITION_FUNCTION_CATEGORIES: FunctionCategoryGroup[] = [\r\n {\r\n name: 'Logic',\r\n displayName: 'Field Visibility',\r\n functions: [\r\n {\r\n name: 'SHOW_IF',\r\n category: 'Logic',\r\n description: 'Show this field when condition is true',\r\n signature: 'SHOW_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is visible',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'SHOW_IF(@Status == \"Active\")',\r\n 'SHOW_IF(@Type == \"Custom\")',\r\n ],\r\n },\r\n {\r\n name: 'HIDE_IF',\r\n category: 'Logic',\r\n description: 'Hide this field when condition is true',\r\n signature: 'HIDE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is hidden',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['HIDE_IF(@Status == \"Closed\")', 'HIDE_IF(ISNULL(@Parent))'],\r\n },\r\n {\r\n name: 'DISABLE_IF',\r\n category: 'Logic',\r\n description: 'Disable this field when condition is true',\r\n signature: 'DISABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is disabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'DISABLE_IF(@IsLocked == true)',\r\n 'DISABLE_IF(@Status == \"Approved\")',\r\n ],\r\n },\r\n {\r\n name: 'ENABLE_IF',\r\n category: 'Logic',\r\n description: 'Enable this field when condition is true',\r\n signature: 'ENABLE_IF(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'When true, field is enabled',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: [\r\n 'ENABLE_IF(@Status == \"Draft\")',\r\n 'ENABLE_IF(@CanEdit == true)',\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Aggregation',\r\n displayName: 'Logic Helpers',\r\n functions: [\r\n {\r\n name: 'AND',\r\n category: 'Aggregation',\r\n description: 'Returns true if all conditions are true',\r\n signature: 'AND(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['AND(@Status == \"Active\", @Priority > 0)'],\r\n },\r\n {\r\n name: 'OR',\r\n category: 'Aggregation',\r\n description: 'Returns true if any condition is true',\r\n signature: 'OR(condition1, condition2)',\r\n parameters: [\r\n {\r\n name: 'condition1',\r\n type: 'boolean',\r\n description: 'First condition',\r\n required: true,\r\n },\r\n {\r\n name: 'condition2',\r\n type: 'boolean',\r\n description: 'Second condition',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['OR(@Status == \"Active\", @Status == \"Pending\")'],\r\n },\r\n {\r\n name: 'NOT',\r\n category: 'Aggregation',\r\n description: 'Returns the opposite of the condition',\r\n signature: 'NOT(condition)',\r\n parameters: [\r\n {\r\n name: 'condition',\r\n type: 'boolean',\r\n description: 'The condition to negate',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['NOT(@IsCompleted)'],\r\n },\r\n {\r\n name: 'ISNULL',\r\n category: 'Aggregation',\r\n description: 'Returns true if value is null or empty',\r\n signature: 'ISNULL(value)',\r\n parameters: [\r\n {\r\n name: 'value',\r\n type: 'any',\r\n description: 'The value to check',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['ISNULL(@Description)'],\r\n },\r\n {\r\n name: 'CONTAINS',\r\n category: 'Aggregation',\r\n description: 'Returns true if text contains the search string',\r\n signature: 'CONTAINS(text, search)',\r\n parameters: [\r\n {\r\n name: 'text',\r\n type: 'string',\r\n description: 'The text to search in',\r\n required: true,\r\n },\r\n {\r\n name: 'search',\r\n type: 'string',\r\n description: 'The string to search for',\r\n required: true,\r\n },\r\n ],\r\n returnType: 'boolean',\r\n examples: ['CONTAINS(@Name, \"Project\")'],\r\n },\r\n ],\r\n },\r\n];\r\n\r\n/**\r\n * Operators for conditions\r\n */\r\nexport const CONDITION_OPERATORS: OperatorDefinition[] = [\r\n // Comparison\r\n {\r\n symbol: '==',\r\n name: 'Equal',\r\n type: 'comparison',\r\n description: 'Equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '!=',\r\n name: 'Not Equal',\r\n type: 'comparison',\r\n description: 'Not equal to',\r\n precedence: 3,\r\n },\r\n {\r\n symbol: '>',\r\n name: 'Greater Than',\r\n type: 'comparison',\r\n description: 'Greater than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<',\r\n name: 'Less Than',\r\n type: 'comparison',\r\n description: 'Less than',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '>=',\r\n name: 'Greater or Equal',\r\n type: 'comparison',\r\n description: 'Greater than or equal',\r\n precedence: 4,\r\n },\r\n {\r\n symbol: '<=',\r\n name: 'Less or Equal',\r\n type: 'comparison',\r\n description: 'Less than or equal',\r\n precedence: 4,\r\n },\r\n // Logical\r\n {\r\n symbol: '&&',\r\n name: 'And',\r\n type: 'logical',\r\n description: 'Logical AND',\r\n precedence: 2,\r\n },\r\n {\r\n symbol: '||',\r\n name: 'Or',\r\n type: 'logical',\r\n description: 'Logical OR',\r\n precedence: 1,\r\n },\r\n];\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport {\r\n FormulaEditor,\r\n FormulaToolbar,\r\n SmartBlock,\r\n FormulaToken,\r\n} from '@masterteam/components/formula';\r\nimport {\r\n CONDITION_FUNCTION_CATEGORIES,\r\n CONDITION_OPERATORS,\r\n} from './condition-constants';\r\n\r\n/**\r\n * Field property for condition formula\r\n */\r\nexport interface ConditionFieldProperty {\r\n /** Unique key (used in formula as @key) */\r\n key: string;\r\n /** Display name */\r\n name: string;\r\n /** Field type for hint */\r\n type?: string;\r\n}\r\n\r\n/**\r\n * Field Conditions Dialog\r\n *\r\n * Allows users to define conditional display formulas for form fields.\r\n * Uses FormulaToolbar + FormulaEditor directly for a visual formula editing experience.\r\n */\r\n@Component({\r\n selector: 'mt-fb-field-conditions',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n Button,\r\n FormulaToolbar,\r\n FormulaEditor,\r\n ],\r\n templateUrl: './fb-field-conditions.html',\r\n})\r\nexport class FBFieldConditions implements OnInit {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n\r\n // Inputs\r\n /** Initial formula (JSON string from backend) */\r\n readonly initialFormula = input<string>('');\r\n\r\n /** Available fields from the form builder (other fields that can be referenced) */\r\n readonly availableFields = input<ConditionFieldProperty[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n\r\n // Form control for the formula editor (tokens array)\r\n readonly formulaControl = new FormControl<FormulaToken[]>([]);\r\n\r\n // View child for the editor\r\n private readonly editorRef = viewChild<FormulaEditor>('editor');\r\n\r\n // Condition-specific functions and operators\r\n readonly functionCategories = CONDITION_FUNCTION_CATEGORIES;\r\n readonly operators = CONDITION_OPERATORS;\r\n\r\n /** Extract property keys for toolbar */\r\n readonly propertyKeys = computed(() =>\r\n this.availableFields().map((f) => f.key),\r\n );\r\n\r\n /** Toolbar labels */\r\n readonly toolbarLabels = {\r\n functions: 'Functions',\r\n properties: 'Fields',\r\n operators: 'Operators',\r\n noPropertiesAvailable: 'No fields available',\r\n };\r\n\r\n ngOnInit(): void {\r\n // Parse JSON string to tokens\r\n const formula = this.initialFormula();\r\n if (formula) {\r\n try {\r\n const tokens = JSON.parse(formula) as FormulaToken[];\r\n this.formulaControl.patchValue(tokens);\r\n } catch {\r\n // Invalid JSON, start with empty\r\n }\r\n }\r\n }\r\n\r\n /** Handle block insert from toolbar */\r\n onBlockInsert(block: SmartBlock): void {\r\n const editor = this.editorRef();\r\n if (editor) {\r\n editor.addBlock(block);\r\n }\r\n }\r\n\r\n onSave(): void {\r\n const tokens = this.formulaControl.value ?? [];\r\n const formula = tokens.length > 0 ? JSON.stringify(tokens) : '';\r\n this.ref.close({ saved: true, conditionalDisplayFormula: formula });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close({ saved: false });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10 flex flex-col gap-3\">\r\n <!-- Formula Toolbar -->\r\n <mt-formula-toolbar\r\n [knownProperties]=\"propertyKeys()\"\r\n [functionCategories]=\"functionCategories\"\r\n [operators]=\"operators\"\r\n [labels]=\"toolbarLabels\"\r\n (onBlockInsert)=\"onBlockInsert($event)\"\r\n />\r\n <!-- Formula Editor -->\r\n <mt-formula-editor\r\n #editor\r\n [placeholder]=\"t('build-condition-formula')\"\r\n [formControl]=\"formulaControl\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onCancel()\"\r\n />\r\n <mt-button\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n />\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport {\r\n DynamicFormConfig,\r\n RadioCardsFieldConfig,\r\n} from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n FieldWidth,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport {\r\n FBFieldConditions,\r\n ConditionFieldProperty,\r\n} from '../fb-field-conditions/fb-field-conditions';\r\n\r\n@Component({\r\n selector: 'mt-fb-field-form',\r\n standalone: true,\r\n imports: [\r\n TranslocoDirective,\r\n ReactiveFormsModule,\r\n DynamicForm,\r\n Button,\r\n ToggleField,\r\n ],\r\n templateUrl: './fb-field-form.html',\r\n})\r\nexport class FBFieldForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string>('');\r\n readonly initialData = input<EnrichedFormField | null>(null);\r\n /** All sections with enriched fields (to get available fields for conditions) */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n readonly conditionalDisplayFormula = signal<string>('');\r\n private conditionsDialogRef: any;\r\n\r\n /**\r\n * Compute available fields for condition formula\r\n * Excludes the current field being edited\r\n */\r\n readonly availableFields = computed<ConditionFieldProperty[]>(() => {\r\n const sections = this.allSections();\r\n const currentField = this.initialData();\r\n const fields: ConditionFieldProperty[] = [];\r\n\r\n for (const section of sections) {\r\n for (const field of section.fields) {\r\n // Exclude the current field being edited\r\n if (currentField && field.id === currentField.id) continue;\r\n\r\n fields.push({\r\n key: field.name,\r\n name: field.name,\r\n type: field.type,\r\n });\r\n }\r\n }\r\n\r\n return fields;\r\n });\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly showHideControl = new FormControl(false);\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'isRequired',\r\n label: this.transloco.translate('formBuilder.is-required'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'hiddenInCreation',\r\n label: this.transloco.translate('formBuilder.hidden-in-creation'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n {\r\n key: 'hiddenInEditForm',\r\n label: this.transloco.translate('formBuilder.hidden-in-edit-form'),\r\n type: 'toggle',\r\n toggleShape: 'card',\r\n colSpan: 12,\r\n order: 3,\r\n },\r\n new RadioCardsFieldConfig({\r\n key: 'size',\r\n label: this.transloco.translate('formBuilder.size'),\r\n placeholder: this.transloco.translate('formBuilder.size'),\r\n options: [\r\n { id: 's', name: 'S' },\r\n { id: 'm', name: 'M' },\r\n { id: 'l', name: 'L' },\r\n ],\r\n order: 4,\r\n size: 'small',\r\n }),\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n const widthToSize: Record<string, string> = {\r\n '25': 's',\r\n '50': 'm',\r\n '100': 'l',\r\n };\r\n this.formControl.patchValue({\r\n isRequired: data.isRequired ?? false,\r\n hiddenInCreation: data.hiddenInCreation ?? false,\r\n hiddenInEditForm: data.hiddenInEditForm ?? false,\r\n size: widthToSize[data.width] ?? 'l',\r\n });\r\n // Set show/hide toggle based on existing value\r\n this.showHideControl.patchValue(\r\n data.showConditionalDisplayFormula ?? false,\r\n );\r\n this.conditionalDisplayFormula.set(\r\n data.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n const widthMap: Record<string, FieldWidth> = {\r\n s: '25',\r\n m: '50',\r\n l: '100',\r\n };\r\n\r\n const payload = {\r\n width: widthMap[formValue.size] ?? '100',\r\n hiddenInCreation: formValue.hiddenInCreation ?? false,\r\n hiddenInEditForm: formValue.hiddenInEditForm ?? false,\r\n isRequired: formValue.isRequired ?? false,\r\n showConditionalDisplayFormula: this.showHideControl.value ?? false,\r\n conditionalDisplayFormula: this.showHideControl.value\r\n ? this.conditionalDisplayFormula()\r\n : null,\r\n };\r\n\r\n this.submitting.set(true);\r\n this.facade.updateField(sectionId, field.id, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onSetConditions(): void {\r\n this.conditionsDialogRef = this.modalService.openModal(\r\n FBFieldConditions,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('formBuilder.set-conditions'),\r\n styleClass: '!w-[73%] !absolute ',\r\n position: 'start',\r\n modal: true,\r\n dismissible: true,\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialFormula: this.conditionalDisplayFormula(),\r\n availableFields: this.availableFields(),\r\n },\r\n },\r\n );\r\n\r\n this.conditionsDialogRef.onClose.subscribe(\r\n (result: { saved: boolean; conditionalDisplayFormula?: string }) => {\r\n if (result?.saved) {\r\n this.conditionalDisplayFormula.set(\r\n result.conditionalDisplayFormula ?? '',\r\n );\r\n }\r\n },\r\n );\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const field = this.initialData();\r\n const sectionId = this.sectionId();\r\n\r\n if (!field || !sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteField(sectionId, field.id).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-2 h-full overflow-y-auto pb-10 flex flex-col gap-4\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n\r\n <!-- Show/Hide Toggle with Set Conditions -->\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-description')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n class=\"mt-3\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('set-conditions')\"\r\n size=\"small\"\r\n (onClick)=\"onSetConditions()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (initialData()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import { Component, effect, inject, input, signal } from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\n\r\n@Component({\r\n selector: 'mt-fb-section-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Button],\r\n templateUrl: './fb-section-form.html',\r\n})\r\nexport class FBSectionForm {\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly sectionId = input<string | null>(null);\r\n readonly initialData = input<{ ar: string; en: string } | null>(null);\r\n readonly sectionsCount = input<number>(0);\r\n\r\n // UI State\r\n readonly submitting = signal(false);\r\n readonly deleting = signal(false);\r\n\r\n // Form\r\n readonly formControl = new FormControl();\r\n readonly formConfig: DynamicFormConfig = {\r\n sections: [\r\n {\r\n key: 'section-form',\r\n type: 'none',\r\n columns: 12,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'name-ar',\r\n label: this.transloco.translate('formBuilder.name-ar'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-ar'),\r\n colSpan: 12,\r\n order: 1,\r\n },\r\n {\r\n key: 'name-en',\r\n label: this.transloco.translate('formBuilder.name-en'),\r\n type: 'text',\r\n placeholder: this.transloco.translate('formBuilder.name-en'),\r\n colSpan: 12,\r\n order: 2,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n constructor() {\r\n effect(() => {\r\n const data = this.initialData();\r\n if (data) {\r\n this.formControl.patchValue({\r\n 'name-ar': data.ar,\r\n 'name-en': data.en,\r\n });\r\n }\r\n });\r\n }\r\n\r\n onSave(): void {\r\n if (this.formControl.invalid) return;\r\n\r\n const formValue = this.formControl.value;\r\n const payload = {\r\n name: {\r\n ar: formValue['name-ar'],\r\n en: formValue['name-en'],\r\n },\r\n };\r\n\r\n this.submitting.set(true);\r\n const sectionId = this.sectionId();\r\n\r\n if (sectionId) {\r\n // Update existing section\r\n this.facade.updateSection(sectionId, payload).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n } else {\r\n // Create new section\r\n this.facade\r\n .addSection({ ...payload, order: this.sectionsCount() })\r\n .subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.submitting.set(false),\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close(false);\r\n }\r\n\r\n onDelete(event: Event): void {\r\n const sectionId = this.sectionId();\r\n if (!sectionId) return;\r\n\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.deleting.set(true);\r\n this.facade.deleteSection(sectionId).subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => this.deleting.set(false),\r\n });\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <div class=\"mt-4 h-full overflow-y-auto pb-10\">\r\n <mt-dynamic-form [formConfig]=\"formConfig\" [formControl]=\"formControl\">\r\n </mt-dynamic-form>\r\n </div>\r\n </div>\r\n\r\n <div [class]=\"modalService.footerClass\">\r\n @if (sectionId()) {\r\n <mt-button\r\n [tooltip]=\"t('delete')\"\r\n severity=\"danger\"\r\n outlined\r\n icon=\"general.trash-01\"\r\n [loading]=\"deleting()\"\r\n [disabled]=\"submitting()\"\r\n (onClick)=\"onDelete($event)\"\r\n class=\"me-auto\"\r\n ></mt-button>\r\n }\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n severity=\"secondary\"\r\n [disabled]=\"submitting() || deleting()\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!formControl.valid || deleting()\"\r\n [label]=\"t('save')\"\r\n severity=\"primary\"\r\n [loading]=\"submitting()\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n effect,\r\n} from '@angular/core';\r\nimport type {\r\n EnrichedFormField,\r\n EnrichedFormSection,\r\n} from '../../store/form-builder/form-builder.model';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n CdkDrag,\r\n CdkDragDrop,\r\n CdkDragPlaceholder,\r\n CdkDropList,\r\n} from '@angular/cdk/drag-drop';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { DynamicField } from '@masterteam/forms/dynamic-field';\r\nimport { ReactiveFormsModule, FormGroup, FormControl } from '@angular/forms';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { FormBuilderFacade } from '../../store/form-builder';\r\nimport { FBFieldForm } from '../fb-field-form/fb-field-form';\r\nimport { FBSectionForm } from '../fb-section-form/fb-section-form';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-fb-section',\r\n standalone: true,\r\n imports: [\r\n Button,\r\n Card,\r\n Icon,\r\n CdkDrag,\r\n CdkDropList,\r\n CdkDragPlaceholder,\r\n TranslocoDirective,\r\n DynamicField,\r\n ReactiveFormsModule,\r\n Tooltip,\r\n ],\r\n templateUrl: './fb-section.html',\r\n})\r\nexport class FBSection {\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly modalService = inject(ModalService);\r\n private readonly translocoService = inject(TranslocoService);\r\n private readonly facade = inject(FormBuilderFacade);\r\n\r\n // Inputs\r\n readonly section = input.required<EnrichedFormSection>();\r\n readonly sectionsCount = input<number>(0);\r\n /** All sections - used to get available fields for condition formulas */\r\n readonly allSections = input<EnrichedFormSection[]>([]);\r\n\r\n // Outputs - only keep drag/drop since it needs coordination with parent drop list group\r\n readonly onFieldDrop = output<CdkDragDrop<EnrichedFormField[]>>();\r\n\r\n // Computed\r\n readonly sectionName = computed(() => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const section = this.section();\r\n return section.name[lang] ?? section.name['en'];\r\n });\r\n\r\n readonly fields = computed(() => this.section().fields);\r\n\r\n // UI State\r\n readonly expanded = signal(true);\r\n\r\n // Form groups cache for dynamic fields\r\n private readonly formGroupsCache = new Map<string, FormGroup>();\r\n\r\n constructor() {\r\n // Cleanup stale form groups when fields change\r\n effect(() => {\r\n const currentIds = new Set(this.fields().map((f) => f.id));\r\n for (const id of this.formGroupsCache.keys()) {\r\n if (!currentIds.has(id)) {\r\n this.formGroupsCache.delete(id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n getFormGroup(field: EnrichedFormField): FormGroup {\r\n let fg = this.formGroupsCache.get(field.id);\r\n\r\n if (fg) {\r\n // Check if field name changed\r\n if (!fg.contains(field.name)) {\r\n const oldKey = Object.keys(fg.controls)[0];\r\n const value = oldKey ? fg.get(oldKey)?.value : field.data?.data;\r\n\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(value),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n } else {\r\n fg = new FormGroup({\r\n [field.name]: new FormControl(field.data?.data),\r\n });\r\n this.formGroupsCache.set(field.id, fg);\r\n }\r\n\r\n return fg;\r\n }\r\n\r\n toggleExpanded(): void {\r\n this.expanded.update((v) => !v);\r\n }\r\n\r\n onDrop(event: CdkDragDrop<EnrichedFormField[]>): void {\r\n this.onFieldDrop.emit(event);\r\n }\r\n\r\n editSection(event: Event): void {\r\n event.stopPropagation();\r\n const section = this.section();\r\n\r\n this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.edit-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n modal: true,\r\n dismissible: true,\r\n\r\n inputValues: {\r\n sectionId: section.id,\r\n initialData: section.name,\r\n sectionsCount: this.sectionsCount(),\r\n },\r\n });\r\n }\r\n\r\n removeField(event: Event, field: EnrichedFormField): void {\r\n this.confirmationService.confirmDelete({\r\n event,\r\n type: 'popup',\r\n accept: () => {\r\n this.facade.deleteField(this.section().id, field.id);\r\n },\r\n });\r\n }\r\n\r\n editField(field: EnrichedFormField): void {\r\n this.modalService.openModal(FBFieldForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.field-settings'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none',\r\n position: 'end',\r\n modal: true,\r\n dismissible: true,\r\n\r\n appendTo: '#page-content',\r\n inputValues: {\r\n initialData: field,\r\n sectionId: this.section().id,\r\n allSections: this.allSections(),\r\n },\r\n });\r\n }\r\n\r\n getFieldColSpan(field: EnrichedFormField): string {\r\n switch (field.width) {\r\n case '100':\r\n return 'col-span-12';\r\n case '50':\r\n return 'col-span-6';\r\n case '25':\r\n return 'col-span-3';\r\n default:\r\n return 'col-span-12';\r\n }\r\n }\r\n\r\n getFieldType(field: EnrichedFormField): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[field.type] ?? 'text';\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex flex-col\">\r\n <div\r\n class=\"flex justify-between items-center bg-primary py-3 px-3 text-primary-contrast rounded-xl\"\r\n >\r\n <mt-icon\r\n class=\"text-2xl cursor-pointer transition-[rotate]\"\r\n [class.rotate-180]=\"expanded()\"\r\n icon=\"arrow.chevron-down\"\r\n (click)=\"toggleExpanded()\"\r\n ></mt-icon>\r\n\r\n <div class=\"flex gap-3 items-center\">\r\n <span class=\"font-semibold\">\r\n {{ sectionName() }}\r\n </span>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editSection($event)\"\r\n [mtTooltip]=\"t('edit-section')\"\r\n ></mt-icon>\r\n </div>\r\n <span></span>\r\n </div>\r\n @if (expanded()) {\r\n <div\r\n cdkDropList\r\n [id]=\"section().id\"\r\n cdkDropListOrientation=\"mixed\"\r\n [cdkDropListData]=\"fields()\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"grid grid-cols-12 gap-4 relative py-4\"\r\n [class.min-h-27]=\"fields().length === 0\"\r\n >\r\n @for (field of fields(); track field.id) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"field\"\r\n [cdkDragDisabled]=\"field._pending || field._deleting\"\r\n [class]=\"\r\n getFieldColSpan(field) + ' cursor-grab active:cursor-grabbing'\r\n \"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n [class]=\"\r\n 'h-full min-h-27 bg-black/10 rounded-2xl ' +\r\n getFieldColSpan(field)\r\n \"\r\n ></div>\r\n @if (field._pending) {\r\n <!-- Skeleton for pending field -->\r\n <mt-card class=\"h-full animate-pulse\">\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1 space-y-3\">\r\n <div class=\"h-4 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n <div class=\"h-8 w-8 bg-surface-200 rounded\"></div>\r\n </div>\r\n </div>\r\n </mt-card>\r\n } @else {\r\n <mt-card\r\n class=\"h-full relative\"\r\n [class.opacity-50]=\"field._deleting\"\r\n >\r\n @if (field._deleting) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center bg-white/50 rounded-xl z-10\"\r\n >\r\n <div\r\n class=\"animate-spin h-6 w-6 border-2 border-primary border-t-transparent rounded-full\"\r\n ></div>\r\n </div>\r\n }\r\n <div class=\"flex gap-2\">\r\n <div class=\"flex-1\">\r\n <form [formGroup]=\"getFormGroup(field)\">\r\n <div class=\"flex items-center gap-4 mb-2\">\r\n <div class=\"font-semibold\">\r\n {{ field.name }}\r\n </div>\r\n <!-- <div class=\"flex gap-2\">\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-primary\"\r\n icon=\"general.edit-02\"\r\n (click)=\"editField(field)\"\r\n [mtTooltip]=\"t('edit-field')\"\r\n ></mt-icon>\r\n <mt-icon\r\n class=\"text-lg cursor-pointer text-red-700\"\r\n icon=\"general.trash-01\"\r\n (click)=\"removeField($event, field)\"\r\n [mtTooltip]=\"t('remove-field')\"\r\n ></mt-icon>\r\n </div> -->\r\n </div>\r\n\r\n <mt-dynamic-field\r\n [fieldName]=\"field.name\"\r\n [fieldConfig]=\"{\r\n readonly: true,\r\n type: getFieldType(field),\r\n }\"\r\n />\r\n </form>\r\n </div>\r\n <div class=\"flex flex-col gap-1\">\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.settings-01\"\r\n [tooltip]=\"t('edit-field')\"\r\n [variant]=\"'outlined'\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"editField(field)\"\r\n ></mt-button>\r\n <mt-button\r\n size=\"small\"\r\n icon=\"general.trash-01\"\r\n severity=\"danger\"\r\n [variant]=\"'outlined'\"\r\n [tooltip]=\"t('remove-field')\"\r\n [disabled]=\"field._deleting\"\r\n (onClick)=\"removeField($event, field)\"\r\n ></mt-button>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n } @empty {\r\n <mt-card class=\"absolute inset-0 top-4 h-full\" paddingless>\r\n <div class=\"size-full p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <mt-icon icon=\"editor.move\" class=\"text-3xl\" />\r\n <span>{{ t(\"drag-from-the-side\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { DynamicFormConfig, DynamicFieldConfig } from '@masterteam/components';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport type { EnrichedFormSection } from '../../store/form-builder/form-builder.model';\r\n\r\ntype PreviewMode = 'create' | 'edit';\r\n\r\n@Component({\r\n selector: 'mt-fb-preview-form',\r\n standalone: true,\r\n imports: [TranslocoDirective, ReactiveFormsModule, DynamicForm, Tabs],\r\n templateUrl: './fb-preview-form.html',\r\n})\r\nexport class FBPreviewForm {\r\n protected readonly modalService = inject(ModalService);\r\n private readonly ref = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // Inputs\r\n readonly sections = input<EnrichedFormSection[]>([]);\r\n\r\n // Tab state\r\n readonly activeTab = signal<PreviewMode>('create');\r\n readonly isLoading = signal(false);\r\n readonly tabOptions = [\r\n {\r\n label: this.transloco.translate('formBuilder.create-form'),\r\n value: 'create',\r\n },\r\n { label: this.transloco.translate('formBuilder.edit-form'), value: 'edit' },\r\n ];\r\n\r\n // Form control for dynamic form\r\n readonly formControl = new FormControl();\r\n\r\n constructor() {\r\n // Show skeleton briefly when tab changes to force rebuild\r\n effect(() => {\r\n this.activeTab(); // Track tab changes\r\n this.isLoading.set(true);\r\n setTimeout(() => this.isLoading.set(false), 50);\r\n });\r\n }\r\n\r\n // Convert enriched sections to DynamicFormConfig based on active tab\r\n readonly formConfig = computed<DynamicFormConfig>(() => {\r\n const sections = this.sections();\r\n const mode = this.activeTab();\r\n\r\n return {\r\n sections: sections\r\n .map((section, sectionIndex) => {\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n const sectionName = section.name[lang] ?? section.name['en'] ?? '';\r\n\r\n // Filter fields based on mode\r\n const visibleFields = section.fields.filter((field) => {\r\n if (mode === 'create') {\r\n return !field.hiddenInCreation;\r\n } else {\r\n return !field.hiddenInEditForm;\r\n }\r\n });\r\n\r\n return {\r\n key: section.id,\r\n label: sectionName,\r\n type: 'header' as const,\r\n columns: 12,\r\n order: section.order ?? sectionIndex,\r\n fields: visibleFields.map((field, fieldIndex) => {\r\n const colSpan = this.getColSpan(field.width);\r\n\r\n return {\r\n key: `field_${field.propertyId}`,\r\n label: field.name,\r\n type: this.mapFieldType(field.type),\r\n colSpan,\r\n order: field.order ?? fieldIndex,\r\n placeholder: field.name,\r\n } as DynamicFieldConfig;\r\n }),\r\n };\r\n })\r\n .filter((section) => section.fields.length > 0), // Hide empty sections\r\n };\r\n });\r\n\r\n /**\r\n * Map property view type to dynamic form field type\r\n */\r\n private mapFieldType(viewType: string): string {\r\n const typeMap: Record<string, string> = {\r\n User: 'select',\r\n Text: 'text',\r\n LongText: 'editor-field',\r\n Percentage: 'slider',\r\n Date: 'date',\r\n Currency: 'text',\r\n Number: 'number',\r\n Lookup: 'select',\r\n LookupMultiSelect: 'select',\r\n Checkbox: 'toggle',\r\n InternalModule: 'select',\r\n DynamicList: 'select',\r\n API: 'select',\r\n Time: 'date',\r\n Status: 'select',\r\n Attachment: 'attachment',\r\n EditableListView: 'actionableTable',\r\n LookupLog: 'actionableTable',\r\n LookupMatrix: 'select',\r\n Location: 'select',\r\n };\r\n\r\n return typeMap[viewType] ?? 'text';\r\n }\r\n\r\n /**\r\n * Convert field width to colSpan\r\n */\r\n private getColSpan(width: string): number {\r\n const widthMap: Record<string, number> = {\r\n '25': 3,\r\n '50': 6,\r\n '100': 12,\r\n };\r\n\r\n return widthMap[width] ?? 12;\r\n }\r\n\r\n onClose(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div [class]=\"[modalService.contentClass, 'p-4', 'overflow-y-hidden!']\">\r\n <!-- Tabs for Create/Edit mode -->\r\n <div class=\"flex justify-center mb-4\">\r\n <mt-tabs [options]=\"tabOptions\" [(active)]=\"activeTab\"></mt-tabs>\r\n </div>\r\n\r\n <div class=\"h-full overflow-y-auto px-3 pb-10\">\r\n @if (isLoading()) {\r\n <div class=\"space-y-4 animate-pulse\">\r\n <div class=\"h-6 bg-surface-200 rounded w-1/3\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded\"></div>\r\n <div class=\"h-10 bg-surface-200 rounded w-2/3\"></div>\r\n </div>\r\n } @else if (formConfig().sections.length > 0) {\r\n <mt-dynamic-form\r\n [formConfig]=\"formConfig()\"\r\n [formControl]=\"formControl\"\r\n >\r\n </mt-dynamic-form>\r\n } @else {\r\n <div\r\n class=\"flex justify-center items-center h-64 text-muted-color text-lg\"\r\n >\r\n {{ t(\"no-fields-visible\") }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { Component, computed, inject, signal, effect } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TabsModule } from 'primeng/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { FBSection } from './fb-section/fb-section';\r\nimport type {\r\n EnrichedFormSection,\r\n EnrichedFormField,\r\n FieldWidth,\r\n PropertyItem,\r\n} from '../store/form-builder/form-builder.model';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { FBSectionForm } from './fb-section-form/fb-section-form';\r\nimport { FBPreviewForm } from './fb-preview-form/fb-preview-form';\r\nimport { FormBuilderFacade } from '../store/form-builder/form-builder.facade';\r\nimport { Icon } from '@masterteam/icons';\r\n\r\n@Component({\r\n selector: 'mt-form-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n TabsModule,\r\n SkeletonModule,\r\n Button,\r\n Card,\r\n TextField,\r\n TranslocoDirective,\r\n FBSection,\r\n DragDropModule,\r\n Icon,\r\n ],\r\n templateUrl: './form-builder.html',\r\n styleUrl: './form-builder.scss',\r\n})\r\nexport class FormBuilder {\r\n private readonly modalService = inject(ModalService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly translocoService = inject(TranslocoService);\r\n protected readonly facade = inject(FormBuilderFacade);\r\n\r\n private dialogRef: any;\r\n\r\n // Local UI state\r\n readonly activeTab = signal<string>('system');\r\n readonly searchQuery = signal<string>('');\r\n\r\n // State from facade\r\n readonly sections = this.facade.sections;\r\n readonly properties = this.facade.properties;\r\n readonly isLoading = this.facade.isLoadingFormConfiguration;\r\n readonly error = this.facade.formConfigurationError;\r\n\r\n // Properties map for enrichment\r\n private readonly propertiesMap = computed(() => {\r\n const map = new Map<number, PropertyItem>();\r\n for (const prop of this.properties()) {\r\n map.set(prop.id, prop);\r\n }\r\n return map;\r\n });\r\n\r\n // Enrich sections with property data for UI display\r\n readonly enrichedSections = computed<EnrichedFormSection[]>(() => {\r\n const sections = this.sections();\r\n const propsMap = this.propertiesMap();\r\n const lang = document.documentElement.lang as 'en' | 'ar';\r\n\r\n return sections.map((section) => ({\r\n ...section,\r\n fields: section.fields.map((field): EnrichedFormField => {\r\n const prop = propsMap.get(field.propertyId);\r\n const propName = prop?.name;\r\n const name =\r\n typeof propName === 'string'\r\n ? propName\r\n : (propName?.[lang] ??\r\n propName?.['en'] ??\r\n `Property ${field.propertyId}`);\r\n\r\n return {\r\n ...field,\r\n name,\r\n type: prop?.viewType || 'text',\r\n data: prop,\r\n };\r\n }),\r\n }));\r\n });\r\n\r\n // Available properties for toolbox tabs\r\n readonly availableTabs = computed(() => {\r\n const tabs: Array<{\r\n id: string;\r\n title: string;\r\n properties: PropertyItem[];\r\n }> = [];\r\n const usedPropertyIds = new Set(\r\n this.sections().flatMap((s) => s.fields.map((f) => f.propertyId)),\r\n );\r\n\r\n const availableProps = this.properties().filter(\r\n (p) => !usedPropertyIds.has(p.id),\r\n );\r\n\r\n const systemProps = availableProps.filter((p) => p['isSystem']);\r\n const customProps = availableProps.filter((p) => !p['isSystem']);\r\n\r\n if (systemProps.length > 0) {\r\n tabs.push({ id: 'system', title: 'System', properties: systemProps });\r\n }\r\n if (customProps.length > 0) {\r\n tabs.push({ id: 'custom', title: 'Custom', properties: customProps });\r\n }\r\n\r\n return tabs;\r\n });\r\n\r\n // Filtered properties based on search query\r\n readonly filteredPropertiesByTab = computed(() => {\r\n const query = this.searchQuery().toLowerCase().trim();\r\n const tabs = this.availableTabs();\r\n\r\n if (!query) {\r\n return tabs;\r\n }\r\n\r\n return tabs.map((tab) => ({\r\n ...tab,\r\n properties: tab.properties.filter((prop) => {\r\n const name: any = prop.name;\r\n return name.toLowerCase().includes(query);\r\n }),\r\n }));\r\n });\r\n\r\n constructor() {\r\n // Update active tab when tabs change\r\n effect(() => {\r\n const tabs = this.availableTabs();\r\n const currentTab = this.activeTab();\r\n if (tabs.length > 0 && !tabs.some((t) => t.id === currentTab)) {\r\n this.activeTab.set(tabs[0].id);\r\n }\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop<EnrichedFormField[] | PropertyItem[]>): void {\r\n const targetSectionId = event.container.id;\r\n\r\n if (event.previousContainer === event.container) {\r\n // Reordering within the same section\r\n const fields = [...(event.container.data as EnrichedFormField[])];\r\n const [movedField] = fields.splice(event.previousIndex, 1);\r\n fields.splice(event.currentIndex, 0, movedField);\r\n\r\n // Build bulk reorder payload with new order values\r\n const reorderPayload = fields.map((field, index) => ({\r\n id: field.id,\r\n order: index,\r\n }));\r\n\r\n this.facade.reorderFields(targetSectionId, reorderPayload);\r\n } else if (event.previousContainer.id.startsWith('toolbox-')) {\r\n // Adding from toolbox\r\n const propertyItem = event.item.data as PropertyItem;\r\n this.facade.addField(targetSectionId, {\r\n propertyId: propertyItem.id,\r\n width: '100' as FieldWidth,\r\n order: event.currentIndex,\r\n hiddenInCreation: false,\r\n });\r\n } else {\r\n // Moving between sections\r\n const sourceSectionId = event.previousContainer.id;\r\n const field = event.item.data as EnrichedFormField;\r\n this.facade.moveField(sourceSectionId, field.id, {\r\n targetSectionId,\r\n order: event.currentIndex,\r\n });\r\n }\r\n }\r\n\r\n addSection(): void {\r\n this.dialogRef = this.modalService.openModal(FBSectionForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.add-section'),\r\n height: '20vw',\r\n styleClass: '!w-[27%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: '#page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sectionsCount: this.sections().length,\r\n },\r\n });\r\n }\r\n\r\n openPreview(): void {\r\n this.dialogRef = this.modalService.openModal(FBPreviewForm, 'drawer', {\r\n header: this.translocoService.translate('formBuilder.preview'),\r\n styleClass: '!w-[79%] !absolute !shadow-none ',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissible: true,\r\n inputValues: {\r\n sections: this.enrichedSections(),\r\n },\r\n });\r\n }\r\n\r\n resetFormConfiguration(): void {\r\n this.confirmationService.confirm({\r\n type: 'dialog',\r\n acceptButtonStyleClass: 'p-button-danger',\r\n accept: () => {\r\n this.facade.resetFormConfiguration();\r\n },\r\n });\r\n }\r\n\r\n noReturnPredicate = (): boolean => false;\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'formBuilder'\">\r\n <div class=\"flex gap-7 h-full w-full overflow-hidden\" cdkDropListGroup>\r\n <!-- Properties Sidebar -->\r\n <mt-card class=\"w-1/5 h-full flex flex-col overflow-hidden\">\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <h3 class=\"text-xl font-semibold px-4 pt-5\">\r\n {{ t(\"form-elements\") }}\r\n </h3>\r\n\r\n @if (properties().length === 0) {\r\n @if (isLoading()) {\r\n <!-- Properties Loading Skeleton -->\r\n <div class=\"flex gap-4 py-3 px-5 mt-4\">\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n <p-skeleton height=\"2rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"py-4 px-5 space-y-5\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"3rem\" styleClass=\"rounded-lg\" />\r\n }\r\n </div>\r\n } @else {\r\n <!-- No Properties State -->\r\n <div class=\"flex-1 flex items-center justify-center p-4\">\r\n <p class=\"text-sm font-semibold text-gray-500\">\r\n {{ t(\"no-data-found\") }}\r\n </p>\r\n </div>\r\n }\r\n } @else {\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs\"\r\n class=\"flex flex-1 flex-col min-h-0\"\r\n >\r\n <p-tablist class=\"shrink-0\">\r\n @for (tab of availableTabs(); track tab.id) {\r\n <p-tab [value]=\"tab.id\">{{ tab.title | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels\r\n class=\"!bg-transparent !p-0 !pb-3 flex-1 overflow-hidden\"\r\n >\r\n @for (tab of filteredPropertiesByTab(); track tab.id) {\r\n <p-tabpanel [value]=\"tab.id\" class=\"h-full flex flex-col\">\r\n <!-- Node List -->\r\n <div\r\n class=\"space-y-4 px-4 pb-4 [&_.cdk-drag-placeholder]:hidden flex-1 overflow-y-auto\"\r\n [id]=\"'toolbox-' + tab.id\"\r\n cdkDropList\r\n cdkDropListSortingDisabled\r\n [cdkDropListData]=\"tab.properties\"\r\n [cdkDropListEnterPredicate]=\"noReturnPredicate\"\r\n >\r\n <!-- Search Field (Sticky) -->\r\n <div class=\"sticky top-0 bg-surface-0 mb-0 py-3 pb-2 mb-1\">\r\n <mt-text-field\r\n [placeholder]=\"t('search-properties')\"\r\n [(ngModel)]=\"searchQuery\"\r\n icon=\"general.search-lg\"\r\n />\r\n </div>\r\n @for (node of tab.properties; track $index) {\r\n <div\r\n cdkDrag\r\n [cdkDragData]=\"node\"\r\n class=\"group cursor-move select-none flex items-center gap-3 py-3 px-3 rounded-lg border border-dashed border-surface-300 hover:bg-emphasis dark:border-surface-500 transition-colors\"\r\n >\r\n <div\r\n *cdkDragPlaceholder\r\n class=\"col-span-12 min-h-27 w-full rounded-2xl bg-black/10 z-1\"\r\n ></div>\r\n <span class=\"flex-1 text-base font-medium\">{{\r\n node.name\r\n }}</span>\r\n\r\n <mt-icon\r\n class=\"text-lg\"\r\n icon=\"general.menu-05\"\r\n ></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (tab.properties.length === 0) {\r\n <div class=\"py-8 text-center text-muted-color\">\r\n <p class=\"text-sm\">\r\n @if (searchQuery()) {\r\n {{ t(\"no-data-found\") }}\r\n } @else {\r\n All {{ tab.title }} items are in use\r\n }\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n }\r\n </ng-template>\r\n </mt-card>\r\n\r\n <!-- Main Canvas Area -->\r\n <div class=\"flex flex-1 gap-4 h-full overflow-y-auto\">\r\n <div class=\"flex flex-col w-2/3 gap-4 h-full\">\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 flex items-center gap-3\">\r\n <mt-button\r\n icon=\"layout.layout-top\"\r\n [label]=\"t('add-section')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"addSection()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"general.eye\"\r\n [label]=\"t('preview')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"openPreview()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n <mt-button\r\n icon=\"finance.credit-card-plus\"\r\n [label]=\"t('reset')\"\r\n variant=\"outlined\"\r\n severity=\"primary\"\r\n (onClick)=\"resetFormConfiguration()\"\r\n [disabled]=\"isLoading()\"\r\n ></mt-button>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n\r\n @if (isLoading()) {\r\n <!-- Form Loading Skeleton -->\r\n @for (i of [1, 2]; track i) {\r\n <mt-card>\r\n <ng-template #headless>\r\n <div class=\"p-4 space-y-4\">\r\n <!-- Section header skeleton -->\r\n <div class=\"flex items-center justify-between\">\r\n <p-skeleton width=\"10rem\" height=\"1.5rem\" />\r\n <div class=\"flex gap-2\">\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n <p-skeleton width=\"2rem\" height=\"2rem\" shape=\"circle\" />\r\n </div>\r\n </div>\r\n <!-- Fields skeleton -->\r\n <div class=\"grid grid-cols-12 gap-4\">\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-6\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n <div class=\"col-span-12\">\r\n <p-skeleton height=\"4rem\" styleClass=\"rounded-lg\" />\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </mt-card>\r\n }\r\n } @else {\r\n @for (section of enrichedSections(); track section.id) {\r\n <mt-fb-section\r\n [section]=\"section\"\r\n [sectionsCount]=\"enrichedSections().length\"\r\n [allSections]=\"enrichedSections()\"\r\n (onFieldDrop)=\"drop($event)\"\r\n >\r\n </mt-fb-section>\r\n } @empty {\r\n <mt-card>\r\n <div class=\"h-27 p-4\">\r\n <div\r\n class=\"flex justify-center items-center gap-4 h-full border-1 border-primary rounded-xl bg-primary-50 text-primary\"\r\n >\r\n <span>{{ t(\"no-section\") }}</span>\r\n </div>\r\n </div>\r\n </mt-card>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>\r\n","/*\r\n * Public API Surface of form-builder\r\n */\r\n\r\nexport * from './lib/form-builder';\r\nexport * from './store/form-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/form-builder",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/form-builder",
|
|
6
6
|
"linkDirectory": true,
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"rxjs": "^7.8.2",
|
|
20
20
|
"tailwindcss": "^4.1.17",
|
|
21
21
|
"tailwindcss-primeui": "^0.6.1",
|
|
22
|
-
"@masterteam/properties": "^0.0.
|
|
23
|
-
"@masterteam/forms": "^0.0.
|
|
24
|
-
"@masterteam/
|
|
25
|
-
"@masterteam/
|
|
22
|
+
"@masterteam/properties": "^0.0.28",
|
|
23
|
+
"@masterteam/forms": "^0.0.34",
|
|
24
|
+
"@masterteam/icons": "^0.0.12",
|
|
25
|
+
"@masterteam/components": "^0.0.79"
|
|
26
26
|
},
|
|
27
27
|
"sideEffects": false,
|
|
28
28
|
"exports": {
|
|
@@ -154,6 +154,7 @@ declare class FormBuilder {
|
|
|
154
154
|
protected readonly facade: FormBuilderFacade;
|
|
155
155
|
private dialogRef;
|
|
156
156
|
readonly activeTab: _angular_core.WritableSignal<string>;
|
|
157
|
+
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
157
158
|
readonly sections: _angular_core.Signal<_masterteam_form_builder.FormSection[]>;
|
|
158
159
|
readonly properties: _angular_core.Signal<PropertyItem[]>;
|
|
159
160
|
readonly isLoading: _angular_core.Signal<boolean>;
|
|
@@ -165,6 +166,11 @@ declare class FormBuilder {
|
|
|
165
166
|
title: string;
|
|
166
167
|
properties: PropertyItem[];
|
|
167
168
|
}[]>;
|
|
169
|
+
readonly filteredPropertiesByTab: _angular_core.Signal<{
|
|
170
|
+
id: string;
|
|
171
|
+
title: string;
|
|
172
|
+
properties: PropertyItem[];
|
|
173
|
+
}[]>;
|
|
168
174
|
constructor();
|
|
169
175
|
drop(event: CdkDragDrop<EnrichedFormField[] | PropertyItem[]>): void;
|
|
170
176
|
addSection(): void;
|