@masterteam/client-components 0.0.39 → 0.0.40
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.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! tailwindcss v4.
|
|
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-border-style:solid;--tw-font-weight:initial;--tw-tracking: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;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@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-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-900:oklch(21% .034 264.665);--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-semibold:600;--tracking-wide:.025em;--radius-lg:.5rem;--radius-xl:.75rem;--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{.collapse{visibility:collapse}.visible{visibility:visible}.start{inset-inline-start:var(--spacing)}.col-span-1{grid-column:span 1/span 1}.m-0{margin:calc(var(--spacing) * 0)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.min-h-\[20rem\]{min-height:20rem}.min-h-\[22rem\]{min-height:22rem}.min-h-\[420px\]{min-height:420px}.w-1{width:calc(var(--spacing) * 1)}.w-28{width:calc(var(--spacing) * 28)}.w-40{width:calc(var(--spacing) * 40)}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-red-200{border-color:var(--color-red-200)}.border-surface-200{border-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.border-surface-200{border-color:color-mix(in srgb, var(--p-surface-200) 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)}}.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-red-50{background-color:var(--color-red-50)}.bg-surface-50{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.bg-surface-50{background-color:color-mix(in srgb, var(--p-surface-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)}}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.text-center{text-align:center}.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-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-900{color:var(--color-gray-900)}.text-primary-700{color:var(--p-primary-700)}@supports (color:color-mix(in lab, red, red)){.text-primary-700{color:color-mix(in srgb, var(--p-primary-700) calc(100% * 1), transparent)}}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-surface-500{color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.text-surface-500{color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.uppercase{text-transform:uppercase}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.dark\:border-surface-700:where(.dark,.dark *){border-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-700:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:bg-primary-950:where(.dark,.dark *){background-color:var(--p-primary-950)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-950:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-950) calc(100% * 1), transparent)}}.dark\:bg-surface-900:where(.dark,.dark *){background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.dark\:text-primary-300:where(.dark,.dark *){color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
|
|
1
|
+
/*! tailwindcss v4.3.0 | 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-border-style:solid;--tw-font-weight:initial;--tw-tracking: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;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@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-50:oklch(97.1% .013 17.38);--color-red-200:oklch(88.5% .062 18.334);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-900:oklch(21% .034 264.665);--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-semibold:600;--tracking-wide:.025em;--radius-lg:.5rem;--radius-xl:.75rem;--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{.collapse{visibility:collapse}.visible{visibility:visible}.col-span-1{grid-column:span 1/span 1}.m-0{margin:calc(var(--spacing) * 0)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.min-h-\[20rem\]{min-height:20rem}.min-h-\[22rem\]{min-height:22rem}.min-h-\[420px\]{min-height:420px}.w-1{width:calc(var(--spacing) * 1)}.w-28{width:calc(var(--spacing) * 28)}.w-40{width:calc(var(--spacing) * 40)}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-red-200{border-color:var(--color-red-200)}.border-surface-200{border-color:var(--p-surface-200)}@supports (color:color-mix(in lab, red, red)){.border-surface-200{border-color:color-mix(in srgb, var(--p-surface-200) 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)}}.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-red-50{background-color:var(--color-red-50)}.bg-surface-50{background-color:var(--p-surface-50)}@supports (color:color-mix(in lab, red, red)){.bg-surface-50{background-color:color-mix(in srgb, var(--p-surface-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)}}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.text-center{text-align:center}.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-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-900{color:var(--color-gray-900)}.text-primary-700{color:var(--p-primary-700)}@supports (color:color-mix(in lab, red, red)){.text-primary-700{color:color-mix(in srgb, var(--p-primary-700) calc(100% * 1), transparent)}}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-surface-500{color:var(--p-surface-500)}@supports (color:color-mix(in lab, red, red)){.text-surface-500{color:color-mix(in srgb, var(--p-surface-500) calc(100% * 1), transparent)}}.uppercase{text-transform:uppercase}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@media (min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:80rem){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.dark\:border-surface-700:where(.dark,.dark *){border-color:var(--p-surface-700)}@supports (color:color-mix(in lab, red, red)){.dark\:border-surface-700:where(.dark,.dark *){border-color:color-mix(in srgb, var(--p-surface-700) calc(100% * 1), transparent)}}.dark\:bg-primary-950:where(.dark,.dark *){background-color:var(--p-primary-950)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-950:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-primary-950) calc(100% * 1), transparent)}}.dark\:bg-surface-900:where(.dark,.dark *){background-color:var(--p-surface-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-surface-900:where(.dark,.dark *){background-color:color-mix(in srgb, var(--p-surface-900) calc(100% * 1), transparent)}}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--p-primary-300)}@supports (color:color-mix(in lab, red, red)){.dark\:text-primary-300:where(.dark,.dark *){color:color-mix(in srgb, var(--p-primary-300) calc(100% * 1), transparent)}}}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
|
|
@@ -19,8 +19,7 @@ import { DashboardViewer } from '@masterteam/dashboard-builder';
|
|
|
19
19
|
class ClientListApiService {
|
|
20
20
|
http = inject(HttpClient);
|
|
21
21
|
runtimeFetchBaseUrl = 'fetch/query';
|
|
22
|
-
|
|
23
|
-
informativeBaseUrl = 'Modules';
|
|
22
|
+
informativeBaseUrl = 'LevelData/modules';
|
|
24
23
|
getRows(contextKey, instanceId, query, filters = []) {
|
|
25
24
|
return this.resolveTablePropertyKeys(contextKey, query).pipe(switchMap((propertyKeys) => this.queryRuntime({
|
|
26
25
|
contextKey,
|
|
@@ -55,7 +54,7 @@ class ClientListApiService {
|
|
|
55
54
|
return of(undefined);
|
|
56
55
|
}
|
|
57
56
|
return this.http
|
|
58
|
-
.get(
|
|
57
|
+
.get(`LevelData/levels/${context.levelId}/modules/${context.moduleId}/table-display-settings/catalog?surfaceKey=table`)
|
|
59
58
|
.pipe(map((response) => this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? [])));
|
|
60
59
|
}
|
|
61
60
|
buildInstanceFilters(instanceId) {
|
|
@@ -862,18 +861,14 @@ class ClientListCardsView {
|
|
|
862
861
|
const filterKeys = Object.keys(filters);
|
|
863
862
|
return cards.filter((card, index) => {
|
|
864
863
|
const row = this.rowRepresentations()[index] ?? {};
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
return String(display).toLowerCase().includes(term);
|
|
874
|
-
});
|
|
875
|
-
if (!matches)
|
|
876
|
-
return false;
|
|
864
|
+
// Row values are EntityData envelopes (`{ name, value, viewType, ... }`),
|
|
865
|
+
// identical to the shape mt-table builds. Reuse its recursive matcher so
|
|
866
|
+
// the cards view searches every nested property value exactly like the
|
|
867
|
+
// table view. The old shallow `resolveDisplayValue(value)` returned the
|
|
868
|
+
// entity's `name` (field label) instead of its `value`, so every
|
|
869
|
+
// value-based search missed and the grid was always "not found".
|
|
870
|
+
if (term && !TableValueResolver.matchesSearchTerm(row, term)) {
|
|
871
|
+
return false;
|
|
877
872
|
}
|
|
878
873
|
if (filterKeys.length === 0)
|
|
879
874
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-client-components-client-list.mjs","sources":["../../../../packages/masterteam/client-components/client-list/services/client-list-api.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-state.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-runtime-actions.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-toolbar.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.html","../../../../packages/masterteam/client-components/client-list/client-list.ts","../../../../packages/masterteam/client-components/client-list/client-list.html","../../../../packages/masterteam/client-components/client-list/masterteam-client-components-client-list.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport {\r\n ClientListFetchRequestFilter,\r\n ClientListCardsPayload,\r\n ClientListFetchQueryRequest,\r\n ClientListRuntimeContext,\r\n ClientListInformativeDashboardPayload,\r\n ClientListTableSettingsCatalogResponse,\r\n ClientListTableQuery,\r\n Response,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly runtimeFetchBaseUrl = 'fetch/query';\r\n private readonly tableSettingsBaseUrl = 'table-display-settings';\r\n private readonly informativeBaseUrl = 'Modules';\r\n\r\n getRows(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId: number,\r\n query: ClientListTableQuery,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<RuntimeTableRowsResponse>> {\r\n return this.resolveTablePropertyKeys(contextKey, query).pipe(\r\n switchMap((propertyKeys) =>\r\n this.queryRuntime<RuntimeTableRowsResponse>({\r\n contextKey,\r\n projection: 'Table',\r\n surfaceKey: 'table',\r\n propertyKeys: propertyKeys?.length ? propertyKeys : undefined,\r\n filters: this.mergeFilters(\r\n this.buildInstanceFilters(instanceId),\r\n filters,\r\n ),\r\n page: this.toPage(query.skip, query.take),\r\n pageSize: query.take,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n getCards(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId?: number | null,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<ClientListCardsPayload>> {\r\n return this.queryRuntime<ClientListCardsPayload>({\r\n contextKey,\r\n projection: 'Card',\r\n filters: this.mergeFilters(\r\n instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,\r\n filters,\r\n ),\r\n display: { areas: ['card'] },\r\n });\r\n }\r\n\r\n getInformativeDashboard(\r\n moduleId: number,\r\n ): Observable<Response<ClientListInformativeDashboardPayload>> {\r\n return this.http.get<Response<ClientListInformativeDashboardPayload>>(\r\n `${this.informativeBaseUrl}/${moduleId}/dashboard`,\r\n );\r\n }\r\n\r\n private queryRuntime<T>(\r\n payload: ClientListFetchQueryRequest,\r\n ): Observable<Response<T>> {\r\n return this.http.post<Response<T>>(this.runtimeFetchBaseUrl, payload);\r\n }\r\n\r\n private resolveTablePropertyKeys(\r\n contextKey: ClientListRuntimeContext,\r\n query: ClientListTableQuery,\r\n ): Observable<string[] | undefined> {\r\n if (query.columnKeys?.length) {\r\n return of(query.columnKeys);\r\n }\r\n\r\n const context = this.readTableSettingsContext(contextKey);\r\n if (!context) {\r\n return of(undefined);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<ClientListTableSettingsCatalogResponse>\r\n >(`${this.tableSettingsBaseUrl}/level/${context.levelId}/module/${context.moduleId}/catalog`)\r\n .pipe(\r\n map((response) =>\r\n this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? []),\r\n ),\r\n );\r\n }\r\n\r\n private buildInstanceFilters(\r\n instanceId: number,\r\n ): ClientListFetchRequestFilter[] {\r\n return [\r\n {\r\n key: 'levelDataId',\r\n operator: 'Equals',\r\n value: String(instanceId),\r\n },\r\n ];\r\n }\r\n\r\n private mergeFilters(\r\n baseFilters?: ClientListFetchRequestFilter[],\r\n extraFilters: ClientListFetchRequestFilter[] = [],\r\n ): ClientListFetchRequestFilter[] | undefined {\r\n const merged = [...(baseFilters ?? []), ...extraFilters];\r\n return merged.length ? merged : undefined;\r\n }\r\n\r\n private toPage(skip: number, take: number): number {\r\n if (take <= 0) {\r\n return 1;\r\n }\r\n\r\n return Math.floor(skip / take) + 1;\r\n }\r\n\r\n private toEffectiveColumnKeys(\r\n columns: ClientListTableSettingsCatalogResponse['effectiveColumns'],\r\n ): string[] | undefined {\r\n const keys = (columns ?? [])\r\n .filter((column) =>\r\n typeof column === 'string' ? true : column.visible !== false,\r\n )\r\n .sort(\r\n (a, b) =>\r\n (typeof a === 'string' ? 0 : (a.order ?? 0)) -\r\n (typeof b === 'string' ? 0 : (b.order ?? 0)),\r\n )\r\n .map((column) =>\r\n typeof column === 'string'\r\n ? column\r\n : (column.key ?? column.propertyKey ?? ''),\r\n )\r\n .filter((key) => key.length > 0);\r\n\r\n return keys.length ? keys : undefined;\r\n }\r\n\r\n private readTableSettingsContext(\r\n contextKey: string,\r\n ): { levelId: string; moduleId: string } | null {\r\n const [levelPart, modulePart] = contextKey.split('/');\r\n const levelId = levelPart?.split(':')[1];\r\n const moduleId = modulePart?.split(':')[1];\r\n\r\n if (!levelId || !moduleId) {\r\n return null;\r\n }\r\n\r\n return { levelId, moduleId };\r\n }\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport {\r\n DashboardBuilderData,\r\n DashboardChartItem,\r\n} from '@masterteam/dashboard-builder';\r\nimport { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsPayload,\r\n ClientListFetchPropertyMeta,\r\n ClientListFetchRecord,\r\n ClientListFetchSchema,\r\n ClientListFetchTableColumn,\r\n ClientListInformativeDashboardPayload,\r\n ClientListState,\r\n NormalizedClientListConfiguration,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\ninterface ClientListPropertyMaps {\r\n byKey: Map<string, ClientListFetchPropertyMeta>;\r\n byNormalizedKey: Map<string, ClientListFetchPropertyMeta>;\r\n}\r\n\r\ninterface ClientListCardDescriptor {\r\n projectionKey: string;\r\n recordValueKey: string;\r\n property?: ClientListFetchPropertyMeta;\r\n label?: string;\r\n viewType?: string;\r\n order?: number;\r\n configuration?: EntityData['configuration'] | null;\r\n propertyConfiguration?: EntityData['propertyConfiguration'];\r\n}\r\n\r\nconst UNSORTABLE_ENTITY_VIEW_TYPES = new Set<EntityViewType>([\r\n 'Attachment',\r\n 'Checkbox',\r\n]);\r\n\r\n@Injectable()\r\nexport class ClientListStateService {\r\n readonly itemsByKey = signal<Record<string, ClientListState>>({});\r\n\r\n readonly items = computed<ClientListState[]>(() =>\r\n Object.values(this.itemsByKey()).sort((a, b) =>\r\n a.config.moduleId === b.config.moduleId\r\n ? (a.config.instanceId ?? 0) - (b.config.instanceId ?? 0)\r\n : a.config.moduleId - b.config.moduleId,\r\n ),\r\n );\r\n\r\n setConfigs(configs: ClientListState[]): void {\r\n const currentItems = this.itemsByKey();\r\n const next: Record<string, ClientListState> = {};\r\n\r\n configs.forEach((item) => {\r\n next[item.key] = this.mergeItemState(item, currentItems[item.key]);\r\n });\r\n\r\n this.itemsByKey.set(next);\r\n }\r\n\r\n setLoading(key: string, loading: boolean): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n loading,\r\n },\r\n });\r\n }\r\n\r\n setError(key: string, message: string | null): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n error: message,\r\n },\r\n });\r\n }\r\n\r\n setRowsResult(\r\n key: string,\r\n response: RuntimeTableRowsResponse,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'table'\r\n ) {\r\n return;\r\n }\r\n\r\n const columns: RuntimeEntityColumnDef[] = (\r\n response.projectionMeta?.columns ?? []\r\n )\r\n .filter((column) => column.visible)\r\n .sort((a, b) => a.order - b.order)\r\n .map((column, index) => ({\r\n key: column.key,\r\n label: column.label,\r\n type: 'entity' as const,\r\n sortable: !UNSORTABLE_ENTITY_VIEW_TYPES.has(\r\n column.viewType as EntityViewType,\r\n ),\r\n width: index === 0 ? '200px' : undefined,\r\n viewType: column.viewType,\r\n order: column.order,\r\n visible: column.visible,\r\n configuration: column.configuration ?? null,\r\n }));\r\n\r\n const propertyMaps = this.createPropertyMaps(\r\n response.catalog?.properties ?? [],\r\n );\r\n\r\n const rows: RuntimeTableDisplayRow[] = (response.records ?? []).map(\r\n (record) => {\r\n const row: RuntimeTableDisplayRow = { Id: record.id };\r\n\r\n columns.forEach((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n row[column.key] = this.toEntityData(\r\n column.key,\r\n record.values?.[property?.key ?? column.key],\r\n property,\r\n column.viewType,\r\n column.label,\r\n column.configuration,\r\n property?.configuration,\r\n record.id,\r\n column.order ?? property?.order,\r\n );\r\n });\r\n\r\n return row;\r\n },\r\n );\r\n\r\n const schema = this.resolvePrimarySchema(response);\r\n const title =\r\n (config.title ?? '').trim() || schema?.name || schema?.key || '';\r\n const totalCount =\r\n config.isPaginated === false\r\n ? rows.length\r\n : (response.pagination?.totalCount ?? rows.length);\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey: schema?.key ?? '',\r\n columns,\r\n rows,\r\n cards: [],\r\n skip,\r\n take,\r\n totalCount,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setCardsResult(\r\n key: string,\r\n response: ClientListCardsPayload,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'cards'\r\n ) {\r\n return;\r\n }\r\n\r\n const cards = this.toCards(response);\r\n const schema = this.resolvePrimarySchema(response);\r\n const firstCardModule = cards[0]?.module;\r\n const moduleKey = schema?.key ?? firstCardModule?.key ?? target.moduleKey;\r\n const title =\r\n (config.title ?? '').trim() ||\r\n schema?.name ||\r\n firstCardModule?.name ||\r\n moduleKey ||\r\n target.title;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards,\r\n skip: 0,\r\n take: 0,\r\n totalCount: cards.length,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setInformativeResult(\r\n key: string,\r\n response: ClientListInformativeDashboardPayload | null,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target || target.type !== 'informative') return;\r\n\r\n const moduleKey = target.moduleKey || `Module ${config.moduleId}`;\r\n const title =\r\n (config.title ?? '').trim() || target.title || 'Informative Dashboard';\r\n const dashboardData = response\r\n ? this.toDashboardData(response, title)\r\n : null;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n totalCount: dashboardData?.charts?.length ?? 0,\r\n dashboardData,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n expanded: !target.expanded,\r\n },\r\n });\r\n }\r\n\r\n private mergeItemState(\r\n item: ClientListState,\r\n existing?: ClientListState,\r\n ): ClientListState {\r\n if (\r\n !existing ||\r\n existing.type !== item.type ||\r\n existing.areaType !== item.areaType\r\n ) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n loading: existing.loading,\r\n error: existing.error,\r\n title: item.title || existing.title,\r\n moduleKey: existing.moduleKey || item.moduleKey,\r\n totalCount: existing.totalCount,\r\n columns: existing.columns,\r\n rows: existing.rows,\r\n cards: existing.cards,\r\n skip: existing.skip,\r\n take: existing.take,\r\n expanded: existing.expanded,\r\n dashboardData: existing.dashboardData,\r\n rawData: existing.rawData,\r\n };\r\n }\r\n\r\n private toCards(data?: ClientListCardsPayload): ClientListCard[] {\r\n const records = this.orderRecords(\r\n data?.records ?? [],\r\n data?.projectionMeta?.groups ?? [],\r\n );\r\n const catalogProperties = data?.catalog?.properties ?? [];\r\n const propertyMaps = this.createPropertyMaps(catalogProperties);\r\n const descriptors = this.buildCardDescriptors(\r\n data?.projectionMeta?.displayOrder ?? [],\r\n data?.projectionMeta?.columns ?? [],\r\n propertyMaps,\r\n );\r\n\r\n return records.map((record) => {\r\n const schema = data?.schemas?.find((item) => item.id === record.schemaId);\r\n const propertyDescriptors = descriptors.length\r\n ? descriptors\r\n : this.buildFallbackCardDescriptors(record, catalogProperties);\r\n const entities = propertyDescriptors.map((propertyDescriptor) =>\r\n this.toEntityData(\r\n propertyDescriptor.projectionKey,\r\n record.values?.[propertyDescriptor.recordValueKey],\r\n propertyDescriptor.property,\r\n propertyDescriptor.viewType,\r\n propertyDescriptor.label,\r\n propertyDescriptor.configuration,\r\n propertyDescriptor.propertyConfiguration,\r\n record.id,\r\n propertyDescriptor.order,\r\n ),\r\n );\r\n const statusColor = this.resolveCardStatusColor(entities);\r\n const normalizedEntities = statusColor\r\n ? this.applyCardProgressColor(entities, statusColor)\r\n : entities;\r\n\r\n return {\r\n id: record.id,\r\n name: record.name ?? `Record ${record.id}`,\r\n module: schema\r\n ? {\r\n id: schema.id,\r\n key: schema.key,\r\n name: schema.name,\r\n order: schema.order,\r\n typeGroup: schema.typeGroup,\r\n }\r\n : undefined,\r\n instanceId: record.id,\r\n properties: normalizedEntities,\r\n entities: normalizedEntities,\r\n };\r\n });\r\n }\r\n\r\n private orderRecords(\r\n records: ClientListFetchRecord[],\r\n groups: Array<{ recordIds: number[] }>,\r\n ): ClientListFetchRecord[] {\r\n if (!groups.length) {\r\n return records;\r\n }\r\n\r\n const recordsById = new Map(records.map((record) => [record.id, record]));\r\n const ordered: ClientListFetchRecord[] = [];\r\n const seen = new Set<number>();\r\n\r\n groups.forEach((group) => {\r\n group.recordIds.forEach((recordId) => {\r\n const record = recordsById.get(recordId);\r\n if (!record || seen.has(recordId)) {\r\n return;\r\n }\r\n\r\n ordered.push(record);\r\n seen.add(recordId);\r\n });\r\n });\r\n\r\n records.forEach((record) => {\r\n if (!seen.has(record.id)) {\r\n ordered.push(record);\r\n }\r\n });\r\n\r\n return ordered;\r\n }\r\n\r\n private resolvePrimarySchema(\r\n response: RuntimeTableRowsResponse | ClientListCardsPayload,\r\n ): ClientListFetchSchema | undefined {\r\n const recordSchemaId = response.records?.[0]?.schemaId;\r\n\r\n return (\r\n response.schemas?.find((item) => item.id === recordSchemaId) ??\r\n response.schemas?.[0]\r\n );\r\n }\r\n\r\n private toEntityData(\r\n projectionKey: string,\r\n cell: ClientListFetchRecord['values'][string] | undefined,\r\n property: ClientListFetchPropertyMeta | undefined,\r\n viewType: string | undefined,\r\n label: string | undefined,\r\n configuration: EntityData['configuration'] | null | undefined,\r\n propertyConfiguration: EntityData['propertyConfiguration'],\r\n recordId: number,\r\n order?: number,\r\n ): EntityData {\r\n const resolvedViewType = (viewType ?? 'Text') as EntityData['viewType'];\r\n\r\n return {\r\n id: recordId,\r\n propertyId: property?.id,\r\n key: property?.key ?? projectionKey,\r\n normalizedKey: property?.normalizedKey ?? projectionKey,\r\n name: label ?? property?.label ?? projectionKey,\r\n rawValue:\r\n cell?.raw === null || cell?.raw === undefined\r\n ? undefined\r\n : String(cell.raw),\r\n value: (cell?.value ?? '') as EntityData['value'],\r\n viewType: resolvedViewType,\r\n type: property?.source,\r\n order: order ?? property?.order,\r\n configuration: configuration as EntityData['configuration'] | undefined,\r\n propertyConfiguration: propertyConfiguration ?? undefined,\r\n comparison: cell?.comparison,\r\n };\r\n }\r\n\r\n private createPropertyMaps(\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListPropertyMaps {\r\n return {\r\n byKey: new Map(properties.map((property) => [property.key, property])),\r\n byNormalizedKey: new Map(\r\n properties.map((property) => [property.normalizedKey, property]),\r\n ),\r\n };\r\n }\r\n\r\n private resolvePropertyMeta(\r\n projectionKey: string,\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListFetchPropertyMeta | undefined {\r\n return (\r\n propertyMaps.byKey.get(projectionKey) ??\r\n propertyMaps.byNormalizedKey.get(projectionKey)\r\n );\r\n }\r\n\r\n private buildCardDescriptors(\r\n displayOrder: NonNullable<\r\n ClientListCardsPayload['projectionMeta']\r\n >['displayOrder'],\r\n columns: ClientListFetchTableColumn[],\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListCardDescriptor[] {\r\n if (displayOrder?.length) {\r\n return displayOrder.map((item) => {\r\n const property = this.resolvePropertyMeta(\r\n item.propertyKey,\r\n propertyMaps,\r\n );\r\n\r\n return {\r\n projectionKey: item.propertyKey,\r\n recordValueKey: property?.key ?? item.propertyKey,\r\n property,\r\n label: property?.label,\r\n viewType: property?.viewType,\r\n order: item.order ?? property?.order,\r\n configuration: item.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n if (columns?.length) {\r\n return columns\r\n .filter((column) => column.visible)\r\n .map((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n return {\r\n projectionKey: column.key,\r\n recordValueKey: property?.key ?? column.key,\r\n property,\r\n label: column.label ?? property?.label,\r\n viewType: column.viewType ?? property?.viewType,\r\n order: column.order ?? property?.order,\r\n configuration: column.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private buildFallbackCardDescriptors(\r\n record: ClientListFetchRecord,\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListCardDescriptor[] {\r\n return properties\r\n .filter((property) => record.values?.[property.key] !== undefined)\r\n .map((property) => ({\r\n projectionKey: property.normalizedKey || property.key,\r\n recordValueKey: property.key,\r\n property,\r\n label: property.label,\r\n viewType: property.viewType,\r\n order: property.order,\r\n configuration: null,\r\n propertyConfiguration: property.configuration ?? null,\r\n }));\r\n }\r\n\r\n private resolveCardStatusColor(entities: EntityData[]): string | null {\r\n const statusEntity = entities.find(\r\n (entity) => entity.normalizedKey === 'Status',\r\n );\r\n const value = statusEntity?.value;\r\n const color =\r\n value && typeof value === 'object' && 'color' in value\r\n ? value.color\r\n : null;\r\n\r\n return typeof color === 'string' && color.trim().length\r\n ? color.trim()\r\n : null;\r\n }\r\n\r\n private applyCardProgressColor(\r\n entities: EntityData[],\r\n color: string,\r\n ): EntityData[] {\r\n return entities.map((entity) => {\r\n if (entity.normalizedKey !== 'Actual_Progress') {\r\n return entity;\r\n }\r\n\r\n return {\r\n ...entity,\r\n configuration: {\r\n ...(entity.configuration ?? {}),\r\n color,\r\n },\r\n };\r\n });\r\n }\r\n\r\n private toDashboardData(\r\n data: ClientListInformativeDashboardPayload,\r\n title: string,\r\n ): DashboardBuilderData {\r\n const filters = data.filters;\r\n const charts: DashboardChartItem[] = (data.chartLinks ?? []).map((link) => {\r\n const configuration = link.configuration ?? {};\r\n\r\n return {\r\n ...configuration,\r\n id: link.id,\r\n chartComponentId: link.chartComponentId,\r\n } as DashboardChartItem;\r\n });\r\n\r\n return {\r\n page: {\r\n id: data.moduleId,\r\n name: { en: title, ar: title },\r\n type: 'Dashboard',\r\n dashboardConfig: {\r\n ignoreQueryFilter: data.ignoreQueryFilter,\r\n filters: data.filters,\r\n versionNumber: data.versionNumber,\r\n extraInfo: data.extraInfo,\r\n },\r\n },\r\n charts,\r\n dialogs: [],\r\n filters: Array.isArray(filters) ? [...filters] : filters ? [filters] : [],\r\n };\r\n }\r\n}\r\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { map, Observable, share, take } from 'rxjs';\nimport { RuntimeAction } from '@masterteam/components/runtime-action';\nimport {\n ClientListRuntimeRecordActionsConfig,\n ClientListRuntimeRecordActionsContext,\n RuntimeTableDisplayRow,\n} from '../models/client-list.model';\n\ninterface CachedActions {\n actions: RuntimeAction[];\n fetchedAt: number;\n}\n\ninterface RuntimeActionsResponse {\n code: number;\n data?: { actions?: RuntimeAction[] };\n}\n\nconst DEFAULT_ENDPOINT = 'LevelData/{instanceId}/workspace-record-actions';\nconst DEFAULT_CACHE_TTL_MS = 60_000;\nconst DEFAULT_TARGET_TYPE = 'ModuleData';\n\n/**\n * Lazy per-row runtime actions. Fetches `workspace-record-actions` only when\n * the row's 3-dots menu is opened (or for every visible row when the list\n * opts in to `eager`), with per-row caching, in-flight dedupe, and a single\n * cache-invalidation hook tied to action execution.\n */\n@Injectable()\nexport class ClientListRuntimeActionsService {\n private readonly http = inject(HttpClient);\n\n private readonly cache = signal<ReadonlyMap<string, CachedActions>>(\n new Map(),\n );\n private readonly inFlightKeys = signal<ReadonlySet<string>>(new Set());\n private readonly inFlight = new Map<string, Observable<RuntimeAction[]>>();\n\n /** Actions keyed by `${listKey}:${recordId}`. */\n readonly actionsByRowKey = computed<ReadonlyMap<string, RuntimeAction[]>>(\n () => {\n const out = new Map<string, RuntimeAction[]>();\n for (const [key, value] of this.cache()) {\n out.set(key, value.actions);\n }\n return out;\n },\n );\n\n /** Row keys currently being fetched. Drives the popover skeleton state. */\n readonly loadingRowKeys = this.inFlightKeys.asReadonly();\n\n rowKey(listKey: string, recordId: number): string {\n return `${listKey}:${recordId}`;\n }\n\n has(\n listKey: string,\n recordId: number,\n ttlMs: number | null | undefined,\n ): boolean {\n const key = this.rowKey(listKey, recordId);\n const entry = this.cache().get(key);\n if (!entry) return false;\n if (ttlMs == null) return true;\n return Date.now() - entry.fetchedAt < ttlMs;\n }\n\n /**\n * Fetch (or reuse cached/in-flight) per-row runtime actions for a row.\n * Returns an Observable so callers can chain off the result; the cache and\n * loading signals are also kept in sync so the table popover skeleton and\n * the merged-actions computation react automatically.\n */\n request(\n config: ClientListRuntimeRecordActionsConfig,\n ctx: ClientListRuntimeRecordActionsContext,\n ): Observable<RuntimeAction[]> {\n const key = this.rowKey(ctx.listKey, ctx.recordId);\n const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\n const cached = this.cache().get(key);\n if (cached && (ttl == null || Date.now() - cached.fetchedAt < ttl)) {\n const actions = cached.actions;\n return new Observable<RuntimeAction[]>((subscriber) => {\n subscriber.next(actions);\n subscriber.complete();\n });\n }\n\n const inFlight = this.inFlight.get(key);\n if (inFlight) {\n return inFlight;\n }\n\n const url = this.resolveEndpoint(config.endpoint ?? DEFAULT_ENDPOINT, ctx);\n const params = this.buildParams(config, ctx);\n\n this.markLoading(key, true);\n\n const obs = this.http.get<RuntimeActionsResponse>(url, { params }).pipe(\n map((response) =>\n response?.code === 1 ? (response.data?.actions ?? []) : [],\n ),\n share(),\n );\n\n this.inFlight.set(key, obs);\n\n obs.pipe(take(1)).subscribe({\n next: (actions) => {\n this.writeCache(key, actions);\n this.markLoading(key, false);\n this.inFlight.delete(key);\n },\n error: () => {\n this.writeCache(key, []);\n this.markLoading(key, false);\n this.inFlight.delete(key);\n },\n });\n\n return obs;\n }\n\n invalidateRow(listKey: string, recordId: number): void {\n const key = this.rowKey(listKey, recordId);\n this.cache.update((current) => {\n if (!current.has(key)) return current;\n const next = new Map(current);\n next.delete(key);\n return next;\n });\n }\n\n invalidateList(listKey: string): void {\n const prefix = `${listKey}:`;\n this.cache.update((current) => {\n let changed = false;\n const next = new Map(current);\n for (const key of next.keys()) {\n if (key.startsWith(prefix)) {\n next.delete(key);\n changed = true;\n }\n }\n return changed ? next : current;\n });\n }\n\n clearAll(): void {\n this.cache.set(new Map());\n }\n\n private writeCache(key: string, actions: RuntimeAction[]): void {\n this.cache.update((current) => {\n const next = new Map(current);\n next.set(key, { actions, fetchedAt: Date.now() });\n return next;\n });\n }\n\n private markLoading(key: string, loading: boolean): void {\n this.inFlightKeys.update((current) => {\n const next = new Set(current);\n if (loading) next.add(key);\n else next.delete(key);\n return next;\n });\n }\n\n private resolveEndpoint(\n template: string,\n ctx: ClientListRuntimeRecordActionsContext,\n ): string {\n const instanceId = ctx.instanceId ?? '';\n return template\n .replace('{instanceId}', String(instanceId))\n .replace('{listKey}', ctx.listKey)\n .replace('{moduleId}', String(ctx.moduleId))\n .replace('{recordId}', String(ctx.recordId));\n }\n\n private buildParams(\n config: ClientListRuntimeRecordActionsConfig,\n ctx: ClientListRuntimeRecordActionsContext,\n ): Record<string, string | number> {\n if (config.buildParams) {\n return config.buildParams(ctx);\n }\n\n const moduleKey = config.resolveModuleKey?.(ctx.row, {\n listKey: ctx.listKey,\n moduleId: ctx.moduleId,\n });\n\n const params: Record<string, string | number> = {\n targetType: DEFAULT_TARGET_TYPE,\n targetId: ctx.recordId,\n };\n\n if (moduleKey) {\n params['moduleKey'] = moduleKey;\n }\n\n return params;\n }\n}\n\nexport function defaultResolveRecordId(\n row: RuntimeTableDisplayRow,\n): number | null {\n const candidates = ['Id', 'id', 'ModuleDataId'] as const;\n for (const key of candidates) {\n const value = row[key];\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n }\n return null;\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { TableFilters } from '@masterteam/components/table';\n\n/**\n * Toolbar state for a single client-list instance: search term, column filters,\n * group column, and active tab. Kept as mutable signals so both the table view\n * and the cards view can two-way bind to the same source of truth and stay in\n * sync when the user toggles between them.\n */\nexport interface ClientListToolbarBucket {\n filters: WritableSignal<TableFilters>;\n filterTerm: WritableSignal<string>;\n groupBy: WritableSignal<string | null>;\n activeTab: WritableSignal<any>;\n}\n\n/**\n * Per-list toolbar state holder. Buckets are keyed by list `key` (see\n * `ClientListBaseState.key`) so switching between table and cards for the same\n * list carries search/filter/group/tab forward. In-memory only — per-component\n * `storageKey` persistence on the underlying mt-table continues to handle\n * refresh-resilient hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class ClientListToolbarService {\n private readonly buckets = new Map<string, ClientListToolbarBucket>();\n\n forList(key: string): ClientListToolbarBucket {\n let bucket = this.buckets.get(key);\n if (!bucket) {\n bucket = {\n filters: signal<TableFilters>({}),\n filterTerm: signal<string>(''),\n groupBy: signal<string | null>(null),\n activeTab: signal<any>(null),\n };\n this.buckets.set(key, bucket);\n }\n return bucket;\n }\n\n clear(key: string): void {\n this.buckets.delete(key);\n }\n}\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n Table,\r\n TableAction,\r\n TableActionShape,\r\n} from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListLazyLoadEvent,\r\n RuntimeTableDisplayRow,\r\n ClientListState,\r\n ClientListTableState,\r\n} from '../../models/client-list.model';\r\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-table-view',\r\n standalone: true,\r\n imports: [CommonModule, Table, SkeletonModule],\r\n templateUrl: './client-list-table-view.html',\r\n})\r\nexport class ClientListTableView {\r\n private readonly toolbar = inject(ClientListToolbarService);\r\n\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n readonly actionShape = input<TableActionShape | undefined>(undefined);\r\n readonly rowActionsLoadingFn = input<\r\n ((row: RuntimeTableDisplayRow) => boolean) | null\r\n >(null);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly rowClick = output<RuntimeTableDisplayRow>();\r\n readonly rowActionsRequested = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly table = computed(() => {\r\n return this.state() as ClientListTableState;\r\n });\r\n\r\n /**\r\n * Shared toolbar bucket (search / filters / groupBy / activeTab) keyed by\r\n * list identity. The cards view for the same list resolves the same bucket\r\n * so switching area types preserves the toolbar state.\r\n */\r\n protected readonly bucket = computed(() =>\r\n this.toolbar.forList(this.state().key),\r\n );\r\n\r\n /**\r\n * Stable, per-instance storage key. Excludes `areaType` so table and cards\r\n * views for the same logical list share persistence (matches the toolbar\r\n * bucket sharing behaviour).\r\n */\r\n protected readonly tableStorageKey = computed<string | null>(() => {\r\n const s = this.state();\r\n const cfg = s.config;\r\n const parts = [\r\n 'client-list',\r\n s.key,\r\n cfg.type,\r\n cfg.contextKey ?? '',\r\n cfg.moduleId ?? '',\r\n cfg.instanceId ?? '',\r\n ];\r\n const key = parts\r\n .map((p) => String(p ?? ''))\r\n .filter((p) => p.length > 0)\r\n .join(':');\r\n return key.length > 'client-list'.length ? key : null;\r\n });\r\n\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { Card } from '@masterteam/components/card';\nimport { MTDateFormatPipe } from '@masterteam/components';\nimport {\n EntitiesPreview,\n EntityClickEvent,\n} from '@masterteam/components/entities';\nimport {\n ColumnDef,\n TableAction,\n TableCaption,\n TableExportService,\n TableGroupingController,\n TableValueResolver,\n} from '@masterteam/components/table';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport {\n ClientListCard,\n ClientListCardsState,\n ClientListLazyLoadEvent,\n ClientListState,\n RuntimeEntityColumnDef,\n} from '../../models/client-list.model';\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\n\nconst EMPTY_KEY_SET: ReadonlySet<string> = new Set();\n\ninterface CardGroup {\n key: string;\n columnLabel: string;\n label: string;\n accent: string | null;\n count: number;\n cards: ClientListCard[];\n}\n\n@Component({\n selector: 'mt-client-list-cards-view',\n standalone: true,\n imports: [\n CommonModule,\n TranslocoModule,\n Card,\n EntitiesPreview,\n SkeletonModule,\n TableCaption,\n ],\n providers: [MTDateFormatPipe],\n templateUrl: './client-list-cards-view.html',\n})\nexport class ClientListCardsView {\n private readonly toolbar = inject(ClientListToolbarService);\n private readonly exportService = inject(TableExportService);\n private readonly dateFormat = inject(MTDateFormatPipe);\n\n readonly state = input.required<ClientListState>();\n readonly rowActions = input<TableAction[]>([]);\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\n readonly cardClick = output<ClientListCard>();\n\n protected readonly cardsState = computed(\n () => this.state() as ClientListCardsState,\n );\n\n /** Shared toolbar bucket — same instance the table view uses. */\n protected readonly bucket = computed(() =>\n this.toolbar.forList(this.state().key),\n );\n\n /**\n * Columns for filter/group/export. `state.columns` is empty for cards area\n * (the state service doesn't populate it — see `setCardsResult`), so we\n * reconstruct `ColumnDef[]` from the first card's entity metadata. Each\n * entity carries its `key`, `name` (label), and `viewType`, which is\n * everything `TableValueResolver.getColumnFilterType` needs to classify\n * filter behaviour (select / boolean / date / user / text).\n */\n protected readonly columns = computed<ColumnDef[]>(() => {\n const fromState = this.state().columns;\n if (fromState && fromState.length > 0) return fromState;\n\n const sampleCard = this.cardsState().cards[0];\n if (!sampleCard?.entities?.length) return [];\n\n return sampleCard.entities.map((entity): RuntimeEntityColumnDef => {\n const raw = entity as unknown as Record<string, unknown>;\n const key =\n (typeof raw['key'] === 'string' && raw['key']) ||\n (typeof raw['normalizedKey'] === 'string' && raw['normalizedKey']) ||\n entity.name;\n return {\n key: String(key),\n label: entity.name ?? String(key),\n type: 'entity',\n viewType: (entity.viewType ?? 'Text') as string,\n };\n });\n });\n\n /**\n * Row view of each card. Cards carry their data as `entities: EntityData[]`,\n * not as a pre-built record, so we rebuild the row shape mt-table expects:\n * `{ [entityKey]: EntityData | scalar }`. Falls back to `displayProperties`\n * if a newer backend populates it. Row index matches card index so we can\n * look up by position elsewhere.\n */\n protected readonly rowRepresentations = computed<Record<string, unknown>[]>(\n () => this.cardsState().cards.map((card) => this.cardToRow(card)),\n );\n\n private cardToRow(card: ClientListCard): Record<string, unknown> {\n const fromDisplay = card.displayProperties as\n | Record<string, unknown>\n | undefined;\n if (fromDisplay && Object.keys(fromDisplay).length > 0) {\n return fromDisplay;\n }\n const record: Record<string, unknown> = { Id: card.id };\n for (const entity of card.entities ?? []) {\n const e = entity as unknown as Record<string, unknown>;\n const key =\n (typeof e['key'] === 'string' && e['key']) ||\n (typeof e['normalizedKey'] === 'string' && e['normalizedKey']) ||\n entity.name;\n if (key && typeof key === 'string') {\n record[key] = entity;\n }\n }\n return record;\n }\n\n // Local throwaway signals for the grouping controller's sort arguments —\n // cards don't sort via column click so the controller's sort-pinning\n // side-effect is a no-op here.\n private readonly noopSortField = signal<string | null>(null);\n private readonly noopSortDir = signal<'asc' | 'desc' | null>(null);\n\n /**\n * Writable proxy around `bucket().groupBy` — the grouping controller wants a\n * `WritableSignal<string | null>`. Reads delegate to the current bucket's\n * signal; writes mutate it via `.set()`. This keeps the controller's\n * `setGroup()` side-effect safe even though cards view callers never invoke\n * it today.\n */\n private readonly groupBySignal: WritableSignal<string | null> = (() => {\n const read = computed(() => this.bucket().groupBy());\n const proxy = ((...args: [] | [string | null]) =>\n args.length === 0 ? read() : this.bucket().groupBy.set(args[0]!)) as any;\n proxy.set = (value: string | null) => this.bucket().groupBy.set(value);\n proxy.update = (fn: (value: string | null) => string | null) =>\n this.bucket().groupBy.set(fn(this.bucket().groupBy()));\n proxy.asReadonly = () => read;\n return proxy as WritableSignal<string | null>;\n })();\n\n /**\n * Grouping controller bound to the shared toolbar bucket, so picking a group\n * in the cards menu surfaces in the table view's group header (and vice\n * versa) when the user toggles area types.\n */\n protected readonly grouping = new TableGroupingController(\n this.columns,\n this.rowRepresentations,\n this.groupBySignal,\n this.noopSortField,\n this.noopSortDir,\n );\n\n /**\n * Visible (after search + filters) cards. Backend-paginated lists re-query\n * on filter change so `cards` already reflects the server response and this\n * just passes through; local lists filter in-place.\n */\n protected readonly visibleCards = computed<ClientListCard[]>(() => {\n const state = this.cardsState();\n const isLazy = state.config.isPaginated;\n const cards = state.cards;\n\n if (isLazy) return cards;\n\n const term = this.bucket().filterTerm().trim().toLowerCase();\n const filters = this.bucket().filters();\n const columns = this.columns();\n const filterKeys = Object.keys(filters);\n\n return cards.filter((card, index) => {\n const row = this.rowRepresentations()[index] ?? {};\n\n if (term) {\n // Row values are EntityData envelopes (or scalars). Pull the display\n // string from each and substring-match — same semantics mt-table's\n // `generalSearch` applies to its rows.\n const matches = Object.values(row).some((value) => {\n const display = TableValueResolver.resolveDisplayValue(value);\n if (display == null) return false;\n return String(display).toLowerCase().includes(term);\n });\n if (!matches) return false;\n }\n\n if (filterKeys.length === 0) return true;\n return filterKeys.every((key) => {\n if (key === 'generalSearch') return true;\n const column = columns.find((c) => c.key === key);\n return TableValueResolver.matchesFilter(row, key, filters[key], column);\n });\n });\n });\n\n /**\n * Grouped cards. Reuses TableGroupingController helpers so the accent color,\n * label, and count rendering match the table's subheader exactly.\n */\n protected readonly groupedCards = computed<CardGroup[]>(() => {\n const column = this.grouping.activeGroupColumn();\n if (!column) return [];\n\n const groups = new Map<string, CardGroup>();\n this.visibleCards().forEach((card) => {\n const row = this.cardToRow(card);\n const label = this.grouping.getGroupLabel(row);\n const accent = this.grouping.getGroupAccentColor(row);\n const key = `${label}__${accent ?? ''}`;\n\n const existing = groups.get(key);\n if (existing) {\n existing.cards.push(card);\n existing.count += 1;\n } else {\n groups.set(key, {\n key,\n columnLabel: column.label,\n label,\n accent,\n count: 1,\n cards: [card],\n });\n }\n });\n\n return Array.from(groups.values());\n });\n\n /**\n * Export the visible (after search + filter) cards as XLSX. Uses the cards'\n * derived row shape + the state's columns, so the file mirrors what the\n * user sees. Custom columns are excluded upstream by `TableExportService`.\n */\n /**\n * Set of column keys that are click-to-filter eligible — same predicate\n * mt-table's `isCellClickFilterable` uses (select / boolean / user). One\n * set computed once per columns / first-card change; all visible cards\n * read from it. Reactive via signal — when columns load, the entities\n * inside cards automatically become clickable.\n */\n protected readonly clickableEntityKeys = computed<ReadonlySet<string>>(() => {\n const sample = this.cardsState().cards[0]\n ? this.cardToRow(this.cardsState().cards[0])\n : undefined;\n const result = new Set<string>();\n for (const column of this.columns()) {\n const filterType = TableValueResolver.getColumnFilterType(column, sample);\n if (\n filterType === 'select' ||\n filterType === 'user' ||\n filterType === 'boolean'\n ) {\n result.add(column.key);\n }\n }\n return result;\n });\n\n /**\n * Per-card set of entity keys that match the active filter — passed into\n * `<mt-entities-preview [activeKeys]>`. Computed lazily per card via the\n * helper below; bucket changes (filter add / remove) automatically\n * invalidate any place that reads from this in a template.\n */\n protected activeKeysForCard(card: ClientListCard): ReadonlySet<string> {\n const filters = this.bucket().filters();\n const filterKeys = Object.keys(filters);\n if (filterKeys.length === 0) return EMPTY_KEY_SET;\n\n const row = this.cardToRow(card);\n const result = new Set<string>();\n for (const key of filterKeys) {\n if (key === 'generalSearch') continue;\n const column = this.columns().find((c) => c.key === key);\n if (!column) continue;\n const cellTarget = TableValueResolver.buildClickFilterValue(row, column);\n if (cellTarget === null || cellTarget === undefined) continue;\n if (TableValueResolver.isFilterValueEqual(filters[key], cellTarget)) {\n result.add(key);\n }\n }\n return result;\n }\n\n /**\n * Click-to-filter handler invoked from `<mt-entities-preview (entityClick)>`.\n * Mirrors mt-table's `onCellFilterClick`: builds the filter value via the\n * shared `TableValueResolver`, toggles it on the shared toolbar bucket so\n * the funnel chip in the filter popover lights up, and clears on a second\n * click against the same value.\n */\n protected onEntityFilterClick(\n card: ClientListCard,\n event: EntityClickEvent,\n ): void {\n const column = this.columns().find((c) => c.key === event.key);\n if (!column) return;\n\n const row = this.cardToRow(card);\n const next = TableValueResolver.buildClickFilterValue(row, column);\n if (next === null || next === undefined) return;\n\n const current = this.bucket().filters();\n const patched = { ...current };\n if (TableValueResolver.isFilterValueEqual(current[column.key], next)) {\n delete patched[column.key];\n } else {\n patched[column.key] = next;\n }\n this.bucket().filters.set(patched);\n }\n\n protected exportExcel(): void {\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\n this.exportService.exportToExcel({\n rows,\n columns: this.columns(),\n filename: this.resolveExportFilename(),\n resolveValue: (row, column) => this.resolveCellValue(row, column),\n });\n }\n\n protected printPdf(): void {\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\n this.exportService.printPdf({\n rows,\n columns: this.columns(),\n filename: this.resolveExportFilename(),\n title: this.cardsState().title || undefined,\n resolveValue: (row, column) => this.resolveCellValue(row, column),\n });\n }\n\n private resolveExportFilename(): string {\n const title = this.cardsState().title?.trim();\n return title || this.cardsState().moduleKey || 'cards';\n }\n\n /**\n * Value resolver compatible with `TableExportConfig.resolveValue`. Reuses\n * `TableValueResolver` so currency, dates, entities, booleans export the\n * same way they would from the table view. Date columns (native or entity\n * with viewType `Date`/`DateTime`) are passed through `mtDateFormat` so\n * Excel and PDF show locale-formatted dates instead of raw ISO strings.\n */\n private resolveCellValue(\n row: unknown,\n column: ColumnDef,\n ): string | number | boolean | null {\n const cellValue = TableValueResolver.getProperty(row, column.key);\n if (cellValue === null || cellValue === undefined) return null;\n\n const dateType = this.resolveDateColumnType(column, cellValue);\n if (dateType) {\n const source =\n column.type === 'entity'\n ? TableValueResolver.getEntityValueByType(cellValue, 'sort')\n : cellValue;\n const dateValue = TableValueResolver.resolveDateValue(source);\n if (dateValue === null) return null;\n const formatted = this.dateFormat.transform(dateValue, dateType);\n return formatted || null;\n }\n\n if (column.type === 'entity') {\n return TableValueResolver.getEntityValueByType(cellValue, 'export');\n }\n return TableValueResolver.resolveDisplayValue(cellValue);\n }\n\n private resolveDateColumnType(\n column: ColumnDef,\n cellValue: unknown,\n ): 'date' | 'dateTime' | null {\n if (column.type === 'date') return 'date';\n if (column.type === 'dateTime') return 'dateTime';\n if (column.type !== 'entity') return null;\n\n const viewType = (column as { viewType?: unknown }).viewType;\n const fromColumn =\n typeof viewType === 'string' ? viewType.toLowerCase() : '';\n if (fromColumn === 'datetime') return 'dateTime';\n if (fromColumn === 'date') return 'date';\n\n if (cellValue && typeof cellValue === 'object') {\n const inner = (cellValue as { viewType?: string }).viewType;\n if (inner === 'DateTime') return 'dateTime';\n if (inner === 'Date') return 'date';\n }\n return null;\n }\n\n constructor() {\n // Emit lazyLoad only on filter / search changes for paginated lists,\n // matching mt-table's behaviour (group-by is a pure FE concern, not a\n // re-fetch trigger). Skip the initial firing while the bucket is still at\n // its default empty state so we don't double-fetch on mount.\n let primed = false;\n effect(() => {\n const state = this.cardsState();\n const filters = this.bucket().filters();\n const filterTerm = this.bucket().filterTerm();\n\n if (!state.config.isPaginated) return;\n if (!primed) {\n primed = true;\n if (Object.keys(filters).length === 0 && !filterTerm) return;\n }\n\n queueMicrotask(() =>\n this.lazyLoad.emit({\n filters: {\n ...filters,\n ...(filterTerm ? { generalSearch: filterTerm } : {}),\n },\n pageSize: state.take,\n first: state.skip,\n currentPage: state.skip / Math.max(state.take, 1) + 1,\n } as ClientListLazyLoadEvent),\n );\n });\n }\n}\n","<mt-table-caption\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"popover\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [exportable]=\"true\"\r\n [columns]=\"columns()\"\r\n [data]=\"rowRepresentations()\"\r\n [groupColumns]=\"grouping.groupableColumns()\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (exportRequested)=\"exportExcel()\"\r\n (printRequested)=\"printPdf()\"\r\n/>\r\n\r\n@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (visibleCards().length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{ \"components.clientComponents.list.noCardsFound\" | transloco }}\r\n </div>\r\n} @else if (grouping.groupingActive()) {\r\n <div class=\"flex flex-col gap-6\">\r\n @for (group of groupedCards(); track group.key) {\r\n <section class=\"flex flex-col gap-3\">\r\n <header\r\n class=\"flex items-center gap-3 px-2 py-2 bg-surface-50 dark:bg-surface-900 border-y border-surface-200 dark:border-surface-700 rounded\"\r\n [style.--mt-group-accent]=\"group.accent ?? 'var(--p-primary-color)'\"\r\n >\r\n <span\r\n class=\"inline-block w-1 h-5 rounded-full\"\r\n [style.background]=\"'var(--mt-group-accent)'\"\r\n ></span>\r\n <span\r\n class=\"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400\"\r\n >\r\n {{ group.columnLabel }}\r\n </span>\r\n <span class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\r\n {{ group.label }}\r\n </span>\r\n <span\r\n class=\"ml-auto inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-300\"\r\n >\r\n {{ group.count }}\r\n </span>\r\n </header>\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of group.cards; track card.id) {\r\n <mt-card\r\n class=\"cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"\r\n 'components.table.filterByThis' | transloco\r\n \"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n </section>\r\n }\r\n </div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of visibleCards(); track card.id) {\r\n @defer (on viewport) {\r\n <mt-card\r\n class=\"cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"'components.table.filterByThis' | transloco\"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n } @placeholder {\r\n <div class=\"min-h-[20rem]\">\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DashboardViewer } from '@masterteam/dashboard-builder';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListInformativeState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-informative-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, DashboardViewer, SkeletonModule, TranslocoPipe],\r\n templateUrl: './client-list-informative-view.html',\r\n})\r\nexport class ClientListInformativeView {\r\n readonly state = input.required<ClientListState>();\r\n\r\n protected readonly informativeState = computed(\r\n () => this.state() as ClientListInformativeState,\r\n );\r\n protected readonly dashboardExtraFilters = computed(() => {\r\n const instanceId = this.informativeState().config.instanceId;\r\n\r\n if (instanceId == null) {\r\n return {};\r\n }\r\n\r\n return { currentId: instanceId };\r\n });\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (informativeState().config.contentStart) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.startSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.tableSpan)\r\n \"\r\n >\r\n <mt-card>\r\n @if (\r\n informativeState().loading &&\r\n !informativeState().dashboardData?.charts?.length\r\n ) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"6rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n </div>\r\n } @else if (informativeState().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ informativeState().error }}\r\n </div>\r\n } @else if (!informativeState().dashboardData?.charts?.length) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{\r\n \"components.clientComponents.list.noInformativeDashboard\"\r\n | transloco\r\n }}\r\n </div>\r\n } @else {\r\n <div class=\"min-h-[420px]\">\r\n <mt-dashboard-viewer\r\n [isPage]=\"false\"\r\n [showFilters]=\"false\"\r\n [dashboardData]=\"informativeState().dashboardData\"\r\n [extraFilters]=\"dashboardExtraFilters()\"\r\n />\r\n </div>\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (informativeState().config.contentEnd) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.endSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Subscription } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TableAction } from '@masterteam/components/table';\r\nimport {\r\n RuntimeAction,\r\n RuntimeActionRunner,\r\n resolveActionLabel,\r\n} from '@masterteam/components/runtime-action';\r\nimport { ClientListApiService } from './services/client-list-api.service';\r\nimport { ClientListStateService } from './services/client-list-state.service';\r\nimport {\r\n ClientListRuntimeActionsService,\r\n defaultResolveRecordId,\r\n} from './services/client-list-runtime-actions.service';\r\nimport {\r\n ClientListAreaType,\r\n ClientListConfiguration,\r\n ClientListContentTemplateContext,\r\n ClientListFormConfiguration,\r\n ClientListItemClickedEvent,\r\n ClientListInformativeConfiguration,\r\n ClientListLazyLoadEvent,\r\n ClientListLayoutConfig,\r\n ClientListMode,\r\n ClientListRuntimeRecordActionsConfig,\r\n ClientListRuntimeRecordActionsContext,\r\n ClientListState,\r\n RuntimeTableDisplayRow,\r\n ClientListTableQuery,\r\n ClientListType,\r\n NormalizedClientListConfiguration,\r\n ClientListCard,\r\n} from './models/client-list.model';\r\nimport { ClientListTableView } from './components/client-list-table-view/client-list-table-view';\r\nimport { ClientListCardsView } from './components/client-list-cards-view/client-list-cards-view';\r\nimport { ClientListInformativeView } from './components/client-list-informative-view/client-list-informative-view';\r\n\r\nconst DEFAULT_AREA_TYPE: ClientListAreaType = 'table';\r\nconst DEFAULT_MODE: ClientListMode = 'auto';\r\nconst DEFAULT_TYPE: ClientListType = 'form';\r\nconst DEFAULT_SERVER_PAGE_SIZE = 100;\r\nconst DEFAULT_TABLE_PAGE_SIZE = 100;\r\nconst LOCAL_PAGE_SIZE_SOURCE = 3000;\r\nconst DEFAULT_COLLAPSE_ICON = 'arrow.chevron-up';\r\nconst DEFAULT_EXPAND_ICON = 'arrow.chevron-down';\r\nconst DEFAULT_SIDE_CONTENT_SPAN = 3;\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientListTableView,\r\n ClientListCardsView,\r\n ClientListInformativeView,\r\n ],\r\n providers: [ClientListStateService, ClientListRuntimeActionsService],\r\n templateUrl: './client-list.html',\r\n})\r\nexport class ClientList implements OnDestroy {\r\n private readonly api = inject(ClientListApiService);\r\n protected readonly state = inject(ClientListStateService);\r\n private readonly runtimeActions = inject(ClientListRuntimeActionsService);\r\n private readonly runtimeRunner = inject(RuntimeActionRunner);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly configurations = input.required<ClientListConfiguration[]>();\r\n readonly defaultTake = input(DEFAULT_SERVER_PAGE_SIZE);\r\n\r\n readonly loaded = output<string>();\r\n readonly errored = output<{ key: string; message: string }>();\r\n readonly itemClicked = output<ClientListItemClickedEvent>();\r\n\r\n protected readonly items = this.state.items;\r\n private readonly subscriptions = new Map<string, Subscription>();\r\n private readonly inFlightRequestSignatures = new Map<string, string>();\r\n private readonly fulfilledRequestSignatures = new Map<string, string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const configs = this.configurations();\r\n untracked(() => this.configureItems(configs));\r\n\r\n untracked(() => {\r\n this.state.items().forEach((item) => {\r\n this.loadItem(item);\r\n });\r\n });\r\n });\r\n }\r\n\r\n onLazyLoad(itemKey: string, event: ClientListLazyLoadEvent): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (\r\n !item ||\r\n item.type === 'informative' ||\r\n item.areaType !== 'table' ||\r\n !item.config.isPaginated\r\n ) {\r\n return;\r\n }\r\n\r\n const take = Number(event.pageSize ?? item.take);\r\n const skip = Number(event.first ?? 0);\r\n this.loadTable(item.key, item.config, skip, take);\r\n }\r\n\r\n reload(itemKey?: string): void {\r\n if (itemKey) {\r\n this.reloadByKey(itemKey);\r\n return;\r\n }\r\n\r\n this.items().forEach((item) => {\r\n this.loadItem(item, true);\r\n });\r\n }\r\n\r\n reloadByKey(itemKey: string): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (!item) return;\r\n\r\n this.loadItem(item, true);\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n this.state.toggleExpanded(key);\r\n }\r\n\r\n onTableRowClick(item: ClientListState, row: RuntimeTableDisplayRow): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'table',\r\n item: row,\r\n state: item,\r\n });\r\n }\r\n\r\n onCardClick(item: ClientListState, card: ClientListCard): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'cards',\r\n item: card,\r\n state: item,\r\n });\r\n }\r\n\r\n /**\r\n * Called by the table view when a row's 3-dots menu is opened. Triggers a\r\n * lazy fetch of that row's runtime actions when `runtimeRecordActions` is\r\n * enabled with the default `onMenuOpen` strategy. Skips when the cache is\r\n * still warm — the service handles in-flight dedupe and TTL.\r\n */\r\n onRowActionsRequested(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return;\r\n if ((config.loadStrategy ?? 'onMenuOpen') !== 'onMenuOpen') return;\r\n\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n\r\n /**\r\n * Per-row predicate used by the popover skeleton state.\r\n */\r\n isRowActionsLoading(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): boolean {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return false;\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return false;\r\n return this.runtimeActions\r\n .loadingRowKeys()\r\n .has(this.runtimeActions.rowKey(item.key, recordId));\r\n }\r\n\r\n /**\r\n * Per-list merged row-actions, keyed by item.key. Static `rowActions` are\r\n * augmented with one entry per distinct runtime `actionKey` discovered for\r\n * any row in the list, and re-evaluated when the runtime cache changes.\r\n */\r\n protected readonly mergedRowActionsByKey = computed<\r\n ReadonlyMap<string, TableAction[]>\r\n >(() => {\r\n const cache = this.runtimeActions.actionsByRowKey();\r\n const result = new Map<string, TableAction[]>();\r\n for (const item of this.state.items()) {\r\n result.set(item.key, this.computeMergedRowActions(item, cache));\r\n }\r\n return result;\r\n });\r\n\r\n /** Fallback used by the template when no entry exists for an item.key. */\r\n private readonly emptyActions: TableAction[] = [];\r\n private readonly rowActionsLoadingFnCache = new Map<\r\n string,\r\n (row: RuntimeTableDisplayRow) => boolean\r\n >();\r\n\r\n rowActionsFor(item: ClientListState): TableAction[] {\r\n return (\r\n this.mergedRowActionsByKey().get(item.key) ??\r\n item.config.rowActions ??\r\n this.emptyActions\r\n );\r\n }\r\n\r\n rowActionsLoadingFnFor(\r\n item: ClientListState,\r\n ): (row: RuntimeTableDisplayRow) => boolean {\r\n let fn = this.rowActionsLoadingFnCache.get(item.key);\r\n if (!fn) {\r\n const itemKey = item.key;\r\n fn = (row: RuntimeTableDisplayRow) => {\r\n const current = this.state.itemsByKey()[itemKey];\r\n return current ? this.isRowActionsLoading(current, row) : false;\r\n };\r\n this.rowActionsLoadingFnCache.set(itemKey, fn);\r\n }\r\n return fn;\r\n }\r\n\r\n private computeMergedRowActions(\r\n item: ClientListState,\r\n cache: ReadonlyMap<string, RuntimeAction[]>,\r\n ): TableAction[] {\r\n const baseActions = item.config.rowActions ?? [];\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return baseActions;\r\n\r\n const prefix = `${item.key}:`;\r\n const prototypes = new Map<string, RuntimeAction>();\r\n for (const [key, actions] of cache) {\r\n if (!key.startsWith(prefix)) continue;\r\n for (const action of actions) {\r\n if (!prototypes.has(action.actionKey)) {\r\n prototypes.set(action.actionKey, action);\r\n }\r\n }\r\n }\r\n\r\n if (prototypes.size === 0) {\r\n return baseActions;\r\n }\r\n\r\n const icon = config.actionIcon ?? 'media.play-circle';\r\n const runtimeActionEntries: TableAction[] = [];\r\n for (const [actionKey, prototype] of prototypes) {\r\n const label = resolveActionLabel(prototype);\r\n runtimeActionEntries.push({\r\n icon: icon as TableAction['icon'],\r\n color: 'secondary',\r\n variant: 'outlined',\r\n label,\r\n tooltip: label,\r\n hidden: (row) => {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return true;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, recordId),\r\n );\r\n return !rowActions?.some(\r\n (a) => a.actionKey === actionKey && a.isAvailable !== false,\r\n );\r\n },\r\n action: (row) => {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, ctx.recordId),\r\n );\r\n const action = rowActions?.find((a) => a.actionKey === actionKey);\r\n if (action) {\r\n void this.executeRuntimeAction(item, ctx, config, action);\r\n }\r\n },\r\n });\r\n }\r\n\r\n return [...baseActions, ...runtimeActionEntries];\r\n }\r\n\r\n private async executeRuntimeAction(\r\n item: ClientListState,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n action: RuntimeAction,\r\n ): Promise<void> {\r\n const result = await this.runtimeRunner.execute(action, {\r\n defaultAfterSuccess: 'refresh',\r\n });\r\n\r\n if (result.status !== 'success') return;\r\n\r\n if (result.afterSuccess === 'refresh' || result.afterSuccess == null) {\r\n this.runtimeActions.invalidateList(item.key);\r\n this.reloadByKey(item.key);\r\n config.onActionExecuted?.(action, ctx);\r\n }\r\n }\r\n\r\n private toRuntimeActionsContext(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ): ClientListRuntimeRecordActionsContext | null {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return null;\r\n\r\n return {\r\n listKey: item.key,\r\n contextKey: item.config.contextKey ?? null,\r\n instanceId: item.config.instanceId ?? null,\r\n moduleId: item.config.moduleId ?? 0,\r\n row,\r\n recordId,\r\n };\r\n }\r\n\r\n private resolveRecordId(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n row: RuntimeTableDisplayRow,\r\n ): number | null {\r\n return (config.resolveRecordId ?? defaultResolveRecordId)(row);\r\n }\r\n\r\n templateContext(item: ClientListState): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n\r\n defaultTitle(item: ClientListState): string {\r\n if (item.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.informativeDashboard',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n item.areaType === 'cards'\r\n ? 'components.clientComponents.list.cards'\r\n : 'components.clientComponents.list.table',\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((sub) => sub.unsubscribe());\r\n this.subscriptions.clear();\r\n this.rowActionsLoadingFnCache.clear();\r\n this.runtimeActions.clearAll();\r\n }\r\n\r\n private configureItems(configs: ClientListConfiguration[]): void {\r\n const previousItems = this.state.itemsByKey();\r\n const hasMultipleConfigs = (configs ?? []).length > 1;\r\n\r\n const normalized: ClientListState[] = (configs ?? []).map(\r\n (config, index) => {\r\n const type = this.resolveType(config);\r\n const isInformative = type === 'informative';\r\n const formConfig = isInformative ? null : this.asFormConfig(config);\r\n const areaType = isInformative\r\n ? DEFAULT_AREA_TYPE\r\n : this.resolveAreaType(formConfig?.areaType);\r\n const mode = isInformative\r\n ? DEFAULT_MODE\r\n : this.resolveMode(formConfig?.mode, formConfig?.columnKeys);\r\n const isPaginated =\r\n !isInformative &&\r\n areaType === 'table' &&\r\n (formConfig?.isPaginated ?? true);\r\n const configuredTablePageSize = this.resolvePositiveInteger(\r\n formConfig?.table?.pageSize,\r\n );\r\n const showHeader = config.showHeader ?? true;\r\n const take =\r\n !isInformative && areaType === 'table'\r\n ? isPaginated\r\n ? (this.resolvePositiveInteger(formConfig?.take) ??\r\n configuredTablePageSize ??\r\n this.defaultTake())\r\n : LOCAL_PAGE_SIZE_SOURCE\r\n : 0;\r\n const collapseEnabled =\r\n showHeader &&\r\n (config.collapse?.enabled ?? true) &&\r\n hasMultipleConfigs;\r\n const layout = this.resolveLayout(config);\r\n const key = config.key ?? this.createItemKey(config, index);\r\n const existing = previousItems[key];\r\n const normalizedConfig = this.toNormalizedConfig(\r\n config,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n showHeader,\r\n collapseEnabled,\r\n layout,\r\n );\r\n\r\n if (isInformative) {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'informative',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: existing?.dashboardData ?? null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n if (areaType === 'cards') {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'cards',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: existing?.areaType === 'table' ? existing.skip : 0,\r\n take,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n },\r\n );\r\n\r\n this.state.setConfigs(normalized);\r\n this.cleanupStaleResources(new Set(normalized.map((item) => item.key)));\r\n }\r\n\r\n private loadItem(item: ClientListState, force = false): void {\r\n if (item.type === 'informative') {\r\n this.loadInformative(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n if (item.areaType === 'cards') {\r\n this.loadCards(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n this.loadTable(item.key, item.config, item.skip, item.take, force);\r\n }\r\n\r\n private loadTable(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const query = this.toTableQuery(config, skip, take);\r\n const requestSignature = this.createTableRequestSignature(config, query);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getRows(config.contextKey!, config.instanceId!, query, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setRowsResult(\r\n key,\r\n response.data,\r\n config,\r\n query.skip,\r\n query.take,\r\n );\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.tableRowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.rowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadCards(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createCardsRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getCards(config.contextKey!, config.instanceId, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setCardsResult(key, response.data, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadInformative(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createInformativeRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api.getInformativeDashboard(config.moduleId).subscribe({\r\n next: (response) => {\r\n this.state.setInformativeResult(key, response.data ?? null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n },\r\n error: (error) => {\r\n if (error?.status === 404) {\r\n this.state.setInformativeResult(key, null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n return;\r\n }\r\n\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.informativeLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private resolveAreaType(\r\n areaType: ClientListAreaType | undefined,\r\n ): ClientListAreaType {\r\n return areaType === 'cards' ? 'cards' : DEFAULT_AREA_TYPE;\r\n }\r\n\r\n private resolveType(config: ClientListConfiguration): ClientListType {\r\n return config.type === 'informative' ? 'informative' : DEFAULT_TYPE;\r\n }\r\n\r\n private resolveMode(\r\n mode: ClientListMode | undefined,\r\n columnKeys: string[] | undefined,\r\n ): ClientListMode {\r\n if (mode !== 'override') return DEFAULT_MODE;\r\n return (columnKeys ?? []).length > 0 ? 'override' : DEFAULT_MODE;\r\n }\r\n\r\n private toNormalizedConfig(\r\n config: ClientListConfiguration,\r\n type: ClientListType,\r\n areaType: ClientListAreaType,\r\n mode: ClientListMode,\r\n isPaginated: boolean,\r\n take: number,\r\n showHeader: boolean,\r\n collapseEnabled: boolean,\r\n layout: Required<ClientListLayoutConfig>,\r\n ): NormalizedClientListConfiguration {\r\n const informativeConfig = this.asInformativeConfig(config);\r\n const formConfig = this.asFormConfig(config);\r\n\r\n return {\r\n contextKey: formConfig?.contextKey ?? null,\r\n instanceId:\r\n formConfig?.instanceId ?? informativeConfig?.instanceId ?? null,\r\n filters: formConfig?.filters ?? [],\r\n moduleId: informativeConfig?.moduleId ?? 0,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n title: config.title,\r\n showHeader,\r\n columnKeys: formConfig?.columnKeys ?? [],\r\n table: this.resolveTableDisplayConfig(formConfig, take, isPaginated),\r\n headerStart: config.headerStart,\r\n headerEnd: config.headerEnd,\r\n contentStart: config.contentStart,\r\n contentEnd: config.contentEnd,\r\n templateContent: config.templateContent,\r\n rowActions: config.rowActions ?? [],\r\n actionShape: config.actionShape,\r\n dataLoaded: config.dataLoaded,\r\n runtimeRecordActions: config.runtimeRecordActions,\r\n collapse: {\r\n enabled: collapseEnabled,\r\n expandedByDefault: config.collapse?.expandedByDefault ?? true,\r\n collapseIcon: config.collapse?.collapseIcon ?? DEFAULT_COLLAPSE_ICON,\r\n expandIcon: config.collapse?.expandIcon ?? DEFAULT_EXPAND_ICON,\r\n },\r\n layout,\r\n };\r\n }\r\n\r\n private createItemKey(\r\n config: ClientListConfiguration,\r\n index: number,\r\n ): string {\r\n if (this.isInformativeConfig(config)) {\r\n return `informative-${config.moduleId}-${config.instanceId ?? 'scope'}-${index}`;\r\n }\r\n\r\n return [\r\n config.contextKey,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n config.areaType ?? DEFAULT_AREA_TYPE,\r\n index,\r\n ].join('-');\r\n }\r\n\r\n private resolveLayout(\r\n config: ClientListConfiguration,\r\n ): Required<ClientListLayoutConfig> {\r\n const hasStart = !!config.contentStart;\r\n const hasEnd = !!config.contentEnd;\r\n\r\n const startSpan = hasStart\r\n ? this.clampSpan(config.layout?.startSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n let endSpan = hasEnd\r\n ? this.clampSpan(config.layout?.endSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n\r\n if (startSpan + endSpan >= DEFAULT_GRID_COLUMNS) {\r\n endSpan = Math.max(0, DEFAULT_GRID_COLUMNS - startSpan - 1);\r\n }\r\n\r\n const availableForTable = Math.max(\r\n 1,\r\n DEFAULT_GRID_COLUMNS - startSpan - endSpan,\r\n );\r\n const tableSpan = this.clampSpan(\r\n config.layout?.tableSpan ?? availableForTable,\r\n 1,\r\n availableForTable,\r\n );\r\n\r\n return {\r\n startSpan,\r\n tableSpan,\r\n endSpan,\r\n };\r\n }\r\n\r\n private resolveTableDisplayConfig(\r\n config: ClientListFormConfiguration | null,\r\n take: number,\r\n isPaginated: boolean,\r\n ) {\r\n const configuredPageSize = this.resolvePositiveInteger(\r\n config?.table?.pageSize,\r\n );\r\n\r\n return {\r\n pageSize: isPaginated\r\n ? take\r\n : (configuredPageSize ?? DEFAULT_TABLE_PAGE_SIZE),\r\n searchable: config?.table?.searchable ?? false,\r\n exportable: config?.table?.exportable ?? false,\r\n };\r\n }\r\n\r\n private clampSpan(\r\n value: number | undefined,\r\n min = 0,\r\n max = DEFAULT_GRID_COLUMNS,\r\n ): number {\r\n const normalized = Number(value ?? min);\r\n if (!Number.isFinite(normalized)) return min;\r\n return Math.min(max, Math.max(min, Math.trunc(normalized)));\r\n }\r\n\r\n private resolvePositiveInteger(value: number | undefined): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized <= 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n\r\n private cleanupStaleResources(activeKeys: Set<string>): void {\r\n for (const [key, sub] of this.subscriptions.entries()) {\r\n if (!activeKeys.has(key)) {\r\n sub.unsubscribe();\r\n this.subscriptions.delete(key);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n }\r\n }\r\n\r\n for (const key of this.rowActionsLoadingFnCache.keys()) {\r\n if (!activeKeys.has(key)) {\r\n this.rowActionsLoadingFnCache.delete(key);\r\n this.runtimeActions.invalidateList(key);\r\n }\r\n }\r\n }\r\n\r\n private notifyDataLoaded(key: string): void {\r\n const item = this.state.itemsByKey()[key];\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.maybeEagerLoadRuntimeActions(item);\r\n item.config.dataLoaded?.(this.templateContext(item));\r\n }\r\n\r\n private maybeEagerLoadRuntimeActions(item: ClientListState): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled || config.loadStrategy !== 'eager') return;\r\n if (item.type !== 'form' || item.areaType !== 'table') return;\r\n\r\n for (const row of item.rows) {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) continue;\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n }\r\n\r\n private toTableQuery(\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): ClientListTableQuery {\r\n return {\r\n mode: config.mode,\r\n columnKeys: config.mode === 'override' ? config.columnKeys : undefined,\r\n skip: config.isPaginated ? skip : 0,\r\n take: config.isPaginated ? take : LOCAL_PAGE_SIZE_SOURCE,\r\n };\r\n }\r\n\r\n private createTableRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n query: ClientListTableQuery,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n query.mode,\r\n query.skip,\r\n query.take,\r\n ...(query.columnKeys ?? []),\r\n ].join('|');\r\n }\r\n\r\n private createCardsRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'Card',\r\n ].join('|');\r\n }\r\n\r\n private createInformativeRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.moduleId,\r\n config.instanceId ?? 'scope',\r\n 'dashboard',\r\n ].join('|');\r\n }\r\n\r\n private hasValidIdentifiers(\r\n config: NormalizedClientListConfiguration,\r\n ): boolean {\r\n if (config.type === 'informative') {\r\n return Number.isFinite(config.moduleId) && config.moduleId > 0;\r\n }\r\n\r\n if (!config.contextKey?.trim()) {\r\n return false;\r\n }\r\n\r\n if (config.areaType === 'cards') {\r\n return true;\r\n }\r\n\r\n const instanceId = config.instanceId;\r\n return instanceId != null && Number.isFinite(instanceId) && instanceId > 0;\r\n }\r\n\r\n private getMissingIdentifiersMessage(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n if (config.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.errors.missingModuleId',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n config.areaType === 'cards'\r\n ? 'components.clientComponents.list.errors.missingContextKey'\r\n : 'components.clientComponents.list.errors.missingContextAndInstance',\r\n );\r\n }\r\n\r\n private isInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): config is ClientListInformativeConfiguration {\r\n return config.type === 'informative';\r\n }\r\n\r\n private asInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListInformativeConfiguration | null {\r\n return this.isInformativeConfig(config) ? config : null;\r\n }\r\n\r\n private asFormConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListFormConfiguration | null {\r\n return this.isInformativeConfig(config) ? null : config;\r\n }\r\n\r\n private serializeFilters(\r\n filters: NormalizedClientListConfiguration['filters'] | undefined,\r\n ): string {\r\n return JSON.stringify(filters ?? []);\r\n }\r\n}\r\n","<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"rowActionsFor(item)\"\r\n [actionShape]=\"item.config.actionShape\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFnFor(item)\"\r\n (rowActionsRequested)=\"onRowActionsRequested(item, $event)\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n [rowActions]=\"item.config.rowActions\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_GRID_COLUMNS","i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;MAgBa,oBAAoB,CAAA;AACd,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACzB,mBAAmB,GAAG,aAAa;IACnC,oBAAoB,GAAG,wBAAwB;IAC/C,kBAAkB,GAAG,SAAS;IAE/C,OAAO,CACL,UAAoC,EACpC,UAAkB,EAClB,KAA2B,EAC3B,UAA0C,EAAE,EAAA;QAE5C,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAC1D,SAAS,CAAC,CAAC,YAAY,KACrB,IAAI,CAAC,YAAY,CAA2B;YAC1C,UAAU;AACV,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,UAAU,EAAE,OAAO;YACnB,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;AAC7D,YAAA,OAAO,EAAE,IAAI,CAAC,YAAY,CACxB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EACrC,OAAO,CACR;AACD,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,KAAK,CAAC,IAAI;SACrB,CAAC,CACH,CACF;IACH;AAEA,IAAA,QAAQ,CACN,UAAoC,EACpC,UAA0B,EAC1B,UAA0C,EAAE,EAAA;QAE5C,OAAO,IAAI,CAAC,YAAY,CAAyB;YAC/C,UAAU;AACV,YAAA,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,IAAI,CAAC,YAAY,CACxB,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,SAAS,EACtE,OAAO,CACR;AACD,YAAA,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,uBAAuB,CACrB,QAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,QAAQ,CAAA,UAAA,CAAY,CACnD;IACH;AAEQ,IAAA,YAAY,CAClB,OAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAc,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACvE;IAEQ,wBAAwB,CAC9B,UAAoC,EACpC,KAA2B,EAAA;AAE3B,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE;AAC5B,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;QAC7B;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC;QACtB;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAEF,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,OAAA,EAAU,OAAO,CAAC,OAAO,CAAA,QAAA,EAAW,OAAO,CAAC,QAAQ,UAAU;aAC3F,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KACX,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAClE,CACF;IACL;AAEQ,IAAA,oBAAoB,CAC1B,UAAkB,EAAA;QAElB,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;AAC1B,aAAA;SACF;IACH;AAEQ,IAAA,YAAY,CAClB,WAA4C,EAC5C,YAAA,GAA+C,EAAE,EAAA;AAEjD,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC;QACxD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS;IAC3C;IAEQ,MAAM,CAAC,IAAY,EAAE,IAAY,EAAA;AACvC,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,YAAA,OAAO,CAAC;QACV;QAEA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;IACpC;AAEQ,IAAA,qBAAqB,CAC3B,OAAmE,EAAA;AAEnE,QAAA,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE;aACxB,MAAM,CAAC,CAAC,MAAM,KACb,OAAO,MAAM,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK;aAE7D,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3C,aAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;aAE/C,GAAG,CAAC,CAAC,MAAM,KACV,OAAO,MAAM,KAAK;AAChB,cAAE;AACF,eAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AAE7C,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS;IACvC;AAEQ,IAAA,wBAAwB,CAC9B,UAAkB,EAAA;AAElB,QAAA,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QACrD,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC9B;uGAlJW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACsBlC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAiB;IAC3D,YAAY;IACZ,UAAU;AACX,CAAA,CAAC;MAGW,sBAAsB,CAAA;AACxB,IAAA,UAAU,GAAG,MAAM,CAAkC,EAAE,iFAAC;AAExD,IAAA,KAAK,GAAG,QAAQ,CAAoB,MAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACzC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC;AAC7B,UAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC;AACxD,UAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAC1C,4EACF;AAED,IAAA,UAAU,CAAC,OAA0B,EAAA;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;QACtC,MAAM,IAAI,GAAoC,EAAE;AAEhD,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;IAEA,UAAU,CAAC,GAAW,EAAE,OAAgB,EAAA;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,OAAO;AACR,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,QAAQ,CAAC,GAAW,EAAE,OAAsB,EAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,KAAK,EAAE,OAAO;AACf,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,aAAa,CACX,GAAW,EACX,QAAkC,EAClC,MAAyC,EACzC,IAAY,EACZ,IAAY,EAAA;QAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IACE,CAAC,MAAM;YACP,MAAM,CAAC,IAAI,KAAK,aAAa;AAC7B,YAAA,MAAM,CAAC,QAAQ,KAAK,OAAO,EAC3B;YACA;QACF;QAEA,MAAM,OAAO,GAA6B,CACxC,QAAQ,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE;aAErC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO;AACjC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;aAChC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,MAAM;YACvB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,IAAI,EAAE,QAAiB;YACvB,QAAQ,EAAE,CAAC,4BAA4B,CAAC,GAAG,CACzC,MAAM,CAAC,QAA0B,CAClC;YACD,KAAK,EAAE,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS;YACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;AAC5C,SAAA,CAAC,CAAC;AAEL,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAC1C,QAAQ,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CACnC;AAED,QAAA,MAAM,IAAI,GAA6B,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CACjE,CAAC,MAAM,KAAI;YACT,MAAM,GAAG,GAA2B,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;AAErD,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzB,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEnE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CACjC,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,EAC5C,QAAQ,EACR,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,aAAa,EACpB,QAAQ,EAAE,aAAa,EACvB,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,CAChC;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CACF;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAClD,MAAM,KAAK,GACT,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE;AAClE,QAAA,MAAM,UAAU,GACd,MAAM,CAAC,WAAW,KAAK;cACnB,IAAI,CAAC;AACP,eAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;AAEtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;AACL,gBAAA,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;gBAC5B,OAAO;gBACP,IAAI;AACJ,gBAAA,KAAK,EAAE,EAAE;gBACT,IAAI;gBACJ,IAAI;gBACJ,UAAU;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CACZ,GAAW,EACX,QAAgC,EAChC,MAAyC,EAAA;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IACE,CAAC,MAAM;YACP,MAAM,CAAC,IAAI,KAAK,aAAa;AAC7B,YAAA,MAAM,CAAC,QAAQ,KAAK,OAAO,EAC3B;YACA;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAClD,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM;AACxC,QAAA,MAAM,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,GAAG,IAAI,MAAM,CAAC,SAAS;QACzE,MAAM,KAAK,GACT,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AAC3B,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,eAAe,EAAE,IAAI;YACrB,SAAS;YACT,MAAM,CAAC,KAAK;AAEd,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;gBACL,SAAS;AACT,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,EAAE;gBACR,KAAK;AACL,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,CAAC;gBACP,UAAU,EAAE,KAAK,CAAC,MAAM;AACxB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,oBAAoB,CAClB,GAAW,EACX,QAAsD,EACtD,MAAyC,EAAA;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;YAAE;QAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAA,OAAA,EAAU,MAAM,CAAC,QAAQ,CAAA,CAAE;AACjE,QAAA,MAAM,KAAK,GACT,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,uBAAuB;QACxE,MAAM,aAAa,GAAG;cAClB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK;cACpC,IAAI;AAER,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;gBACL,SAAS;AACT,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;gBAC9C,aAAa;AACb,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,GAAW,EAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ;AAC3B,aAAA;AACF,SAAA,CAAC;IACJ;IAEQ,cAAc,CACpB,IAAqB,EACrB,QAA0B,EAAA;AAE1B,QAAA,IACE,CAAC,QAAQ;AACT,YAAA,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AAC3B,YAAA,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EACnC;AACA,YAAA,OAAO,IAAI;QACb;QAEA,OAAO;AACL,YAAA,GAAG,IAAI;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;AACnC,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAC/C,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B;IACH;AAEQ,IAAA,OAAO,CAAC,IAA6B,EAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAC/B,IAAI,EAAE,OAAO,IAAI,EAAE,EACnB,IAAI,EAAE,cAAc,EAAE,MAAM,IAAI,EAAE,CACnC;QACD,MAAM,iBAAiB,GAAG,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAC3C,IAAI,EAAE,cAAc,EAAE,YAAY,IAAI,EAAE,EACxC,IAAI,EAAE,cAAc,EAAE,OAAO,IAAI,EAAE,EACnC,YAAY,CACb;AAED,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;YAC5B,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC;AACzE,YAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC;AACtC,kBAAE;kBACA,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,CAAC;YAChE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,kBAAkB,KAC1D,IAAI,CAAC,YAAY,CACf,kBAAkB,CAAC,aAAa,EAChC,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,EAClD,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,aAAa,EAChC,kBAAkB,CAAC,qBAAqB,EACxC,MAAM,CAAC,EAAE,EACT,kBAAkB,CAAC,KAAK,CACzB,CACF;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;YACzD,MAAM,kBAAkB,GAAG;kBACvB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW;kBACjD,QAAQ;YAEZ,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAA,OAAA,EAAU,MAAM,CAAC,EAAE,CAAA,CAAE;AAC1C,gBAAA,MAAM,EAAE;AACN,sBAAE;wBACE,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;AAC5B;AACH,sBAAE,SAAS;gBACb,UAAU,EAAE,MAAM,CAAC,EAAE;AACrB,gBAAA,UAAU,EAAE,kBAAkB;AAC9B,gBAAA,QAAQ,EAAE,kBAAkB;aAC7B;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,CAClB,OAAgC,EAChC,MAAsC,EAAA;AAEtC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,OAAO;QAChB;QAEA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAA4B,EAAE;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACjC;gBACF;AAEA,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,oBAAoB,CAC1B,QAA2D,EAAA;QAE3D,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,QAAQ;AAEtD,QAAA,QACE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,cAAc,CAAC;AAC5D,YAAA,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC;IAEzB;AAEQ,IAAA,YAAY,CAClB,aAAqB,EACrB,IAAyD,EACzD,QAAiD,EACjD,QAA4B,EAC5B,KAAyB,EACzB,aAA6D,EAC7D,qBAA0D,EAC1D,QAAgB,EAChB,KAAc,EAAA;AAEd,QAAA,MAAM,gBAAgB,IAAI,QAAQ,IAAI,MAAM,CAA2B;QAEvE,OAAO;AACL,YAAA,EAAE,EAAE,QAAQ;YACZ,UAAU,EAAE,QAAQ,EAAE,EAAE;AACxB,YAAA,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,aAAa;AACnC,YAAA,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,aAAa;AACvD,YAAA,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,aAAa;YAC/C,QAAQ,EACN,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,GAAG,KAAK;AAClC,kBAAE;AACF,kBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACtB,YAAA,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAwB;AACjD,YAAA,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,QAAQ,EAAE,MAAM;AACtB,YAAA,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK;AAC/B,YAAA,aAAa,EAAE,aAAwD;YACvE,qBAAqB,EAAE,qBAAqB,IAAI,SAAS;YACzD,UAAU,EAAE,IAAI,EAAE,UAAU;SAC7B;IACH;AAEQ,IAAA,kBAAkB,CACxB,UAAyC,EAAA;QAEzC,OAAO;YACL,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YACtE,eAAe,EAAE,IAAI,GAAG,CACtB,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CACjE;SACF;IACH;IAEQ,mBAAmB,CACzB,aAAqB,EACrB,YAAoC,EAAA;QAEpC,QACE,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;YACrC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC;IAEnD;AAEQ,IAAA,oBAAoB,CAC1B,YAEiB,EACjB,OAAqC,EACrC,YAAoC,EAAA;AAEpC,QAAA,IAAI,YAAY,EAAE,MAAM,EAAE;AACxB,YAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC/B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CACvC,IAAI,CAAC,WAAW,EAChB,YAAY,CACb;gBAED,OAAO;oBACL,aAAa,EAAE,IAAI,CAAC,WAAW;AAC/B,oBAAA,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW;oBACjD,QAAQ;oBACR,KAAK,EAAE,QAAQ,EAAE,KAAK;oBACtB,QAAQ,EAAE,QAAQ,EAAE,QAAQ;AAC5B,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK;AACpC,oBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;AACzC,oBAAA,qBAAqB,EAAE,QAAQ,EAAE,aAAa,IAAI,IAAI;iBACvD;AACH,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO;iBACJ,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO;AACjC,iBAAA,GAAG,CAAC,CAAC,MAAM,KAAI;AACd,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEnE,OAAO;oBACL,aAAa,EAAE,MAAM,CAAC,GAAG;AACzB,oBAAA,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG;oBAC3C,QAAQ;AACR,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK;AACtC,oBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ,EAAE,QAAQ;AAC/C,oBAAA,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK;AACtC,oBAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;AAC3C,oBAAA,qBAAqB,EAAE,QAAQ,EAAE,aAAa,IAAI,IAAI;iBACvD;AACH,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,OAAO,EAAE;IACX;IAEQ,4BAA4B,CAClC,MAA6B,EAC7B,UAAyC,EAAA;AAEzC,QAAA,OAAO;AACJ,aAAA,MAAM,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS;AAChE,aAAA,GAAG,CAAC,CAAC,QAAQ,MAAM;AAClB,YAAA,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,GAAG;YACrD,cAAc,EAAE,QAAQ,CAAC,GAAG;YAC5B,QAAQ;YACR,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,qBAAqB,EAAE,QAAQ,CAAC,aAAa,IAAI,IAAI;AACtD,SAAA,CAAC,CAAC;IACP;AAEQ,IAAA,sBAAsB,CAAC,QAAsB,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAChC,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,KAAK,QAAQ,CAC9C;AACD,QAAA,MAAM,KAAK,GAAG,YAAY,EAAE,KAAK;QACjC,MAAM,KAAK,GACT,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI;cAC7C,KAAK,CAAC;cACN,IAAI;QAEV,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/C,cAAE,KAAK,CAAC,IAAI;cACV,IAAI;IACV;IAEQ,sBAAsB,CAC5B,QAAsB,EACtB,KAAa,EAAA;AAEb,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAC7B,YAAA,IAAI,MAAM,CAAC,aAAa,KAAK,iBAAiB,EAAE;AAC9C,gBAAA,OAAO,MAAM;YACf;YAEA,OAAO;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,aAAa,EAAE;AACb,oBAAA,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;oBAC/B,KAAK;AACN,iBAAA;aACF;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,CACrB,IAA2C,EAC3C,KAAa,EAAA;AAEb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,MAAM,MAAM,GAAyB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAI;AACxE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE;YAE9C,OAAO;AACL,gBAAA,GAAG,aAAa;gBAChB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aAClB;AACzB,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;AAC9B,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,eAAe,EAAE;oBACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA;AACF,aAAA;YACD,MAAM;AACN,YAAA,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE;SAC1E;IACH;uGA9hBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAtB,sBAAsB,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACtBD,MAAM,gBAAgB,GAAG,iDAAiD;AAC1E,MAAM,oBAAoB,GAAG,MAAM;AACnC,MAAM,mBAAmB,GAAG,YAAY;AAExC;;;;;AAKG;MAEU,+BAA+B,CAAA;AACzB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEzB,IAAA,KAAK,GAAG,MAAM,CAC7B,IAAI,GAAG,EAAE,4EACV;AACgB,IAAA,YAAY,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,mFAAC;AACrD,IAAA,QAAQ,GAAG,IAAI,GAAG,EAAuC;;AAGjE,IAAA,eAAe,GAAG,QAAQ,CACjC,MAAK;AACH,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B;AAC9C,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YACvC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;QAC7B;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,sFACF;;AAGQ,IAAA,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;IAExD,MAAM,CAAC,OAAe,EAAE,QAAgB,EAAA;AACtC,QAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE;IACjC;AAEA,IAAA,GAAG,CACD,OAAe,EACf,QAAgB,EAChB,KAAgC,EAAA;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;QACxB,IAAI,KAAK,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK;IAC7C;AAEA;;;;;AAKG;IACH,OAAO,CACL,MAA4C,EAC5C,GAA0C,EAAA;AAE1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC;AAClD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,IAAI,oBAAoB;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;AACpC,QAAA,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE;AAClE,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9B,YAAA,OAAO,IAAI,UAAU,CAAkB,CAAC,UAAU,KAAI;AACpD,gBAAA,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBACxB,UAAU,CAAC,QAAQ,EAAE;AACvB,YAAA,CAAC,CAAC;QACJ;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,IAAI,gBAAgB,EAAE,GAAG,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;AAE5C,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;QAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyB,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACrE,GAAG,CAAC,CAAC,QAAQ,KACX,QAAQ,EAAE,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,CAC3D,EACD,KAAK,EAAE,CACR;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAE3B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1B,YAAA,IAAI,EAAE,CAAC,OAAO,KAAI;AAChB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;AAC7B,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B,CAAC;YACD,KAAK,EAAE,MAAK;AACV,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B,CAAC;AACF,SAAA,CAAC;AAEF,QAAA,OAAO,GAAG;IACZ;IAEA,aAAa,CAAC,OAAe,EAAE,QAAgB,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,OAAO;AACrC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAChB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,OAAO,GAAG;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;YAC5B,IAAI,OAAO,GAAG,KAAK;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;YAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC7B,gBAAA,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;oBAChB,OAAO,GAAG,IAAI;gBAChB;YACF;YACA,OAAO,OAAO,GAAG,IAAI,GAAG,OAAO;AACjC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC3B;IAEQ,UAAU,CAAC,GAAW,EAAE,OAAwB,EAAA;QACtD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5B,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACjD,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,CAAC,GAAW,EAAE,OAAgB,EAAA;QAC/C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACnC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,OAAO;AAAE,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;;AACrB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACrB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,CACrB,QAAgB,EAChB,GAA0C,EAAA;AAE1C,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE;AACvC,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC;AAC1C,aAAA,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO;aAChC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;aAC1C,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChD;IAEQ,WAAW,CACjB,MAA4C,EAC5C,GAA0C,EAAA;AAE1C,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,YAAA,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;QAChC;QAEA,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,EAAE;YACnD,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;AACvB,SAAA,CAAC;AAEF,QAAA,MAAM,MAAM,GAAoC;AAC9C,YAAA,UAAU,EAAE,mBAAmB;YAC/B,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB;QAED,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS;QACjC;AAEA,QAAA,OAAO,MAAM;IACf;uGAhLW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA/B,+BAA+B,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;AAoLK,SAAU,sBAAsB,CACpC,GAA2B,EAAA;IAE3B,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAU;AACxD,IAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AACrE,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,gBAAA,OAAO,MAAM;QAC5C;IACF;AACA,IAAA,OAAO,IAAI;AACb;;AC/MA;;;;;;AAMG;MAEU,wBAAwB,CAAA;AAClB,IAAA,OAAO,GAAG,IAAI,GAAG,EAAmC;AAErE,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,GAAG;AACP,gBAAA,OAAO,EAAE,MAAM,CAAe,EAAE,CAAC;AACjC,gBAAA,UAAU,EAAE,MAAM,CAAS,EAAE,CAAC;AAC9B,gBAAA,OAAO,EAAE,MAAM,CAAgB,IAAI,CAAC;AACpC,gBAAA,SAAS,EAAE,MAAM,CAAM,IAAI,CAAC;aAC7B;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;QAC/B;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,KAAK,CAAC,GAAW,EAAA;AACf,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B;uGAnBW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACNlC,MAAMA,sBAAoB,GAAG,EAAE;MAQlB,mBAAmB,CAAA;AACb,IAAA,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAElD,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAmB;AACzC,IAAA,UAAU,GAAG,KAAK,CAAgB,EAAE,iFAAC;AACrC,IAAA,WAAW,GAAG,KAAK,CAA+B,SAAS,kFAAC;AAC5D,IAAA,mBAAmB,GAAG,KAAK,CAElC,IAAI,0FAAC;IACE,QAAQ,GAAG,MAAM,EAA2B;IAC5C,QAAQ,GAAG,MAAM,EAA0B;IAC3C,mBAAmB,GAAG,MAAM,EAA0B;AAE5C,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,OAAO,IAAI,CAAC,KAAK,EAA0B;AAC7C,IAAA,CAAC,4EAAC;AAEF;;;;AAIG;IACgB,MAAM,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,6EACvC;AAED;;;;AAIG;AACgB,IAAA,eAAe,GAAG,QAAQ,CAAgB,MAAK;AAChE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM;AACpB,QAAA,MAAM,KAAK,GAAG;YACZ,aAAa;AACb,YAAA,CAAC,CAAC,GAAG;AACL,YAAA,GAAG,CAAC,IAAI;YACR,GAAG,CAAC,UAAU,IAAI,EAAE;YACpB,GAAG,CAAC,QAAQ,IAAI,EAAE;YAClB,GAAG,CAAC,UAAU,IAAI,EAAE;SACrB;QACD,MAAM,GAAG,GAAG;AACT,aAAA,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;aAC1B,IAAI,CAAC,GAAG,CAAC;AACZ,QAAA,OAAO,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI;AACvD,IAAA,CAAC,sFAAC;AAEiB,IAAA,mBAAmB,GAAG,CAAA,OAAA,EAAUA,sBAAoB,CAAA,iBAAA,CAAmB;AAEhF,IAAA,YAAY,CAAC,IAAY,EAAA;AACjC,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,QAAA,EAAW,IAAI,EAAE;IACtC;AAEU,IAAA,eAAe,CACvB,IAAqB,EAAA;QAErB,OAAO;AACL,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,OAAO;SACnB;IACH;uGAlEW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,gvBCzBhC,yuFAsEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhDY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,KAAK,mgCAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGlC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,yuFAAA,EAAA;;;AEchD,MAAM,aAAa,GAAwB,IAAI,GAAG,EAAE;MAyBvC,mBAAmB,CAAA;AACb,IAAA,OAAO,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC1C,IAAA,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC1C,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE7C,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAmB;AACzC,IAAA,UAAU,GAAG,KAAK,CAAgB,EAAE,iFAAC;IACrC,QAAQ,GAAG,MAAM,EAA2B;IAC5C,SAAS,GAAG,MAAM,EAAkB;IAE1B,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,KAAK,EAA0B,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC3C;;IAGkB,MAAM,GAAG,QAAQ,CAAC,MACnC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,6EACvC;AAED;;;;;;;AAOG;AACgB,IAAA,OAAO,GAAG,QAAQ,CAAc,MAAK;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO;AACtC,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS;QAEvD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM;AAAE,YAAA,OAAO,EAAE;QAE5C,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,KAA4B;YAChE,MAAM,GAAG,GAAG,MAA4C;AACxD,YAAA,MAAM,GAAG,GACP,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC;AAC7C,iBAAC,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;gBAClE,MAAM,CAAC,IAAI;YACb,OAAO;AACL,gBAAA,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;gBAChB,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC;AACjC,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAW;aAChD;AACH,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,8EAAC;AAEF;;;;;;AAMG;AACgB,IAAA,kBAAkB,GAAG,QAAQ,CAC9C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAClE;AAEO,IAAA,SAAS,CAAC,IAAoB,EAAA;AACpC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAEZ;AACb,QAAA,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,YAAA,OAAO,WAAW;QACpB;QACA,MAAM,MAAM,GAA4B,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE;QACvD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;YACxC,MAAM,CAAC,GAAG,MAA4C;AACtD,YAAA,MAAM,GAAG,GACP,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC;AACzC,iBAAC,OAAO,CAAC,CAAC,eAAe,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;gBAC9D,MAAM,CAAC,IAAI;AACb,YAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;YACtB;QACF;AACA,QAAA,OAAO,MAAM;IACf;;;;AAKiB,IAAA,aAAa,GAAG,MAAM,CAAgB,IAAI,oFAAC;AAC3C,IAAA,WAAW,GAAG,MAAM,CAAwB,IAAI,kFAAC;AAElE;;;;;;AAMG;IACc,aAAa,GAAkC,CAAC,MAAK;AACpE,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,2EAAC;AACpD,QAAA,MAAM,KAAK,IAAI,CAAC,GAAG,IAA0B,KAC3C,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAQ;AAC1E,QAAA,KAAK,CAAC,GAAG,GAAG,CAAC,KAAoB,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACtE,QAAA,KAAK,CAAC,MAAM,GAAG,CAAC,EAA2C,KACzD,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AACxD,QAAA,KAAK,CAAC,UAAU,GAAG,MAAM,IAAI;AAC7B,QAAA,OAAO,KAAsC;IAC/C,CAAC,GAAG;AAEJ;;;;AAIG;IACgB,QAAQ,GAAG,IAAI,uBAAuB,CACvD,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,WAAW,CACjB;AAED;;;;AAIG;AACgB,IAAA,YAAY,GAAG,QAAQ,CAAmB,MAAK;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC/B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW;AACvC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK;AAEzB,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,KAAK;AAExB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QAEvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;YAElD,IAAI,IAAI,EAAE;;;;AAIR,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;oBAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,CAAC;oBAC7D,IAAI,OAAO,IAAI,IAAI;AAAE,wBAAA,OAAO,KAAK;AACjC,oBAAA,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrD,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,OAAO;AAAE,oBAAA,OAAO,KAAK;YAC5B;AAEA,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI;AACxC,YAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;gBAC9B,IAAI,GAAG,KAAK,eAAe;AAAE,oBAAA,OAAO,IAAI;AACxC,gBAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACjD,gBAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;AACzE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,mFAAC;AAEF;;;AAGG;AACgB,IAAA,YAAY,GAAG,QAAQ,CAAc,MAAK;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE;AAChD,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAEtB,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqB;QAC3C,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC;YACrD,MAAM,GAAG,GAAG,CAAA,EAAG,KAAK,KAAK,MAAM,IAAI,EAAE,CAAA,CAAE;YAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAChC,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB,gBAAA,QAAQ,CAAC,KAAK,IAAI,CAAC;YACrB;iBAAO;AACL,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;oBACd,GAAG;oBACH,WAAW,EAAE,MAAM,CAAC,KAAK;oBACzB,KAAK;oBACL,MAAM;AACN,oBAAA,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC,IAAI,CAAC;AACd,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACpC,IAAA,CAAC,mFAAC;AAEF;;;;AAIG;AACH;;;;;;AAMG;AACgB,IAAA,mBAAmB,GAAG,QAAQ,CAAsB,MAAK;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;AACtC,cAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;cACzC,SAAS;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;QAChC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,UAAU,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;YACzE,IACE,UAAU,KAAK,QAAQ;AACvB,gBAAA,UAAU,KAAK,MAAM;gBACrB,UAAU,KAAK,SAAS,EACxB;AACA,gBAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;YACxB;QACF;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,0FAAC;AAEF;;;;;AAKG;AACO,IAAA,iBAAiB,CAAC,IAAoB,EAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;QACvC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,aAAa;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;AAChC,QAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,IAAI,GAAG,KAAK,eAAe;gBAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM;gBAAE;YACb,MAAM,UAAU,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC;AACxE,YAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;gBAAE;AACrD,YAAA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE;AACnE,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YACjB;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEA;;;;;;AAMG;IACO,mBAAmB,CAC3B,IAAoB,EACpB,KAAuB,EAAA;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;AAC9D,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC;AAClE,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;YAAE;QAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;AACvC,QAAA,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE;AAC9B,QAAA,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE;AACpE,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;QAC5B;aAAO;AACL,YAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;QAC5B;QACA,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACpC;IAEU,WAAW,GAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;YAC/B,IAAI;AACJ,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE;AACtC,YAAA,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC;AAClE,SAAA,CAAC;IACJ;IAEU,QAAQ,GAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC1B,IAAI;AACJ,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE;YACtC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,SAAS;AAC3C,YAAA,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC;AAClE,SAAA,CAAC;IACJ;IAEQ,qBAAqB,GAAA;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE;QAC7C,OAAO,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS,IAAI,OAAO;IACxD;AAEA;;;;;;AAMG;IACK,gBAAgB,CACtB,GAAY,EACZ,MAAiB,EAAA;AAEjB,QAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;AACjE,QAAA,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;QAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC;QAC9D,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,KAAK;kBACZ,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM;kBACzD,SAAS;YACf,MAAM,SAAS,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC7D,IAAI,SAAS,KAAK,IAAI;AAAE,gBAAA,OAAO,IAAI;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;YAChE,OAAO,SAAS,IAAI,IAAI;QAC1B;AAEA,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC5B,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC;QACrE;AACA,QAAA,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,SAAS,CAAC;IAC1D;IAEQ,qBAAqB,CAC3B,MAAiB,EACjB,SAAkB,EAAA;AAElB,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;AACzC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,UAAU;AACjD,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AAEzC,QAAA,MAAM,QAAQ,GAAI,MAAiC,CAAC,QAAQ;AAC5D,QAAA,MAAM,UAAU,GACd,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QAC5D,IAAI,UAAU,KAAK,UAAU;AAAE,YAAA,OAAO,UAAU;QAChD,IAAI,UAAU,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;AAExC,QAAA,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC9C,YAAA,MAAM,KAAK,GAAI,SAAmC,CAAC,QAAQ;YAC3D,IAAI,KAAK,KAAK,UAAU;AAAE,gBAAA,OAAO,UAAU;YAC3C,IAAI,KAAK,KAAK,MAAM;AAAE,gBAAA,OAAO,MAAM;QACrC;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,WAAA,GAAA;;;;;QAKE,IAAI,MAAM,GAAG,KAAK;QAClB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;YACvC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE;AAE7C,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW;gBAAE;YAC/B,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,GAAG,IAAI;AACb,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU;oBAAE;YACxD;YAEA,cAAc,CAAC,MACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,gBAAA,OAAO,EAAE;AACP,oBAAA,GAAG,OAAO;AACV,oBAAA,IAAI,UAAU,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;AACrD,iBAAA;gBACD,QAAQ,EAAE,KAAK,CAAC,IAAI;gBACpB,KAAK,EAAE,KAAK,CAAC,IAAI;AACjB,gBAAA,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;AAC3B,aAAA,CAAC,CAC9B;AACH,QAAA,CAAC,CAAC;IACJ;uGAlYW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,6YAHnB,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1D/B,gsJAmHA,2CDhEI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,IAAI,+FACJ,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,YAAY,qkBAHZ,IAAI;gBACJ,eAAe,EAAAC,IAAA,CAAA,aAAA,CAAA,CAAA,EAAA,CAAA;;2FAON,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAd/B,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,eAAe;wBACf,IAAI;wBACJ,eAAe;wBACf,cAAc;wBACd,YAAY;qBACb,EAAA,SAAA,EACU,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAAA,gsJAAA,EAAA;;;AE9C/B,MAAMF,sBAAoB,GAAG,EAAE;MAQlB,yBAAyB,CAAA;AAC3B,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,2EAAmB;IAE/B,gBAAgB,GAAG,QAAQ,CAC5C,MAAM,IAAI,CAAC,KAAK,EAAgC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACjD;AACkB,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,UAAU;AAE5D,QAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE;AAClC,IAAA,CAAC,4FAAC;AACiB,IAAA,mBAAmB,GAAG,CAAA,OAAA,EAAUA,sBAAoB,CAAA,iBAAA,CAAmB;AAEhF,IAAA,YAAY,CAAC,IAAY,EAAA;AACjC,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,QAAA,EAAW,IAAI,EAAE;IACtC;AAEU,IAAA,eAAe,CACvB,IAAqB,EAAA;QAErB,OAAO;AACL,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,OAAO;SACnB;IACH;uGAhCW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBtC,yrEAoEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnDY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAGjE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,UAAA,EAC/B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,yrEAAA,EAAA;;;AEgC/E,MAAM,iBAAiB,GAAuB,OAAO;AACrD,MAAM,YAAY,GAAmB,MAAM;AAC3C,MAAM,YAAY,GAAmB,MAAM;AAC3C,MAAM,wBAAwB,GAAG,GAAG;AACpC,MAAM,uBAAuB,GAAG,GAAG;AACnC,MAAM,sBAAsB,GAAG,IAAI;AACnC,MAAM,qBAAqB,GAAG,kBAAkB;AAChD,MAAM,mBAAmB,GAAG,oBAAoB;AAChD,MAAM,yBAAyB,GAAG,CAAC;AACnC,MAAM,oBAAoB,GAAG,EAAE;MAelB,UAAU,CAAA;AACJ,IAAA,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAChC,IAAA,KAAK,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACxC,IAAA,cAAc,GAAG,MAAM,CAAC,+BAA+B,CAAC;AACxD,IAAA,aAAa,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC3C,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE5C,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,oFAA6B;AAC5D,IAAA,WAAW,GAAG,KAAK,CAAC,wBAAwB,kFAAC;IAE7C,MAAM,GAAG,MAAM,EAAU;IACzB,OAAO,GAAG,MAAM,EAAoC;IACpD,WAAW,GAAG,MAAM,EAA8B;AAExC,IAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AAC1B,IAAA,aAAa,GAAG,IAAI,GAAG,EAAwB;AAC/C,IAAA,yBAAyB,GAAG,IAAI,GAAG,EAAkB;AACrD,IAAA,0BAA0B,GAAG,IAAI,GAAG,EAAkB;AAEvE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;YACrC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAE7C,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAClC,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,CAAC,OAAe,EAAE,KAA8B,EAAA;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AAC7C,QAAA,IACE,CAAC,IAAI;YACL,IAAI,CAAC,IAAI,KAAK,aAAa;YAC3B,IAAI,CAAC,QAAQ,KAAK,OAAO;AACzB,YAAA,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EACxB;YACA;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;IACnD;AAEA,IAAA,MAAM,CAAC,OAAgB,EAAA;QACrB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACzB;QACF;QAEA,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3B;AAEA,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;IAChC;IAEA,eAAe,CAAC,IAAqB,EAAE,GAA2B,EAAA;AAChE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;IACJ;IAEA,WAAW,CAAC,IAAqB,EAAE,IAAoB,EAAA;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;IACJ;AAEA;;;;;AAKG;IACH,qBAAqB,CACnB,IAAqB,EACrB,GAA2B,EAAA;AAE3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAC/C,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE;QACtB,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,YAAY,MAAM,YAAY;YAAE;AAE5D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC;AAC3D,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;IAC1C;AAEA;;AAEG;IACH,mBAAmB,CACjB,IAAqB,EACrB,GAA2B,EAAA;AAE3B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAC/C,IAAI,CAAC,MAAM,EAAE,OAAO;AAAE,YAAA,OAAO,KAAK;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC;QAClD,IAAI,QAAQ,IAAI,IAAI;AAAE,YAAA,OAAO,KAAK;QAClC,OAAO,IAAI,CAAC;AACT,aAAA,cAAc;AACd,aAAA,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACxD;AAEA;;;;AAIG;AACgB,IAAA,qBAAqB,GAAG,QAAQ,CAEjD,MAAK;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB;QAC/C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;AACrC,YAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjE;AACA,QAAA,OAAO,MAAM;AACf,IAAA,CAAC,4FAAC;;IAGe,YAAY,GAAkB,EAAE;AAChC,IAAA,wBAAwB,GAAG,IAAI,GAAG,EAGhD;AAEH,IAAA,aAAa,CAAC,IAAqB,EAAA;QACjC,QACE,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,UAAU;YACtB,IAAI,CAAC,YAAY;IAErB;AAEA,IAAA,sBAAsB,CACpB,IAAqB,EAAA;AAErB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACpD,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG;AACxB,YAAA,EAAE,GAAG,CAAC,GAA2B,KAAI;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AAChD,gBAAA,OAAO,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK;AACjE,YAAA,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD;AACA,QAAA,OAAO,EAAE;IACX;IAEQ,uBAAuB,CAC7B,IAAqB,EACrB,KAA2C,EAAA;QAE3C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE;AAChD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAC/C,IAAI,CAAC,MAAM,EAAE,OAAO;AAAE,YAAA,OAAO,WAAW;AAExC,QAAA,MAAM,MAAM,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,GAAG;AAC7B,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE;AAClC,YAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE;AAC7B,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;oBACrC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC;gBAC1C;YACF;QACF;AAEA,QAAA,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,WAAW;QACpB;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,mBAAmB;QACrD,MAAM,oBAAoB,GAAkB,EAAE;QAC9C,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,UAAU,EAAE;AAC/C,YAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC;YAC3C,oBAAoB,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,EAAE,IAA2B;AACjC,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,OAAO,EAAE,UAAU;gBACnB,KAAK;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAI;oBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC;oBAClD,IAAI,QAAQ,IAAI,IAAI;AAAE,wBAAA,OAAO,IAAI;AACjC,oBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAC1B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAC/C;oBACD,OAAO,CAAC,UAAU,EAAE,IAAI,CACtB,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,KAAK,CAC5D;gBACH,CAAC;AACD,gBAAA,MAAM,EAAE,CAAC,GAAG,KAAI;AACd,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC;AAC3D,oBAAA,IAAI,CAAC,GAAG;wBAAE;oBACV,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAC1B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CACnD;AACD,oBAAA,MAAM,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC;oBACjE,IAAI,MAAM,EAAE;AACV,wBAAA,KAAK,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC;oBAC3D;gBACF,CAAC;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,oBAAoB,CAAC;IAClD;IAEQ,MAAM,oBAAoB,CAChC,IAAqB,EACrB,GAA0C,EAC1C,MAA4C,EAC5C,MAAqB,EAAA;QAErB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE;AACtD,YAAA,mBAAmB,EAAE,SAAS;AAC/B,SAAA,CAAC;AAEF,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE;AAEjC,QAAA,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,EAAE;YACpE,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,MAAM,CAAC,gBAAgB,GAAG,MAAM,EAAE,GAAG,CAAC;QACxC;IACF;AAEQ,IAAA,uBAAuB,CAC7B,IAAqB,EACrB,GAA2B,EAC3B,MAA4C,EAAA;QAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC;QAClD,IAAI,QAAQ,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI;QAEjC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,GAAG;AACjB,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI;AAC1C,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI;AAC1C,YAAA,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC;YACnC,GAAG;YACH,QAAQ;SACT;IACH;IAEQ,eAAe,CACrB,MAA4C,EAC5C,GAA2B,EAAA;QAE3B,OAAO,CAAC,MAAM,CAAC,eAAe,IAAI,sBAAsB,EAAE,GAAG,CAAC;IAChE;AAEA,IAAA,eAAe,CAAC,IAAqB,EAAA;QACnC,OAAO;AACL,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,OAAO;SACnB;IACH;AAEA,IAAA,YAAY,CAAC,IAAqB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;YAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,uDAAuD,CACxD;QACH;QAEA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,IAAI,CAAC,QAAQ,KAAK;AAChB,cAAE;cACA,wCAAwC,CAC7C;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;AACrC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;IAChC;AAEQ,IAAA,cAAc,CAAC,OAAkC,EAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QAC7C,MAAM,kBAAkB,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC;AAErD,QAAA,MAAM,UAAU,GAAsB,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CACvD,CAAC,MAAM,EAAE,KAAK,KAAI;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACrC,YAAA,MAAM,aAAa,GAAG,IAAI,KAAK,aAAa;AAC5C,YAAA,MAAM,UAAU,GAAG,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACnE,MAAM,QAAQ,GAAG;AACf,kBAAE;kBACA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC9C,MAAM,IAAI,GAAG;AACX,kBAAE;AACF,kBAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;YAC9D,MAAM,WAAW,GACf,CAAC,aAAa;AACd,gBAAA,QAAQ,KAAK,OAAO;AACpB,iBAAC,UAAU,EAAE,WAAW,IAAI,IAAI,CAAC;AACnC,YAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,sBAAsB,CACzD,UAAU,EAAE,KAAK,EAAE,QAAQ,CAC5B;AACD,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI;AAC5C,YAAA,MAAM,IAAI,GACR,CAAC,aAAa,IAAI,QAAQ,KAAK;AAC7B,kBAAE;uBACG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC;wBAC9C,uBAAuB;wBACvB,IAAI,CAAC,WAAW,EAAE;AACpB,sBAAE;kBACF,CAAC;YACP,MAAM,eAAe,GACnB,UAAU;AACV,iBAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;AAClC,gBAAA,kBAAkB;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;AAC3D,YAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC;YACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAC9C,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,IAAI,EACJ,UAAU,EACV,eAAe,EACf,MAAM,CACP;YAED,IAAI,aAAa,EAAE;gBACjB,OAAO;oBACL,GAAG;AACH,oBAAA,MAAM,EAAE,gBAAgB;AACxB,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACjC,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EACN,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAClE,oBAAA,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,IAAI;AAC9C,oBAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;iBACnC;YACH;AAEA,YAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;gBACxB,OAAO;oBACL,GAAG;AACH,oBAAA,MAAM,EAAE,gBAAgB;AACxB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACjC,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EACN,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAClE,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;iBACnC;YACH;YAEA,OAAO;gBACL,GAAG;AACH,gBAAA,MAAM,EAAE,gBAAgB;AACxB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACjC,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;gBACxD,IAAI;gBACJ,QAAQ,EACN,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAClE,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;aACnC;AACH,QAAA,CAAC,CACF;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE;AAEQ,IAAA,QAAQ,CAAC,IAAqB,EAAE,KAAK,GAAG,KAAK,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;YAClD;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;YAC5C;QACF;QAEA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACpE;IAEQ,SAAS,CACf,GAAW,EACX,MAAyC,EACzC,IAAY,EACZ,IAAY,EACZ,KAAK,GAAG,KAAK,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACnE;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC;QAExE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C;aAAO,IACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB;YAC5D,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAC7D;YACA;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC;AACd,aAAA,OAAO,CAAC,MAAM,CAAC,UAAW,EAAE,MAAM,CAAC,UAAW,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO;AACrE,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,aAAa,GAAG,KAAK;AAEzB,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACjB,IAAI,CAAC,KAAK,CAAC,aAAa,CACtB,GAAG,EACH,QAAQ,CAAC,IAAI,EACb,MAAM,EACN,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,CACX;oBACD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;oBAC1D,aAAa,GAAG,IAAI;gBACtB;qBAAO;AACL,oBAAA,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO;AAChB,wBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,6DAA6D,CAC9D;oBACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;oBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;gBACrC;gBAEA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAE1C,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvB;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,wDAAwD,CACzD;gBACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;AACF,SAAA,CAAC;QAEJ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,SAAS,CACf,GAAW,EACX,MAAyC,EACzC,KAAK,GAAG,KAAK,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACnE;QACF;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;QAEjE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C;aAAO,IACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB;YAC5D,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAC7D;YACA;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC;AACd,aAAA,QAAQ,CAAC,MAAM,CAAC,UAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO;AAC9D,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,aAAa,GAAG,KAAK;AAEzB,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;oBACrD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;oBAC1D,aAAa,GAAG,IAAI;gBACtB;qBAAO;AACL,oBAAA,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO;AAChB,wBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,yDAAyD,CAC1D;oBACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;oBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;gBACrC;gBAEA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAE1C,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvB;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,yDAAyD,CAC1D;gBACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;AACF,SAAA,CAAC;QAEJ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CACrB,GAAW,EACX,MAAyC,EACzC,KAAK,GAAG,KAAK,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACnE;QACF;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC;QAEvE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C;aAAO,IACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB;YAC5D,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAC7D;YACA;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AACtE,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,CAAC;gBACnE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;gBAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE;oBACzB,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;oBAClD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;oBAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,oBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBACrB;gBACF;AAEA,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CACtB,+DAA+D,CAChE;gBACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CACrB,QAAwC,EAAA;QAExC,OAAO,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,iBAAiB;IAC3D;AAEQ,IAAA,WAAW,CAAC,MAA+B,EAAA;AACjD,QAAA,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa,GAAG,aAAa,GAAG,YAAY;IACrE;IAEQ,WAAW,CACjB,IAAgC,EAChC,UAAgC,EAAA;QAEhC,IAAI,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,YAAY;AAC5C,QAAA,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,YAAY;IAClE;AAEQ,IAAA,kBAAkB,CACxB,MAA+B,EAC/B,IAAoB,EACpB,QAA4B,EAC5B,IAAoB,EACpB,WAAoB,EACpB,IAAY,EACZ,UAAmB,EACnB,eAAwB,EACxB,MAAwC,EAAA;QAExC,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAE5C,OAAO;AACL,YAAA,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,IAAI;YAC1C,UAAU,EACR,UAAU,EAAE,UAAU,IAAI,iBAAiB,EAAE,UAAU,IAAI,IAAI;AACjE,YAAA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,EAAE;AAClC,YAAA,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,IAAI,CAAC;YAC1C,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,WAAW;YACX,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU;AACV,YAAA,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE;YACxC,KAAK,EAAE,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC;YACpE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;AACjD,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAC7D,gBAAA,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,IAAI,qBAAqB;AACpE,gBAAA,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,mBAAmB;AAC/D,aAAA;YACD,MAAM;SACP;IACH;IAEQ,aAAa,CACnB,MAA+B,EAC/B,KAAa,EAAA;AAEb,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,OAAO,CAAA,YAAA,EAAe,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,UAAU,IAAI,OAAO,CAAA,CAAA,EAAI,KAAK,EAAE;QAClF;QAEA,OAAO;AACL,YAAA,MAAM,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,IAAI,OAAO;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,QAAQ,IAAI,iBAAiB;YACpC,KAAK;AACN,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,aAAa,CACnB,MAA+B,EAAA;AAE/B,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU;QAElC,MAAM,SAAS,GAAG;AAChB,cAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,yBAAyB;cACpE,CAAC;QACL,IAAI,OAAO,GAAG;AACZ,cAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,yBAAyB;cAClE,CAAC;AAEL,QAAA,IAAI,SAAS,GAAG,OAAO,IAAI,oBAAoB,EAAE;AAC/C,YAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7D;AAEA,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAChC,CAAC,EACD,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAC3C;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAC9B,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,iBAAiB,EAC7C,CAAC,EACD,iBAAiB,CAClB;QAED,OAAO;YACL,SAAS;YACT,SAAS;YACT,OAAO;SACR;IACH;AAEQ,IAAA,yBAAyB,CAC/B,MAA0C,EAC1C,IAAY,EACZ,WAAoB,EAAA;AAEpB,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CACpD,MAAM,EAAE,KAAK,EAAE,QAAQ,CACxB;QAED,OAAO;AACL,YAAA,QAAQ,EAAE;AACR,kBAAE;AACF,mBAAG,kBAAkB,IAAI,uBAAuB,CAAC;AACnD,YAAA,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,IAAI,KAAK;AAC9C,YAAA,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,IAAI,KAAK;SAC/C;IACH;IAEQ,SAAS,CACf,KAAyB,EACzB,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,oBAAoB,EAAA;QAE1B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,GAAG;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D;AAEQ,IAAA,sBAAsB,CAAC,KAAyB,EAAA;AACtD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE;AACnD,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B;AAEQ,IAAA,qBAAqB,CAAC,UAAuB,EAAA;AACnD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;YACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACxB,GAAG,CAAC,WAAW,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9B,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7C;QACF;QAEA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE;YACtD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,GAAG,CAAC;AACzC,gBAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC;YACzC;QACF;IACF;AAEQ,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD;AAEQ,IAAA,4BAA4B,CAAC,IAAqB,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAC/C,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO;YAAE;QACzD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAAE;AAEvD,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;AAC3B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC;AAC3D,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;QAC1C;IACF;AAEQ,IAAA,YAAY,CAClB,MAAyC,EACzC,IAAY,EACZ,IAAY,EAAA;QAEZ,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,UAAU,EAAE,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS;YACtE,IAAI,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC;YACnC,IAAI,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,sBAAsB;SACzD;IACH;IAEQ,2BAA2B,CACjC,MAAyC,EACzC,KAA2B,EAAA;QAE3B,OAAO;AACL,YAAA,MAAM,CAAC,IAAI;AACX,YAAA,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,UAAU,IAAI,GAAG;YACxB,MAAM,CAAC,UAAU,IAAI,OAAO;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AACrC,YAAA,KAAK,CAAC,IAAI;AACV,YAAA,KAAK,CAAC,IAAI;AACV,YAAA,KAAK,CAAC,IAAI;AACV,YAAA,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;AAC5B,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,2BAA2B,CACjC,MAAyC,EAAA;QAEzC,OAAO;AACL,YAAA,MAAM,CAAC,IAAI;AACX,YAAA,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,UAAU,IAAI,GAAG;YACxB,MAAM,CAAC,UAAU,IAAI,OAAO;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM;AACP,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,iCAAiC,CACvC,MAAyC,EAAA;QAEzC,OAAO;AACL,YAAA,MAAM,CAAC,IAAI;AACX,YAAA,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,UAAU,IAAI,OAAO;YAC5B,WAAW;AACZ,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,mBAAmB,CACzB,MAAyC,EAAA;AAEzC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAChE;QAEA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;AAC9B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;AACpC,QAAA,OAAO,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;IAC5E;AAEQ,IAAA,4BAA4B,CAClC,MAAyC,EAAA;AAEzC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;YACjC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,yDAAyD,CAC1D;QACH;QAEA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,MAAM,CAAC,QAAQ,KAAK;AAClB,cAAE;cACA,mEAAmE,CACxE;IACH;AAEQ,IAAA,mBAAmB,CACzB,MAA+B,EAAA;AAE/B,QAAA,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa;IACtC;AAEQ,IAAA,mBAAmB,CACzB,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IACzD;AAEQ,IAAA,YAAY,CAClB,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;IACzD;AAEQ,IAAA,gBAAgB,CACtB,OAAiE,EAAA;QAEjE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC;uGAv8BW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,obAHV,CAAC,sBAAsB,EAAE,+BAA+B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEtE,u1FAuEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPI,YAAY,sMACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,mBAAmB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,2IACnB,yBAAyB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKhB,UAAU,EAAA,UAAA,EAAA,CAAA;kBAbtB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,mBAAmB;wBACnB,mBAAmB;wBACnB,yBAAyB;AAC1B,qBAAA,EAAA,SAAA,EACU,CAAC,sBAAsB,EAAE,+BAA+B,CAAC,EAAA,QAAA,EAAA,u1FAAA,EAAA;;;AEtEtE;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"masterteam-client-components-client-list.mjs","sources":["../../../../packages/masterteam/client-components/client-list/services/client-list-api.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-state.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-runtime-actions.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-toolbar.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.html","../../../../packages/masterteam/client-components/client-list/client-list.ts","../../../../packages/masterteam/client-components/client-list/client-list.html","../../../../packages/masterteam/client-components/client-list/masterteam-client-components-client-list.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport {\r\n ClientListFetchRequestFilter,\r\n ClientListCardsPayload,\r\n ClientListFetchQueryRequest,\r\n ClientListRuntimeContext,\r\n ClientListInformativeDashboardPayload,\r\n ClientListTableSettingsCatalogResponse,\r\n ClientListTableQuery,\r\n Response,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly runtimeFetchBaseUrl = 'fetch/query';\r\n private readonly informativeBaseUrl = 'LevelData/modules';\r\n\r\n getRows(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId: number,\r\n query: ClientListTableQuery,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<RuntimeTableRowsResponse>> {\r\n return this.resolveTablePropertyKeys(contextKey, query).pipe(\r\n switchMap((propertyKeys) =>\r\n this.queryRuntime<RuntimeTableRowsResponse>({\r\n contextKey,\r\n projection: 'Table',\r\n surfaceKey: 'table',\r\n propertyKeys: propertyKeys?.length ? propertyKeys : undefined,\r\n filters: this.mergeFilters(\r\n this.buildInstanceFilters(instanceId),\r\n filters,\r\n ),\r\n page: this.toPage(query.skip, query.take),\r\n pageSize: query.take,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n getCards(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId?: number | null,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<ClientListCardsPayload>> {\r\n return this.queryRuntime<ClientListCardsPayload>({\r\n contextKey,\r\n projection: 'Card',\r\n filters: this.mergeFilters(\r\n instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,\r\n filters,\r\n ),\r\n display: { areas: ['card'] },\r\n });\r\n }\r\n\r\n getInformativeDashboard(\r\n moduleId: number,\r\n ): Observable<Response<ClientListInformativeDashboardPayload>> {\r\n return this.http.get<Response<ClientListInformativeDashboardPayload>>(\r\n `${this.informativeBaseUrl}/${moduleId}/dashboard`,\r\n );\r\n }\r\n\r\n private queryRuntime<T>(\r\n payload: ClientListFetchQueryRequest,\r\n ): Observable<Response<T>> {\r\n return this.http.post<Response<T>>(this.runtimeFetchBaseUrl, payload);\r\n }\r\n\r\n private resolveTablePropertyKeys(\r\n contextKey: ClientListRuntimeContext,\r\n query: ClientListTableQuery,\r\n ): Observable<string[] | undefined> {\r\n if (query.columnKeys?.length) {\r\n return of(query.columnKeys);\r\n }\r\n\r\n const context = this.readTableSettingsContext(contextKey);\r\n if (!context) {\r\n return of(undefined);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<ClientListTableSettingsCatalogResponse>\r\n >(`LevelData/levels/${context.levelId}/modules/${context.moduleId}/table-display-settings/catalog?surfaceKey=table`)\r\n .pipe(\r\n map((response) =>\r\n this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? []),\r\n ),\r\n );\r\n }\r\n\r\n private buildInstanceFilters(\r\n instanceId: number,\r\n ): ClientListFetchRequestFilter[] {\r\n return [\r\n {\r\n key: 'levelDataId',\r\n operator: 'Equals',\r\n value: String(instanceId),\r\n },\r\n ];\r\n }\r\n\r\n private mergeFilters(\r\n baseFilters?: ClientListFetchRequestFilter[],\r\n extraFilters: ClientListFetchRequestFilter[] = [],\r\n ): ClientListFetchRequestFilter[] | undefined {\r\n const merged = [...(baseFilters ?? []), ...extraFilters];\r\n return merged.length ? merged : undefined;\r\n }\r\n\r\n private toPage(skip: number, take: number): number {\r\n if (take <= 0) {\r\n return 1;\r\n }\r\n\r\n return Math.floor(skip / take) + 1;\r\n }\r\n\r\n private toEffectiveColumnKeys(\r\n columns: ClientListTableSettingsCatalogResponse['effectiveColumns'],\r\n ): string[] | undefined {\r\n const keys = (columns ?? [])\r\n .filter((column) =>\r\n typeof column === 'string' ? true : column.visible !== false,\r\n )\r\n .sort(\r\n (a, b) =>\r\n (typeof a === 'string' ? 0 : (a.order ?? 0)) -\r\n (typeof b === 'string' ? 0 : (b.order ?? 0)),\r\n )\r\n .map((column) =>\r\n typeof column === 'string'\r\n ? column\r\n : (column.key ?? column.propertyKey ?? ''),\r\n )\r\n .filter((key) => key.length > 0);\r\n\r\n return keys.length ? keys : undefined;\r\n }\r\n\r\n private readTableSettingsContext(\r\n contextKey: string,\r\n ): { levelId: string; moduleId: string } | null {\r\n const [levelPart, modulePart] = contextKey.split('/');\r\n const levelId = levelPart?.split(':')[1];\r\n const moduleId = modulePart?.split(':')[1];\r\n\r\n if (!levelId || !moduleId) {\r\n return null;\r\n }\r\n\r\n return { levelId, moduleId };\r\n }\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport {\r\n DashboardBuilderData,\r\n DashboardChartItem,\r\n} from '@masterteam/dashboard-builder';\r\nimport { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsPayload,\r\n ClientListFetchPropertyMeta,\r\n ClientListFetchRecord,\r\n ClientListFetchSchema,\r\n ClientListFetchTableColumn,\r\n ClientListInformativeDashboardPayload,\r\n ClientListState,\r\n NormalizedClientListConfiguration,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\ninterface ClientListPropertyMaps {\r\n byKey: Map<string, ClientListFetchPropertyMeta>;\r\n byNormalizedKey: Map<string, ClientListFetchPropertyMeta>;\r\n}\r\n\r\ninterface ClientListCardDescriptor {\r\n projectionKey: string;\r\n recordValueKey: string;\r\n property?: ClientListFetchPropertyMeta;\r\n label?: string;\r\n viewType?: string;\r\n order?: number;\r\n configuration?: EntityData['configuration'] | null;\r\n propertyConfiguration?: EntityData['propertyConfiguration'];\r\n}\r\n\r\nconst UNSORTABLE_ENTITY_VIEW_TYPES = new Set<EntityViewType>([\r\n 'Attachment',\r\n 'Checkbox',\r\n]);\r\n\r\n@Injectable()\r\nexport class ClientListStateService {\r\n readonly itemsByKey = signal<Record<string, ClientListState>>({});\r\n\r\n readonly items = computed<ClientListState[]>(() =>\r\n Object.values(this.itemsByKey()).sort((a, b) =>\r\n a.config.moduleId === b.config.moduleId\r\n ? (a.config.instanceId ?? 0) - (b.config.instanceId ?? 0)\r\n : a.config.moduleId - b.config.moduleId,\r\n ),\r\n );\r\n\r\n setConfigs(configs: ClientListState[]): void {\r\n const currentItems = this.itemsByKey();\r\n const next: Record<string, ClientListState> = {};\r\n\r\n configs.forEach((item) => {\r\n next[item.key] = this.mergeItemState(item, currentItems[item.key]);\r\n });\r\n\r\n this.itemsByKey.set(next);\r\n }\r\n\r\n setLoading(key: string, loading: boolean): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n loading,\r\n },\r\n });\r\n }\r\n\r\n setError(key: string, message: string | null): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n error: message,\r\n },\r\n });\r\n }\r\n\r\n setRowsResult(\r\n key: string,\r\n response: RuntimeTableRowsResponse,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'table'\r\n ) {\r\n return;\r\n }\r\n\r\n const columns: RuntimeEntityColumnDef[] = (\r\n response.projectionMeta?.columns ?? []\r\n )\r\n .filter((column) => column.visible)\r\n .sort((a, b) => a.order - b.order)\r\n .map((column, index) => ({\r\n key: column.key,\r\n label: column.label,\r\n type: 'entity' as const,\r\n sortable: !UNSORTABLE_ENTITY_VIEW_TYPES.has(\r\n column.viewType as EntityViewType,\r\n ),\r\n width: index === 0 ? '200px' : undefined,\r\n viewType: column.viewType,\r\n order: column.order,\r\n visible: column.visible,\r\n configuration: column.configuration ?? null,\r\n }));\r\n\r\n const propertyMaps = this.createPropertyMaps(\r\n response.catalog?.properties ?? [],\r\n );\r\n\r\n const rows: RuntimeTableDisplayRow[] = (response.records ?? []).map(\r\n (record) => {\r\n const row: RuntimeTableDisplayRow = { Id: record.id };\r\n\r\n columns.forEach((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n row[column.key] = this.toEntityData(\r\n column.key,\r\n record.values?.[property?.key ?? column.key],\r\n property,\r\n column.viewType,\r\n column.label,\r\n column.configuration,\r\n property?.configuration,\r\n record.id,\r\n column.order ?? property?.order,\r\n );\r\n });\r\n\r\n return row;\r\n },\r\n );\r\n\r\n const schema = this.resolvePrimarySchema(response);\r\n const title =\r\n (config.title ?? '').trim() || schema?.name || schema?.key || '';\r\n const totalCount =\r\n config.isPaginated === false\r\n ? rows.length\r\n : (response.pagination?.totalCount ?? rows.length);\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey: schema?.key ?? '',\r\n columns,\r\n rows,\r\n cards: [],\r\n skip,\r\n take,\r\n totalCount,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setCardsResult(\r\n key: string,\r\n response: ClientListCardsPayload,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'cards'\r\n ) {\r\n return;\r\n }\r\n\r\n const cards = this.toCards(response);\r\n const schema = this.resolvePrimarySchema(response);\r\n const firstCardModule = cards[0]?.module;\r\n const moduleKey = schema?.key ?? firstCardModule?.key ?? target.moduleKey;\r\n const title =\r\n (config.title ?? '').trim() ||\r\n schema?.name ||\r\n firstCardModule?.name ||\r\n moduleKey ||\r\n target.title;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards,\r\n skip: 0,\r\n take: 0,\r\n totalCount: cards.length,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setInformativeResult(\r\n key: string,\r\n response: ClientListInformativeDashboardPayload | null,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target || target.type !== 'informative') return;\r\n\r\n const moduleKey = target.moduleKey || `Module ${config.moduleId}`;\r\n const title =\r\n (config.title ?? '').trim() || target.title || 'Informative Dashboard';\r\n const dashboardData = response\r\n ? this.toDashboardData(response, title)\r\n : null;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n totalCount: dashboardData?.charts?.length ?? 0,\r\n dashboardData,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n expanded: !target.expanded,\r\n },\r\n });\r\n }\r\n\r\n private mergeItemState(\r\n item: ClientListState,\r\n existing?: ClientListState,\r\n ): ClientListState {\r\n if (\r\n !existing ||\r\n existing.type !== item.type ||\r\n existing.areaType !== item.areaType\r\n ) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n loading: existing.loading,\r\n error: existing.error,\r\n title: item.title || existing.title,\r\n moduleKey: existing.moduleKey || item.moduleKey,\r\n totalCount: existing.totalCount,\r\n columns: existing.columns,\r\n rows: existing.rows,\r\n cards: existing.cards,\r\n skip: existing.skip,\r\n take: existing.take,\r\n expanded: existing.expanded,\r\n dashboardData: existing.dashboardData,\r\n rawData: existing.rawData,\r\n };\r\n }\r\n\r\n private toCards(data?: ClientListCardsPayload): ClientListCard[] {\r\n const records = this.orderRecords(\r\n data?.records ?? [],\r\n data?.projectionMeta?.groups ?? [],\r\n );\r\n const catalogProperties = data?.catalog?.properties ?? [];\r\n const propertyMaps = this.createPropertyMaps(catalogProperties);\r\n const descriptors = this.buildCardDescriptors(\r\n data?.projectionMeta?.displayOrder ?? [],\r\n data?.projectionMeta?.columns ?? [],\r\n propertyMaps,\r\n );\r\n\r\n return records.map((record) => {\r\n const schema = data?.schemas?.find((item) => item.id === record.schemaId);\r\n const propertyDescriptors = descriptors.length\r\n ? descriptors\r\n : this.buildFallbackCardDescriptors(record, catalogProperties);\r\n const entities = propertyDescriptors.map((propertyDescriptor) =>\r\n this.toEntityData(\r\n propertyDescriptor.projectionKey,\r\n record.values?.[propertyDescriptor.recordValueKey],\r\n propertyDescriptor.property,\r\n propertyDescriptor.viewType,\r\n propertyDescriptor.label,\r\n propertyDescriptor.configuration,\r\n propertyDescriptor.propertyConfiguration,\r\n record.id,\r\n propertyDescriptor.order,\r\n ),\r\n );\r\n const statusColor = this.resolveCardStatusColor(entities);\r\n const normalizedEntities = statusColor\r\n ? this.applyCardProgressColor(entities, statusColor)\r\n : entities;\r\n\r\n return {\r\n id: record.id,\r\n name: record.name ?? `Record ${record.id}`,\r\n module: schema\r\n ? {\r\n id: schema.id,\r\n key: schema.key,\r\n name: schema.name,\r\n order: schema.order,\r\n typeGroup: schema.typeGroup,\r\n }\r\n : undefined,\r\n instanceId: record.id,\r\n properties: normalizedEntities,\r\n entities: normalizedEntities,\r\n };\r\n });\r\n }\r\n\r\n private orderRecords(\r\n records: ClientListFetchRecord[],\r\n groups: Array<{ recordIds: number[] }>,\r\n ): ClientListFetchRecord[] {\r\n if (!groups.length) {\r\n return records;\r\n }\r\n\r\n const recordsById = new Map(records.map((record) => [record.id, record]));\r\n const ordered: ClientListFetchRecord[] = [];\r\n const seen = new Set<number>();\r\n\r\n groups.forEach((group) => {\r\n group.recordIds.forEach((recordId) => {\r\n const record = recordsById.get(recordId);\r\n if (!record || seen.has(recordId)) {\r\n return;\r\n }\r\n\r\n ordered.push(record);\r\n seen.add(recordId);\r\n });\r\n });\r\n\r\n records.forEach((record) => {\r\n if (!seen.has(record.id)) {\r\n ordered.push(record);\r\n }\r\n });\r\n\r\n return ordered;\r\n }\r\n\r\n private resolvePrimarySchema(\r\n response: RuntimeTableRowsResponse | ClientListCardsPayload,\r\n ): ClientListFetchSchema | undefined {\r\n const recordSchemaId = response.records?.[0]?.schemaId;\r\n\r\n return (\r\n response.schemas?.find((item) => item.id === recordSchemaId) ??\r\n response.schemas?.[0]\r\n );\r\n }\r\n\r\n private toEntityData(\r\n projectionKey: string,\r\n cell: ClientListFetchRecord['values'][string] | undefined,\r\n property: ClientListFetchPropertyMeta | undefined,\r\n viewType: string | undefined,\r\n label: string | undefined,\r\n configuration: EntityData['configuration'] | null | undefined,\r\n propertyConfiguration: EntityData['propertyConfiguration'],\r\n recordId: number,\r\n order?: number,\r\n ): EntityData {\r\n const resolvedViewType = (viewType ?? 'Text') as EntityData['viewType'];\r\n\r\n return {\r\n id: recordId,\r\n propertyId: property?.id,\r\n key: property?.key ?? projectionKey,\r\n normalizedKey: property?.normalizedKey ?? projectionKey,\r\n name: label ?? property?.label ?? projectionKey,\r\n rawValue:\r\n cell?.raw === null || cell?.raw === undefined\r\n ? undefined\r\n : String(cell.raw),\r\n value: (cell?.value ?? '') as EntityData['value'],\r\n viewType: resolvedViewType,\r\n type: property?.source,\r\n order: order ?? property?.order,\r\n configuration: configuration as EntityData['configuration'] | undefined,\r\n propertyConfiguration: propertyConfiguration ?? undefined,\r\n comparison: cell?.comparison,\r\n };\r\n }\r\n\r\n private createPropertyMaps(\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListPropertyMaps {\r\n return {\r\n byKey: new Map(properties.map((property) => [property.key, property])),\r\n byNormalizedKey: new Map(\r\n properties.map((property) => [property.normalizedKey, property]),\r\n ),\r\n };\r\n }\r\n\r\n private resolvePropertyMeta(\r\n projectionKey: string,\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListFetchPropertyMeta | undefined {\r\n return (\r\n propertyMaps.byKey.get(projectionKey) ??\r\n propertyMaps.byNormalizedKey.get(projectionKey)\r\n );\r\n }\r\n\r\n private buildCardDescriptors(\r\n displayOrder: NonNullable<\r\n ClientListCardsPayload['projectionMeta']\r\n >['displayOrder'],\r\n columns: ClientListFetchTableColumn[],\r\n propertyMaps: ClientListPropertyMaps,\r\n ): ClientListCardDescriptor[] {\r\n if (displayOrder?.length) {\r\n return displayOrder.map((item) => {\r\n const property = this.resolvePropertyMeta(\r\n item.propertyKey,\r\n propertyMaps,\r\n );\r\n\r\n return {\r\n projectionKey: item.propertyKey,\r\n recordValueKey: property?.key ?? item.propertyKey,\r\n property,\r\n label: property?.label,\r\n viewType: property?.viewType,\r\n order: item.order ?? property?.order,\r\n configuration: item.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n if (columns?.length) {\r\n return columns\r\n .filter((column) => column.visible)\r\n .map((column) => {\r\n const property = this.resolvePropertyMeta(column.key, propertyMaps);\r\n\r\n return {\r\n projectionKey: column.key,\r\n recordValueKey: property?.key ?? column.key,\r\n property,\r\n label: column.label ?? property?.label,\r\n viewType: column.viewType ?? property?.viewType,\r\n order: column.order ?? property?.order,\r\n configuration: column.configuration ?? null,\r\n propertyConfiguration: property?.configuration ?? null,\r\n };\r\n });\r\n }\r\n\r\n return [];\r\n }\r\n\r\n private buildFallbackCardDescriptors(\r\n record: ClientListFetchRecord,\r\n properties: ClientListFetchPropertyMeta[],\r\n ): ClientListCardDescriptor[] {\r\n return properties\r\n .filter((property) => record.values?.[property.key] !== undefined)\r\n .map((property) => ({\r\n projectionKey: property.normalizedKey || property.key,\r\n recordValueKey: property.key,\r\n property,\r\n label: property.label,\r\n viewType: property.viewType,\r\n order: property.order,\r\n configuration: null,\r\n propertyConfiguration: property.configuration ?? null,\r\n }));\r\n }\r\n\r\n private resolveCardStatusColor(entities: EntityData[]): string | null {\r\n const statusEntity = entities.find(\r\n (entity) => entity.normalizedKey === 'Status',\r\n );\r\n const value = statusEntity?.value;\r\n const color =\r\n value && typeof value === 'object' && 'color' in value\r\n ? value.color\r\n : null;\r\n\r\n return typeof color === 'string' && color.trim().length\r\n ? color.trim()\r\n : null;\r\n }\r\n\r\n private applyCardProgressColor(\r\n entities: EntityData[],\r\n color: string,\r\n ): EntityData[] {\r\n return entities.map((entity) => {\r\n if (entity.normalizedKey !== 'Actual_Progress') {\r\n return entity;\r\n }\r\n\r\n return {\r\n ...entity,\r\n configuration: {\r\n ...(entity.configuration ?? {}),\r\n color,\r\n },\r\n };\r\n });\r\n }\r\n\r\n private toDashboardData(\r\n data: ClientListInformativeDashboardPayload,\r\n title: string,\r\n ): DashboardBuilderData {\r\n const filters = data.filters;\r\n const charts: DashboardChartItem[] = (data.chartLinks ?? []).map((link) => {\r\n const configuration = link.configuration ?? {};\r\n\r\n return {\r\n ...configuration,\r\n id: link.id,\r\n chartComponentId: link.chartComponentId,\r\n } as DashboardChartItem;\r\n });\r\n\r\n return {\r\n page: {\r\n id: data.moduleId,\r\n name: { en: title, ar: title },\r\n type: 'Dashboard',\r\n dashboardConfig: {\r\n ignoreQueryFilter: data.ignoreQueryFilter,\r\n filters: data.filters,\r\n versionNumber: data.versionNumber,\r\n extraInfo: data.extraInfo,\r\n },\r\n },\r\n charts,\r\n dialogs: [],\r\n filters: Array.isArray(filters) ? [...filters] : filters ? [filters] : [],\r\n };\r\n }\r\n}\r\n","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { map, Observable, share, take } from 'rxjs';\nimport { RuntimeAction } from '@masterteam/components/runtime-action';\nimport {\n ClientListRuntimeRecordActionsConfig,\n ClientListRuntimeRecordActionsContext,\n RuntimeTableDisplayRow,\n} from '../models/client-list.model';\n\ninterface CachedActions {\n actions: RuntimeAction[];\n fetchedAt: number;\n}\n\ninterface RuntimeActionsResponse {\n code: number;\n data?: { actions?: RuntimeAction[] };\n}\n\nconst DEFAULT_ENDPOINT = 'LevelData/{instanceId}/workspace-record-actions';\nconst DEFAULT_CACHE_TTL_MS = 60_000;\nconst DEFAULT_TARGET_TYPE = 'ModuleData';\n\n/**\n * Lazy per-row runtime actions. Fetches `workspace-record-actions` only when\n * the row's 3-dots menu is opened (or for every visible row when the list\n * opts in to `eager`), with per-row caching, in-flight dedupe, and a single\n * cache-invalidation hook tied to action execution.\n */\n@Injectable()\nexport class ClientListRuntimeActionsService {\n private readonly http = inject(HttpClient);\n\n private readonly cache = signal<ReadonlyMap<string, CachedActions>>(\n new Map(),\n );\n private readonly inFlightKeys = signal<ReadonlySet<string>>(new Set());\n private readonly inFlight = new Map<string, Observable<RuntimeAction[]>>();\n\n /** Actions keyed by `${listKey}:${recordId}`. */\n readonly actionsByRowKey = computed<ReadonlyMap<string, RuntimeAction[]>>(\n () => {\n const out = new Map<string, RuntimeAction[]>();\n for (const [key, value] of this.cache()) {\n out.set(key, value.actions);\n }\n return out;\n },\n );\n\n /** Row keys currently being fetched. Drives the popover skeleton state. */\n readonly loadingRowKeys = this.inFlightKeys.asReadonly();\n\n rowKey(listKey: string, recordId: number): string {\n return `${listKey}:${recordId}`;\n }\n\n has(\n listKey: string,\n recordId: number,\n ttlMs: number | null | undefined,\n ): boolean {\n const key = this.rowKey(listKey, recordId);\n const entry = this.cache().get(key);\n if (!entry) return false;\n if (ttlMs == null) return true;\n return Date.now() - entry.fetchedAt < ttlMs;\n }\n\n /**\n * Fetch (or reuse cached/in-flight) per-row runtime actions for a row.\n * Returns an Observable so callers can chain off the result; the cache and\n * loading signals are also kept in sync so the table popover skeleton and\n * the merged-actions computation react automatically.\n */\n request(\n config: ClientListRuntimeRecordActionsConfig,\n ctx: ClientListRuntimeRecordActionsContext,\n ): Observable<RuntimeAction[]> {\n const key = this.rowKey(ctx.listKey, ctx.recordId);\n const ttl = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\n const cached = this.cache().get(key);\n if (cached && (ttl == null || Date.now() - cached.fetchedAt < ttl)) {\n const actions = cached.actions;\n return new Observable<RuntimeAction[]>((subscriber) => {\n subscriber.next(actions);\n subscriber.complete();\n });\n }\n\n const inFlight = this.inFlight.get(key);\n if (inFlight) {\n return inFlight;\n }\n\n const url = this.resolveEndpoint(config.endpoint ?? DEFAULT_ENDPOINT, ctx);\n const params = this.buildParams(config, ctx);\n\n this.markLoading(key, true);\n\n const obs = this.http.get<RuntimeActionsResponse>(url, { params }).pipe(\n map((response) =>\n response?.code === 1 ? (response.data?.actions ?? []) : [],\n ),\n share(),\n );\n\n this.inFlight.set(key, obs);\n\n obs.pipe(take(1)).subscribe({\n next: (actions) => {\n this.writeCache(key, actions);\n this.markLoading(key, false);\n this.inFlight.delete(key);\n },\n error: () => {\n this.writeCache(key, []);\n this.markLoading(key, false);\n this.inFlight.delete(key);\n },\n });\n\n return obs;\n }\n\n invalidateRow(listKey: string, recordId: number): void {\n const key = this.rowKey(listKey, recordId);\n this.cache.update((current) => {\n if (!current.has(key)) return current;\n const next = new Map(current);\n next.delete(key);\n return next;\n });\n }\n\n invalidateList(listKey: string): void {\n const prefix = `${listKey}:`;\n this.cache.update((current) => {\n let changed = false;\n const next = new Map(current);\n for (const key of next.keys()) {\n if (key.startsWith(prefix)) {\n next.delete(key);\n changed = true;\n }\n }\n return changed ? next : current;\n });\n }\n\n clearAll(): void {\n this.cache.set(new Map());\n }\n\n private writeCache(key: string, actions: RuntimeAction[]): void {\n this.cache.update((current) => {\n const next = new Map(current);\n next.set(key, { actions, fetchedAt: Date.now() });\n return next;\n });\n }\n\n private markLoading(key: string, loading: boolean): void {\n this.inFlightKeys.update((current) => {\n const next = new Set(current);\n if (loading) next.add(key);\n else next.delete(key);\n return next;\n });\n }\n\n private resolveEndpoint(\n template: string,\n ctx: ClientListRuntimeRecordActionsContext,\n ): string {\n const instanceId = ctx.instanceId ?? '';\n return template\n .replace('{instanceId}', String(instanceId))\n .replace('{listKey}', ctx.listKey)\n .replace('{moduleId}', String(ctx.moduleId))\n .replace('{recordId}', String(ctx.recordId));\n }\n\n private buildParams(\n config: ClientListRuntimeRecordActionsConfig,\n ctx: ClientListRuntimeRecordActionsContext,\n ): Record<string, string | number> {\n if (config.buildParams) {\n return config.buildParams(ctx);\n }\n\n const moduleKey = config.resolveModuleKey?.(ctx.row, {\n listKey: ctx.listKey,\n moduleId: ctx.moduleId,\n });\n\n const params: Record<string, string | number> = {\n targetType: DEFAULT_TARGET_TYPE,\n targetId: ctx.recordId,\n };\n\n if (moduleKey) {\n params['moduleKey'] = moduleKey;\n }\n\n return params;\n }\n}\n\nexport function defaultResolveRecordId(\n row: RuntimeTableDisplayRow,\n): number | null {\n const candidates = ['Id', 'id', 'ModuleDataId'] as const;\n for (const key of candidates) {\n const value = row[key];\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (typeof value === 'string') {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n }\n return null;\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { TableFilters } from '@masterteam/components/table';\n\n/**\n * Toolbar state for a single client-list instance: search term, column filters,\n * group column, and active tab. Kept as mutable signals so both the table view\n * and the cards view can two-way bind to the same source of truth and stay in\n * sync when the user toggles between them.\n */\nexport interface ClientListToolbarBucket {\n filters: WritableSignal<TableFilters>;\n filterTerm: WritableSignal<string>;\n groupBy: WritableSignal<string | null>;\n activeTab: WritableSignal<any>;\n}\n\n/**\n * Per-list toolbar state holder. Buckets are keyed by list `key` (see\n * `ClientListBaseState.key`) so switching between table and cards for the same\n * list carries search/filter/group/tab forward. In-memory only — per-component\n * `storageKey` persistence on the underlying mt-table continues to handle\n * refresh-resilient hydration.\n */\n@Injectable({ providedIn: 'root' })\nexport class ClientListToolbarService {\n private readonly buckets = new Map<string, ClientListToolbarBucket>();\n\n forList(key: string): ClientListToolbarBucket {\n let bucket = this.buckets.get(key);\n if (!bucket) {\n bucket = {\n filters: signal<TableFilters>({}),\n filterTerm: signal<string>(''),\n groupBy: signal<string | null>(null),\n activeTab: signal<any>(null),\n };\n this.buckets.set(key, bucket);\n }\n return bucket;\n }\n\n clear(key: string): void {\n this.buckets.delete(key);\n }\n}\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {\r\n Table,\r\n TableAction,\r\n TableActionShape,\r\n} from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListLazyLoadEvent,\r\n RuntimeTableDisplayRow,\r\n ClientListState,\r\n ClientListTableState,\r\n} from '../../models/client-list.model';\r\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-table-view',\r\n standalone: true,\r\n imports: [CommonModule, Table, SkeletonModule],\r\n templateUrl: './client-list-table-view.html',\r\n})\r\nexport class ClientListTableView {\r\n private readonly toolbar = inject(ClientListToolbarService);\r\n\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n readonly actionShape = input<TableActionShape | undefined>(undefined);\r\n readonly rowActionsLoadingFn = input<\r\n ((row: RuntimeTableDisplayRow) => boolean) | null\r\n >(null);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly rowClick = output<RuntimeTableDisplayRow>();\r\n readonly rowActionsRequested = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly table = computed(() => {\r\n return this.state() as ClientListTableState;\r\n });\r\n\r\n /**\r\n * Shared toolbar bucket (search / filters / groupBy / activeTab) keyed by\r\n * list identity. The cards view for the same list resolves the same bucket\r\n * so switching area types preserves the toolbar state.\r\n */\r\n protected readonly bucket = computed(() =>\r\n this.toolbar.forList(this.state().key),\r\n );\r\n\r\n /**\r\n * Stable, per-instance storage key. Excludes `areaType` so table and cards\r\n * views for the same logical list share persistence (matches the toolbar\r\n * bucket sharing behaviour).\r\n */\r\n protected readonly tableStorageKey = computed<string | null>(() => {\r\n const s = this.state();\r\n const cfg = s.config;\r\n const parts = [\r\n 'client-list',\r\n s.key,\r\n cfg.type,\r\n cfg.contextKey ?? '',\r\n cfg.moduleId ?? '',\r\n cfg.instanceId ?? '',\r\n ];\r\n const key = parts\r\n .map((p) => String(p ?? ''))\r\n .filter((p) => p.length > 0)\r\n .join(':');\r\n return key.length > 'client-list'.length ? key : null;\r\n });\r\n\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [noCard]=\"true\"\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n dataKey=\"Id\"\r\n [storageKey]=\"tableStorageKey()\"\r\n [rowActions]=\"rowActions()\"\r\n [actionShape]=\"actionShape()\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFn()\"\r\n (rowActionsRequested)=\"rowActionsRequested.emit($event)\"\r\n [generalSearch]=\"table().config.table.searchable\"\r\n [showFilters]=\"true\"\r\n filterMode=\"column\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [cellClickFilter]=\"true\"\r\n [freezeActions]=\"true\"\r\n [exportable]=\"table().config.table.exportable\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.table.pageSize\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { Card } from '@masterteam/components/card';\nimport { MTDateFormatPipe } from '@masterteam/components';\nimport {\n EntitiesPreview,\n EntityClickEvent,\n} from '@masterteam/components/entities';\nimport {\n ColumnDef,\n TableAction,\n TableCaption,\n TableExportService,\n TableGroupingController,\n TableValueResolver,\n} from '@masterteam/components/table';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport {\n ClientListCard,\n ClientListCardsState,\n ClientListLazyLoadEvent,\n ClientListState,\n RuntimeEntityColumnDef,\n} from '../../models/client-list.model';\nimport { ClientListToolbarService } from '../../services/client-list-toolbar';\n\nconst EMPTY_KEY_SET: ReadonlySet<string> = new Set();\n\ninterface CardGroup {\n key: string;\n columnLabel: string;\n label: string;\n accent: string | null;\n count: number;\n cards: ClientListCard[];\n}\n\n@Component({\n selector: 'mt-client-list-cards-view',\n standalone: true,\n imports: [\n CommonModule,\n TranslocoModule,\n Card,\n EntitiesPreview,\n SkeletonModule,\n TableCaption,\n ],\n providers: [MTDateFormatPipe],\n templateUrl: './client-list-cards-view.html',\n})\nexport class ClientListCardsView {\n private readonly toolbar = inject(ClientListToolbarService);\n private readonly exportService = inject(TableExportService);\n private readonly dateFormat = inject(MTDateFormatPipe);\n\n readonly state = input.required<ClientListState>();\n readonly rowActions = input<TableAction[]>([]);\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\n readonly cardClick = output<ClientListCard>();\n\n protected readonly cardsState = computed(\n () => this.state() as ClientListCardsState,\n );\n\n /** Shared toolbar bucket — same instance the table view uses. */\n protected readonly bucket = computed(() =>\n this.toolbar.forList(this.state().key),\n );\n\n /**\n * Columns for filter/group/export. `state.columns` is empty for cards area\n * (the state service doesn't populate it — see `setCardsResult`), so we\n * reconstruct `ColumnDef[]` from the first card's entity metadata. Each\n * entity carries its `key`, `name` (label), and `viewType`, which is\n * everything `TableValueResolver.getColumnFilterType` needs to classify\n * filter behaviour (select / boolean / date / user / text).\n */\n protected readonly columns = computed<ColumnDef[]>(() => {\n const fromState = this.state().columns;\n if (fromState && fromState.length > 0) return fromState;\n\n const sampleCard = this.cardsState().cards[0];\n if (!sampleCard?.entities?.length) return [];\n\n return sampleCard.entities.map((entity): RuntimeEntityColumnDef => {\n const raw = entity as unknown as Record<string, unknown>;\n const key =\n (typeof raw['key'] === 'string' && raw['key']) ||\n (typeof raw['normalizedKey'] === 'string' && raw['normalizedKey']) ||\n entity.name;\n return {\n key: String(key),\n label: entity.name ?? String(key),\n type: 'entity',\n viewType: (entity.viewType ?? 'Text') as string,\n };\n });\n });\n\n /**\n * Row view of each card. Cards carry their data as `entities: EntityData[]`,\n * not as a pre-built record, so we rebuild the row shape mt-table expects:\n * `{ [entityKey]: EntityData | scalar }`. Falls back to `displayProperties`\n * if a newer backend populates it. Row index matches card index so we can\n * look up by position elsewhere.\n */\n protected readonly rowRepresentations = computed<Record<string, unknown>[]>(\n () => this.cardsState().cards.map((card) => this.cardToRow(card)),\n );\n\n private cardToRow(card: ClientListCard): Record<string, unknown> {\n const fromDisplay = card.displayProperties as\n | Record<string, unknown>\n | undefined;\n if (fromDisplay && Object.keys(fromDisplay).length > 0) {\n return fromDisplay;\n }\n const record: Record<string, unknown> = { Id: card.id };\n for (const entity of card.entities ?? []) {\n const e = entity as unknown as Record<string, unknown>;\n const key =\n (typeof e['key'] === 'string' && e['key']) ||\n (typeof e['normalizedKey'] === 'string' && e['normalizedKey']) ||\n entity.name;\n if (key && typeof key === 'string') {\n record[key] = entity;\n }\n }\n return record;\n }\n\n // Local throwaway signals for the grouping controller's sort arguments —\n // cards don't sort via column click so the controller's sort-pinning\n // side-effect is a no-op here.\n private readonly noopSortField = signal<string | null>(null);\n private readonly noopSortDir = signal<'asc' | 'desc' | null>(null);\n\n /**\n * Writable proxy around `bucket().groupBy` — the grouping controller wants a\n * `WritableSignal<string | null>`. Reads delegate to the current bucket's\n * signal; writes mutate it via `.set()`. This keeps the controller's\n * `setGroup()` side-effect safe even though cards view callers never invoke\n * it today.\n */\n private readonly groupBySignal: WritableSignal<string | null> = (() => {\n const read = computed(() => this.bucket().groupBy());\n const proxy = ((...args: [] | [string | null]) =>\n args.length === 0 ? read() : this.bucket().groupBy.set(args[0]!)) as any;\n proxy.set = (value: string | null) => this.bucket().groupBy.set(value);\n proxy.update = (fn: (value: string | null) => string | null) =>\n this.bucket().groupBy.set(fn(this.bucket().groupBy()));\n proxy.asReadonly = () => read;\n return proxy as WritableSignal<string | null>;\n })();\n\n /**\n * Grouping controller bound to the shared toolbar bucket, so picking a group\n * in the cards menu surfaces in the table view's group header (and vice\n * versa) when the user toggles area types.\n */\n protected readonly grouping = new TableGroupingController(\n this.columns,\n this.rowRepresentations,\n this.groupBySignal,\n this.noopSortField,\n this.noopSortDir,\n );\n\n /**\n * Visible (after search + filters) cards. Backend-paginated lists re-query\n * on filter change so `cards` already reflects the server response and this\n * just passes through; local lists filter in-place.\n */\n protected readonly visibleCards = computed<ClientListCard[]>(() => {\n const state = this.cardsState();\n const isLazy = state.config.isPaginated;\n const cards = state.cards;\n\n if (isLazy) return cards;\n\n const term = this.bucket().filterTerm().trim().toLowerCase();\n const filters = this.bucket().filters();\n const columns = this.columns();\n const filterKeys = Object.keys(filters);\n\n return cards.filter((card, index) => {\n const row = this.rowRepresentations()[index] ?? {};\n\n // Row values are EntityData envelopes (`{ name, value, viewType, ... }`),\n // identical to the shape mt-table builds. Reuse its recursive matcher so\n // the cards view searches every nested property value exactly like the\n // table view. The old shallow `resolveDisplayValue(value)` returned the\n // entity's `name` (field label) instead of its `value`, so every\n // value-based search missed and the grid was always \"not found\".\n if (term && !TableValueResolver.matchesSearchTerm(row, term)) {\n return false;\n }\n\n if (filterKeys.length === 0) return true;\n return filterKeys.every((key) => {\n if (key === 'generalSearch') return true;\n const column = columns.find((c) => c.key === key);\n return TableValueResolver.matchesFilter(row, key, filters[key], column);\n });\n });\n });\n\n /**\n * Grouped cards. Reuses TableGroupingController helpers so the accent color,\n * label, and count rendering match the table's subheader exactly.\n */\n protected readonly groupedCards = computed<CardGroup[]>(() => {\n const column = this.grouping.activeGroupColumn();\n if (!column) return [];\n\n const groups = new Map<string, CardGroup>();\n this.visibleCards().forEach((card) => {\n const row = this.cardToRow(card);\n const label = this.grouping.getGroupLabel(row);\n const accent = this.grouping.getGroupAccentColor(row);\n const key = `${label}__${accent ?? ''}`;\n\n const existing = groups.get(key);\n if (existing) {\n existing.cards.push(card);\n existing.count += 1;\n } else {\n groups.set(key, {\n key,\n columnLabel: column.label,\n label,\n accent,\n count: 1,\n cards: [card],\n });\n }\n });\n\n return Array.from(groups.values());\n });\n\n /**\n * Export the visible (after search + filter) cards as XLSX. Uses the cards'\n * derived row shape + the state's columns, so the file mirrors what the\n * user sees. Custom columns are excluded upstream by `TableExportService`.\n */\n /**\n * Set of column keys that are click-to-filter eligible — same predicate\n * mt-table's `isCellClickFilterable` uses (select / boolean / user). One\n * set computed once per columns / first-card change; all visible cards\n * read from it. Reactive via signal — when columns load, the entities\n * inside cards automatically become clickable.\n */\n protected readonly clickableEntityKeys = computed<ReadonlySet<string>>(() => {\n const sample = this.cardsState().cards[0]\n ? this.cardToRow(this.cardsState().cards[0])\n : undefined;\n const result = new Set<string>();\n for (const column of this.columns()) {\n const filterType = TableValueResolver.getColumnFilterType(column, sample);\n if (\n filterType === 'select' ||\n filterType === 'user' ||\n filterType === 'boolean'\n ) {\n result.add(column.key);\n }\n }\n return result;\n });\n\n /**\n * Per-card set of entity keys that match the active filter — passed into\n * `<mt-entities-preview [activeKeys]>`. Computed lazily per card via the\n * helper below; bucket changes (filter add / remove) automatically\n * invalidate any place that reads from this in a template.\n */\n protected activeKeysForCard(card: ClientListCard): ReadonlySet<string> {\n const filters = this.bucket().filters();\n const filterKeys = Object.keys(filters);\n if (filterKeys.length === 0) return EMPTY_KEY_SET;\n\n const row = this.cardToRow(card);\n const result = new Set<string>();\n for (const key of filterKeys) {\n if (key === 'generalSearch') continue;\n const column = this.columns().find((c) => c.key === key);\n if (!column) continue;\n const cellTarget = TableValueResolver.buildClickFilterValue(row, column);\n if (cellTarget === null || cellTarget === undefined) continue;\n if (TableValueResolver.isFilterValueEqual(filters[key], cellTarget)) {\n result.add(key);\n }\n }\n return result;\n }\n\n /**\n * Click-to-filter handler invoked from `<mt-entities-preview (entityClick)>`.\n * Mirrors mt-table's `onCellFilterClick`: builds the filter value via the\n * shared `TableValueResolver`, toggles it on the shared toolbar bucket so\n * the funnel chip in the filter popover lights up, and clears on a second\n * click against the same value.\n */\n protected onEntityFilterClick(\n card: ClientListCard,\n event: EntityClickEvent,\n ): void {\n const column = this.columns().find((c) => c.key === event.key);\n if (!column) return;\n\n const row = this.cardToRow(card);\n const next = TableValueResolver.buildClickFilterValue(row, column);\n if (next === null || next === undefined) return;\n\n const current = this.bucket().filters();\n const patched = { ...current };\n if (TableValueResolver.isFilterValueEqual(current[column.key], next)) {\n delete patched[column.key];\n } else {\n patched[column.key] = next;\n }\n this.bucket().filters.set(patched);\n }\n\n protected exportExcel(): void {\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\n this.exportService.exportToExcel({\n rows,\n columns: this.columns(),\n filename: this.resolveExportFilename(),\n resolveValue: (row, column) => this.resolveCellValue(row, column),\n });\n }\n\n protected printPdf(): void {\n const rows = this.visibleCards().map((card) => this.cardToRow(card));\n this.exportService.printPdf({\n rows,\n columns: this.columns(),\n filename: this.resolveExportFilename(),\n title: this.cardsState().title || undefined,\n resolveValue: (row, column) => this.resolveCellValue(row, column),\n });\n }\n\n private resolveExportFilename(): string {\n const title = this.cardsState().title?.trim();\n return title || this.cardsState().moduleKey || 'cards';\n }\n\n /**\n * Value resolver compatible with `TableExportConfig.resolveValue`. Reuses\n * `TableValueResolver` so currency, dates, entities, booleans export the\n * same way they would from the table view. Date columns (native or entity\n * with viewType `Date`/`DateTime`) are passed through `mtDateFormat` so\n * Excel and PDF show locale-formatted dates instead of raw ISO strings.\n */\n private resolveCellValue(\n row: unknown,\n column: ColumnDef,\n ): string | number | boolean | null {\n const cellValue = TableValueResolver.getProperty(row, column.key);\n if (cellValue === null || cellValue === undefined) return null;\n\n const dateType = this.resolveDateColumnType(column, cellValue);\n if (dateType) {\n const source =\n column.type === 'entity'\n ? TableValueResolver.getEntityValueByType(cellValue, 'sort')\n : cellValue;\n const dateValue = TableValueResolver.resolveDateValue(source);\n if (dateValue === null) return null;\n const formatted = this.dateFormat.transform(dateValue, dateType);\n return formatted || null;\n }\n\n if (column.type === 'entity') {\n return TableValueResolver.getEntityValueByType(cellValue, 'export');\n }\n return TableValueResolver.resolveDisplayValue(cellValue);\n }\n\n private resolveDateColumnType(\n column: ColumnDef,\n cellValue: unknown,\n ): 'date' | 'dateTime' | null {\n if (column.type === 'date') return 'date';\n if (column.type === 'dateTime') return 'dateTime';\n if (column.type !== 'entity') return null;\n\n const viewType = (column as { viewType?: unknown }).viewType;\n const fromColumn =\n typeof viewType === 'string' ? viewType.toLowerCase() : '';\n if (fromColumn === 'datetime') return 'dateTime';\n if (fromColumn === 'date') return 'date';\n\n if (cellValue && typeof cellValue === 'object') {\n const inner = (cellValue as { viewType?: string }).viewType;\n if (inner === 'DateTime') return 'dateTime';\n if (inner === 'Date') return 'date';\n }\n return null;\n }\n\n constructor() {\n // Emit lazyLoad only on filter / search changes for paginated lists,\n // matching mt-table's behaviour (group-by is a pure FE concern, not a\n // re-fetch trigger). Skip the initial firing while the bucket is still at\n // its default empty state so we don't double-fetch on mount.\n let primed = false;\n effect(() => {\n const state = this.cardsState();\n const filters = this.bucket().filters();\n const filterTerm = this.bucket().filterTerm();\n\n if (!state.config.isPaginated) return;\n if (!primed) {\n primed = true;\n if (Object.keys(filters).length === 0 && !filterTerm) return;\n }\n\n queueMicrotask(() =>\n this.lazyLoad.emit({\n filters: {\n ...filters,\n ...(filterTerm ? { generalSearch: filterTerm } : {}),\n },\n pageSize: state.take,\n first: state.skip,\n currentPage: state.skip / Math.max(state.take, 1) + 1,\n } as ClientListLazyLoadEvent),\n );\n });\n }\n}\n","<mt-table-caption\r\n [generalSearch]=\"true\"\r\n [showFilters]=\"true\"\r\n filterMode=\"popover\"\r\n [printable]=\"true\"\r\n [groupable]=\"true\"\r\n [exportable]=\"true\"\r\n [columns]=\"columns()\"\r\n [data]=\"rowRepresentations()\"\r\n [groupColumns]=\"grouping.groupableColumns()\"\r\n [filters]=\"bucket().filters()\"\r\n (filtersChange)=\"bucket().filters.set($event)\"\r\n [filterTerm]=\"bucket().filterTerm()\"\r\n (filterTermChange)=\"bucket().filterTerm.set($event)\"\r\n [groupBy]=\"bucket().groupBy()\"\r\n (groupByChange)=\"bucket().groupBy.set($event)\"\r\n [activeTab]=\"bucket().activeTab()\"\r\n (activeTabChange)=\"bucket().activeTab.set($event)\"\r\n (exportRequested)=\"exportExcel()\"\r\n (printRequested)=\"printPdf()\"\r\n/>\r\n\r\n@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (visibleCards().length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{ \"components.clientComponents.list.noCardsFound\" | transloco }}\r\n </div>\r\n} @else if (grouping.groupingActive()) {\r\n <div class=\"flex flex-col gap-6\">\r\n @for (group of groupedCards(); track group.key) {\r\n <section class=\"flex flex-col gap-3\">\r\n <header\r\n class=\"flex items-center gap-3 px-2 py-2 bg-surface-50 dark:bg-surface-900 border-y border-surface-200 dark:border-surface-700 rounded\"\r\n [style.--mt-group-accent]=\"group.accent ?? 'var(--p-primary-color)'\"\r\n >\r\n <span\r\n class=\"inline-block w-1 h-5 rounded-full\"\r\n [style.background]=\"'var(--mt-group-accent)'\"\r\n ></span>\r\n <span\r\n class=\"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400\"\r\n >\r\n {{ group.columnLabel }}\r\n </span>\r\n <span class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\r\n {{ group.label }}\r\n </span>\r\n <span\r\n class=\"ml-auto inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-300\"\r\n >\r\n {{ group.count }}\r\n </span>\r\n </header>\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of group.cards; track card.id) {\r\n <mt-card\r\n class=\"cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"\r\n 'components.table.filterByThis' | transloco\r\n \"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n </section>\r\n }\r\n </div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of visibleCards(); track card.id) {\r\n @defer (on viewport) {\r\n <mt-card\r\n class=\"cursor-pointer p-5 shadow-sm transition-shadow hover:shadow-md\"\r\n (click)=\"cardClick.emit(card)\"\r\n >\r\n <ng-template #headless>\r\n <mt-entities-preview\r\n [entities]=\"card.entities\"\r\n attachmentShape=\"compact\"\r\n [clickableKeys]=\"clickableEntityKeys()\"\r\n [activeKeys]=\"activeKeysForCard(card)\"\r\n [clickableTooltip]=\"'components.table.filterByThis' | transloco\"\r\n [activeTooltip]=\"'components.table.clearFilter' | transloco\"\r\n (entityClick)=\"onEntityFilterClick(card, $event)\"\r\n />\r\n </ng-template>\r\n </mt-card>\r\n } @placeholder {\r\n <div class=\"min-h-[20rem]\">\r\n <p-skeleton height=\"20rem\" class=\"rounded-lg\" />\r\n </div>\r\n }\r\n }\r\n </div>\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoPipe } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DashboardViewer } from '@masterteam/dashboard-builder';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListInformativeState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-informative-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, DashboardViewer, SkeletonModule, TranslocoPipe],\r\n templateUrl: './client-list-informative-view.html',\r\n})\r\nexport class ClientListInformativeView {\r\n readonly state = input.required<ClientListState>();\r\n\r\n protected readonly informativeState = computed(\r\n () => this.state() as ClientListInformativeState,\r\n );\r\n protected readonly dashboardExtraFilters = computed(() => {\r\n const instanceId = this.informativeState().config.instanceId;\r\n\r\n if (instanceId == null) {\r\n return {};\r\n }\r\n\r\n return { currentId: instanceId };\r\n });\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (informativeState().config.contentStart) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.startSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.tableSpan)\r\n \"\r\n >\r\n <mt-card>\r\n @if (\r\n informativeState().loading &&\r\n !informativeState().dashboardData?.charts?.length\r\n ) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"6rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n </div>\r\n } @else if (informativeState().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ informativeState().error }}\r\n </div>\r\n } @else if (!informativeState().dashboardData?.charts?.length) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n {{\r\n \"components.clientComponents.list.noInformativeDashboard\"\r\n | transloco\r\n }}\r\n </div>\r\n } @else {\r\n <div class=\"min-h-[420px]\">\r\n <mt-dashboard-viewer\r\n [isPage]=\"false\"\r\n [showFilters]=\"false\"\r\n [dashboardData]=\"informativeState().dashboardData\"\r\n [extraFilters]=\"dashboardExtraFilters()\"\r\n />\r\n </div>\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (informativeState().config.contentEnd) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.endSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslocoService } from '@jsverse/transloco';\r\nimport { Subscription } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TableAction } from '@masterteam/components/table';\r\nimport {\r\n RuntimeAction,\r\n RuntimeActionRunner,\r\n resolveActionLabel,\r\n} from '@masterteam/components/runtime-action';\r\nimport { ClientListApiService } from './services/client-list-api.service';\r\nimport { ClientListStateService } from './services/client-list-state.service';\r\nimport {\r\n ClientListRuntimeActionsService,\r\n defaultResolveRecordId,\r\n} from './services/client-list-runtime-actions.service';\r\nimport {\r\n ClientListAreaType,\r\n ClientListConfiguration,\r\n ClientListContentTemplateContext,\r\n ClientListFormConfiguration,\r\n ClientListItemClickedEvent,\r\n ClientListInformativeConfiguration,\r\n ClientListLazyLoadEvent,\r\n ClientListLayoutConfig,\r\n ClientListMode,\r\n ClientListRuntimeRecordActionsConfig,\r\n ClientListRuntimeRecordActionsContext,\r\n ClientListState,\r\n RuntimeTableDisplayRow,\r\n ClientListTableQuery,\r\n ClientListType,\r\n NormalizedClientListConfiguration,\r\n ClientListCard,\r\n} from './models/client-list.model';\r\nimport { ClientListTableView } from './components/client-list-table-view/client-list-table-view';\r\nimport { ClientListCardsView } from './components/client-list-cards-view/client-list-cards-view';\r\nimport { ClientListInformativeView } from './components/client-list-informative-view/client-list-informative-view';\r\n\r\nconst DEFAULT_AREA_TYPE: ClientListAreaType = 'table';\r\nconst DEFAULT_MODE: ClientListMode = 'auto';\r\nconst DEFAULT_TYPE: ClientListType = 'form';\r\nconst DEFAULT_SERVER_PAGE_SIZE = 100;\r\nconst DEFAULT_TABLE_PAGE_SIZE = 100;\r\nconst LOCAL_PAGE_SIZE_SOURCE = 3000;\r\nconst DEFAULT_COLLAPSE_ICON = 'arrow.chevron-up';\r\nconst DEFAULT_EXPAND_ICON = 'arrow.chevron-down';\r\nconst DEFAULT_SIDE_CONTENT_SPAN = 3;\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientListTableView,\r\n ClientListCardsView,\r\n ClientListInformativeView,\r\n ],\r\n providers: [ClientListStateService, ClientListRuntimeActionsService],\r\n templateUrl: './client-list.html',\r\n})\r\nexport class ClientList implements OnDestroy {\r\n private readonly api = inject(ClientListApiService);\r\n protected readonly state = inject(ClientListStateService);\r\n private readonly runtimeActions = inject(ClientListRuntimeActionsService);\r\n private readonly runtimeRunner = inject(RuntimeActionRunner);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n readonly configurations = input.required<ClientListConfiguration[]>();\r\n readonly defaultTake = input(DEFAULT_SERVER_PAGE_SIZE);\r\n\r\n readonly loaded = output<string>();\r\n readonly errored = output<{ key: string; message: string }>();\r\n readonly itemClicked = output<ClientListItemClickedEvent>();\r\n\r\n protected readonly items = this.state.items;\r\n private readonly subscriptions = new Map<string, Subscription>();\r\n private readonly inFlightRequestSignatures = new Map<string, string>();\r\n private readonly fulfilledRequestSignatures = new Map<string, string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const configs = this.configurations();\r\n untracked(() => this.configureItems(configs));\r\n\r\n untracked(() => {\r\n this.state.items().forEach((item) => {\r\n this.loadItem(item);\r\n });\r\n });\r\n });\r\n }\r\n\r\n onLazyLoad(itemKey: string, event: ClientListLazyLoadEvent): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (\r\n !item ||\r\n item.type === 'informative' ||\r\n item.areaType !== 'table' ||\r\n !item.config.isPaginated\r\n ) {\r\n return;\r\n }\r\n\r\n const take = Number(event.pageSize ?? item.take);\r\n const skip = Number(event.first ?? 0);\r\n this.loadTable(item.key, item.config, skip, take);\r\n }\r\n\r\n reload(itemKey?: string): void {\r\n if (itemKey) {\r\n this.reloadByKey(itemKey);\r\n return;\r\n }\r\n\r\n this.items().forEach((item) => {\r\n this.loadItem(item, true);\r\n });\r\n }\r\n\r\n reloadByKey(itemKey: string): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (!item) return;\r\n\r\n this.loadItem(item, true);\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n this.state.toggleExpanded(key);\r\n }\r\n\r\n onTableRowClick(item: ClientListState, row: RuntimeTableDisplayRow): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'table',\r\n item: row,\r\n state: item,\r\n });\r\n }\r\n\r\n onCardClick(item: ClientListState, card: ClientListCard): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'cards',\r\n item: card,\r\n state: item,\r\n });\r\n }\r\n\r\n /**\r\n * Called by the table view when a row's 3-dots menu is opened. Triggers a\r\n * lazy fetch of that row's runtime actions when `runtimeRecordActions` is\r\n * enabled with the default `onMenuOpen` strategy. Skips when the cache is\r\n * still warm — the service handles in-flight dedupe and TTL.\r\n */\r\n onRowActionsRequested(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return;\r\n if ((config.loadStrategy ?? 'onMenuOpen') !== 'onMenuOpen') return;\r\n\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n\r\n /**\r\n * Per-row predicate used by the popover skeleton state.\r\n */\r\n isRowActionsLoading(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n ): boolean {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return false;\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return false;\r\n return this.runtimeActions\r\n .loadingRowKeys()\r\n .has(this.runtimeActions.rowKey(item.key, recordId));\r\n }\r\n\r\n /**\r\n * Per-list merged row-actions, keyed by item.key. Static `rowActions` are\r\n * augmented with one entry per distinct runtime `actionKey` discovered for\r\n * any row in the list, and re-evaluated when the runtime cache changes.\r\n */\r\n protected readonly mergedRowActionsByKey = computed<\r\n ReadonlyMap<string, TableAction[]>\r\n >(() => {\r\n const cache = this.runtimeActions.actionsByRowKey();\r\n const result = new Map<string, TableAction[]>();\r\n for (const item of this.state.items()) {\r\n result.set(item.key, this.computeMergedRowActions(item, cache));\r\n }\r\n return result;\r\n });\r\n\r\n /** Fallback used by the template when no entry exists for an item.key. */\r\n private readonly emptyActions: TableAction[] = [];\r\n private readonly rowActionsLoadingFnCache = new Map<\r\n string,\r\n (row: RuntimeTableDisplayRow) => boolean\r\n >();\r\n\r\n rowActionsFor(item: ClientListState): TableAction[] {\r\n return (\r\n this.mergedRowActionsByKey().get(item.key) ??\r\n item.config.rowActions ??\r\n this.emptyActions\r\n );\r\n }\r\n\r\n rowActionsLoadingFnFor(\r\n item: ClientListState,\r\n ): (row: RuntimeTableDisplayRow) => boolean {\r\n let fn = this.rowActionsLoadingFnCache.get(item.key);\r\n if (!fn) {\r\n const itemKey = item.key;\r\n fn = (row: RuntimeTableDisplayRow) => {\r\n const current = this.state.itemsByKey()[itemKey];\r\n return current ? this.isRowActionsLoading(current, row) : false;\r\n };\r\n this.rowActionsLoadingFnCache.set(itemKey, fn);\r\n }\r\n return fn;\r\n }\r\n\r\n private computeMergedRowActions(\r\n item: ClientListState,\r\n cache: ReadonlyMap<string, RuntimeAction[]>,\r\n ): TableAction[] {\r\n const baseActions = item.config.rowActions ?? [];\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled) return baseActions;\r\n\r\n const prefix = `${item.key}:`;\r\n const prototypes = new Map<string, RuntimeAction>();\r\n for (const [key, actions] of cache) {\r\n if (!key.startsWith(prefix)) continue;\r\n for (const action of actions) {\r\n if (!prototypes.has(action.actionKey)) {\r\n prototypes.set(action.actionKey, action);\r\n }\r\n }\r\n }\r\n\r\n if (prototypes.size === 0) {\r\n return baseActions;\r\n }\r\n\r\n const icon = config.actionIcon ?? 'media.play-circle';\r\n const runtimeActionEntries: TableAction[] = [];\r\n for (const [actionKey, prototype] of prototypes) {\r\n const label = resolveActionLabel(prototype);\r\n runtimeActionEntries.push({\r\n icon: icon as TableAction['icon'],\r\n color: 'secondary',\r\n variant: 'outlined',\r\n label,\r\n tooltip: label,\r\n hidden: (row) => {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return true;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, recordId),\r\n );\r\n return !rowActions?.some(\r\n (a) => a.actionKey === actionKey && a.isAvailable !== false,\r\n );\r\n },\r\n action: (row) => {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) return;\r\n const rowActions = cache.get(\r\n this.runtimeActions.rowKey(item.key, ctx.recordId),\r\n );\r\n const action = rowActions?.find((a) => a.actionKey === actionKey);\r\n if (action) {\r\n void this.executeRuntimeAction(item, ctx, config, action);\r\n }\r\n },\r\n });\r\n }\r\n\r\n return [...baseActions, ...runtimeActionEntries];\r\n }\r\n\r\n private async executeRuntimeAction(\r\n item: ClientListState,\r\n ctx: ClientListRuntimeRecordActionsContext,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n action: RuntimeAction,\r\n ): Promise<void> {\r\n const result = await this.runtimeRunner.execute(action, {\r\n defaultAfterSuccess: 'refresh',\r\n });\r\n\r\n if (result.status !== 'success') return;\r\n\r\n if (result.afterSuccess === 'refresh' || result.afterSuccess == null) {\r\n this.runtimeActions.invalidateList(item.key);\r\n this.reloadByKey(item.key);\r\n config.onActionExecuted?.(action, ctx);\r\n }\r\n }\r\n\r\n private toRuntimeActionsContext(\r\n item: ClientListState,\r\n row: RuntimeTableDisplayRow,\r\n config: ClientListRuntimeRecordActionsConfig,\r\n ): ClientListRuntimeRecordActionsContext | null {\r\n const recordId = this.resolveRecordId(config, row);\r\n if (recordId == null) return null;\r\n\r\n return {\r\n listKey: item.key,\r\n contextKey: item.config.contextKey ?? null,\r\n instanceId: item.config.instanceId ?? null,\r\n moduleId: item.config.moduleId ?? 0,\r\n row,\r\n recordId,\r\n };\r\n }\r\n\r\n private resolveRecordId(\r\n config: ClientListRuntimeRecordActionsConfig,\r\n row: RuntimeTableDisplayRow,\r\n ): number | null {\r\n return (config.resolveRecordId ?? defaultResolveRecordId)(row);\r\n }\r\n\r\n templateContext(item: ClientListState): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n\r\n defaultTitle(item: ClientListState): string {\r\n if (item.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.informativeDashboard',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n item.areaType === 'cards'\r\n ? 'components.clientComponents.list.cards'\r\n : 'components.clientComponents.list.table',\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((sub) => sub.unsubscribe());\r\n this.subscriptions.clear();\r\n this.rowActionsLoadingFnCache.clear();\r\n this.runtimeActions.clearAll();\r\n }\r\n\r\n private configureItems(configs: ClientListConfiguration[]): void {\r\n const previousItems = this.state.itemsByKey();\r\n const hasMultipleConfigs = (configs ?? []).length > 1;\r\n\r\n const normalized: ClientListState[] = (configs ?? []).map(\r\n (config, index) => {\r\n const type = this.resolveType(config);\r\n const isInformative = type === 'informative';\r\n const formConfig = isInformative ? null : this.asFormConfig(config);\r\n const areaType = isInformative\r\n ? DEFAULT_AREA_TYPE\r\n : this.resolveAreaType(formConfig?.areaType);\r\n const mode = isInformative\r\n ? DEFAULT_MODE\r\n : this.resolveMode(formConfig?.mode, formConfig?.columnKeys);\r\n const isPaginated =\r\n !isInformative &&\r\n areaType === 'table' &&\r\n (formConfig?.isPaginated ?? true);\r\n const configuredTablePageSize = this.resolvePositiveInteger(\r\n formConfig?.table?.pageSize,\r\n );\r\n const showHeader = config.showHeader ?? true;\r\n const take =\r\n !isInformative && areaType === 'table'\r\n ? isPaginated\r\n ? (this.resolvePositiveInteger(formConfig?.take) ??\r\n configuredTablePageSize ??\r\n this.defaultTake())\r\n : LOCAL_PAGE_SIZE_SOURCE\r\n : 0;\r\n const collapseEnabled =\r\n showHeader &&\r\n (config.collapse?.enabled ?? true) &&\r\n hasMultipleConfigs;\r\n const layout = this.resolveLayout(config);\r\n const key = config.key ?? this.createItemKey(config, index);\r\n const existing = previousItems[key];\r\n const normalizedConfig = this.toNormalizedConfig(\r\n config,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n showHeader,\r\n collapseEnabled,\r\n layout,\r\n );\r\n\r\n if (isInformative) {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'informative',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: existing?.dashboardData ?? null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n if (areaType === 'cards') {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'cards',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: existing?.areaType === 'table' ? existing.skip : 0,\r\n take,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n },\r\n );\r\n\r\n this.state.setConfigs(normalized);\r\n this.cleanupStaleResources(new Set(normalized.map((item) => item.key)));\r\n }\r\n\r\n private loadItem(item: ClientListState, force = false): void {\r\n if (item.type === 'informative') {\r\n this.loadInformative(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n if (item.areaType === 'cards') {\r\n this.loadCards(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n this.loadTable(item.key, item.config, item.skip, item.take, force);\r\n }\r\n\r\n private loadTable(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const query = this.toTableQuery(config, skip, take);\r\n const requestSignature = this.createTableRequestSignature(config, query);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getRows(config.contextKey!, config.instanceId!, query, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setRowsResult(\r\n key,\r\n response.data,\r\n config,\r\n query.skip,\r\n query.take,\r\n );\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.tableRowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.rowsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadCards(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createCardsRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getCards(config.contextKey!, config.instanceId, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setCardsResult(key, response.data, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message: string =\r\n response.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.cardsLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadInformative(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createInformativeRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api.getInformativeDashboard(config.moduleId).subscribe({\r\n next: (response) => {\r\n this.state.setInformativeResult(key, response.data ?? null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n },\r\n error: (error) => {\r\n if (error?.status === 404) {\r\n this.state.setInformativeResult(key, null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n return;\r\n }\r\n\r\n const message: string =\r\n error?.error?.message ??\r\n error?.message ??\r\n this.transloco.translate<string>(\r\n 'components.clientComponents.list.errors.informativeLoadFailed',\r\n );\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private resolveAreaType(\r\n areaType: ClientListAreaType | undefined,\r\n ): ClientListAreaType {\r\n return areaType === 'cards' ? 'cards' : DEFAULT_AREA_TYPE;\r\n }\r\n\r\n private resolveType(config: ClientListConfiguration): ClientListType {\r\n return config.type === 'informative' ? 'informative' : DEFAULT_TYPE;\r\n }\r\n\r\n private resolveMode(\r\n mode: ClientListMode | undefined,\r\n columnKeys: string[] | undefined,\r\n ): ClientListMode {\r\n if (mode !== 'override') return DEFAULT_MODE;\r\n return (columnKeys ?? []).length > 0 ? 'override' : DEFAULT_MODE;\r\n }\r\n\r\n private toNormalizedConfig(\r\n config: ClientListConfiguration,\r\n type: ClientListType,\r\n areaType: ClientListAreaType,\r\n mode: ClientListMode,\r\n isPaginated: boolean,\r\n take: number,\r\n showHeader: boolean,\r\n collapseEnabled: boolean,\r\n layout: Required<ClientListLayoutConfig>,\r\n ): NormalizedClientListConfiguration {\r\n const informativeConfig = this.asInformativeConfig(config);\r\n const formConfig = this.asFormConfig(config);\r\n\r\n return {\r\n contextKey: formConfig?.contextKey ?? null,\r\n instanceId:\r\n formConfig?.instanceId ?? informativeConfig?.instanceId ?? null,\r\n filters: formConfig?.filters ?? [],\r\n moduleId: informativeConfig?.moduleId ?? 0,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n title: config.title,\r\n showHeader,\r\n columnKeys: formConfig?.columnKeys ?? [],\r\n table: this.resolveTableDisplayConfig(formConfig, take, isPaginated),\r\n headerStart: config.headerStart,\r\n headerEnd: config.headerEnd,\r\n contentStart: config.contentStart,\r\n contentEnd: config.contentEnd,\r\n templateContent: config.templateContent,\r\n rowActions: config.rowActions ?? [],\r\n actionShape: config.actionShape,\r\n dataLoaded: config.dataLoaded,\r\n runtimeRecordActions: config.runtimeRecordActions,\r\n collapse: {\r\n enabled: collapseEnabled,\r\n expandedByDefault: config.collapse?.expandedByDefault ?? true,\r\n collapseIcon: config.collapse?.collapseIcon ?? DEFAULT_COLLAPSE_ICON,\r\n expandIcon: config.collapse?.expandIcon ?? DEFAULT_EXPAND_ICON,\r\n },\r\n layout,\r\n };\r\n }\r\n\r\n private createItemKey(\r\n config: ClientListConfiguration,\r\n index: number,\r\n ): string {\r\n if (this.isInformativeConfig(config)) {\r\n return `informative-${config.moduleId}-${config.instanceId ?? 'scope'}-${index}`;\r\n }\r\n\r\n return [\r\n config.contextKey,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n config.areaType ?? DEFAULT_AREA_TYPE,\r\n index,\r\n ].join('-');\r\n }\r\n\r\n private resolveLayout(\r\n config: ClientListConfiguration,\r\n ): Required<ClientListLayoutConfig> {\r\n const hasStart = !!config.contentStart;\r\n const hasEnd = !!config.contentEnd;\r\n\r\n const startSpan = hasStart\r\n ? this.clampSpan(config.layout?.startSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n let endSpan = hasEnd\r\n ? this.clampSpan(config.layout?.endSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n\r\n if (startSpan + endSpan >= DEFAULT_GRID_COLUMNS) {\r\n endSpan = Math.max(0, DEFAULT_GRID_COLUMNS - startSpan - 1);\r\n }\r\n\r\n const availableForTable = Math.max(\r\n 1,\r\n DEFAULT_GRID_COLUMNS - startSpan - endSpan,\r\n );\r\n const tableSpan = this.clampSpan(\r\n config.layout?.tableSpan ?? availableForTable,\r\n 1,\r\n availableForTable,\r\n );\r\n\r\n return {\r\n startSpan,\r\n tableSpan,\r\n endSpan,\r\n };\r\n }\r\n\r\n private resolveTableDisplayConfig(\r\n config: ClientListFormConfiguration | null,\r\n take: number,\r\n isPaginated: boolean,\r\n ) {\r\n const configuredPageSize = this.resolvePositiveInteger(\r\n config?.table?.pageSize,\r\n );\r\n\r\n return {\r\n pageSize: isPaginated\r\n ? take\r\n : (configuredPageSize ?? DEFAULT_TABLE_PAGE_SIZE),\r\n searchable: config?.table?.searchable ?? false,\r\n exportable: config?.table?.exportable ?? false,\r\n };\r\n }\r\n\r\n private clampSpan(\r\n value: number | undefined,\r\n min = 0,\r\n max = DEFAULT_GRID_COLUMNS,\r\n ): number {\r\n const normalized = Number(value ?? min);\r\n if (!Number.isFinite(normalized)) return min;\r\n return Math.min(max, Math.max(min, Math.trunc(normalized)));\r\n }\r\n\r\n private resolvePositiveInteger(value: number | undefined): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized <= 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n\r\n private cleanupStaleResources(activeKeys: Set<string>): void {\r\n for (const [key, sub] of this.subscriptions.entries()) {\r\n if (!activeKeys.has(key)) {\r\n sub.unsubscribe();\r\n this.subscriptions.delete(key);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n }\r\n }\r\n\r\n for (const key of this.rowActionsLoadingFnCache.keys()) {\r\n if (!activeKeys.has(key)) {\r\n this.rowActionsLoadingFnCache.delete(key);\r\n this.runtimeActions.invalidateList(key);\r\n }\r\n }\r\n }\r\n\r\n private notifyDataLoaded(key: string): void {\r\n const item = this.state.itemsByKey()[key];\r\n if (!item) {\r\n return;\r\n }\r\n\r\n this.maybeEagerLoadRuntimeActions(item);\r\n item.config.dataLoaded?.(this.templateContext(item));\r\n }\r\n\r\n private maybeEagerLoadRuntimeActions(item: ClientListState): void {\r\n const config = item.config.runtimeRecordActions;\r\n if (!config?.enabled || config.loadStrategy !== 'eager') return;\r\n if (item.type !== 'form' || item.areaType !== 'table') return;\r\n\r\n for (const row of item.rows) {\r\n const ctx = this.toRuntimeActionsContext(item, row, config);\r\n if (!ctx) continue;\r\n this.runtimeActions.request(config, ctx);\r\n }\r\n }\r\n\r\n private toTableQuery(\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): ClientListTableQuery {\r\n return {\r\n mode: config.mode,\r\n columnKeys: config.mode === 'override' ? config.columnKeys : undefined,\r\n skip: config.isPaginated ? skip : 0,\r\n take: config.isPaginated ? take : LOCAL_PAGE_SIZE_SOURCE,\r\n };\r\n }\r\n\r\n private createTableRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n query: ClientListTableQuery,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n query.mode,\r\n query.skip,\r\n query.take,\r\n ...(query.columnKeys ?? []),\r\n ].join('|');\r\n }\r\n\r\n private createCardsRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'Card',\r\n ].join('|');\r\n }\r\n\r\n private createInformativeRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.moduleId,\r\n config.instanceId ?? 'scope',\r\n 'dashboard',\r\n ].join('|');\r\n }\r\n\r\n private hasValidIdentifiers(\r\n config: NormalizedClientListConfiguration,\r\n ): boolean {\r\n if (config.type === 'informative') {\r\n return Number.isFinite(config.moduleId) && config.moduleId > 0;\r\n }\r\n\r\n if (!config.contextKey?.trim()) {\r\n return false;\r\n }\r\n\r\n if (config.areaType === 'cards') {\r\n return true;\r\n }\r\n\r\n const instanceId = config.instanceId;\r\n return instanceId != null && Number.isFinite(instanceId) && instanceId > 0;\r\n }\r\n\r\n private getMissingIdentifiersMessage(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n if (config.type === 'informative') {\r\n return this.transloco.translate(\r\n 'components.clientComponents.list.errors.missingModuleId',\r\n );\r\n }\r\n\r\n return this.transloco.translate(\r\n config.areaType === 'cards'\r\n ? 'components.clientComponents.list.errors.missingContextKey'\r\n : 'components.clientComponents.list.errors.missingContextAndInstance',\r\n );\r\n }\r\n\r\n private isInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): config is ClientListInformativeConfiguration {\r\n return config.type === 'informative';\r\n }\r\n\r\n private asInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListInformativeConfiguration | null {\r\n return this.isInformativeConfig(config) ? config : null;\r\n }\r\n\r\n private asFormConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListFormConfiguration | null {\r\n return this.isInformativeConfig(config) ? null : config;\r\n }\r\n\r\n private serializeFilters(\r\n filters: NormalizedClientListConfiguration['filters'] | undefined,\r\n ): string {\r\n return JSON.stringify(filters ?? []);\r\n }\r\n}\r\n","<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"rowActionsFor(item)\"\r\n [actionShape]=\"item.config.actionShape\"\r\n [rowActionsLoadingFn]=\"rowActionsLoadingFnFor(item)\"\r\n (rowActionsRequested)=\"onRowActionsRequested(item, $event)\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n [rowActions]=\"item.config.rowActions\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_GRID_COLUMNS","i1","i2"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/client-components",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.40",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/client-components",
|
|
6
6
|
"linkDirectory": true,
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
"rxjs": "^7.8.2",
|
|
17
17
|
"tailwindcss": "^4.2.2",
|
|
18
18
|
"tailwindcss-primeui": "^0.6.1",
|
|
19
|
-
"@masterteam/forms": "^0.0.
|
|
20
|
-
"@masterteam/dashboard-builder": "^0.0.
|
|
21
|
-
"@masterteam/components": "^0.0.
|
|
19
|
+
"@masterteam/forms": "^0.0.78",
|
|
20
|
+
"@masterteam/dashboard-builder": "^0.0.31",
|
|
21
|
+
"@masterteam/components": "^0.0.171"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"tslib": "^2.8.1"
|
|
@@ -476,7 +476,6 @@ declare class ClientList implements OnDestroy {
|
|
|
476
476
|
declare class ClientListApiService {
|
|
477
477
|
private readonly http;
|
|
478
478
|
private readonly runtimeFetchBaseUrl;
|
|
479
|
-
private readonly tableSettingsBaseUrl;
|
|
480
479
|
private readonly informativeBaseUrl;
|
|
481
480
|
getRows(contextKey: ClientListRuntimeContext, instanceId: number, query: ClientListTableQuery, filters?: ClientListFetchRequestFilter[]): Observable<Response<RuntimeTableRowsResponse>>;
|
|
482
481
|
getCards(contextKey: ClientListRuntimeContext, instanceId?: number | null, filters?: ClientListFetchRequestFilter[]): Observable<Response<ClientListCardsPayload>>;
|